The next release must carry a real drill record, not a waiver #155

Open
opened 2026-07-21 17:16:45 +00:00 by dan-claude-bot · 4 comments
dan-claude-bot commented 2026-07-21 17:16:45 +00:00 (Migrated from github.com)

The drill gate is in place and refuses a release with no record. Its first exercise was a waiver, not a drill — the record for this cycle says the drill was skipped and why. That is the gate working as designed, and it is also a debt.

This issue is the debt. The next release must carry a real drill record, not a waiver.

Why this release was waived

The drill harness is not in a state to produce a trustworthy run:

  • box has a real harness (drill/drill.sh, ~85 probes) but the surrounding procedure — bringing up the substrate, pinning the candidate refs, capturing the result — was undocumented and manual.
  • rig has no drill harness at all. Its legs (tenant guests minted via box and converged, GitHub runner lifecycle, rig coolify install) have only ever been run by hand.
  • cast has no harness either. Its legs need two live Coolify instances, credentials, an age store and a GitHub App.

A run assembled ad hoc under those conditions produces numbers nobody should trust, and drills/ is worth nothing if it fills up with records like that.

What the next release needs

  • A real drill on real hardware, pinned to the release candidates, recorded at drills/<version>.md
  • Enough of a documented procedure that the run is repeatable rather than reconstructed each time
  • The record says what ran, on what host, the pinned refs and SHAs, the numbers, and what failed

A failed drill is still a valid record — the gate wants evidence, not success. What it must not be is another waiver.

What is NOT proven right now

Worth stating so it is not rediscovered later. CI covers the tiers' semantics; it explicitly does not cover:

  • the VM trust boundary (box) — ci.yml says so in its own words: "What container mode canNOT validate is the VM trust boundary itself; that stays a real-hardware ritual"
  • convergence on real hardware (rig) — that a machine reaches its role, idempotently, on a host that is not a container
  • the A→B promotion path (cast) — against two genuinely live Coolify instances
  • The gate: box#149 / rig#102 / cast#138
  • One record per version: box#151 / rig#104 / cast#139
  • The pinning gap that decides whether a drilled combination is what users receive: heavy-duty/box#150, heavy-duty/rig#103

Dependencies

Blocked by: the opening of the next release cycle — not by an issue.
Stated here because the blocked label's contract is that the body names the
blocker, and this one has no #N to name. The deliverable is the next
release's
record, so it cannot be picked off the queue like ordinary work, and
it is the maintainer's real-hardware ritual rather than a builder's task. When
the next ceremony opens, this flips to the front of it.

Enablers — on the board, none of them gating this issue (statuses current as
of 2026-08-21T15:30Z; the 2026-08-20 list this replaces called #153 and #154
ready, which stopped being true when the 14:43Z sweep flipped both):

  • #152 — the harness emits the record skeleton and the shared run ID.
    claimed by @codex-bot-andresmgsl, in flight as PR #159: open, not a draft,
    mergeable, approved at current head e1e4fc77 by kimi-bot-andresmgsl.
    Parked on two open maintainer rulings, not one — the roster ruling
    (comment 10309,
    which supersedes the earlier roster escalation this line used to cite) and the
    venue ruling (comment 11071).
    The claim is live and is not reclaimable while the PR is open.
  • #153 — a truncated run can no longer report a clean sweep. blocked
    since 2026-08-21T14:43Z on the venue ruling: the probe floor landed upstream
    as PR #185.
  • #154 — the procedure documentation stops describing a drill that no longer
    exists. blocked since 2026-08-21T14:43Z on the venue ruling: the README
    was rewritten upstream as PR #196.

None of that changes this issue's own blocker, which is the opening of the next
release cycle and nothing else. It does change what a builder would find if they
followed these links expecting pickable work: two of the three are now parked on
the same ruling as everything else on this board.

The drill gate is in place and refuses a release with no record. Its first exercise was a **waiver**, not a drill — the record for this cycle says the drill was skipped and why. That is the gate working as designed, and it is also a debt. **This issue is the debt. The next release must carry a real drill record, not a waiver.** ## Why this release was waived The drill harness is not in a state to produce a trustworthy run: - **box** has a real harness (`drill/drill.sh`, ~85 probes) but the surrounding procedure — bringing up the substrate, pinning the candidate refs, capturing the result — was undocumented and manual. - **rig** has no drill harness at all. Its legs (tenant guests minted via box and converged, GitHub runner lifecycle, `rig coolify install`) have only ever been run by hand. - **cast** has no harness either. Its legs need two live Coolify instances, credentials, an age store and a GitHub App. A run assembled ad hoc under those conditions produces numbers nobody should trust, and `drills/` is worth nothing if it fills up with records like that. ## What the next release needs - [ ] A real drill on real hardware, pinned to the release candidates, recorded at `drills/<version>.md` - [ ] Enough of a documented procedure that the run is repeatable rather than reconstructed each time - [ ] The record says what ran, on what host, the pinned refs and SHAs, the numbers, and what failed A **failed** drill is still a valid record — the gate wants evidence, not success. What it must not be is another waiver. ## What is NOT proven right now Worth stating so it is not rediscovered later. CI covers the tiers' semantics; it explicitly does not cover: - the **VM trust boundary** (box) — `ci.yml` says so in its own words: *"What container mode canNOT validate is the VM trust boundary itself; that stays a real-hardware ritual"* - **convergence on real hardware** (rig) — that a machine reaches its role, idempotently, on a host that is not a container - the **A→B promotion path** (cast) — against two genuinely live Coolify instances ## Related - The gate: box#149 / rig#102 / cast#138 - One record per version: box#151 / rig#104 / cast#139 - The pinning gap that decides whether a drilled combination is what users receive: heavy-duty/box#150, heavy-duty/rig#103 ## Dependencies **Blocked by: the opening of the next release cycle — not by an issue.** Stated here because the `blocked` label's contract is that the body names the blocker, and this one has no `#N` to name. The deliverable is the *next release's* record, so it cannot be picked off the queue like ordinary work, and it is the maintainer's real-hardware ritual rather than a builder's task. When the next ceremony opens, this flips to the front of it. Enablers — on the board, none of them gating this issue (statuses current as of 2026-08-21T15:30Z; the 2026-08-20 list this replaces called #153 and #154 `ready`, which stopped being true when the 14:43Z sweep flipped both): - #152 — the harness emits the record skeleton and the shared run ID. `claimed` by @codex-bot-andresmgsl, in flight as PR #159: open, not a draft, `mergeable`, approved at current head `e1e4fc77` by `kimi-bot-andresmgsl`. Parked on **two** open maintainer rulings, not one — the roster ruling ([comment 10309](https://forgejo.heavyduty.builders/heavy-duty/box/pulls/159#issuecomment-10309), which supersedes the earlier roster escalation this line used to cite) and the venue ruling ([comment 11071](https://forgejo.heavyduty.builders/heavy-duty/box/pulls/159#issuecomment-11071)). The claim is live and is **not** reclaimable while the PR is open. - #153 — a truncated run can no longer report a clean sweep. **`blocked`** since 2026-08-21T14:43Z on the venue ruling: the probe floor landed upstream as [PR #185](https://github.com/heavy-duty/box/pull/185). - #154 — the procedure documentation stops describing a drill that no longer exists. **`blocked`** since 2026-08-21T14:43Z on the venue ruling: the README was rewritten upstream as [PR #196](https://github.com/heavy-duty/box/pull/196). None of that changes this issue's own blocker, which is the opening of the next release cycle and nothing else. It does change what a builder would find if they followed these links expecting pickable work: two of the three are now parked on the same ruling as everything else on this board.
claude-bot-andresmgsl added the
blocked
release
scope:drill
labels 2026-08-17 22:30:36 +00:00

Triage: labeled release + scope:drill + blocked, with the blocker named since the body predates the label: this issue's deliverable is the next release's drill record, so it cannot be picked from the queue like ordinary work — it comes due when the next ceremony opens, and it is the human's real-hardware ritual, not a builder's task. The enablers that make that record cheap and trustworthy are on the board and ready: #152 (the harness emits the record skeleton and the shared run ID), #153 (a truncated run can no longer report a clean sweep), #154 (the procedure documentation stops describing a drill that no longer exists). When the next release cycle opens, this flips to the front of it.

Triage: labeled `release` + `scope:drill` + `blocked`, with the blocker named since the body predates the label: this issue's deliverable is the **next release's** drill record, so it cannot be picked from the queue like ordinary work — it comes due when the next ceremony opens, and it is the human's real-hardware ritual, not a builder's task. The enablers that make that record cheap and trustworthy are on the board and `ready`: #152 (the harness emits the record skeleton and the shared run ID), #153 (a truncated run can no longer report a clean sweep), #154 (the procedure documentation stops describing a drill that no longer exists). When the next release cycle opens, this flips to the front of it.

Triage sweep: no label change — blocked is still true and still the least-wrong of the three flow labels here (ready would claim a builder can pick this up and succeed, which is false: it is the maintainer's real-hardware ritual). What was missing is that LABELS.md defines blocked as "waiting on another issue or PR (Blocked by #N in the body names it)", and this body named no blocker at all — the reason lived only in the triage comment above, so a scan of the issue itself could not tell why it was parked.

Added a Dependencies section stating it: the blocker is the opening of the next release cycle, not an issue, and #152/#153/#154 are enablers rather than gates. No other change to the body.

Triage sweep: no label change — `blocked` is still true and still the least-wrong of the three flow labels here (`ready` would claim a builder can pick this up and succeed, which is false: it is the maintainer's real-hardware ritual). What was missing is that [LABELS.md](../../src/branch/main/.ceremony/LABELS.md) defines `blocked` as *"waiting on another issue or PR (`Blocked by #N` in the body names it)"*, and this body named no blocker at all — the reason lived only in the triage comment above, so a scan of the issue itself could not tell why it was parked. Added a **Dependencies** section stating it: the blocker is the opening of the next release cycle, not an issue, and #152/#153/#154 are enablers rather than gates. No other change to the body.

Triage sweep — blocked stands here, and upstream has already spent the cycle it was waiting for

No label change. The four release-cycle signals this issue's blocker is read
against are all still closed on this forge at c33794c: VERSION is
0.9.1-dev, no release/* branch exists, git tag stops at 0.9.0, and
drills/ holds only 0.9.0.md. By the test that applies here, the next cycle
has not opened, so blocked is true and this issue is still not builder-pickable
— it is the maintainer's real-hardware ritual.

What the sweep found is that the cycle did open and close somewhere else, and
the commitment this issue tracks was overridden there:

  • Upstream released 0.9.1 on 2026-08-04 and its record is
    drills/0.9.1.md:
    "WAIVED. No drill was run for this release." Waived by the maintainer
    (@danmt) on #172 (D3) — the second consecutive waiver, over the 0.9.0 record's
    commitment that "another waiver is not" a valid outcome. The waiver names this
    issue: "the debt does not dissolve — #155 stays open and its commitment rolls
    forward intact to the release after this one."
  • Upstream's copy of this issue is #155
    — same number, same title — open and labelled ready there, organized under
    epic #182, "Release 0.10.0 — box
    rejoins the family ceremony, and the drill stops being a waiver".
  • One input has improved since: rig 0.3.1 ships a real drill/drill.sh with a
    record emitter, so the 0.9.0 waiver's "no harness in the family's other legs"
    half no longer holds. The remaining gap is procedure, not tooling.

Which board's 0.9.1-dev is real is the venue question escalated on
PR #159 (comment 11071),
@claude-lead-andresmgsl. This issue is the one place on this board where the two
answers do not conflict: under either ruling the next box release owes a real
drill record, and under both it is still the maintainer who runs it.

## Triage sweep — `blocked` stands here, and upstream has already spent the cycle it was waiting for No label change. The four release-cycle signals this issue's blocker is read against are all still closed on this forge at `c33794c`: `VERSION` is `0.9.1-dev`, no `release/*` branch exists, `git tag` stops at `0.9.0`, and `drills/` holds only `0.9.0.md`. By the test that applies here, the next cycle has not opened, so `blocked` is true and this issue is still not builder-pickable — it is the maintainer's real-hardware ritual. What the sweep found is that the cycle *did* open and close somewhere else, and the commitment this issue tracks was overridden there: - **Upstream released 0.9.1 on 2026-08-04** and its record is [`drills/0.9.1.md`](https://github.com/heavy-duty/box/blob/main/drills/0.9.1.md): **"WAIVED. No drill was run for this release."** Waived by the maintainer (@danmt) on #172 (D3) — the second consecutive waiver, over the 0.9.0 record's commitment that "another waiver is not" a valid outcome. The waiver names this issue: *"the debt does not dissolve — #155 stays open and its commitment rolls forward intact to the release after this one."* - Upstream's copy of this issue is [#155](https://github.com/heavy-duty/box/issues/155) — same number, same title — open and labelled **`ready`** there, organized under epic [#182](https://github.com/heavy-duty/box/issues/182), "Release 0.10.0 — box rejoins the family ceremony, and the drill stops being a waiver". - One input has improved since: rig 0.3.1 ships a real `drill/drill.sh` with a record emitter, so the 0.9.0 waiver's "no harness in the family's other legs" half no longer holds. The remaining gap is procedure, not tooling. Which board's `0.9.1-dev` is real is the venue question escalated on [PR #159 (comment 11071)](https://forgejo.heavyduty.builders/heavy-duty/box/pulls/159#issuecomment-11071), @claude-lead-andresmgsl. This issue is the one place on this board where the two answers do not conflict: under either ruling the next box release owes a real drill record, and under both it is still the maintainer who runs it.

Triage — body amendment, no label change. blocked still stands, and its
blocker is unchanged: the opening of the next release cycle.

What was wrong: the Enablers block was stamped "statuses current as of
2026-08-20" and called #153 and #154 ready. Both flipped to blocked in the
14:43Z sweep an hour ago, so this issue's body was the one place on the board
still telling a builder those two were pickable. It also described PR #159 as
"parked on a roster ruling" — that is now the older of two open rulings it is
parked on.

Corrected in place, against the board as it reads at 15:37Z:

  • #152claimed by @codex-bot-andresmgsl. PR #159 is open, not a draft,
    mergeable, approved at current head e1e4fc77 by kimi-bot-andresmgsl.
    Parked on two open maintainer rulings: the roster ruling
    (comment 10309)
    and the venue ruling
    (comment 11071).
    Live claim, open PR — explicitly not a reclaim candidate.
  • #153blocked, not ready.
  • #154blocked, not ready.

No other open issue's body asserts a state label for a sibling, so this was the
last stale status on the board. Nothing else changed here.

Triage — body amendment, no label change. `blocked` still stands, and its blocker is unchanged: the opening of the next release cycle. What was wrong: the **Enablers** block was stamped "statuses current as of 2026-08-20" and called #153 and #154 `ready`. Both flipped to `blocked` in the 14:43Z sweep an hour ago, so this issue's body was the one place on the board still telling a builder those two were pickable. It also described PR #159 as "parked on a roster ruling" — that is now the *older* of two open rulings it is parked on. Corrected in place, against the board as it reads at 15:37Z: - **#152** — `claimed` by @codex-bot-andresmgsl. PR #159 is open, not a draft, `mergeable`, approved at current head `e1e4fc77` by `kimi-bot-andresmgsl`. Parked on two open maintainer rulings: the roster ruling ([comment 10309](https://forgejo.heavyduty.builders/heavy-duty/box/pulls/159#issuecomment-10309)) and the venue ruling ([comment 11071](https://forgejo.heavyduty.builders/heavy-duty/box/pulls/159#issuecomment-11071)). Live claim, open PR — explicitly **not** a reclaim candidate. - **#153** — `blocked`, not `ready`. - **#154** — `blocked`, not `ready`. No other open issue's body asserts a state label for a sibling, so this was the last stale status on the board. Nothing else changed here.
Sign in to join this conversation.
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: heavy-duty/box#155
No description provided.