70 KiB
title
| 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-AJ: 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-AJ)로 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-confirmationstrength 보유. - 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 Verifyfeature-file-resource-handling-contract: 12 decisions, 8 UNSUPPORTED, 9 Claims To Verifyfeature-keycloak-federation-spa-zero-change: 2 decisions, 0 UNSUPPORTED (모두 raw 인용 보유), 6 Claims To Verifyfeature-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)는 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)·UpdateWorkLogRequestJsonNullable→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 673718) D3 rule 3개 실재 — no_sse_emitter(C5/RFC6455-C1SseEmitter 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-C1C5/RFC9112-CHUNK-C1/SPRING-ASYNC-C2C4/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% 정직상향·주식 90100%) + 2026-06-08 조사 → wiki/invest-plan/active-plan.md 갱신. 목표배분 광범위 주식 ETF 90100%+현금 010%. 워치리스트 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만→2001000만→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