diff --git a/raw/branch-notes/feature-frontend-background-execution-worker-contract.md b/raw/branch-notes/feature-frontend-background-execution-worker-contract.md index a79ac97..b47f4b0 100644 --- a/raw/branch-notes/feature-frontend-background-execution-worker-contract.md +++ b/raw/branch-notes/feature-frontend-background-execution-worker-contract.md @@ -11,8 +11,8 @@ refines: [] overrides: [] depends_on: [WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-005, WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-024] imports: [FE-GATE-032@1, FE-OC-009@1, FE-OC-016@1, FE-OC-017@1, FE-OC-025@1] -delegates: [DELEG-FE-011] -accepts_delegations: [DELEG-FE-007] +delegates: [DELEG-FE-011@1] +accepts_delegations: [DELEG-FE-007@1] contract_packet: 1 branch: feature-frontend-background-execution-worker-contract parent_branch: @@ -99,7 +99,7 @@ status_label: in-progress | Delegation Ref | From | Concern | Status | |---|---|---|---| -| `DELEG-FE-007` | `feature-frontend-realtime-subscription-lifecycle-contract` | WebPush 가 요구하는 service worker 등록·수명주기 호스팅 | accepted | +| `DELEG-FE-007@1` | [[raw/branch-notes/feature-frontend-realtime-subscription-lifecycle-contract]] | `fe.deleg.sw-host-for-push` | accepted | diff --git a/raw/branch-notes/feature-frontend-binary-file-io-store-contract.md b/raw/branch-notes/feature-frontend-binary-file-io-store-contract.md index a63d342..02548ec 100644 --- a/raw/branch-notes/feature-frontend-binary-file-io-store-contract.md +++ b/raw/branch-notes/feature-frontend-binary-file-io-store-contract.md @@ -12,7 +12,7 @@ overrides: [] depends_on: [WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-002, WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-011] imports: [FE-GATE-027@1, FE-OC-002@1, FE-OC-013@1, FE-OC-022@1] delegates: [] -accepts_delegations: [DELEG-FE-008] +accepts_delegations: [DELEG-FE-008@1] contract_packet: 1 branch: feature-frontend-binary-file-io-store-contract parent_branch: @@ -90,7 +90,7 @@ status_label: in-progress | Delegation Ref | From | Concern | Status | |---|---|---|---| -| `DELEG-FE-008` | `feature-frontend-large-object-transfer-contract` | 전송 대상 `File`/`Blob` handle 과 object URL 수명 소유 | accepted | +| `DELEG-FE-008@1` | [[raw/branch-notes/feature-frontend-large-object-transfer-contract]] | `fe.deleg.binary-handle-ownership` | accepted | diff --git a/raw/branch-notes/feature-frontend-cache-tier-cross-tab-invalidation-contract.md b/raw/branch-notes/feature-frontend-cache-tier-cross-tab-invalidation-contract.md index 56c9c46..96f17b3 100644 --- a/raw/branch-notes/feature-frontend-cache-tier-cross-tab-invalidation-contract.md +++ b/raw/branch-notes/feature-frontend-cache-tier-cross-tab-invalidation-contract.md @@ -11,7 +11,7 @@ refines: [] overrides: [] depends_on: [WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-010, WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-011] imports: [FE-GATE-028@1, FE-OC-012@1, FE-OC-013@1, FE-OC-023@1] -delegates: [DELEG-FE-009] +delegates: [DELEG-FE-009@1] accepts_delegations: [] contract_packet: 1 branch: feature-frontend-cache-tier-cross-tab-invalidation-contract diff --git a/raw/branch-notes/feature-frontend-contract-compatibility-governance.md b/raw/branch-notes/feature-frontend-contract-compatibility-governance.md index 67fa96b..f5a9057 100644 --- a/raw/branch-notes/feature-frontend-contract-compatibility-governance.md +++ b/raw/branch-notes/feature-frontend-contract-compatibility-governance.md @@ -45,7 +45,7 @@ imports: [ART-FE-003@1, FE-GATE-004@1, FE-GATE-015@1, FE-GATE-016@1, FE-OC-004@1 | Decision Ref | Project Summary | Branch Application | Source | |---|---|---|---| -| `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-REGISTRY-001@1` | route, API operation, env, storage, error, query, telemetry, release token을 8개 registry로 관리한다 | registry 변경의 compatibility impact와 version tuple 입력을 집행한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | +| `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-REGISTRY-001@1` | route, API operation, env, storage, error, query, telemetry, release token, capability를 9개 registry로 관리한다 | registry 변경의 compatibility impact와 version tuple 입력을 집행한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | | `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-CONFIG-FALLBACK-001@1` | runtime config fallback 시 environment별 rebuild는 허용하되 artifact의 multi-environment 재사용은 금지한다 | config 변경의 migration·fallback·rollback 호환성 규칙에 적용한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | @@ -96,7 +96,7 @@ imports: [ART-FE-003@1, FE-GATE-004@1, FE-GATE-015@1, FE-GATE-016@1, FE-OC-004@1 - runtime config schema 정의·boot 검증 mechanism → [[raw/branch-notes/feature-frontend-env-runtime-config-contract]] (owns `FE-OC-004`). - boundary runtime(Zod) schema 검증 → [[raw/branch-notes/feature-runtime-schema-validation-contract]] (owns `FE-OC-007`). - storage key namespace·schemaVersion·migration mechanism → [[raw/branch-notes/feature-frontend-storage-registry-contract]] (owns `FE-OC-013`). -- 8개 registry single-owner·diff-check tooling → [[raw/branch-notes/feature-frontend-contract-registry-governance]] (owns `FE-OC-022`). +- 9개 registry single-owner·diff-check tooling → [[raw/branch-notes/feature-frontend-contract-registry-governance]] (owns `FE-OC-022`). - release directory·atomic pointer·실제 rollback drill 실행 → [[raw/branch-notes/feature-frontend-release-cache-rollback-contract]] (owns `FE-OC-016`, `FE-OC-017`). - API client retry/idempotency 동작 → [[raw/branch-notes/feature-api-client-response-envelope-contract]] (owns `FE-OC-006`, `FE-OC-009`). - CI gate blocking 분리 wiring → [[raw/branch-notes/feature-frontend-ci-quality-gates-contract]]. @@ -226,7 +226,7 @@ gate 소유 매핑: - 호환 불가 cache → discard, 재사용 금지(§9.2, D6). - partial rollout / cached config / mixed release: tuple 조합이 incompatible일 수 있음 → R4로 강등, 잔여는 `needs-confirmation`. - **다른 계약 의존** (§20 Dependency + §4.3 matrix; 각 sibling은 FE-OC 계약으로만 참조 — 로컬 D 번호 미확인): - - [[raw/branch-notes/feature-frontend-contract-registry-governance]] 의 `FE-OC-022` — 8개 registry가 single owner·compatibility impact를 기록해야 본 브랜치 분류가 대상 필드를 가짐. 그 계약이 바뀌면 §1 tuple 행렬 필드 source가 흔들린다. + - [[raw/branch-notes/feature-frontend-contract-registry-governance]] 의 `FE-OC-022` — 9개 registry가 single owner·compatibility impact를 기록해야 본 브랜치 분류가 대상 필드를 가짐. 그 계약이 바뀌면 §1 tuple 행렬 필드 source가 흔들린다. - [[raw/branch-notes/feature-runtime-schema-validation-contract]] 의 `FE-OC-007` — boundary schema 검증이 additive/breaking을 실제로 감지(unknown key strict/passthrough)한다. §2 분류의 런타임 근거. - [[raw/branch-notes/feature-frontend-storage-registry-contract]] 의 `FE-OC-013` — storage `schemaVersion`·migration/discard mechanism 소유. 본 브랜치의 cache-discard 결정과 §3 R2가 이 계약 위에서 동작. - [[raw/branch-notes/feature-frontend-env-runtime-config-contract]] 의 `FE-OC-004` — `CONFIG_SCHEMA_VERSION` 을 runtime config로 공급(그 브랜치 결정 근거는 hub [[raw/project-notes/ca-skeleton-frontend-operational-contract]] FE-D012, FE-D013). diff --git a/raw/branch-notes/feature-frontend-contract-registry-governance.md b/raw/branch-notes/feature-frontend-contract-registry-governance.md index 68e6c13..bf7ccc9 100644 --- a/raw/branch-notes/feature-frontend-contract-registry-governance.md +++ b/raw/branch-notes/feature-frontend-contract-registry-governance.md @@ -39,21 +39,21 @@ imports: [FE-OC-004@1, FE-OC-005@1, FE-OC-006@1, FE-OC-008@1, FE-OC-012@1, FE-OC - **생성 시 프로젝트 개정**: `1` - **패킷 스키마**: `contract_packet: 1` -- **완료 조건**: 8개 registry snapshot·schema validation·single-owner check가 통과한다 +- **완료 조건**: 9개 registry snapshot·schema validation·single-owner check가 통과한다 ### 상속한 프로젝트 결정 | Decision Ref | Project Summary | Branch Application | Source | |---|---|---|---| -| `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-REGISTRY-001@1` | route, API operation, env, storage, error, query, telemetry, release token을 8개 registry로 관리한다 | 8개 registry의 owner·schema·impact·snapshot governance를 집행한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | +| `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-REGISTRY-001@1` | route, API operation, env, storage, error, query, telemetry, release token, capability를 9개 registry로 관리한다 | 9개 registry의 owner·schema·impact·snapshot governance를 집행한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | ### 브랜치 지역 결정 | Decision ID | Decision | Relation | Supporting Claims | Status | |---|---|---|---|---| -| D1 | 8개 registry를 single-owner model로 관리한다 | `local` | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | `proposed` | +| D1 | 9개 registry를 single-owner model로 관리한다 | `local` | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | `proposed` | | D2 | project owner map을 registry 소유 SSOT로 사용한다 | `local` | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | `proposed` | | D3 | 모든 registry change에 compatibility impact를 기록한다 | `local` | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | `proposed` | | D4 | uniform schema validation과 orphan scan을 실행한다 | `local` | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | `proposed` | @@ -72,7 +72,7 @@ imports: [FE-OC-004@1, FE-OC-005@1, FE-OC-006@1, FE-OC-008@1, FE-OC-012@1, FE-OC ## 목표 -- 이 branch는 `FE-OC-022`(8개 registry는 single primary owner와 compatibility impact를 MUST 기록)를 *구현 착수 가능한 governance 명세*로 내린다. 근거는 [[raw/project-notes/ca-skeleton-frontend-operational-contract]] FE-D018 (route/API-operation/env/storage/error/query/telemetry/release token을 8개 registry로 관리)이며, 관리 대상 registry 목록과 owner는 [[raw/project-notes/ca-skeleton-frontend-operational-contract]] §5.1 owner map, 변경 절차는 §5.10, compatibility 분류는 §3.3에서 온다. +- 이 branch는 `FE-OC-022`(9개 registry는 single primary owner와 compatibility impact를 MUST 기록)를 *구현 착수 가능한 governance 명세*로 내린다. 근거는 [[raw/project-notes/ca-skeleton-frontend-operational-contract]] FE-D018 (route/API-operation/env/storage/error/query/telemetry/release/capability token은 9개 registry로 관리)이며, 관리 대상 registry 목록과 owner는 [[raw/project-notes/ca-skeleton-frontend-operational-contract]] §5.1 owner map, 변경 절차는 §5.10, compatibility 분류는 §3.3에서 온다. - 본 branch는 **registry의 *내용*(각 registry의 schema field·row)을 재정의하지 않는다.** 각 registry의 schema는 그 registry의 owner branch가 소유한다(§5.2~§5.9). 본 branch는 그 registry들을 *가로질러* 강제하는 **governance 규칙**만 소유한다: owner map single-owner check, uniform schema-validation harness, compatibility-impact 기록 gate, per-registry snapshot/diff. 모든 항목은 repo가 없으므로 `planned`. - 이슈: 없음 (스캐폴딩 단계) - PR: 없음 @@ -83,7 +83,7 @@ imports: [FE-OC-004@1, FE-OC-005@1, FE-OC-006@1, FE-OC-008@1, FE-OC-012@1, FE-OC ### 포함 범위 - **owner map governance** — [[raw/project-notes/ca-skeleton-frontend-operational-contract]] §5.1의 8-registry owner map을 registry 소유의 SSOT로 고정하고, single-owner check(registry당 owner가 0개/2개 이상이면 fail)를 정의 (`FE-OC-022`). -- **uniform schema-validation harness** — 8개 registry 각 row가 *owner가 선언한* minimum schema(§5.2~§5.9)를 만족하는지 대조 + orphan/ad hoc token scan = 0 (`FE-SC-005`, §5.10 step 8). +- **uniform schema-validation harness** — 9개 registry 각 row가 *owner가 선언한* minimum schema(§5.2~§5.9, §5.11)를 만족하는지 대조 + orphan/ad hoc token scan = 0 (`FE-SC-005`, §5.10 step 8). - **compatibility-impact 기록 gate** — 모든 registry change가 `compatibility_impact ∈ {none, additive, behavior-change, breaking}`를 MUST 기록 (§3.3, §5.10). - **per-registry snapshot + diff artifact** — `FE-OC-022`의 minimum evidence(registry diff check) 산출물. - **producer/consumer test 동기 갱신 gate** — registry change 시 producer test와 consumer test가 *함께* 갱신되었음을 검사 가능한 증거로 강제 (§5.10 step 5). 개별 test 자체의 계층·러너·fixture 책임은 [[raw/branch-notes/feature-frontend-test-taxonomy-contract]] (`FE-OC-020`) 소유이며, 본 branch는 *registry change 시점의 동기 갱신 여부*만 gate 한다. @@ -112,7 +112,7 @@ imports: [FE-OC-004@1, FE-OC-005@1, FE-OC-006@1, FE-OC-008@1, FE-OC-012@1, FE-OC 각 항목 옆에 증거 등급 표기. 현재 frontend repo 부재 → 전부 `planned`. - [ ] §5.1 owner map을 governance manifest로 고정 + single-owner check(zero/duplicate owner fail) 정의 — 등급: `planned` -- [ ] 8개 registry를 owner minimum schema(§5.2~§5.9)로 검증하는 uniform validation harness 명세 — 등급: `planned` +- [ ] 9개 registry를 owner minimum schema(§5.2~§5.9, §5.11)로 검증하는 uniform validation harness 명세 — 등급: `planned` - [ ] orphan/ad hoc token scan = 0 (`FE-SC-005`) 규칙 + 실패 fixture 정의 — 등급: `planned` - [ ] registry change 시 `compatibility_impact` 4-label 기록 gate + behavior-change/breaking merge block 규칙 — 등급: `planned` - [ ] per-registry snapshot + diff artifact(owner·affected FE-OC·impact 표면화) 명세 — 등급: `planned` @@ -139,7 +139,7 @@ imports: [FE-OC-004@1, FE-OC-005@1, FE-OC-006@1, FE-OC-008@1, FE-OC-012@1, FE-OC | Decision ID | Decision | 선택 조건 (언제 이 결정 / 언제 대안) | Supporting Claims | Evidence Strength | Open Risk | |---|---|---|---|---|---| -| D1 | 8개 registry를 single-owner governance model로 관리 ([[raw/project-notes/ca-skeleton-frontend-operational-contract]] FE-D018 / `FE-OC-022`) | hand-maintained registry 파일 + governance gate가 default; code generation SSOT가 채택되면 generated registry로 전환 (FE-D018 revisit trigger) | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] FE-D018, §5.1 | `project-decision` (accepted-documented-only) | FE-D018은 code evidence 없는 accepted-documented-only — repo 생성 전까지 governance gate 미검증 | +| D1 | 9개 registry를 single-owner governance model로 관리 ([[raw/project-notes/ca-skeleton-frontend-operational-contract]] FE-D018 / `FE-OC-022`) | hand-maintained registry 파일 + governance gate가 default; code generation SSOT가 채택되면 generated registry로 전환 (FE-D018 revisit trigger) | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] FE-D018, §5.1 | `project-decision` (accepted-documented-only) | FE-D018은 code evidence 없는 accepted-documented-only — repo 생성 전까지 governance gate 미검증 | | D2 | owner map §5.1이 registry 소유 SSOT; single-owner check가 zero/duplicate owner를 차단 (`FE-OC-022`) | registry당 정확히 1 owner가 invariant; 공동 소유가 필요하면 명시적 co-owner protocol을 신규 제안(planned)해야 하며 그 전엔 single-owner 강제 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] §5.1 (`FE-OC-022`) | `project-decision` | owner map이 owner branch보다 늦게 갱신되면 `STALE_OWNER` 위험 | | D3 | registry change마다 `compatibility_impact`(none/additive/behavior-change/breaking) 기록; behavior-change/breaking은 migration/rollback/test 없이 merge 금지 (§3.3) | `none`·`additive`는 gate 통과; `behavior-change`·`breaking`은 version bump + migration/rollback/test evidence 필요(version-tuple 메커니즘은 `FE-OC-023` owner branch) | `raw/official-docs/semver-2-0-0-spec-semver-official.md#SEMVER-C1`; [[raw/project-notes/ca-skeleton-frontend-operational-contract]] §3.3 · §5.10 | `official-doc + project-decision` | `SEMVER-C1`은 *무엇이* breaking인지 자동 분류하지 않음 — label 판정은 사람 판단, 오분류 위험 | | D4 | uniform schema-validation harness가 각 registry를 owner-declared minimum schema(§5.2~§5.9)로 검증 + orphan/ad hoc token scan 0 | 각 registry schema는 owner branch가 §5.2~§5.9에서 선언; governance는 그 schema 대조 + `FE-SC-005` orphan scan만 수행, schema 내용은 재정의 안 함 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] §5.10 step 8 (`FE-OC-022`, `FE-SC-005`) | `project-decision` | validation 라이브러리/방식 미지정(UNSUPPORTED_IMPL_DECISION); owner schema 변경 시 harness 동기화 필요 | @@ -154,7 +154,7 @@ imports: [FE-OC-004@1, FE-OC-005@1, FE-OC-006@1, FE-OC-008@1, FE-OC-012@1, FE-OC > **Trace**: D1 + D2 — [[raw/project-notes/ca-skeleton-frontend-operational-contract]] FE-D018, §5.1 (`FE-OC-022`). > -> - **UNSUPPORTED_IMPL_DECISION**: governance manifest 파일 경로 — hub §4.6 blueprint의 `src/contracts/`에는 8개 registry 파일만 있고 governance manifest 파일이 없다. 제안: `src/contracts/registry-manifest.js` (planned). trade-off: registry 8파일 옆에 두면 응집도↑이나 registry 파일과 manifest를 혼동할 위험 → 파일명에 `-manifest` 접미로 구분. +> - **UNSUPPORTED_IMPL_DECISION**: governance manifest 파일 경로 — hub §4.6 blueprint의 `src/contracts/`에는 9개 registry 파일만 있고 governance manifest 파일이 없다. 제안: `src/contracts/registry-manifest.js` (planned). trade-off: registry 9파일 옆에 두면 응집도↑이나 registry 파일과 manifest를 혼동할 위험 → 파일명에 `-manifest` 접미로 구분. owner map(§5.1에서 그대로 도출 — registry의 *내용*이 아니라 *소유*만 governance가 소유): @@ -256,9 +256,9 @@ gate 규칙: | 각 registry row가 owner minimum schema를 만족한다 | schema harness 미구현 | schema validation fixture: required-field 누락 row가 fail (§20 measurable: schema validation) | `needs-confirmation` | | orphan/ad hoc token scan이 0 (`FE-SC-005`) | frontend code 없음 | bidirectional orphan token scan fixture (registry↔code) | `needs-confirmation` | | 모든 registry change가 `compatibility_impact`를 기록한다 | gate 미구현 | change-protocol gate fixture: label 없는 change가 fail | `needs-confirmation` | -| snapshot diff가 affected FE-OC + compatibility impact를 표면화한다 | snapshot 미구현 | snapshot diff test: additive vs breaking fixture의 diff 비교 (§20 measurable: 8 registry snapshots) | `needs-confirmation` | +| snapshot diff가 affected FE-OC + compatibility impact를 표면화한다 | snapshot 미구현 | snapshot diff test: additive vs breaking fixture의 diff 비교 (§20 measurable: 9 registry snapshots) | `needs-confirmation` | | registry change 시 producer/consumer test가 함께 갱신됨을 gate가 검출한다 (§5.10 step 5) | gate 미구현, hub는 원칙만 진술하고 판정 메커니즘 미지정 | 3개 negative fixture: (1) registry token rename + test 미수정 PR → `unsynced-registry-test` fail, (2) registry에서 제거된 token을 참조하는 test → `stale-test-token` fail, (3) test 참조 없는 신규 token → `untested-new-token` fail | `needs-confirmation` | -| `non-owner-mutation`을 path-glob repo ownership으로 검사할 수 있다 | CODEOWNERS/glob 검사 미구현, git host 기능 종속 | owner map의 8 registry path glob과 ownership 선언이 1:1 대응하는지 대조 + non-owner 경로 수정 fixture가 block 되는지 확인 | `needs-confirmation` | +| `non-owner-mutation`을 path-glob repo ownership으로 검사할 수 있다 | CODEOWNERS/glob 검사 미구현, git host 기능 종속 | owner map의 9 registry path glob과 ownership 선언이 1:1 대응하는지 대조 + non-owner 경로 수정 fixture가 block 되는지 확인 | `needs-confirmation` | ## 관심사 커버리지 (coverage-auditor 자동 생성 — 있을 때) diff --git a/raw/branch-notes/feature-frontend-env-runtime-config-contract.md b/raw/branch-notes/feature-frontend-env-runtime-config-contract.md index 55ffea4..e77b167 100644 --- a/raw/branch-notes/feature-frontend-env-runtime-config-contract.md +++ b/raw/branch-notes/feature-frontend-env-runtime-config-contract.md @@ -6,7 +6,7 @@ id: BR-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-004 kind: project-work-item project: ca-skeleton-frontend-operational-contract work_item: WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-004 -inherits: [DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-RUNTIME-CONFIG-001@1, DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-CONFIG-FALLBACK-001@1] +inherits: [DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-RUNTIME-CONFIG-001@1, DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-CONFIG-FALLBACK-001@1, DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-CAPABILITY-001@1] refines: [] overrides: [] depends_on: [WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-001] @@ -20,7 +20,7 @@ created: 2026-07-18 target_merge: status_label: in-progress contract_packet_sha256: 781ef2d614370c6a8603dfd4c254c8584737803fa6f88b19159cb46a349e841c -imports: [FE-GATE-004@1, FE-OC-002@1, FE-OC-003@1, FE-OC-007@1, FE-OC-008@1, FE-OC-009@1, FE-OC-014@1, FE-OC-016@1, FE-OC-019@1, FE-OC-022@1, FE-OC-023@1, FE-OC-025@1] +imports: [FE-GATE-004@1, FE-GATE-033@1, FE-OC-002@1, FE-OC-003@1, FE-OC-007@1, FE-OC-008@1, FE-OC-009@1, FE-OC-014@1, FE-OC-016@1, FE-OC-019@1, FE-OC-022@1, FE-OC-023@1, FE-OC-025@1] --- # branch: feature-frontend-env-runtime-config-contract @@ -47,6 +47,7 @@ imports: [FE-GATE-004@1, FE-OC-002@1, FE-OC-003@1, FE-OC-007@1, FE-OC-008@1, FE- |---|---|---|---| | `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-RUNTIME-CONFIG-001@1` | deploy별 public value는 runtime config, compiler value는 build-time config로 분리한다 | config registry와 pre-mount runtime config validation에 적용한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | | `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-CONFIG-FALLBACK-001@1` | runtime config fallback 시 environment별 rebuild는 허용하되 artifact의 multi-environment 재사용은 금지한다 | static-only hosting fallback과 artifact 재사용 금지에 적용한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | +| `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-CAPABILITY-001@1` | 신규 runtime capability 6종은 FE-REG-CAPABILITY flag로 default OFF이며 활성화는 owner·gate·runbook을 동반한다 | `FE-REG-CAPABILITY`(hub §5.11) registry owner 로서 capability flag 6개의 schema·기본값·검증을 소유하고 `FE-GATE-033` 을 집행한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | ### 브랜치 지역 결정 @@ -92,6 +93,8 @@ imports: [FE-GATE-004@1, FE-OC-002@1, FE-OC-003@1, FE-OC-007@1, FE-OC-008@1, FE- - boot 실패 시 화면 노출 safe-field allowlist + redaction (hub §6.4) - environment별 rebuild fallback 규칙: 한 artifact를 여러 env에 재사용하지 않음 (`FE-D013`) - **boot config 검증 시간 예산 `FE-NFR-006`(≤ 500ms, network delay 제외)의 측정 경계와 valid-config timing fixture** — `FE-GATE-004` pass condition의 timing 절반 (hub §14.2, §15.1) +- **`FE-REG-CAPABILITY` registry(`src/contracts/capabilities.js`)의 schema·초기 6행·single-owner 규칙** — capability flag 는 runtime config 키이므로 env registry owner 가 자연 owner다 (`FE-D026`, hub §5.11) +- **`FE-GATE-033` capability default-off 게이트** — 기본 config 로 production build 했을 때 비활성 capability 의 adapter 가 어떤 chunk 에도 없음을 증명 (`FE-NFR-020`, hub §15.1) ### 제외 범위 @@ -322,6 +325,8 @@ gate 는 두 소유자의 fixture 가 모두 있어야 PASS 하므로, 어느 | boot invalid-config matrix의 각 invalid 입력이 기대 boot 결과(`BOOT_CONFIG_FAILURE`/`DEPLOY_MISMATCH`/boot fail)로 매핑 | 다양한 실패 조합의 실제 boot 분기 미검증 | **boot invalid-config matrix** 테스트(§20 Measurable completion) | `needs-confirmation` | | runtime config가 `no-store`로 fetch되고 React mount 이전에 검증됨(실패 시 product route mount 안 됨) | 조립 순서·no-store가 코드로 보장되는지 미검증 | boot ordering 통합 테스트(mount 이전 fetch·실패 시 route 미mount 확인) | `needs-confirmation` | | boot 실패 화면이 safe-field만 노출(endpoint·raw config·stack 미유출) | redaction 강제 여부 미검증 | boot error shell redaction negative fixture | `needs-confirmation` | +| capability flag 6개가 전부 OFF인 기본 config 로 build 하면 대응 adapter 가 번들에 없다 | 정적 import 하나면 조용히 포함됨. tree-shaking 이 보장하지 않음 | `FE-GATE-033` capability bundle report — 각 adapter 모듈 경로가 어떤 chunk 에도 없는지 대조 | `planned` | +| capability 전부 OFF 일 때 initial JS gzip 증가가 0 KiB 다 | `FE-NFR-001` 예산을 신규 기능이 잠식할 수 있음 | bundle report 비교 — 확장 전후 initial chunk 크기 (`FE-NFR-020`) | `planned` | | 한 artifact를 여러 env에 재사용하지 않음(`FE-D013`) | 배포 프로세스 속성 — unit test로 완전 증명 불가 | 배포 파이프라인 assertion + env별 artifact hash 대조(문서화된 deploy check) | `needs-confirmation` | | non-`VITE_` build 변수가 client 번들로 유출되지 않음 | 번들 정적 치환 경계는 실제 빌드로만 확인 | build 후 bundle scan (`FE-OC-019` browser-security와 교차) | `needs-confirmation` | | valid config 검증이 `FE-NFR-006` 예산(≤ 500ms, mocked network delay 제외) 안에 들어옴 | 코드·검증 로직 미존재. 8항 검증 + schema 라이브러리(`FE-OC-007`)의 deep clone/parse 비용이 미측정이라 500ms 가 여유인지 빠듯한지 알 수 없음 | runtime key 10개를 채운 valid-config timing fixture 5회 실행의 중앙값 측정(impl §6) → `FE-GATE-004` timing report | `needs-confirmation` | diff --git a/raw/branch-notes/feature-frontend-large-object-transfer-contract.md b/raw/branch-notes/feature-frontend-large-object-transfer-contract.md index bfa6938..22edfec 100644 --- a/raw/branch-notes/feature-frontend-large-object-transfer-contract.md +++ b/raw/branch-notes/feature-frontend-large-object-transfer-contract.md @@ -11,7 +11,7 @@ refines: [] overrides: [] depends_on: [WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-005, WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-028] imports: [FE-GATE-029@1, FE-OC-006@1, FE-OC-019@1, FE-OC-027@1] -delegates: [DELEG-FE-008] +delegates: [DELEG-FE-008@1] accepts_delegations: [] contract_packet: 1 branch: feature-frontend-large-object-transfer-contract diff --git a/raw/branch-notes/feature-frontend-multi-protocol-api-transport-contract.md b/raw/branch-notes/feature-frontend-multi-protocol-api-transport-contract.md index dd6ea61..a980820 100644 --- a/raw/branch-notes/feature-frontend-multi-protocol-api-transport-contract.md +++ b/raw/branch-notes/feature-frontend-multi-protocol-api-transport-contract.md @@ -11,7 +11,7 @@ refines: [] overrides: [] depends_on: [WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-005, WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-006, WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-007] imports: [FE-GATE-030@1, FE-OC-006@1, FE-OC-007@1, FE-OC-008@1, FLOW-FE-RESP-004@1, FLOW-FE-RESP-005@1, FLOW-FE-RESP-006@1] -delegates: [DELEG-FE-010] +delegates: [DELEG-FE-010@1] accepts_delegations: [] contract_packet: 1 branch: feature-frontend-multi-protocol-api-transport-contract diff --git a/raw/branch-notes/feature-frontend-observability-logging-trace-contract.md b/raw/branch-notes/feature-frontend-observability-logging-trace-contract.md index b981a9e..1815fda 100644 --- a/raw/branch-notes/feature-frontend-observability-logging-trace-contract.md +++ b/raw/branch-notes/feature-frontend-observability-logging-trace-contract.md @@ -47,7 +47,7 @@ imports: [FE-OC-008@1, FE-OC-015@1, FE-OC-021@1, FE-OC-025@1] | Decision Ref | Project Summary | Branch Application | Source | |---|---|---|---| | `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-TELEMETRY-001@1` | telemetry는 best-effort queue와 redaction을 사용하며 sink failure가 UI를 실패시키지 않는다 | TelemetryPort·queue·redaction·degradation 계약에 적용한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | -| `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-REGISTRY-001@1` | route, API operation, env, storage, error, query, telemetry, release token을 8개 registry로 관리한다 | hub §5.8이 정의한 FE-REG-TELEMETRY 스키마·초기 event를 코드 registry로 구현한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | +| `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-REGISTRY-001@1` | route, API operation, env, storage, error, query, telemetry, release token, capability를 9개 registry로 관리한다 | hub §5.8이 정의한 FE-REG-TELEMETRY 스키마·초기 event를 코드 registry로 구현한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | ### 브랜치 지역 결정 diff --git a/raw/branch-notes/feature-frontend-realtime-subscription-lifecycle-contract.md b/raw/branch-notes/feature-frontend-realtime-subscription-lifecycle-contract.md index a79c0db..4c9c69d 100644 --- a/raw/branch-notes/feature-frontend-realtime-subscription-lifecycle-contract.md +++ b/raw/branch-notes/feature-frontend-realtime-subscription-lifecycle-contract.md @@ -11,7 +11,7 @@ refines: [] overrides: [] depends_on: [WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-006, WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-007, WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-013] imports: [FE-GATE-031@1, FE-OC-007@1, FE-OC-008@1, FE-OC-011@1, FE-OC-025@1, FLOW-FE-EVENT-003@1, FLOW-FE-EVENT-004@1, FLOW-FE-EVENT-005@1] -delegates: [DELEG-FE-007] +delegates: [DELEG-FE-007@1] accepts_delegations: [] contract_packet: 1 branch: feature-frontend-realtime-subscription-lifecycle-contract diff --git a/raw/branch-notes/feature-frontend-release-cache-rollback-contract.md b/raw/branch-notes/feature-frontend-release-cache-rollback-contract.md index e3f1dab..b6e16ce 100644 --- a/raw/branch-notes/feature-frontend-release-cache-rollback-contract.md +++ b/raw/branch-notes/feature-frontend-release-cache-rollback-contract.md @@ -6,7 +6,7 @@ id: BR-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-024 kind: project-work-item project: ca-skeleton-frontend-operational-contract work_item: WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-024 -inherits: [DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-DEPLOYMENT-001@1, DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-CACHE-POLICY-001@1, DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-OFFLINE-CACHE-001@1] +inherits: [DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-DEPLOYMENT-001@1, DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-CACHE-POLICY-001@1, DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-OFFLINE-CACHE-001@2] refines: [] overrides: [] depends_on: [WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-020, WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-004, WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-023] @@ -21,6 +21,7 @@ target_merge: status_label: in-progress contract_packet_sha256: 63a7ea47dea99d7a8dfe7275a2636dd5f529c280884fe593d2f083dfb15ed1fc imports: [ART-FE-001@1, FE-OC-019@1] +accepts_delegations: [DELEG-FE-011@1] --- # branch: feature-frontend-release-cache-rollback-contract @@ -47,7 +48,7 @@ imports: [ART-FE-001@1, FE-OC-019@1] |---|---|---|---| | `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-DEPLOYMENT-001@1` | static release는 immutable release directory와 atomic active pointer로 배포한다 | immutable release layout·atomic switch·rollback에 적용한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | | `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-CACHE-POLICY-001@1` | hashed asset은 immutable, HTML·runtime config·release manifest는 revalidate/no-store로 분리한다 | surface별 cache header와 coherence gate에 적용한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | -| `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-OFFLINE-CACHE-001@1` | service worker와 offline asset cache는 default off다 | service worker registration과 offline cache 기본 정책에 적용한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | +| `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-OFFLINE-CACHE-001@2` | service worker의 release asset precaching은 default off이고 push·background sync·Cache Storage 호스트 역할만 capability opt-in으로 허용한다 | release asset precaching 은 off 로 유지하고, capability opt-in 된 service worker 의 버전(`serviceWorkerVersion`)을 release·rollback coherence 판정에 연결한다 (`DELEG-FE-011`) | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | ### 브랜치 지역 결정 @@ -254,6 +255,14 @@ imports: [ART-FE-001@1, FE-OC-019@1] ## 묶음 (이 branch에서 파생된 자료) + +### 수신한 위임 + +| Delegation Ref | From | Concern | Status | +|---|---|---|---| +| `DELEG-FE-011@1` | [[raw/branch-notes/feature-frontend-background-execution-worker-contract]] | `fe.deleg.sw-release-coherence` | accepted | + + ## 가져온 프로젝트 계약 diff --git a/raw/branch-notes/feature-frontend-storage-registry-contract.md b/raw/branch-notes/feature-frontend-storage-registry-contract.md index 3c44f16..3b7451f 100644 --- a/raw/branch-notes/feature-frontend-storage-registry-contract.md +++ b/raw/branch-notes/feature-frontend-storage-registry-contract.md @@ -21,6 +21,7 @@ target_merge: status_label: in-progress contract_packet_sha256: aa55f276dab66670f66f2424f059e394925f5f1c84ec23381fe506064f4823a1 imports: [FE-GATE-005@1, FE-OC-002@1, FE-OC-010@1, FE-OC-019@1, FE-OC-023@1] +accepts_delegations: [DELEG-FE-009@1] --- # branch: feature-frontend-storage-registry-contract @@ -45,7 +46,7 @@ imports: [FE-GATE-005@1, FE-OC-002@1, FE-OC-010@1, FE-OC-019@1, FE-OC-023@1] | Decision Ref | Project Summary | Branch Application | Source | |---|---|---|---| -| `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-REGISTRY-001@1` | route, API operation, env, storage, error, query, telemetry, release token을 8개 registry로 관리한다 | FE-REG-STORAGE namespace·version·classification schema에 적용한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | +| `DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-REGISTRY-001@1` | route, API operation, env, storage, error, query, telemetry, release token, capability를 9개 registry로 관리한다 | FE-REG-STORAGE namespace·version·classification schema에 적용한다 | [[raw/project-notes/ca-skeleton-frontend-operational-contract]] | ### 브랜치 지역 결정 @@ -71,7 +72,7 @@ imports: [FE-GATE-005@1, FE-OC-002@1, FE-OC-010@1, FE-OC-019@1, FE-OC-023@1] ## 목표 -이 브랜치는 project-wide 계약 `FE-OC-013` (browser storage key 는 namespace·version·classification 을 MUST 보유하고 token/secret 저장을 금지) 를, 다음 구현자가 되묻지 않고 `src/contracts/storage-keys.js` 와 `adapters/storage` 를 작성할 수 있는 implementation-ready 명세로 내린다. `FE-REG-STORAGE` 는 [[raw/project-notes/ca-skeleton-frontend-operational-contract]] `FE-D018` 이 규정한 8개 registry 중 하나이며 본 브랜치가 single owner 다. 최소 스키마는 §5.5, 런타임 동작은 §9.4, 브라우저 보안 불변식(번들·storage = 공개물, secret 저장 금지)은 §13.2, quota/unavailable 실패 정규화는 §8.2 에 근거한다. 아직 frontend repository 가 없으므로 본 브랜치의 모든 항목은 `planned` 등급이다. +이 브랜치는 project-wide 계약 `FE-OC-013` (browser storage key 는 namespace·version·classification 을 MUST 보유하고 token/secret 저장을 금지) 를, 다음 구현자가 되묻지 않고 `src/contracts/storage-keys.js` 와 `adapters/storage` 를 작성할 수 있는 implementation-ready 명세로 내린다. `FE-REG-STORAGE` 는 [[raw/project-notes/ca-skeleton-frontend-operational-contract]] `FE-D018` 이 규정한 9개 registry 중 하나이며 본 브랜치가 single owner 다. 최소 스키마는 §5.5, 런타임 동작은 §9.4, 브라우저 보안 불변식(번들·storage = 공개물, secret 저장 금지)은 §13.2, quota/unavailable 실패 정규화는 §8.2 에 근거한다. 아직 frontend repository 가 없으므로 본 브랜치의 모든 항목은 `planned` 등급이다. - 이슈: TODO (아직 없음) - PR: TODO (아직 없음) @@ -250,6 +251,14 @@ imports: [FE-GATE-005@1, FE-OC-002@1, FE-OC-010@1, FE-OC-019@1, FE-OC-023@1] ## 묶음 (이 branch에서 파생된 자료) + +### 수신한 위임 + +| Delegation Ref | From | Concern | Status | +|---|---|---|---| +| `DELEG-FE-009@1` | [[raw/branch-notes/feature-frontend-cache-tier-cross-tab-invalidation-contract]] | `fe.deleg.persistent-cache-key` | accepted | + + ## 가져온 프로젝트 계약 diff --git a/raw/branch-notes/feature-runtime-schema-validation-contract.md b/raw/branch-notes/feature-runtime-schema-validation-contract.md index 3fcc278..c9de4a1 100644 --- a/raw/branch-notes/feature-runtime-schema-validation-contract.md +++ b/raw/branch-notes/feature-runtime-schema-validation-contract.md @@ -15,6 +15,7 @@ kind: project-work-item project: ca-skeleton-frontend-operational-contract work_item: WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-006 inherits: [DEC-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-VALIDATION-001@1] +accepts_delegations: [DELEG-FE-010@1] refines: [] overrides: [] depends_on: [WI-CA-SKELETON-FRONTEND-OPERATIONAL-CONTRACT-005] @@ -77,6 +78,7 @@ imports: [FE-OC-006@1, FE-OC-008@1, FE-OC-023@1, FE-OC-024@1, FLOW-FE-RESP-001@1 - 응답 경계 검증의 4-stage gate 정의 — `FE-OC-007`, hub §7.3 processing order stage 2~6: (2) content-type 검사, (3) JSON parse, (4) envelope schema, (5) success/failure 분기, (6) payload schema. - 이 중 **stage 4~6 의 owner 는 본 branch** 다 — hub §2.1.4 Flow Stage Registry `FLOW-FE-RESP-004@1`(envelope 공유 스키마 검증; 경계 검증은 `.safeParse()` non-throwing 이며 throw 를 상위로 누출하지 않는다) · `FLOW-FE-RESP-005@1`(success/failure 분기 검증; 200 이어도 envelope 이 invalid 하면 success 로 반환하지 않는다) · `FLOW-FE-RESP-006@1`(payload per-operation 스키마 검증; payload invalid 는 `SCHEMA_MISMATCH` 이고 mapper 는 검증 통과분만 받는다). 이 세 단계의 Invariants 를 바꾸려면 본 branch 가 revision 을 올려야 한다. stage 2~3 은 [[raw/branch-notes/feature-api-client-response-envelope-contract]] 소유라 `imports` 로만 pin 한다. +- **인바운드 이벤트 경계 검증** — hub §2.1.4 `FLOW-FE-EVENT-003@1`(event envelope 공유 스키마 검증; non-throwing) · `FLOW-FE-EVENT-004@1`(`eventSchema` per-event 검증; 미검증 프레임은 `EVENT_SCHEMA_MISMATCH` 로 드롭하고 application 에 도달시키지 않는다)의 **owner 는 본 branch** 다. 요청/응답과 달리 스트림에는 요청이 없고 재개 커서가 있으므로 `FLOW-FE-RESP-*` 와 순서를 합치지 않는다. 프레임 수신·transport decode(stage 1~2)는 [[raw/branch-notes/feature-frontend-realtime-subscription-lifecycle-contract]] 소유이고, codec 디코드 이후 payload 검증은 [[raw/branch-notes/feature-frontend-multi-protocol-api-transport-contract]] 가 `DELEG-FE-010@1` 로 본 branch 에 위임했다. - 각 stage 실패를 4종의 구분된 raw failure 신호로 방출 — CONTENT_TYPE_MISMATCH / MALFORMED_JSON / ENVELOPE_MISMATCH / SCHEMA_MISMATCH (hub §8.2, `FE-OC-008` 기여). - Zod 스키마 작성 규약 — envelope 공유 스키마 1개 + operation별 payload 스키마, `FE-REG-API` responseSchema 참조 (hub §5.3). - 경계에서 `.safeParse()`(non-throwing) 사용 — 검증 실패가 throw 로 presentation 까지 누출되지 않고 normalized 실패로 매핑되도록. @@ -246,6 +248,14 @@ stage 1·7 은 다른 branch 소유이므로 detail 을 여기서 명세하지 | `FLOW-FE-RESP-008@1` | 8 | [[raw/branch-notes/feature-frontend-error-classification-boundary-contract]] | application model 또는 실패 신호 | 정규화된 결과 반환 | application result 또는 normalized failure | + +### 수신한 위임 + +| Delegation Ref | From | Concern | Status | +|---|---|---|---| +| `DELEG-FE-010@1` | [[raw/branch-notes/feature-frontend-multi-protocol-api-transport-contract]] | `fe.deleg.decoded-payload-validation` | accepted | + + ## 가져온 프로젝트 계약