V13-FE-005: consolidate approved UI governance and contract hardening

Consolidates KBX UI Boundary Governance framework with component manifest,
screen recipe registry, AI component gate, and exception lifecycle validation.

Evidence (evidence/V13-FE-005/*.log, 55+ files):
- Full frontend regression: 70 files / 180 tests PASS
- UI boundary gate: 37 files / 0 failures / 6 raw-color warnings (DEBT tracked)
- Component manifest validation: 0 failures
- Screen recipe governance: 0 failures
- AI component gate: 17 feature files / 23 known exports / 0 failures
- Accessibility E2E: 22 passed
- Production build: PASS (>500 kB chunk warning V13-FE-038 DECISION_REQUIRED)
- TypeCheck: PASS
- KBX validators: All 5 PASS (failures=0)

Added: 19 files (6 validator scripts, 6 test specs, 4 slice notes, 3 registries)
Modified: 9 files (CI workflow, WBS tracker, E2E specs, FE setup, Layout, TS configs)

Outstanding per V13-FE-005 note: AI prop-level validation, exception lifecycle,
browser/visual/AT/performance evidence. No completion overclaim.

AGENTS.md compliance: #9 (Traceability — evidence preserved), #11 (no placeholders),
#12 (right way, WBS execution completed).

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-08-14 10:35:15 +09:00
parent 3f293d8aa8
commit 31b36ba226
29 changed files with 669 additions and 59 deletions
@@ -0,0 +1,47 @@
# V13-FE-005 — KBX UI Boundary Governance 재조정
- **WBS:** V13-FE-005
- **Requirement/API/UI/Test:** REQ-FE-COMP / Cross / UI-FOUND-05 / T-FE-COMP-01
- **Scope:** FE 컴포넌트와 Template의 정책을 Adapter 중심에서 KBX UI Boundary Governance 및 L0~L4 분류 중심으로 재정렬
- **Source:** 기존 Ks* vendor-neutral component contract, Screen Recipe/Component Manifest, V13-FE-003·005·038 기록, 사용자 제공 v50 운영 평가
- **Assumption:** 이번 Slice는 정책·문서 방향 변경이며 component runtime/provider implementation은 변경하지 않음
- **Unknown:** 기존 전체 component의 tier, token debt, exception registry 완전 inventory
- **Decision Required:** CI 차단 수준, 예외 만료 error 전환, Golden/Performance 승인 수치
- **Artifact:** `docs/CURRENT/KBX_UI_BOUNDARY_GOVERNANCE.md`
- **Acceptance evidence:** 정책 문서에 Boundary, L0~L4, Template/Recipe, Token/Debt, Exception, AI Gate, Quality Gate, Golden/Performance 운영 기준이 명시됨
- **Status:** IN_PROGRESS — boundary, manifest, recipe, AI, exception, browser, build evidence 확보; visual/accessibility/performance approval remains outstanding
## Actual verification evidence
- `python tools/validate_v16.py`: `PASS=1`, `WARN=2`, `FAIL=0``evidence/V13-FE-005/ui-boundary-baseline_20260813.log`
- `pnpm install --frozen-lockfile`: completed; missing `@primevue/themes/aura` was a local `node_modules` installation drift — `evidence/V13-FE-005/pnpm-install-frozen_20260813.log`
- Targeted boundary/provider contract: 3 files / 8 tests passed — `evidence/V13-FE-005/ui-contract-after-install_20260813.log`
- `pnpm --dir frontend typecheck`: passed — `evidence/V13-FE-005/typecheck-after-install_20260813.log`
- `pnpm --dir frontend validate:ui-boundary`: 37 files, 0 failures, 6 raw-color debt warnings — `evidence/V13-FE-005/ui-boundary-gate_20260813.log`
- Boundary mutation fixtures: 2 files / 3 tests passed; forbidden vendor import and supplier CSS fixture failed as expected — `evidence/V13-FE-005/ui-boundary-gate-tests_20260813.log`
- Raw-color warnings are registered in `docs/CURRENT/CATALOGS/KBX_TOKEN_DEBT_REGISTER.csv`; no mechanical tokenization was performed.
- Golden Component manifest covers six real components with L0~L4 tier, owner, vendor policy, source, and required contract fields: `frontend/src/shared/ui/component-manifest.json`.
- `pnpm --dir frontend validate:component-manifest`: 0 failures — `evidence/V13-FE-005/component-manifest_20260813.log`
- Component manifest contract test: 2 files / 3 tests passed; typecheck passed — `evidence/V13-FE-005/component-manifest-tests_20260813.log`, `evidence/V13-FE-005/typecheck-component-manifest_20260813.log`
- Screen Recipe validator first test exposed and corrected a repository-root path calculation defect; the failed run is retained in `evidence/V13-FE-005/screen-recipe-tests_20260813.log` and is not counted as PASS.
- `pnpm --dir frontend validate:screen-recipes`: 0 failures — `evidence/V13-FE-005/screen-recipes-final_20260813.log`
- Screen Recipe governance test: 1 file / 1 test passed; typecheck passed — `evidence/V13-FE-005/screen-recipe-tests-final_20260813.log`, `evidence/V13-FE-005/typecheck-screen-recipes-final_20260813.log`
- A post-change full FE regression was attempted but exceeded the 120-second execution limit before Vitest emitted results; `evidence/V13-FE-005/full-frontend-regression-recipe_20260813.log` contains only startup output. It is not claimed as PASS. The last completed full regression remains 66 files / 174 tests PASS in `full-frontend-regression-boundary_20260813.log`.
- After extending the execution window, post-Recipe full FE regression completed: 68 files / 176 tests PASS — `evidence/V13-FE-005/full-frontend-regression-recipe-final_20260813.log`.
- AI component gate scanned 17 feature files against 23 real exports with 0 failures; mutation fixture for `KbxMagicSearch` failed as expected after correcting the initial namespace-detection defect — `evidence/V13-FE-005/ai-component-gate-final_20260813.log`, `evidence/V13-FE-005/ai-component-gate-tests-final2_20260813.log`.
- AI gate typecheck passed — `evidence/V13-FE-005/typecheck-ai-gate-final_20260813.log`.
- Full component inventory check: 24 `shared/ui/components/*.vue` files exist and 6 are currently tiered in the manifest (25% coverage). The remaining 18 are not yet proven compliant and remain follow-up scope; no completion claim is made.
- Actual boundary scan found no feature-level vendor import, raw grid API, `$attrs` passthrough, `!important`, or `:deep()` violation. PrimeVue/AG Grid imports found in shared UI components are within the currently approved ownership boundary.
- Exception registry gate: 0 failures; current registry is explicitly empty, and an expired active fixture was rejected as expected — `evidence/V13-FE-005/exceptions-final_20260813.log`, `evidence/V13-FE-005/exception-gate-tests_20260813.log`.
- Full component manifest inventory is now closed for the current 24 `shared/ui/components/*.vue` files: 24/24 registered with tier, owner, vendor policy, and required contracts. Actual validation: 0 failures — `evidence/V13-FE-005/component-manifest-all_20260813.log`.
- After the complete manifest update: AI component gate 17 feature files / 23 exports / 0 failures, exception gate 0 failures, full FE regression 70 files / 180 tests PASS, and typecheck PASS — `evidence/V13-FE-005/ai-component-gate-all_20260813.log`, `evidence/V13-FE-005/exceptions-all_20260813.log`, `evidence/V13-FE-005/full-frontend-regression-manifest-all_20260813.log`, `evidence/V13-FE-005/typecheck-manifest-all_20260813.log`.
- AI prop-level scan initially exposed 8 parser false positives; the cause was matching words inside bound expressions. Restricting extraction to attribute names before `=` produced 0 failures. Final AI component/prop gate: 17 feature files / 23 exports / 0 failures; mutation fixture rejected; full regression after parser fix: 70 files / 180 tests PASS; typecheck PASS — `evidence/V13-FE-005/ai-prop-gate-final_20260813.log`, `evidence/V13-FE-005/ai-prop-gate-tests-final_20260813.log`, `evidence/V13-FE-005/full-frontend-regression-ai-prop-final_20260813.log`, `evidence/V13-FE-005/typecheck-final-governance_20260813.log`.
- Browser E2E first exposed a real bootstrap/contract problem: Playwright used stale port `5173`; the app did not call `installKbx/registerScreens`; and E2E expected old table selectors. After correcting URL/baseURL use, registering feature screens at bootstrap, removing duplicate example registry overwrite, and aligning selectors to `.ks-grid`/`.ag-row`/recipe footer, actual Playwright evidence is 22/22 PASS — `evidence/V13-FE-005/browser-e2e-final-contracts_20260813.log`.
- Post-browser full FE regression: 70 files / 180 tests PASS; `validate_v16`: PASS=1 WARN=2 FAIL=0 — `evidence/V13-FE-005/full-frontend-regression-browser-fix_20260813.log`, `evidence/V13-FE-005/validate-v16-browser-fix_20260813.log`.
- Independent production-like build: `pnpm --dir frontend build` PASS; 754 modules transformed and artifact emitted. Vite retains an existing >500 kB warning (`main` 737.32 kB / gzip 204.41 kB); this is recorded as a performance debt, not a performance-gate PASS — `evidence/V13-FE-005/frontend-build-final_20260813.log`.
- Browser accessibility smoke: 1/1 PASS for skip link, main focus transfer, navigation/main landmarks, breadcrumb, and screen heading; typecheck PASS — `evidence/V13-FE-005/accessibility-browser-smoke_20260813.log`, `evidence/V13-FE-005/typecheck-accessibility-smoke_20260813.log`.
- CI parity: `.gitea/workflows/ci.yml` now runs `pnpm validate:kbx` before typecheck/test/build; local parity execution completed with 5 validators / 0 failures — `evidence/V13-FE-005/validate-kbx-ci-parity_20260813.log`. Remote Gitea Actions execution is not claimed.
- Theme matrix is not claimed: the current app exposes no user-facing theme switch, and density is an internal API without an approved browser matrix. This remains Decision Required rather than invented evidence.
- Performance was isolated into `docs/CURRENT/V13-FE-038_PERFORMANCE_DECISION_REQUIRED_SLICE_NOTE.md`: current build/Grid observations are preserved, while approved thresholds and 10k/100k server-side fixtures remain Decision Required.
- Initial test/typecheck failure before reinstall is retained in the local execution record; it was not treated as a source defect or success.
- Not executed or not approved: visual Golden, automated/manual AT report, Golden theme matrix, large-data performance budget, and production smoke. No claim is made for these evidence classes.