Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ body:
attributes:
label: adrkit version
description: Output of `adr --version` (or the package version you installed).
placeholder: '0.11.0'
placeholder: '0.12.0'
validations:
required: true
- type: dropdown
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Decision memory for human- and agent-authored plans — machine-readable ADRs
that are enforceable in CI and legible to agents, without leaving git.
Status: early — phases 0–6 landed and v0.11.0 is public. `@adrkit/core`,
Status: early — phases 0–6 landed and v0.12.0 is public. `@adrkit/core`,
`@adrkit/evaluator`, `@adrkit/cli` (`lint`, `new`, `graph`, `explain`,
`check`, `queue`, `migrate --from madr`, `evaluate`) are published on npm, as is
the independently versioned `@adrkit/spec-kit` Spec Kit extension (0.1.3); the
Expand Down
61 changes: 37 additions & 24 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ Until `1.0.0`, minor releases may include breaking changes

## [Unreleased]

## [0.12.0] - 2026-08-27

### Added

- **A guarded recovery path for the moving `v0` Action tag.** Manual recovery
Expand Down Expand Up @@ -41,27 +43,6 @@ Until `1.0.0`, minor releases may include breaking changes
script ([#132](https://github.com/mbeacom/adrkit/issues/132)). Judgment prose
outside the markers stays hand-maintained.

### Fixed

- **Inbound marker amplification is bounded before resolution.** One file now
retains at most the first 64 parsed declarations, and one batch at most the
first 10,000 in deterministic code-unit path plus source order. Exact overflow
collapses into one advisory `marker-declarations-capped` finding and
`markerScan.declarations` metadata; `explain`, `check`, and the Action report
it without giving PR-authored markers exit-code authority
([#113](https://github.com/mbeacom/adrkit/issues/113)).

- **`adr queue` no longer stays silent when a proposed record has a review
deadline but no routing tier.** `item.tier-absent` now fires whenever the tier
cannot be determined on a record that has entered review — a `review` block,
or a top-level `reviewBy`. The carve-out the spec actually states is
two-conditioned (both absent), but only the first condition was implemented,
so a `cross-team` record with `reviewBy` and no `review` block was listed with
`tier=None` and no finding at all
([#111](https://github.com/mbeacom/adrkit/issues/111)). A `proposed` record
with neither remains `not-queued` and silent. Severity stays `info`, so no
exit code changes.

- **Trusted CI gates that the pull request cannot edit.** A new
`.github/workflows/trusted-gates.yml` runs on `pull_request_target`, which
GitHub executes from the repository's default branch — workflow file,
Expand Down Expand Up @@ -104,8 +85,18 @@ Until `1.0.0`, minor releases may include breaking changes
would otherwise have passed clean and deleted the gate on merge.

- **[`docs/repository-trust-operations.md`](docs/repository-trust-operations.md)**,
separating the controls that are active from the ones that cannot be applied
until this lands, with the exact verified commands and the evidence for each.
separating the controls that are active from the ones that could not be applied
until the trusted workflow reached `main`, with the exact verified commands and
the evidence for each. Both gates are now deployed and required: the live `main`
ruleset lists `trusted-dco` and `gate-integrity` among its ten required
contexts, and the pull-request-controlled `dco` context was removed from that
set only after the trusted one reported green on real pull requests. Both were
observed failing before being relied on
([ADR-0016](docs/adr/0016-require-every-check-to-be-observed-failing-before-it-counts-as-coverage.md)):
`gate-integrity` went red before an acknowledgment and green after it on three
ordinary pull requests, and `trusted-dco` went red on a commit that deliberately
omitted `Signed-off-by` and green once it was signed. That is deployed evidence
in both directions, not a fixture or a local invocation.

### Changed

Expand All @@ -125,6 +116,27 @@ Until `1.0.0`, minor releases may include breaking changes
states which invocation is the authority and which is advisory, because the
limitation stopped being true for the one that gates the merge.

### Fixed

- **Inbound marker amplification is bounded before resolution.** One file now
retains at most the first 64 parsed declarations, and one batch at most the
first 10,000 in deterministic code-unit path plus source order. Exact overflow
collapses into one advisory `marker-declarations-capped` finding and
`markerScan.declarations` metadata; `explain`, `check`, and the Action report
it without giving PR-authored markers exit-code authority
([#113](https://github.com/mbeacom/adrkit/issues/113)).

- **`adr queue` no longer stays silent when a proposed record has a review
deadline but no routing tier.** `item.tier-absent` now fires whenever the tier
cannot be determined on a record that has entered review — a `review` block,
or a top-level `reviewBy`. The carve-out the spec actually states is
two-conditioned (both absent), but only the first condition was implemented,
so a `cross-team` record with `reviewBy` and no `review` block was listed with
`tier=None` and no finding at all
([#111](https://github.com/mbeacom/adrkit/issues/111)). A `proposed` record
with neither remains `not-queued` and silent. Severity stays `info`, so no
exit code changes.

## [0.11.0] - 2026-08-26

### Added
Expand Down Expand Up @@ -1297,7 +1309,8 @@ against live Spec Kit, rather than reasoning about it:
- Node-targeted published distribution of all packages, smoke-tested under Node
22 and 24.

[Unreleased]: https://github.com/mbeacom/adrkit/compare/v0.11.0...HEAD
[Unreleased]: https://github.com/mbeacom/adrkit/compare/v0.12.0...HEAD
[0.12.0]: https://github.com/mbeacom/adrkit/compare/v0.11.0...v0.12.0
[0.11.0]: https://github.com/mbeacom/adrkit/compare/v0.10.0...v0.11.0
[0.10.0]: https://github.com/mbeacom/adrkit/compare/v0.9.0...v0.10.0
[0.9.0]: https://github.com/mbeacom/adrkit/compare/v0.8.0...v0.9.0
Expand Down
8 changes: 4 additions & 4 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions docs/RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ Action, and one lockstep OCI image:
| `@adrkit/evaluator` | npm |
| `@adrkit/cli` (`adr`, `adrkit`) | npm |
| `@adrkit/mcp` (`adrkit-mcp`) | npm |
| `packages/ci/action.yml` | Git tag (latest immutable release `v0.11.0`, moving `v0`) |
| `packages/ci/action.yml` | Git tag (latest immutable release `v0.12.0`, moving `v0`) |
| `ghcr.io/mbeacom/adrkit` | GitHub Container Registry (`vX.Y.Z`, moving `vX`, `latest`; begins with the first release containing ADR-0032) |

`@adrkit/ci` stays private because GitHub executes the committed Action bundle
directly from the referenced repository ref.

The coordinated lockstep surface is published; the current release is `v0.11.0`. `@adrkit/core`,
The coordinated lockstep surface is published; the current release is `v0.12.0`. `@adrkit/core`,
`@adrkit/evaluator`, and `@adrkit/cli` use GitHub Actions Trusted Publishing.
`@adrkit/mcp` was created with the isolated one-time bootstrap path below; its
Trusted Publisher and token-restriction cleanup must be completed before the
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "adrkit",
"version": "0.11.0",
"version": "0.12.0",
"description": "Decision memory for human and agent-authored plans \u2014 machine-readable, CI-enforceable architecture decision records.",
"type": "module",
"private": true,
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@adrkit/cli",
"version": "0.11.0",
"version": "0.12.0",
"description": "Git-native architecture decision record tooling from adrkit.",
"type": "module",
"license": "Apache-2.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ import { getPresentation, setPresentation, styleUsageBlock, type ColorMode, type
* (mirroring `@adrkit/mcp`'s `SERVER_INFO`) so the bundled `dist/index.js` never has
* to locate `package.json` at runtime. `version.test.ts` asserts the two agree.
*/
export const CLI_VERSION = '0.11.0';
export const CLI_VERSION = '0.12.0';

function topLevelUsage(style?: StreamStyle): string {
return renderTopLevelUsage(CLI_VERSION, style);
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/test/color.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ describe('CLI color presentation', () => {
expect(result.exitCode).toBe(0);
expect(result.stderr).toBe('');
expect(result.stdout).toContain('\u001b[');
expect(result.stdout).toContain('adrkit 0.11.0');
expect(result.stdout).toContain('adrkit 0.12.0');
});

test('forced color keeps lint stdout and stderr separated', async () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@adrkit/core",
"version": "0.11.0",
"version": "0.12.0",
"description": "Pure ADR parsing, validation, migration, and affects resolution for adrkit.",
"type": "module",
"license": "Apache-2.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/evaluator/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@adrkit/evaluator",
"version": "0.11.0",
"version": "0.12.0",
"description": "Deterministic, model-free ADR proposal evaluation and routing for adrkit.",
"type": "module",
"license": "Apache-2.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/mcp/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@adrkit/mcp",
"mcpName": "dev.adrkit/mcp",
"version": "0.11.0",
"version": "0.12.0",
"description": "Local, read-only Model Context Protocol server exposing adrkit decision retrieval over stdio.",
"type": "module",
"license": "Apache-2.0",
Expand Down
4 changes: 2 additions & 2 deletions packages/mcp/server.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"name": "dev.adrkit/mcp",
"title": "adrkit decision memory",
"description": "Deterministic, offline, read-only ADR decision memory for coding agents. No model or network calls.",
"version": "0.11.0",
"version": "0.12.0",
"websiteUrl": "https://adrkit.dev",
"repository": {
"url": "https://github.com/mbeacom/adrkit",
Expand All @@ -15,7 +15,7 @@
"registryType": "npm",
"registryBaseUrl": "https://registry.npmjs.org",
"identifier": "@adrkit/mcp",
"version": "0.11.0",
"version": "0.12.0",
"runtimeHint": "npx",
"transport": {
"type": "stdio"
Expand Down
2 changes: 1 addition & 1 deletion packages/mcp/src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { registerGetDecisionContext } from './tools/get-decision-context.ts';
import { registerListSuperseded } from './tools/list-superseded.ts';
import type { ToolConfig } from './tools/shared.ts';

export const SERVER_INFO = { name: '@adrkit/mcp', version: '0.11.0' } as const;
export const SERVER_INFO = { name: '@adrkit/mcp', version: '0.12.0' } as const;

/**
* The MCP protocol revision this server serves through `serveStdio`'s modern era.
Expand Down
2 changes: 1 addition & 1 deletion site/src/components/Hero.astro
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const { title = data.title, tagline, actions = [] } = data.hero || {};
</svg>
CLI works today
</span>
<span>v0.11.0 on npm · decision memory in git</span>
<span>v0.12.0 on npm · decision memory in git</span>
</div>

<h1 id="_top" data-page-title set:html={title} />
Expand Down
4 changes: 2 additions & 2 deletions site/src/content/docs/badges.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ jobs:
# current release.
- run: |
mkdir -p .adrkit
npx @adrkit/cli@0.11.0 queue --format json > .adrkit/queue.json.tmp
npx @adrkit/cli@0.11.0 lint --json > .adrkit/lint.json.tmp
npx @adrkit/cli@0.12.0 queue --format json > .adrkit/queue.json.tmp
npx @adrkit/cli@0.12.0 lint --json > .adrkit/lint.json.tmp

# A truncated or malformed write renders as `no result` on the badge, which
# reads as a bug in your tooling. Fail here instead of committing it.
Expand Down
10 changes: 5 additions & 5 deletions site/src/content/docs/ci.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ the comment reaches GitHub's size limit. Keep the default checkout rooted at
`GITHUB_WORKSPACE`; if a workflow checks out elsewhere, marker health will
identify files the Action could not inspect.

`v0` is a moving major tag, and it now resolves to a `v0.11.0` build. Pin the
immutable `v0.11.0` tag or a commit SHA for maximum reproducibility.
`v0` is a moving major tag, and it now resolves to a `v0.12.0` build. Pin the
immutable `v0.12.0` tag or a commit SHA for maximum reproducibility.

<Aside type="note" title="Comments from before the upgrade">
The Action is comment-only and deletes nothing, so duplicate comments a pull request
Expand All @@ -65,14 +65,14 @@ immutable `v0.11.0` tag or a commit SHA for maximum reproducibility.
</Aside>

<Aside type="caution" title="Pinning a release tag by SHA">
The `v*` release tags are **annotated**, so `refs/tags/v0.11.0` resolves to a tag
The `v*` release tags are **annotated**, so `refs/tags/v0.12.0` resolves to a tag
object rather than a commit, and `uses:` rejects that SHA. Pin the commit the tag
points *at*:

```sh
git rev-parse v0.11.0^{commit}
git rev-parse v0.12.0^{commit}
# or, over the API — this endpoint peels the tag for you:
gh api repos/mbeacom/adrkit/commits/v0.11.0 --jq .sha
gh api repos/mbeacom/adrkit/commits/v0.12.0 --jq .sha
```

Note that `GET /git/ref/tags/{tag}` does **not** peel: its `object.sha` is the tag
Expand Down
2 changes: 1 addition & 1 deletion site/src/content/docs/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ hero:
<div class="adr-home">
<section class="adr-status-band" aria-label="Project status">
<div class="adr-status-band__item">
<span class="adr-status adr-status--current">Published · v0.11.0</span>
<span class="adr-status adr-status--current">Published · v0.12.0</span>
<p><code>@adrkit/core</code>, <code>@adrkit/cli</code>, <code>@adrkit/evaluator</code>, and <code>@adrkit/mcp</code> are on npm, plus the independently versioned <code>@adrkit/spec-kit</code> extension; the CI Action ships at <code>mbeacom/adrkit/packages/ci@v0</code>.</p>
</div>
<div class="adr-status-band__item">
Expand Down
2 changes: 1 addition & 1 deletion site/src/content/docs/quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ decisions govern a file, renders the decision graph, migrates an existing MADR
corpus in place, emits the ARB operations queue, and runs the deterministic
evaluator.

<Aside type="tip" title="Published on npm (v0.11.0)">
<Aside type="tip" title="Published on npm (v0.12.0)">
`@adrkit/cli` is live. Consumers install it with your Node package manager and
run the `adr` binary — no clone required.
</Aside>
Expand Down
Loading