15 KiB
15 KiB
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 <slug>로 생성 후/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 <slug>로 생성 후/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-Dxxxregistry와 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.