DEC-W01/W02 — Bounded Product Freezes (Core V1)
Mode: Server /home/scola/odoo
Approval: APPROVED_BY_REQUESTING_USER_CONVERSATION (2026-08-29)
Scope: Minimum product decisions to unblock W01/W02 matrix rows without new feature scope
Format: Same bounded-decision pattern as T4-DEC-006-007-attendance-v1-matrix.md
RT-W01-STA-01 — Session edit / lock policy
| Aspect |
V1 bounded decision |
| Lock API |
No separate lock API V1 |
| Session editable |
Until session date (same-day operator edit allowed per role capability) |
| Past session edit |
admin / school_admin only + audit trail |
| Harness proof |
Existing W01-SESSION-*-DENIED negative cases; no new lock endpoint |
RT-W01-REC-01 — Term/session replace recovery
| Aspect |
V1 bounded decision |
| Atomicity |
Savepoint rollback on term/session child replace failure (implemented) |
| UI |
Authoritative backend error; no silent partial replace |
| Harness proof |
W01-TERM-UPDATE-ATOMIC, W01-SESSION-UPDATE-ATOMIC |
| Reference |
T2.1-W01-atomicity-matrix.md |
RT-W01-SCP-01 / RT-W01-NEG-01 — Teacher read scope
| Aspect |
V1 bounded decision |
| Teacher read |
Own faculty + homeroom batch only |
| Unassigned teacher |
Denied read/mutate on foreign session detail |
| Harness proof |
W01-READ-* (11 cases), W01-RPC-TEACHER-READ-* |
| Reference |
T2.1-W01-session-read-scope-contract.json |
| Aspect |
V1 bounded decision |
| Canonical routes |
Academic masters via canonical menu hierarchy only |
| STAB-041 alias debt |
Partial defer allowed — canonical routes PASS via check:core-nav-ux |
| Harness proof |
check:core-nav-ux + spot crawl; alias cleanup not blocking V1 bounded claim |
W02 — Manual onboarding bounded V1
RT-W02-POS-01 — Create path
| Aspect |
V1 bounded decision |
| Primary path |
Manual create via import API 1 row (TambahSiswa / POST /api/v1/admin/import/students-with-parents) |
| Batch assign |
Same request or immediate follow-up link |
| Harness proof |
W02-CREATE-OK |
RT-W02-STA-01 — Onboarding state machine
| Aspect |
V1 bounded decision |
| Flow |
create → batch link → parent relation |
| Activation token |
No activation token V1 — fresh login when user account created separately |
| Harness proof |
Create + sibling parent reuse cases |
RT-W02-VAL-01 — Import atomicity
| Aspect |
V1 bounded decision |
| Policy |
ROW_ATOMIC persistence — accepted rows commit; rejected rows do not affect siblings |
| Harness proof |
W02-IMPORT-MIXED-ROW |
| Reference |
T3-W02-import-contract.md |
RT-W02-NEG-01 / RT-W02-SCP-01 — Authorization
| Aspect |
V1 bounded decision |
| Mutation capability |
students.manage required |
| Viewer / teacher / student |
Denied create/import/link RPC + route guards |
| Harness proof |
RPC bypass denied cases + parent scope cases |
RT-W02-XRP-01 — Parent link propagation
| Aspect |
V1 bounded decision |
| Visibility |
Parent link visible after relation save; sibling reuse allowed |
| Revoke |
Archive/deactivate removes stale portal access |
| Harness proof |
Sibling parent reuse + portal read cases |
Explicit NOT RUN (non-claim)
RT-W02-IDM-01 — Async import idempotency
RT-W02-REC-01 — Async import recovery
Certification denominator summary
| Workstream |
Harness |
Target |
Matrix rows |
| W01 |
w01_runtime_certify.py |
64/64 PASS |
§5.1 majority PASS |
| W02 |
w02_runtime_certify.py + w02_async_import_certify.py |
33/33 + 3/3 PASS |
§5.2 all rows PASS |
| W05 regression |
w05_runtime_certify.py |
16/16 PASS |
No regression after W01 |
Sign-off record
Product bounded options above approved via conversational sign-off in SC-CORE track plan execution (2026-08-29). Engineering proceeds without separate lock API (W01) or async import certification (W02).