A claim and its round record do not survive a builder identity replacement — the fork is the reason, and the fix has three shapes #317
Replies: 6 comments
Converged — escalate, and the ask is now in canonical formThis thread was opened by triage as an escalation and then left without the shape the escalation contract requires, which is the one thing a decider should not have to reconstruct. Recording the outcome and what changed. Outcome: escalate. The decision is @danmt's — option C changes the permission story and every repo's branch flow, which is org policy, and LABELS.md makes org policy a hard block by construction. Triage does not pick this one. What was missing. The body carried the substance — three exhaustive, mutually exclusive options, triage's recommendation, and the fact that nothing waits on it — but not the fixed field labels that BUILDER.md's ruling ask specifies, and no No One thing @danmt can unblock in a word. Option A — the written handover procedure — is separable from the choice between B and C, and is fully specifiable today from the measured #281 → #288 recovery in the body. Triage will mint it on request. It is deliberately not minted pre-emptively: an issue enters a release by decision and not by triage's default, and minting A would read as the decision having been made. Triage, 2026-08-03. |
Both issues this ask's recommendation is conditioned on were closed an hour before I posted it — and the condition it names is now a scheduled releaseMy escalation an hour ago put the ruling in canonical form and recommended "A now, C if #291's CPU swap is really the road." That conditional points at an issue that was already closed when I wrote it, and the answer to the condition is now on the board. Correcting it here rather than leaving a decider to discover it. Read from the issues' timelines: #291 closed What that does to the questions, one by oneQ1 — is the class expected to recur? The body argued it becomes a lifecycle event if #291's droid model is really the road. The roadmap answers that it is, and dates it: #333's own row for #291 reads "one droid per role, one room per droid, an identity that survives the CPU swap." So the CPU swap is not a hypothetical this ask has to guess at — it is a declared Q2 — is the fork model load-bearing? Untouched. Nothing on the roadmap names branch hosting, permissions, or the fork, and option C is still an org-policy decision. Q3 — what must actually survive? Now partly pre-empted, and by a different window than option B would have sat in. #335 ( What this does to the recommendation, and what it does notThe block stands and the options are unchanged. What is now visible, and was not when the ask was posted: B has a natural home — #335's restore manifest and #333's identity-survives-the-CPU-swap work are the two places an engine-side handover verb would live, in windows that already exist. So the honest shape of the ruling today is A now, and B or C as a decision about which of two scheduled arcs absorbs it — rather than a choice between three unhomed shapes. That does not change what the decision costs, and it does not make it triage's. A is still separable and still unminted. Fully specifiable from the measured #281 → #288 recovery in the body, minted on one word from @danmt, and deliberately not minted pre-emptively. Outcome unchanged: escalate, waiting on @danmtNo Triage, 2026-08-03. |
The issue this ask's recommendation turns on is itself under a live ruling ask now — same decider, and the two answers interactOne delta since my comment of 2026-08-03
The window in that sentence is now contested. At What that does to this thread's three questions
Why this is worth a comment rather than a footnote: both asks are addressed to @danmt, and answering this one A now, C if the CPU swap is really the road while answering that one B would leave the CPU-swap road one window later than the sentence this thread's recommendation leans on. Neither answer is wrong; they are just easier to give together than apart. Outcome unchanged: escalate, waiting on @danmtAnd the wait has a date, which it did not have stated before. This ask carries no Nothing is waiting on this thread. Re-derived at this write by running Triage, 2026-08-04. |
The 7-day return — and Q1 gained a second road to recurrence that does not wait on #338's rulingThis is the return my comment of 2026-08-04 1. The load-bearing fact, re-measured — the fork model is intactThe cause this thread names is fork ownership, not identity in the abstract. Measured over the last 40 pull requests on this repository, open and merged, by
Both PRs open right now are the same shape — #450 at And the class has not recurred by incident. No identity replacement has happened since 2026-08-02; the 38m 39s in the table above is still the only measurement this thread has. That is the honest reading of the quiet: nothing has forced the decision, which is precisely why it is still open eight days later. 2. What actually moved — #442, minted 2026-08-09My 2026-08-03 answer to Q1 — is the class expected to recur? rested entirely on #291's CPU swap, and my last comment then had to weaken it to "a declared deliverable, in a window currently under ruling" when #291's window became contested. It no longer has to rest there. #442 (
Re-read from #335's body at this write rather than quoted from my own earlier comment, that manifest is "what must be exported for a faithful restore (identity, claims, working memory, ledgers)" — Q3's list, near enough verbatim. So Q1 now has two independent roads to yes, and they do not share a decider. One is #291's CPU swap under a stable chair, whose window is what #338's ruling ask is about. The other is #442, which nobody has contested: once a box is destroyed at the end of every completed duty, a claim and its round record surviving the disappearance of the thing that held them stops being an incident shape and becomes the normal path, executed many times a day. What #338's ruling still moves is the date, not the answer. 3. What #442 does not do — and it is the half this thread is actually aboutA restore manifest can carry a claim, a ledger and a working memory across a box boundary. It cannot make an incoming identity able to push to an outgoing identity's fork. #442 changes what happens when a box dies; this thread is about what happens when the account holding the branch is replaced, and those are different boundaries that happen to look alike. A member restored on a fresh box under the same identity finds its branch exactly where it left it. A member restored under a new identity finds it unreachable, in the same way #281 was. So: Q2 is untouched by any of this and remains the question that decides the other two. If the fork model is not load-bearing, option 3 removes both boundaries at once and Q1's date stops mattering. If it is, then 4. The sibling ask, and nothing waiting on this thread#338's ask — which epic owns #291, Nothing on the board is held by this thread, and this time the population says so rather than an inspection. The open Outcome unchanged: escalate, waiting on @danmt@danmt — the ask is the block at the top of this thread, unchanged: A, B, or C, with triage's read still A now, C if the CPU swap is really the road — and after §2, "if the CPU swap is really the road" is a weaker condition than it was, because #442 gets to the same recurrence without it. No A is still separable, still fully specifiable today from the #281 → #288 recovery measured in the body, and still unminted — one word from you mints it, and it pre-empts neither B nor C. It stays unminted rather than slipped in, because an issue enters a release by decision and not by triage's default. Triage, 2026-08-10. |
The 7-day return — the exposure is live right now, on two other boards, and a login is about to become configuration in threeThis is the return my comment of 2026-08-10 1. The load-bearing fact, re-measured — and this time at full-history scope, which corrects one cell of my last tableThe last-40-pull-request window I measured on 2026-08-10 returns the identical split today —
The Note the first row while it is on screen: even triage's own 44 pull requests live on a fork. The fork model is not a builder convention, it is how every identity in this fleet has ever opened work. 2. What is genuinely new: the exposure is four pull requests wide at this moment, and none of it is on this boardMy last comment read the quiet on this repository as "nothing has forced the decision." That reading was right about crew and would be wrong about the fleet today, so it is re-scoped rather than repeated. crew's board has zero open pull requests and
Four in-flight branches, four forks, zero on an org repository — the last of them touched at And the class still has not recurred by incident. No new builder login has appeared: the newest 40 heads here are 3. New for Q3 — a builder login is about to become configuration in three repositories#458 was minted on this board 2026-08-16, transcribing @danmt's ruling on ceremony#435 — option A, taken across the fleet: a per-author When those three land, And the reason those rows exist is this thread's own cause, arriving in a second place. #458 states the mechanism plainly: "The identity that owns the branch cannot rerun its own head — a fork PR's run lives in the base repository and rerunning it needs 4. A retraction landed on #442, and it does not reach §2 of my last commentAnyone arriving at #442 — the second road to recurrence in my 2026-08-10 §2 — now meets a retraction posted
So Q1 still has two independent roads to yes, and #338's ruling still moves the date rather than the answer. 5. The sibling ask, and nothing waiting on this thread#338's ask — which epic owns #291, Nothing on the board is held by this thread, measured rather than inspected. Running
This thread appears in none of them, and every live term is the No Outcome unchanged: escalate, waiting on @danmt@danmt — the ask is the block at the top of this thread, unchanged: A (written handover procedure), B (an engine verb), or C (branches live on the org repo). Triage's read is still A now, C if the CPU swap is really the road — and §3 strengthens the second half of that, because C now dissolves two fork-ownership walls rather than one. A is still separable, still fully specifiable today from the measured #281 → #288 recovery in the body, and still unminted. One correction to how I put that last time: "one word from you mints it" was asserted, and it is now demonstrated — #458 is the worked example of a non-member issue minted during a standing release window, naming #327 as its blocker and adding nothing to the gate. So the Absent real activity, triage returns on 2026-08-24. Triage, 2026-08-17. |
The return, 8 days late — §3's prediction is now fact, and the premise that made it cheap on crew has flippedTriage 2026-09-01. This is the return my comment of 2026-08-17 promised for 2026-08-24. It is eight days overdue, which is dealt with at the foot of this comment rather than passed over. Everything below is re-measured at Still no reply of any kind on this page since the escalation of 2026-08-03. Every comment here is triage's. 1. §3 predicted a thing; the thing happened. All three issues are closedLast time this section read "a builder login is about to become configuration in three repositories." It has:
Read from the tree rather than from the closes — So Q3 — what must actually survive — now has a concrete answer it did not have, and it is one #335's restore manifest still does not cover. That manifest enumerates identity, claims, working memory and ledgers, all of which are state. These two rows are not state: they are a config round in three repositories that a manifest cannot carry and a restore cannot perform. Last time that was a forecast about Q3's shape; it is now a measurable gap with a file and a line number. 2. The premise that made #458 cheap on crew is false now, and this is the biggest delta on the page§3 closed with a hedge: "on crew the cost is deferred (this board has no Both halves of that hedge are now false on crew. Measured:
So the fork-ownership wall this thread names is no longer deferred here; it is instrumented here, and #574 — 3. The exposure is wider than last time, and crew is no longer the quiet boardLast time: four in-flight fork branches, all on sibling boards, crew with zero open PRs and
Five in flight, five forks, zero on an org repository — and two of them are on this board, which had none last time. If either identity were replaced right now that is five #281-shaped recoveries, two of them here. And the class still has not recurred by incident. Same two builder logins, no new one has appeared, the 2026-08-02 replacement is still the sole instance and its 38m 39s is still this thread's only measurement. What has changed is only the standing exposure, and it is now five wide. 4. Nothing on the board is held by this thread — re-measured, not assumedThe board is transformed since last time: 51 open (was 26) — 18 Running the shipped 5. Why this is eight days late, and the measurement that says re-promising alone will not fix itThis is the fourth consecutive recorded miss on this family of returns: #229, #269 and #338 promised 2026-08-23, this one 2026-08-24, and all four were found overdue and unhonoured on 08-27, 08-29 and 08-31 before today. Recorded rather than quietly re-dated. And a measurement worth having, taken because "the human is absent" is the premise most likely to be wrong and least likely to be checked. It is wrong, and not in the direction that flatters the nudging:
So the decider is present, is engaging daily, and is engaging on issues. These four asks are long-running and triage-authored, and have drawn no reply in 29 days. That is not an inference about intent and I am not offering one — it is the surface statistic, and it says a fifth identically-shaped nudge on this surface is the thing that has already failed four times. Triage is not changing the outcome or picking anything on the strength of it: nothing on the board is held, no rung fires, and the decision is still yours. It is reported because it is the one fact about this thread that the thread itself cannot show. Outcome unchanged: escalate, waiting on @danmt@danmt — the ask is the block at the top of this thread, unchanged: A (a written handover procedure), B (an engine verb), or C (branches live on the org repo). Triage's read is still A now, C if the CPU swap is really the road, and §2 above is the strongest evidence C has yet had — the wall it dissolves is now live on this board with an issue waiting on it. A is still separable, still fully specifiable today from the measured #281 → #288 recovery in the body, and still unminted. It stays unminted rather than slipped in, because an issue enters a release by decision and not by triage's default. One line answers this and one line parks it. If you park it, triage stops nudging until you unpark it. Absent either, triage returns on 2026-09-08. Triage, 2026-09-01. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
A, B and C are options 1, 2 and 3 in "Why this is a discussion and not an issue" below, in that order; the block above is the canonical form the ruling contract requires and the prose below is unchanged.
A is separable and is not held by this ask. Triage will mint it on one word from @danmt — the procedure is fully specifiable today from the #281 → #288 recovery measured below, and it does not pre-empt B or C. It is left unminted rather than slipped in, because an issue enters a release by decision and not by triage's default.
Opened by triage 2026-08-03 from @andriujoseba's fleet-intel finding set on #290 — finding 4 of six. It is the one finding in that set that is real, measured, and not mintable as an issue today, because its fix is a design choice nobody has made rather than a defect with a known repair. Per TRIAGE.md, an issue that carries an open question just moves triage's job onto the builder, so it comes here instead.
What happened, measured
On 2026-08-02 the codex builder's identity was replaced mid-run. The cost, from the report's hand-touch ledger:
38m 16s, which measured from the handover comment at11:35:10Z, not from the draft the label named)The cause is not "identity" in the abstract — it is fork ownership
Verified against both PRs rather than inferred:
codex-bot-andresmgsl:build/243-resume-stranded-pr, opened09:57:26Z, closed11:35:13Z.andriujoseba:fix/243-resume-stranded-pr, opened11:34:47Z, merged12:13:26Z.The branch lived on the outgoing identity's fork. The incoming identity cannot push to another account's fork, so continuing #281 was not something the fleet declined to do — it was structurally unavailable. Everything that was lost followed from that one fact: the diff, the round's verdicts, the review conversation, and the
claimedstate on #243, each reconstructed by hand.@andriujoseba's closing comment on #281 is the honest record of it: "Superseded by #288 after the builder identity changed mid-run … Closing this PR keeps #243 attached to one active deliverable."
Why this is a discussion and not an issue
The end state is easy to state — a claim, its branch and its round record survive the replacement of the identity holding them — and there are at least three ways to get there, with genuinely different costs. Picking one is the decision this thread is for.
The questions — @danmt, they are yours
Q2 is the one that decides the other two, and it is the cheap one: if the fork model is not
load-bearing, option 3 dissolves this class instead of managing it and Q1 stops mattering.
Named here rather than left open to the room, because this thread's siblings all name a decider
and an ask with no addressee is the zombie discussion TRIAGE.md
warns about. Triage's own read, offered rather than taken: option 1 today, option 3 if #291's
CPU swap is really the road — a written handover is cheap enough to be worth having whatever
the answer is, and engine support (option 2) is the one to build last, not first.
Note the shape this is not: #296's ring 1 already lists orphaned claims as pathology the medic detects and contains. Detecting the orphan is not the same as being able to transfer it, and nothing on the board today owns the transfer. #291 rules identity migration explicitly out as a motivation for the droid model, which is right for that issue and leaves this unowned.
An answer here becomes an issue through triage in the usual way. Nothing waits on it: #243's own fix landed in
0.1.1, and the recovery cost is already on the record in #290's report.All reactions