161 lines
70 KiB
Markdown
161 lines
70 KiB
Markdown
---
|
||
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
|