Repository navigation
Publish tagged release notes in native GitHub Releases (#1111) - #1183
Conversation
The protected writer published only the identity table, so every native release needed a hand-made body edit, and the writer then refused its own completed release. A final release's body is now the identity table plus docs/releases/<version>.md read from the verified tag commit through the contents API, with relative links resolved against the immutable tag. Missing notes, a mismatched heading or a link leaving the repository refuse before any write. Candidates and historical native- tags keep the identity table alone. The existing-release check compares that complete body. repair_legacy_notes (REPAIR_LEGACY_NOTES=true) replaces only an exact identity-only body from the earlier writer, after every other binding and the Latest check pass. It passes Latest as it already stands and reads the result back. It is how 3.4.0-3.8.0 get their notes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Repairing an older release (3.4.0-3.7.0) must not move Latest off 3.8.0. After the body readback, the writer reads the Latest Release again and refuses if it changed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Security: PASS (head Notes source. A final, non- Perl link rewriter. It only rewrites Repair gate (
It then edits only the body, passing Scope. The new workflow input is a boolean, passed only through |



Closes #1111.
Problem:
native-release-github-release.shpublished only the identity table. Every native release from 3.3.0 on needed a hand-made body edit, and 3.4.0–3.8.0 still show no notes. The writer's exact-body check then refused its own completed release.Change:
docs/releases/<version>.mdread through the contents API at the verified tag commit, never from main. The fake only answers?ref=<tag commit>, so reading any other ref fails the test.3.7.0.md#upgradebecomeshttps://github.com/<repo>/blob/<tag>/docs/releases/3.7.0.md#upgradeand../../rust/README.mdbecomes…/blob/<tag>/rust/README.md. Absolute and#anchorlinks are unchanged.# Durable Workflow Server <version> (native), or a link that leaves the repository.-rc.N) and the frozen historicalnative-X.Y.Ztags keep the identity table alone.repair_legacy_notesinput (default false). It replaces the body only when the existing body is exactly the identity table the old writer produced. It runs after every publication, provenance, qualification and Latest check passes, passes--latestas it already stands, and reads the body back. This is how 3.4.0–3.8.0 get their notes after merge, one dispatch per tag, with the same inputs as the original writer run.Checks:
bash scripts/ci/check-native-release-tags.shpasses with 18 new cases:native-tags stay identity-only;Two mutation probes fail the suite as expected: resolving links against
maininstead of the tag, and repairing with--latest=truefor a non-Latest release. shellcheck reports no new warning classes.Actual creation and readback get qualified at the next ordinary native release, plus the 3.8.0 repair dispatch.
🤖 Generated with Claude Code