Lewati ke isi

Plan: SC-CORE Track — W00 Unblock + W01/W02 Rebind

Status: PROPOSED (2026-08-29)
Mode: Server /home/scola/odoo
Track scope: CORE-PLATFORM (W00) → CORE-W01CORE-W02
Explicitly out of track: W03 (PKG-ADM-W03), W16 (gelombang terpisah), UAT promotion (setelah gelombang SC-CORE + W16)

Current tip (post W05-B): FE bc3ec030… / BE 6033c21… · demo pair fe-build-bc3ec030-w05b-rc1f006

Docs read: AI_AGENT_MASTER_GUIDE.md, 07-release-test-matrix.md, T0-E2-decision-inventory.md, T5-core-regression-matrix.md, independent verdicts T2.1-W01 / T3-W02, W05 rebind evidence.


1. Goal

Menutup denominator runtime W00 (11) + W01 (11) + W02 (11) pada exact FE/BE tip yang sama, sehingga:

  • Baris RT-W00-*, RT-W01-*, RT-W02-* di 07-release-test-matrix.md dapat diisi PASS dengan evidence JSON terikat SHA.
  • Gelombang UAT (Rejis canary → …) dapat digabung nanti dengan W16 tanpa re-promote parsial W05 saja.
  • W03 admissions tetap track terpisah (T6A / PKG-ADM-W03).

2. Baseline & gap analysis

2.1 W00 — mengapa masih BLOCKED di matriks

Area Engineering state Gap untuk unblock
DEC-001 / DEC-002 / DEC-014 Approved (T0-E2-decision-inventory.md) Matriks belum di-reconcile; bukan blocker produk baru
E1.2 security matrix 29/29 pada tip Aug-14/26; belum rebind bc3ec030/6033c21 Wajib re-run e12_security_matrix.py + validator
STAB-044 jenjang CLOSED bounded Core Positive DEC-013 profile matrix = optional exposure
STAB-007 / STAB-008 Code fixed; runtime verification pending (T0-A-result.md) T0-B2 / E1.2 cases + adversarial multi-role
STAB-025 role home Open Role×app crawl + backend catalog parity
STAB-026 placeholder Open Hide/remove lab + /register stub
RT-W00-REC-01 / RT-PKG-GAP-12 Open t0d_credential_matrix.py + fixture accounts
RT-W00-UIA-01 Open Nav graph + menu crawl E2E/manual

Harness utama W00: scripts/golden/e12_security_matrix.py, e12_evidence_identity_validator.py, t0d_credential_matrix.py; FE npm run check:nav-graph, check:core-parity, check:core-nav-ux.

2.2 W01 — rebind vs product blockers

Area Engineering state Gap
Harness 64-case 64/64 historis; findings T2W01-F-001..004 closed Rebind pada tip 6033c21 via w01_runtime_certify.py
Independent audit PARTIAL — behavior fixed, manifest stale Current-tip matrix + E1.2 bind
Matriks BLOCKED STA-01 lock policy, REC-01 recovery, SCP assignment, UIA STAB-041 Perlu DEC freeze bounded V1 ( pola DEC-006/007 W05) atau product sign-off

Harness: scripts/golden/w01_runtime_certify.py · evidence T2.1-W01-evidence/.

2.3 W02 — in track (rebind + S0 fix)

Area Engineering state Gap
Harness 33-case 33/33 historis (T3-W02-current-tip-matrix.json stale SHA) Rebind current tip
Independent audit FAILED — cross-tenant parents/relation/save S0 Fix parent_admin_api.py + case adversarial baru
Validator Served FE SHA ≠ certified tree Rebuild FE + enforce validator served/commit equality

Harness: scripts/golden/w02_runtime_certify.py · fix before claiming PASS.


3. Dependency order (mandatory)

Phase 0 — Charter & product freezes
Phase 1 — W00 engineering unblock (STAB + credential + E1.2 rebind)
Phase 2 — W01 product decisions + W01 rebind 64/64
Phase 3 — W02 S0 fix + W02 rebind 33/33
Phase 4 — Matrix closure + regression bundle (T5-style)
Phase 5 — Demo candidate refresh (NO UAT yet — wait W16 wave)

W01 tidak boleh rebind final sebelum W00 E1.2 green (platform auth/tenant baseline).
W02 tidak boleh rebind final sebelum W01 POS/VAL/TEN green (master/roster prerequisite for XMD).


4. Phase 0 — Charter & product freezes (1–2 hari)

4.1 Deliverable

Buat T4-W00-W01-W02-core-track-charter.md berisi:

  • In-scope: W00 platform, W01 academic master/timetable, W02 manual onboarding (bukan bulk import async penuh jika masih DEC-008 open).
  • Out-of-scope: W03, W16, UAT, production.
  • Exact tip target SHA (diisi saat Phase 4).

4.2 Product decisions to freeze (minimum)

ID W01/W02 row Recommended V1 bounded option
W01-LOCK RT-W01-STA-01 Save≡published for session; edit after session date = admin-only + audit; no separate lock API V1
W01-REC RT-W01-REC-01 Savepoint rollback on term/session replace failure (already implemented); UI shows authoritative error
W01-SCP RT-W01-SCP-01 / NEG Teacher read = assigned faculty + homeroom batch only (T2W01-F-001 contract)
W02-STA RT-W02-STA-01 Manual create → link → batch → activate; import async = NOT RUN until DEC-008
W02-XRP RT-W02-XRP-01 Parent link visible after relation save; revoke on archive

Format approval: conversational record in charter (sama pola DEC-006/007).


5. Phase 1 — W00 unblock (3–5 hari)

5.1 STAB-026 — placeholder containment

  • Audit src/router/*, appFragments, public routes untuk lab/register stub.
  • Action: INCOMPLETE_REMOVE atau redirect fail-closed; update rc1CoreSurfacePolicy + unit tests.
  • Verify: no menu leaf links to placeholder in check:nav-graph.

5.2 STAB-025 — role home parity

  • Cross-check roleApps.js / role_catalog.py for orphan homes.
  • Run fresh-role login matrix (script or Playwright smoke): each Core role → valid home, zero 404 on visible leaves.
  • Evidence: T0-W00-role-home-crawl-<timestamp>.json.

5.3 STAB-007 / STAB-008 runtime closure

  • Extend or run existing T0-B cases inside E1.2 matrix:
  • multi-role switch → capability 403
  • forged active role denied
  • unregistered protected route → fail-closed
  • Target: 29/29 PASS, finding_observation_fail: 0.

5.4 Credential lifecycle (RT-W00-REC-01 / RT-PKG-GAP-12)

  • Run scripts/golden/t0d_credential_matrix.py on Golden :8090.
  • Seed fixtures: inactive, forced-password, reset token replay, session revoke (per DEC-014).
  • Hide/deny excluded auth routes per inventory.

5.5 E1.2 current-tip rebind

# Golden :8090 — after FE/BE tip frozen for this phase
cd custom_addons_scola/gcgscola
python3 scripts/golden/e12_security_matrix.py
python3 scripts/golden/e12_evidence_identity_validator.py \
  --manifest scola-fe-v2/docs/release-readiness/execution/T0-E1.2-evidence/T0-E1.2-REBIND-CURRENT-<stamp>-runtime-manifest.json

Bind manifest to FE bc3ec030… / BE 6033c21… (or newer tip if phases 2–3 change code).

5.6 FE static gates

cd scola-fe-v2
npm run check:nav-graph
npm run check:core-parity
npm run check:core-nav-ux
npm run test:contract

5.7 W00 exit gate

  • [ ] E1.2 29/29 PASS on exact tip
  • [ ] Credential matrix PASS
  • [ ] STAB-026/025 evidence archived
  • [ ] Update §4 RT-W00-* rows → PASS with evidence links (or explicit NOT RUN only for DEC-013 positive jenjang profiles)

6. Phase 2 — W01 rebind (2–4 hari)

6.1 Preconditions

  • Phase 1 exit gate green
  • W01 product freezes signed in charter

6.2 Runtime rebind

cd custom_addons_scola/gcgscola
# Golden :8090, gt-core-b1.1 + overlays as harness expects
python3 scripts/golden/w01_runtime_certify.py

Expected: 64/64 PASS · write T2.1-W01-<stamp>-runtime-matrix.json · refresh T2.1-W01-current-tip-matrix.json.

6.3 Regression in T5 bundle

  • Re-run W05 16/16 + W02 smoke subset after W01 (W01-XMD dependency).
  • Update §5.1 matrix rows; defer UIA-01 if menu crawl deferred to W00 bundle.

6.4 W01 exit gate

  • [ ] 64/64 PASS bound to same SHA as E1.2 manifest
  • [ ] No open S0/S1 in independent spot-check (teacher foreign session, term atomicity)
  • [ ] §5.1 rows updated

7. Phase 3 — W02 rebind (3–5 hari)

7.1 S0 fix — cross-tenant parent relation

Finding: T3-W02 independent verdict — admin can link company-22 partner to company-20 student via /api/v1/admin/parents/relation/save.

Implementation (BE main):

  • Enforce company scope on partner_id and student_id in parent_admin_api.py (reject foreign company atomically, no leak).
  • Add harness case W02-PARENT-RELATION-FOREIGN-PARTNER (must deny + zero mutation).

7.2 Runtime rebind

python3 scripts/golden/w02_runtime_certify.py

Expected: 33/33 PASS (or expanded denominator if new adversarial case added → update T3-W02-certification-denominator.json).

7.3 W02-XMD spot check

  • After W01+W02 green: verify new student appears once in W05 roster overlay (manual or w05_runtime_certify seed path).

7.4 W02 exit gate

  • [ ] S0 fix merged + case PASS
  • [ ] 33/33 (or N/N) PASS on exact tip
  • [ ] §5.2 rows updated

8. Phase 4 — Matrix & regression bundle (1 hari)

8.1 Single evidence index

Create execution/V1-W00-W01-W02-rebind-<stamp>.json:

{
  "frontend_sha": "...",
  "backend_sha": "...",
  "e12": "29/29",
  "w01": "64/64",
  "w02": "33/33",
  "w05_regression": "16/16",
  "isolation_live": "PASS|PARTIAL"
}

8.2 QC gate (server-first)

Frontend: lint:diffcheck:capability-difftype-checkvitest --changedtest:contractbuild

Backend: py_compile → unit suites (core, route access, W01/W02 touched) → sudo_budget_check --strictcontroller_route_budget_checkenvironment_isolation_check.py --live

8.3 Update docs


9. Phase 5 — Demo candidate (prep only; UAT with W16)

Setelah Phase 4 lulus:

  1. Commit tip FE develop + BE main
  2. Build immutable FE + create-backend-release.sh
  3. Promote demo (same procedure as RC1F-006 W05 bundle)
  4. Stop — UAT PROMOTE_UAT menunggu W16 + gelombang SC-CORE penuh

10. Risks & mitigations

Risk Mitigation
W01 product lock policy tidak disepakati Bounded DEC freeze (admin-only late edit) — jangan block 64/64 engineering
W02 S0 lebih luas dari satu endpoint Expand adversarial matrix before rebind sign-off
E1.2 rebind gagal setelah W01/W02 code change Re-run Phase 1.5 last — single final SHA
Double promote UAT Explicit defer until W16 track; document in charter
Import/async W02 (DEC-008) Mark RT-W02-IDM/REC NOT RUN with explicit non-claim

11. Estimated effort

Phase Effort
0 Charter + decisions 1–2 hari
1 W00 unblock 3–5 hari
2 W01 rebind 2–4 hari
3 W02 rebind + S0 3–5 hari
4 Bundle + docs 1 hari
Total ~2–3 minggu (1 engineer, server-first)

12. Immediate next actions

  1. Approve charter template — user confirms W01 lock/REC bounded options (§4.2).
  2. Start Phase 1.1 — STAB-026 placeholder audit (read-only grep + route inventory).
  3. Parallel: reproduce W02 S0 on dev 8074 to confirm fix scope before coding.

13. References

Artifact Path
Runtime matrix SSOT 07-release-test-matrix.md §4, §5.1, §5.2
W01 harness custom_addons_scola/gcgscola/scripts/golden/w01_runtime_certify.py
W02 harness custom_addons_scola/gcgscola/scripts/golden/w02_runtime_certify.py
E1.2 harness scripts/golden/e12_security_matrix.py
W01 independent gap audit/T2.1-W01-independent-verdict.md
W02 S0 finding audit/T3-W02-independent-verdict.md
Promotion contract docs/ai-guidelines/release-environment-promotion.md