## Lane Inventory | Path | Status | Evidence Lines | Extracted Facts | | --- | --- | --- | --- | | `raw/project-notes/ca-skeleton-frontend-operational-contract.md` | READ_FULL | L1-509, preserved at `../process/pre-review-source.md` | prospective contract 상태, 20개 branch backlog, 구현·diagram·검증 artifact 부재 | ## Evidence Matrix | Path | Status | Evidence | Extracted facts | | --- | --- | --- | --- | | `raw/project-notes/ca-skeleton-frontend-operational-contract.md` | READ_FULL | L1-509 | target의 구조, 계약 위임, 의존 규칙, 실패·NFR·증거 경계를 확인 | ## Goal → Assumption → Action - Goal: backend 기준 문서와 같은 강제력을 갖는 frontend prospective operational contract. - Assumption: repository가 아직 없더라도 project-wide minimum default와 owner는 hub에서 고정할 수 있다. - Action: branch 세부 구현을 복제하지 않고 stable ID, minimum default, failure vocabulary, registry owner, acceptance/evidence schema를 hub에 추가한다. - Counterargument: 모든 구현 세부를 hub에 쓰면 branch SSOT와 drift한다. 따라서 branch-local algorithm·library configuration은 owner branch로 위임한다. ### L1-F01: 검증되지 않은 prospective contract - Source file: `raw/project-notes/ca-skeleton-frontend-operational-contract.md` - Original goal quote: "도메인/비즈니스 로직을 제거한 **Clean Architecture 프론트엔드 skeleton**. 어떤 화면·기능을 붙여도 (1) 같은 방식으로 백엔드 API 를 호출하고, (2) 같은 방식으로 실패를 분류·표시하고, (3) 같은 계층 의존 규칙을 강제하고, (4) 같은 계약 테스트로 깨짐을 감지하는 React SPA 뼈대." - Original goal line: `process/pre-review-source.md:24` - Source quote: "메인: `<미생성 — Vite + React + Tailwind SPA 레포 예정>` · `NO_GROUND_TRUTH`: 아직 코드 레포가 없어 본 hub 의 모든 구현 주장은 `planned` 등급이다(§9). `actually-implemented` 승격은 레포 생성 후 `src/` grep 으로만." - Source line: `process/pre-review-source.md:29` - Severity: Medium - Claim: 문서는 계약이 될 수 있으나 현재는 실행·검증되지 않은 prospective contract다. - Assumptions: 접근 가능한 로컬 범위에 구현 repository가 없고 원격 repository는 UNVERIFIED다. - Failure mode: 현재형 계약 문장이 부분 인용되면 구현 사실로 오인된다. - Falsification condition: repository URL·commit·test artifact가 계약 ID와 연결되면 이 finding은 해소된다. - Counterargument: 규범 계약은 구현보다 먼저 작성될 수 있으며 target도 `planned` 경계를 명시한다. - Recommendation: 문서 전체에 evidence boundary를 두고 계약별 grade·evidence path·not-run 상태를 기록한다. - Verification command: `sed -n '29p' 'docs/superpowers/specs/2026-07-18-ca-skeleton-frontend-operational-contract-review/process/pre-review-source.md'` - Verification result: " - 메인: `<미생성 — Vite + React + Tailwind SPA 레포 예정>` · `NO_GROUND_TRUTH`: 아직 코드 레포가 없어 본 hub 의 모든 구현 주장은 `planned` 등급이다(§9). `actually-implemented` 승격은 레포 생성 후 `src/` grep 으로만." ### L1-F02: branch 위임 전 project-wide minimum 부재 - Source file: `raw/project-notes/ca-skeleton-frontend-operational-contract.md` - Original goal quote: "본 문서는 **프로젝트의 최상위 hub**. 프로젝트 전체 컨텍스트 / 문제 정의 / 시스템 아키텍처 / 핵심 시퀀스가 여기에 집중." - Original goal line: `process/pre-review-source.md:17` - Source quote: "각 branch 의 *결정 내용·메커니즘은 여기 적지 않는다* (SSOT 이중화 방지) — 그건 `/branch ` 로 생성 후 `/branch-spec` 가 깊게 채운다." - Source line: `process/pre-review-source.md:318` - Severity: Medium - Claim: branch가 아직 없으므로 owner·minimum default·acceptance gate까지 위임하면 안전한 handoff가 성립하지 않는다. - Assumptions: §8.1의 branch는 아직 생성되지 않았고 target이 후속 branch의 기준점이다. - Failure mode: 서로 다른 branch가 timeout, retry, error, config의 기본값을 각각 정의해 충돌한다. - Falsification condition: 모든 branch가 생성되고 stable owner와 역링크가 있으며 hub owner map이 존재하면 해소된다. - Counterargument: algorithm과 library option을 hub에 복제하면 branch SSOT와 drift한다. - Recommendation: hub에는 project-wide minimum과 owner pointer만 두고 세부 algorithm은 branch로 위임한다. - Verification command: `sed -n '318p' 'docs/superpowers/specs/2026-07-18-ca-skeleton-frontend-operational-contract-review/process/pre-review-source.md'` - Verification result: "> **`/project-spec` 가 채우는 핸드오프 섹션.** 이 hub 에서 깊은 조사로 도출된 *자식 branch 의 네이밍과 달성 목표 조건만* 적는다. 각 branch 의 *결정 내용·메커니즘은 여기 적지 않는다* (SSOT 이중화 방지) — 그건 `/branch ` 로 생성 후 `/branch-spec` 가 깊게 채운다." ### L1-F03: required architecture diagram 미등록 - Source file: `raw/project-notes/ca-skeleton-frontend-operational-contract.md` - Original goal quote: "**필수 섹션.** 아키텍처 다이어그램이 없는 project-note 는 hub 역할을 못 함." - Original goal line: `process/pre-review-source.md:62` - Source quote: "**`needs-diagram` (`DIAGRAM_PENDING_USER`)** — 아키텍처 `.drawio` 는 `/project-spec` 가 자동 생성할 수 없다." - Source line: `process/pre-review-source.md:115` - Severity: Medium - Claim: 최소 architecture diagram은 project template의 hub gate인데 pre-review 문서에는 활성 artifact가 없다. - Assumptions: static dependency와 runtime call을 그림으로 구분해야 review가 가능하다. - Failure mode: CA dependency direction과 runtime HTTP 흐름을 같은 화살표로 해석한다. - Falsification condition: 실제 draw.io 파일, frontmatter 등록, embed, reviewer score가 존재하면 해소된다. - Counterargument: deployment diagram은 template에서 선택이고 누락 상태도 숨기지 않았다. - Recommendation: overview를 필수로 생성하고 deployment는 topology 설명 가치가 있을 때 유지한다. - Verification command: `sed -n '115p' 'docs/superpowers/specs/2026-07-18-ca-skeleton-frontend-operational-contract-review/process/pre-review-source.md'` - Verification result: "> ⏳ **`needs-diagram` (`DIAGRAM_PENDING_USER`)** — 아키텍처 `.drawio` 는 `/project-spec` 가 자동 생성할 수 없다. 아래 대상 파일을 사용자가 직접 작성한 뒤, 백틱을 풀어 활성 임베드(`![[...]]`)로 바꾼다. 그때까지는 **inline code span** 이라 구조 린터의 `BROKEN_LINK` 를 발생시키지 않는다. 이 항목은 readiness 게이트에서 **Blocking 이 아니라 Should-fix** 로 취급되어 판정이 `Ready-pending-user` 가 된다." ### L1-F04: stable decision owner와 내부 count 정합성 부재 - Source file: `raw/project-notes/ca-skeleton-frontend-operational-contract.md` - Original goal quote: "주요 기술 선택과 이유. 트레이드오프 + 근거 자료 link 필수." - Original goal line: `process/pre-review-source.md:282` - Source quote: "| 기술 결정 | `documented-only` | §6 6개 결정이 official 근거 보유 — 단 *결정*일 뿐 구현 아님 |" - Source line: `process/pre-review-source.md:395` - Severity: Medium - Claim: §6의 실제 선택 행 수와 §9의 6개 집계가 불일치하고 stable owner pointer가 없다. - Assumptions: 다수 branch가 같은 stack·config 결정을 소비한다. - Failure mode: 한 결정이 변경돼도 영향 branch와 superseded 결정을 추적하지 못한다. - Falsification condition: 각 decision이 stable ID·owner·status·revisit trigger와 연결되고 count 검사에 통과하면 해소된다. - Counterargument: 모든 ADR lifecycle metadata를 hub에 복제할 필요는 없다. - Recommendation: 경량 `FE-Dxxx` registry와 owner pointer를 두고 branch-local evidence는 link로 유지한다. - Verification command: `sed -n '395p' 'docs/superpowers/specs/2026-07-18-ca-skeleton-frontend-operational-contract-review/process/pre-review-source.md'` - Verification result: "| 기술 결정 | `documented-only` | §6 6개 결정이 official 근거 보유 — 단 *결정*일 뿐 구현 아님 |" ### L1-F05: port ownership 모호성 - Source file: `raw/project-notes/ca-skeleton-frontend-operational-contract.md` - Original goal quote: "의존 방향은 항상 바깥→안(presentation → application → domain). adapters 는 domain 이 정의한 port 를 구현해 바깥에서 주입된다." - Original goal line: `process/pre-review-source.md:140` - Source quote: "| `application` (hooks / use-cases) | 화면 로직 · 상태 오케스트레이션 · use-case 훅 | React hooks + TanStack Query | adapters port (인터페이스) |" - Source line: `process/pre-review-source.md:145` - Severity: High - Claim: prose의 domain-owned port와 표의 adapters port가 함께 존재해 application import 방향을 하나로 판정할 수 없다. - Assumptions: 이 hub가 dependency lint rule의 기준이 된다. - Failure mode: application이 adapter module의 interface를 import해 inward dependency rule을 위반한다. - Falsification condition: application-owned output port와 adapter implementation, composition-root wiring이 matrix와 lint fixture로 고정되면 해소된다. - Counterargument: `adapters port`가 "adapter가 구현하는 output port"를 뜻했을 수 있고 실제 코드 위반은 UNVERIFIED다. - Recommendation: port owner를 application으로 고정하고 adapter는 구현만, composition root만 concrete adapter를 안다. - Verification command: `sed -n '145p' 'docs/superpowers/specs/2026-07-18-ca-skeleton-frontend-operational-contract-review/process/pre-review-source.md'` - Verification result: "| `application` (hooks / use-cases) | 화면 로직 · 상태 오케스트레이션 · use-case 훅 | React hooks + TanStack Query | adapters port (인터페이스) |" ### L1-F06: cross-branch timeout·retry 종료 의미 부재 - Source file: `raw/project-notes/ca-skeleton-frontend-operational-contract.md` - Original goal quote: "도메인 없는 **sample feature slice** 화면이 `api-client → zod 검증 → error boundary → async 4-state → CA 의존 규칙`을 모두 관통하고, **계약 위반 시 실패하는 contract test** 가 CI 에서 green." - Original goal line: `process/pre-review-source.md:54` - Source quote: "Q-->>Q: retryable=true 면 exponential backoff 재시도" - Source line: `process/pre-review-source.md:213` - Severity: Medium - Claim: retry 여부만 있고 timeout owner, retry cap, abort, terminal handoff, unsafe mutation default가 없다. - Assumptions: 공용 `apiClient`와 Query wrapper가 여러 feature에서 재사용된다. - Failure mode: cancellation 뒤 retry가 계속되거나 non-idempotent mutation이 중복 실행된다. - Falsification condition: owner branch에 request class별 default와 contract test가 있고 hub가 minimum을 연결하면 해소된다. - Counterargument: `Retry-After`·jitter algorithm 등 모든 세부를 hub에 두면 중복이다. - Recommendation: hub에는 cross-branch minimum만 고정하고 status별 상세 mapping은 api-client owner branch로 위임한다. - Verification command: `sed -n '213p' 'docs/superpowers/specs/2026-07-18-ca-skeleton-frontend-operational-contract-review/process/pre-review-source.md'` - Verification result: " Q-->>Q: retryable=true 면 exponential backoff 재시도" ### L1-F07: auth 위임과 route guard 사이 session port 누락 - Source file: `raw/project-notes/ca-skeleton-frontend-operational-contract.md` - Original goal quote: "토큰 획득/저장/refresh 는 본 skeleton 범위 밖 → [[raw/project-notes/keycloak-patterns-overview]] 로 위임." - Original goal line: `process/pre-review-source.md:158` - Source quote: "| `feature-routing-navigation-guard-contract` | route 구조 + guarded route(비인증 redirect)·error/loading route·404 정의, 네비게이션 test | P2 | - |" - Source line: `process/pre-review-source.md:337` - Severity: Low - Claim: token lifecycle은 범위 밖이지만 route guard가 소비할 session-state port와 owner dependency가 없다. - Assumptions: route guard는 backend authorization을 대체하지 않고 탐색 UX만 담당한다. - Failure mode: routing code가 token storage 구현을 직접 참조하거나 redirect loop를 만든다. - Falsification condition: 주입형 session port와 401 mapping, backend authz 비대체 규칙이 존재하면 해소된다. - Counterargument: named 위임처 `keycloak-patterns-overview`는 이미 존재한다. - Recommendation: 얇은 `AuthSessionPort` 계약만 소유하고 token 획득·저장·refresh는 계속 위임한다. - Verification command: `sed -n '337p' 'docs/superpowers/specs/2026-07-18-ca-skeleton-frontend-operational-contract-review/process/pre-review-source.md'` - Verification result: "| `feature-routing-navigation-guard-contract` | route 구조 + guarded route(비인증 redirect)·error/loading route·404 정의, 네비게이션 test | P2 | - |" ### L1-F08: NFR evidence schema와 rollback owner 부재 - Source file: `raw/project-notes/ca-skeleton-frontend-operational-contract.md` - Original goal quote: "측정 가능한 비기능 목표. 없으면 명시적으로 \"해당 없음\"." - Original goal line: `process/pre-review-source.md:302` - Source quote: "- **재해 복구 / DR**: 정적 자산 재배포로 복구(RTO 낮음), 클라이언트 무상태(RPO 무관)." - Source line: `process/pre-review-source.md:312` - Severity: Medium - Claim: `RTO 낮음`은 측정 기준이 아니며 미정 hosting 환경에서도 tool-neutral evidence·rollback owner는 필요하다. - Assumptions: 문서가 CI, immutable asset 배포, cache와 release recovery를 project goal로 둔다. - Failure mode: bad asset가 배포됐을 때 이전 release 선택, cache 처리, recovery verification 순서가 결정되지 않는다. - Falsification condition: hosting 확정 후 command·artifact·owner·recovery evidence가 runbook에 연결되면 해소된다. - Counterargument: provider 미정 상태에서 vendor command나 dashboard URL을 쓰면 구현 사실을 발명한다. - Recommendation: hub에는 evidence schema와 provider-neutral rollback gate를 두고 exact provider command는 deploy branch로 위임한다. - Verification command: `sed -n '312p' 'docs/superpowers/specs/2026-07-18-ca-skeleton-frontend-operational-contract-review/process/pre-review-source.md'` - Verification result: "- **재해 복구 / DR**: 정적 자산 재배포로 복구(RTO 낮음), 클라이언트 무상태(RPO 무관)." ## §7.1 Self-grep proof - 8개 finding의 cited current-state quote는 `../sed-proofs.md`의 16개 command 중 대응 command로 검증했다. - V = 16 quote commands, P = 16, C = 0, D = 0, U = 0.