T1-A Result — Canonical Product Surface & Navigation Contract¶
| Item | Nilai |
|---|---|
| Mode | Server development · /home/scola/odoo |
| Tanggal | 2026-08-10 |
| Label | T1-A COMPLETE — CANONICAL PRODUCT SURFACE / NAVIGATION CONTRACT FROZEN |
| Bukan | Sertifikasi W01 / W02 / W05 · optional workflow certification · full Tranche-1 UX (T1-U05) |
| Docs dibaca | AGENTS.md, workspace-governance.md, 01-product-contract.md, 02-information-architecture.md, 10-implementation-roadmap.md (T1-U01–U06), DEC-003, package dispositions, T0-final-reconciliation.md, disiplin E1.2 rebind |
1. Identity (post exit)¶
| Check | Verdict |
|---|---|
| FE application commit (nav contract) | 6c7df7403dc0880ece1e44e2b6a52842910c6b30 (feat(nav): T1-A canonical product surface and navigation contract) |
| FE tip (docs + evidence) | 7d790ef25ff9cec7f9ba204fb3062fff9576fd0f |
| FE application tree hash | 248413272a892f89b7b935f63fcd97184fec8780ddf3ad28367ac4093212c75a |
E1.2 manifest frontend_application_commit_sha |
a608135d5935bd01e26f5707d36026306312c9dd (tree hash sama; tip mencakup skrip/evidence T1-A) |
Served FE (dist/version.json) |
6c7df7403dc0+msn3umq4 · SHA 6c7df7403dc0880ece1e44e2b6a52842910c6b30 · :5181 |
| BE tip | 95468e5e5bd46157adff044c6004e343bb9c5c5c MATCH (tidak diubah) |
| DEC-003 SHA256 | 18704cbd…fc11f2 MATCH |
| E1.2 current-tip rebind | T0-E1.2-REBIND-CURRENT-20260810T104714Z · 29/29 PASS |
Historical T0 audits / prior REBIND matrices dipertahankan. Evidence lama tidak di-reuse diam-diam.
2. Artefak wajib (Phase 21)¶
| # | Artefak | Path |
|---|---|---|
| 1 | Preflight | docs/release-readiness/execution/T1-A-preflight.md |
| 2–3 | Surface inventory | T1-A-surface-inventory.md / .json |
| 4 | Canonical app map | T1-A-canonical-app-map.md |
| 5 | Role × navigation matrix | T1-A-role-navigation-matrix.json |
| 6 | Capability parity | T1-A-capability-parity.md / .json |
| 7 | Vocabulary | T1-A-canonical-vocabulary.md |
| 8 | Residuals | T1-A-navigation-residuals.md |
| 9 | Result (ini) | T1-A-result.md |
Evidence: T1-A-evidence/ (static smoke, golden role smoke, parity extract) · T0-E1.2-evidence/T0-E1.2-REBIND-CURRENT-20260810T104714Z-security-matrix.json.
3. Inventory snapshot¶
| Metric | Count |
|---|---|
| Apps / sections / leaves | 36 / 143 / 529 |
CORE_SUPPORTED |
59 |
OPTIONAL_GATED |
365 |
CONTROLLED_PILOT |
16 |
INTERNAL_PLATFORM |
11 |
LEGACY_DEPRECATED |
3 |
PLACEHOLDER_REMOVE |
10 |
DECISION_REQUIRED |
65 |
| Core missing capability | 0 |
npm run check:nav-graph → PASSED.
4. FE changes (bounded) — committed¶
Commit FE: 6c7df740… pada develop (belum di-push kecuali diminta).
| Area | Perubahan |
|---|---|
| SSOT schema | productStatus, package, legacyAliases + validator T1-A |
| Access | canAccessNode fail-closed DECISION / PLACEHOLDER / LEGACY / INCOMPLETE |
| App fragments | Anotasi status/package + landing/capability alignments |
| Scripts/tests | scripts/t1a/*, check:nav-graph, menu/access specs |
Tidak diubah: arsitektur auth Core, package SKU baru, workflow optional, redesign UI global, tip BE.
5. Verification (exit)¶
| Gate | Result |
|---|---|
check:nav-graph |
PASS |
| Route surface coverage | PASS (1716; UNREGISTERED 0) |
| Package topology + contract + mutations | PASS |
| Package catalog | PASS |
| E1.2 matrix current-tip | 29/29 PASS · finding_observation_fail 0 |
| E1.2 identity validator | PASS (setelah commit evidence; --allow-docs-tip bila tip docs lanjut) |
| Static role smoke | PASS → T1-A-evidence/T1-A-static-role-smoke.json |
| Golden role nav smoke | PASS 5/5 runtime roles · principal SKIP (no fixture account) · negatives 4/4 PASS → T1-A-evidence/T1-A-golden-role-navigation-smoke.json |
6. Exit gate checklist¶
| # | Kriteria | Ya/Tidak |
|---|---|---|
| 1 | Setiap route/menu reachable punya disposisi produk | Ya |
| 2 | Setiap fungsi Core retained punya satu canonical route | Ya |
| 3 | Setiap Core menu leaf punya capability DEC-003 | Ya |
| 4 | FE capability Core direkonsiliasi dengan BE | Ya (+ residual T1-B non-blocker) |
| 5 | Optional/pilot/internal gated jujur | Ya |
| 6 | Installed-but-unentitled tidak menciptakan navigasi | Ya (kontrak + smoke feature flags) |
| 7 | Placeholder/stub tidak tampil sebagai Core | Ya |
| 8 | Legacy punya disposisi eksplisit | Ya |
| 9 | Mobile/desktop visibility contract setuju | Ya |
| 10 | Inactive assigned role tidak memperluas menu | Ya (smoke gt.multi.teacher_homeroom) |
| 11 | Direct forbidden URL/API tetap denied | Ya (teacher → /api/v1/users capability_denied; platform denied) |
| 12 | Navigation graph Core tanpa broken canonical link | Ya |
| 13 | Regresi T0 security/package hijau | Ya (E1.2 rebind + topology) |
| 14 | Ambiguity tersisa hanya DECISION_REQUIRED (exposure OFF) | Ya |
Exit gate keseluruhan: COMPLETE
Residual jujur: smoke runtime principal SKIP karena fixture Golden gt-core-b1.1 tidak punya akun principal — kontrak FE tetap ada; tambah akun fixture = residual non-blocker T1-B/fixture.
7. Adversarial self-review (13)¶
- Surface reachable tanpa disposisi? No
- Core retained >1 canonical tanpa owner? No
- Core leaf tanpa capability? No
- FE Core capability tidak direkonsiliasi? No (residual T1-B tercatat)
- Optional/pilot/internal tampak sebagai Core? No
- Installed-unentitled membuka nav? No
- Placeholder tampil sebagai Core? No
- Legacy tanpa disposisi? No
- Mobile/desktop authority beda? No
- Inactive assigned role memperluas menu? No (dibuktikan smoke)
- Direct forbidden bypass? No (API deny teacher)
- Core nav graph broken? No
- Evidence T0 di-reuse stale setelah app change? No — rebind baru
…104714Z
8. STOP / rebind actions taken¶
| Saat | Aksi |
|---|---|
| Phase 0 | Docs-tip saja → lanjut tanpa rebind |
| Phase 16–17 | App tree berubah → tidak silent-regenerate |
| Phase 20 | Commit FE 6c7df740 → rebuild/serve → E1.2 REBIND-CURRENT-20260810T104714Z 29/29 |
| Phase 18–19 | Golden role nav smoke + negatives |
9. Final label¶
T1-A COMPLETE — CANONICAL PRODUCT SURFACE / NAVIGATION CONTRACT FROZEN