From aa0fb518ac0ddb9973167340c987826beedc1c65 Mon Sep 17 00:00:00 2001 From: beamologist Date: Thu, 29 Oct 2026 02:58:23 +0100 Subject: [PATCH 1/4] release 0.10.0: the version the A0 work goes out under MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 0.9.0 was released on 2026-10-19 (tag v0.9.0, db7057cd, published to NuGet) and the A0 work landed on top of the same number: yesterday's release prep edited the 0.9.0 section in place, moving its date to 2026-10-29, rewriting its intro to name macula-go v0.29.0, and appending two subsections to a release that had already shipped. This restores that section to exactly what the tag's own CHANGELOG says — verified by comparing the block at v0.9.0 against the block here, byte for byte — and puts the new material in a `## [0.10.0] - 2026-10-29` section above it, with the A0 re-seal as `### Changed`, and the honesty text ("what this release does not change") carried over unchanged because it is still true. Macula.csproj's Version is 0.10.0, which is what release.yml's guard reads (version-root src/Macula) and compares the tag against. The README gains the same paragraph, and `dotnet add package Macula` resolves 0.10.0. Raf's ruling, 2026-10-29: dotnet goes out as 0.10.0. Co-Authored-By: Claude Code --- CHANGELOG.md | 21 ++++++++++++++------- README.md | 8 ++++++++ src/Macula/Macula.csproj | 2 +- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ea8d0a..d631c44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,15 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -## [0.9.0] - 2026-10-29 +## [0.10.0] - 2026-10-29 -The wire 1.0 release, for the fleet's flag day (19 Oct 2026, 18:03 UTC): from -then on every live station speaks wire 1.0 (macula 15) and nothing older, and -0.8.0 can no longer connect. libmacula is macula-go v0.29.0, the release that -carries the A0 contract (v0.27.0 at the flag day); this package's code is -0.9.0-rc.5's. The entries for rc.1 to rc.5 below are what changed since 0.8.0. +The A0 release: libmacula is macula-go v0.29.0, the release that carries the A0 +contract where 0.9.0 shipped v0.27.0, and a call a keyed provider refuses +`sealed_required` is now resealed and answered. No wire change: this package's +code is 0.9.0-rc.5's plus the entries below. -### Changed since this entry was written +### Changed - **A call a keyed provider refuses `sealed_required` is resealed and answered**, instead of the caller failing on a stale keyless candidate: the caller seals again to the key in the refusal's @@ -33,6 +32,14 @@ carries the A0 contract (v0.27.0 at the flag day); this package's code is `ServeStream` take the policy as an optional parameter, and omitting it serves any caller (macula-dotnet#24 for streams, macula-dotnet#25 for unary). +## [0.9.0] - 2026-10-19 + +The wire 1.0 release, for the fleet's flag day (19 Oct 2026, 18:03 UTC): from +then on every live station speaks wire 1.0 (macula 15) and nothing older, and +0.8.0 can no longer connect. libmacula is macula-go v0.27.0, whose code is +v0.27.0-rc.8's; this package's code is 0.9.0-rc.5's. The entries for rc.1 to +rc.5 below are what changed since 0.8.0. + ## [0.9.0-rc.5] - 2026-10-17 ### Added diff --git a/README.md b/README.md index bfce791..9b0da39 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,14 @@ --- +> **A0, 0.10.0 (2026-10-29):** over libmacula from macula-go v0.29.0. A call a +> keyed provider refuses `sealed_required` is now resealed to the key that +> refusal carries and answered, instead of failing on a stale keyless candidate. +> Sealing is still the default only where the provider names a KEM key, and a +> procedure served with no policy is still open; refusing a clear call unless the +> caller opts out is not in this release. A plain `dotnet add package Macula` +> resolves 0.10.0. + > **Wire 1.0, 0.9.0 (2026-10-19):** built on libmacula from macula-go v0.27.0, > it speaks wire 1.0 (macula 15) and nothing older, so it reaches only a wire > 1.0 station. The fleet moved to wire 1.0 on 19 Oct 2026 at 18:03 UTC, and diff --git a/src/Macula/Macula.csproj b/src/Macula/Macula.csproj index 472718f..4c4f2f9 100644 --- a/src/Macula/Macula.csproj +++ b/src/Macula/Macula.csproj @@ -14,7 +14,7 @@ Macula Macula Macula - 0.9.0 + 0.10.0 .NET client for the Macula mesh: TLS 1.3 with a hybrid post-quantum key exchange, ML-DSA-87 identities, signed calls, replies and publications, handshake v5 (sessions bound to their TLS channel), and end-to-end sealing of calls, streams and realm groups with the caller's seal report. Node keys, a pool of station links, calls and streams by direct dial, serving in a node's own namespace or under an org, publish/subscribe and sealed group publish/subscribe, node-served content and the DHT. Built on libmacula, macula-go behind a C ABI, shipped in the package for Linux (x64, arm64), macOS (x64, arm64) and Windows (x64). Macula Apache-2.0 From 620d407805c702a14d90752c12a92693a0d0a7bd Mon Sep 17 00:00:00 2001 From: beamologist Date: Thu, 29 Oct 2026 03:06:37 +0100 Subject: [PATCH 2/4] release 0.10.0: the publish fails on a duplicate instead of skipping it Mercurius r=1, two findings, both his. 1. release.yml pushed to NuGet with --skip-duplicate, so a version that is already published is skipped and the job reports success: a release that published nothing looks exactly like one that published everything. That is how 0.9.0 could be prepared a second time on 29 Oct under a number that went live on 19 Oct. Removed, with the reason above the step. A re-run after a partial publish now fails loudly, which is what we want. The sweep across the other repositories stays in macula-codebase-checks#37. 2. The README's 19 Oct banner said `dotnet add package Macula` resolves 0.9.0 directly under the new paragraph saying it resolves 0.10.0. Past tense now: "resolved 0.9.0 until 0.10.0". Co-Authored-By: Claude Code --- .github/workflows/release.yml | 7 ++++++- README.md | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 03bef03..b43671b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -82,5 +82,10 @@ jobs: with: user: ${{ secrets.NUGET_USER }} + # No --skip-duplicate: a version that is already on NuGet must fail this + # job, not be skipped over as though the release had published. A release + # that silently publishes nothing is what let 0.9.0 be prepared a second + # time on 29 Oct under a number published on 19 Oct + # (macula-io/macula-codebase-checks#37). - name: Push to NuGet - run: dotnet nuget push ./artifacts/Macula.*.nupkg --api-key ${{ steps.login.outputs.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate + run: dotnet nuget push ./artifacts/Macula.*.nupkg --api-key ${{ steps.login.outputs.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json diff --git a/README.md b/README.md index 9b0da39..abb1e0f 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ > it speaks wire 1.0 (macula 15) and nothing older, so it reaches only a wire > 1.0 station. The fleet moved to wire 1.0 on 19 Oct 2026 at 18:03 UTC, and > from then on 0.8.0 and everything before it can no longer connect. A plain -> `dotnet add package Macula` resolves 0.9.0. +> `dotnet add package Macula` resolved 0.9.0 until 0.10.0. > **Status of 0.8.0, 2026-09-29:** on the **macula 12** wire: TLS 1.3 with a hybrid > post-quantum key exchange, ML-DSA-87 identities (as the ML-DSA-87 + From 7e26d7d12711927d0e7ac5955227b3dceee99e71 Mon Sep 17 00:00:00 2001 From: beamologist Date: Thu, 29 Oct 2026 03:12:37 +0100 Subject: [PATCH 3/4] changelog: name the release-workflow change as one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Supervisor's instruction: the --skip-duplicate removal is the same defect class as this week's miss — a duplicate version "succeeding" without publishing — so it must not hide inside a version bump. It now has its own `### Changed` entry in the 0.10.0 section, saying what the step does now, what it did before, and that a release which published nothing used to look like one that published everything (macula-codebase-checks#37). Co-Authored-By: Claude Code --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d631c44..f86415b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,12 @@ code is 0.9.0-rc.5's plus the entries below. - **A call a keyed provider refuses `sealed_required` is resealed and answered**, instead of the caller failing on a stale keyless candidate: the caller seals again to the key in the refusal's signed tbs, which is the key the provider holds now (macula-go v0.29.0, macula-dotnet#21). +- **The release workflow fails on a duplicate version instead of skipping it** (`release.yml`): the + NuGet push no longer passes `--skip-duplicate`, so a version already published fails the job + rather than reporting success over a publish that never happened. A release that published + nothing looked exactly like one that published everything, which is how 0.9.0 came to be prepared + a second time on 29 Oct under a number that went live on 19 Oct + (macula-io/macula-codebase-checks#37). No library code changes. ### What this release does not change From 9380e0cdb9c2b8c752dee952c8168f686db5389a Mon Sep 17 00:00:00 2001 From: beamologist Date: Thu, 29 Oct 2026 03:17:52 +0100 Subject: [PATCH 4/4] changelog, release.yml: state the consequence, not a cause that did not happen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mercurius r=2b, one exact clause, in two places. Both said the silent skip "is what let 0.9.0 be prepared a second time on 29 Oct". That claims a cause that never operated: no v0.9.0 publish was attempted that day, and the second preparation happened at review, before any publish job ran. The flag was never reached — it would only have hidden the mistake at publish time. Both now say what would have happened rather than what did: had 0.9.0 been tagged again on 29 Oct, under a number live since 19 Oct, the job would have gone green and published nothing. Co-Authored-By: Claude Code --- .github/workflows/release.yml | 6 +++--- CHANGELOG.md | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b43671b..3da88a6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -83,9 +83,9 @@ jobs: user: ${{ secrets.NUGET_USER }} # No --skip-duplicate: a version that is already on NuGet must fail this - # job, not be skipped over as though the release had published. A release - # that silently publishes nothing is what let 0.9.0 be prepared a second - # time on 29 Oct under a number published on 19 Oct + # job, not be skipped over as though the release had published. Had 0.9.0 + # been tagged again on 29 Oct, under a number live since 19 Oct, this job + # would have gone green and published nothing # (macula-io/macula-codebase-checks#37). - name: Push to NuGet run: dotnet nuget push ./artifacts/Macula.*.nupkg --api-key ${{ steps.login.outputs.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json diff --git a/CHANGELOG.md b/CHANGELOG.md index f86415b..daba101 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,10 +21,10 @@ code is 0.9.0-rc.5's plus the entries below. signed tbs, which is the key the provider holds now (macula-go v0.29.0, macula-dotnet#21). - **The release workflow fails on a duplicate version instead of skipping it** (`release.yml`): the NuGet push no longer passes `--skip-duplicate`, so a version already published fails the job - rather than reporting success over a publish that never happened. A release that published - nothing looked exactly like one that published everything, which is how 0.9.0 came to be prepared - a second time on 29 Oct under a number that went live on 19 Oct - (macula-io/macula-codebase-checks#37). No library code changes. + rather than reporting success over a publish that never happened. That flag never ran on this + week's miss: had 0.9.0 been tagged again on 29 Oct, under a number live since 19 Oct, the job + would have gone green and published nothing (macula-io/macula-codebase-checks#37). No library + code changes. ### What this release does not change