Skip to content

docs: open the 1.0.0-beta.1 section, and a fresh Unreleased above it - #78

Merged
Reefact merged 1 commit into
mainfrom
claude/beta-1
Aug 12, 2026
Merged

docs: open the 1.0.0-beta.1 section, and a fresh Unreleased above it#78
Reefact merged 1 commit into
mainfrom
claude/beta-1

Conversation

@Reefact

@Reefact Reefact commented Aug 12, 2026

Copy link
Copy Markdown
Owner

Summary

Releasing, in Keep a Changelog terms, is renaming [Unreleased] to the version and opening an empty one above it. Both languages move together. No tag is pushed by this — it is the commit the tag will point at.

Type of change

  • Bug fix
  • New feature
  • Breaking change to the public API
  • Refactoring
  • Analyzer / diagnostic change
  • Tests
  • Documentation
  • Build / CI / tooling

The heading is now load-bearing

Release notes are read out of the changelog rather than generated from pull-request titles, so ## [1.0.0-beta.1] is what decides whether gh release create has anything to publish. Proven here rather than at tag time, when nothing can be taken back:

call result
changelog-section.sh 1.0.0-beta.1 exit 0, 417 lines
changelog-section.sh Unreleased exit 2 — "[Unreleased] is not a release"
changelog-section.sh 9.9.9 exit 1 — "has no ## [9.9.9] section"

The freshly opened [Unreleased] is empty, which is exactly the state the extractor refuses to publish — so the section it will read cannot silently be the wrong one.

What beta claims

The notes now say it, because beta claims more than preview did and less than a candidate would:

A beta rather than a release candidate, and the difference is a claim rather than a stage: the public surface is settled, the behaviour behind it is not yet proven anywhere but here. A candidate would say the opposite.

Exercised at the real version, not assumed from it

  • dotnet pack -c Release -p:Version=1.0.0-beta.1 produces the four files under their beta names, and tools/packaging/verify-packages.sh accepts both packages — framework reference, analyzers, build/*.targets, and the Microsoft.OpenApi 2.11.0 floor.
  • release.yml's SemVer regex, extracted from the workflow rather than retyped, accepts 1.0.0-beta.1.
  • The hyphen rule derives prerelease=true, which is what keeps a beta off the repository's latest-release slot.
  • nuget.org still answers 404 for both package ids, re-checked — nothing is being overwritten.

Testing

  • dotnet build -c Release — 0 warnings, 0 errors
  • dotnet test -c Release — 972 passed
  • tests/PackageSmokeTest/run.sh — the published package behaves as documented

lint-layout.sh, its own test, and the changelog extractor's test all pass.

Public API

  • No change to the public surface
  • The surface changed and the baseline was updated in the same commit

Documentation

  • README / docs/ updated
  • The French counterpart was updated to match
  • CHANGELOG.md and docs/for-users/CHANGELOG.fr.md both updated
  • No documentation change required

What is left, and not done here

  1. Dry run of release.yml by workflow_dispatch with 1.0.0-beta.1 — the plan requires it to exercise the final commit, which is this one once merged, so it comes after this PR rather than inside it.
  2. The tag v1.0.0-beta.1, which I will not push without being told to. The v* ruleset forbids deletion and update: a tag that fails to publish cannot be reused.

One open question for the notes: this beta exists because bugs were found. If any of them should be listed as known issues before publishing, say which and I will add them to the section — I have not invented entries for defects I have not seen.

Related issues


Generated by Claude Code

Keep a Changelog holds work under [Unreleased] until it ships; releasing is
renaming that heading and opening an empty one above. Both languages move
together, which the structural comparison enforces.

This is no longer only bookkeeping. Release notes are read out of the changelog
now rather than generated from pull-request titles, so the heading is what
decides whether `gh release create` has anything to publish — and the extractor
refuses an absent section, an empty one, and [Unreleased] by name. Proven here
rather than at tag time: it returns 417 lines for 1.0.0-beta.1, exits 2 on
Unreleased, and exits 1 on a version with no section.

The notes say what beta claims, since it claims more than preview did and less
than a candidate would: the surface is settled, the behaviour behind it is not
yet proven anywhere but here.

Everything the tag will touch was exercised at the real version rather than
assumed from it. `dotnet pack -p:Version=1.0.0-beta.1` produces the four files
under their beta names and the packaging verifier accepts both; release.yml's
own SemVer regex, extracted from the workflow rather than retyped, accepts the
version, and the hyphen rule derives prerelease=true, which is what keeps a beta
off the repository's latest-release slot.

No tag is pushed by this. The `v*` ruleset forbids deletion and update, so the
dry run has to exercise the final commit — which is this one, once merged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GcQ3umdkRNsR7FRB9s2P2w
@Reefact
Reefact merged commit 559520f into main Aug 12, 2026
10 checks passed
@Reefact
Reefact deleted the claude/beta-1 branch August 12, 2026 10:25
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.

2 participants