RS5A-PATCH2-04 — Test Oracle Canonical Outcomes & Count — 2026-06-21
RS5A-PATCH2-04 — Test Oracle Canonical Outcomes & Count — 2026-06-21
Macro: RS5A-PATCH2 · Residual R5-oracle · Deliverable: 04 of 6.
Supersedes: RS5A-PATCH1-06 §1 parenthetical alias outcomes and §3 "still 84 enumerated" count statement only. The corrected per-case oracle codes from PATCH1-06 stand; only their alias-ambiguity and count-ambiguity are fixed. Suite remains DEFINED_NOT_EXECUTED.
Reason (Codex §8): an executable oracle must have exactly one canonical expected outcome; a count that says "84 enumerated" while G02 is split into three executable subcases is ambiguous.
1. Canonicalization rules
- Every executable scenario has exactly one canonical expected outcome. No scenario may PASS on either a primary code or an alias.
- Aliases are
documentation_alias_only. They may appear as descriptive prose but are never accepted executable oracle outcomes. There is no active alias-normalization registry; if one is ever desired it isfuture / not activeand must be explicitly versioned before any alias becomes acceptable. G02a/G02b/G02care executable scenarios, each with its own ID and its own single canonical outcome — not hidden parent-only text.- The count distinguishes parent IDs from executable scenarios (see §3). It is never stated as "84 enumerated" while three G02 subcases exist.
2. Canonical expected outcomes (authoritative, one per scenario)
| scenario | canonical expected outcome | class | documentation_alias_only (NOT accepted) |
|---|---|---|---|
D07 — register_dot authored with risk tier weaker than high |
REGISTER_DOT_RISK_TIER_MISMATCH |
rejection | REGISTER_DOT_ACTION_CONTRACT_VIOLATION |
H03 — registration writes out-of-vocabulary status (live published×16) |
STATUS_VALUE_OUT_OF_VOCABULARY |
rejection | (none) |
| H07 — success-audit row emitted on registration | SUCCESS_AUDIT_FORBIDDEN_BY_PHASE4_CONTRACT |
rejection | SUCCESS_AUDIT_NOT_PART_OF_REGISTER_DOT_CONTRACT |
I03 — draft write fires activation notify |
DRAFT_WRITE_EMITTED_ACTIVATION_NOTIFY |
rejection | ACTIVATION_SIDE_EFFECT_ON_INERT_WRITE |
| G02a — same effect + same nonce, already committed | IDEMPOTENT_PRIOR_DECISION_RETRIEVAL |
idempotency behavior (no new write, no reject) | (none) |
| G02b — same nonce + changed request/effect | NONCE_REUSE_DIFFERENT_EFFECT |
rejection | (none) |
| G02c — same nonce + changed authorization envelope | NONCE_REUSE_AUTHORIZATION_MISMATCH |
rejection | (none) |
| G08 — exact retry: same effect / same nonce / same envelope | IDEMPOTENT_PRIOR_DECISION_RETRIEVAL |
idempotency behavior (returns prior durable decision; not a rejection) | (none) |
Notes:
IDEMPOTENCY_BEHAVIOR_CASE(used in PATCH1-06) is the class label, not the per-scenario oracle outcome. The canonical outcome for G02a and G08 isIDEMPOTENT_PRIOR_DECISION_RETRIEVAL. Two distinct scenarios may share one canonical outcome; that is not an alias.- No parenthetical "(alias …)" form may be used as an accepted PASS code. The alias column above is
documentation_alias_only.
3. Canonical count — 84 parent IDs / 86 executable scenarios
Parent IDs (RS5A-09 enumerated rows): A01–A12 (12) + B01–B10 (10) + C01–C08 (8) + D01–D10 (10) + E01–E10 (10) + F01–F10 (10) + G01–G08 (8) + H01–H08 (8) + I01–I08 (8) = 84 parent IDs.
Executable scenarios: every parent ID is one executable scenario except G02, which splits into three executable scenarios (G02a, G02b, G02c).
| component | count |
|---|---|
| parent IDs unaffected by PATCH1/PATCH2 corrections (each 1 executable) | 78 |
| single-case re-canonicalizations D07, H03, H07, I03 (each 1 executable) | 4 |
| G02 → G02a, G02b, G02c (executable subcases) | 3 |
| G08 re-canonicalization (1 executable) | 1 |
| executable scenarios total | 86 |
Arithmetic: original 84 parent IDs; G02 (one parent) becomes three executable scenarios ⇒ net 84 − 1 + 3 = 86. Equivalently 78 + 4 + 3 + 1 = 86.
Canonical statement to publish: "84 top-level parent IDs / 86 executable scenarios." The suite must never be described as "84 enumerated" while G02a/G02b/G02c are separately enumerated, nor as "86 parent IDs."
4. Dependent identity-case mapping (consumes [[rs5a-patch2-03]])
The canonical principal contract sharpens four existing RS5A-09 identity cases without adding scenarios (they keep their parent IDs and remain single-outcome):
| case | prior coarse outcome | canonical outcome (from [[rs5a-patch2-03]] §4) |
|---|---|---|
A11 — approver='president-bot' substring treated as president |
QUORUM_APPROVER_IDENTITY_UNVERIFIED |
FREE_TEXT_PRESIDENT_REJECTED |
A12 — self-declared approver_type='ai_council' |
QUORUM_APPROVER_IDENTITY_UNVERIFIED |
SELF_DECLARED_COUNCIL_IDENTITY_REJECTED |
F07 — president via approver='vice-president' substring |
QUORUM_APPROVER_IDENTITY_UNVERIFIED |
FREE_TEXT_PRESIDENT_REJECTED |
| F08 — two aliases of one principal double-counted | QUORUM_NOT_SATISFIED (literal-string guard) |
APPROVER_ALIAS_DOUBLE_COUNT |
These are re-canonicalizations of existing parent IDs, not new scenarios; the count stays 84 parent / 86 executable.
5. Status
R5-oracle residual CLOSED — exactly one canonical expected outcome per executable scenario; aliases are documentation_alias_only and never accepted; count declared 84 parent IDs / 86 executable scenarios. Suite remains DEFINED_NOT_EXECUTED; no PASS result is accepted; no test was run; no runtime driven; no mutation. …TEST_ORACLE_INSUFFICIENT HOLD condition does not apply.