| Item |
Nilai |
| Mode |
Server · /home/scola/odoo |
| Tanggal |
2026-08-11 |
| Exit label |
T2 COMPLETE — W01 ACADEMIC MASTER → TIMETABLE CERTIFIED |
Identity
| Item |
Value |
| FE tip (pre-docs) |
8004894c… on develop (= origin at T2 start) |
| FE application tree (T1-C) |
40ad2da8… unchanged by docs-only tip |
| BE application commit |
38d36d8c8a436c16464a9abf11a4d13e32693ac3 on main |
| BE prior tip |
8cc5cca… |
| BE application tree hash |
b27bef604d430a201dc123db0b912d30699c5f12880cfc48db2b8634719f3502 |
| FE tip (docs) |
0cf05b87… on develop (= origin; docs/evidence tip; app tree unchanged) |
| FE application tree |
40ad2da8… (T1-C) |
| Golden |
scola_golden · UUID 2bf5fd27-9390-11f1-9617-28e8d4be73f5 · fixture base gt-core-b1.1 + overlay gt-w01-1.0 |
| DEC-003 |
18704cbd… unchanged |
| Runtime evidence run |
T2-W01-20260810T233046Z · 28/28 PASS |
| E1.2 Phase 28 rebind |
T0-E1.2-REBIND-CURRENT-20260810T2336Z · 29/29 PASS |
Domain ownership decisions
- Timetable SSOT =
op.session; rombel SSOT = op.batch; slots = scola.lesson.hours.
- Term = APPLICABLE (
op.academic.term).
- Room = optional for Core sessions.
op.teaching.assignment = OPTIONAL/LMS — Core teaching relation = op.session.faculty_id + op.batch.faculty*.
- Overlapping academic years not prohibited by API (documented Product rule).
Key fixes (BE 38d36d8)
session_save: lesson_hours_id, company-scope relation checks, end>start, savepoint (no partial commit on conflict), advisory locks + pre-check for concurrency.
academic_year_save: end≥start; term bounds inside year.
study_group_save: reject foreign-company course_id; savepoint on constraint errors.
FoundationAuditorDashboardApiController._scoped_model: accept active_test (MRO safety for academic APIs).
- Harness:
scripts/golden/w01_runtime_certify.py.
Evidence artifacts
T2-W01-preflight.md
T2-W01-domain-map.md / .json
T2-W01-certification-denominator.json
T2-W01-role-capability-matrix.json
T2-W01-validation-matrix.md
T2-W01-runtime-matrix.md
T2-W01-evidence/ (incl. T2-W01-runtime-cases.json)
T2-W01-residuals.md
T2-W01-result.md (this file)
Happy / negative summary
- Happy: year+terms → grade/subject/rombel → lesson hours → session create/update/delete/read consistency.
- Negatives: invalid dates, foreign course/faculty/batch/subject, role mutate denied, RPC bypass blocked, conflict atomic, concurrent single-winner, duplicate submit rejected.
Explicit non-certifications
- W02 NOT CERTIFIED
- W05 NOT CERTIFIED
- Optional packages (LMS/CBT/Report Card/…) NOT CERTIFIED
Adversarial self-review
- Timetable without academic context? No — batch requires year; session requires batch/subject/faculty.
- Foreign-company relations? No — denied without leak.
- Teacher double-book where forbidden? No — conflict + locks.
- Class double-book? No.
- Partial records after failed conflict? No — savepoint.
- Concurrent invalid schedule? No — one winner.
- Double-submit duplicates? No.
- Teacher mutate beyond scope? No — mutate denied.
- Student/parent mutate? No.
- Direct RPC bypass? No.
- FE/BE same critical rules? Yes — BE authoritative.
- Saved timetable survives reload / matches DB? Yes.
- Canonical schedule views agree? Yes (admin list ≡ DB; portal linkage residuals = FIXTURE_DATA only).
- Optional package certified? No.
- W02/W05 certified? No.
- T0/T1 regression still green? Yes (Phase 28 gates; see evidence).
Final label
T2 COMPLETE — W01 ACADEMIC MASTER → TIMETABLE CERTIFIED