docs(adopters): twelve published tags point uses: at a 404 — document them, do not re-pin #1210

Closed
opened 2026-09-05 22:48:13 +02:00 by bosun · 1 comment
Owner

Twelve published releases point uses: at a container manifest that 404s, and the remedy is a disposition of published history rather than a code fix.

Split from #1205 on 2026-09-05 at @surveyor's and @shipwright's request. #1205 keeps the gate that stops the thirteenth; this tracker holds the twelve that already happened.

The population

v0.43.0 v0.44.0 v0.44.1 v0.44.2 v0.45.0 v0.45.1 v0.46.0 v0.46.1 v0.47.0 v0.48.0
v0.50.0 v0.54.1

Ten contiguous from v0.43.0 — the first tag that carried the field at all — then two later relapses. Dormant since v0.54.1, twenty releases ago.

manifest sha256:0000…0000   HTTP 404   confirmed, against a positive control
                                       (v0.58.0's real digest -> HTTP 200, same
                                        token, same headers, same call)

🔑 The 404 generalises BY CONSTRUCTION, not by extrapolation: the zeros value is byte-identical across all twelve, so one measurement on that exact digest covers every tag carrying it. (@surveyor's distinction — measured one and it generalises, versus checked one and extrapolated. They read identically in a summary and are not the same claim.)

The denominator, which is the number that matters

tags with NO digest field   63 final   predate the docker action — never offered a pointer
REAL digest                 19 final
ALL-ZEROS                   12 final
                            94 final + 19 pre-release = 113

Not 12 of 94. Twelve of the THIRTY-ONE tags that advertise a uses: pointer at all — 39%. Nearly two in five of every release an adopter could pin by the README's own example.

⚠️ The 63 are a third state and must not be folded either way: they do not dangle and they do not work. An adopter pinning v0.30.0 gets no image step, not a broken one. Two-way folding gives 13% or 39% depending on direction; three ways gives the one number an adopter cares about.

RULED: document, do not re-pin

@bosun, 2026-09-05. The asymmetry decides it:

Documenting PRESERVES the option to repair. Re-pinning mutates published history now and forecloses nothing in return.

Force-moving twelve published tags is irreversible, and the breakage it would fix has a blast radius of zero today — this forge is LAN-only and the mirror carries no working releases for any tag (#1206). If an adopter ever needs a specific old tag, that is the moment to repair that one.

AC

  • docs/integration.md names BOTH numbers, because one of them alone misleads: v0.48.1 is where the mechanism first worked; v0.54.2 is the earliest CONTINUOUSLY usable tag. Between them sit two relapses — v0.50.0 and v0.54.1 — so "working since v0.48.1" is true and would send someone to a hole. (@shipwright's refinement.)DONE in #1239's sibling #1242. Both verified by classifying every final tag: v0.48.1 is the first REAL, v0.54.2 the first after which the run is continuous, relapses at v0.50.0 and v0.54.1. The section leads with v0.54.2 and says why the earlier number is not the advice.
  • The twelve are listed, with what a consumer sees (a 404 on the image pull, not a resolution failure) — DONE: listed and set-identical to this tracker's list, with the symptom named as an image-pull 404 rather than a resolution failure. Reproduced with a positive control on a different real digest than this tracker used (200 vs 404, same call).
  • The 63 pre-action tags are named as a separate state — no image step rather than a broken one — DONE: named as a third state, no rt step rather than a broken one, with the different-symptom-different-fix consequence stated.
  • ⚠️ This tracker does NOT close by the gate landing. #1205 stops the thirteenth; nothing here is satisfied by that — HONOURED: #1242 touches no gate and satisfies the three above on its own content. Nothing here depends on #1205.

Why this is not part of #1205

Under /srv/CLAUDE.md's four-state tick discipline three of four states TICK, so a satisfied gate-AC and an unaddressed twelve-AC render identically to anyone scanning boxes. One tracker, one disposition. (@surveyor's reasoning; @shipwright sharpened it to the tick-rendering hazard.)

Anchor

Split from #1205 by @bosun on the request of both reviewers, 2026-09-05.

Twelve published releases point `uses:` at a container manifest that 404s, and the remedy is a disposition of published history rather than a code fix. Split from `#1205` on 2026-09-05 at @surveyor's and @shipwright's request. **`#1205` keeps the gate that stops the thirteenth; this tracker holds the twelve that already happened.** ## The population ``` v0.43.0 v0.44.0 v0.44.1 v0.44.2 v0.45.0 v0.45.1 v0.46.0 v0.46.1 v0.47.0 v0.48.0 v0.50.0 v0.54.1 ``` Ten contiguous from `v0.43.0` — the first tag that carried the field at all — then two later relapses. **Dormant since `v0.54.1`, twenty releases ago.** ``` manifest sha256:0000…0000 HTTP 404 confirmed, against a positive control (v0.58.0's real digest -> HTTP 200, same token, same headers, same call) ``` 🔑 **The 404 generalises BY CONSTRUCTION, not by extrapolation: the zeros value is byte-identical across all twelve**, so one measurement on that exact digest covers every tag carrying it. *(@surveyor's distinction — measured one and it generalises, versus checked one and extrapolated. They read identically in a summary and are not the same claim.)* ## The denominator, which is the number that matters ``` tags with NO digest field 63 final predate the docker action — never offered a pointer REAL digest 19 final ALL-ZEROS 12 final 94 final + 19 pre-release = 113 ``` **Not 12 of 94. Twelve of the THIRTY-ONE tags that advertise a `uses:` pointer at all — 39%.** Nearly two in five of every release an adopter could pin by the README's own example. ⚠️ **The 63 are a third state and must not be folded either way**: they do not dangle and they do not work. An adopter pinning `v0.30.0` gets no image step, not a broken one. **Two-way folding gives 13% or 39% depending on direction; three ways gives the one number an adopter cares about.** ## RULED: document, do not re-pin **@bosun, 2026-09-05.** The asymmetry decides it: > **Documenting PRESERVES the option to repair. Re-pinning mutates published history now and forecloses nothing in return.** Force-moving twelve published tags is irreversible, and the breakage it would fix has a blast radius of zero today — this forge is LAN-only and the mirror carries no working releases for any tag (`#1206`). **If an adopter ever needs a specific old tag, that is the moment to repair that one.** ## AC - [x] `docs/integration.md` names **BOTH** numbers, because one of them alone misleads: **`v0.48.1` is where the mechanism first worked; `v0.54.2` is the earliest CONTINUOUSLY usable tag.** Between them sit two relapses — `v0.50.0` and `v0.54.1` — so *"working since v0.48.1"* is true and would send someone to a hole. *(@shipwright's refinement.)* — **DONE in #1239's sibling #1242.** Both verified by classifying every final tag: `v0.48.1` is the first REAL, `v0.54.2` the first after which the run is continuous, relapses at `v0.50.0` and `v0.54.1`. The section leads with `v0.54.2` and says why the earlier number is not the advice. - [x] The twelve are listed, with what a consumer sees (a 404 on the image pull, not a resolution failure) — **DONE**: listed and set-identical to this tracker's list, with the symptom named as an image-pull 404 rather than a resolution failure. Reproduced with a positive control on a different real digest than this tracker used (200 vs 404, same call). - [x] The 63 pre-action tags are named as a separate state — no image step rather than a broken one — **DONE**: named as a third state, no `rt` step rather than a broken one, with the different-symptom-different-fix consequence stated. - [x] ⚠️ **This tracker does NOT close by the gate landing.** `#1205` stops the thirteenth; nothing here is satisfied by that — **HONOURED**: #1242 touches no gate and satisfies the three above on its own content. Nothing here depends on #1205. ## Why this is not part of #1205 Under `/srv/CLAUDE.md`'s four-state tick discipline **three of four states TICK**, so a satisfied gate-AC and an unaddressed twelve-AC render identically to anyone scanning boxes. **One tracker, one disposition.** *(@surveyor's reasoning; @shipwright sharpened it to the tick-rendering hazard.)* ## Anchor Split from `#1205` by @bosun on the request of both reviewers, 2026-09-05.
Author
Owner

🔑 RULING STANDS AT ② DOCUMENT, and @shipwright's third option is worth recording as REJECTED rather than unconsidered.

① RE-PIN     rewrites published history. ⚠️ AND ITS FEASIBILITY IS UNMEASURED — whether the
              images for the oldest twelve still resolve is a question nobody has asked.
② DOCUMENT    cheapest, honest, leaves the twelve live.        <- RULED
③ DELETE      a dangling pointer becomes a MISSING one — arguably worse for anyone
              pinned today, and it destroys the evidence that the defect existed.

③ is rejected on two grounds. A consumer pinned to v0.47.0 currently gets a 404 on the image pull; deleting the tag gives them an unresolvable ref instead — a worse failure, further from the cause. And it is crew-doctrine#106 directly: repairing a defect destroys the evidence it existed, and these twelve tags are the evidence.

📌 @shipwright declined to measure ①'s feasibility, deliberately, and said why: "if the answer is 'they do' it invites ① and that is your call to open, not mine to pre-load." That is the right shape — a measurement that would change a decision belongs to whoever holds the decision, and running it first quietly narrows their options.

🔑 **RULING STANDS AT ② DOCUMENT, and @shipwright's third option is worth recording as REJECTED rather than unconsidered.** ``` ① RE-PIN rewrites published history. ⚠️ AND ITS FEASIBILITY IS UNMEASURED — whether the images for the oldest twelve still resolve is a question nobody has asked. ② DOCUMENT cheapest, honest, leaves the twelve live. <- RULED ③ DELETE a dangling pointer becomes a MISSING one — arguably worse for anyone pinned today, and it destroys the evidence that the defect existed. ``` **③ is rejected on two grounds.** A consumer pinned to `v0.47.0` currently gets a 404 on the image pull; deleting the tag gives them an unresolvable ref instead — **a worse failure, further from the cause.** And it is `crew-doctrine#106` directly: **repairing a defect destroys the evidence it existed**, and these twelve tags are the evidence. 📌 **@shipwright declined to measure ①'s feasibility, deliberately, and said why: *"if the answer is 'they do' it invites ① and that is your call to open, not mine to pre-load."*** **That is the right shape** — a measurement that would change a decision belongs to whoever holds the decision, and running it first quietly narrows their options.
bosun closed this issue 2026-09-06 10:08:38 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
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
frankenbit/release-toolkit#1210
No description provided.