Files
llm-wiki/wiki/log.md
T

161 lines
70 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Wiki Log
---
# Wiki 작업 로그
`/ingest`, `/tag`, `/lint`, `/projectize`, `/interviewize`, `/blogify` 실행 기록.
형식:
```
YYYY-MM-DD HH:mm /command — input → output (간단 메모)
```
---
2026-07-03 00:27 /lint — wiki/blog ca-tmpl 마지막 3개 batch → targeted PASS, status_label ready 승격 (security-baseline-jwt-actuator-secrets + skeleton-governance-registry-verification-test-scorecard + knowledge-capture-workflow outline→본문/code-or-workflow 예시 작성 후 ready. security는 IdP/secret manager/prod 검증 없음, governance는 scorecard/11-gate 전체 자동화 미완료, knowledge는 runtime 기능 아님/confidence medium 경계를 명시. ca-tmpl blog status: ready 20 / outline 0)
2026-07-03 00:21 /lint — wiki/blog ca-tmpl 다음 3개 batch → targeted PASS, status_label ready 승격 (multi-tenancy-isolation-patterns + privacy-file-domain-modeling + sample-fixture-and-adoption outline→본문/code 작성 후 ready. multi-tenancy/storage isolation, privacy/file/DSR, sample external adoption은 미검증/planned 경계를 본문에 명시. ca-tmpl blog status: ready 17 / outline 3)
2026-07-03 00:16 /lint — wiki/blog ca-tmpl 다음 3개 batch → targeted PASS, status_label ready 승격 (config-and-adapter-templates + devops-ci-supply-chain-dx + streaming-response-support outline→본문/code 작성 후 ready. knowledge-capture-workflow는 actually-implemented 없음/documented-only 성격이라 이번 batch에서 제외하고 streaming-response-support로 교체. ca-tmpl blog status: ready 14 / outline 6)
2026-07-03 00:03 /lint — wiki/blog ca-tmpl 다음 3개 batch → targeted PASS, status_label ready 승격 (resource-identifier + observability-log-metric-trace-runbook + runtime-container-health-migration outline→본문/code 작성 후 ready. canonical_sources는 verified project 문서로 제한하고 concept은 관련 개념으로만 표기. ca-tmpl blog status: ready 11 / outline 9)
2026-07-02 23:22 /lint — wiki/blog ca-tmpl 3개 batch → targeted PASS, status_label ready 승격 (boundary-validation 기존 drafting→ready, clean-architecture + transaction-boundary outline→본문/code 작성 후 ready. canonical_sources는 verified project 문서로 제한하고 draft concept은 관련 개념으로만 표기)
2026-07-02 23:13 /lint — wiki/blog ca-tmpl 다음 3개 batch → targeted PASS, status_label ready 승격 (transactional-outbox + idempotency-key + data-layer outline→본문/code 작성 후 ready. canonical_sources는 verified project 문서로 제한. 전역 --all은 기존 누적 이슈로 FAIL 277 / PASS 575, stale 후보 22건)
2026-07-02 23:12 /blogify — wiki/projects/ca-tmpl 남은 17개 verified canonical → wiki/blog/ca-tmpl-*-2026-07-02.md outline scaffold 17개 생성 (clean architecture, config/adapter, data layer, devops, idempotency, knowledge workflow, multi-tenancy, observability, privacy/file/domain, resource id, runtime, sample/adoption, security, governance, streaming, transaction, outbox)
2026-07-02 22:58 /blogify — wiki/blog/ca-tmpl-boundary-validation-mapping-2026-07-02.md outline → drafting (본문 초안 + 실제 ca-tmpl 코드 발췌 추가. Patch 3-state, validation/mapping 분리, Jackson allowlist, ArchUnit boundary rule, ACL 경계 정리)
2026-07-02 22:43 /blogify — wiki/projects/ca-tmpl/boundary-validation-mapping.md → wiki/blog/ca-tmpl-boundary-validation-mapping-2026-07-02.md (verified project canonical 기반 blog outline scaffold 생성. 요청 경로 오타 boundry→boundary 보정. validation/mapper/PATCH/ArchUnit/ACL 검증 경계 정리)
2026-07-02 19:45 /lint — wiki/blog/ca-tmpl-api-error-envelope-design-2026-07-02.md + wiki/blog/ca-tmpl-api-evolution-and-schema-2026-07-02.md → targeted PASS, status_label ready 승격 (개별 structure lint PASS, 사실/의견/증거등급 경계 확인, 금지 마케팅 표현 정리. 전역 --all 은 기존 raw/template 누적 실패로 FAIL 277 / PASS 557)
2026-07-02 19:29 /blogify — wiki/blog/ca-tmpl-api-evolution-and-schema-2026-07-02.md outline → drafting (prose-style 기준 실제 블로그 초안 본문 추가. API contract baseline / documented-only deprecation / serialization output pin 경계 보강, ca-tmpl 실제 코드 발췌 추가)
2026-07-02 19:18 /blogify — wiki/projects/ca-tmpl/api-evolution-and-schema.md → wiki/blog/ca-tmpl-api-evolution-and-schema-2026-07-02.md (verified project canonical 기반 blog outline scaffold 생성. API contract baseline / compatibility-deprecation / schema-serialization 검증 경계 분리)
2026-07-02 18:59 /blogify — wiki/blog/ca-tmpl-api-error-envelope-design-2026-07-02.md outline → drafting (실제 블로그 초안 본문 추가. prose-style 기준으로 쉬운 설명/맥락/경계 보강, ca-tmpl 실제 코드 발췌 추가)
2026-07-02 18:44 /blogify — wiki/projects/ca-tmpl/api-error-envelope-design.md → wiki/blog/ca-tmpl-api-error-envelope-design-2026-07-02.md (verified project canonical 기반 blog outline scaffold 생성. ProblemDetail 거부, custom envelope 구현/로컬 검증 범위, 과장 금지 경계 정리)
2026-07-02 18:35 /lint — wiki/projects/ca-tmpl draft 12개 code-evidence 대조 후 verified 승격 → `/home/donghyeon/workspace/ca-tmpl/src ./gradlew check` BUILD SUCCESSFUL 근거로 idempotency/outbox/security/runtime/sample/devops/config/data/governance/privacy/multi-tenancy/knowledge workflow 문서 갱신. ca-tmpl project docs: total 20, draft 0, verified 20.
2026-07-02 18:26 /lint — wiki/projects/ca-tmpl draft 12개 status 승급 사전 점검 → structure PASS 12/12, stale source WARN 있음, `/home/donghyeon/workspace/ca-tmpl/src ./gradlew check` BUILD SUCCESSFUL. 결론: 다수 문서가 실제 코드보다 뒤처져 본문 갱신 후 verified 승급 필요.
2026-07-02 17:38 /ingest — ca-tmpl raw/blog-topics 남은 16개 전체 batch → existing wiki/projects canonical 10개 + 신규 1개. Processed: archunit-generic-return-type-purity-query-port, archunit-testcompileonly-fixture-annotation-pattern, archunit-violations-as-data-pattern, clean-architecture-boundary-enforcement, clean-architecture-reference-project-adoption, digest-first-java-release-pipeline, domain-modeling-guardrails-as-archunit-fitness-functions, framework-free-method-authorization-clean-architecture, gradle9-java21-static-analysis-baseline, logback-layer1-secret-masking-json-vs-pattern, post-implementation-knowledge-capture-workflow, sample-fixture-dual-mode-build-matrix, spring-async-taskdecorator-bounded-executor-saturation-shutdown, spring-boot-3-configprops-record-multi-constructor-binding, spring-security-filter-layer-error-envelope, test-taxonomy-archunit-enforcement. Target canonical: clean-architecture-package-layout, skeleton-governance-registry-verification-test-scorecard, sample-fixture-and-adoption, devops-ci-supply-chain-dx, security-baseline-jwt-actuator-secrets, api-error-envelope-design, observability-log-metric-trace-runbook, runtime-container-health-migration, config-and-adapter-templates, streaming-response-support, 신규 knowledge-capture-workflow. 모든 raw blog-topic `status_label: ready-for-canonical`, `액션: promote-to-canonical` 갱신.
2026-07-02 17:25 /ingest — ca-tmpl raw/blog-topics 10개 batch → existing wiki/projects canonical 8개. Processed: env-example-drift-gate-gradle, spring-conditional-on-property-optional-adapter-template, spring-boot-startup-exit-code-propagation, hikaricp-inter-knob-constraints-startup-guard, skip-locked-outbox-per-aggregate-fifo-gate, idempotency-executor-application-layer-clean-architecture, operational-error-envelope-meta-category-migration, archunit-jackson-default-typing-cve-2019-14379-block, ci-gate-wiring-vs-policy-ownership, contract-registry-schema-owner-vs-row-owner-gate. Target canonical: api-error-envelope-design + boundary-validation-mapping (`verified`, blogify 가능), config-and-adapter-templates + runtime-container-health-migration + data-layer-persistence-cache-outbound + transactional-outbox-pattern + idempotency-key-design + devops-ci-supply-chain-dx + skeleton-governance-registry-verification-test-scorecard (`draft`, blogify 전 review/verify 필요). 모든 raw blog-topic `status_label: ready-for-canonical`, `액션: promote-to-canonical` 갱신.
2026-07-02 16:53 /ingest — raw/blog-topics/api-deprecation-sunset-header-migration-window-2026-07-02.md → wiki/projects/ca-tmpl/api-evolution-and-schema.md (blog-topic canonicalization). 기존 project canonical의 compatibility/deprecation 축에 raw seed를 연결하고, source-backed 주장(`Sunset`/`Deprecation` paired usage, OpenAPI `deprecated: true`, breaking-change 분류)과 project-local policy(90d/30d window, release gate, compatibility fixture)를 분리 기록. raw blog-topic `status_label: ready-for-canonical`, `액션: promote-to-canonical` 로 갱신. 이후 `blogify` 가능하나 운영 deprecation 경험/410 cutover 실측처럼 쓰면 안 됨.
2026-07-02 17:05 /ingest — raw/blog-topics/spring-boot-serialization-contract-pins-2026-07-02.md + raw/blog-topics/spring-responseentityexceptionhandler-transport-failure-envelope-2026-07-02.md → wiki/projects/ca-tmpl/api-evolution-and-schema.md + wiki/projects/ca-tmpl/api-error-envelope-design.md (blog-topic canonicalization). serialization 글감은 output serialization pin/effective ObjectMapper test/BigDecimal constructor guard 범위로 project canonical에 연결. transport failure 글감은 413/406/415/405(+Allow)/412 verified row와 Spring MVC `ResponseEntityExceptionHandler` override 경계로 연결. 두 raw blog-topic 모두 `status_label: ready-for-canonical`, `액션: promote-to-canonical` 갱신. 이후 `blogify` 가능하나 입력측 deser/per-API money 예제와 Spring MVC 전체 예외 포괄은 과장 금지.
2026-07-02 17:02 /ingest — ca-tmpl raw/blog-topics 10개 batch → existing wiki/projects canonical 6개. Processed: boundary-validation-mapper-responsibility-map, streaming-response-not-supported-archunit-ban, cache-backend-router-fail-open-decorator, cache-consistency-after-commit-stampede-contract, webhook-full-jitter-dlq-observability, webhook-signature-replay-contract, webhook-ssrf-egress-proxy-redirect-block, jvm-oom-vs-container-oomkill-exit-137, secret-source-port-restart-only-rotation, contract-verification-suite-release-gates. Target canonical: boundary-validation-mapping + streaming-response-support (`verified`, blogify 가능), data-layer-persistence-cache-outbound + runtime-container-health-migration + security-baseline-jwt-actuator-secrets + skeleton-governance-registry-verification-test-scorecard (`draft`, blogify 전 review/verify 필요). 모든 raw blog-topic `status_label: ready-for-canonical`, `액션: promote-to-canonical` 갱신.
2026-07-02 17:06 /ingest — ca-tmpl raw/blog-topics 10개 batch → existing wiki/projects canonical 7개. Processed: clean-architecture-module-blueprint, transaction-port-abstraction-over-spring-transactional, transaction-isolation-vendor-default-pin, ulid-crockford-base32-excluded-letters, identifier-governance-rule-scoping-by-id-kind, sample-domain-contract-fixture-clean-architecture, w3c-traceparent-fork-activated-seam, gitea-act-dependency-security-gate-portability, jdk-httpclient-dns-connectexception-classification, micrometer-meterfilter-resilience4j-functioncounter. Target canonical: clean-architecture-package-layout + transaction-boundary-abstraction + resource-identifier-format + observability-log-metric-trace-runbook (`verified`, blogify 가능), sample-fixture-and-adoption + devops-ci-supply-chain-dx + data-layer-persistence-cache-outbound (`draft`, blogify 전 review/verify 필요). 모든 raw blog-topic `status_label: ready-for-canonical`, `액션: promote-to-canonical` 갱신.
2026-07-02 17:16 /ingest — ca-tmpl raw/blog-topics 10개 batch → existing wiki/projects canonical 5개. Processed: spring-actuator-health-probe-group-split, java21-context-propagation-strategy-virtual-threads, binary-readiness-scorecard-clean-architecture-skeleton, runbook-coverage-junit-contract-test, repository-capability-archunit-fitness-function, persistence-audit-metadata-clean-architecture, distributed-lock-transaction-commit-boundary, executable-clean-architecture-onboarding, five-stage-local-bootstrap-contract, trivy-suppression-governance-static-gate. Target canonical: observability-log-metric-trace-runbook + clean-architecture-package-layout (`verified`, blogify 가능 for runbook/onboarding), runtime-container-health-migration + skeleton-governance-registry-verification-test-scorecard + data-layer-persistence-cache-outbound + devops-ci-supply-chain-dx (`draft`, blogify 전 review/verify 필요). 모든 raw blog-topic `status_label: ready-for-canonical`, `액션: promote-to-canonical` 갱신.
2026-05-21 — 저장소 초기 골격 생성 (CLAUDE.md, templates, .claude/commands, 디렉터리 구조)
2026-05-21 — 피드백 반영: (1) CLAUDE.md §4에 index.md/log.md 구조 파일 예외 명시, (2) wiki/index.md frontmatter 정리, (3) 템플릿 4종의 예시 wikilink를 백틱+`{{placeholder}}`로 중성화, (4) raw/project-notes/project-infra-overview.md 스텁 폼 생성 (첫 사이클 검증 대기)
2026-05-21 — 피드백 반영 2차: (1) source-summary를 wiki/concepts 전용으로 범위 명확화, (2) raw/ 원본 발췌용 raw-source-template 신규, (3) concept-template에서 Evidence Level 제거하고 한계/주의점 추가, Project Application은 링크 전용, (4) interview-template에 사실/추론/확인필요·면접 범위·Sources 섹션 추가, (5) /ingest 템플릿 분기 업데이트, /interviewize에 신규 섹션 채우기 지시 추가
2026-05-21 — daily 카테고리 추가: raw/daily-notes/ 디렉터리, daily-note-template, /daily 스캐폴딩 커맨드 신규. CLAUDE.md §4 source_type에 daily-note 추가, §5 신뢰도 표에 daily-note 행 추가. /ingest에 daily-note 특수 처리(promotable 항목만 추출, 원본은 raw 영구 보관) 절차 추가
2026-05-21 — branch 단위 작업 추적 추가: raw/branch-notes/ 디렉터리, branch-note-template, /branch 스캐폴딩 커맨드 신규. daily-note-template에 "활성 브랜치" 섹션 + `[branch-name]` 프리픽스 패턴 도입 (한 일/트러블슈팅/계획/내일로). CLAUDE.md §4 source_type에 branch-note 추가, §5 신뢰도 표에 branch-note 행 추가. /ingest에 branch-note 특수 처리(머지 시 완료 후 정리의 verified만 wiki/projects/로 추출, 원본은 raw 영구 보관) 절차 추가
2026-05-21 — 일관성 동기화: (1) /ingest 1차 분류 목록에 daily-note·branch-note 추가, (2) /lint의 "raw 미변환 자료" 검사에 daily-notes/branch-notes 영구 보관 예외 추가하고 promotable 추출 누락만 검사하도록 변경, (3) CLAUDE.md §1 핵심 흐름에 /daily·/branch 캡처 단계 명시, §2 디렉터리 표의 commands 셀을 캡처/변환·품질/출력 3그룹으로 재정리, §14 명령어 우선순위를 같은 3그룹 구조로 재작성
2026-05-21 — Canonical/Derived 문서 위계 도입 (실무 문서 수준): (1) CLAUDE.md §1에 최상위 원칙 3줄(raw=증거, concepts+projects=canonical, interview/portfolio/blog=파생) 명시, §4 status enum에 `published-ready` 추가, §6 evidence enum에 `prod-verified` 추가하고 외부 산출물 허용 등급 표 추가, §11에 canonical 우회·status 미달 파생 금지 3항목 추가, §14에 status 게이트 안내, §15 "문서 위계 및 파생 규칙" 신설 (canonical/파생 정의, 승급 단계, 명령별 허용 범위 표, 10항목 품질 기준). (2) /ingest는 wiki/concepts·wiki/projects만 생성하도록 제한, daily/branch의 면접·포트폴리오 추출도 "후보 표기만"으로 약화. (3) /interviewize·/blogify는 원천 status가 reviewed|verified|published-ready 미만이면 **중단**, canonical 외 경로 입력 시도 중단. Sources에 canonical 링크 필수. (4) /lint에 §15 우회 검사(섹션 E) 추가: Sources의 canonical 링크 누락, portfolio가 projects 미참조, status 미달 파생, raw 직접 참조를 모두 CRITICAL로. prod-verified 등급 검사 추가. (5) project-template에 "운영 검증(prod-verified)" 섹션 추가, branch-note·interview-template·daily-note·project-infra-overview에 prod-verified 등급 전파.
2026-05-21 — 잔여 일관성 보정 4건: (1) /projectize 증거 등급 판정 목록에 prod-verified 추가, (2) /query의 "사실(verified)" 판정에 published-ready 포함하고 canonical 우선 명시, (3) /interviewize 작업절차 본문의 "면접에서 말해도 되는 범위"에 prod-verified 추가하여 규칙 섹션과 일치, (4) wiki/index.md를 canonical/derived 2-layer 구조로 재작성하고 각 카테고리별 §15 게이트 조건 명시, 승급 흐름 다이어그램과 canonical 우회 의심 문서 탐지용 Dataview 쿼리 추가.
2026-05-21 — interview-template "사실/추론/확인 필요" 섹션에 published-ready 포함, 원천을 canonical로 명시, "확인 필요"에 draft 이하 status 조건 추가하여 /query 본문과 표현 일치
2026-06-04 — /ingest reconcile — raw/branch-notes/feature-operational-error-observability-foundation → wiki/projects/ca-tmpl/{api-error-envelope-design, observability-log-metric-trace-runbook} + wiki/concepts/{api-error-envelope-design, observability-log-metric-trace-runbook} (ca-tmpl @0c996fc 코드 실측 대조; envelope `meta`/`category` 1급·`Category` 10-enum·MDC snake_case·`HeaderSanitizer`·ProblemDetail ArchUnit ban actually-implemented+locally-verified 확정, Retry-After/span ERROR는 documented-only 유지; observability project doc draft→verified, 두 concept doc에 Claim-backed Knowledge + 내가 설명할 수 있어야 하는 것 섹션 추가, branch-note status verified; stale `com.example.blog`/`sample-ticket` 잔재 없음 확인; 4 docs linter PASS)
2026-05-22 — ca-tmpl Phase A 완료: 4차 audit에서 발견한 자기모순/SSOT/TODO drain 일괄 해소. (1) numeric conflict 15건 (executor 25s→19s, application-port `database default``READ_COMMITTED`, `AUTHORIZATION``AUTHZ` enum 정합, MDC 6 vs 4 rationale, "9+2=11" 통일, cardinality vs ULID 분리, audit retention 단일 owner, outbox claim isolation 명시, log 10% vs trace 1% 의도, idempotency·JWT 24h invariant, NESTED forbidden, alert dedup vs P1, file size 3계층, outbound shutdown retry suppression). (2) SSOT violation 7건 (audit retention=data-retention, TaskDecorator=background-job, security↔secrets 양방향, runtime-health↔integration-adapter 양방향, identifier layer mapping, flaky owner=ci-quality-gates). (3) 28+ 파일 TODO drain. (4) self-duplicate 4건 해소. (5) Work Item Contract 표 양식을 4 mandatory + 3 conditional로 relax. 5개 병렬 에이전트로 39+ 파일 편집.
2026-05-22 — ca-tmpl Phase B 완료: 7개 registry yaml 본문 작성. `ca-tmpl/docs/registries/{error-codes,env-keys,secrets-classification,headers,mdc-keys,metrics,capabilities}.yaml` 총 196 rows (49/51/15/15/19/25/7). 모든 row에 source branch+line 인용 yaml comment. 추측 row 0건. cross-registry 정합(header↔MDC↔envelope, env↔secrets, capability↔repository-access) 보장. 4개 병렬 에이전트로 작성.
2026-05-22 — ca-tmpl Phase C1 완료: canonical contract 문서(`raw/project-notes/ca-skeleton-operational-contract.md`)에 yaml SSOT reference 반영. §21 inline 6개 표를 yaml reference + 7개 요약 subsection으로 재구성, stale category 명명(AUTHENTICATION/AUTHORIZATION/PERSISTENCE/DEPENDENCY/MESSAGE/CACHE/NOTIFICATION) → foundation enum(AUTH/AUTHZ/DATA_INTEGRITY/TRANSIENT_DEPENDENCY/PERMANENT_DEPENDENCY) 정합. §28에 Phase A/B/C1 closures 표 + 세부 closure 4종 + pending 7건 추가. frontmatter last_reviewed 2026-05-22로 갱신.
2026-05-22 — ca-tmpl Phase D1+D2 완료. D1: VAGUE 38건 → IMPLEMENTABLE 정밀화 (16 owner branch), PARTIAL 88건의 3개 공통 패턴 결정(capability marker=@UseCaseRepositoryAccess, disabled detection=3-layer, claim parsing=APP_MULTI_INSTANCE_ENABLED), needs-confirmation 2건 closure(PII forbidden=Logback+Jackson 이중 layer, dry-run SSOT=onboarding). D2: 5종 runbook stub 작성(auth/authz/rate-limit/internal/dependency, `ca-tmpl/docs/runbooks/`). canonical contract 문서 §28에 D1/D2 closures 추가, Pending 표에서 6 row 제거.
2026-05-22 — ca-tmpl 운영 artifact 이전: `wiki/projects/ca-tmpl/{registries,runbooks}/` → ca-tmpl repo(`/home/donghyeon/workspace/ca-tmpl/`)의 `docs/{registries,runbooks}/`. 운영 데이터(yaml row table, 운영 procedure)는 LLM Wiki canonical knowledge 영역(`wiki/projects/`)에 부적합 — markdown frontmatter 위주의 wiki/projects/ 양식과 어긋남. 9개 파일(7 yaml + 5 md) 이동, LLM Wiki 내 27건 path reference를 `ca-tmpl/docs/...`로 일괄 갱신, 빈 `wiki/projects/ca-tmpl/` 디렉터리 제거. canonical contract 문서(`raw/project-notes/ca-skeleton-operational-contract.md`)는 LLM Wiki에 잔존(spec/지식 성격), 운영 artifact만 ca-tmpl repo로 분리.
2026-05-22 — ca-tmpl 외부 근거 raw 자료 수집 (Phase 외부 research): 6개 topic 병렬 조사로 raw 54개 파일 신규 작성. Topic 1 Architecture Layout (12: feature-first/layer-first/hexagonal/Modulith/onion), Topic 2 Transaction Boundary (8: TransactionPort/@Transactional/TransactionTemplate/Arrow/Custom AOP), Topic 3 Outbox (10: SKIP LOCKED/Debezium/Kafka Connect SMT/dual-write antipattern/event sourcing/Spring @TxEventListener/Netflix DBLog), Topic 4 Error Envelope (8: RFC 7807/Spring ProblemDetail/Google rpc.Status/JSON:API/GraphQL/Stripe/GitHub/Toss), Topic 5 Idempotency (9: Stripe v1/v2/IETF draft/PayPal/Powertools/Square/GitHub/Toss/Brandur), Topic 6 Multi-tenancy (9: AWS Silo/Pool/Hibernate strategy/Azure Deployment Stamps/Atlassian/Auth0/Stripe Citus/subdomain/hybrid). raw 파일은 `raw/official-docs/``raw/company-tech-blogs/`에 분리 배치, raw-source-template 형식 준수.
2026-05-22 — ca-tmpl 외부 근거 양방향 wikilink 연결: 6개 topic 병렬 처리로 68 파일 편집(raw 54 + branch-notes 14). 각 raw 파일 끝에 "관련 ca-tmpl branch / contract" 섹션 추가(owning branch + ca-skeleton-operational-contract 섹션 anchor + 대안 그룹 식별 + 본 source의 alternative 내 위치 명시). 각 owning branch-note에 "외부 근거 / 대안 조사 (2026-05-22 — Topic N)" 섹션 추가(채택 결정 source + 검토 대안 source + 비교 핵심 1줄). ca-skeleton-operational-contract.md §29 "외부 근거 / 대안 조사 인덱스" 신설 — 6 topic 요약과 owning branch-note wikilink로 hub 역할. Pending 표에 Phase E(wiki/concepts/ 합성) 추가.
2026-05-22 — ca-tmpl 잔여 29 branch 외부 근거 조사 완료: 10개 그룹(G-A 관측 / G-B 보안 baseline / G-C Data layer / G-D Runtime·Lifecycle / G-E DevOps·CI / G-F API evolution / G-G Skeleton governance / G-H Sample·adoption / G-I Config·adapter / G-J Privacy·file·domain) 병렬 처리로 raw 99개 신규(목표 86+ 초과). 누적 외부 근거 raw 153개(Topic 1-6: 54 + G-A~J: 99). 각 raw 파일에 "관련 ca-tmpl branch / contract" 섹션 + 각 owning branch-note에 "외부 근거" 섹션 추가로 양방향 wikilink 완성. 모든 43 branch가 자기 결정의 외부 근거를 명시. §29 master index에 10 Group row 추가, "다음 단계 Phase E" 갱신(16 topic → 16 wiki/concepts/ 문서). 후속 보강 후보 8건 식별(Cosign identity 정책, SLSA spec 필드명, Sunset+Deprecation 함께 정책, Protobuf reserved 시맨틱, ArchUnit registry 대안, ArchUnit Layer 2/3 검증 source, per-principal envelope key 구조, 한국 보안 기술블로그). 다음 단계: 153 raw → 16 wiki/concepts/ 문서로 합성 (concept-template 형식).
2026-05-22 — CLAUDE.md ↔ templates / index / log ↔ project-infra-overview 양방향 연결: CLAUDE.md §2에 "주요 문서 wikilinks" subsection 추가 (templates 7종 + wiki/index + wiki/log + project-notes 2종). wiki/index.md에 "진행 중 프로젝트 노트" 및 "운영 규칙 / 템플릿" 섹션 추가. project-infra-overview.md에 관련 문서 wikilinks 추가 (CLAUDE / wiki/index / ca-skeleton-operational-contract / project-template). Obsidian graph view에서 CLAUDE.md가 LLM Wiki hub로 작동.
2026-05-22 — Phase E 완료: 16개 wiki/concepts/ 문서 신규 합성 (16 병렬 에이전트). T1 clean-architecture-package-layout, T2 transaction-boundary-abstraction, T3 transactional-outbox-pattern, T4 api-error-envelope-design, T5 idempotency-key-design, T6 multi-tenancy-isolation-patterns, G-A observability-log-metric-trace-runbook, G-B security-baseline-jwt-actuator-secrets, G-C data-layer-persistence-cache-outbound, G-D runtime-container-health-migration, G-E devops-ci-supply-chain-dx, G-F api-evolution-and-schema, G-G skeleton-governance-registry-verification-test-scorecard, G-H sample-fixture-and-adoption, G-I config-and-adapter-templates, G-J privacy-file-domain-modeling. 각 문서는 concept-template (Summary / Standard / 한계 / Project Application / Interview Questions / Do Not Overclaim / Sources) 준수, frontmatter status=draft / source_type=llm-generated / confidence=medium, 153 raw 자료를 Sources로 wikilink 인용, owning branch-notes + canonical SSOT (§N) 링크. CLAUDE.md §11/§15 (canonical layer 무경유 파생 금지) 준수, "내가 했다" 표현 금지(concept layer 일반론). wiki/index.md 주요 허브 문서 섹션에 16 concepts hub 등록. 다음 단계: 사용자 review → status draft → reviewed → verified 승급 (또는 ca-tmpl 실 코드 작성 단계로 진입 시 wiki/projects/ca-tmpl 신규 생성).
2026-05-22 — Phase E follow-up: wiki/projects/ca-tmpl/ 16 문서 신규 생성 (16 병렬 에이전트, 4 라운드). 각 concept과 1:1 매핑되는 project 문서 작성: clean-architecture-package-layout / transaction-boundary-abstraction / transactional-outbox-pattern / api-error-envelope-design / idempotency-key-design / multi-tenancy-isolation-patterns / observability-log-metric-trace-runbook / security-baseline-jwt-actuator-secrets / data-layer-persistence-cache-outbound / runtime-container-health-migration / devops-ci-supply-chain-dx / api-evolution-and-schema / skeleton-governance-registry-verification-test-scorecard / sample-fixture-and-adoption / config-and-adapter-templates / privacy-file-domain-modeling. 각 문서는 project-template (프로젝트 컨텍스트 / actually-implemented / locally-verified / prod-verified / documented-only·planned / 면접 범위 / 과장 금지 / 관련 개념 / Sources) 준수. **공통 증거 상태**: actually/locally/prod-verified 모두 "없음" — Phase C2 (실제 코드 작성, /home/donghyeon/workspace/ca-tmpl/) 미진입. 모든 결정은 documented-only (canonical SSOT에만 존재). 면접 범위 3단계 (자신 있게 / 적당히 / 답하면 안 됨) 분리, "구현했다 / 측정했다 / 운영했다" 표현 금지. wiki/projects/ca-tmpl/_index.md (16문서 hub) 신설. wiki/index.md 갱신: ca-tmpl hub를 concepts+projects 통합 구조로 재편, project _index를 hub 최상단에 추가. 다음 단계: Phase C2 진입 시 각 project 문서의 actually-implemented / locally-verified 섹션 갱신.
2026-05-22 19:58 /lint — wiki/concepts (16) + wiki/projects/ca-tmpl (16+_index) → CRITICAL 1, WARN 3, INFO 2
2026-05-22 20:14 /lint follow-up — CRITICAL 1 + WARN 3 처리: (C1) 3개 raw 파일(layer-first-baeldung / hexagonal-cockburn / multitenancy-stripe-citus)에 status: needs-confirmation + confidence: low 추가; (W1) wiki/projects/ca-tmpl/_index.md에 Sources 섹션 추가 (canonical SSOT + CLAUDE §15 링크); (W2) 16 project doc 헤딩 false-positive 확인 후 종결. 외부 근거 후속 보강 8건 병렬 dispatch 완료: G-E Cosign identity 정책 / G-E SLSA v1.0 spec 필드명 / G-F Sunset+Deprecation paired / G-F Protobuf reserved JSON 흉내 / G-G ArchUnit annotation-as-registry / G-I ArchUnit Layer 2/3 / G-J per-principal envelope key (GDPR Art.17 cryptographic erase) / G-B 한국 보안 블로그. 신규 raw 9 파일 추가 (8 official-docs + 우아한형제들+토스페이먼츠 actuator 2건). branch-notes 7개 갱신 (외부 근거 + 결정 사항 추가), concepts 5개 갱신 (한계 + Sources), projects 5개 갱신 (documented-only). canonical SSOT §29 후속 보강 후보 섹션을 "후속 보강 결과 (처리 완료)" 테이블로 재편 + 잔여 follow-up 4건 명시. 명백한 오류 정정 2건: SLSA 필드명 / Deprecation 헤더 누락. 결정 추가 3건: Cosign identity 필수 / Sunset+Deprecation paired / envelope key 구조 필요. 평가 후 결정 유지 1건: markdown SSOT (annotation-as-registry 거부). needs-confirmation 보류 4건: Protobuf reserved / ArchUnit Layer 2 / envelope key 구체 패턴 / 한국 JWT-secret. 누적 raw: 162개. 누적 ca-tmpl wiki: 16 concepts + 16 projects + 1 _index = 33 문서. 다음 단계: 32 wiki 문서 사람 review → status draft → reviewed → Phase C2 코드 작성 진입.
2026-05-25 /URL.md 재구성 — 빈 0-byte placeholder를 URL Inventory hub로 변환. 162→172개 raw 파일(official-docs 123 + company-tech-blogs 45 + personal-blog 4)에서 url + archive_url + status + source_type 일괄 추출. canonical SSOT §29 동일 구조(T1-T6 + G-A~J)로 16개 그룹 분류. 각 entry: 원본 URL 직접 링크 + raw 파일 wikilink + archive 누락 ⚠️ 마킹 + needs-confirmation 🔶 마킹 + source_type [official]/[blog]/[personal]. archive 누락 170건 가시화(95% 미완), needs-confirmation 9건(인용 wording 미완 또는 spec 수치 보류). UNGROUPED 0건(전 raw 파일 분류 완료). wiki/index.md에 `URL` hub 등록 (2026-05-25 후속 이동: `URL``url-inventory` 로 리네이밍, root 에서 `wiki/` 하위로 이동). /tmp/extract_urls2.py 스크립트로 재생성 가능. 다음 단계 후보: (a) link rot 주기 검사 자동화, (b) archive 누락 170건 우선순위 매기기, (c) Phase C2 코드 작성 진입.
2026-05-25 새 프로젝트 keycloak-patterns 시작 — vanilla JS와 Keycloak 연동 6 패턴 학습/구현. 분류 축: 배치 위치 3종(Edge ingress / 내부 cluster / 단일 EC2) × Google IdP federation 유무 2종 = 6 패턴(P1A/P1B/P2A/P2B/P3A/P3B). root branch-note feature-keycloak-patterns.md + 6개 sub-branch (feature-keycloak-patterns-{1..6}) 작성. 각 sub-branch: 컴포넌트 다이어그램 + 토큰 교환 sequence + 장단점 vs 비교 패턴 + 신뢰 경계 + 외부 근거 wikilinks. 6개 병렬 에이전트 dispatch로 외부 자료 조사: 처음 31 raw 생성 → 3쌍 중복 발견(keycloak-identity-brokering, keycloak-hostname, spring-security-resource-server-jwt) → tags+related_branches set union으로 merge 후 28 raw로 통합. 누적 raw: 172 + 28 = 200. **P3A(Single EC2, no Google)만 실 구현 대상**, 나머지 5개는 documented-only. P3A 구현 예정 위치: /home/donghyeon/workspace/keycloak-patterns (별도 git repo, LLM Wiki 외부). 핵심 통찰 발견: (a) oauth2-proxy /oauth2/auth는 의도적 202|401 only — nginx auth_request 2xx=allow/401=deny contract 정합, (b) IdP brokering은 SPA/백엔드 코드 변경 0 — Keycloak 설정만 추가, (c) Google First Login Flow의 email-match 자동 linking은 보안 위험으로 공식 권장 X, (d) Keycloak iss claim mismatch는 KC_HOSTNAME 미설정 시 단일 EC2의 가장 흔한 함정, (e) OAuth 2.1은 SPA-direct보다 BFF 권장, (f) Spring Security 기본 JWT validator는 aud 검사 안 함 — custom OAuth2TokenValidator 필요. wiki/index.md "진행 중 프로젝트" 섹션 신설하여 7 branch hub 등록. `URL.md` (현 `wiki/url-inventory.md`) 에 Project 2 (keycloak-patterns) 섹션 append. 다음 단계: P3A docker-compose + Keycloak realm 설정 + Spring Boot Resource Server + vanilla JS SPA 실 구현.
2026-05-25 keycloak-patterns 위계 재편 + sub-sub-branch 추가 — 사용자 피드백 5개 항목 반영. (1) 메인 프로젝트 정의를 raw/project-notes/keycloak-patterns-overview.md (canonical SSOT) 신설, ca-tmpl-skeleton과 동일 위계 적용 (CLAUDE.md §2). (2) root branch-note(feature-keycloak-patterns.md) 슬림화 — 프로젝트 정의 → project-note 이전, root는 작업 진행 인덱스만 유지. (3) raw/daily-notes/2026-05-25.md 빈 placeholder를 daily-note-template 형식으로 채움 (활성 7 브랜치, 한 일, 배운 점 6건, 면접 후보 3건). (4) 6 sub-branch의 외부 근거 섹션을 ca-tmpl convention "채택 결정 / 검토한 대안 / 비교 핵심" 3단 구조로 재작성 (6 병렬 에이전트). (5) sub-sub-branch 27개 신설 (6 병렬 에이전트): P1A 4 (oauth2-proxy/nginx/spoofing/Traefik) + P1B 4 (Google client/First Broker/claim mapping/account link) + P2A 5 (PKCE/Spring SR/token 저장/BFF/refresh rotation) + P2B 4 (SPA 변경없음/IdP Mappers/3-leg trust/Account Linking) + P3A 6 실구현 (docker-compose/realm/Spring SR/vanilla JS/iss mismatch/refresh+logout) + P3B 4 (public domain/reverse proxy/Google client/HTTPS). 누적 keycloak-patterns 자산: 1 project-note + 34 branch-notes + 28 external raw = 63 파일. wiki/index.md "진행 중 프로젝트" 섹션을 위계 표시 형태로 재편 (SSOT + root + 34 hierarchy). 다음 단계: P3A 실 구현 진입 (/home/donghyeon/workspace/keycloak-patterns/).
## 2026-05-27 Claim-Traceability Migration Report
| Metric | Expected | Actual | Status |
|---|---:|---:|---|
| Raw sources with Claims Extracted | 200 | 200 | PASS |
| Branch-notes with Decision Evidence Map | 77 | 77 | PASS |
| BROKEN_CLAIM_REFERENCE | 0 | 0 | PASS |
| UNSUPPORTED_DECISION total (branch-notes) | report | 285 | INFO |
Verdict: COMPLETE
Notes:
- WebFetch verification rate: 다수 raw 가 `needs-confirmation` 인용 보유 (재migration 시 WebFetch 부분 차단 / 일부 페이지 404 / 일부 vendor 403 — 예: debezium.io 403, Atlassian runbook 404, 우아한형제들 URL mismatch). 200 raw 중 88 파일이 `needs-confirmation` strength 보유.
- Branch-notes 77/77 모두 `## Decision Evidence Map` + `## Claims To Verify` 보유. BROKEN_CLAIM_REFERENCE 0 — 모든 cited Claim ID 가 실제 raw 파일에 존재.
- UNSUPPORTED_DECISION 가장 많은 branch-notes (Top 5):
- `feature-repository-access-permission-contract` (10)
- `feature-outbound-http-client-baseline` (9)
- `feature-api-contract-baseline` (9)
- `feature-file-resource-handling-contract` (8) — Phase 4 Part A 처리
- `feature-runtime-health-lifecycle-contract` (8)
- `feature-operational-runbook-contract` (8) — Phase 4 Part A 처리
- Phase 4 Part A 추가 4 branch-notes 결과:
- `feature-background-job-async-contract`: 12 decisions, 7 UNSUPPORTED, 7 Claims To Verify
- `feature-file-resource-handling-contract`: 12 decisions, 8 UNSUPPORTED, 9 Claims To Verify
- `feature-keycloak-federation-spa-zero-change`: 2 decisions, 0 UNSUPPORTED (모두 raw 인용 보유), 6 Claims To Verify
- `feature-operational-runbook-contract`: 10 decisions, 8 UNSUPPORTED, 9 Claims To Verify
- Phase 3 결과: project-notes 3개 (ca-skeleton-operational-contract, keycloak-patterns-overview, project-infra-overview) + daily-notes 1개 (2026-05-25) 모두 template frontmatter / 구조 적합 — 추가 편집 불필요.
- Migration 시작: 2026-05-27. 약 13 rounds × 5 parallel subagents 로 200 raw + 77 branch-notes 처리.
- Company-tech-blog 인용은 모두 `company-case-study` 로 strength 표기 — 공식 best practice 단정 금지 규칙 준수.
---
2026-05-28 template 백틱 wikilink 복원 (REVERT) — 이전 시도에서 vault 그래프 cleanup 목적으로 6 template (branch-note / blog-topic / error-note / interview-prep / lecture-note / daily-note) 의 `` [[X]] `` → `[[X]]` 일괄 unwrap 적용했으나, **template 의 placeholder 위치(`{{branch-name}}`, `<sub-branch-1>`, `<project>`, `YYYY-MM-DD` 등) 가 실제 wikilink 로 해석되어 Obsidian 그래프뷰에 ghost 노드 대량 생성됨**. 사용자 피드백("template쪽은 손대지 맙시다 다시 되돌리세요") 에 따라 6 template 전체 복원: 5 template 은 여는 대괄호를 `` `[[ `` 로, 닫는 대괄호를 `` ]]` `` 로 감싸는 치환 일괄 (각 2 Edit), blog-topic-template 은 line 96 사용자 수동 복원분 보존 위해 unique pattern context 별 12 Edit 로 단일 backtick 정확 복원 (double-backtick 0건 검증). 결과: 64 wikilink 모두 `` [[X]] `` single-wrap, placeholder ghost 노드 제거 예정. **교훈**: Obsidian template 의 placeholder 안내 목적 wikilink (`{{name}}` / `<...>`) 는 백틱 wrap 유지 필수 — 그래프에 ghost 생성 방지. 실제 채워진 raw 문서(scaffold 결과물) 의 wikilink 만 unwrap 대상. 4 + 3 = 7 scaffold 파일 + branch-note feature-architecture-enforcement-rules.md Cluster section 의 unwrap 은 유지 (실제 wikilink).
2026-05-28 리뷰 후 일괄 수정 — `feature-architecture-enforcement-rules` branch-note 4건 + `blog-topic-template.md` 4건 총 8건. **branch-note (4건)**: (A1 High) `## 결정 사항` 10개 항목 전체에 `검토한 대안:` 필드 추가 (template:83 명세 미준수 해소; Out of scope §범위와 Decision Evidence Map Open Risk 컬럼에서 alternatives 도출). (A2 Medium) `## 마주친 문제` 두 항목을 `원인:` / `시도:` / `해결:` / `별도 에러 노트:` 4-bullet 구조로 재구성 (Gradle wrapper sandbox 권한 문제는 [[raw/errors/gradle-wrapper-readonly-cache-2026-05-28]] 로 분리, `.gitignore /docs` 문제는 운영 메모로 유지). (A3 Medium) D9 MapStruct exemption 결정 사항(line 102)에 `[UNSUPPORTED_DECISION — 공식 근거 보강 필요, D9 참조]` 라벨 추가 — Decision Evidence Map 의 UNSUPPORTED_DECISION 표기와 결정 사항 본문의 일관성 확보. (A4 Medium) 이슈/PR/Closure PR 링크 3곳을 `(없음 — local branch, ...)` / `(미생성 — local verification only, not merged)` 로 명시, frontmatter `status_label: in-progress` → `review` 갱신 (실제 상태: 구현 완료 + locally-verified + not merged). **blog-topic-template (4건)**: (B1 Low) frontmatter 에 `inspiration_url:` + `archive_url:` 필드 추가 (CLAUDE.md §7 archive 병기 규칙). (B2 Medium) `## 트리거 / Trigger` 섹션 신설 (Parent 와 글감 사이) — `트리거 유형` / `트리거 날짜` / `트리거 연결 노트` 구조 필드. freeform `떠오른 계기:` 가 `/lint`/`/query` 자동 필터 가능하도록. (B3 Low) `## 글감` 의 `- 타깃 독자:` 중복 line 제거 (frontmatter `target_audience:` 가 SSOT, drift 위험 차단). (B4 Low) `tags: [blog-topic]` 에 `{{project-slug}}` placeholder + `# L2 프로젝트 슬러그 필수 (tag-taxonomy.md §2)` 주석 추가. **부수 수정**: `.claude/hooks/wiki_claim_gate.py` line 190 — `## Claims To Verify` substring 매칭이 template SSOT 의 bilingual heading `## 검증해야 할 주장 / Claims To Verify` 를 인식 못 해 branch-note Edit 차단 → regex `^## .*\bClaims To Verify\b` (MULTILINE) 로 수정. template SSOT 우선 원칙 유지, 60+ 기존 branch-note heading 일괄 rename 회피.
2026-05-26 그래프 cleanup — Obsidian 그래프뷰의 faded ghost 노드(`URL`, `2026-05-22`) 발생 원인 제거. (1) `url-inventory` / `wiki/url-inventory` 활성 wikilink 7건 제거 (5 파일): CLAUDE.md §2 Hub/로그, wiki/llm-wiki.md §진행 중 프로젝트·운영 규칙/템플릿, raw/project-notes/ca-skeleton-operational-contract.md §31.2 Sources, raw/project-notes/keycloak-patterns-overview.md §12.2 Sources + 메타데이터, raw/branch-notes/feature-keycloak-patterns.md Sources 표 + Sources/근거 자료. **`wiki/url-inventory.md` 파일 자체는 보존** (53KB / 801줄 / 172 raw URL inventory) — hub 노출만 차단. (2) branch-note `## 관련 일일 노트` 섹션 일괄 제거 — 총 43개 (broken 참조 17 + template placeholder 26). (2-a) `raw/daily-notes/2026-05-22` (파일 미존재) 17건: feature-ci-quality-gates-contract, business-rule-validation, test-taxonomy-fixture, domain-feature-onboarding, data-retention-privacy, domain-modeling-guardrails, build-release-supply-chain, skeleton-package-blueprint, developer-experience, distributed-tracing, domain-event-outbox, application-port-usecase, operational-runbook, implementation-readiness-scorecard, sample-removal-adoption, contract-registry-governance, container-runtime-contract. (2-b) `raw/daily-notes/YYYY-MM-DD` (template placeholder, 채워지지 않음) 26건: feature-management-actuator-security-contract, schema-serialization-contract, migration-startup-contract, background-job-async-contract, env-driven-runtime-configuration, secrets-config-source-contract, tenant-context-policy, rate-limit-idempotency-contract, repository-access-permission-contract, architecture-enforcement-rules, boundary-validation-mapping-contract, metrics-alerting-contract, contract-verification-test-suite, outbound-http-client-baseline, sample-domain-contract-fixture, api-contract-baseline, transaction-concurrency-contract, persistence-failure-baseline, integration-adapter-templates, file-resource-handling-contract, cache-consistency-contract, security-operational-baseline, operational-error-observability-foundation, api-compatibility-deprecation-contract, runtime-health-lifecycle-contract, log-management-contract. 모두 동일한 4줄 패턴(`## 관련 일일 노트` + 빈줄 + 백틱 wikilink + 빈줄), 본문 손실 0건. 잔여 `## 관련 일일 노트` 34건은 모두 `raw/daily-notes/2026-05-25` (파일 존재, 유효 wikilink) — keycloak-patterns 시리즈 보존. (3) `wiki/url-inventory.md` 파일 삭제 (사용자 후속 결정) — 53KB / 801줄. 1번에서 인바운드 wikilink 7건을 사전 제거했으므로 삭제 시 broken link 발생 0건. raw 파일 172개의 URL inventory 기능은 각 raw 파일 frontmatter의 `url:` / `archive_url:` 필드에 이미 보존되어 있어 정보 손실 없음. (4) AGENTS.md 38-40줄의 3개 split 디렉터리 markdown link 제거 — `.agents/plugins/wiki-superpowers/rules/{reporting-standards,advisory-depth,diagram-standards}/` (Antigravity lazy-load 친화 split 안내). 영향 평가: Antigravity 7개 plugin agent 는 root SSOT `rules/*.md` 만 참조, plugin skill `wiki-workflow/SKILL.md` 는 상대경로 `../../rules/{name}/` 로 split 직접 접근 — AGENTS.md link 는 사람용 navigation 안내였을 뿐 동작 의존성 0. 그래프뷰 faded 노드 3개 (`.agents/plugins/.../*/`) 제거. root SSOT link 유지.
2026-05-28 ca-skeleton 3 branch-note 사각지대 검증 + 공식 docs fortification — 사용자가 외부 reviewer 의 9-Finding critique 의견 요청. 1차 분석에서 Finding 3/6 (multi-tenant `TransactionTemplate`), Finding 7 (AOP self-invocation strawman), Finding 8/9 (self-disclosed limitation 재포장), Finding 1 skeleton (BC-first multi-module — single-domain template context 무시) reject. 사용자의 "공식 docs verify 후 판단" pushback 으로 Plan agent + Spring TX / Gradle+Spring Boot / ArchUnit+tooling 3개 외부 research agent 병렬 dispatch. **6개 신규 archive** (wiki-source-summarizer, verbatim self-grep 통과): `gradle-java-library-api-vs-implementation`, `spring-boot-structuring-your-code`, `mapstruct-generated-annotation-official`, `lombok-builder-data-features-official`, `spring-transaction-synchronization-manager-javadoc`, `spring-tx-propagation-required-new-nested-official`. **3 branch-note fortification**: (a) `feature-skeleton-package-blueprint-contract` 에 D9 (`api` vs `implementation` Gradle 매트릭스, `official-vendor-doc`) + D10 (`@SpringBootApplication` root package + default package 금지) 신규. (b) `feature-application-port-usecase-contract` 에 D11~D14 (checked-exception wrapping policy / REQUIRES_NEW pool sizing `concurrent_threads × (1 + max_inNew_depth) + 1` / `@Service` 허용 / KEYED idempotency freeze) + TransactionPort Contract 표에 `callback signature`/`inNew connection cost` 행 추가. (c) `feature-architecture-enforcement-rules` 에 D11/D12 (`ApplicationContext` banned-class rule + string-key bypass 한계 명시) + 테스트 계약 2건 + Claims To Verify 의 `runtime lookup 우회` 항목 `planned` → `partially-implemented` 업그레이드. **Lombok 정책**: 사용자 Option A (domain-core 금지) 채택, D3 supporting claims 에 LMB-C1/C2/C4/C5 추가. **MapStruct D9**: `UNSUPPORTED_DECISION` 유지 (`@Generated` 부착 자체는 MS-ANNOT-C1/C2 로 공식 확인 — `mapstruct.suppressGeneratorTimestamp=true` 옵션 + `java.annotation.processing.Generated` enable 명시. ArchUnit predicate DSL exemption 구현은 여전히 `needs-confirmation`). **UNSUPPORTED 로 명시한 reviewer 주장 2건**: "`Supplier<T>` 가 WebFlux 채택을 자동으로 막는다" + "Spring Modulith > multi-Gradle-module" — 둘 다 공식 docs 비교 진술 부재. **잔여 사각지대**: ArchUnit negative test fixture 공식 패턴 NOT FOUND (별도 `archunit-example` GitHub repo 조사 필요), Hibernate multi-tenancy chapter 24 body verbatim WebFetch truncation 지속 (structural facts 만 archive, body 는 `needs-confirmation` 유지). **이전 reviewer 의 Finding 3/6 (multi-tenant) 재확인**: Spring `TransactionSynchronizationManager` javadoc (TSM-C1/C4) 가 명시적으로 "per thread" 보장 — singleton `TransactionTemplate` × `RoutingDataSource` 패턴 정상 동작이 공식 근거로 확정. 기술 reject 가 옳았음.
2026-05-28 (2nd) 실 production OSS 코드 검증 — 사용자 추가 요청 ("실무에서 쓰이는 github 들도 조사"). 3개 영역 (ArchUnit 적용 / Multi-module Clean Architecture / Transaction abstraction) 으로 병렬 general-purpose agent dispatch → 실 OSS 6+개 repo 코드 직접 fetch + 검증. **핵심 발견**: (1) **D9 corroborated** — Spring Modulith 자체가 `IS_GENERATED = annotatedWith(Generated.class)` ArchUnit predicate 를 production 코드에 사용 (`spring-modulith-core/ApplicationModules.java`). D9 의 `UNSUPPORTED_DECISION` 부분 해제 — `actually-implemented` 승급 가능. (2) **TransactionPort 패턴 corroborated** — Axon Framework (3.6k stars, AxonIQ enterprise) 의 `TransactionManager.executeInTransaction(Runnable)` + `fetchInTransaction(Supplier<T>)` 가 ca-tmpl `inWrite`/`inRead` 와 closure 시그니처 1:1 일치. Google Cloud Spanner `TransactionRunner` 도 동일 패턴. 근거가 개인 블로그 2건 → enterprise OSS + global vendor SDK 로 격상. (3) **D3 (Lombok 금지) CONTRARY** — Buckpal (Hombergs 책 hex-arch 공식 reference) 의 `DependencyRuleTests.domainModelDoesNotDependOnOutside()` 가 `"lombok.."` 패키지를 명시적으로 **allowlist** (verbatim). ca-tmpl 정반대 방향. 사용자 결정: 현 결정 유지 + UNSUPPORTED_DECISION(CONTRARY) 라벨 추가 + Buckpal counter-evidence 명시. (4) **D8 (Spring `@Transactional` forbidden) CONTRARY** — Spring Modulith 공식 incubator 가 `@ApplicationModuleListener` meta-annotation 으로 `@Transactional(propagation = REQUIRES_NEW)` 를 **재노출**. Buckpal 도 `@Component @Transactional` 직접 부착. ca-tmpl forbidden 정책은 Spring 공식 방향과 정면 충돌. 사용자 결정: 현 결정 유지 + UNSUPPORTED 라벨 + Spring Modulith 충돌 명시. (5) **D11 (`ApplicationContext.getBean` banned-class) STILL UNSUPPORTED** — 6개 surveyed OSS 어디에도 없음. ArchUnit DSL feasible 하나 production precedent 없음. ca-tmpl 자체 hygiene 유지. (6) **`buildSrc/` deferred** — Spring Boot (557 modules) 만 사용. ca-tmpl 8 모듈 scale 에서는 premature. (7) **S1 negative test fixture** — Spring Modulith `detectViolations()` returns Violations as data + `example/ninvalid` fixture package 가 공식 패턴 발견. ca-tmpl `feature-archunit-negative-fixture-baseline` 후속 branch 후보로 등록. **3개 신규 archive** (wiki-source-summarizer): `spring-modulith-archunit-generated-exemption-and-violations-as-data` (company-tech-blog, Spring incubator), `axonframework-transactionmanager-spring-adapter` (company-tech-blog, AxonIQ), `buckpal-archunit-lombok-allowlist-direct-transactional` (personal-blog, Hombergs 책 reference, CONTRARY EVIDENCE 용). **Decision Evidence Map 갱신**: enforcement D3/D8 → UNSUPPORTED_DECISION(CONTRARY) 라벨 + Buckpal/Modulith CONTRARY 인용 추가. D9 → `official-vendor-doc + company-case-study` 강도로 격상. port-usecase D3 → Axon OSS PRECEDENT + Buckpal/Modulith CONTRARY 양쪽 인용 + "closure 패턴 자체는 강화, specific shape (`inWrite`/`inRead`/`inNew` 3중) 은 OSS 매칭 없는 ca-tmpl 자체 결정" 명시. Sources 표 + Claims To Verify 동기화 완료.
2026-06-04 13:10 /ingest — raw/branch-notes/feature-skeleton-package-blueprint-contract.md → wiki/projects/ca-tmpl/clean-architecture-package-layout.md + wiki/concepts/clean-architecture-package-layout.md (reconcile). branch-note 를 ca-tmpl(@5d89766) ground-truth 와 대조 → `status: raw → verified` 승급 후 ingest 정합화. **1차 추출(5/28) stale 정정 2건**: project 문서의 production package `com.example.blog.*` → `dev.caskeleton.*` (이 branch rename, ground-truth 확인), sample module `sample-ticket` → `sample-portfolio`(worklog domain). **신규 결정 반영**: D9 (`api` vs `implementation` — 9개 build.gradle 모두 `api` 0개 확인), D10 (`@SpringBootApplication` @ `dev.caskeleton.bootstrap` + `scanBasePackages="dev.caskeleton"` 확인). **drift 2건 각주화**: 9번째 module `adapter-identifier`(별도 `feature-resource-identifier-contract` branch 산출, OUT_OF_BRANCH_SCOPE), sample 실제 경로 `dev.caskeleton.sample.portfolio.*.worklog`. project 문서 `status: reviewed → verified`, `confidence: medium → high`, `interview-candidate` 태그. concept 문서는 stale module명만 정정(draft 유지).
2026-06-04 13:40 /ingest — raw/branch-notes/feature-application-port-usecase-contract.md → wiki/projects/ca-tmpl/transaction-boundary-abstraction.md + concept (reconcile, ca-tmpl @ffb0e13 ground-truth) — project 문서가 "구현 없음 / Phase C2 미진입" stale 이었음을 정정. ffb0e13 코드 직접 대조: `TransactionPort`(inWrite/inRead/inNew + Runnable defaults) + `SpringTransactionPort`(모드별 pre-built `TransactionTemplate`, READ_COMMITTED pin) + 6종 ArchUnit rule + violations-as-data fixture + sample 모듈(@ffb0e13 명칭 `sample-ticket`, 이후 `sample-portfolio` rename) 의 `@Transactional` 전면 제거 모두 코드 실재 확인. actually-implemented(코드) / locally-verified(단위 테스트+ArchUnit PASS, 2026-06-04 재실행 exit 0) / planned·위임(REQUIRES_NEW 통합·readOnly flush·KEYED freeze) 분리 기록. project `status: reviewed→verified`, `confidence: medium→high`. branch-note `status: raw→verified` + ground-truth cross-ref 노트. concept 문서에 `## Claim-backed Knowledge` + `## 내가 설명할 수 있어야 하는 것` 섹션 추가(claim-gate / structure-lint 충족), 프로젝트 구현 주장은 project 문서로 위임. 두 문서 structure-lint PASS.
2026-06-04 14:30 /ingest — raw/branch-notes/feature-api-contract-baseline.md → wiki/projects/ca-tmpl/api-evolution-and-schema.md + concept (reconcile, ca-tmpl @b15dcf5 ground-truth). project 문서가 compatibility/deprecation+schema/serialization 축(별도 branch, documented-only)만 다루던 것을 유지하면서, 본 branch 의 **API contract baseline 축**(versioning `/v1`, pagination/sort, conditional request ETag/If-Match/304/412=D15, HTTP cache no-store/Vary, OpenAPI producer, LRO, batch)을 `locally-verified` 로 추가. b15dcf5 코드 직접 대조: `ETags`/`PreconditionFailedException`/`CacheControlFilter`/`PageParams`/`SortParam`/`CursorCodec`(seam)/`GlobalExceptionHandler`(413/406/415/405+Allow/412)/`Operation(s)Controller`/`WorkLogController:batchCreate` + 11개 테스트(WireTest/CacheControlFilterTest/CursorCodecTest/OpenApiSnapshotTest/VersioningPrefixTest/DateHeaderContractTest/ErrorCodeRegistryMappingTest 등) 실재 확인. planned 유지: D22 HMAC 운영key/회전, D8 414 e2e, D3 idempotency key shape(rate-limit branch), D5/D10 drift 게이트, D16 cache layer. UNSUPPORTED_IMPL_DECISION 기록: size cap 100/deep-offset 10000, ETag weak/lenient 비교(RFC9110 strong MUST 와 차이), cursor 24h TTL+HMAC, LRO enum 5종. project `status: draft→verified` `confidence: medium→high`. concept 에 HTTP contract surface 표준(RFC9110/9111/AIP) subsection + `## Claim-backed Knowledge` + `## 내가 설명할 수 있어야 하는 것` 추가, `status: draft→reviewed`. branch-note `status: raw→verified` + ground-truth 노트 + wiki 추출 대상 채움. idempotency-key-design 및 api-error-envelope 문서 미수정. 3개 문서 structure-lint PASS. Claim ID / Decision Evidence Map / UNSUPPORTED_DECISION: handled per branch-note Decision Evidence Map.
2026-06-04 15:10 /ingest — raw/branch-notes/feature-schema-serialization-contract.md → wiki/projects/ca-tmpl/api-evolution-and-schema.md + concept (reconcile, ca-tmpl @5d89766 ground-truth). 직전 reconcile(api-contract-baseline @b15dcf5)이 추가한 versioning/pagination/conditional/cache/OpenAPI 내용을 **clobber 없이 보존**하면서, 본 branch 의 **schema/serialization 출력측**을 `locally-verified` 로 추가. 5d89766 코드 직접 대조: `no_bigdecimal_double_constructor` ArchUnit 룰(`CleanArchitectureTest`, callConstructor BigDecimal double/float) + `BigDecimalDoubleConstructorFixture` + `ArchitectureViolationFixtureTest`(vacuous-pass 방지) + `JacksonSerializationPolicyTest`(JacksonProperties 바인딩 + wired ObjectMapper: OffsetDateTime→"...Z"/LocalDate→"YYYY-MM-DD"/BigDecimal plain) + `application.yml`/`application-test.yml`/`.env` 의 write-dates-as-timestamps=false + write-bigdecimal-as-plain=true 핀 실재 확인. 입력측 deser switch·null/empty/missing 3-상태(Patch<T>)는 sibling boundary-validation-mapping 소유로 명시. planned/needs-confirmation 유지(actually-implemented 진입 금지): D5 OpenAPI drift release gate, D6 제거-field 재사용 도구, D7 Avro Schema Registry, per-API money string-vs-number 코드 시연(sample 도메인 money 필드 없음). project doc 의 stale "schema 축=documented-only/미구현" 서술 정정 + 과장금지/면접범위 항목 갱신. concept 에 일반 직렬화 정책(WRITE_DATES/WRITE_BIGDECIMAL_AS_PLAIN, PropertyNamingStrategy=전역 breaking, @JsonInclude null-vs-absent, JavaTimeModule 누락 회귀) Standard/한계 추가 — 프로젝트 주장 없이 general only. branch-note `status: raw→verified` + last_reviewed 2026-06-04 + ground-truth 노트. 3개 문서 structure-lint PASS. Claim ID / Decision Evidence Map / UNSUPPORTED_DECISION: handled per branch-note Decision Evidence Map.
2026-06-04 15:50 /ingest — raw/branch-notes/feature-architecture-enforcement-rules.md → wiki/projects/ca-tmpl/clean-architecture-package-layout.md + 2 concept (reconcile, ca-tmpl @db61075 ground-truth). project 문서가 이미 module/package **blueprint** 축으로 reconcile 된 상태를 clobber 없이 보존하면서, 본 branch 의 **enforcement-rules 축**(ArchUnit rules / Gradle build-graph / negative fixture)을 추가. db61075 코드 직접 대조(`app-bootstrap/.../architecture/CleanArchitectureTest.java`, `src/build.gradle:53`): 본 branch 소유 rule 만 추출 — `domain_is_pure`(Lombok ban=D3, `lombok..` package), `application_does_not_depend_on_adapters_or_transport`, `application_does_not_use_spring_transactional_annotation`, `application_does_not_depend_on_application_context`(D11 banned-class, FQN `org.springframework.context.ApplicationContext`), adapter-adapter 격리 3종(web/persistence/outbound), `web_dtos_stay_in_web_adapter`, `shared_contract_contains_only_operational_contract_packages`, `production_code_does_not_depend_on_sample_portfolio` 실재 확인. `verifyCleanArchitectureDependencies` task + `allowedProjectDependencies`(9 module) + `ArchitectureViolationFixtureTest`/`architecture/violations/`(SpringDependentDomainFixture·ApplicationContextDependentFixture·TransactionalAnnotatedFixture) 실재 확인. D11 string-key bypass(D12: `getBean(String)`/`Class.forName(String)`) 은 ArchUnit 정적 분석 한계로 정직 보존(과장금지 항목+엣지 section). ⚠️ ground-truth `CleanArchitectureTest` 는 본 branch 이후 boundary-validation/streaming/serialization/resource-identifier/api-contract/business-rule slice rule 다수 포함(30+) → 추출은 본 branch 소유만 한정(OUT_OF_BRANCH_SCOPE 명시). actually-implemented(코드) / locally-verified(임시 위반 red/green, 2026-05-28) 분리. project `status: verified` 유지 + Enforcement-rules dimension 대조표 추가. concept(clean-architecture)에 enforcement 2축 일반지식 + `## Claim-backed Knowledge` 표 + `## 내가 설명할 수 있어야 하는 것` 추가. **신규 concept** `archunit-scope-classpath-vs-package-filter.md`(빈 stub→작성): import scope vs classpath 의존성 2축, vacuous pass vs empty-should, violations-as-data 보완 — general only, claim-backed(ARCHUNIT-UG-C2/C3/C6, AUCP-C2~C4 + 2 error-note). branch-note `status: raw→verified` + last_reviewed 2026-06-04 + ground-truth 노트 + §구현 가이드/§엣지 사후 정제 추가. 4개 문서 structure-lint PASS. Claim ID / Decision Evidence Map / UNSUPPORTED_DECISION: handled per branch-note Decision Evidence Map.
2026-06-04 16:30 /ingest — raw/branch-notes/feature-resource-identifier-contract.md → **신규** wiki/projects/ca-tmpl/resource-identifier-format.md + 빈 stub→작성 wiki/concepts/resource-identifier-format.md (create+reconcile, ca-tmpl @c36b764 ground-truth).
2026-06-04 17:10 /ingest — raw/branch-notes/feature-boundary-validation-mapping-contract.md → **신규** wiki/projects/ca-tmpl/boundary-validation-mapping.md + **신규** wiki/concepts/boundary-validation-and-dto-mapping.md (CREATE, ca-tmpl @fccb033 ground-truth). 기존 valid/boundary/mapping/dto concept·project doc 부재 → 둘 다 신규 작성. fccb033 코드 직접 대조 + `./gradlew test verifyCleanArchitectureDependencies` 재실행(**126 tests / 0 failures**, exit 0). **project doc(actually-implemented)**: shared-contract `Patch<T>` 3-state(B2)·`MappingException` sentinel(B3/B7)·`OperationalError`(VALIDATION_FAILED/MAPPING_FAILED/BATCH_PARTIAL_FAILURE), adapter-web `GlobalExceptionHandler`(ProblemDetail import 0=D5, MethodArgumentNotValid/HttpMessageNotReadable→VALIDATION_FAILED, MappingException→MAPPING_FAILED)·`EnvelopeBodyAdvice`(D5/D6 자동 wrap), sample-portfolio `CreateWorkLogRequest`@GroupSequence(B4)·`UpdateWorkLogRequest`JsonNullable→Patch(B2)·`SamplePolymorphicRequest` sealed+@JsonTypeInfo/@JsonSubTypes(B5)·`WorkLogWebMapper`/`RepoStatsAclMapper`(B3/B7), app-bootstrap **8개 boundary ArchUnit rule + 위반 fixture**(request_dtos_do_not_silence_unknown_fields·no_jackson_{laissez_faire,enable_default_typing}·no_inheritable_thread_local·controllers_do_not_return_domain_or_entity_types·application_methods_do_not_accept_web_dtos·no_problem_detail_usage·no_merge_patch_json_media_type_string·valid_cascade_depth_at_most_three·outbound_adapter_method_returns_only_domain_or_primitives). **locally-verified**: WorkLogControllerWireTest 9케이스(B1/B2/B3/B8)·SamplePolymorphic/Allowlist/BulkEnvelope/GlobalExceptionHandler/EnvelopeBodyAdvice/RepoStatsAclMapper unit·VirtualThreadMdcE2ETest 실 Tomcat+가상스레드(B6)·ArchUnit fixture green. ⚠️ **Ground-truth 정정 3건**: ①controller-return-type & valid_cascade_depth ArchUnit rule 은 branch-note 의 `planned` 표기와 달리 fccb033 에 실제 구현됨 → actually-implemented 로 격상. ②`MappingException` 위치는 branch-note errors 로그의 `application.exception` 이 아니라 fccb033 에서 `shared.error`. ③sample 은 fccb033 에 이미 `sample-portfolio`(WorkLog), wire 테스트는 `BoundaryDemoControllerWireTest`→`WorkLogControllerWireTest` re-home. planned/documented-only 격리(actually-implemented 진입 금지): B7-2 실 WebClient+WireMock, B8-2 OpenAPI oneOf 분기, B2 OpenAPI merge-patch 명시, B1 primitive→wrapper ArchUnit rule, 실 DB Testcontainers 통합, MapStruct exemption(수기 mapper 만 사용). **concept doc(general only)**: Bean Validation @GroupSequence/@Valid cascade·validation-at-boundary·MapStruct vs 수기 mapper trade-off·PATCH 3-state·RFC7396 null=deletion + `## Claim-backed Knowledge` 표(JBV-3.0-C1/C3/C4·SPRING-MVC-EXC-C4/C5·RFC7396-C2) — 프로젝트 주장 없음. hub `wiki/projects/ca-tmpl.md` Resource contract slices 에 엔트리 추가. branch-note `status: raw→verified` + parent_branch(빈값)·last_reviewed·ingest_note 추가 + 누락 §엣지·실패·의존 / §관련 일일 노트 보강. 3개 문서 structure-lint PASS. Claim ID / Decision Evidence Map / UNSUPPORTED_DECISION: handled per branch-note Decision Evidence Map. 기존 concept 파일은 0-line 빈 파일이라 full 작성. **신규 project doc**: ULID resource identifier 결정 + 신규 `adapter-identifier` 모듈. c36b764 코드 직접 대조: domain port `ResourceId`(non-sealed marker)/`IdFactory`(@`domain-core`), sample `WorkLogId`(record+regex)/`WorkLogIdFactory`/`UlidWorkLogIdFactory`(`@Component`, `UlidCreator.getMonotonicUlid()`+SecureRandom), 신규 모듈 `adapter-identifier`(`UlidCodec` normalize/toUuid/fromUuid, `settings.gradle:13 include`, ulid-creator:5.2.3), persistence `WorkLogEntity`(`@Id @Column(columnDefinition="uuid") @JdbcTypeCode(SqlTypes.UUID)`)+`WorkLogPersistenceMapper`(Ulid↔UUID), `WorkLogIdSerializer`(`@JsonComponent`, bare ULID), ArchUnit 4 rule(`no_long_id_pk` ..domain.. 한정/`no_uuid_random_in_controller` web.controller+application/`no_math_random_for_id`/`no_varchar_255_for_id_column`+`haveExplicitColumnLength()`)+`identifier_adapter_does_not_depend_...` 격리 rule 실재 확인. 5번째 rule `no_find_by_id_without_tenant` 미구현(결정대로 tenant 위임). `./gradlew :adapter-identifier:test :sample-portfolio:test :app-bootstrap:test --tests '*CleanArchitectureTest' …` BUILD SUCCESSFUL(2026-06-04 재실행). actually-implemented(코드)/locally-verified(단위 테스트+ArchUnit) 분리. planned/documented-only 격리: CUID2 override(D7), constant-time 미적용(D9, security branch), multi-tenancy 모델(D13, tenant branch), Idempotency-Key 처리(D14, rate-limit branch), `UlidLogScrubber`(D8, log branch), PostgreSQL uuid index 벤치마크(D10), dual column(D11) — 모두 actually-implemented 진입 금지. project `status: verified`/`confidence: high`. concept(general only): ULID/UUIDv7/v4/Snowflake/NanoID/KSUID/TSID/CUID2 trade-off 표 + Crockford base32/RFC3986 + AIP-148/Stripe(vendor 관례 명시) + `## Claim-backed Knowledge` 표(RFC9562/ULID/Crockford/RFC3986/Percona[MySQL parallel-evidence]/CUID2[저자 주장 low]/Snowflake/NanoID/Brandur). hub `wiki/projects/ca-tmpl.md` 에 Resource contract slice 엔트리 추가. branch-note `status: raw→verified`/`status_label: in-progress→merged` + last_reviewed + ground-truth 노트 + adapter-identifier=본 branch 모듈 cross-link. 2개 문서 structure-lint PASS. Claim ID / Decision Evidence Map / UNSUPPORTED_DECISION: handled per branch-note Decision Evidence Map.
2026-06-04 17:45 /ingest — raw/branch-notes/feature-streaming-response-contract.md → **신규** wiki/projects/ca-tmpl/streaming-response-support.md + **신규** wiki/concepts/streaming-response-patterns.md (CREATE, ca-tmpl @9693d72 "이벤트 스트리밍 미지원 ArchUnit 검증" ground-truth). 기존 stream/sse/websocket/reactive concept·project doc 부재 → 둘 다 신규. **honest framing**: 구현 실체 = 스트리밍 *지원* 이 아니라 *미지원을 강제하는 ArchUnit 가드레일*. ground-truth 대조: CleanArchitectureTest.java(line 673~718) D3 rule 3개 실재 — no_sse_emitter(`SseEmitter` FQN)/no_response_body_emitter(`ResponseBodyEmitter` FQN)/no_websocket_handler(`org.springframework.web.socket..`+`jakarta.websocket..` glob), 셋 다 `dev.caskeleton..` production scan + DoNotIncludeTests + allowEmptyShould(true). production 코드 streaming import 0건(grep) → 미지원(ban) 실제, 예외 없음. violations-as-data fixtures(SseEmitter/ResponseBodyEmitter/SpringWebSocketHandler@EnableWebSocket/JakartaWebSocketEndpoint@ServerEndpoint) + over-block guard(StreamingResponseBodyAllowedFixture, 3 rule 모두 비-검출) + spring/jakarta 격리 corpus(SPRING_/JAKARTA_WEBSOCKET_FIXTURE_ONLY, vacuous-pass 차단). **project doc(actually-implemented)**: D3 rule 3개+fixtures+StreamingResponseBody 비-차단 경계(file-resource D8 소유). **locally-verified**: ArchUnit 33 rules/FixtureTest 24 tests GREEN(2026-06-02 branch 기록). **prod-verified 없음**(미지원이므로 운영 streaming 지표 부재). planned 격리: D2 스트리밍 지원 계약 전체(매커니즘/envelope/per-event span/timeout/cap/proxy)=보류, per-event trace span=OPEN(tracing branch). **concept doc(general only)**: SSE vs WebSocket vs long-poll vs chunked trade-off + Spring MVC async 매핑 + `## Claim-backed Knowledge` 표(WHATWG-SSE-C1~C5/RFC6455-C1~C5/RFC9112-CHUNK-C1/SPRING-ASYNC-C2~C4/WOOWA-SSE-C2~C3[company-case-study, best practice 아님]). hub wiki/projects/ca-tmpl.md Resource contract slices 에 엔트리 추가. branch-note status raw→verified + last_reviewed + ingest_note. 2개 문서 structure-lint PASS, 인용 wikilink 12개 모두 resolve. Claim ID / Decision Evidence Map / UNSUPPORTED_DECISION: handled per branch-note Decision Evidence Map.
2026-06-08 /invest-research — "100만원 광범위 ETF 후보 비교" → **신규** raw/invest-research/2026-06-08-broad-equity-etf-100man-candidates.md (deep-research Workflow 3표 적대적검증: 25 claim 검증 → 13 confirmed/12 killed). confirmed: VTI 0.03%/VT 0.06% 보수, MSCI World GFC -57.82%/2008 -40.71%·IVV 2022 -18.13%, 선진국주식 연변동성 13~19%, 국내상장 ETF 구성자산별 세금(국내주식형 매매차익 비과세/그 외 15.4%), 미국상장 ETF 양도세 22%+250만 공제(100만은 실효0). **핵심 발견=20% MDD 상한 vs 100% 주식 ETF 충돌** → strategy 프로필 재검토 loop-back. **미확정(killed/abstain)**: 무소득자 ISA vs 일반계좌 적합성·국내 S&P500 초저보수·비교과세 임계치 → 후속 조사 필요. status raw→draft.
2026-06-08 /invest-plan — strategy 프로필(100만·여유자금·MDD -20%→-40% 정직상향·주식 90~100%) + 2026-06-08 조사 → wiki/invest-plan/active-plan.md 갱신. 목표배분 광범위 주식 ETF 90~100%+현금 0~10%. 워치리스트 VT(0.06%)/VTI(0.03%)/국내상장(15.4% 과세) — 상장지 선택=UNSUPPORTED_IMPL_DECISION(환전 trade-off). 계좌=일반 위탁(연금 기각, ISA 미확정→후속조사 플래그). 규칙 사전점검 ①~④ 준수, 위반 0. confidence low→medium.
2026-06-08 field-map — 투자 분야 지식 지도 v1 구축(brainstorm→spec→plan→subagent 실행, feature/invest-field-map). 신규: templates/invest-field-card-template.md + wiki/invest-concepts/field-map.md 허브 + 씨앗 8장(field-dollar·us-rates·oil·gold·us-equity·bitcoin·semiconductors·bigtech-ai) + invest-daily "분야 관찰" 섹션. drivers vs linkages 분리 + 모든 관계 행 [검증]/[가설] 라벨(현재 대부분 가설, 매일 관찰→/invest-research 검증으로 승격). 그래프 무결성 13링크 OK. 설계 docs/superpowers/specs/2026-06-08-invest-field-map-design.md, 계획 docs/superpowers/plans/2026-06-08-invest-field-map.md.
2026-06-08 /invest-research — "무소득 취준생 ISA vs 일반계좌 적합성" → **신규** raw/invest-research/2026-06-08-isa-vs-general-account-no-income.md (deep-research 3표검증, 7 finding confirmed). 결론: **무소득·100만·단기 유연성 → 일반 위탁계좌 적합** (ISA 9.9%는 200만 비과세 초과분에만·손익통산은 과세상품 다수 보유 시만 의미·3년 락업 마찰 / 일반계좌도 2000만 이하 15.4% 분리과세 종결). 미확정: 비교과세 8120만 무세구간 주장 기각·2026 ISA 확대안 미확정. → active-plan.md 2·3단계 확정(계좌=일반 위탁, 상장지=국내상장), 워치리스트 국내상장으로 정리, 실행 4·5단계 재구성.
2026-06-08 /invest-plan(템플릿 개편) — 사용자 피드백("문서 구체성 부족, 템플릿부터 박아라") 반영. templates/invest-plan-template.md 재설계: **보유종목/Holdings·매수실행/Execution·자본성장 로드맵/Capital Growth Ladder·리밸런싱 점검 규칙** 4개 구체화 섹션 추가(구체성 강제). active-plan.md 동일 구조로 재작성: 매수방식=일시매수(100만 1회, 사용자 결정), 자본성장 로드맵(~200만→200~1000만→1000만+ / 소득 발생=절세계좌 재검토 트리거).
2026-06-08 /invest-research — "국내상장 광범위 ETF 구체 종목 비교" → **신규** raw/invest-research/2026-06-08-korean-broad-etf-ticker-comparison.md (deep-research 3표검증). 확정(운용사 공식 3-0): TIGER 미국S&P500(360750) 총보수 0.0068%·실부담 0.1387%·AUM 19.4조·언헤지 / RISE(379780) 0.0047%·실부담 0.1587%·1.58조 / TIGER(H)(448290) 0.07% 환헤지. 환헤지=연~2.15% 헤지비용 추가(장기엔 언헤지 권장). 헤드라인≠실부담(TER) 교훈. 미확정: 저비용 패시브 전세계 ETF·추적오차·분배율. **→ 사용자 종목 확정 TIGER 미국S&P500(360750) 언헤지.** active-plan 매수실행·Holdings·배분·워치리스트에 티커 반영, NEEDS_DECISION 해소. 계획 완성(남은 건 실제 매수 행동).
2026-06-10 20:19 /sync — raw/branch-notes + raw/project-notes 전수 → findings 192 (CRITICAL 1 / WARN 191), 적용 192 / 보류 1 (Advisory: application-port D14 row merge-완료 시제 갱신은 owner 본문이라 비차단 보류). CRITICAL = repository-access:220 의 KEYED freeze D14 owner 오귀속(rate-limit → application-port 로 wikilink 교정, 의미 CONSISTENT 판정). WARN 191 = bare 참조 wikilink 화(BARE_DECISION_REF 131 + BARE_OWNER_REF 60, 20개 파일) — 5개 병렬 에이전트 적용 + ca-skeleton:1089·1091 윈도 귀속 케이스 2건은 D17/D13 owner 명시 wikilink 로 2회차 해소. 재검사 findings 0.
2026-07-18 /sync — Keycloak 관련 branch-note 38개 consistency 리뷰 적용. 4개 비중복 lane으로 38/38 READ_FULL, 36개 수정·2개 no-change. adversarial finding 60건 전부 처리(KEEP 21 + DOWNGRADE 27 반영, REJECT 12는 독립 결함으로 재도입하지 않고 필요한 active cleanup만 대표 owner에 통합). 주요 owner 결정: backend audience=`backend-client-id`, public issuer/internal JWKS 분리, P1 backend header-only, `(IdP alias, sub)` federation key, silent auto-link 차단, pure SPA memory-only/TMB variant 분리, named tunnel+managed domain, Caddy prefix 보존, library-first PKCE, Traefik AP4·absolute SPA endpoint. 검증: scope structure lint 38/38 PASS, Keycloak deterministic consistency finding 0, semantic 재감사 round 2 Ready(blocking 0/should-fix 0, 20/20), diff-check PASS. 전체 저장소의 비-Keycloak consistency 136건과 broken link 29건은 기존 out-of-scope로 보존. 적용 상태: `docs/superpowers/specs/2026-07-18-keycloak-branch-note-consistency/application-status.md`.
2026-07-18 23:16 /lint — raw/project-notes/ca-skeleton-frontend-operational-contract.md → CRITICAL 0, WARN 0, INFO 0