RS-TKT-0A · 06 RS5A/RS5B Pre-Codex Profile (draft)
RS-TKT-0A · 06 — RS5A/RS5B Pre-Codex Profile (draft)
Lane: RS-TKT-0A · Date: 2026-06-21
Gate: REGISTRATION_HOLD · REGISTRATION_CAN_PROCEED = NO · 0 runtime mutations (KB writes only)
Authority: NON_AUTHORITY · may_gate=false · decision_effect=NONE · draft checker profile, design-only
This profile is a support checker, not an approver. It mechanically catches the defect classes Codex actually raised on the RS5A chain (NEED_PATCH2, NEED_PATCH3, REJECT_RS5A_PATCH3_QUORUM_PRECEDENCE_INSUFFICIENT, ACCEPT_RS5A_PATCH4) so a packet is cleaner before GPT/Codex. A clean profile result is engineering PASS only — never authority/Codex/registration PASS. Every checker emits the 04 shared output schema.
Caveat (MCB-1): RS5B has no external Codex review yet (only self-check BI01–BI10). RS5B-specific rows are marked self-reported and remain DRAFT until Codex reviews RS5B.
Group A — Package checker (TKT-RS-PKG / TKT-RS-PACKAGE)
| checker_id | rule | expected evidence | failure code | severity |
|---|---|---|---|---|
| TKT-RS-PKG-001 required files exist | reports/<stage>/ has index + contiguous 01..NN + codex-review-packet; the macro-<stage> rollup exists at reports/ |
list_documents count=N, next_offset=null |
RS_PKG_FILE_MISSING |
BLOCKER |
| TKT-RS-PKG-002 no empty/truncated target | each file content_length>0 and truncated=false |
per-file length | RS_PKG_EMPTY_OR_TRUNCATED |
BLOCKER |
| TKT-RS-PKG-003 rollup + index + decision + codex packet present | the five roles all present and identifiable | role→file map | RS_PKG_ROLE_MISSING |
BLOCKER |
| TKT-RS-PKG-004 no overwrite of prior package | prior-stage dirs still all revision=1; current "Does NOT overwrite …" enumeration present |
revisions table | RS_PKG_PRIOR_OVERWRITTEN |
BLOCKER |
Group B — Gate checker (TKT-RS-GATE)
| checker_id | rule | expected evidence | failure code | severity |
|---|---|---|---|---|
| TKT-RS-GATE-001 REGISTRATION_HOLD present | literal REGISTRATION_HOLD in each index/decision/codex-packet/rollup |
matched lines | RS_GATE_HOLD_MISSING |
BLOCKER |
| TKT-RS-GATE-002 CAN_PROCEED = NO | literal REGISTRATION_CAN_PROCEED = NO; flag any = YES/HOLD-clearing phrase |
matched line | RS_GATE_CAN_PROCEED_OPENED |
BLOCKER |
| TKT-RS-GATE-003 no Owner/scope/APR/register_dot creation | no claim of creating Owner/scope/APR/register_dot; 0 mutations/0 runtime mutations present |
matched lines | RS_GATE_OWNER_OBJECT_CREATED |
BLOCKER |
| TKT-RS-GATE-004 no RS-VALIDATOR / implementation / registration opened | no claim of opening a validator, implementation, or registration | matched lines | RS_GATE_RUNTIME_OPENED |
BLOCKER |
Group C — Scope / lifecycle checker (TKT-RS-LIFE)
Grounds: NEED_RS5A_PATCH3 (SCOPE_TAXONOMY_STILL_AMBIGUOUS) and the PATCH3 3-axis fix.
| checker_id | rule | expected evidence | failure code | severity |
|---|---|---|---|---|
| TKT-RS-LIFE-001 replay/audit pre-admission | replay/audit must already exist and pass before real register_dot admission (axis A) |
quoted "before … admission" | RS_LIFE_PREADMISSION_MISSING |
HIGH |
| TKT-RS-LIFE-002 replay/audit persist/operate after admission | prerequisites must remain available and keep enforcing after admission (axis B) | quoted persistence clause | RS_LIFE_PERSISTENCE_MISSING |
HIGH |
| TKT-RS-LIFE-003 activation only post-registration business transition | activation is the only business transition after inert draft registration; never inherited |
quoted activation clause + MUST_NOT_IMPLICIT_INHERIT |
RS_LIFE_ACTIVATION_INHERITED |
HIGH |
| TKT-RS-LIFE-004 no deferrable replay/audit bucket | forbidden phrases absent ("3 deferrable", "replay/audit … after registration", "may act/exist AFTER runtime registration") | blocklist grep clean | RS_LIFE_REPLAY_AUDIT_DEFERRED |
BLOCKER |
Group D — Quorum checker (TKT-RS-QUORUM)
Grounds: the real REJECT_RS5A_PATCH3_QUORUM_PRECEDENCE_INSUFFICIENT and the PATCH4 total-order fix.
| checker_id | rule | expected evidence | failure code | severity |
|---|---|---|---|---|
| TKT-RS-QUORUM-001 total Q-order exists | full chain present: Q00 < Q10 < Q11 < Q20 < Q21 < Q22 < Q23 < Q30 < Q31 < Q40 < Q41 < Q50 |
quoted chain | RS_QUORUM_ORDER_INCOMPLETE |
BLOCKER |
| TKT-RS-QUORUM-002 Q-order authoritative over bands | "Q-order AUTHORITATIVE over P0–P5 band labels" + "lowest matching Q-code at the evaluation unit wins" present | quoted rule | RS_QUORUM_BANDS_AUTHORITATIVE |
BLOCKER |
| TKT-RS-QUORUM-003 evaluation unit defined | three units defined: context (Q00) / single vote claim (Q10–Q31) / APR over valid claims (Q40–Q50) | quoted definitions | RS_QUORUM_EVAL_UNIT_MISSING |
BLOCKER |
| TKT-RS-QUORUM-004 compound P1 input → one code | compound free-text-pres + self-declared-council input maps to exactly one code (Q10) | fixture CQ01 | RS_QUORUM_COMPOUND_P1_AMBIGUOUS |
HIGH |
| TKT-RS-QUORUM-005 compound P3 input → one code | compound pres + council-unresolved maps to exactly one code (Q30) | fixture CQ03 | RS_QUORUM_COMPOUND_P3_AMBIGUOUS |
HIGH |
| TKT-RS-QUORUM-006 per-vote before APR count | per-vote codes (Q10–Q31) evaluated before APR-level (Q40–Q50); numerically ordered so | quoted ordering | RS_QUORUM_PERVOTE_ORDER |
HIGH |
Also (delegation): assert half-open [effective_from, effective_to) — ==from valid, ==to/after → DELEGATION_EXPIRED (Q23), before → DELEGATION_NOT_YET_EFFECTIVE (Q22), revocation overrides (Q20). Failure → RS_QUORUM_DELEGATION_INTERVAL_BAD.
Group E — Replay / idempotency checker (TKT-RS-REPLAY)
Grounds: the G02a/b/c overlap Codex flagged; PATCH4 domain fix.
| checker_id | rule | expected evidence | failure code | severity |
|---|---|---|---|---|
| TKT-RS-REPLAY-001 G02a includes same auth envelope/digest | G02a IDEMPOTENT_PRIOR_DECISION_RETRIEVAL requires same effect and same authorization envelope/digest and prior durable decision |
quoted G02a def | RS_REPLAY_G02A_ENVELOPE_MISSING |
BLOCKER |
| TKT-RS-REPLAY-002 G02b different effect | G02b NONCE_REUSE_DIFFERENT_EFFECT for same-nonce + different effect |
quoted G02b | RS_REPLAY_G02B_BAD |
HIGH |
| TKT-RS-REPLAY-003 G02c same effect + different envelope | G02c NONCE_REUSE_AUTHORIZATION_MISMATCH for same effect + different envelope |
quoted G02c | RS_REPLAY_G02C_BAD |
HIGH |
| TKT-RS-REPLAY-004 G08 fixture distinct | G08 is a distinct client-observation fixture (known-response retry vs lost/unknown-response recovery), same canonical outcome | quoted G08 | RS_REPLAY_G08_NOT_DISTINCT |
MEDIUM |
| TKT-RS-REPLAY-005 G02 partition domain narrowed if no prior durable decision | partition claimed only within domain D (prior durable decision exists); in-flight same nonce·same effect·same envelope·NO prior durable decision named NO_PRIOR_DURABLE_DECISION_STATE_UNSPECIFIED = design-only label, not a code, not an executable scenario |
quoted domain + label | RS_REPLAY_DOMAIN_UNRESTRICTED / RS_REPLAY_INFLIGHT_AS_CODE |
BLOCKER |
Group F — Count / oracle checker (TKT-RS-COUNT)
Grounds: the "G02a/b/c enumerated separately while claiming 84" and "eight fixtures vs nine" drifts Codex caught.
| checker_id | rule | expected evidence | failure code | severity |
|---|---|---|---|---|
| TKT-RS-COUNT-001 84 parent IDs / 86 executable scenarios | 84 − 1 + 3 = 86 stated consistently across index/decision/rollup; suite DEFINED_NOT_EXECUTED |
quoted arithmetic + label | RS_COUNT_ARITH_MISMATCH |
HIGH |
| TKT-RS-COUNT-002 aliases documentation-only | any alias code marked documentation_alias_only, never an accepted oracle |
aliases table | RS_COUNT_ALIAS_AS_ORACLE |
HIGH |
| TKT-RS-COUNT-003 one canonical expected outcome per executable scenario | each scenario lists exactly one accepted code (no parenthetical alternatives) | per-scenario code | RS_COUNT_ORACLE_NONCANONICAL |
HIGH |
| TKT-RS-COUNT-004 compound fixtures do not silently change executable count | fixture range matches actual fixtures present (e.g. CQ01–CQ09 = nine; flag "eight"); compound fixtures labelled predicate-resolution, not new scenarios | fixture count | RS_COUNT_FIXTURE_DRIFT |
HIGH |
Also: filename↔title numeric drift (e.g. 09 "80-cases" vs body "84") → RS_COUNT_FILENAME_TITLE_DRIFT (MEDIUM).
Group G — Codex packet checker (TKT-RS-CODEX-PACKET)
| checker_id | rule | expected evidence | failure code | severity |
|---|---|---|---|---|
| TKT-RS-CODEX-001 cross-file agreement | verdict token, gate, count, "single next step" identical across index ↔ decision ↔ codex-packet ↔ rollup | agreement table | RS_CODEX_CROSSFILE_DISAGREE |
HIGH |
| TKT-RS-CODEX-002 links resolve | every [[wikilink]] / path reference resolves to an existing doc |
resolution list | RS_CODEX_DANGLING_LINK |
MEDIUM |
| TKT-RS-CODEX-003 verdict vocabulary | verdict token ∈ {RS5x_READY_FOR_<reviewer>_REVIEW, ACCEPT_*, REJECT_*, NEED_*_PATCH}; STATUS ∈ {HOLD, ACCEPTED_WITH_REGISTRATION_HOLD} |
matched token | RS_CODEX_VERDICT_VOCAB |
MEDIUM |
| TKT-RS-CODEX-004 no PASS upgrade / CLOSED cites evidence | each "CLOSED" cites superseding wording + fixture; "0 mutations" treated as attestation; no engineering PASS upgraded to authority/runtime/registration PASS | per-claim citation | RS_CODEX_PASS_UPGRADED |
HIGH |
Profile composition & verdict
Run order: A → B → {C, D, E, F} → G, layered on a TKT-Base (L0–L3) result. The braced groups are independent. Aggregate = worst per-group status. Any BLOCKER FAIL ⇒ "not Codex-ready" (advisory). The profile never sets CAN_PROCEED, clears REGISTRATION_HOLD, or substitutes for Codex/Owner. Its value is purely acceleration: catch the bookkeeping defects so reviewers spend attention on judgment.
Out-of-scope
Whether Codex/Owner will accept; the runtime correctness of quorum/replay/lifecycle; semantic truth of any clause; any authority/registration effect.