Repository navigation
changelog: cut v0.1.0, and stop saying we do not cut releases - #561
Merged
Merged
Conversation
Mechanical run of tools/fold_changelog.py. Five fragments, ten bullets: the aarch64 portability pass and its CI job, the -msse2 removal, the multi-arch docker workflow and its capacity reporting, the REPL :help and README rewrites, the SemFiresOnlyAfterFlush deflake, and the aarch64 orlyc teardown hang. They accumulated across the arm arc, which is exactly the case the fragment directory exists for -- unique filenames cannot conflict, and nothing had to touch CHANGELOG.md while five PRs were in flight.
The header line "The project does not currently cut numbered releases" was accurate and is not any more. Replace it with what the process actually is: semver with an explicit pre-1.0 caveat (the language, the wire protocol and the on-disk format can still move between minor versions), fragments in changelog.d/, folded into [Unreleased], moved under a version heading when a release is cut. Move the folded [Unreleased] block under `## [v0.1.0]` and leave an empty [Unreleased] above it. Nothing in the entries changes -- everything in v0.1.0 had already shipped to master. What the tag buys is an immutable image and a version string: today `:latest` is a moving tag and `make version` falls back to a bare commit hash, because `git describe --match 'v[0-9]*'` has nothing to find. 0.1.0 rather than 1.0.0 because it is what the project already publishes everywhere else -- @orlyatomics/orly, orly-mcp and orly-repl are all 0.1.0 on npm, and the one tag in the repo is clients/go/v0.1.0 -- and because 1.0.0 would claim a stability commitment that two gated RFCs (#218, #255) could still change out from under. The empty [Unreleased] keeps its `### Fixed` subheading deliberately: fold_changelog.py anchors on the literal "## [Unreleased]\n\n### Fixed\n", so dropping it would silently break the next fold. Checked by folding a probe fragment against this structure and confirming it lands in [Unreleased] rather than in the released section.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #560 (the fragment fold) — the base shows only this commit once that merges. Draft for review; it is the "is this actually a release" decision, not a mechanical change.
Why 0.1.0 and not 1.0.0
Not a judgement call so much as matching what the project already claims everywhere else:
@orlyatomics/orly(npm)orly-mcp(npm)orly-repl(npm)clients/gomodule tagclients/go/v0.1.0Tagging the repo
v1.0.0while every client it ships says0.1.0would be the odd choice. And 1.0.0 asserts a stability commitment that two gated RFCs — #218 (user-definable merges) and #255 (heterogeneous batched writes) — could still change out from under, along with the on-disk format.What this actually buys
Worth being concrete, since the changelog has said "does not currently cut numbered releases" happily for months:
:latestis a moving tag. Nobody can pin. Av*tag makesdocker.ymlpush:v0.1.0-<arch>and stitch:v0.1.0.make versionrunsgit describe --tags --match 'v[0-9]*'; with no matching tag it falls back to a bare commit hash, soorlyc --helpreports something meaningless today.The change
Three things:
[Unreleased]block moved under## [v0.1.0] — 2026-09-17, with a short note that everything in it had already shipped.[Unreleased]left above it.No entry text is edited.
One thing that would have broken quietly
The empty
[Unreleased]keeps its### Fixedsubheading on purpose.fold_changelog.pyanchors on the literal string"## [Unreleased]\n\n### Fixed\n"andsys.exits if it cannot find it — so an empty section written the tidy way would have broken the next fold, at the moment someone was trying to land unrelated work.Verified rather than reasoned about: folded a probe fragment against this exact structure and confirmed it lands in
[Unreleased], above the released section, then reverted it.Suggested sequence from here
v0.1.0-rc1. Its only job is to exercisedocker.yml's tag path, which has never executed — the:${ver}-${arch}push and the version-tag stitch are gated onrefs/tags/v*, and this repo has nov*tags. The last time never-executed publish code ran here it was ci: fix the multi-arch manifest check, which failed a correct manifest #559, where a gate failed a correct manifest.v0.1.0.The rc is disposable; a bad
v0.1.0on a public repo is not.