A repo that adopts the board half and never releases has nowhere to put the pin — the pin lives in release.yml, and state repos have no release.yml #542
Replies: 7 comments
|
🧭 needs-ruling — a repository that runs the board and never releases: does it carry the Analysis — three claims in the filing above did not survive re-measurement, and the gap is narrower than its own title says@danmt — I filed this thread wearing 1. "Nowhere to put the pin" is too strong — the gap is the mirror, not the pinI read every consumer's pin this pass off What has nowhere to look is actions/docs-sync/docs-sync.sh:73 WORKFLOW=".github/workflows/release.yml"
actions/docs-sync/docs-sync.sh:107 [ -f "$WORKFLOW" ] || die "docs-sync: no $WORKFLOW — the pin lives there …"and consumers reach it from 2. There is partial prior art, and it is the argument for BThe filing said there is no prior art for board-only adoption. There is no documented class, but the shape is already live — governance and vendoring are separable in this fleet today:
3. What survived intact, and is the whole of the caseAll eleven governed boards carry 4. Workaround item 2 is partly answered by a rule that landed three hours before I filed
One pointer gap of my own: What each option costs
What this convergence does not doIt mints nothing on this board, deliberately: every option changes what would be minted, so minting now would pre-empt you, and under the standing reading of your The workaround stands meanwhile — prose |
📎 Retraction — item 4's claim about
|
| ground | commit | in 0.7.7? |
|---|---|---|
| #488 — "builder-owned or operator-owned, and never both … split where it stands" | on main |
⛔ no |
| #524 — "passes no mint door … then stop and mint nothing" | ed2effd · 2026-08-28T14:14:25Z |
⛔ no |
0.7.7 is fc6325e, cut 2026-08-27T23:40:30Z — about fourteen and a half hours before #524 merged. merge-base --is-ancestor puts neither in the tag; main's VERSION is 0.7.8-dev. At 0.7.7 the governing rule is #491's and it says the opposite: mixed ownership is legal, classified per criterion, operator marked only when every criterion is operator-owned. main's own #488 paragraph concedes the collision in the word "replaces".
infra#48 is a legitimate mixed-ownership issue at the ref that board runs at. Its criteria stay where they are, and it does not split. It now carries the same > ⚠️ note its five siblings carry, and the pass is recorded at infra#48.
The part worth your attention, because it is a class and not a slip
The 2026-08-29 passes corrected this same defect on five heavy-duty/infra surfaces — #20, #43, #47, #50, #51 — censused at #548. #48 was missed by every one of them, because its false claim was not in its body — it was here. A workaround or a finding routed upstream under TRIAGE.md's routing rule leaves a claim standing in a venue the originating board's own hygiene sweeps never read. Five of six were caught by body sweeps; the sixth needed somebody to read the citation back. If that is worth a rule, it is #548's or a successor's, not this thread's — I am not minting anything for it here, and this thread's ask is unchanged.
Unchanged by this note
The A/B/C question, the recommendation of B, the Blocked: line (infra#48 waits on nothing; the mirror half of la-familia-infra#4 alone stops), and Default: none — hard block all stand as filed. No rung of any ladder has fallen here — a discussion carries no needs-ruling label and no labeled event (#526) — so this is a correction of record on my side, not a nudge, and nothing expires against you. This thread remains the retirement owner of heavy-duty/infra's prose **Queue state:** workaround; whether 0.7.7 or main governs an unpinned board is #548's question, not this one's.
⚖️ Board-level ruling recorded — @danmt takes C on
|
heavy-duty/infra |
heavy-duty/la-familia-infra |
|
|---|---|---|
.ceremony/ |
absent (B, deferred) | 6 files + marker, at 0.7.7 |
release.yml |
absent | present, version-source: file |
VERSION / CHANGELOG.md / changelog.d/ / drills/ |
absent | present, 0.1.0-dev |
docs-sync in CI |
not wired | wired, green against the published tag |
| retirement pointer | this thread | this thread |
That is a sharper input to the ruling than the pre-build state was, and it is the reason to record it here rather than only on that board.
The recommendation above is unchanged and is still B, and I am not withdrawing it on the strength of one board's ruling. Two things the build measured are worth having on the record before you rule the class, both of which cut against C as a general answer:
- C is not free even where it works.
docs-syncneedsrelease.ymlonly for a string, and the file it justifies subscribespush: branches: [main]andtags: ["**"]on a repository with nothing to release. It is inert today becauseVERSIONcarries-dev, but it is a live door on every tag push, and the thing standing between it and a spurious release is the version stamp rather than the absence of a workflow. - The scaffolding is the larger half.
release.ymlalone is not C;changelog-armedneedsVERSION,CHANGELOG.mdand achangelog.d/marker, anddrill-recordedneedsdrills/. Ruling C for the class means every board-only repository carries a changelog and a drill doctrine for releases it will never cut. That cost belongs in the option table above, which priced C as "a release workflow … created so a mirror checker can find a string in it" — measured, it is six files and two doctrines, not one file.
If you rule B for the class, la-familia-infra reverses in one PR — delete the mirror, the release caller and the scaffolding, drop the docs-sync guard step. If you rule C, infra#48 adopts the same shape and CONTRIBUTING.md's local-exception framing there becomes doctrine. Either way this thread is what retires the divergence, so it stays open.
📐 Axis correction from the operator, and it narrows this thread rather than answering it@danmt,
This thread has been asking the wrong question of the class, and I wrote it that way. Every framing above — my title, the three options, The word "release" bundles two things this fleet keeps confusing:
So the axis that actually separates the class is publishes an artifact / does not — not releases / does not release. What this changes for the three options
The one thing that stays broken, and it is smaller than the title says
Measured against Recorded, not ruled
|
🔧 Retraction — @danmt did not rule this thread. I asked a bad question and then labelled the answer as a ruling on it.Two comments up I wrote "@danmt takes C on What actually happenedI asked @danmt to pick A, B or C for one board. They answered by describing what they wanted:
That is not a choice among A, B and C. It is a report that the board was never an instance of the question, and I should have heard it as one instead of filing it under the nearest letter. Why it is not CC is "every governed repo carries a
The class, restatedAll three options — and my title, and "Release" bundles two things: the version (a tag, So the axis that produces this thread's class is wants a version / does not — and only the second side has nowhere to put a pin. That is a strictly smaller class than "board-only", and it may have one live member:
What is left, which is narrower and mechanicalThe defect this thread found survives all of the above, and it is the only part I would still ask you to rule:
Recommendation, revised: no doctrine change for repositories that want a version — they already fit. B for repositories that want neither half. And the open mechanical question is whether the pin should keep living in a file named Blocked: still nothing. la-familia-infra#4's mirror half is built and its PR is green; that clears regardless of how this is answered, and reversing it under B would be one PR. Corrected in placela-familia-infra#7 — title, body, commit message and |
🏁 The class is empty. @danmt has removed both of its candidate members, and this thread is now answered by fact rather than by a ruling.Two facts from @danmt,
Set against the corrected axis two comments up, that leaves nothing in the class:
Every governed board in the fleet either wants a version or is going away. So the question "does a repository that runs the board and never releases carry the ⚖️ Recommend closing this thread as retired by fact, not answered. Nothing is being ruled and no doctrine changes; the fleet's shape moved out from under the question. Yours to close — I am not closing a thread that carries your The three loose ends, so closing this drops nothing1. The workaround this thread owns is retired, and not by an answer. 2. The mechanical defect stands but is now theoretical, and needs no build. 3. What this does not doIt mints nothing, here or anywhere. It rules nothing: |
📌 The one thing worth keeping from this thread is minted — #553Not option A. The hardcode stays and no fallback is built — with the class empty, that would be machinery for a case the fleet does not have. What #553 fixes is the part that actually cost something: That gap is what produced this thread, its wrong axis, option B on Minted after @danmt's This thread can close — recommended two comments up, retired by fact. #553 carries forward the only durable finding in it. |
Uh oh!
There was an error while loading. Please reload this page.
The rule, quoted at
0.7.7docs/CONSUMERS.md§ Version pinning, third bullet:And it is not only prose.
actions/docs-sync/docs-sync.sh:73at the same tag:WORKFLOW=".github/workflows/release.yml"Hardcoded, single-valued, no fallback.
The case the rule cannot express
A repository that adopts the board half and never releases anything has nowhere to put the pin.
heavy-duty/infrais a state repository. Its own README opens: "State, not code. This repo is the instance… It executes nothing." NoVERSION, noCHANGELOG.md, nochangelog.d/, no build, no artifact, nothing to tag. A release workflow there would be a file that never legitimately runs, created for oneuses:line so that a doc-mirror checker can find a string in it.It does need the board half. It is fleet-worked — triage mints here, builders build here, PRs land here — and the queue taxonomy is what that flow runs on.
What that repository looks like today, measured 2026-08-28:
.github/labels.conf, nolabeler.ymlbug,documentation,duplicate,enhancement,good first issue,help wanted,invalid,question,wontfixready,blocked,claimed,post-merge,needs-triage,epic,needs-ruling,attention,operator,offsite,release, everystate:*, everyblocker:*, everyscope:*LABELS.mdsays the defaults "are deleted at bootstrap — aquestionis a discussion, not an issue." All nine are still there, which is the cleanest single proof that no bootstrap has ever run on this repository.The visible consequence is on heavy-duty/infra#20, #26, #38, #43, #45, #46 and #47: seven open issues, none of which can carry
readyorblocked, because those labels do not exist and no fleet identity can create them ("push": false, by the design FLEET.md states — "the agents team holds the triage role, not write"). The issue-flow sweep has never run there, so nothing reconciles them either.TRIAGE.md's issue contract closes on "exactly one ofready/blocked", and on that board that line is unsatisfiable.It is a class, not one repository.
heavy-duty/la-familia-infrawas stood up this month (infra#44, re-homed to la-familia-infra#3) as the same kind of repository, and has no.github/either. Of the nine governed repos I checked, all nine that carrylabels-sweep.ymlalso carryrelease.yml; the only two without the sweep are the two state repos. There is no prior art for board-only adoption because the doctrine has no shape for it.§ On-board a fleet-worked repo does not cover it. That section solves the bootstrap-order problem — operator hand-creates six labels, builder lands the automation, operator dispatches — and it is exactly right as far as it goes. It assumes throughout that the repo will also carry a release workflow, and says nothing about a consumer for which that assumption is false.
The local workaround now in force
On heavy-duty/infra, until this is answered:
**Queue state:**line naming the label the issue would carry, in the body, with a citation to this discussion. It is a lie-shaped thing pretending to be a state machine, it is invisible to every sweep, and it is what exists instead of nothing.securitylabel that heavy-duty/infra#20 has been asking for since 2026-07-14 ("the operator will add it; I lack label-admin on this repo") is still unwritten, 45 days on.Each of those carries a link to this discussion in the body it ships in, per the half this route asks of me.
What retires the workaround
A documented way for a repository with no release workflow to carry the pin and be verified against it. Concretely, any one of:
docs-syncreading the pin from thelabels-sweep.ymlcaller whenrelease.ymlis absent — the sweep caller carries auses: heavy-duty/ceremony/.github/workflows/labels-sweep.yml@<ref>line with identical shape, so this is a fallback rather than a second pin, and the same-tag rule keeps holding;CONSUMERS.mdthat says where the pin lives for such a repo and what verifies the mirror there;.ceremony/at all, and that its agents read doctrine from ceremony directly — which would be a fine answer, and would retire the workaround just as completely, but it needs saying, because the board half is genuinely wanted there regardless.When one of those lands, heavy-duty/infra drops its prose queue-state lines and its citations of this discussion in the same PR as the pin bump that carries the fix.
What I am not asking for
Not the release ceremony in a repository with nothing to release, and not a second pin. Both make the tree worse than the workaround does.
Raised per
docs/CONSUMERS.md§ Requesting a doctrine change andTRIAGE.md's upstream-routing rule (#492), by triage on heavy-duty/infra. Quotes taken at0.7.7, the tag that board would adopt; it has no pin of its own today, which is the ask.All reactions