Branch L — Law / Forbidden Compliance / Self-Review
Branch L — Law / Forbidden Compliance / Self-Review
1. Law crosswalk
| Law / invariant | How this pack honors it |
|---|---|
| Điều 28 (UI = render shell, no business logic) | Both briefs (doc 07/08) mandate zero-logic Nuxt, registry-driven config, no hardcoded data; surfaces bound to design_templates rows |
| Điều 32 (approval, no self-approval) | Proposal-only editing; ≥2 human cross-signs; activation/rollback council-owned; automated-agent CHECK rejects agent apr_approvals (doc 06/08) |
| Điều 35 (DOT paired tests) | Every new/changed DOT needs a passing paired test before UI wires it (doc 05/08); read subset rehearsed GREEN |
| Điều 37 (permission jurisdiction) | Same UI, different backend-permission slice; per-tier predicate; super-admin subject to same predicate (doc 04/08) |
| Điều 30 (reversibility, forward-only) | Binds reversible (set prior/NULL); activate↔rollback version-pin; minted IUs soft-retired not deleted (doc 06/09) |
| MOWD = subdomain, not 5th Mother | Stated in doc 00/01; owner GOV-MOW; no GOV-MOWD; no second SoT (design bodies in information_unit, columns are pointers) |
| IU centrality | iu_ref everywhere; cards render IU body via ref, never inline prose (doc 01/03) |
| Vector guarded | No Qdrant write, no realtime vector; vector_sync_enabled=false never_flip (doc 08) |
2. Forbidden-list compliance (campaign §14)
| Forbidden | Status | Evidence |
|---|---|---|
| No Nuxt implementation | ✅ | Nothing built; wireframe/contract only |
| No UI code generation | ✅ | No code emitted; component specs only |
| No committed DDL | ✅ | Apply channel not used; EXTEND remains pending Điều-32 (referenced, not run) |
| No Directus mutation | ✅ | Read-only query_pg confirmed available; no write issued |
| No Qdrant/vector write | ✅ | Not touched |
| No 4 Mothers runtime | ✅ | Design-side only; runtime boundary doc 01/08 |
| No workflow/task generation | ✅ | None created |
| No business logic in frontend | ✅ | Điều-28 enforced in both briefs |
| No hardcoded workflow/task/tier data | ✅ | Registry-driven mandated; mock/config behind DOT interface for absent tbl_* |
| No self-approval | ✅ | Proposal-only + ≥2 human cross-signs + agent CHECK |
| No law enactment | ✅ | Reuses existing spine; no new law/table |
| No event/job execution | ✅ | None invoked |
3. Gate 0 / mutation ledger
- Entry == exit: no DB object created/altered/dropped; no DOT run; no Directus/Qdrant write. The only writes performed are 13 KB documents (this handoff pack) via
Incomex_KB.upload_document— documentation, not system mutation. - Live PG read used only to confirm container health + read-channel availability for data-contract validation; no row mutated.
- Cowork Drive read-only (7 docs read for visual intent); no Drive write.
4. Acceptance criteria (campaign §16) — self-check
| Criterion | Met? | Note |
|---|---|---|
| Cowork visual intent captured | ✅ | tokens, labels, components, prototypes A/C/D/E, v1 pack — verbatim in docs 01/06/07 |
| T6→T1 model explicit | ✅ | doc 02 tier ladder + interactions |
| node/card contract concrete | ✅ | doc 03 — 22 fields, all backend-mapped |
| four surfaces specified | ✅ | doc 04 — goal/persona/source/filters/sort/traffic-light/drill/actions/permission/mobile/scale/states |
| DOT action map exists | ✅ | doc 05 — 14 actions + 4 nav DOTs; DOT_SPEC_ONLY flagged |
| Claude Design & Claude Code handoffs separated | ✅ | doc 07 (visual-only) vs doc 08 (engineering-only) |
| no UI implementation | ✅ | none |
| no unsafe mutation | ✅ | none |
5. Self-review — strengths & honest gaps
Strengths: every claim is anchored to a named source (Phase 1 contracts + Cowork prototypes read verbatim, not paraphrased); the two traffic-light scales are reconciled rather than glossed; the Design/Code split is clean (no backend in the design brief, no visual guessing in the code brief); the three high-severity risks (scale, permission leakage, self-approval) are each closed by backend enforcement.
Honest gaps / decisions left open (deliberately, not silently):
- Dark theme — brief says dark, prototypes are light; deferred to Claude Design with a token-pair recipe (doc 07 §6). Not a blocker.
- T1 label — "Task" vs "Công việc" conflict between prototypes; canonical pick deferred to Design (recommended "Công việc").
- Reorder + comment/audio — referenced but never prototyped; flagged as explicit design tasks (doc 06/07/11-prompt-13).
- Tier tables
tbl_*absent in live PG — T6–T4 run on mock/config until ratified (doc 08 §3; prompt 14). The reuse-first survey (v1 pack item P2) remains the one open backend prerequisite. - EXTEND not yet committed — all live wiring (Stages 3–5) gated on the human Điều-32 commit; this pack does not assume it happened.
No overclaim: nothing here is "done" beyond the handoff documents themselves; the UI does not exist, the DOTs are mostly DOT_SPEC_ONLY, and the backend EXTEND is pending approval. This pack is a specification and handoff, faithfully labeled as such.
6. Self-review verdict
PASS. All acceptance criteria met; full forbidden-list compliance; zero unsafe mutation; law crosswalk clean; open decisions surfaced explicitly rather than papered over.