Skip to content

State the 0.x versioning rule and cut the 0.2.0 changelog - #32

Closed
sehkone wants to merge 1 commit into
mainfrom
sehkone/issue-31
Closed

State the 0.x versioning rule and cut the 0.2.0 changelog#32
sehkone wants to merge 1 commit into
mainfrom
sehkone/issue-31

Conversation

@sehkone

@sehkone sehkone commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Closes #31. Prepares the 0.2.0 release; does not create the tag.

Why 0.2.0 and not 1.0.0

Everything that makes up the consumer contract landed since 0.1.0 — the install layout, docs/theme.toml, docs/theme/.meta, the inherited mkdocs-base.yml, the extra.pdf block, and the build-docs-pdf.sh interface. All of it is self-tested against the samples, and none of it has been adopted by a consumer: bootroot still pins 0.1.0 and runs the old .theme layout.

Adoption is where the contract meets cases the samples cannot represent. aimer-web builds two configs and already uses exclude_docs for content, so the scalar-replacement rule forces it to repeat the base's exclusions. Its PDF has a variant axis that extra.pdf does not model. agentcoop has neither a PDF build nor a docs/theme.toml. Any of those could force a base-config or layout change, and at 1.0.0 that is 2.0.0 within days — spending the "review this against your own documents" signal on teething.

0.x is the convention for exactly this state, and nothing practical is lost: pinning, the bump automation, and the release-surface guard all behave identically. 1.0.0 becomes correct once all four consumers run the model and nothing forced a layout change.

Changes

README — the Versioning section defined MAJOR, MINOR, and PATCH but said nothing about 0.x, and those definitions read as 1.x semantics. Adds the 0.x rule (breaking bumps MINOR) and states what has to be true before 1.0.0. The three definitions themselves are unchanged.

CHANGELOG — promotes ## Unreleased to ## [0.2.0] - 2026-08-08 and adds the matching link reference. The entries are promoted unchanged: they were written as each change landed and are already scoped by area.

Verification

  • markdownlint-cli2 passes; both files stay within MD013's 80 columns.
  • Ran release.yml's extraction logic against the new heading: it resolves ## [0.2.0], stops at ## [0.1.0], and yields the 15 scoped entries as release notes.
  • No Unreleased heading is left behind.

Adjust the date in the heading if the tag lands on a different day.

The Versioning section defined MAJOR, MINOR and PATCH without saying
anything about 0.x, and those definitions read as 1.x semantics. Under
0.x a breaking change conventionally bumps MINOR, which nobody could
infer from the section as written.

The project stays on 0.x because the contract that landed since 0.1.0 —
the install layout, docs/theme.toml, .meta, the inherited
mkdocs-base.yml, the extra.pdf block, and the build-docs-pdf.sh
interface — is self-tested against the samples but has not been proven
by a consumer adopting it. bootroot still pins 0.1.0 and runs the old
.theme layout. aimer-web builds two configs and already uses
exclude_docs for content; agentcoop has neither a PDF build nor a
docs/theme.toml. Either could force a base-config change during
adoption, and spending MAJOR on that would drain the signal MAJOR
exists to carry.

The Unreleased entries are promoted unchanged; they were written as
each change landed and are already scoped by area.

Closes #31
@sehkone

sehkone commented Aug 8, 2026

Copy link
Copy Markdown
Contributor Author

Closing in favour of doing this last. Promoting ## Unreleased now is premature: #33 changes build-docs-pdf.sh, which is release-surface and will add an entry to that same section. Cutting the heading before the content has landed just means re-editing it.

The work is not dropped — #31 stays open and becomes the final step before tagging. The branch sehkone/issue-31 is left in place; the diff is twelve lines and is fully specified in the issue either way.

Note for whoever picks #31 up: the CHANGELOG promotion is a hard prerequisite for tagging, not a nicety. release.yml extracts notes by grepping ^## \[$VERSION\], so a tag pushed against a bare ## Unreleased produces "Release for version 0.2.0" as the entire release body — and that is what the Slack subscription would post.

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.

State the 0.x versioning rule and prepare the 0.2.0 changelog

1 participant