31b36ba226
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>
31 lines
5.3 KiB
JSON
31 lines
5.3 KiB
JSON
{
|
|
"schemaVersion": "1.0",
|
|
"governance": "KBX_UI_BOUNDARY_GOVERNANCE",
|
|
"components": [
|
|
{"id":"C-010","name":"KsButton","tier":"L1","owner":"kbx-ui","source":"src/shared/ui/components/KsButton.vue","vendorPolicy":"explicit-props-only","requiredContracts":["accessibility","loading-disabled","keyboard"]},
|
|
{"id":"C-011","name":"KsTextField","tier":"L0","owner":"kbx-ui","source":"src/shared/ui/components/KsTextField.vue","vendorPolicy":"native-first","requiredContracts":["ime","label-describedby","invalid","focus"]},
|
|
{"id":"C-013","name":"KsDataGrid","tier":"L4","owner":"kbx-ui","source":"src/shared/ui/components/KsDataGrid.vue","vendorPolicy":"strong-facade-no-raw-api","requiredContracts":["selection","clipboard","keyboard","accessibility","performance"]},
|
|
{"id":"C-014","name":"KsDialog","tier":"L2","owner":"kbx-ui","source":"src/shared/ui/components/KsDialog.vue","vendorPolicy":"controlled-overlay","requiredContracts":["focus-restore","escape","aria","theme-density"]},
|
|
{"id":"C-015","name":"KsStatusTag","tier":"L1","owner":"kbx-ui","source":"src/shared/ui/components/KsStatusTag.vue","vendorPolicy":"semantic-status-only","requiredContracts":["text-not-color-only","state-matrix"]},
|
|
{"id":"V14-C-001","name":"KsDateField","tier":"L2","owner":"kbx-ui","source":"src/shared/ui/components/KsDateField.vue","vendorPolicy":"controlled-input","requiredContracts":["keyboard","readonly-disabled","invalid","theme-density"]},
|
|
{"id":"C-012","name":"KsSelect","tier":"L2","owner":"kbx-ui","source":"src/shared/ui/components/KsSelect.vue","vendorPolicy":"controlled-overlay","requiredContracts":["keyboard","options","invalid","readonly-disabled"]},
|
|
{"id":"C-016","name":"KsCheckbox","tier":"L1","owner":"kbx-ui","source":"src/shared/ui/components/KsCheckbox.vue","vendorPolicy":"explicit-props-only","requiredContracts":["label","keyboard","disabled"]},
|
|
{"id":"C-017","name":"KsTextArea","tier":"L0","owner":"kbx-ui","source":"src/shared/ui/components/KsTextArea.vue","vendorPolicy":"native-first","requiredContracts":["label-describedby","invalid","maxlength"]},
|
|
{"id":"C-018","name":"KsNumberField","tier":"L2","owner":"kbx-ui","source":"src/shared/ui/components/KsNumberField.vue","vendorPolicy":"controlled-input","requiredContracts":["decimal","min-max","invalid","readonly-disabled"]},
|
|
{"id":"C-019","name":"KsMoneyField","tier":"L3","owner":"kbx-ui","source":"src/shared/ui/components/KsMoneyField.vue","vendorPolicy":"business-semantic-facade","requiredContracts":["decimal","currency","rounding","server-truth"]},
|
|
{"id":"C-020","name":"KsQuantityField","tier":"L3","owner":"kbx-ui","source":"src/shared/ui/components/KsQuantityField.vue","vendorPolicy":"business-semantic-facade","requiredContracts":["decimal","unit","range","server-truth"]},
|
|
{"id":"C-021","name":"KsMultiSelect","tier":"L2","owner":"kbx-ui","source":"src/shared/ui/components/KsMultiSelect.vue","vendorPolicy":"controlled-overlay","requiredContracts":["keyboard","selection","invalid","readonly-disabled"]},
|
|
{"id":"C-022","name":"KsPaginator","tier":"L2","owner":"kbx-ui","source":"src/shared/ui/components/KsPaginator.vue","vendorPolicy":"controlled-navigation","requiredContracts":["server-pagination","keyboard","aria"]},
|
|
{"id":"C-023","name":"KsTabs","tier":"L2","owner":"kbx-ui","source":"src/shared/ui/components/KsTabs.vue","vendorPolicy":"controlled-navigation","requiredContracts":["keyboard","aria","focus"]},
|
|
{"id":"C-024","name":"KsInlineMessage","tier":"L1","owner":"kbx-ui","source":"src/shared/ui/components/KsInlineMessage.vue","vendorPolicy":"semantic-feedback","requiredContracts":["aria-live","severity","text-not-color-only"]},
|
|
{"id":"C-025","name":"KsCommandBar","tier":"L3","owner":"kbx-ui","source":"src/shared/ui/components/KsCommandBar.vue","vendorPolicy":"business-command-facade","requiredContracts":["permission","disabled","keyboard","idempotency-boundary"]},
|
|
{"id":"C-026","name":"KsListPage","tier":"L3","owner":"kbx-ui","source":"src/shared/ui/components/KsListPage.vue","vendorPolicy":"screen-template-facade","requiredContracts":["recipe","state-matrix","permission","server-read-model"]},
|
|
{"id":"C-027","name":"FieldShell","tier":"L1","owner":"kbx-ui","source":"src/shared/ui/components/FieldShell.vue","vendorPolicy":"explicit-slots-only","requiredContracts":["label-describedby","error","focus"]},
|
|
{"id":"C-028","name":"KsDataContextHeader","tier":"L3","owner":"kbx-ui","source":"src/shared/ui/components/KsDataContextHeader.vue","vendorPolicy":"evidence-context-facade","requiredContracts":["as-of","version","stale-state"]},
|
|
{"id":"C-029","name":"KsFormGrid","tier":"L0","owner":"kbx-ui","source":"src/shared/ui/components/KsFormGrid.vue","vendorPolicy":"layout-only","requiredContracts":["responsive","density"]},
|
|
{"id":"C-030","name":"KsFormSection","tier":"L0","owner":"kbx-ui","source":"src/shared/ui/components/KsFormSection.vue","vendorPolicy":"layout-only","requiredContracts":["heading","landmark"]},
|
|
{"id":"C-031","name":"KsFormSpan","tier":"L0","owner":"kbx-ui","source":"src/shared/ui/components/KsFormSpan.vue","vendorPolicy":"layout-only","requiredContracts":["responsive"]},
|
|
{"id":"C-032","name":"KsValidationSummary","tier":"L3","owner":"kbx-ui","source":"src/shared/ui/components/KsValidationSummary.vue","vendorPolicy":"validation-feedback-facade","requiredContracts":["aria","field-links","server-errors"]}
|
|
]
|
|
}
|