Skip to content

docs(planning): capture the release-PR changelog deadlock (RELTRUTH-01) - #87

Merged
szTheory merged 4 commits into
mainfrom
docs/capture-release-pr-changelog-deadlock
Jul 28, 2026
Merged

docs(planning): capture the release-PR changelog deadlock (RELTRUTH-01)#87
szTheory merged 4 commits into
mainfrom
docs/capture-release-pr-changelog-deadlock

Conversation

@szTheory

Copy link
Copy Markdown
Owner

The finding

Root release PR #57 (0.2.00.2.1) has 9 failing checks and — for one of them — cannot be made green from inside itself.

test/crosswake/guides/release_boundaries_test.exs:128 derives "current version" from mix.exs:

defp current_version do
  Application.spec(:crosswake, :vsn) |> to_string()
end

Inside a release PR that version is already bumped, so the previous version is treated as stale and CHANGELOG.md:20-22,36 get flagged [stale_latest_hex]:

old version 0.2.0 is presented as the latest/current Hex release

But those lines are true. 0.2.0 genuinely is the published release; 0.2.1 isn't out. And the root package sets "skip-changelog": true, so release-please never writes CHANGELOG.md in its own release PR — nothing inside the PR can clear the flag.

Root cause: the gate conflates "version in mix.exs" with "latest published Hex release." Those are deliberately different during a release PR.

Why captured, not fixed

  1. It changes the semantics of a merge-blocking release-honesty gate — the same class of gate that just caught the rulestead/rindle publish overclaim (docs(companions): tell the truth — rulestead/rindle are unpublished #84). Weakening it wrongly lets real overclaims through. That deserves your eyes, not a drive-by.
  2. The principled fix needs a CI change too. The repo already establishes the right authority in script/check_release_as_staleness.shthe git tag, not the local manifest, is the authoritative already-released signal. Applying that here is correct, but proof workflows check out without fetch-tags, so it needs checkout changes across many workflows.
  3. chore: release main #57's other 8 failures are publish-prep. Version-bump fixture regeneration (release-status mirror ref, phase52_publish_readiness.json, native_evidence_drift, doctor_threadline, phase43) only makes sense alongside a real decision to publish 0.2.1 — an irreversible Hex + Maven Central + SwiftPM mirror push you deliberately deferred this pass.

Impact today

None. main is green; #57 simply sits open as a standing publish gate, exactly as docs/MILESTONE-BOUNDARY-HYGIENE.md §4 prescribes. This lands the diagnosis so the next person doesn't re-derive it.

🤖 Generated with Claude Code

The root release PR (#57, 0.2.0 -> 0.2.1) has 9 failing checks and cannot be
made green from inside itself.

`release_boundaries_test.exs:128` derives "current version" from mix.exs via
`Application.spec(:crosswake, :vsn)`. Inside a release PR that version is already
bumped, so the PREVIOUS version is treated as stale and CHANGELOG.md:20-22,36 get
flagged `[stale_latest_hex]` — even though those lines are true. 0.2.0 genuinely
is the published release; 0.2.1 is not out yet. And because the root package sets
`skip-changelog: true`, release-please never writes CHANGELOG.md in its own
release PR, so nothing inside the PR can clear the flag.

Root cause: the gate conflates "version in mix.exs" with "latest published Hex
release". Those are deliberately different during a release PR.

Captured rather than fixed in this pass, deliberately:

* The fix changes the semantics of a merge-blocking release-honesty gate — the
  same class of gate that just caught the rulestead/rindle publish overclaim.
  Weakening it wrongly would let real overclaims through.
* The principled fix follows precedent already in the repo — check_release_as_
  staleness.sh establishes that the git tag, not the local manifest, is the
  authoritative already-released signal — but proof workflows check out without
  `fetch-tags`, so it needs a CI checkout change across many workflows too.
* #57 additionally needs version-bump fixture regeneration (release-status mirror
  ref, phase52_publish_readiness.json, native_evidence_drift, doctor_threadline,
  phase43), which only makes sense alongside a real decision to publish 0.2.1 —
  an irreversible Hex + Maven Central + SwiftPM mirror push.

#57 is not blocking anything today: main is green and the PR simply sits open.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@szTheory
szTheory enabled auto-merge July 28, 2026 17:36
@szTheory
szTheory merged commit 0e5e1c6 into main Jul 28, 2026
73 checks passed
@szTheory
szTheory deleted the docs/capture-release-pr-changelog-deadlock branch July 28, 2026 21:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant