# Phase E rulings — doyle, 2026-07-31

Ruling on lia's Gate-4 discriminability audit proposals (PHASE-E-PROPOSALS.md, her run dir).
Proposals-only doc; nothing lands without the rulings below. Enactment is POST-RELEASE and
post-Phase-B.

**Scope of that moratorium (clarified 2026-07-31, todlando's blocker):** it covers PHASE E
ENACTMENT ONLY — the relations schema, seeding from the 39-pair list, the deferred renames/anchor
splits, and the 34-mint registry pass. Ordinary new-work REQ mints (e.g. the WAN-truth batch #50
lanes) are UNAFFECTED: mint as normal under TRACEABILITY rule 7 (scope-at-mint) plus the N1–N6
principles below. The known mechanical risk (concurrent `traceable-reqs.toml` tail edits, the
doyle-r4 release-conflict class) is handled by ordinary lane discipline — base on fetched
origin/main, rebase before PR — not by a mint freeze.

## The six naming principles (N1–N6) — verbatim from the audit, binding at mint review

| # | principle |
|---|---|
| **N1** | Two requirements tagged at the same `file:line` must either be split onto distinct anchors or declare their relation. |
| **N2** | A HAZARD- id names the FAILURE it forbids, never merely restating the subject it guards. |
| **N3** | An umbrella seam declares its leaves; taggers cite the leaf. |
| **N4** | Siblings splitting one subject along an axis must both name the axis, in the same position. |
| **N5** | Requirements governed by the same ADR decision must differ in the id or in the title's first clause. |
| **N6** | Do NOT rename numbered legacy ids as a confusability remedy. |

(Until the Proposal 0 relation fields exist in the CLI, N1's "declare their relation" and N3's
"declares its leaves" are satisfied in title prose — the lint will convert them later.)

## Proposal 0 (machine-readable relations) — ACCEPTED, flagship

Shape decisions (mine to make, made here):

1. **Field shape** — per-requirement keys in `traceable-reqs.toml`:
   - `covers = ["REQ-…", …]` — umbrella seam → its leaves. Directional, declared on the umbrella.
   - `twin_of = "REQ-…"` — hazard ↔ positive twin. Declared on the HAZARD side only; tooling
     mirrors the inverse. One value, not a list — a hazard with two twins is two hazards.
   - `distinguish_from = ["REQ-…", …]` — "you may want that instead". Declared on either side;
     tooling treats it symmetric. Catch-all for pairs that are neither cover nor twin.
2. **Where it's built** — traceable-reqs CLI (I have repo admin). Target **v0.3.0** (v0.2.0 owns
   the [[groups]] schema; relations must compose with groups, not collide).
   - `check`: dangling relation target = exit 1. Self-relation = exit 1. `covers` cycles = exit 1.
   - Surfacing: `traceable-reqs req <id>` prints declared + mirrored relations. "Tag time" in the
     proposal's sense is approximated by lint + this verb — the CLI cannot intercept comment
     authoring in an editor.
   - **Lint (accepted as proposed)**: a requirement whose title prose names another `REQ-` id with
     no declared relation to it = warning. This is the ratchet that converts future prose into
     declarations.
3. **Seeding** — from the 39 cross-referenced ≥50 pairs (seed list in her doc). Typing each
   relation (covers vs twin vs distinguish) is judgment work: post-release pass, owner doyle.
4. Banked instrument note travels with enactment: 361/631 reqs lack doc stage (id+title-only
   scoring where cross-scope confusion is worst) — relations partially compensate, not fully.

## Same-anchor 14 + clusters — DEFERRED to post-release tranche, with standing constraints

- Umbrella cases (`REQ-HAZARD-RC-ATTACH-TRUTH` ×3 leaves, `REQ-HAZARD-CONTROLLER-LEASE`,
  `REQ-MSG-DELIVERY-AXES`): `covers` declaration FIRST; the suffix renames are cosmetic on top and
  ride only if the tranche is cheap.
- Renames: N6 is binding — **no numbered legacy id is renamed as a confusability remedy**
  (`REQ-RC-1`, `REQ-DAEMON-2`, `REQ-UPD-3` stay). Anchor-collided numbered ids get anchor splits.
- Anchor splits (RC-1/CROSS-NODE-ATTACH, ENDPOINT-UNBOUND-ATTACH/RC-ATTACH-ONLINE-RACE,
  DAEMON-2/BROKER-PROCESS-ISOLATION): accepted in principle; each split must keep the tag on or
  immediately above real evidence (TRACEABILITY rule 1), never a synthetic anchor.
- `REQ-RC-IDMARKER-DISABLE` (D15): flag noted — supersede-vs-rename decision deferred until the
  tranche; do not rename ahead of that call.

## Follow-up pass on the 34 post-snapshot mints — ACCEPTED

N1–N6 applied at mint review from now on (composes with rule 7 scope-at-mint: a new REQ joins a
[[groups]] scope AND passes the naming principles in its minting commit). Registry pass over the
34 existing post-snapshot mints: owner doyle, post-release.

## Explicitly ratified non-actions

Her "deliberately NOT proposed" list is ratified as binding: no numbered-id renames for
confusability, nothing keyed on requiredStages, no title-opening rewrites, **no merges**.
