---
name: partial-milestone-golden-is-rejected-alternative
description: "A tranche/partial-milestone golden head is ADR-0050's rejected eject-and-proceed wearing a new name; the intake gate caught it at LOCKSMITH t1 2026-08-03"
metadata: 
  node_type: memory
  type: project
  originSessionId: f4e862c6-83b6-41e5-b2f2-66fcf52663ac
  modified: 2026-08-03T16:25:42.830Z
---

**2026-08-03, LOCKSMITH tranche 1** — doyle handed `golden/locksmith-t1 @28f8dd4` for golden.
I held the push. Both findings stood; doyle upheld the hold and ruled the root was his.

## The mechanism: a rejected alternative re-enters under a new noun

ADR-0050 rejects "eject-and-proceed" — shipping a batch minus a conflicting PR — with a
GENERAL rationale, **"a milestone ships whole"**, not a conflict-specific one. A head carrying
4 of the milestone's 10 greenlit requests is that same shape from a different cause. doyle:
*"I built the rejected alternative and did not notice because I called it a tranche."*

⭐⭐ **The rejection's RATIONALE, not its trigger, is what generalizes.** Search a ruling by the
shape it forbids, never by the situation that produced it. A new noun ("tranche") is exactly how
a ruled-out shape gets re-proposed without anyone re-litigating it.

Stated at its real size: ADR-0050 is not a blanket ban on sub-milestone goldens — it carves out
"an urgent fix is a golden batch of one". A PARTIAL milestone is a **third shape**: neither whole
nor a batch of one. Unruled, and shaped like the rejected one. A gater does not mint a new process
object to make his own head legal — it went to the operator, since milestone scope is an operator
greenlight and board writes go through alchemy.

## The two checks that caught it (both cheap, both nearly skipped)

1. **Greenlit-form parity against the AUTHORITATIVE set** — `gh api repos/<o>/<r>/issues/<N>/sub_issues`,
   not the milestone's comments and not `alchemy list` (greenlit alone ≠ membership; #133 was
   greenlit and NOT a member). Head carried #70/#115/#117/#134; absent were #123 + five tranche-2.
   Zero drop comments existed. A dispatch comment that pre-records a tranche split records a
   sequencing of WORK — it is **not** a statement that the milestone's golden ships without them.
2. **Release-shape, and it is UNREPAIRABLE after the run.** Head `Cargo.toml` = `0.52.0` = 
   `origin/main` = the already-PUBLISHED v0.52.0; `## [Unreleased]` empty; no bump/lockfile/
   changelog in the delta. Under [[release-standard-bump-in-pr]] the bump RIDES THE BATCH because
   there are no post-golden edits — so adding it afterwards invalidates the run. Costs two `git show`s
   and kills a whole window's worth of wrong work.

## ⭐⭐ Check FULFILMENT, not presence

I spot-checked #70 against its grill ruling rather than its commit subject: the monic-id re-key,
`LegacyMonic` + `migrate_owner` (the W5 record migration the operator's ruling required), read-time
migration, unreadable-record listing. doyle adopted this as the re-intake standard and named why:
**"checking presence and calling it discharge is how v0.46.0 shipped four requests it did not
contain."** A commit whose subject names the issue is not evidence the issue is discharged.

## ⭐ An agent outage can wear the costume of a scope decision

#123 was WIP, dispatched in tranche 1, with **no branch under any local or remote ref** — because
hertz had been unbound for hours with its lane stalled ([[ir18-lane-and-b-split-assignment]] family).
Read as scope, it looks like a deferral; read at source, it is an outage. Absence of a lane is a
fact about the FLEET before it is a fact about scope. It needs a line on the milestone either way.

Relates to [[golden-ci-strategy]], [[golden-respin-test]], [[verify-the-subject-not-just-the-measurement]],
[[report-measurement-never-issue-direction]] (I held the run — my assigned gate — and referred both
rulings to doyle rather than deciding them).
