Skip to content

release: v0.6.0 publishes the p3 unprefixed command-list SHOULD and the release tooling - #56

Merged
brettdavies merged 1 commit into
mainfrom
release/v0.6.0-unprefixed-command-list
Oct 5, 2026
Merged

brettdavies merged 1 commit into
mainfrom
release/v0.6.0-unprefixed-command-list

Conversation

@brettdavies

Copy link
Copy Markdown
Owner

Summary

Publishes p3-should-unprefixed-command-list, the SHOULD that command-list entries name the command directly (status, server stop) rather than repeating the binary name on every line (tool status, tool server stop). The bare invocation line stays the one entry that legitimately carries the binary name alone. principles/p3-progressive-help-discovery.md gains the requirement block and the normative text.

This closes a lockstep gap rather than adding something new. The published anc v0.6.0 already audits this requirement and emits a p3-should-unprefixed-command-list row in every scorecard, while declaring spec_version: 0.5.0 against a published spec that does not define it. Until this merges, the auditor grades tools on a requirement a reader cannot look up.

VERSION moves to 0.6.0. A new normative SHOULD is an additive spec change, and publish.yml resolves its CHANGELOG section from VERSION, so leaving it at 0.5.0 would point the release cut at the section v0.5.0 already published.

The release also carries the governance and release tooling that accumulated on dev since v0.5.0: CODEOWNERS and a Dependabot config (both inert until they reach the default branch), the re-vendored scripts/release/ helpers, scripts/sync-dev-after-release.sh, the consolidated scripts/generate-changelog.py replacing the shell version, refreshed guard workflows and the protect-main ruleset, and the consumer-facing docs describing them. The prose-check stack stays dev-only, as release #46 established.

Changelog

Added

  • Add p3-should-unprefixed-command-list (SHOULD, applies when the CLI uses subcommands): command-list entries name the command directly rather than repeating the binary name as a prefix, so a reader or agent takes the command token from the left column instead of reconstructing it from a known prefix.

Changed

  • Require code-owner review on main and enable Dependabot, so contributor PRs now need an owner approval before merge.
  • Replace scripts/generate-changelog.sh with scripts/generate-changelog.py, which keeps the same flags and git-cliff plus PR-body pipeline and adds a duplicate-section guard.

Linked audit review

brettdavies/agentnative-cli#95 adds the p3-unprefixed-command-list audit that verifies this requirement. It shipped in anc v0.6.0, which is published.

Human reviewer

Reviewer: @brettdavies (review pending; this PR is open for it, not approved)

AI disclosure

Claude assembled the release branch, bumped VERSION, generated CHANGELOG.md from the constituent dev PR bodies, and wrote this body; every shipped change to the principle text, workflows, scripts, and docs is human-authored work already reviewed and merged to dev through its own PR.

…he release tooling

Publishes `p3-should-unprefixed-command-list`, the SHOULD that command-list entries name the command directly rather than repeating the binary name as a prefix. The requirement already ships in the published `anc` v0.6.0, which emits a scorecard row for it, so until this lands the auditor grades a requirement the published spec does not define.

Also carries the governance and release tooling that accumulated on dev since v0.5.0: CODEOWNERS, Dependabot, the re-vendored release scripts and consolidated `generate-changelog.py`, updated guards and rulesets, and the consumer-facing docs that describe them. The prose-check stack stays dev-only, as release #46 established.

VERSION moves to 0.6.0 because a new normative SHOULD is an additive spec change, and because `publish.yml` reads VERSION to find its CHANGELOG section; leaving it at 0.5.0 would point the release cut at the section v0.5.0 already published.
@brettdavies
brettdavies merged commit 5077a5d into main Oct 5, 2026
3 checks passed
@brettdavies
brettdavies deleted the release/v0.6.0-unprefixed-command-list branch October 5, 2026 02:34
brettdavies added a commit to brettdavies/agentnative-cli that referenced this pull request Oct 5, 2026
## Summary

Vendors `agentnative-spec` v0.6.0, so `spec_version` in every scorecard
reports 0.6.0 instead of 0.5.0.

This closes a coherence gap rather than adopting new requirements. The
registry already carried `p3-should-unprefixed-command-list` and `anc`
already graded it, because the principle text was vendored from the
spec's `dev` branch while the requirement was in flight. The vendored
`VERSION` stayed at 0.5.0, so published scorecards declared conformance
to a standard that did not define a requirement they carried a row for.
Spec v0.6.0 publishes that SHOULD.

Only `VERSION` and the vendored `CHANGELOG.md` change. The principle
text is byte-identical to what was already vendored, so the generated
requirement set, the registry counts, and `docs/coverage-matrix.md` are
all untouched.

`src/principles/spec/CHANGELOG.md` also joins the markdownlint ignore
list, next to the root changelog that is already there for the same
reason. The vendored file carries upstream's one-logical-line-per-bullet
shape, which trips MD013 at 189 to 379 characters on the new 0.6.0
bullets. Wrapping it would make the vendored copy differ from upstream,
which is the one property `scripts/sync-spec.sh` exists to preserve.

## Changelog

### Changed

- Report `spec_version: "0.6.0"` in scorecards, matching the published
spec that now defines `p3-should-unprefixed-command-list`.

## Type of Change

- [x] `fix`: Bug fix (non-breaking change which fixes an issue)

## Related Issues/Stories

- Story: n/a
- Issue: n/a
- Architecture: `scripts/SYNCS.md` (`sync-spec.sh` row)
- Related PRs: brettdavies/agentnative#56 (the spec v0.6.0 release), #95
(the audit that verifies the requirement)

## Files Modified

**Modified:**

- `src/principles/spec/VERSION`: 0.5.0 to 0.6.0.
- `src/principles/spec/CHANGELOG.md`: vendored, gains the upstream 0.6.0
section.
- `.markdownlint-cli2.yaml`: ignore the vendored spec changelog.

**Created:**

- None.

**Renamed:**

- None.

**Deleted:**

- None.

## Testing

- [ ] Unit tests added/updated
- [ ] Integration tests added/updated
- [x] Manual testing completed
- [x] All tests passing

**Test Summary:**

- Unit tests: 1106 passing, 3 ignored
- Integration tests: covered by the above
- Coverage: not measured in this repo

No new tests: the change is a vendored version string, and nothing in
`tests/` asserts a `spec_version` literal, which is what lets the bump
pass without edits.

Verified in emitted output rather than inferred from the file: `anc
audit --command jq --audit-profile posix-utility --output json` reports
`spec_version=0.6.0`, and the `p3-should-unprefixed-command-list` row is
still present and resolves to `n_a` for `jq`, which is correct for a
requirement gated on the CLI having subcommands. Confirmed the new
markdownlint ignore takes effect (`Linting: 0 files` for the vendored
changelog) while other markdown still lints.

## Breaking Changes

- [x] No breaking changes

Consumers that pin on `spec_version` see it move from `0.5.0` to
`0.6.0`. The site accepts the scorecard on `schema_version`, not
`spec_version`, so nothing downstream gates on this.

## Deployment Notes

- [x] No special deployment steps required

Published `anc` v0.6.0 keeps reporting `spec_version: "0.5.0"`; this
reaches users with the next `anc` release.

## Checklist

- [x] Code follows project conventions and style guidelines
- [x] Commit messages follow [Conventional
Commits](https://www.conventionalcommits.org/)
- [x] Self-review of code completed
- [x] Tests added/updated and passing
- [x] No new warnings or errors introduced
- [x] Changes are backward compatible (or breaking changes documented)

## Additional Context

The spec's `publish.yml` dispatches a `spec-release` event to this repo
and to `agentnative-site` on every tagged release, with its loop
commented "Non-fatal: downstream consumers opt in when they wire
handlers." Neither repo has a handler, so no workflow fires and the
dispatch is silently a no-op. That is why this sync is a hand-run script
and a PR rather than something that happened on its own, and wiring a
handler here would be a reasonable follow-up.
brettdavies added a commit to brettdavies/agentnative-site that referenced this pull request Oct 5, 2026
## Summary

Vendors `agentnative-spec` v0.6.0 into `src/data/spec/`, which publishes
`p3-should-unprefixed-command-list`: command-list entries SHOULD name
the command directly (`status`, `server stop`) rather than repeat the
binary name on every line, with the bare invocation line as the one
entry that legitimately carries the binary name alone. `SPEC_VERSION`
moves to 0.6.0.

Vendored through `scripts/sync-spec.sh`, resolved at 5077a5d.

`SITE_SPEC_VERSION` deliberately stays at 0.5.0. Per
`src/data/spec/README.md`, the vendored copy is a reference snapshot
with no user-visible surface, while the footer renders
`SITE_SPEC_VERSION` from `content/principles/VERSION` and moves only
once a contributor reconciles the site's own principle prose. The footer
therefore keeps making an honest claim about what the rendered pages
describe, which is the state that README calls out explicitly.
Reconciling `content/principles/p3-progressive-help-discovery.md` and
bumping that marker is the editorial follow-up, and it is not in this
PR.

`tests/build-mcp-catalog.test.ts` asserted the catalog's `spec_version`
against a literal `'0.5.0'` while already importing `SPEC_VERSION` and
passing it in as the input, so it pinned a value guaranteed to go stale
on the next spec sync. It now asserts the pass-through against the
constant.

## Changelog

### Changed

- Vendor spec v0.6.0, which adds the `p3-should-unprefixed-command-list`
SHOULD to the reference snapshot the web audit and discovery documents
read.

## Type of Change

- [x] `fix`: Bug fix (non-breaking change which fixes an issue)

## Related Issues/Stories

- Story: n/a
- Issue: n/a
- Architecture: `src/data/spec/README.md` (the three version markers and
which surface each drives); `scripts/SYNCS.md` (`sync-spec.sh` row)
- Related PRs: brettdavies/agentnative#56 (the spec v0.6.0 release),
brettdavies/agentnative-cli#136 (the same sync on the CLI side), #426
(the `ANC_VERSION` sync)

## Files Modified

**Modified:**

- `src/data/spec/VERSION`: 0.5.0 to 0.6.0.
- `src/data/spec/CHANGELOG.md`: vendored, gains the upstream 0.6.0
section.
- `src/data/spec/principles/p3-progressive-help-discovery.md`: vendored,
gains the new SHOULD and its requirement block.
- `src/worker/spec-version.gen.ts`: regenerated, `SPEC_VERSION` only.
- `tests/build-mcp-catalog.test.ts`: assert `spec_version` against
`SPEC_VERSION` instead of a literal.

**Created:**

- None.

**Renamed:**

- None.

**Deleted:**

- None.

## Testing

- [ ] Unit tests added/updated
- [x] Integration tests added/updated
- [x] Manual testing completed
- [x] All tests passing

**Test Summary:**

`bun test` reports 2774 pass / 111 fail, which is identical to the count
on a clean `origin/dev` checkout. The 111 are pre-existing and
environment-dependent: they are the `(built dist/)` suites that need a
prior `bun run build`, plus the R2-backed paths that have no local
binding.

That baseline was measured rather than assumed. Running the suite before
the change gave 111 failures and after gave 112, and diffing the
normalized failure names isolated the single regression to
`buildMcpCatalog: shape invariants > top-level fields present`, the
hardcoded `'0.5.0'` assertion. With that assertion fixed the totals
match the baseline exactly, so this change introduces no net regression.

## Breaking Changes

- [x] No breaking changes

## Deployment Notes

- [ ] No special deployment steps required
- [x] Deployment steps documented below:

`SPEC_VERSION` is part of the web-audit cache key
(`audits/web/<url-hash>/<SPEC_VERSION>.json`) and of the domain-budget
hold key, so this bump **rotates every web-audit cache entry**. Expect
cached web audits to miss and re-audit after deploy, and the web
leaderboard to repopulate as they do.
`src/worker/audit-web/leaderboard-render.ts` already carries a comment
describing this behaviour from a previous `SPEC_VERSION` bump, so it is
expected rather than new.

Merge-order note: this PR and #426 both regenerate
`src/worker/spec-version.gen.ts` on adjacent lines (`SPEC_VERSION` here,
`ANC_VERSION` there). Whichever merges second should regenerate the file
with `bun src/build/00-spec-version-gen.mjs` rather than hand-resolving
a conflict.

## Checklist

- [x] Code follows project conventions and style guidelines
- [x] Commit messages follow [Conventional
Commits](https://www.conventionalcommits.org/)
- [x] Self-review of code completed
- [x] Tests added/updated and passing
- [x] No new warnings or errors introduced
- [x] Changes are backward compatible (or breaking changes documented)

## Additional Context

Two things found while doing this that are not fixed here:

- The spec's `publish.yml` dispatches a `spec-release` event to this
repo and to `agentnative-cli` on every tagged release, with the loop
commented "Non-fatal: downstream consumers opt in when they wire
handlers." Neither repo has a handler, so the dispatch is a silent no-op
and this sync had to be run by hand. `scripts/SYNCS.md` already tracks
the auto-PR handler as a follow-up.
- `tests/spec-version-hardcoding.test.ts` is a red-team guard against
`ANC_VERSION`-shaped literals in tests, but the literal fixed in this PR
was a `SPEC_VERSION` one and slipped through. Widening that guard to
cover all three markers would have caught it at authoring time.
brettdavies added a commit to brettdavies/agentnative-site that referenced this pull request Oct 5, 2026
## Summary

`src/data/anc/VERSION` tracks the currently-published `anc` release. The
build emits it as `ANC_VERSION` into `src/worker/spec-version.gen.ts`,
and the pages carry that value as `softwareVersion` in their JSON-LD
while the discovery documents report it to agents. It still read 0.5.0
after `anc` v0.6.0 published, so each of those surfaces named a release
that is no longer current.

Vendored through `scripts/sync-cli-version.sh`, which resolved v0.6.0
from the cli repo at the release commit, followed by a regeneration of
the emitted constant. Two files, two lines.

`SPEC_VERSION` and `SITE_SPEC_VERSION` stay at 0.5.0. The spec's own
0.6.0 release is an open PR (brettdavies/agentnative#56), and the
vendored spec version follows that release rather than the CLI's.

Nothing here changes what the live scorer runs. `ANC_VERSION` states
which `anc` release is published; the binary that executes an audit is
the one baked into the sandbox container image, which this PR does not
touch. See the follow-ups below.

## Changelog

### Changed

- Report `anc` 0.6.0 as the published CLI release in page JSON-LD
(`softwareVersion`) and in the agent-facing discovery documents.

## Type of Change

- [x] `fix`: Bug fix (non-breaking change which fixes an issue)

## Related Issues/Stories

- Story: n/a
- Issue: n/a
- Architecture: `scripts/SYNCS.md` step 4 ("CLI cuts a new tag (binary
release)")
- Related PRs: brettdavies/agentnative-cli#129 (the v0.6.0 release),
brettdavies/agentnative#56 (the spec 0.6.0 release this deliberately
does not anticipate)

## Files Modified

**Modified:**

- `src/data/anc/VERSION`: 0.5.0 to 0.6.0.
- `src/worker/spec-version.gen.ts`: regenerated, `ANC_VERSION` only.

**Created:**

- None.

**Renamed:**

- None.

**Deleted:**

- None.

## Testing

- [ ] Unit tests added/updated
- [ ] Integration tests added/updated
- [x] Manual testing completed
- [x] All tests passing

**Test Summary:**

Two existing guards already cover this change, so no new tests:
`tests/spec-version-gen.test.ts` fails when `spec-version.gen.ts` lags
the vendored `VERSION`, and `tests/spec-version-hardcoding.test.ts`
fails when a test carries an `ANC_VERSION`-shaped literal instead of
importing the constant.

Checked for values this bump would strand: every `0.5.0` literal
remaining in `tests/` and `src/` is a `spec_version` / `specVersion`
(unchanged by this PR) or an unrelated tool version in a fixture, and no
fixture hardcodes `anc_version`.

## Breaking Changes

- [x] No breaking changes

## Deployment Notes

- [x] No special deployment steps required

## Checklist

- [x] Code follows project conventions and style guidelines
- [x] Commit messages follow [Conventional
Commits](https://www.conventionalcommits.org/)
- [x] Self-review of code completed
- [x] Tests added/updated and passing
- [x] No new warnings or errors introduced
- [x] Changes are backward compatible (or breaking changes documented)

## Additional Context

Three pieces of the post-release cross-repo sync are deliberately left
out of this PR, because each needs work this one does not:

- **Sandbox container image.** `docker/sandbox/Dockerfile` still fetches
the v0.5.0 tarball, so live scoring keeps running `anc` 0.5.0. Advancing
it is the image flow in `RELEASES.md` § Sandbox image releases: rebuild,
push to the CF managed registry, advance
`env.staging.containers[0].image`, soak, then promote the top-level pin
at release time. Until that happens prod scores with 0.5.0, which is
stale but honest, since the scorecard reports the binary that ran.
- **Scored corpus.** The 96 scorecards under `scorecards/` were produced
by the older `anc`. Refreshing them is `bash docker/score/build.sh
--run`, a separate change with its own review surface.
- **`.anc.toml` fetch with `--repo`** in the sandbox install and batch
scoring, the deferred follow-up from the config-follows-the-repo plan.
That is a feature, not a version sync.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant