From edf3caafd02ba84db83bc53a4827931ace7b3055 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EC=9E=AC=EC=A4=91?= <126754298+m-a-king@users.noreply.github.com> Date: Sat, 5 Sep 2026 19:50:13 +0900 Subject: [PATCH 1/6] =?UTF-8?q?docs:=20=EC=9D=B4=EA=B4=80=EC=9D=B4=20?= =?UTF-8?q?=EB=81=9D=EB=82=9C=20=EB=92=A4=EC=97=90=EB=8F=84=20=EB=82=A8?= =?UTF-8?q?=EC=95=84=20=EC=9E=88=EB=8D=98=20=ED=8F=AC=ED=8C=85=20=EC=8B=9C?= =?UTF-8?q?=EB=8C=80=20=EB=AC=B8=EC=9E=A5=EC=9D=84=20CLAUDE.md=20=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EA=B1=B7=EC=96=B4=EB=82=B8=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 파싱 이관은 2026-07-08 에 끝났는데 "포팅 규율 (이관 기간 한정)" 절, "포팅 시 Kotlin 원본의 의도를 보존" 문장, "safeLogString 포팅본" 표기가 그대로 남아 있었다. 지금 코드는 포팅 대상이 아니라 이 repo 의 본체라 그 규율은 적용 대상이 없다 - 포팅 절에서 아직 살아 있는 규칙 하나(운영 상수는 @ConfigurationProperties 로 외부화)만 "설정값" 절로 남기고, 기본값 숫자는 코드가 정본이라 문서에 박지 않는다는 이 repo 의 SSOT 원칙에 맞춰 수치를 지웠다 - "TestConventionTest 는 3단계와 함께 이식한다"는 이미 support/TestConventionTest 가 존재해 사실이 아니었다. 현재 상태(./gradlew test 에 포함)로 고쳤다 - 옛 repo 이름 PIKI-Server 를 core 로 바꿨다 - 배경: Fable 5.1 하네스 점검. 모델은 문서를 그대로 따르므로 낡은 사실은 존재하지 않는 절차·이름으로 유도한다 Claude-Session: https://claude.ai/code/session_01Mg69sPkH9gHFqYZVSbf3ru --- CLAUDE.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 6840d05..f7d5bfd 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -12,7 +12,7 @@ core(코틀린)에서 분리된 **상품 추출 서비스**다. 상품 URL(또 ## 언어: Java 25 - 모던 idiom 을 기본으로: `record`(값 객체·DTO), `sealed`(닫힌 분기), pattern matching `switch`. 로컬 변수 `var` 는 우변에서 타입이 자명할 때만. -- **이 repo 는 사람이 직접 읽고 이해하는 것을 우선한다.** 영리한 축약보다 평이하고 읽히는 코드. 포팅 시 Kotlin 원본의 의도를 보존하되 Java 다운 표현으로 옮긴다. +- **이 repo 는 사람이 직접 읽고 이해하는 것을 우선한다.** 영리한 축약보다 평이하고 읽히는 코드. ### Lombok @@ -33,7 +33,7 @@ core(코틀린)에서 분리된 **상품 추출 서비스**다. 상품 URL(또 - **선언부**(클래스·인터페이스·record·enum·상수·필드·메서드·생성자) 주석은 Javadoc(`/** */`). 메서드 본문 안에서만 `//`. - **지운다**: 코드가 이미 말하는 "무엇", 시그니처 재진술 `@param`(`@param region S3 리전`), 클래스 Javadoc 과 같은 말의 반복, 흐름 나레이션(`// 1) fetch 한다`), 자명한 분기 설명, 테스트에서 `@DisplayName`·단언이 이미 말하는 라벨. - **남긴다**: 설계 근거(왜 이 대안을 버렸나), 코드로 안 보이는 외부 제약·함정, 계약·보안 판단의 이유, 도달 불가 분기의 불변식, 외부 명세 링크. 이 "왜" 주석이 이 repo 의 자산이다. -- **SSOT 위반 주석 금지.** 정본이 딴 곳에 있는 수치·목록·동작 — 다른 repo(renderer·PIKI-Server)의 구현 상세, `docs/api-contract.md` 의 계약 서술·타임아웃 예산, **코드의 기본값·상수값**, 다른 클래스가 정본인 분류 — 을 복제하지 않는다(조용히 낡는다). 정본을 가리키는 참조 한 줄로 대신한다. +- **SSOT 위반 주석 금지.** 정본이 딴 곳에 있는 수치·목록·동작 — 다른 repo(renderer·core)의 구현 상세, `docs/api-contract.md` 의 계약 서술·타임아웃 예산, **코드의 기본값·상수값**, 다른 클래스가 정본인 분류 — 을 복제하지 않는다(조용히 낡는다). 정본을 가리키는 참조 한 줄로 대신한다. - **Javadoc 문법 게이트: `./gradlew javadoc` 이 error 0 이어야 한다.** raw `<...>` 는 `{@code