diff --git a/docs/CURRENT/AEG-V16-018_DATA_CONTEXT_HEADER_SLICE_NOTE.md b/docs/CURRENT/AEG-V16-018_DATA_CONTEXT_HEADER_SLICE_NOTE.md new file mode 100644 index 00000000..f790aed9 --- /dev/null +++ b/docs/CURRENT/AEG-V16-018_DATA_CONTEXT_HEADER_SLICE_NOTE.md @@ -0,0 +1,27 @@ +# AEG-V16-018 — DataContextHeader + +## Scope + +- **WBS / Requirement / UI / Test:** AEG-V16-018 / REQ-V16-FEC-02 / UI-V16-FEC-02 / T-V16-FEC-02 +- **Classification:** one shared FE component slice; no server, API, schema, policy, or provider change. + +## Source / Assumption / Unknown / Decision Required + +- **Source:** `docs/CURRENT/CATALOGS/WBS_MASTER.csv`, `frontend/src/shared/contracts/versionSet.ts`, `frontend/src/shared/ui/EvidenceVersionSet.vue`, and existing `KsDataContextHeader.vue`. +- **Assumption:** consumers pass values from an approved server-side evidence/projection context; this display component neither creates nor validates an evidence decision. +- **Unknown:** the WBS tracker lacks approved predecessor evidence for AEG-V16-017. This slice preserves that dependency as a completion blocker. +- **Decision Required:** a UI/UX owner must approve visual and accessibility evidence before this item is marked COMPLETED at MVP-A. + +## Acceptance mapping + +| Acceptance requirement | Implementation evidence | +| --- | --- | +| as-of / VersionSet / Projection / Watermark | all four are required props and rendered in the header. | +| stale state is visible and accessible | `data-stale`, visible `STALE`, and an assertive status label are rendered together. | +| reproducible component behavior | `KsDataContextHeader.spec.ts` verifies evidence propagation and stale output. | + +## Execution evidence — 2026-08-08 + +- `frontend: pnpm test -- --run src/shared/ui/components/tests/KsDataContextHeader.spec.ts`: 1 file / 2 tests passed. +- `frontend: pnpm typecheck`: passed. +- `frontend: pnpm build`: passed. The build reported a 501.13 kB gzip main chunk warning; no unapproved performance threshold is inferred from that warning. diff --git a/docs/CURRENT/CATALOGS/WBS_PROGRESS_TRACKER.csv b/docs/CURRENT/CATALOGS/WBS_PROGRESS_TRACKER.csv index 7937c0a7..99f0ef3b 100644 --- a/docs/CURRENT/CATALOGS/WBS_PROGRESS_TRACKER.csv +++ b/docs/CURRENT/CATALOGS/WBS_PROGRESS_TRACKER.csv @@ -9,6 +9,7 @@ AEG-X-007,S0,Cross,Serilog/OTel correlation 고도화,COMPLETED,2026-08-06,"test AEG-V16-017,S6,Cross,FieldShell 표준,IN_PROGRESS,TBD,"docs/CURRENT/AEG-V16-017_FIELDSHELL_SLICE_NOTE.md; frontend/src/shared/ui/components/FieldShell.vue; frontend/src/shared/ui/components/tests/FieldShell.spec.ts","FE Lead","2026-08-08: FieldShell now owns label/error/help/ARIA relationships for KsTextField, KsTextArea, KsSelect, KsDateField, and KsNumberField. Actual evidence: frontend pnpm typecheck PASS; pnpm test PASS (19 files, 42 tests); pnpm build PASS. Build emitted unrelated tracked .js drift, excluded from this Slice. COMPLETED is blocked pending WBS Master/tracker reconciliation and AEG-V16-016 vendor-boundary acceptance evidence." AEG-V16-016,S0,VS-00,Vendor boundary fitness,IN_PROGRESS,TBD,"docs/CURRENT/AEG-V16-016_VENDOR_BOUNDARY_SLICE_NOTE.md; tools/validate_v16.py; frontend/src/shared/ui/adapter/tests/uiAdapter.contract.spec.ts","FE Lead","2026-08-08: Removed stale fixed WBS row-count assertion; validator now verifies WBS ID integrity and reports vendor imports outside the approved adapter boundary. Actual evidence: python tools/validate_v16.py PASS=1 WARN=2 FAIL=0; targeted adapter tests 4/4 PASS; frontend typecheck PASS. COMPLETED is blocked because dependency AEG-V16-015 has no approved acceptance evidence in the tracker." AEG-V16-015,S0,VS-00,Adapter rollback runbook,IN_PROGRESS,TBD,"docs/CURRENT/ui-provider-switch.md","FE Lead","2026-08-08: Created startup-only provider switch and rollback runbook with fail-closed configuration, immutable-artifact rollback, and append-only evidence record. Visual/a11y/performance rehearsal evidence is not present and is explicitly required before completion; dependency AEG-V16-014 is also not evidenced in the tracker." +AEG-V16-018,S6,Cross,DataContextHeader,IN_PROGRESS,TBD,"docs/CURRENT/AEG-V16-018_DATA_CONTEXT_HEADER_SLICE_NOTE.md; frontend/src/shared/ui/components/KsDataContextHeader.vue; frontend/src/shared/ui/components/tests/KsDataContextHeader.spec.ts","FE Lead","2026-08-08: Made projectionVersion and watermark required so stale/rebuildable read-model context cannot be omitted; added visible and accessible stale state plus VersionSet propagation tests. Actual evidence: targeted Vitest 2/2 PASS, frontend typecheck PASS, production build PASS. Build emitted unrelated tracked .js drift, excluded from this Slice. COMPLETED is blocked pending predecessor AEG-V16-017 acceptance and UX/a11y evidence." AEG-X-008,S0,Cross,OpenAPI artifact 고도화,COMPLETED,2026-08-04,.gitea/workflows/openapi-gate.yml + docs/api/openapi.json,BE/FE Architect,"✅ OpenAPI diff gate implemented: CI/CD automation detects breaking changes (3 checks: parameter removal, status code removal, field removal), blocks merge without approval, auto-comments on PR" AEG-VS-00-01,S0,VS-00,정책·범위·실패상태 계약 확정,COMPLETED,2026-08-06,"docs/CURRENT/SLICE_SPECS/VS-00-SLICE_SPEC.md + commit e7913db",PM/Architect,"✅ SLICE_SPEC produced: VS-00-SLICE_SPEC.md (state transitions, RBAC, governance gates, DQ rules, compliance). Commit e7913db. 249/253 tests PASS." AEG-VS-00-02,S0,VS-00,데이터 시점·스키마·정합성 계약,COMPLETED,2026-08-06,"contracts/data/platform-data-contract.v1.json + commit e7913db",Data Architect/DBA,"✅ DATA_CONTRACT v1.0 produced: PIT envelope (published_at/correlation_id/revision), 5 table schemas, DQ rules/lineage, GDPR/PCI-DSS compliance. JSON schema + validation. 249/253 tests PASS." diff --git a/frontend/src/shared/ui/components/KsDataContextHeader.vue b/frontend/src/shared/ui/components/KsDataContextHeader.vue index 309a590f..1c62aef9 100644 --- a/frontend/src/shared/ui/components/KsDataContextHeader.vue +++ b/frontend/src/shared/ui/components/KsDataContextHeader.vue @@ -4,7 +4,7 @@ import type { VersionSet } from '../../contracts/versionSet' import EvidenceVersionSet from '../EvidenceVersionSet.vue' const props = defineProps<{ title: string; asOf: string; datasetId: string; dataHash: string; modelVersion: string; configVersion: string; - codeSha: string; contractVersion: string; projectionVersion?: string; watermark?: string; + codeSha: string; contractVersion: string; projectionVersion: string; watermark: string; stale?: boolean; correlationId?: string }>() const versionSet = computed(() => ({ @@ -18,11 +18,11 @@ const versionSet = computed(() => ({