Lewati ke isi

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


W01 — Academic master / timetable bounded V1

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

RT-W01-UIA-01 — Academic menu crawl

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
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

Status PASS (2026-08-29)
Harness W02-ASYNC-IDM-DUPLICATE-KEY in w02_async_import_certify.py
Evidence T3-W02-async-runtime-cases.json

RT-W02-REC-01 — Async import recovery

Status PASS (2026-08-29)
Harness W02-ASYNC-REC-PARTIAL-FAILURE, W02-ASYNC-REC-STUCK-RECOVERY
Evidence T3-W02-async-runtime-cases.json

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).