chore(release): v0.4.0 — ratify ADR-0021 and cut the inbound-marker release - #103
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
Prepares the v0.4.0 lockstep release containing inbound @adr marker support.
Changes:
- Bumps lockstep package, CLI, MCP, root, and lockfile versions.
- Ratifies ADR-0021.
- Adds v0.4.0 notes and separates Spec Kit release history.
Reviewed changes
Copilot reviewed 10 out of 11 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
package.json |
Bumps repository version. |
bun.lock |
Updates lockstep workspace versions. |
CHANGELOG.md |
Adds and reorganizes release notes. |
docs/adr/0021-resolve-inbound-source-annotations-without-changing-the-schema.md |
Ratifies ADR-0021. |
packages/core/package.json |
Bumps core version. |
packages/evaluator/package.json |
Bumps evaluator version. |
packages/cli/package.json |
Bumps CLI package version. |
packages/cli/src/index.ts |
Updates CLI runtime version. |
packages/mcp/package.json |
Bumps MCP package version. |
packages/mcp/server.json |
Updates MCP registry versions. |
packages/mcp/src/server.ts |
Updates MCP server identity. |
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
mbeacom
force-pushed
the
mbeacom-release-v0-4-0
branch
from
August 8, 2026 22:13
c5a16cf to
7b28ab9
Compare
…elease Bumps the four lockstep packages to 0.4.0. The only change to a published package since v0.3.0 is #97, the inbound `@adr` marker feature; everything else on main since then is the unpublished catalog adapter, specs, docs, or dependency bumps. Minor rather than patch because `@adrkit/core` gains exports and `adr explain` gains output; nothing removed, so nothing breaks. ADR-0021 moves from proposed to accepted. It was shipped in #97 while still proposed, which meant `adr explain packages/core/src/markers/scan.ts` told the reader that no accepted decision governed the marker code it had just authorized. A decision-memory tool should not publish a feature its own corpus reports as ungoverned. The record also gains the `review:` block every other non-template ADR carries; `tier: async` follows ADR-0018, the only other component-scoped record. The changelog gets adapter sections. `@adrkit/spec-kit` 0.1.0, 0.1.1 and 0.1.2 shipped on their own `spec-kit-v*` tags (ADR-0007), so rolling them into `[0.4.0]` would file already-released adapter work under a lockstep version that never carried it. Their entries move to `[spec-kit-0.1.x]` sections verbatim; the release-pipeline and documentation work that shipped with the lockstep surface stays in `[0.4.0]`. Two hardcoded version constants moved with the manifests, `CLI_VERSION` and `SERVER_INFO`, each caught by its own test rather than by reading. `bun.lock` carries the four workspace `version` fields; only those four lines, because regenerating the lockfile pulls transitive drift (jose, undici, @octokit/*, @types/node) into a release commit that has no business carrying it. Verified: 1840 tests pass, typecheck, lint, build, check:deps, and `schema:emit` produce no diff. `bun run release:pack -- --tag v0.4.0` prepares five packages, and the installed-tarball smoke passes on Node 22.22.2 and 24.16.0. `packages/ci/dist` is byte-identical to v0.3.0, so the `packages/ci@v0` Action tag needs no move. `bun run release:publish -- --dry-run` passes all four lockstep packages at 0.4.0, then fails on `@adrkit/spec-kit@0.1.2`. That is a gap in the simulation rather than in the release. The registry idempotency check that skips an already-published artifact is gated behind `!dryRun`, so the dry run asks npm to republish a version that exists. The packed tarball's integrity is byte-identical to the published one, so the real run skips it. This is the first lockstep release since an independently versioned adapter existed, which is why nobody has hit it before. Signed-off-by: Mark Beacom <m@beacom.dev>
mbeacom
force-pushed
the
mbeacom-release-v0-4-0
branch
from
August 8, 2026 22:16
7b28ab9 to
94ecbc7
Compare
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.
Cuts v0.4.0, the release that ships #97.
The only change to a published package since
v0.3.0is the inbound@adrmarker feature. Everything else onmainsince then is the unpublished catalog adapter (@adrkit/catalog-backstageis at0.0.0and is not inrelease-pack.ts's package list), specs, docs, or dependency bumps. Minor rather than patch:@adrkit/coregains exports andadr explaingains output, nothing is removed.What's in it
Version bump to 0.4.0 across the four lockstep manifests, the root manifest,
packages/mcp/server.json(both the registryversionandpackages[0].versionthat the MCP registry validates as a pair), and the two hardcoded constantsCLI_VERSIONandSERVER_INFO. Each constant is guarded by its own test, so both were caught bybun testrather than by reading.ADR-0021 moves from
proposedtoaccepted. It shipped in #97 while still proposed, which meant the tool reported this about the code that record authorizes:A decision-memory tool should not publish a feature its own corpus reports as ungoverned. It now reads
0021 [accepted] ... via path: packages/core/src/markers/**. The record also gains thereview:block every other non-template ADR carries;tier: asyncfollows ADR-0018, the only other component-scoped record.adr lintis clean at 21 records, 0 errors, 0 warnings.The changelog gets adapter sections.
@adrkit/spec-kit0.1.0, 0.1.1 and 0.1.2 shipped on their ownspec-kit-v*tags per ADR-0007, so rolling them into[0.4.0]would file already-released adapter work under a lockstep version that never carried it. Their entries move verbatim into[spec-kit-0.1.0],[spec-kit-0.1.1]and[spec-kit-0.1.2], dated from the tags. The release-pipeline and documentation work that shipped with the lockstep surface stays in[0.4.0], alongside the new markers entry.bun.lockcarries four workspaceversionfields and nothing else.release-packvalidates that a packed dependency resolves to the dependency's own version, and it caught the stale lockfile:@adrkit/evaluator must resolve @adrkit/core to 0.4.0, got 0.3.0. Neitherbun installnorbun install --forcerefreshes those fields. Regenerating the lockfile does, but it also pulls transitive drift (jose6.2.3 → 6.2.8,undici6.27.0 → 6.28.0,@octokit/types16 → 17,@types/node26.1.1 → 26.1.2) into a release commit that has no business carrying it, so the four lines are edited directly andbun install --frozen-lockfileconfirms the result is self-consistent.Verification
bun testbun run typecheck/lint/buildbun run check:depscore-has-no-adapter-deps: okbun run schema:emitbun run release:pack -- --tag v0.4.0node .release/smoke/smoke.mjspackages/ci/distvsv0.3.0packages/ci/distbeing byte-identical meansmbeacom/adrkit/packages/ci@v0needs no move for content; the workflow's force-update of the major tag is a no-op relocation to the release commit.One thing the simulation gets wrong, and it is not this release
bun run release:publish -- --dry-runpasses all four lockstep packages at 0.4.0 and then fails:The registry idempotency check that skips an already-published artifact lives inside
if (!dryRun)inrelease-publish.ts:135, so the dry run never consults the registry and asks npm to republish a version that exists. The real path does check, and the packed tarball is byte-identical to what is published:So the real run logs
already matches; skipping. This is the first lockstep release since an independently versioned adapter existed, which is why nobody has hit it before, and it will now fail the documented local simulation on every lockstep release. Filed separately rather than fixed here, because changingrelease-publish.tsneeds a test observed failing (ADR-0016) and that does not belong in a release cut.Follow-ups, deliberately not in this PR
README.md,CLAUDE.md, anddocs/DISTRIBUTION.mdstill say v0.3.0. They are left alone on purpose: the v0.3.0 cutover synced docs in docs: sync the docs to v0.3.0 and document the Spec Kit extension #81, which is a descendant of thev0.3.0tag. Claiming "v0.4.0 on npm" before it is published would be briefly false.@adrkit/mcpregistry re-publication at 0.4.0, as was done for 0.3.0.