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
25 changes: 22 additions & 3 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.5.0] - 2026-08-10

### Added

- `adr check` and the governing-decisions Action now resolve inbound `@adr`
Expand All @@ -20,8 +22,15 @@ Until `1.0.0`, minor releases may include breaking changes

This answers the separate decision ADR-0021 left open rather than revising it.
[ADR-0022](docs/adr/0022-scan-inbound-markers-in-check-and-ci-without-giving-them-exit-code-authority.md)
supersedes ADR-0021, which stands unedited as the record of the explain-only
scope shipped in v0.4.0.
supersedes ADR-0021, whose argument stands unedited as the record of the
explain-only scope shipped in v0.4.0; only its `status` and `supersededBy`
moved when ADR-0022 was ratified.

- **Three new `@adrkit/core` runtime exports**, pinned by the package surface
test: `readSourceMarkersBatch`, the impure batch boundary callers use to
pre-scan before the pure `checkChanges`; and `MARKER_SCAN_FILE_CAP` /
`MARKER_SCAN_CONCURRENCY`, the bounds it enforces. Additive — nothing was
removed or renamed.

- **`{/*` is accepted as a comment introducer.** MDX rejects `<!-- -->`, so the
markdown introducer rule under *Fixed* below would otherwise leave that dialect
Expand All @@ -46,6 +55,15 @@ Until `1.0.0`, minor releases may include breaking changes
both sides of a rename for `affects` matching. Previous rename paths can no longer
consume the 3,000-file scan budget and cause a current file's marker-only
governance to be skipped.
- The Action no longer hands deleted files to the marker scanner. A `removed` path
is guaranteed absent in the checkout, so it consumed a scan slot only to report
`absent` — the one signal that would otherwise tell an operator the checkout does
not match the pull request head.
- Marker path selection and every `markerScan` path list now sort by code unit
rather than `localeCompare`, whose order depends on the runtime's ICU locale.
The sort decides which paths survive the 3,000-file cap and which ten appear in
the `marker-scan-capped` warning, so two environments could disagree on both
while `CheckOutcome` promises identical inputs produce identical output.

- **A fenced documentation example no longer declares the decision it
illustrates.** `@adr` markers are now skipped inside ` ``` ` and `~~~` fenced
Expand Down Expand Up @@ -446,7 +464,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.4.0...HEAD
[Unreleased]: https://github.com/mbeacom/adrkit/compare/v0.5.0...HEAD
[0.5.0]: https://github.com/mbeacom/adrkit/compare/v0.4.0...v0.5.0
[0.4.0]: https://github.com/mbeacom/adrkit/compare/v0.3.0...v0.4.0
[spec-kit-0.1.2]: https://github.com/mbeacom/adrkit/compare/spec-kit-v0.1.1...spec-kit-v0.1.2
[spec-kit-0.1.1]: https://github.com/mbeacom/adrkit/compare/spec-kit-v0.1.0...spec-kit-v0.1.1
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.

Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@
schemaVersion: 0.1.0
id: "0021"
title: Resolve inbound source annotations without changing the schema
status: accepted
status: superseded
date: 2026-08-05
deciders: ["@mbeacom"]
tags: [core, cli, matching, governance, agents]
scope: component
reversibility: two-way-door
blastRadius: component
supersededBy: "0022"
relatesTo: ["0009", "0012", "0014", "0016"]
affects:
- type: path
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
schemaVersion: 0.1.0
id: "0022"
title: Scan inbound markers in check and CI without giving them exit-code authority
status: proposed
status: accepted
date: 2026-08-08
deciders: []
deciders: ["@mbeacom"]
tags: [core, cli, ci, matching, governance, agents]
scope: component
reversibility: two-way-door
Expand All @@ -22,6 +22,22 @@ affects:
pattern: "packages/ci/src/**"
provenance:
authoredBy: agent-drafted
ratifiedBy: "@mbeacom"
review:
tier: arb
tierReason: >-
ADR-0021 reached `adr explain`, a command a developer runs against a file
they already own, and took the `async` tier on that basis. This record points
the same reader at content a fork pull request authored, inside CI, and
renders strings derived from it into a comment signed by
github-actions[bot]. That is a change of kind rather than of degree — the
first time `@adrkit/core` opens untrusted input in an automated context — and
it is why this record carries a cross-team blast radius where its predecessor
carried component. The failure modes are all quiet ones: an existence oracle
handed to a fork, a live link inside a trusted comment, a 422 turning
authored content into a failed check. Two of those three were closed by
review rather than by design, which is the argument for the higher tier
rather than against it.
reviewBy: 2027-02-08
---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
schemaVersion: 0.1.0
id: "0023"
title: "Read a marker only where the format hides it: fences and markdown prose"
status: proposed
status: accepted
date: 2026-08-10
deciders: []
deciders: ["@mbeacom"]
tags: [core, matching, governance, agents, docs]
scope: component
reversibility: two-way-door
Expand All @@ -15,6 +15,7 @@ affects:
pattern: "packages/core/src/markers/**"
provenance:
authoredBy: agent-drafted
ratifiedBy: "@mbeacom"
review:
tier: async
tierReason: >-
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.4.0",
"version": "0.5.0",
"description": "Decision memory for human and agent-authored plans — 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.4.0",
"version": "0.5.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 @@ -36,7 +36,7 @@ import { isMainModule } from './main-module.ts';
* (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.4.0';
export const CLI_VERSION = '0.5.0';

function writeStdout(text: string): void {
process.stdout.write(text);
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.4.0",
"version": "0.5.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.4.0",
"version": "0.5.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.4.0",
"version": "0.5.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.4.0",
"version": "0.5.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.4.0",
"version": "0.5.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.4.0' } as const;
export const SERVER_INFO = { name: '@adrkit/mcp', version: '0.5.0' } as const;

/**
* The MCP protocol revision this server serves through `serveStdio`'s modern era.
Expand Down