# AEG-V16-016 — Vendor boundary fitness ## Scope - **WBS / Requirement / UI / Test:** AEG-V16-016 / REQ-V16-UI4-08 / UI-V16-UI4-08 / T-V16-UI4-08 - **Classification:** behavior-preserving validation-tool refactoring. No application provider, API, schema, or component semantics change. ## Source / Assumption / Unknown / Decision Required - **Source:** `docs/CURRENT/CATALOGS/WBS_MASTER.csv`, `contracts/ui/ui-adapter.v4.json`, `tools/validate_v16.py`, and `frontend/src/shared/ui/adapter/`. - **Assumption:** WBS Master is an extensible source-of-truth catalog; adding approved WBS rows must not make a vendor-boundary validator fail. - **Unknown:** the acceptance evidence for AEG-V16-009 through AEG-V16-015 is absent from the progress tracker. This slice does not recreate or approve it. - **Decision Required:** reconcile the Master and tracker before recording AEG-V16-016 as COMPLETED; dependency AEG-V16-015 has no attached acceptance evidence. ## Acceptance mapping | Acceptance requirement | Evidence | | --- | --- | | Feature direct vendor import is zero | `tools/validate_v16.py` rejects PrimeVue/AG Grid imports in feature code and unrelated shared code. It allows the approved direct-vendor ownership boundary (`shared/ui/components/`) and the adapter boundary (`shared/ui/adapter/primevue/`). | | Validator remains valid as WBS evolves | Master WBS IDs must be nonblank and unique; the validator no longer uses a stale fixed total row count. | | Reproducible evidence | `python tools/validate_v16.py` result is recorded in the WBS tracker after execution. | ## Execution evidence — 2026-08-08 - `python tools/validate_v16.py`: `PASS=1 WARN=2 FAIL=0`. Warnings explicitly do not claim a full source archive or external-runtime evidence. - `frontend: pnpm test -- --run src/shared/ui/adapter/tests/uiAdapter.contract.spec.ts src/shared/ui/tests/adapterCompatibility.spec.ts`: 2 files / 4 tests passed. - `frontend: pnpm typecheck`: passed. - An initial test invocation from repository root failed because that directory has no `package.json`; it is not used as evidence. The frontend-directory invocation above is the preserved result.