T6I W20 RFID — Harness Result (Wave PASS)
| Item |
Value |
| Wave |
W20 / SC-ATTEND+ |
| Contract |
T6I-W20-rfid-contract-DRAFT.md (APPROVED via prompt) |
| Harness |
custom_addons_scola/gcgscola/scripts/golden/w20_runtime_certify.py |
| Overlay |
gt-w20-3.0 |
| Executed (UTC) |
2026-08-31 |
| Database |
disposable scola_t6i_rfid_audit_* |
| Base URL |
http://127.0.0.1:8104 |
| Result |
11/11 PASS ×2 — wave PASS (QG-17 bounded) |
Sign-off (product owner via Cursor prompt)
| Field |
Value |
| Authorized by |
product owner via Cursor prompt |
| Authorization date |
2026-08-31 UTC |
| Prompt quote |
"Lanjutkan owner sign-off lewat prompt saja, tidak perlu secara manual." |
| Engineering witness |
agent session |
Cases (bounded V1 harness)
| Case |
Matrix ID |
Status |
Notes |
| W20-POS-INGEST-HAPPY |
RT-W20-POS-01 |
PASS |
Signed device ingest → queued/success |
| W20-NEG-VIEWER-DENY |
RT-W20-NEG-01 |
PASS |
Teacher denied events list + retry |
| W20-VAL-MISSING-SIGNATURE |
RT-W20-VAL-01 |
PASS |
Missing X-Signature → MISSING_SIGNATURE |
| W20-XMD-ENTITLEMENT-OFF |
RT-W20-XMD-01 |
PASS |
SC-ATTEND+ off → feature_disabled on /api/rfid/events |
| W20-IDM-DUPLICATE-INGEST |
RT-W20-IDM-01 |
PASS |
Same event ID → deterministic duplicate; DB count = 1 |
| W20-STA-RETRY-STATE-MATRIX |
RT-W20-STA-01 |
PASS |
Manager retry on error → success/duplicate; second retry denied |
| W20-REC-FAILED-RETRY-ONCE |
RT-W20-REC-01 |
PASS |
Failed fixture retry once; attendance reconciled; no duplicate on re-retry |
| W20-SCP-FOREIGN-OWNERSHIP |
RT-W20-SCP-01 |
PASS |
Cross-card ingest denied; foreign retry/regen/device list scoped |
| W20-TEN-CROSS-COMPANY |
RT-W20-TEN-01 |
PASS |
T1 device + T2 card → UNKNOWN_CARD; no T2 leak/effect |
| W20-XRP-READER-BOUNDARY |
RT-W20-XRP-01 |
PASS |
Parent/student denied; manager sees POS attendance; failed pre-retry clean |
| W20-UIA-API-ALIGNMENT |
RT-W20-UIA-01 |
PASS |
Secret redacted; route meta aligned; package-off devices deny |
Evidence (×2)
Prior slice evidence: T6I-evidence/T6I-W20-20260831T102327Z-runtime-matrix.json (7/7 slice 1+2)
Engineering fixes (slice 3)
| Fix |
File |
Reason |
| Device mutate scoped to caller companies |
scola_smart_attendance/controllers/rfid_devices_api.py |
SCP: foreign device update/delete/regen denied |
| T2 isolation fixtures + SCP/TEN/XRP/UIA cases |
scripts/golden/w20_runtime_certify.py |
Complete 11-case matrix |
| Full JSON GET helper (no 500-char truncation) |
scripts/golden/w20_runtime_certify.py |
Events list parse for XRP/UIA |
Deferred (not claimed)
| Item |
Track |
| RT-PROFILE-TIMEZONE-01 W20 boundary |
Profile overlay |
| DEC-010 notification policy harness |
Phase 7 |
| STAB-030 full closure |
Dead-letter owner + notification |
| V1 CERTIFIED / production / QG-18 human pass |
Out of scope |
Next wave recommendation
W14 Library — STAB-031 queue policy harness remains prerequisite for full matrix. W07 report card can proceed in parallel after contract review.