T4 — Post-SCORE Track Charter: W16 Canonical News¶
Mode: Server /home/scola/odoo
Approval: APPROVED_BY_REQUESTING_USER_CONVERSATION (2026-08-29) — W16-1 DEC signed; W16-2 engineering in progress
Track ID: POST-SCORE-W16
Tip baseline (post SC-CORE): FE 1d7a9038… / BE 6033c21… (rebind binds exact current-tip SHA at W16-4 closure)
1. Scope¶
In scope¶
| Workstream | Suite | Denominator | Primary harness |
|---|---|---|---|
| W16 | CORE-W16 |
11 matrix rows (§5.3) | w16_runtime_certify.py — scaffold BE 84b46c7 (11 cases: 5 executable probe, 6 SKIP pending DEC freeze) |
Contract under test: scola.news is the sole canonical writable source. Legacy announcement must be read-only/migrated/removed, never a second writer (EV-W16, STAB-033, IA-010).
Matrix rows in denominator (§5.3):
| Row | Current status | Phase W16-1 target |
|---|---|---|
RT-W16-POS-01 |
NOT RUN |
PASS after harness |
RT-W16-NEG-01 |
NOT RUN |
Unblocked — DEC-003/004 signed 2026-08-29 |
RT-W16-SCP-01 |
NOT RUN |
PASS after harness |
RT-W16-TEN-01 |
NOT RUN |
PASS after harness |
RT-W16-VAL-01 |
NOT RUN |
PASS after harness |
RT-W16-STA-01 |
NOT RUN |
Unblocked — DEC-007 signed 2026-08-29 |
RT-W16-IDM-01 |
NOT RUN |
PASS after harness |
RT-W16-REC-01 |
NOT RUN |
Unblocked — DEC-010 signed 2026-08-29 |
RT-W16-XRP-01 |
NOT RUN |
Unblocked — DEC-010 signed 2026-08-29 |
RT-W16-XMD-01 |
NOT RUN |
Unblocked — DEC-011/STAB-033; legacy guard W16-2 |
RT-W16-UIA-01 |
NOT RUN |
Unblocked — STAB-033; FE canonical routes verified in audit |
E1.2 regression smoke (29/29) runs after W16 rebind to guard cross-module integrity.
Out of scope (explicit defer)¶
| Item | Reason | When |
|---|---|---|
UAT PROMOTE_UAT |
Gelombang terpisah W16+; isolation mismatch expected | Post W16 engineering + explicit UAT wave |
| Production promotion | Requires immutable CERTIFIED manifest | Not authorized |
| Demo candidate refresh | Optional after W16-4 green | Phase optional |
Profile matrix (RT-PROFILE-*) |
Track terpisah — T4-PROFILE-DEC013-track-charter.md |
Parallel, not W16 denominator |
| W02 async import IDM/REC | Track terpisah — T4-DEC-W02-async-import-freeze.md |
Parallel, not W16 denominator |
| W03 admissions | Track T6A terpisah | Post SC-CORE |
2. Actors¶
| Actor | Responsibility |
|---|---|
| Engineering (server-first) | Execute phases W16-0..4; produce evidence JSON bound to exact FE/BE SHA |
| Product (conversational sign-off) | Approve bounded freezes in T4-DEC-W16-bounded-freezes.md |
| Human auditor | Independent spot-check optional; historical SC-CORE verdicts not rewritten |
3. Phase order (mandatory)¶
Phase W16-0 — Charter (this doc)
Phase W16-1 — DEC bounded freezes (approval matrix, reversal, notification, legacy migration)
Phase W16-2 — Code: FE canonical routes/menu (IA-010); BE scola_news lifecycle, legacy guard, audience/outbox idempotency
Phase W16-3 — Harness: w16_runtime_certify.py on Golden :8090 (scaffold done; full PASS after W16-1 freeze + W16-2 code)
Phase W16-4 — Rebind: update §5.3 matrix + V1-W16-rebind-<stamp>.json; QC + E1.2 regression smoke
SHA rule: All W16 code changes complete first → single final W16 harness rebind → one evidence bundle per track.
Precondition: W16-1 product freezes wajib sebelum W16-2 coding dan W16-3 harness — BLOCKED rows tidak boleh di-claim PASS tanpa signed bounded options.
4. Non-claims¶
- UAT promotion (
PROMOTE_UAT) = out of track — meskipun W16 selesai, UAT tetap gelombang terpisah. - Production promotion = not authorized from this track alone.
- Profile jenjang/timezone positive matrix = not part of W16 denominator — see Profile track.
- Async import certification = not part of W16 denominator — see Async track.
- Legacy announcement write path = must be absent or read-only after STAB-033; no dual-writer claim.
5. Matrix rows target (W16-4 closure)¶
| Row | Target | Primary evidence |
|---|---|---|
| POS-01 | PASS | Authorized publish lifecycle + audit |
| NEG-01 | PASS | Capability/approval matrix per DEC-003/004 freeze |
| SCP-01 | PASS | Author ownership + audience scope |
| TEN-01 | PASS | Cross-tenant denial |
| VAL-01 | PASS | Invalid window/target/file rejected atomically |
| STA-01 | PASS | State machine per DEC-007 freeze |
| IDM-01 | PASS | Duplicate publish/cron/outbox idempotent |
| REC-01 | PASS | Notification failure recovery per DEC-010 freeze |
| XRP-01 | PASS | Publish/correction/archive propagation per DEC-010 |
| XMD-01 | PASS | Legacy read-only/migrated per DEC-011/STAB-033 |
| UIA-01 | PASS (bounded) | One canonical create/publish route; legacy write absent |
6. Exit gate (track complete)¶
- [x] W16 harness 11/11 PASS on Golden BE
b85212d/ FE5bebc1b4— T5-W16-20260829T030129Z-runtime-matrix.json - [x]
V1-W16-rebind-20260829T030500Z.jsoninV1-current-tip-evidence/ - [x] §5.3 matrix rows updated; README current-tip pointer if applicable
- [x] Full QC green (FE lint:diff + type-check + nav-graph + build; BE py_compile + unit + modular checks)
- [x] E1.2 29/29 regression smoke PASS — T0-E1.2-20260829T030309Z-security-matrix.json
- [x] Bounded freezes signed:
T4-DEC-W16-bounded-freezes.md— 2026-08-29 - [x] W16-4 rebind complete — track engineering exit; UAT/production remain out of scope
7. References¶
| Artifact | Path |
|---|---|
| Closure decision | T4-W16-closure-decision.md |
| Program SSOT | V1-PLAN-POST-SCORE-W16-PROFILE-ASYNC.md |
| Bounded product freezes | T4-DEC-W16-bounded-freezes.md |
| Runtime matrix SSOT | 07-release-test-matrix.md §5.3 |
| SC-CORE closure | T4-SCORE-closure-decision.md |
| STAB-033 | 08-stabilization-backlog.md |
| W16 roadmap unit | 10-implementation-roadmap.md §8 T5-U02 |
| Canonical news model | custom_addons_scola/gcgscola/scola_news/models/scola_news.py |
| Legacy announcement | custom_addons_scola/gcgscola/scola_portal/models/announcement.py |