When every remaining acceptance criterion is operator-owned, does the merge wait for the operator’s evidence or does the PR merge with Refs #N? Two live cases routed opposite ways this morning
#488
|
🧭 needs-ruling — When the only acceptance criteria left are operator-owned, is the merge held until the operator's evidence lands, or does the PR hand off and merge with AnalysisWhere this came from. Discussion #486 — @cndgrr's flag that Measurement 1 — doctrine has a default route, and it is "merge". Measurement 2 — Measurement 3 — the two live cases routed differently, on purpose, within an hour. Both are open and claimed at this write.
Same axis, same morning, two deciders and two answers — and I believe both are right. That is what makes this a rule-shaped question rather than a mistake to correct. A — write the discriminator. What does a user who does nothing get? If the answer is the new behaviour, the merge waits: shipping the central claim unevidenced is the failure the criterion exists to prevent, and no
B — the route is triage's call, said out loud. Park shape 3 gains a clause: the route is decided at mint by triage, recorded in the criterion, and the builder reads it rather than deriving it. No discriminator is committed to.
C — leave it.
What none of the options touch. The classification itself — that a criterion whose evidence needs a host is operator-owned, said at mint, in the criterion — is not in question here; it is decided and minted. Nor is Collision, for whoever mints the outcome. A and B both edit Why this is a discussion and not a flag on an issue. Nothing on this board is blocked by it. The board held 0 open issues and 0 open pull requests immediately before the mint above, and that issue is complete and |
Replies: 13 comments
Re-measure,
|
Precondition on this ask's 24h promise, recorded
|
|
Note Corrected in place by triage, Re-measure,
|
| flag | surface | needs-ruling set at |
live at 23:59:22Z |
|---|---|---|---|
| crew#207 | issue | 2026-08-19T15:51:01Z |
yes — named |
| incubator#368 | issue | 2026-08-20T23:07:37Z |
yes — named |
| incubator#369 | issue | 2026-08-20T23:09:00Z |
yes — named |
| landing-site#3 | issue | 2026-08-20T20:37:29Z (re-flag) |
yes — missed |
| landing-site#24 | issue | 2026-08-20T20:37:31Z (re-flag) |
yes — missed |
| rig-templates#8 | issue | 2026-08-20T22:06:19Z (re-flag) |
yes — missed |
| — | pull request | — | none, fleet-wide |
Six issues, zero pull requests — at that tick and again at this one, re-read immediately before this edit. So #490's conclusion holds on a set half again as large as the one it was argued from, and the three asks in this class that carry no label at all (#488, #490, and any sibling on another board) are still invisible to every label:needs-ruling query, exactly as #490 says.
Two things the struck sentence got wrong beyond the count:
- "The ruling ladder's 24h and past-24h rungs are written for a PR — on an issue-borne hard block there is no merge gate, and every flag open in this fleet is issue-borne #490's own census re-measured true" is not what happened. That census names
incubator#277andincubator#338; by23:59:22Zneither carried the flag — feat(guards): the tag declares its vendorable set #277 was unlabelled at2026-08-20T20:16:47Zand Release 0.6.2 — the parked-claim ordering ships, and the doors are still the ones 0.6.0 rehearsed #338 at20:21:27Z, two seconds before it closedcompleted. Two of its four rows were gone and three rows it does not have were live. Its conclusion re-measured true; its rows did not, and I published the two as one claim. - This set is a measurement, not a standing fact. Four re-flags inside thirty-six hours. The ruling ladder's 24h and past-24h rungs are written for a PR — on an issue-borne hard block there is no merge gate, and every flag open in this fleet is issue-borne #490's table is anchored to
2026-08-20T17:0xZand owes no strike for ageing — but it is not the live set, and neither is this one by the time the rung falls. Re-take it at15:25Zrather than reading it off either comment.
Default: still none — hard block. This ask's 24h rung is still 2026-08-21T15:25Z, still behind the precondition recorded at 17:27Z that #490 is re-read immediately before any pick.
Rung reached
|
| when | who | what |
|---|---|---|
2026-08-20T12:37:31Z |
@danmt | "Let's do A" — every criterion stands; the operator's VM run gates #190's merge. This is the ruling this ask cites. |
2026-08-20T14:37:15Z |
@danmt | "what's the ruling needed? What do you need from me to unblock this?" |
2026-08-20T15:25:36Z |
— | this ask is posted, citing the 12:37Z ruling as a settled park |
2026-08-21T08:57:54Z |
@danmt | "amend this issue so we can merge the open PR and file another issue for the operator VM stuff you need" |
2026-08-21T09:35:37Z |
— | box#190 merges at 7382d473 |
2026-08-21T09:35:38Z |
— | box#174 closes completed |
The case this ask calls "park — nothing merges before the operator's VM run" merged, on-by-default, with its central claim unevidenced. The triage tick that executed the amendment says so in as many words: "No VM has yet been watched step its clock, and the fix could still be wrong on hardware."
What that does to option A — two different things, and only one is fatal
Its antecedent was dissolved, which is not a refutation. A is keyed on "when every remaining acceptance criterion is operator-owned". The amendment moved the three live-VM criteria verbatim to box#201, leaving six criteria all checkable from the PR. After that edit no remaining criterion was operator-owned, so A's antecedent never fired on the issue's final state. Read narrowly, A is untouched.
Its decision content was refuted, and that is fatal. A rests on one sentence: "shipping the central claim unevidenced is the failure the criterion exists to prevent, and no post-merge follow-up recalls a tag." box#174 is precisely that case — a time-sync fix that is on by default in every guest image, whose central claim is that a paused box reconverges — and @danmt, having first ruled the other way, chose knowingly to ship it unevidenced and track the evidence separately. His 14:37Z question is the hinge: "what do you need from me to unblock this?" is not a man looking for a rule that routes more work into his queue.
A would have made his chosen route unreachable by default, and unreachable without a flag — so nothing would have prompted him to reverse it the way he reversed himself here. That is the part I cannot pick past.
n = 2 was the ask's own stated weakness. It is now n = 1: box#180 still fits, unchanged and still post-merge — as do box#160 and box#171, which the tick names as having taken the same route. But every one of those fits A's trivial branch, off-by-default-merges, which is also exactly what C's status quo does. A's non-trivial branch now has no supporting case and one case against.
The route he took is not in the option set
It is neither "hold the merge" nor "merge with Refs #N and close post-merge":
D — relocate, don't route. When the remainder is operator-owned, amend the issue: move those criteria verbatim into their own issue that gates the release, leave a remainder that is wholly PR-checkable, and let the PR merge with
Closes #N. The evidence is neither waited on nor deferred to apost-mergetail — it becomes tracked, release-gating work carrying its own claim.
Not my invention: it is his instruction executed, and the tick records why it is not the post-merge route — "Keep Closes #174. Every remaining criterion is checkable from the PR, so Refs would be wrong here, and this issue does not take the post-merge route #180, #160 and #171 took." box#201 is ready on box's board now, carrying the three criteria verbatim and gating 0.10.0.
D also answers this ask by dissolving its premise: under D there is never a state in which every remaining criterion is operator-owned, because those are moved out before the merge is ever considered. An option that removes the question is not the same kind of answer as A, B or C, and it deserves to be ruled on as itself rather than folded into B as "triage's call".
Why the rung hardens instead of firing
BUILDER.md's ladder, re-read at main = d64b6ef:
at 12h: do not fire a stale default — re-read it against what has landed, and where doubt has appeared, make it a hard block.
That instruction is about what the re-read is for, and it does not stop applying because a later rung exists. What has landed is @danmt reversing the ruling this ask's central measurement is built on; the doubt it raises is not marginal, it is that my own recommendation is the option his most recent act argues against. Picking A now would record as triage's accountable decision an option refuted six hours earlier. Picking B or C would be picking from a set that demonstrably omits the answer — and TRIAGE.md's bar forbids carrying that into a mint: "If the spec still has an open question, the issue is not ready to exist."
Note also what the past-24h rung is for: "pick the option the builder proceeds on." Nobody proceeds on this one. The board is 0/0 and nothing anywhere is blocked by this ask.
What is unchanged
- The degraded half of the blocked-line stands, re-measured at
d64b6efthis pass:BUILDER.mdpark shape 3 L52 is still byte-unchanged ("An operator-owned remainder parks the claim and never the handoff"), andTRIAGE.mdstill holds no sentence gating a merge on an operator-owned remainder — its nearest text, L115–L117, is the independence paragraph that stops one sentence short of this question. - The question is still real and now sharper, since the fleet has a fourth route in use with nothing written about when it applies.
Default:is stillnone — hard block, with its ground restated: not merely that A and B amend published governance, but that the set is now known incomplete.- No collision edge and no window edge for whoever mints the outcome — board 0/0, zero carriers on every queue label. Re-compute at mint time, not from this comment.
@danmt — what I need
The pick is yours on a repaired set: A, B, C, or D. My recommendation moves from A to D, for one reason: it is the only option with a case behind it that you actually ruled, and it is the only one that removes the failure mode instead of routing around it. The question I cannot answer from box#174 alone is whether D was that case's answer or the fleet's rule — that is the ruling.
If D: the landing site is TRIAGE.md's acceptance-criteria bullet, as a continuation of the independence paragraph, plus the matching clause beside BUILDER.md park shape 3.
#490 is not pre-empted by this. Its own 24h rung is 2026-08-21T17:08Z. Because I have not picked here, the question it asks — whether triage may pick at all where the pick is terminal on its surface — remains entirely yours, and this comment is evidence for neither of its options. Annotated there so its standing claim about this promise is not left false.
Fleet needs-ruling census re-taken 2026-08-21T15:40:15Z, retry-safe across all eight boards (a transient 404 on box earlier in this pass would have been silently read as "no flags" — it was retried, not swallowed): 4 flags, 4 issues, 0 pull requests — crew#207, landing-site#3, landing-site#24, rig-templates#8. incubator#368 and #369 cleared since the 03:18Z re-measure. #490's conclusion holds on a third distinct row set; its rows have now turned over completely twice in 36 hours, which is why it is re-taken and never read off a comment.
Re-measure
|
| original | merged | keyword | what an untouched consumer gets | evidence moved to |
|---|---|---|---|---|
| #174 | PR #190 cfb5343 09:35:37Z |
Closes #174 |
a time-sync agent in every guest image | #201 |
| #177 | PR #203 b2c54a1 15:46:24Z |
Closes #177 |
no passwordless sudo in a newly minted agent box | #204 |
| #178 | PR #206 1c2f06b 17:15:58Z |
Closes #178 |
a 1 GiB /tmp cap and a 4 GiB swapfile in a new mint |
#207 |
| #159 | PR #209 e7014d4 22:30:21Z |
Closes #159 |
the four agent seeds deleted, --role/--size at mint |
#210 |
Every one carries Closes, never Refs, so none took the post-merge route — and #180, #160 and #171, which did take it, remain exactly what Measurement 3 said they were: off-by-default, A's trivial branch, where A and C give the same answer.
The nuance I am not eliding: #177 and #178 reach newly minted boxes only — cloud-init's users: block runs once, so an existing box keeps what it was minted with. A's test is what a consumer who does nothing gets, and a consumer who mints a box after those merges gets the new behaviour unasked. I read all four as non-trivial-branch cases; if you read the mint-time ones as trivial, the count is two, not four, and the correction still stands.
A fifth application exists ahead of its build: #215, minted 21:12:10Z and held behind #214, which is claimed with PR #217 open.
2. Who generalized it — the disclosure that matters most here
The rung comment closed: "The question I cannot answer from box#174 alone is whether D was that case's answer or the fleet's rule."
Measured from the artifacts: you ruled it once, on #174 at 08:57:54Z. The other four are mine — #204, #207, #210 and #215 were all minted by dan-claude-bot, each body citing the previous ones as the precedent for the next, and box#182's membership rows say so in as many words ("applying the #174 → #201 split shape").
So the answer to my own question is not that the fleet converged on D. It is that I turned a single instruction into a standing route on a governed board in fifteen hours, unruled, and the chain of citations makes each application look better supported than the one before it. That is not corroboration of my recommendation; it is the reason this ask needs an answer rather than more practice. Stated against my own interest, as the 22:4xZ note on #490 had to be.
3. D's costs, now measured rather than forecast
The rung comment recommended D on one ruled case and named no costs. Four applications later they are visible:
- The wait relocated; it did not disappear. Six issues — #155, DRAFT: what ceremony is for, if the engine does the coordinating — enforcement vs coordination, and the conformance contract #201, docs: explain sweep cadence and manual dispatch #204, release: cut 0.4.0 #207, fix: checks_state never grades the label machine's own runs (#208) #210, What ceremony is for, if the engine does the coordinating — enforcement vs coordination, and the conformance contract #215 — are now operator-owned and waiting on one real-host session with no date, and docs: a directive hold ends on the labels, and stale hold prose is triage's to correct #155 makes that session a
0.10.0release gate. Under C those criteria ridepost-mergetails; under A they hold four pull requests. Under D they hold the tag. - Relocation before the merge is a route; after it, it is a repair. BUILDER.md — a park is declared once and stands; a nothing-changed resumption posts nothing #178's three fresh-mint criteria were not re-scoped in time, so it closed on criteria no check on that board runs. release: cut 0.4.0 #207 exists to say so, and box#182's row records it as triage's error — mine.
- Relocated bodies rot against later merges in the same window. lib/changelog.sh + changelog-armed — the one-shape rule fails the PR that introduces the drift #159's merge deleted five seed directories that DRAFT: what ceremony is for, if the engine does the coordinating — enforcement vs coordination, and the conformance contract #201, docs: explain sweep cadence and manual dispatch #204, release: cut 0.4.0 #207 and checks_state — exclude the labels workflow's own runs from the rollup verdict (a displaced sweep sets blocker:ci-red on a green PR) #208 named, forcing a four-body correction tick at
23:0x. - A relocated issue can strand. fix: checks_state never grades the label machine's own runs (#208) #210 is
readyand explicitly not schedulable: epic Release 0.4.1 — the displacement fixes, so consumers can shed the cancelled reconcile checks #212's D7 holds its disposition until release: cut 0.4.1 #214 merges, because its criteria witness a--roleshape you ruled back out.
None of this makes D wrong. It makes D a route with a price that A, B and C's write-ups do not carry, and you should have it before choosing.
4. What genuinely changes the ask's shape: D makes A unreachable
A is keyed on "when every remaining acceptance criterion is operator-owned". Relocation dissolves that antecedent by construction — after the move, no remaining criterion is operator-owned, so A never fires. I noted this narrowly for #174 at the rung; it has now happened four times, which makes it structural rather than incidental.
So A and D are not peer options. Ruling A while relocation stays permitted leaves A decorative: any issue can be made A-proof by moving its criteria out the day before the merge, which is precisely what happened four times yesterday without anyone intending to evade a rule. If A is what you want, it needs a companion clause saying when the split is not allowed — and that clause, not A's discriminator, is the load-bearing sentence.
5. Reach, so the cost of each answer is visible
A or C reaches backwards. Both say those four merges should not have happened as they did — four commits already on box's main, one of them the whole mint path. I am not asking you to revisit them and nothing on that board is flagged or waiting on this; I am saying it out loud because a ruling that implicates shipped work should not do so silently.
B and D reach forwards only. B makes the route triage's call, said at mint. D makes relocation the route and needs §3's costs written beside it.
6. What this asks of you
Nothing new. A, B, C or D, on the ask above. My recommendation stays D, with §2 attached to it: most of D's evidence is my own conduct, and I would rather you rule against it knowing that than for it without.
If D: the landing site is unchanged — TRIAGE.md's acceptance-criteria bullet as a continuation of the independence paragraph, plus the clause beside BUILDER.md park shape 3 — and §3's four costs belong in it, particularly that relocation must precede the merge.
Default: remains none — hard block. The rung has passed and I am not picking; §2 is the reason, and it is a stronger one than the rung comment had.
#490 is not pre-empted by this comment, and no part of it is evidence for either of that ask's options. Its own census re-taken this pass across all eight governed boards, retry-safe with a known-positive control: 1 flag, 1 issue, 0 pull requests — crew#207 alone, unchanged since 22:39Z. I have written nothing on box this pass; those calls are that board's.
Re-measure
|
| clause | measured 07:2xZ |
|---|---|
| "#214 … is claimed" | closed 06:22:42Z |
| "with PR #217 open" | closed unmerged 05:01:22Z at the round cap — the ledger of six rounds, closing nothing |
| "#215 … held behind #214" | blocked → ready at 06:24:16Z, 94 seconds after that close, unaided |
The row that belongs in §1's table:
| original | merged | keyword | what an untouched consumer gets | evidence moved to |
|---|---|---|---|---|
| box#214 | PR #218 d92974b 06:22:41Z |
Closes |
box new mints blank — no rig hook, pin, stamp or seeds' installer |
box#215 |
So §1's headline is five, not four; §4's "it has now happened four times" is five; and §5's "four commits already on box's main" is five, the fifth being the mint path itself.
The round-cap detail bears on the keyword claim, not only the count. #217 carried no closing keyword and closed nothing; #218 opened seven seconds later on the same branch, head and tree, and carried Closes. One application that took two PR numbers — not two applications.
2. Classify before incrementing — what did not move
§2's disclosure is unchanged: four of the five applications are still mine. The fifth was already counted as an application at 00:49Z, as a forecast; what changed is its status, not the roster. Reading one event into two different counts is the error the 22:43Z note on #490 refused, and I am not making it here.
Two things are genuinely new:
- This is the first relocation performed before the build rather than during or after it. box#215 was minted
2026-08-21T21:12:10Z, 9h10m before the merge. §3's cost 2 drew exactly this line — "Relocation before the merge is a route; after it, it is a repair" — so this is the first clean instance of the route as D would have it written. - A deferred disposition fired and was discharged in the same tick (§3).
3. §3's costs, re-measured — one discharged, one new
Cost 1 — "six issues … waiting on one real-host session with no date" is now five. box#155, #201, #204, #207, #215. box#210 closed not_planned at 06:48:51Z.
Cost 4 — discharged, and the mechanism worked. #210 was "ready and explicitly not schedulable" pending epic box#212's D7, whose trigger was #214's merge. The trigger fired at 06:22:41Z; that board closed #210 obsolete against #215 in the same tick, dispositioning all nine of its criteria one at a time. A deferred disposition with a named trigger is not a cost D has to carry — I listed it as one, and it resolved exactly as specified.
Cost 5 — new, and it is the one that cuts against D. That same audit found two criteria carried by no issue at all — the --size resolution on the instance, and --user reaching the guest — while box#215's own ## Dependencies asserted they were already carried. That assertion was false. Only a criterion-by-criterion disposition caught it, and the two were added to #215 before the close rather than promised after it.
This is the second bookkeeping defect the route has produced — cost 2 was #178's un-rescoped criteria — and both are mine. Under A the criteria never move, so this failure mode does not exist; under D it is live and recurring. It does not make D wrong. It says that if D is ruled, the clause that lands must require a relocation to enumerate the moved criteria one at a time against the original, because twice in two days a relocation has mis-stated what it carried.
4. Where that leaves the recommendation
Still D. §4's structural argument is untouched and remains the strongest thing in this thread: relocation dissolves A's antecedent by construction, so A and D are not peer options, and ruling A without a companion clause on when the split is disallowed leaves A decorative.
But §2's disclosure now has a sharper edge, and I would rather write it than have you find it: most of D's evidence is my own conduct, and both defects that conduct has produced are bookkeeping failures inside the relocation itself. A ruling for D on this record is a ruling that the route is worth a price I have now paid twice.
5. A correction I owe on this thread's numbers — and on what I said about them elsewhere
The 00:49Z comment's closing paragraph read: "across all eight governed boards … 1 flag, 1 issue, 0 pull requests — crew#207 alone." Re-derived from the label at 07:29:16Z: 9 governed boards, 3 flags, 3 issues, 0 pull requests — crew#207, incubator#277, landing-site#3.
Worse, and it is mine: at 03:13Z I wrote on #490 that "#488 was re-checked this pass and nothing in it staled." That was wrong when I wrote it. #490's own census one minute earlier had already measured 3 flags across 9 boards — which falsified this thread's closing paragraph in the same breath. I checked #488's four-row table and its box facts and never re-read its last paragraph. I have struck that clause in place on #490 rather than posting there, so a correction belonging here does not bury that ask.
The Blocked: half holds on a sixth re-take, on a sixth distinct row set: zero PR-borne flags anywhere in the fleet, now 3/3 rather than 1/1.
Two anchors on this thread resolve nowhere, and both point at option D's provenance. Checked against the discussion's own comment ids this pass: the 00:49Z comment links the rung as discussioncomment-18107996 (the rung is 18107912), and the rung comment links my 17:27Z precondition as discussioncomment-18096711 (it is 18096639). A wrong anchor lands a reader at the top of the thread rather than erroring, so nothing announces it — and both send someone checking where D came from to the wrong place. Corrected in the link above; I have not edited the two comments, because the text around each is accurate and an in-place edit fires no notification to tell you it happened. The #490 link cited in the rung comment (18096635) is correct.
6. What this asks of you
Nothing new. A, B, C or D on the ask above; my recommendation stays D, with §3's now-five costs attached and cost 5 written into whatever lands. Default: remains none — hard block — D amends published governance for every governed repository, so this ask fires at no rung and waits for you.
Re-measure
|
|
D all the way. I'd go further and say that an issue simply cannot be for builders AND operators, its one or the other. And maybe we need that "builder-owned" and "operator-owned" maybe? The Ref thing and keeping issues open post-merge with huge walls of text is just retarded. also, we should use them as gates, if a fix needs a builder-owned and then an operator-owned then whatver the fix gates is gated by both, or even the latter only, in a graph builder-owned -> operator-owned -> gated issue. This also brings up the question, do we need an oeprator-owned action per issue? could we batch them? i guess some times but not all the time. @dan-claude-bot |
Ruling recorded and closed out by
|
Ruling recorded and closed out: B, minted as #532@danmt ruled at 1. The rule, stated so a consumer reading only this comment has itRelocations naming the same evidence surface and the same command or observation may land their operator-owned criteria on one issue, which names every originating issue and gates them all. Different surfaces never share. Four things #532 pins down that the option text left implicit, because each is a way a builder could ship B and get it wrong:
B adds no new field, which is what made it decidable at relocation time — verified against 2. The live instance, re-measured rather than carried forwardThe ask cited And the honest consequence for B: they collapse by surface, not to one. The ask said "roughly one per surface"; under D6's strict reading of "the same command" that is a smaller collapse than "one operator session, one issue" would give. Re-shaping that board is its own call and #532 touches no other repository. 3. Two things from your
|
|
§2, the builder label. I answered no new label on my own authority and said a bare yes from you is enough to trigger the mint. You have not said it, so nothing is minted. The offer stands. those two probably should have their own discussions so we can close this thread @dan-claude-bot |
Split and closed — the two residuals now have their own venues@danmt Done, in the order you asked for: the residuals moved first, so nothing lapses with the close.
Each carries the question in your words, what triage answered and on whose authority, what a yes would mint, and what silence costs. Neither is a bare repeat: both ask one thing, and #536 corrects a cost figure this thread published. The correction, because it changes the answer's price. At What this thread produced, for the record
Both issues cite this thread for their provenance in past tense, and those citations keep resolving after the close. The two that pointed here for a live question — #525's header and its D10 exclusions, and #532's Marking answered and closing. Nothing here is unspent: both rulings are built or building, and both residuals are open elsewhere with their triggers intact. Closed out by |
Split and closed — the two residuals now have their own venues
@danmt Done, in the order you asked for: the residuals moved first, so nothing lapses with the close.
15:39Zbuilderlabel — "maybe we need that 'builder-owned' and 'operator-owned' maybe?", answered no new label on triage's own authority, with a bare yes from you as the trigger to mintRefs #N+post-mergeentirely, or only for the operator-owned remainder as builtEach carries the question in your words, what triage answered and on whose authority, …