Skip to content

fix(spec): vendor agentnative-spec v0.6.0 - #136

Merged
brettdavies merged 1 commit into
devfrom
fix/sync-spec-0.6.0
Oct 5, 2026
Merged

brettdavies merged 1 commit into
devfrom
fix/sync-spec-0.6.0

Conversation

@brettdavies

Copy link
Copy Markdown
Owner

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

  • fix: Bug fix (non-breaking change which fixes an issue)

Related Issues/Stories

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
  • Manual testing completed
  • 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

  • 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

  • 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

  • Code follows project conventions and style guidelines
  • Commit messages follow Conventional Commits
  • Self-review of code completed
  • Tests added/updated and passing
  • No new warnings or errors introduced
  • 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.

The vendored spec read 0.5.0 while the registry already carried `p3-should-unprefixed-command-list`, so every scorecard declared conformance to a published standard that did not define a requirement it graded. Spec v0.6.0 publishes that SHOULD, and `spec_version` now reports 0.6.0.

Vendored through `scripts/sync-spec.sh`, which resolved v0.6.0 at 5077a5d. Only `VERSION` and the vendored `CHANGELOG.md` move: the principle text was already current, having been vendored from the spec's `dev` branch while the requirement was in flight, so the generated requirement set, the registry counts, and the coverage matrix are untouched.

`src/principles/spec/CHANGELOG.md` joins the markdownlint ignore list alongside the root changelog. The vendored file carries upstream's one-logical-line-per-bullet shape, which trips MD013, and wrapping it would make the vendored copy differ from upstream rather than match it byte for byte.
@brettdavies
brettdavies merged commit 1009f14 into dev Oct 5, 2026
9 checks passed
@brettdavies
brettdavies deleted the fix/sync-spec-0.6.0 branch October 5, 2026 03:11
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.
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