Skip to content

CLAUDE.md 포팅 시대 문장·옛 이름·outbox 어휘·외부 언급 정리 (Fable 5.1 점검) - #63

Merged
m-a-king merged 6 commits into
mainfrom
docs/claude-md-fossils
Sep 6, 2026
Merged

CLAUDE.md 포팅 시대 문장·옛 이름·outbox 어휘·외부 언급 정리 (Fable 5.1 점검)#63
m-a-king merged 6 commits into
mainfrom
docs/claude-md-fossils

Conversation

@m-a-king

@m-a-king m-a-king commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

핵심 (이 절만 읽어도 된다)

  • 무엇: 이관이 끝난 지 두 달 지나도 남아 있던 포팅 시대 문장을 CLAUDE.md 에서 걷어내고, 사실이 아니게 된 진술 두 곳(TestConventionTest 는 이미 존재, repo 이름)을 고쳤다. 살아 있는 규칙 하나를 "설정값" 절 세 줄로 남겼다. 주석·설정 주석의 옛 이름 PIKI-Server 8곳과 폐기된 outbox 어휘 7곳을 현행(core, 파싱 작업 큐)으로 바꿨고, 스타일 결정 기록에서 외부 코드베이스 언급 9곳을 지웠다. 동작 변화 없음(코드는 주석만), 커밋 6개.
  • 판단이 필요한 곳 하나: ## 설정값 절 세 줄. 운영 튜닝 손잡이(UA·타임아웃·리다이렉트 횟수)는 @ConfigurationProperties 로 외부화, 크기 안전 상한은 클래스 상수, 기본값 숫자는 문서에 적지 않음. 코드가 이미 그렇게 돼 있고 상수 주석이 이유를 남기고 있어 그대로 규칙으로 올렸다.
  • 검증: reviewer 서브에이전트가 모든 사실 진술을 코드와 대조했다(TestConventionTest 가 test 태스크에서 제외되지 않음, Properties 클래스 3개 실재, safeLogString 실재, Gemini 클라이언트 현행). 첫 초안의 오류(크기 상한까지 설정으로 옮기라고 읽힘)를 리뷰가 잡아 코드 설계대로 고쳤다. 주석 변경 뒤 Javadoc 게이트(./gradlew javadoc error 0)는 verifier 서브에이전트가 실행해 확인했다. 옛 이름·폐기 어휘·외부 언급은 repo 전수 grep 으로 0건 확인. CI 통과.

Situation

  • 메인 모델을 Fable 5.1 로 고정하는 하네스 점검에서 각 repo 의 CLAUDE.md 를 현행 코드와 대조했다. 모델은 문서를 그대로 따르므로 낡은 사실은 존재하지 않는 절차나 이름으로 유도한다.
  • extractor 의 파싱 이관은 2026-07-08 에 끝났는데 "포팅 규율 (이관 기간 한정)" 절과 포팅 시대 문장이 그대로 남아 있었다. "TestConventionTest 는 3단계와 함께 이식한다" 는 이미 파일이 존재해 사실이 아니었다.
  • 리뷰에서 범위 밖으로 분류됐던 잔재도 같은 성격이라 이 PR 에 포함했다. 옛 repo 이름 PIKI-Server 가 설정 주석·Javadoc 에 8곳, core 가 PR #844 로 폐기한 "outbox" 어휘가 주석 7곳(테스트 쪽은 이미 "파싱 작업 큐")에 남아 신구 어휘가 섞여 있었고, 스타일 결정 기록이 특정 외부 팀의 저장소를 이름·링크로 언급하고 있었다.

Task

  • 적용 대상이 사라진 포팅 규율을 걷어내고, 그 안에서 아직 살아 있는 규칙만 남긴다.
  • 메타 테스트·repo 이름·회수 원장 어휘 같은 사실 진술을 현재 상태로 맞춘다.
  • 스타일 결정 기록에서 외부 코드베이스 언급을 지우되 결정과 근거는 유지한다.

Action

  • CLAUDE.md 문장별 처분:
문장 처분
"포팅 규율 (이관 기간 한정)" 절 3개 항목 절 삭제. 살아 있는 규칙만 "설정값" 절로 남김(아래)
"포팅 시 Kotlin 원본의 의도를 보존하되 Java 다운 표현으로 옮긴다" 삭제
"safeLogString 포팅본" "safeLogString". "반드시" 를 뺀 자리에 이유(쿼리스트링에 토큰이 실릴 수 있다)를 넣었다
"TestConventionTest 는 파싱 포팅(3단계)과 함께 이식한다" "support/TestConventionTest./gradlew test 에 포함된다"
"다른 repo(renderer·PIKI-Server)", "호출자(core outbox)" "다른 repo(renderer·core)", "호출자(core 파싱 작업 큐)"
  • 새 "설정값" 절은 세 줄이다. 운영 튜닝 손잡이(UA·타임아웃·리다이렉트 횟수)는 @ConfigurationProperties 로 외부화한다. 크기 안전 상한(수신 바이트·보존 문자·LLM 입력)은 손잡이가 아니라 안전장치라 클래스 상수로 둔다. 기본값 숫자는 코드가 정본이라 문서에 적지 않는다.
  • 첫 초안은 이관 기간의 작업 지시("하드코딩 상수를 전부 외부화")를 그대로 규칙으로 올려 크기 상한까지 설정으로 옮기라고 읽혔다. 머지 전 reviewer 서브에이전트 전수검사가 이것을 잡았다. 코드는 그 결론을 이미 뒤집었다: FetchProperties Javadoc 과 PruningHtmlParser 주석이 "설정이던 동안 아무도 지정하지 않아 키 이름만 드리프트할 자리가 생겼다" 며 상수로 되돌린 이력을 남기고 있고, GeminiProperties 에는 LLM 입력 cap 필드가 없다. 문서를 코드 설계대로 고쳤다.
  • 옛 이름과 폐기 어휘: application.yml(main 6·test 1)과 GeminiProperties Javadoc 의 PIKI-Server 를 core 로, 텔레메트리 라벨 서술 application=PIKI 를 현행 piki-core 로 바꿨다. ImageStorage·ExtractionController·FallbackProductLinkExtractor·GeminiProperties·PageFetchException·application.yml 의 outbox 를 "파싱 작업 큐" 로 바꿨다. 전부 주석이라 동작 변화는 없다.
  • 스타일 결정 기록: 제목·참고 기준 줄·표 머리·근거 문장 9곳에서 외부 저장소 이름과 링크를 걷어내고 "검토한 관례" 로 일반화했다. 결정(채택·기각·보류)과 근거는 그대로다. 앞서 이 PR 이 끊었던 머리말의 "포팅 파리티" 참조도 시점을 밝혀 고쳤다.
  • Gemini 언급은 그대로 뒀다. 무료 티어 폴백만 제거됐고 유료 Gemini 클라이언트는 본코드 29개 파일에 살아 있다.

Result

  • CLAUDE.md 에 이관 시대 문장이 남지 않는다. 다음에 이 문서를 읽는 세션은 포팅 규율을 적용하려 하거나 없는 이식 작업을 기다리지 않고, 크기 상한을 설정으로 옮기는 잘못된 변경도 하지 않는다.
  • repo 전수 grep 으로 PIKI-Server·outbox·외부 저장소 언급이 0건이다(의도적 표기인 HeadlessExtractionProperties 의 "구 PIKI-HeadlessBrowser" 는 제외).
  • 전수검사에서 사실 확인을 통과한 항목: TestConventionTest 가 test 태스크에서 제외되지 않음(필터·태그·@disabled 없음), 예시 Properties 클래스 3개 실재, safeLogString 실재, Gemini 코드 현행. Javadoc 게이트 통과.

연관 이슈

- 파싱 이관은 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
@m-a-king m-a-king added the docs 문서만 만지는 작업 label Sep 5, 2026
@m-a-king m-a-king self-assigned this Sep 5, 2026
@coderabbitai

coderabbitai Bot commented Sep 5, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: f67837f7-0720-42bb-806b-1b3e35598641


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown

Discord 스레드 연동용 메타데이터입니다. discord-pr-bot 워크플로가 자동 생성하며, 수정·삭제하면 PR 과 Discord 알림 연동이 끊깁니다.

- 앞 커밋의 "설정값" 절은 이관 기간의 작업 지시("하드코딩 상수를 외부화")를 현행 규칙으로 승격시키면서, 그 작업 중에 뒤집힌 결론을 되살렸다. 수신 바이트·보존 문자·LLM 입력 상한은 튜닝 손잡이가 아니라 안전장치라 클래스 상수로 두기로 했고(FetchProperties Javadoc, PruningHtmlParser 주석: 설정이던 동안 아무도 지정하지 않아 키 이름만 드리프트할 자리가 생겼다), GeminiProperties 에는 LLM 입력 cap 필드가 없다
- 다음 세션이 그 줄을 읽고 MAX_FETCH_BYTES 를 FetchProperties 로 옮기면 코드가 명시적으로 거부한 변경을 규칙 준수라고 믿으며 하게 된다. 살아 있는 규칙(손잡이는 외부화)과 살아 있는 예외(안전 상한은 상수)를 함께 적었다
- 로깅의 URL 마스킹 줄은 "반드시" 를 뺀 자리에 이유(쿼리스트링에 토큰이 실릴 수 있다)를 넣어 강제성이 약해 보이지 않게 했다
- 발견 출처: 머지 전 reviewer 서브에이전트 전수검사

Claude-Session: https://claude.ai/code/session_01Mg69sPkH9gHFqYZVSbf3ru
- FetchProperties 에는 재시도 필드가 없다(userAgent·connectTimeout·readTimeout·connectionRequestTimeout·maxRedirects). "재시도" 를 "리다이렉트 횟수" 로 바꿨다
- 크기 상한을 상수로 되돌린 이력은 GeminiHtmlExtractor 에는 없고 HttpPageFetcher·PruningHtmlParser 의 상수 주석에만 있다. "각 상수의 Javadoc" 을 그 두 곳으로 좁혔다

Claude-Session: https://claude.ai/code/session_01Mg69sPkH9gHFqYZVSbf3ru
- docs/style-decisions.md 머리말이 "포팅 파리티 — CLAUDE.md 참조" 라고 적는데, 앞 커밋이 CLAUDE.md 에서 포팅 규율을 걷어내 참조가 끊겼다. 이 문서는 2026-07-20 시점의 결정 기록이라 본문은 그대로 두고, 머리말 한 곳만 "작성 당시엔 포팅 파리티 기간이기도 했다" 로 시점을 밝혔다
- 같은 문서의 22·41행(포팅 파리티 기간의 결정 기록)은 당시 결정의 기록이라 손대지 않았다
- 발견 출처: 머지 전 reviewer 서브에이전트 전수검사(범위 밖 발견 중 이 PR 이 만든 끊긴 참조만 반영)

Claude-Session: https://claude.ai/code/session_01Mg69sPkH9gHFqYZVSbf3ru
- 옛 repo 이름 PIKI-Server 8곳(application.yml 6·test application.yml 1·GeminiProperties Javadoc 1)을 core 로, 텔레메트리 라벨 서술(application=PIKI)은 현행 piki-core 로 고쳤다. 전부 주석이라 동작 변화는 없다
- core 의 재시도·회수 원장은 outbox 가 아니라 item_snapshots 파싱 작업 큐다(core PR #844 로 표기 폐기). 이 repo 주석 6곳(application.yml·ImageStorage·ExtractionController·FallbackProductLinkExtractor·GeminiProperties·PageFetchException)과 CLAUDE.md 가 아직 outbox 라고 불러 신구 어휘가 섞여 있었다. 테스트 쪽은 이미 "파싱 작업 큐" 라 그쪽에 맞췄다
- Javadoc 문법 게이트(./gradlew javadoc error 0)는 verifier 서브에이전트가 확인했다

Claude-Session: https://claude.ai/code/session_01Mg69sPkH9gHFqYZVSbf3ru
- docs/style-decisions.md 가 특정 외부 팀의 저장소를 이름·링크·비교 기준으로 9곳에서 언급하고 있었다. 결정(채택·기각·보류)과 근거는 이 repo 의 것이라 그대로 두고, 제목·참고 기준 줄·표 머리·근거 문장에서 외부 이름만 걷어냈다
- "검토한 관례" 로 일반화했으므로 문서의 결정 목록은 출처 없이도 읽힌다

Claude-Session: https://claude.ai/code/session_01Mg69sPkH9gHFqYZVSbf3ru
@m-a-king m-a-king changed the title CLAUDE.md 의 포팅 시대 문장 정리 (Fable 5.1 점검) CLAUDE.md 포팅 시대 문장·옛 이름·outbox 어휘·외부 언급 정리 (Fable 5.1 점검) Sep 6, 2026
@m-a-king
m-a-king merged commit e359c57 into main Sep 6, 2026
5 checks passed
@m-a-king
m-a-king deleted the docs/claude-md-fossils branch September 6, 2026 10:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs 문서만 만지는 작업

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant