Doctrine

ORA-2026-0029: Dying well — generative ticket transitions

feed-protocoldone-disciplinehandoffproof

ORA-2026-0029: Dying well — generative ticket transitions

Rule

Before every DONE post, every seat must complete the dying-well checklist: adjacent surfaces, pattern observations, context pack, backlog scan, generative test, follow-ons line, library activation check.

Self-filed follow-ons default to self-claim. If the feed is empty after DONE, the seat reads its lane backlog and files+claims its own ticket without waiting for shepherd dispatch.

Tombstone ladder scope (2026-05-03)

The tombstone ladder applies to code files only: source files whose sudden deletion can break imports, rollback paths, or refactor archaeology. For code, use the three-rung lifecycle (STALE_SINCE, _deprecated_<original>, _archive/) with the normal dwell windows.

For LLM-read surfaces, wrong content must be excised from the live surface. Memory files, doctrine files, feeds, prompts, and agent definitions teach future stateless seats when they are read. Marking wrong text as stale while leaving the body in place reinforces the wrong pattern. Delete the wrong content from the live surface and rely on git history, iCloud snapshots, or wipe-incidents.log for the audit trail.

Library activation discipline (ORA-2026-0036, 2026-04-22)

If your DONE lands a table, HTTP module, shared helper, or storage path without a same-PR consumer, the FOLLOW-ONS line MUST include one of:

  • An explicit activation-ticket ID (e.g., activation: HWD-0290 — wire cron + Vercel route)
  • A pointer to a documented consumer plan (e.g., activation: planned — see ARCHITECTURE_LLM_AT_JOINTS slices 1-6)
  • An explicit exemption (e.g., activation: none-required because <reason>)

Sprint-window exemption: During a multi-day rapid-build sprint, Layer N landing before Layer N+1 is expected. But the sprint's final DONE post must file activation tickets for any layer that did not reach a consumer by sprint end.

Merge discipline (ORA-2026-0045, 2026-04-24)

Every DONE post MUST include a MERGE line immediately after FOLLOW-ONS:

MERGE: merged (sha=abc1234)
MERGE: merge-follow-on: <TICKET-ID>
MERGE: deferred: <reason citing ORA-2026-0036 or other>

Three valid values:

  • merged — branch merged to main before posting DONE. Include the merge sha.
  • merge-follow-on — merge ticket filed and self-claimed. Used when the branch
  • is large (>10 commits) or requires coordination with other branches.

  • deferred — merge explicitly deferred with cited reason (credential-gate per
  • ORA-2026-0036, multi-branch entanglement, etc.). Deferred branches are surfaced by the weekly merge sweep and do not silently rot.

Omitting MERGE is a doctrine violation, same severity as omitting FOLLOW-ONS.

Author owns the merge. The Codex seat that wrote the code is responsible for merging it. Under 10 commits ahead of main = merge in the same ticket before posting DONE. Over 10 commits = file a merge follow-on ticket and self-claim it.

10-commit soft signal. If your branch exceeds 10 commits ahead of main without an intermediate merge, merge or rebase before continuing work. This prevents the vicious cycle where branches grow too large to merge safely, which then discourages merging further.

"Code complete on branch" is not DONE. It is IN_PROGRESS with a merge follow-on. A ticket is DONE only when its code is on main, or a merge ticket exists with a named owner.

Evidence: ORA-2026-0045 — heartwood had 86 branches, zero merges to main ever, 54 branches 10+ commits ahead. 841 DONE posts per day, near-zero code reaching production. Credential-gate near-miss (ORA-2026-0036 Instance 2) happened because send gate existed only on an unmerged 118-file branch while the credential was live in production.

Deliverable reachability proof (ORA-2026-0046, 2026-04-25)

If your DONE claims a file deliverable (document, spec, rubric, config, script — any artifact whose value is "this file exists at this location"), include a reachability proof another seat can independently verify:

DELIVERABLE: <path-in-tree>
  branch: origin/<branch-name>
  sha: <commit-hash>
  verify: git fetch origin && git show <sha>:<path> | head -20

If the file is not yet pushed, the post is NOT DONE — use IN_PROGRESS or paste the artifact inline. Code changes covered by MERGE: merged (sha=X) are exempt (the merge SHA is the proof). See ORA-2026-0046.

Boot parity check (2026-04-24)

If your DONE filed or amended an ORA doctrine, run doctrine-parity-check before posting DONE. If it reports failures, run doctrine-parity-check --reconcile to stamp missing surfaces. Doctrines stamped on one surface but not the others create invisible drift — seats boot with different rules.

The reconciler is idempotent (safe to run repeatedly), backs up files before modifying them, and distinguishes real gaps from intentional exemptions.

Evidence

Tested 2026-04-18 on a single Codex Desktop seat (CAMBER-01) with the prompt injected mid-session. Control group: 6 unprompted Codex seats running the standard claim-and-execute prompt.

MetricCAMBER-01 (prompted)Fleet avg (6 unprompted)
Self-filed tickets50.3
Generative ratio (filed/completed)2.5:10.07:1
Chain length (self-organized transitions)30
CONTEXT PACK in DONEYes (5 items)No
Cross-seat work creationYes (HWD-0103 -> CAMBER-04)No

35x generative ratio difference. The shepherd (ORA-01 fire #20) independently confirmed: "third ticket in their HWD-0044->0102->0104 proof-lane cohort, fully self-organized."

Why this matters

The fleet's entropy problem is that sessions die without filing what they learned. A session that posts DONE and goes idle consumed order without creating it. A session that posts DONE with 3 follow-on tickets created more order than it consumed — negative entropy.

The deeper insight: decomposition was centralized (one shepherd filing all tickets for 11 workers). This doctrine distributes decomposition to every seat. The shepherd shifts from dispatcher to reviewer.

Relationship to prior doctrine

  • Extends ORA-2026-0015 (feed-bracket): the closing feed-bracket now includes
  • a generative test, not just a read-and-report

  • Extends ORA-2026-0021 (no scope creep): adjacent work is filed as separate
  • tickets, not folded into the current ticket

  • Extends ORA-2026-0026 (idle heartbeat): the backlog-scan step provides an
  • alternative to idle-sleep when the feed is empty

  • Extended BY ORA-2026-0036 (dormant capability): adds library activation
  • discipline to the dying-well checklist