You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Route: curated 0.1.0, release-please takes over at 0.2.0
Decided 2026-08-17. This issue previously described release-please cutting
0.1.0 itself, which contradicted the unpark steps in .github/workflows/release-please.yml and could not work: seeding .release-please-manifest.json to 0.1.0 tells release-please that 0.1.0 has
already shipped, so its next pull request would propose 0.2.0. The two are now
reconciled in favour of the workflow's version.
Why, with the numbers. The parked comment says a generated changelog over all
of main would overflow GitHub's pull-request body limit. Measured on 2026-08-17:
426 entries across the six configured sections — 169 feat, 92 docs, 51 refactor, 47 ci, 42 chore, 25 fix — plus a breaking-changes block from 9 ! commits. At roughly 150 characters an entry that is about 64,000 characters
against a 65,536 limit. The parking was right by a margin of about 2%.
The curated route also gives 0.1.0 the release notes it deserves. A generated list
of 426 commits is not what someone deciding whether to adopt the library needs to
read.
Write the 0.1.0 release notes by hand, to the shape now stated in docs/release-process.md (What the release notes contain). For 0.1.0
that is parts 1 and 2 only — no generated list, because it is the first
release and every commit since the repository began describes the library
rather than a change to it.
**Say so inside the entry**, in one line: this is the first release, so
everything in it is new and there is no list of changes. That is the only
permanent home the exception needs. `docs/release-process.md` describes the
recurring process and deliberately does not mention 0.1.0 — nobody cuts it
twice — and this issue closes, so the entry has to explain itself to a
reader who meets a prose entry followed by generated ones.
- *What's in this release* — what the library is and the deliberate scope
(source-only, no dynamic allocation), then the compliance snapshot and
the platform list. **Restate both; do not link the site for them.** The
site publishes from `main`, so a link out of this release would resolve
to a later state and lose what 0.1.0 shipped. Link
`blob/v0.1.0/docs/rfc-compliance.md` for the full detail — the tag is
frozen even though the site is not.
- Compliance at 0.1.0, read off the matrix at the tag rather than from
memory, as *Total / Supported / Partial / Not Met / N-A*:
| RFC | Total | Supported | Partial | Not Met | N/A |
|---|---|---|---|---|---|
| RFC 5424 | 40 | 33 | 0 | 0 | 7 |
| RFC 5425 | 20 | 13 | 1 | 1 | 5 |
| RFC 5426 | 17 | 8 | 0 | 0 | 9 |
| RFC 6587 | 8 | 7 | 0 | 0 | 1 |
- Platforms: Posix, Windows, FreeRTOS, FreeRTOS-Plus-TCP, lwIP (Raw API),
OpenSSL, Mbed TLS, FatFs, FreeRTOS-Plus-FAT, C11 atomics.
- *Known limitations* — #718, #719, #731, #732, #733, #734 (TLS contract
divergences), #736 (oversize datagram above the default message cap),
#755 (FreeRTOS `sysUpTime` early wrap) and #753 (fingerprint
authorisation). Frame them as found by pre-release audit and disclosed on
the affected platform pages. `CHANGELOG.md` is not published to the site,
so bare `#nnn` autolinks on GitHub and needs no markdown link.
- Write once to a file: `gh release create --notes-file` for the Release,
same text into `CHANGELOG.md`.
Seed .release-please-manifest.json to 0.1.0
Seed version.txt to 0.1.0. release-type: simple manages this file and
it does not exist yet; seeding it avoids release-please introducing it as a
surprise in the first 0.2.0 pull request. It must agree with the manifest,
which is what sbom.yml reads the version from
Create the tag and GitHub Release as a draft first. release: published
does not fire for a draft, so this is the inspection gate: check the tag,
the notes and the source archives before anything is signed
Publish the draft. That fires sbom.yml, which attaches four assets
Unpark release-please: restore on: push: branches: [main] and rewrite the
parked comment block, which describes its own removal
Verify docs/ci.md:127 — "release-please runs on every push to main" is
false while parked and becomes true here. Confirm rather than edit
Traps found during the pre-cut audit
Never git push --tags. Local clones may carry v1.0.0 and v1.1.0 from
the pre-history-strip template era. The remote has no tags. Publishing those
would put 1.1.0 ahead of 0.1.0 in semver and give release-please a false
baseline to compute from. Deleted locally 2026-08-17; recorded here because a
fresh clone of an old backup could reintroduce them.
"Re-run the job" means re-run the failed release-triggered run, not a fresh workflow_dispatch. The publish job is gated on github.event_name == 'release', and the cosign certificate identity binds to refs/tags/v<version>. A dispatched run executes from refs/heads/main, so publish is skipped — and were it to sign, the identity would not match the
documented verify command.
No documentation snapshot is produced by a release. Nothing in ci.yml
triggers on release; the site deploys on push to main only. That is S23.05: Versioned documentation publishing and version switcher #251,
targeted at 0.2.0. Do not expect a versioned docs directory to appear.
Pre-cut documentation sweep
Every .md file and every source comment was swept for 0.1.0 / 1.0.0 on
2026-08-05, and re-verified against the tree on 2026-08-17. Source comments are
clean: there is no release-version reference anywhere in Core/ or Platform/.
docs/release-process.md:35-37 — delete the "> Status: release-please is
parked …" blockquote. Public docs page, and it contradicts its own checklist
further down.
Consequential — stale once the manifest is seeded
docs/security/sbom.md:79 — drop the "Pre-release: 0.0.0" clause from the metadata.component.version row.
Settled
CLAUDE.md:295 — "0.1.0 is the first public release…" reads as future
tense. Left as written: it defines what the milestone means rather than claiming
the release has not happened, it is an internal process document, and rewriting
it on release day is churn no reader benefits from. CLAUDE.md:274 (the backfill
record) and CLAUDE.md:289 (the due dates) stay as written — historical or still
true.
The cosign signing wording was carried as a judgement call to revisit at
0.2.0. Neither phrase survives; the S23.22 audit rewrote both. Nothing to do.
"beta stack" naming — docs/build-integration.md, the committed docs/generated/beta-stack-manifest.txt, and the anti-drift lane in ci.yml.
Accurate while 0.1.0 is the beta. Renaming moves a generated file and a CI
lane, so it belongs after the beta label stops applying.
Every 1.0.0 in the tree is unrelated to our 1.0.0 milestone — the PolyForm
Noncommercial licence version, its SPDX identifier, or a test fixture SwVersion. Do not find-and-replace.
After the tag
Invite scrutiny of the TLS obligations. See the first comment below —
this is the strongest action on this issue and the easiest to lose in the
mechanics of tagging.
This issue is the release-day close-out; it should be the last to close on the
milestone.
Release checklist for the first stable tag.
Route: curated 0.1.0, release-please takes over at 0.2.0
Decided 2026-08-17. This issue previously described release-please cutting
0.1.0 itself, which contradicted the unpark steps in
.github/workflows/release-please.ymland could not work: seeding.release-please-manifest.jsonto0.1.0tells release-please that 0.1.0 hasalready shipped, so its next pull request would propose 0.2.0. The two are now
reconciled in favour of the workflow's version.
Why, with the numbers. The parked comment says a generated changelog over all
of
mainwould overflow GitHub's pull-request body limit. Measured on 2026-08-17:426 entries across the six configured sections — 169
feat, 92docs, 51refactor, 47ci, 42chore, 25fix— plus a breaking-changes block from 9!commits. At roughly 150 characters an entry that is about 64,000 charactersagainst a 65,536 limit. The parking was right by a margin of about 2%.
The curated route also gives 0.1.0 the release notes it deserves. A generated list
of 426 commits is not what someone deciding whether to adopt the library needs to
read.
Sequence
All other 0.1.0-milestone blockers closed — S23.22 (S23.22: final documentation and comment quality gate before 0.1.0 #708) is the last one
Public API freeze reviewed — Public API freeze review before 0.1.0 #652, closed 2026-07-20
Pre-cut documentation sweep (see below)
Write the 0.1.0 release notes by hand, to the shape now stated in
docs/release-process.md(What the release notes contain). For 0.1.0that is parts 1 and 2 only — no generated list, because it is the first
release and every commit since the repository began describes the library
rather than a change to it.
Seed
.release-please-manifest.jsonto0.1.0Seed
version.txtto0.1.0.release-type: simplemanages this file andit does not exist yet; seeding it avoids release-please introducing it as a
surprise in the first 0.2.0 pull request. It must agree with the manifest,
which is what
sbom.ymlreads the version fromCreate the tag and GitHub Release as a draft first.
release: publisheddoes not fire for a draft, so this is the inspection gate: check the tag,
the notes and the source archives before anything is signed
Publish the draft. That fires
sbom.yml, which attaches four assetsVerify per
security/release-verification.md— that the bundles verify, not merely that the assets are present
Unpark release-please: restore
on: push: branches: [main]and rewrite theparked comment block, which describes its own removal
Verify
docs/ci.md:127— "release-please runs on every push tomain" isfalse while parked and becomes true here. Confirm rather than edit
Traps found during the pre-cut audit
git push --tags. Local clones may carryv1.0.0andv1.1.0fromthe pre-history-strip template era. The remote has no tags. Publishing those
would put 1.1.0 ahead of 0.1.0 in semver and give release-please a false
baseline to compute from. Deleted locally 2026-08-17; recorded here because a
fresh clone of an old backup could reintroduce them.
workflow_dispatch. Thepublishjob is gated ongithub.event_name == 'release', and the cosign certificate identity binds torefs/tags/v<version>. A dispatched run executes fromrefs/heads/main, sopublishis skipped — and were it to sign, the identity would not match thedocumented verify command.
ci.ymltriggers on
release; the site deploys on push tomainonly. That is S23.05: Versioned documentation publishing and version switcher #251,targeted at 0.2.0. Do not expect a versioned docs directory to appear.
Pre-cut documentation sweep
Every
.mdfile and every source comment was swept for0.1.0/1.0.0on2026-08-05, and re-verified against the tree on 2026-08-17. Source comments are
clean: there is no release-version reference anywhere in
Core/orPlatform/.Required — these state the release does not exist
.github/workflows/release-please.yml:3-13— the parked comment block.Rewrite alongside step 10 above.
docs/release-process.md:35-37— delete the "> Status: release-please isparked …" blockquote. Public docs page, and it contradicts its own checklist
further down.
Consequential — stale once the manifest is seeded
docs/security/sbom.md:79— drop the "Pre-release:0.0.0" clause from themetadata.component.versionrow.Settled
CLAUDE.md:295— "0.1.0is the first public release…" reads as futuretense. Left as written: it defines what the milestone means rather than claiming
the release has not happened, it is an internal process document, and rewriting
it on release day is churn no reader benefits from.
CLAUDE.md:274(the backfillrecord) and
CLAUDE.md:289(the due dates) stay as written — historical or stilltrue.
0.2.0. Neither phrase survives; the S23.22 audit rewrote both. Nothing to do.
README.mdanddocs/README.md. No copy survives anywhere in the tree.Deliberately out of scope
docs/build-integration.md, the committeddocs/generated/beta-stack-manifest.txt, and the anti-drift lane inci.yml.Accurate while 0.1.0 is the beta. Renaming moves a generated file and a CI
lane, so it belongs after the beta label stops applying.
1.0.0in the tree is unrelated to our 1.0.0 milestone — the PolyFormNoncommercial licence version, its SPDX identifier, or a test fixture
SwVersion. Do not find-and-replace.After the tag
this is the strongest action on this issue and the easiest to lose in the
mechanics of tagging.
This issue is the release-day close-out; it should be the last to close on the
milestone.