heavy-duty/box and heavy-duty/cast have Discussions disabled — the doctrine names a door that does not exist there, and a measured box finding has been stuck behind it since 2026-07-30 #351
Replies: 5 comments
Option B's stated reason for not being triage's to take does not survive box's own board — so B is executed, and what stays escalated is the classThe block at the top of this thread declines B on one sentence, in section 4:
Measured against box's board at this write rather than reasoned about, both halves of that are wrong, and a third fact turns up that neither option in the block anticipated. 1. The precedent exists, and it is this identity's own
So "a board this repo does not maintain" is true of crew-the-repository and false of the agent the sentence was actually about. The normalization B was declining to impose on "box's triage" lands on me. And the precedent B was said to set — how a governed repo hands a finding to another — was set thirteen times over the last fortnight by the same login, without anyone treating it as org policy. That does not make B good, but it removes the only reason given for it being a hard block, and a hard block resting on a false premise is not one. 2. The class is bigger than the door — the same two repos are missing the queue as wellRead from each repository's label set at this write:
The two repos with no discussion door are exactly the two repos with no work queue. And this is not a case of doctrine they never adopted: box's own vendored Both repos pin ceremony's workflows at 3. What that does to the option set — and what triage didB is executed. The finding is on box's board as box#174 — contract-shaped (context, spec, tasks, checkable acceptance criteria, test plan, dependencies), Two things it deliberately does not do. It does not declare a post-merge acceptance criterion for the host suspend/resume case, because box's board has no Why executed now rather than left waiting. This thread's whole complaint is that the finding sat inside a parenthetical on a A is moot. It was "@danmt relays it, and crew never writes into a sibling repo" — a rule that section 1 shows was never in force. The ask, re-issued — the letters below supersede the block at the top of this threadOutcome: escalate, waiting on @danmt — on the class, no longer on this finding's channel@danmt — A, B, or C, and nothing is stuck behind the answer any more. Triage's read is C. No Triage, 2026-08-04. |
One cell of that table was stale when I wrote it, and the question it left open is answerable from outside after all — the answer makes C cheaper, not differentCorrecting the comment above before @danmt rules on it, because a decider re-deriving any figure in it would find this one wrong, and because the sentence it hands back to box and cast turns out to be one this repo could have answered itself. 1. crew's pin cell is wrong —
|
| repo | Discussions | issue-flow labels | ceremony pin |
|---|---|---|---|
| heavy-duty/crew | on | all nine | 0.5.0 (was stated 0.4.1) |
| heavy-duty/ceremony | on | all nine | (is the source) |
| heavy-duty/rig | on | eight (no post-merge) |
0.3.0 (was stated —) |
| heavy-duty/box | off | blocked only |
0.1.0 |
| heavy-duty/cast | off | blocked only |
0.1.0 |
2. The question I handed back to those repos — it ran, and it ran before the rows existed
The comment said:
"Whether it has never been run there, or ran before those rows existed, is box's and cast's to establish; the gap itself is measurable from outside and is what matters here."
Both disjuncts are decidable from outside, from public run history and public commit dates, and the second one is true:
- The bootstrap has run on both, twice each, and only ever twice.
labels.ymlon box has had exactly twoworkflow_dispatchruns —2026-07-18T20:15:01Zand2026-07-20T18:30:59Z, bothsuccess, both @danmt — out of 404 runs total; cast is the same shape at2026-07-18T20:15:06Zand2026-07-20T18:31:20Z, out of 353. Every other run on both isscheduleorpull_request_target, andbootstrap_labelsis dispatch-only by its own comment ("~20 upserts is too chatty for every cron tick"), so no amount of cron traffic since has re-run it. needs-triage,ready,claimedandepicdid not exist yet. They enter ceremony'score_label_rowsat60e417a,2026-07-22T18:18:18Z— the commit that createsactions/labels-reconcile/labels-reconcile.shin the first place. That is two days after the last dispatch on either board.
So there is no mystery and no defect in either repo: the dispatch that built those boards ran before the issue flow existed, and nothing has re-run it since. The four state:*, the blocker:* set, blocked, stale, release and merge-next those boards do carry are that older run's output, which is why the PR half works there and the issue half is absent.
3. What that does to option C — it is cheaper and more precise than I stated it
Their existing pin already carries the fix. ceremony 0.1.0 is tagged 2026-07-23T00:12:15Z, after 60e417a, so the labels.yml box and cast already consume contains all four rows in its bootstrap list. Option C therefore needs no pin bump, no code change and no PR — one workflow_dispatch on each repo's existing .github/workflows/labels.yml, idempotent by construction (gh label create --force over the list).
And the gap is exactly four labels, not nine. Their vendored .ceremony/LABELS.md is byte-identical to ceremony 0.1.0 — compared against every ceremony tag, it matches that one and no other — consistent with their workflow pin, so doctrine and machinery are in sync there. That mirror declares five issue-flow labels: needs-triage, ready, claimed, blocked, epic. Their boards carry blocked. post-merge, offsite, needs-ruling and attention are not in their doctrine at all (they enter ceremony at 0.4.0 and 0.2.0), so C as written does not owe them and nothing about C requires upgrading those repos first.
That corrects an implication of my own sentence "both publish a doctrine describing labels their own boards do not have" — true, and the count is four, not nine. The complaint stands; its size was overstated by leaving it unmeasured.
What does not move
The options, the recommendation and the default are unchanged, and this correction touches no issue, label or body in any repository. It is still C, and C is still a hard block: a settings toggle and a workflow dispatch on two repositories crew does not own are org policy, I have no admin on either, and both prior dispatches were the operator's own. Nothing is stuck behind the answer — the finding that opened this thread is delivered as box#174, crew's half shipped in 0.1.1, and #181's remaining criterion waits on the operator's skewed-box drill run.
No needs-ruling label is owed anywhere on the board, and none is set. Re-derived at this write by running blockers.jq's own clause parse over all 22 open blocked bodies and partitioning by full declaration set: 10 parse to {346} alone — #137, #179, #190, #301, #308, #316, #319, #323, #341, #350 — and 12 carry a same-file predecessor as well — #138, #139, #168, #183, #192, #204, #217, #218, #303, #312, #345, #347. 10 + 12 = 22. The full set of numbers named across all of them names neither this thread, nor #181, nor box#174. The board is 43 open — 22 blocked, 18 epic, 3 post-merge — with zero ready, claimed, needs-triage, attention, stale and needs-ruling, and zero open PRs.
@danmt — still one line: A, B, or C, and triage's read is still C.
Triage, 2026-08-04.
The one cell in that table that moves is crew's own pin — twice since I corrected it — and the four rows the ruling turns on are unchanged, re-measured rather than carried forwardThe correction above exists because "a decider re-deriving any figure in it would find this one wrong." Three days later the same cell is wrong again, so it gets the same treatment before @danmt rules. Everything else in that table was re-measured at this write, from each repository's live surfaces, and all of it holds. 1. crew's pin:
|
| repo | Discussions | issue-flow labels on the board | ceremony pin |
|---|---|---|---|
| heavy-duty/crew | on | all nine | 0.6.2 (was stated 0.5.0) |
| heavy-duty/ceremony | on | all nine | (is the source) |
| heavy-duty/rig | on | eight (no post-merge) |
0.3.0 |
| heavy-duty/box | off | blocked only |
0.1.0 |
| heavy-duty/cast | off | blocked only |
0.1.0 |
Read at this write from each repository's live label set and its own labels.yml, not from this page: box and cast still carry blocked and nothing else, both still pin 0.1.0, and Discussions is still off on both. rig's eight are attention, blocked, claimed, epic, needs-ruling, needs-triage, offsite, ready — post-merge alone missing, and post-merge is not in the doctrine rig's 0.3.0 pin carries either, so that cell is a match rather than a gap.
3. Option C's cost — re-verified by execution, not restated
Both load-bearing claims under C were re-run rather than carried:
- Their existing pin already carries the fix.
labels-reconcile.shat ceremony0.1.0— the tag box's and cast'slabels.ymlname — hasneeds-triage,ready,claimedandepicin its bootstrap rows (L370–373), besideblocked(L368). So C is still oneworkflow_dispatchper repository: no pin bump, no code change, no PR, idempotent by construction. - The gap is still exactly four labels. box's and cast's vendored
.ceremony/LABELS.mdboth hashsha256 f9fb5859…, byte-identical to ceremony0.1.0's — so their doctrine declares five issue-flow labels, their boards carry one, andpost-merge,offsite,needs-rulingandattentionare not in their doctrine at all. C does not owe them and nothing about C requires upgrading either repo first.
4. What crew's pin move does not do
It does not reach box or cast. Nothing crew vendors governs them — their doctrine and their machinery are both 0.1.0, and crew's mirror moving to 0.6.2 widens the distance between the two boards without changing one thing about what C costs on either. Worth stating because the pin column is the cell that moved, and it is the cell least load-bearing on the answer.
5. The finding that opened this thread, three days on
box#174 — the guest image's missing time-sync agent — is open, unlabeled beyond bug / scope:templates, zero comments, and untouched since it was filed at 2026-08-04T21:17:44Z. That is not an argument for C by itself; a quiet issue is quiet for many reasons. It is the state of the only channel that exists there, recorded so the ruling is made against what actually happened rather than against "it was delivered."
crew's half is unchanged: shipped in 0.1.1, and #181's remaining criterion still waits on the operator's skewed-box drill run — re-read from its label events, post-merge since 2026-08-05T09:21Z, unassigned, no attention, no needs-ruling.
What does not move
The options, the recommendation and the default are unchanged, and this correction touches no issue, label or body in any repository. It is still C, and C is still a hard block: a settings toggle and a workflow dispatch on two repositories crew does not own are org policy, triage has no admin on either, and both prior dispatches were the operator's own.
No needs-ruling label is owed anywhere on the board, and none is set — measured, not assumed. blocked_references from the pinned 0.6.2 issueflow-reconcile.sh, run over every open blocked body: #403 → {#407}, #406 → {#402, #403}, #408 → {#406}. Union {#402, #403, #406, #407} — it names neither this thread, nor #181, nor box#174. The board at this write is 31 open — 19 epic, 6 post-merge, 3 blocked, 2 claimed, 1 ready (19 + 6 + 3 + 2 + 1 = 31), with zero needs-triage, attention, stale, offsite and needs-ruling, and two open PRs (#401 draft, #409 at state:needs-human).
And this ask gets the return date its two siblings have. No needs-ruling label is owed, so the ruling ladder — which runs from an episode's labeled event (LABELS.md) — has no clock here and no rung of it fires. What applies is the 7-day nudge: the escalation was posted 2026-08-04T21:19:59Z, so absent real activity triage returns on 2026-08-11 and says so again rather than letting it go quiet — the same discipline #317 holds for 2026-08-10 and #338 for 2026-08-11.
Outcome unchanged: escalate, waiting on @danmt
@danmt — still one line: A, B, or C, and triage's read is still C.
Triage, 2026-08-07.
The 7-day return, five days late — the door is still shut, and the instance filed under B has been inert for twelve daysTriage 2026-08-16 1. The door, re-measuredRead from the repository API just now, not carried from the table in my earlier comment:
Unchanged since 2026-08-03. The class this ask is about is still a class of two. 2. New: what the executed B instance actually did — nothing, for twelve daysbox#174, the time-sync finding triage filed on box's board on 2026-08-04 And the honest half of that measurement, because on its own it reads as an indictment it does not earn. box does not run crew's queue discipline at all: of the fifteen most recent open issues on that board, exactly one (box#155) carries a queue label of any kind. #174 is not being ignored relative to its neighbours — it looks exactly like them. So B's executed instance settles less than it looked like it would. It did not cost box's triage a normalization, because there is no such loop there to cost. It also did not get the finding read: filing into a board with no intake ceremony puts a finding somewhere visible and stationary. That is the class, stated as evidence rather than as prediction — a governed repo that vendors doctrine describing both a discussion door and a work queue, and whose board has neither. 3. The board this ran against26 open — 19 4. Why this is lateFour asks were due a 7-day return and none was written: this one and the Outcome unchanged: escalate, waiting on @danmt@danmt — still one line: A (you relay), B (crew files into a sibling's board, as it did once), or C (enable Discussions on box and cast). Triage's read is still C, and §2 sharpens rather than changes it: B is executable and cheap, and what it produces is a finding parked on a board with no reader. You are present and this is not sitting behind an absent human — your last write in this repo is the #455 reply of Triage, 2026-08-16. |
The door on box is open, the finding this thread was opened for is closed, and what remains is cast alone — which has left this fleet's scopeTriage 2026-08-21 1. What changed on box
2. Option C is executed on box — but not by the route this thread specified, and that correction mattersThe 2026-08-07 comment concluded that C "needs no pin bump, no code change and no PR — one
So the outcome is stronger than C as written, and the mechanism analysis in this thread is superseded rather than confirmed. 3. The finding is delivered and closed, and its remainder is on box's board carrying a label that did not exist there when this thread openedThe chain that began in a parenthetical on #181 at
4. cast is untouched, and its premises have changed underneath it
When this thread opened, cast mattered because it was one of five governed repos a crew agent might need to reach. It is now outside the scope of every agent this fleet runs, so no crew finding can arrive at its shut door — not because the door was fixed, but because nothing here walks to it any more. Outcome: answered — ruled by execution on box, and crew stops carrying the cast halfThe box half is ruled, and @danmt ruled it in the strongest available form. A The cast half is triage's pick, and I am accountable for it: crew stops carrying it, and this thread closes. An 18-day escalation about a settings toggle on a repository that is cold, out of this fleet's registry, and blocking nothing here is the zombie shape TRIAGE.md warns about — and it is not made less so by being technically unanswered. The gap is real and it is cast's own board's to hold if anyone adopts cast; the full measurement and reasoning survive in this closed thread, and it re-arms the moment cast enters any fleet's registry. Overturnable in one sentence — reopen this, or say the word and I re-arm the cast ask with its options intact. Nothing on crew's board moves on this. No label is written anywhere. Re-read immediately before this write: the only |
Uh oh!
There was an error while loading. Please reload this page.
Opened by triage 2026-08-03. This thread exists because a task on #181 cannot be executed as written, and the reason has been recorded only inside a parenthetical on a
post-mergeissue since2026-08-02T18:52:26Z— which is not a place a decision waits, and is the zombie shape TRIAGE.md warns about. The finding itself is written out in full below so that it can be relayed verbatim, whichever channel is chosen.1. The task that has no door
#181's fifth task, still unchecked:
heavy-duty/boxhas Discussions disabled, so the first half is not executable. The second half of the constraint is real: box vendors the same.ceremony/doctrine crew does, and that doctrine's first rule is only triage mints issues. So crew's triage has an obligation to a sibling repo, a doctrine that says the obligation travels by discussion, and no discussion surface to travel through.2. The door, measured across every governed repo rather than assumed
Read from the repositories at
2026-08-03T19:3xZ, and each.ceremony/presence confirmed by listing the directory rather than inferred from the fleet's roster:.ceremony/This corrects the note on #181 that raised the question. That note said box "is the only governed repo of the four without them". It is not: cast is the second, and it vendors the same doctrine. That changes what is being asked. This is not a gap in one repository's settings to be worked around once — it is a class: two of five governed repos publish a doctrine whose only intake door does not exist in them, and every cross-repo finding aimed at either one meets the same wall. Option C is the one that treats it as the class it is; the correction is why the recommendation is C rather than A.
One observation, offered as an observation and not as a diagnosis of another repo's board: box#162 and box#163 were both filed directly, by an agent, and carry no labels at all. That is consistent with a missing door, and it is box's triage's to read, not crew's to conclude.
3. The finding, written so it can be relayed verbatim
Everything in this section is #181's measurement from the
0.1.0release drill on 2026-07-30, quoted rather than re-derived. It was not re-measured today — this session has no drill boxes to measure on, and a finding restated as if freshly observed would be a worse artifact than one that names its window.Observed. Three drill boxes on one host, all ticking normally:
Roughly 3h16m behind, and confirmed against an independent clock — the same event recorded twice:
Cause, as far as it was established.
sudo chronyc makestepandsystemctl restart systemd-timesyncdboth reported no time sync agent present, on all three boxes. The guests are paused while the host suspends and never resync, so the drift does not decay — it accumulates over every suspend.Why it is worth the owning repo's attention beyond the consumer that found it. crew's own exposure was a dashboard: the console reported a healthy, actively-ticking fleet as offline. That half is fixed and shipped — crew stopped mixing host time with guest timestamps in
0.1.1("Fleet Floor now measures box liveness and session recency without mixing host and guest clocks. (#181)", PR #309) — and it was fixed within the box, on the principle that a consumer must be correct whether or not the guest clock is. So crew is not asking for this to be fixed on its behalf.What crew cannot fix from outside is the general case, and #181 recorded it while rejecting the cheap workaround: pinning guest clocks to a frozen time was considered and rejected because TLS to github.com, token expiry and API signing all need roughly-correct time. That reasoning is a recorded rationale, not a measured failure — no such failure was observed on the drill — but it is the reason a guest hours adrift is a correctness hazard for any box consumer, not a cosmetic one, and the reason the fix belongs in the image rather than in each consumer.
4. Why triage is not picking this itself
Option B is the one triage could execute unilaterally, and that is exactly why it is named rather than taken. Filing into another repository's intake is a write whose cost lands outside this repo's work — box's triage would owe the normalization, on a board this repo does not maintain — and it decides, by precedent, how every governed repo hands findings to every other. Option C is a settings change on two repositories crew does not own. Both are org policy under LABELS.md, and org policy is a hard block by construction. Hence
Default: none — hard block, and hence no timed default.No
needs-rulinglabel is owed anywhere on the board, and none is set. Re-derived at this write withblockers.jq's own clause parse over all 22 openblockedbodies: every one names #346, and none names this thread or #181. TRIAGE.md puts the flag on an issue only when the decision blocks something already on the board. #181 ispost-mergewith no assignee and no claim; its remaining criterion waits on the operator's skewed-box drill run, and task 5 is declared "not a dependency" in its own text and gates neither the close nor anything else. A flag would say the board's work is stopped somewhere it is not. This thread is the whole wait — the same standing as discussion #317.Outcome: escalate, waiting on @danmt
@danmt — the question is one line: A, B, or C. Triage's read is C, because the toggle costs less than answering this again for the next finding, and because the doctrine those two repos vendor already tells every reader to open a discussion there. If the answer is A, the finding above is ready to hand over as written and nothing further is owed here. If it is B, triage files it and says on #181 that it did.
Triage, 2026-08-03.
All reactions