Skip to content

release: v0.5.0 — p3 version MUST + p8 conditional applicability + audit rename - #44

Merged
brettdavies merged 16 commits into
mainfrom
release/v0.5.0-p3-version-p8-conditional
May 30, 2026
Merged

brettdavies merged 16 commits into
mainfrom
release/v0.5.0-p3-version-p8-conditional

Conversation

@brettdavies

Copy link
Copy Markdown
Owner

Summary

v0.5.0 of the agent-native CLI standard. Two principles gain normative content: p3 acquires a universal --version MUST plus a short-alias SHOULD; p8's machine-checkable applicability gains a typed {kind: conditional, antecedent: {audit_id: <id>}} shape that supersedes the prose-only {if: <reason>} form (p2 migrates as well). The standard's conformance vocabulary renames from check to audit across principle prose, the audit_id frontmatter field, and the anc audit subcommand. A leaderboard scoring formula lands in principles/scoring.md with a binary-behavior, credit-weighted ratio plus four cohort bands (Exemplary / Strong / Solid / Qualified) and a 70% eligibility floor. Governance gains the three-tier contribution framework (Signal / Proposal / Code), the last-revised discipline check now stamps any frontmatter mutation, and RELEASES.md splits into a runbook plus a companion rationale doc.

Changelog

Added

  • Three-tier contribution framework (Signal / Proposal / Code) in CONTRIBUTING.md with a "Where to file what" routing table covering all four repos by @brettdavies in #30
  • 00-blank.yml issue template, sort-prefixed to the top of the picker, with an agent-facing footer redirecting to structured templates
  • Fourth contact_link in .github/ISSUE_TEMPLATE/config.yml routing skill-bundle issues to the bundle repo
  • p3-must-version (universal MUST): top-level --version prints a non-empty version line and exits 0. by @brettdavies in #33
  • p3-should-version-short (universal SHOULD): a short alias (-V per clap default; -v per Node/npm/Bun/Yarn/Make convention; -version per Go's flag package) accompanies --version. Any of the three forms is sufficient.
  • Conditional applicability shape {kind: conditional, antecedent: {check_id: <id>}} for machine-checkable conditionals. The check_id is a verifier identifier, not a requirement id; the v1 schema is single-antecedent only, with compound antecedents (op/checks) deferred to v2 and rejected by the validator. by @brettdavies in #34
  • Antecedent-status propagation table mapping the antecedent's status (under the 7-status taxonomy: pass, warn, fail, opt_out, n_a, skip, error) to the consequent's emission, including the inheritance rules for skip and error.
  • Add principles/scoring.md defining the leaderboard scoring formula: a binary-behavior, credit-weighted ratio with opt_out counted and n_a/skip/error excluded, plus four badge cohort bands. by @brettdavies in #39

Changed

  • Issue template grade-a-cli.yml renamed to grading-finding.yml, with name, description, and labels updated to match the actual purpose by @brettdavies in #30
  • RELEASES.md reduced from runbook-plus-rationale (339 lines) to runbook-only (201 lines), cross-linking the new rationale doc
  • AGENTS.md updated from three-repo to four-repo ecosystem; template references updated
  • scripts/prose-check.sh default LANGUAGETOOL_URL is now http://languagetool:8081 (service-name default; consumers override via env var)
  • Migrate p2 (p2-must-schema-print, p2-should-schema-file) and p8 (p8-must-bundle-install, p8-may-install-all, p8-may-bundle-update) applicability from {if: <reason>} to the new shape. Antecedent for p2 is p2-json-output; for p8 is p8-bundle-exists. No tier changes. by @brettdavies in #34
  • last-revised discipline tightened: any frontmatter mutation (summary rewrites, applicability shape migrations, tier changes, requirement add/remove, status flips, reordering) stamps today's date. Prose-only edits below the closing --- fence remain exempt. Enforced by scripts/check-last-revised.mjs at pre-push and PR CI. by @brettdavies in #38
  • Lower the badge eligibility floor from 80% to 70%. by @brettdavies in #39
  • Replace the badge's three-color threshold with four cohort bands (Exemplary >= 85, Strong 80-84, Solid 75-79, Qualified 70-74).
  • Rename the conditional-antecedent frontmatter field check_id to audit_id. This is a breaking change to the principle-frontmatter shape: consumers that parse applicability.antecedent read audit_id instead of check_id. by @brettdavies in #40
  • Rename the standard's conformance vocabulary from check to audit (the anc audit subcommand, "audit IDs", "auditor") across principle prose and governance docs.

Fixed

  • Backfilled last-revised on p1, p2, p4, p5, p6, p7, p8 to match each file's most recent substantive frontmatter change. p3 was already correct. by @brettdavies in #38
  • The last-revised discipline check runs only on PRs targeting dev, so release PRs to main no longer fail it for principles revised on an earlier day. by @brettdavies in #41

Removed

  • docs/architecture/languagetool-deployment.md (deployment knowledge compounded into the shared solutions-docs repo as self-hosted-languagetool-for-prose-check-stacks-2026-05-20.md) by @brettdavies in #30

Linked audit review

no audit changes needed — the anc repo is pinned at vendored spec v0.4.0 and re-vendors on the v0.5.0 tag; a verifier for p3-must-version (the only new MUST) is a downstream follow-up, not a spec-release blocker.

Human reviewer

Reviewer: @brettdavies

AI disclosure

Cherry-pick assembly, conflict resolution, CHANGELOG generation, and PR-body drafting performed by Claude (Opus 4.7) under direct supervision; all normative principle content and PR-body Changelog bullets originate from human-authored upstream PR bodies.

…aul, releases split (#30)

Establishes a four-repo contribution framework so visitors and agents
land on the right intake for their contribution shape. Pairs
`RELEASES.md` as a runbook with a new `RELEASES-RATIONALE.md` decision
log, separating operational steps from the "why" behind them. Renames
the `grade-a-cli` issue template to `grading-finding` to match its
actual purpose (spec-feedback derived from scoring a real CLI, not a
registry submission). Scrubs personal-environment hostnames from
prose-check tooling so the LanguageTool integration documents the
service generically. Folds in mechanical pre-push fixes (markdown wrap
to 120 cols, Vale vocab additions, one spec-voice rewrite) so the branch
lands hook-clean.

- Three-tier contribution framework (Signal / Proposal / Code) in
`CONTRIBUTING.md` with a "Where to file what" routing table covering all
four repos
- `00-blank.yml` issue template, sort-prefixed to the top of the picker,
with an agent-facing footer redirecting to structured templates
- Fourth `contact_link` in `.github/ISSUE_TEMPLATE/config.yml` routing
skill-bundle issues to the bundle repo

- Issue template `grade-a-cli.yml` renamed to `grading-finding.yml`,
with `name`, `description`, and `labels` updated to match the actual
purpose
- `RELEASES.md` reduced from runbook-plus-rationale (339 lines) to
runbook-only (201 lines), cross-linking the new rationale doc
- `AGENTS.md` updated from three-repo to four-repo ecosystem; template
references updated
- `scripts/prose-check.sh` default `LANGUAGETOOL_URL` is now
`http://languagetool:8081` (service-name default; consumers override via
env var)

- `docs/architecture/languagetool-deployment.md` (deployment knowledge
compounded into the shared `solutions-docs` repo as
`self-hosted-languagetool-for-prose-check-stacks-2026-05-20.md`)

No check changes needed. This PR only touches contributor-facing intake,
runbook organization, and prose-check tooling. No MUST/SHOULD/MAY tier
add, remove, or move, no requirement ID changes, no frontmatter shape
changes.

**Reviewer:** @brettdavies

Drafted with Claude as a writing partner across multiple sessions. Brett
reviewed and committed every change.

**Modified:**

- `.github/ISSUE_TEMPLATE/config.yml`: fourth `contact_link` for
skill-bundle issues
- `AGENTS.md`: three-repo to four-repo ecosystem; template references
- `CONTRIBUTING.md`: three-tier framework, four-way routing table, AI
disclosure pointer
- `RELEASES.md`: runbook-only (rationale moved out)
- `docs/architecture/voice-enforcement.md`: LanguageTool URL scrubbed,
redirect to shared solution doc
- `scripts/hooks/pre-push`: header prose scrubbed of
personal-environment hostnames
- `scripts/prose-check.sh`: default `LANGUAGETOOL_URL` is service-name
(`http://languagetool:8081`)
- `styles/config/vocabularies/brand/accept.txt`: added `backports`,
`implementer/s`, `runbook/s`

**Created:**

- `.github/ISSUE_TEMPLATE/00-blank.yml`: blank template with
agent-facing footer
- `RELEASES-RATIONALE.md`: release-pipeline decision log

**Renamed:**

- `.github/ISSUE_TEMPLATE/grade-a-cli.yml` →
`.github/ISSUE_TEMPLATE/grading-finding.yml`

**Deleted:**

- `docs/architecture/languagetool-deployment.md` (compounded into
`solutions-docs`)

- Story: n/a
- Issue: n/a
- Architecture: Shared infrastructure pattern compounded into
`solutions-docs` as
`self-hosted-languagetool-for-prose-check-stacks-2026-05-20.md`
- Related PRs: Parallel `CONTRIBUTING` refresh and `RELEASES`-split work
is being prepared in `agentnative-cli`, `agentnative-site`, and
`agentnative-skill`.

The `RELEASES.md` and `RELEASES-RATIONALE.md` split mirrors the pattern
introduced in `agentnative-site` and is being rolled out across all four
ecosystem repos in parallel sessions. The runbook holds commands, paths,
and decision tables for cutting a release; the rationale doc holds the
"why" behind branching choices, PR conventions, release gating,
CHANGELOG generation, and the prose-check pipeline.

The `grade-a-cli` rename closes a long-standing misframing. That
template was originally for spec-feedback findings derived from scoring
a real CLI, but its name suggested it was the path for adding a CLI to
the registry. The actual registry-submission path is
`add-tool-to-registry.yml` in the `agentnative-cli` repo. The two
intakes now have clear, non-overlapping names.

The LanguageTool URL scrub removes references to a developer-environment
hostname from shipped artifacts (`scripts/prose-check.sh`,
`scripts/hooks/pre-push`, `docs/architecture/voice-enforcement.md`). The
default URL is now the docker-compose service name
(`http://languagetool:8081`), and consumers without a self-hosted
instance get a graceful skip from the prose-check stack.
…ersion pin (#31)

Folds in the in-flight prose-tooling refactor that was sitting as WIP on
`dev`, closes two stale plan-status flips
from the v0.4.0 wave, relocates a pair of operational coordination plans
out of `docs/plans/`, and corrects an
outdated version pin in the README. Four concerns:

- `refactor(prose)` + `chore(prose)`: `scripts/prose-check.sh` now
sources the shared `lt_check` shell helper from
`brettdavies/dotfiles` instead of carrying its own LT_URL probe,
denylist, and per-file curl loop. Architecture
doc and consumer guidance (`CONTRIBUTING.md` § Voice enforcement,
`RELEASES.md` § Prose scrubbing) updated to name
`lt_check` as the only supported entry point so all four agentnative
repos share one source of truth. Brand
vocabulary picks up `denylist` and `longCode`; one non-normative `must`
in the architecture doc rephrased to
descriptive voice so the MUST/SHOULD/MAY axis stays reserved for the
principles.
- `docs(plans)`: flips two v0.4.0-era plans from `active` → `shipped`
(P2/P4 envelope SHOULDs landed in v0.4.0 PR
operational coordination plan from `docs/plans/`. Operational
coordination working docs belong with their sibling
  artifacts under `.context/`, not in tracked spec governance.
- `docs(readme)`: bumps the inline version pin on `README.md:17` from
v0.3.1 to v0.4.0 to match `VERSION` and the
  eight-principle surface.

-

-

-

-

-

No check changes needed. The PR introduces no MUST/SHOULD/MAY tier
additions, removals, or moves. Prose-only README
polish + plan status flips + script-side LT delegation; the
`requirements[]` contract is unchanged.

**Reviewer:** @brettdavies

Claude Code authored the commit messages, this PR body, the `lt_check`
refactor in `scripts/prose-check.sh`, and the
plan-status frontmatter flips. The `lt_check` helper itself (in
`brettdavies/dotfiles`) was authored separately; the
CONTRIBUTING / RELEASES / voice-enforcement consumer-side updates are
Claude-authored against the helper's contract.
Brett reviewed before merge.
…#33)

## Summary

Adds two P3 requirements that the existing
`agentnative-cli::VersionCheck` was already enforcing in spirit. The
cli's
coverage matrix listed `p3-version` as a check with no spec requirement
to point its `covers()` at, even though the
principle's prose section already named `p3-version` as a measurement
vector. This PR aligns the frontmatter with the
prose and the cli implementation.

## Changelog

### Added

- `p3-must-version` (universal MUST): top-level `--version` prints a
non-empty version line and exits 0.
- `p3-should-version-short` (universal SHOULD): a short alias (`-V` per
clap default; `-v` per Node/npm/Bun/Yarn/Make convention; `-version` per
Go's `flag` package) accompanies `--version`. Any of the three forms is
sufficient.

## Linked check review

brettdavies/agentnative-cli#55

The cli companion PR extends `VersionCheck` to probe both `--version`
and the short-alias family (`-V`, `-v`, `-version`)
with a Pass/Warn/Fail rubric: Pass when both work, Warn when only
`--version` works (MUST satisfied, SHOULD missed),
Fail when neither works. `covers()` returns the two new IDs. Coverage
matrix on that branch is regenerated and the
registry test counters move from 57 -> 59 (with MUST 27 -> 28 and SHOULD
20 -> 21).

## Human reviewer

**Reviewer:** @brettdavies

## AI disclosure

AI-assisted edit. The audit that surfaced the gap, the requirement text,
and the rationale in this body were drafted
during a pairing session with Claude (Anthropic). The repo maintainer
reviewed and approved before submission. Spec
validation (`scripts/validate-principles.mjs`) and prose tooling (Vale,
LanguageTool, unslop) ran on the change.
## Summary

Adds a machine-checkable conditional applicability shape to the
principle frontmatter so verifiers can drive consequent evaluation from
an antecedent's status rather than from a prose-only reason string. The
new shape coexists with the existing `universal` and `{if: <reason>}`
forms. Authors pick the machine-checkable form whenever the antecedent
has a verifier in the CLI's catalog today.

Migrates the five conditional requirement rows whose antecedents already
have CLI verifiers: `p2-must-schema-print` and `p2-should-schema-file`
(antecedent `p2-json-output`); `p8-must-bundle-install`,
`p8-may-install-all`, and `p8-may-bundle-update` (antecedent
`p8-bundle-exists`). The remaining 18 `{if: <reason>}` rows across p1,
p3, p4, p5, p6, p7 stay as-is until the CLI's verifier catalog grows to
cover their prerequisites.

Lands U1 of the [Path 2 scoring-fairness
plan](https://github.com/brettdavies/agentnative-site/blob/dev/docs/plans/2026-05-21-001-feat-scorecard-fairness-taxonomy-plan.md).
The 7-status taxonomy and the propagation table are documented here so
U2 (CLI) can implement the verifier-side semantics against a stable
contract.

## Changelog

### Added

- Conditional applicability shape `{kind: conditional, antecedent:
{check_id: <id>}}` for machine-checkable conditionals. The `check_id` is
a verifier identifier, not a requirement `id`; the v1 schema is
single-antecedent only, with compound antecedents (`op`/`checks`)
deferred to v2 and rejected by the validator.
- Antecedent-status propagation table mapping the antecedent's status
(under the 7-status taxonomy: `pass`, `warn`, `fail`, `opt_out`, `n_a`,
`skip`, `error`) to the consequent's emission, including the inheritance
rules for `skip` and `error`.

### Changed

- Migrate p2 (`p2-must-schema-print`, `p2-should-schema-file`) and p8
(`p8-must-bundle-install`, `p8-may-install-all`, `p8-may-bundle-update`)
applicability from `{if: <reason>}` to the new shape. Antecedent for p2
is `p2-json-output`; for p8 is `p8-bundle-exists`. No tier changes.

## Linked check review

Coupled-release pending. The CLI's `Applicability` parser does not
recognize `{kind: conditional, antecedent: {check_id}}` today and will
skip or error on the five migrated rows once it next syncs the spec. U2
of the [Path 2
plan](https://github.com/brettdavies/agentnative-site/blob/dev/docs/plans/2026-05-21-001-feat-scorecard-fairness-taxonomy-plan.md)
extends the CLI's parser and emits the propagation table semantics. No
spec `VERSION` bump in this PR: the bump lands with the release PR that
closes out the taxonomy unit.

## Human reviewer

**Reviewer:** @brettdavies

## AI disclosure

Schema extension, validator branch, AGENTS.md propagation table, and p8
prose re-expression drafted by Claude under direct supervision; design
decisions (where the new shape lives, what `check_id` references,
migration scope) reviewed and approved interactively before any file
changes landed.
## Summary

Updates `docs/syncs.md` to reflect three reality shifts in the
downstream sync mechanism that the doc had drifted away from:

1. **All three consumer scripts** (cli, skill, site) now use `gh api`
against the GitHub contents endpoint to vendor files at a resolved ref,
not `git clone`. Same code path covers branches, tags, and commit SHAs
via the `?ref=<X>` query parameter; local-checkout fallback covers
offline runs. The doc previously described only the cli + skill scripts
and called the resolution "remote-first, falls back to local."
2. **The `--ref <branch|tag|SHA>` flag** (and matching `SPEC_REF`
environment variable) is now uniform across all three scripts. The use
case is cross-repo coordination: a CLI or site change that consumes an
in-flight spec contract can vendor `dev` (or a specific SHA) before the
spec cuts a tag, then re-sync to the tag once it lands. The flag existed
on the scripts but wasn't documented anywhere central.
3. **The site repo's sync had shipped** but the doc still marked it
"PLANNED, not yet built," stale since the
`2026-04-23-001-feat-sync-spec-plan.md` plan landed in the site repo.
Refreshed to describe the live mechanism (`scripts/sync-spec.sh` →
`src/data/spec/`, `SPEC_VERSION` consumed via `src/build/util.mjs`).

Also corrects the mermaid diagram (site arrow is now solid
`manual<br/>sync-spec.sh`, no longer dashed `planned`), the
file-paths-per-consumer table (real `src/data/spec/` instead of
`(planned, e.g. ...)`), and the "consistency reference" section at the
bottom (real path for the site script, not a plan reference).

No functional change. The scripts and flag already exist; the doc just
catches up to reality.

## Changelog

<!-- Prose-only doc clarification; nothing user-facing changed in the
spec itself. Per template guidance, omitted. -->

## Linked check review

No check changes needed. This PR touches `docs/syncs.md` only. No
principle frontmatter, no `requirements[]` changes, no tier moves. The
CLI's `Applicability` parser is unaffected.

## Human reviewer

**Reviewer:** @brettdavies

## AI disclosure

PR body drafted by Claude under direct supervision. The underlying
commit (`c2d9673`) was authored by Brett directly; this PR is the
review-surface wrapper around an already-committed docs change.
## Summary

Adds a `shellcheck --severity=warning` step to the pre-push hook between
the pack-README drift check and the prose-check stage. Lints every
tracked `*.sh` plus everything under `scripts/hooks/` at warning
severity, which catches real bugs (unused vars, quoting issues, missing
exits) while ignoring info/style noise. Skips with a one-line note when
shellcheck isn't on PATH. Zero findings on the current tree, including
the hook script itself.

Mirrors the pattern landed in [`agentnative-cli` commit
`a014240`](brettdavies/agentnative-cli@a014240).
The doc-comment block in the new shell-linting section was worded so
lines starting with `# shellcheck` (which would otherwise be parsed as
SC1072/SC1073 directives) are avoided.

The rebase onto dev (after retargeting this PR from `main` → `dev`)
carried three small consistency edits in the same file so the resulting
diff stays self-contained:

- Renumbered the header pipeline list: shellcheck takes step 8;
prose-check is now step 9.
- Updated the "branch deletions" comment from "stages 7 and 8 redirect
their child stdin to /dev/null" to "stages 7 and 9," since the new step
8 (shellcheck) doesn't redirect stdin.
- Preferred dev's prose-check description ("plus LanguageTool when
reachable") over the older base's wording ("plus LanguageTool over
Tailscale when reachable").

## Changelog

<!-- CI / hook plumbing only; no user-facing change in the spec
contract. Per template guidance, Changelog is omitted. -->

## Linked check review

No check changes needed. This PR touches `scripts/hooks/pre-push` only.
No principle frontmatter, no `requirements[]` changes, no tier moves.

## Human reviewer

**Reviewer:** @brettdavies

## AI disclosure

Hook edits, doc comments, SC1072/SC1073 collision avoidance, conflict
resolution during the rebase onto dev, and this PR body were AI-drafted
under direct supervision. Branch authoring, scope decision, slot
placement between the pack-README drift and prose-check stages, and the
base-branch retarget were Brett's calls.
…#37)

## Summary

`.github/pull_request_template.md` § `## Summary` now carries a SCOPE /
EXCLUDE block matching the `## Changelog` comment's instructional style.
The block tells the author to describe the net diff only and lists the
verification artifacts that don't belong in the body: triple-diff stats,
leak-check output, patch-id cherry-check counts, pre-push gate results,
CI status, prose-scrub findings, and any "I ran X and it returned Y"
narration.

`RELEASES.md` § PR body splits the previous single "no explainer prose"
bullet into three: the original general statement, a "Summary describes
the net diff only" bullet covering scope, and a "Zero verification
artifacts in the body" bullet naming the banned outputs.

`RELEASES-RATIONALE.md` § "No explainer prose in the body" gains the
"net diff" frame and the specific example phrasings ("A: 12 files, B:
none, C: clean", "`guard-main-docs` runs clean", "no guarded paths
leaked") so future readers recognize the patterns they shouldn't write.

## Changelog

<!-- Prose-only clarification of an existing rule; no requirement
semantics change. -->

## Linked check review

No check changes needed. PR template and release docs only; no principle
text or requirement semantics changed, so `anc` has nothing new to
validate.

## Human reviewer

**Reviewer:** @brettdavies

## AI disclosure

AI (Claude Opus 4.7) drafted the audit findings, the three edits, and
this PR body; @brettdavies reviewed the audit, scoped the work to a new
feature branch, and approved the SCOPE / EXCLUDE wording before
submission.
…es (#38)

## Summary

Tightens the principle `last-revised` rule so any frontmatter mutation
stamps today's date, adds `scripts/check-last-revised.mjs` to enforce
the rule at pre-push and PR CI (with a `--fix` flag), and backfills
seven principle files whose dates had drifted because the old rule's
"prose-only" carve-out was ambiguous enough to skip applicability-shape
migrations and `summary` rewrites.

Audit found one file (p3) where the discipline was followed correctly.
Six files were off by 1 to 15 days; the worst cases were p2 and p8 (PR
#34 conditional-applicability migration) and p5/p7 (summary rewrites in
#25/#22). The backfill diff touches only `last-revised`, so it does not
trigger the new check, because the rule fires on frontmatter-sans-date
deltas and the backfill leaves frontmatter-sans-date unchanged.

## Changelog

### Changed

- `last-revised` discipline tightened: any frontmatter mutation (summary
rewrites, applicability shape migrations, tier changes, requirement
add/remove, status flips, reordering) stamps today's date. Prose-only
edits below the closing `---` fence remain exempt. Enforced by
`scripts/check-last-revised.mjs` at pre-push and PR CI.

### Fixed

- Backfilled `last-revised` on p1, p2, p4, p5, p6, p7, p8 to match each
file's most recent substantive frontmatter change. p3 was already
correct.

## Linked check review

no check changes needed: this PR is governance + tooling only and does
not alter any MUST/SHOULD/MAY tier, requirement ID, or applicability
shape. `anc`'s vendored `spec/` will pick up the corrected dates on its
next sync.

## Human reviewer

**Reviewer:** @brettdavies

## AI disclosure

Audit, script, tests, hook wiring, CI workflow, and PR body authored by
Claude (claude-opus-4-7) under human direction. Human reviewed the
design decision to compare `last-revised` against today's date rather
than against the base ref, and approved the backfill date choices.
… cohort bands (#39)

## Summary

Introduces the spec's scoring methodology, which was previously
undefined. `principles/scoring.md` becomes the single source of truth
for how a per-requirement scorecard collapses into the `score_pct`
behind the `anc.dev` leaderboard and badge.

The score reflects shipped-binary behavior only. Source-code and
repository checks do not contribute to the public score; they are
reserved for a future advisory mode. The formula is a credit-weighted
ratio (pass 1.0, warn 0.5, fail and opt_out 0.0) over the rows whose
status is pass/warn/fail/opt_out, with n_a/skip/error excluded.
`opt_out` counts in the denominator so deliberate non-adoption is
reflected. Tier weights are a tunable parameter, published flat (MUST =
SHOULD = MAY = 1).

`docs/badge.md` now references `scoring.md` for the formula rather than
restating it, lowers the eligibility floor from 80% to 70% so the badge
can spread the standard, and replaces the three-color threshold with
four cohort bands that carry the exclusivity signal.

## Changelog

### Added

- Add `principles/scoring.md` defining the leaderboard scoring formula:
a binary-behavior, credit-weighted ratio with `opt_out` counted and
`n_a`/`skip`/`error` excluded, plus four badge cohort bands.

### Changed

- Lower the badge eligibility floor from 80% to 70%.
- Replace the badge's three-color threshold with four cohort bands
(Exemplary >= 85, Strong 80-84, Solid 75-79, Qualified 70-74).

## Linked check review

no check changes needed in this PR. U3 documents the formula;
implementing `score_pct` against it in the CLI is the separate follow-on
unit (the CLI currently ships a transitional formula and is unchanged
here).

## Human reviewer

**Reviewer:** @brettdavies

## AI disclosure

`scoring.md` and the `badge.md` edits were AI-drafted from a 95-tool
binary-behavior rescore analysis and the formula, floor, and cohort-band
decisions Brett directed interactively. Pending Brett's review on this
PR.
This PR brings the spec's conformance vocabulary in line with the CLI's
`check` to `audit` rename. The net change versus `dev`: the
conditional-antecedent frontmatter field is renamed `check_id` to
`audit_id` across the principle files and the validator that enforces
it, and the human-facing vocabulary shifts from "check"/"checker" to
"audit"/"auditor" throughout the standard's prose, the PR template, and
the historical plans.

Unrelated uses of the word "check" are deliberately preserved: the
prose-check (Vale/LanguageTool) pipeline, CI status checks, the repo's
own `check-links`/`check-last-revised` tooling, and plain-English usage.

This is a coupled, breaking change. The companion rename in
`agentnative-cli` parses `audit_id` and emits `schema_version: 2.0`. Do
not merge until the companion CLI PR is linked below and both can land
together; shipping `audit_id` in the spec ahead of the CLI would break
the vendored-frontmatter parser.

- Rename the conditional-antecedent frontmatter field `check_id` to
`audit_id`. This is a breaking change to the principle-frontmatter
shape: consumers that parse `applicability.antecedent` must read
`audit_id`.
- Rename the standard's conformance vocabulary from `check` to `audit`
(the `anc audit` subcommand, "audit IDs", "auditor") across principle
prose and governance docs.

Companion rename in progress on `brettdavies/agentnative-cli`
(`refactor/check-to-audit`): `build_support/parser.rs` parses
`antecedent.audit_id` under the v1-strict schema, and
`coverage/matrix.json` carries `audit_id` with `schema_version: 2.0`.
The PR URL will be added here before merge. This PR must not merge until
that companion PR is open and ready to land in lockstep.

**Reviewer:** @brettdavies

AI (Claude) executed the mechanical `check` to `audit` rename, updated
the validator, fixtures, and tests, and authored this PR; the scope
decisions (maximal rename, hold-the-release, rewriting historical plans)
and the review are human (@brettdavies).
…erator (#32)

Launch polish for the spec's consumer-facing docs (README and BRAND),
plus a correction and guard for the changelog tooling.

README, leading with the standard and deferring implementation
artifacts:

- Each P1–P8 row links to its principle file, and a new "Reading the
spec" section documents the machine-readable `requirements[]` contract
(`id`, `level`, `applicability`, `summary`) auditors pin against,
pointing to `principles/AGENTS.md` for the full governance contract.
- The sample scorecard becomes a pointer (anc's README and anc.dev), the
Scoring section becomes a pointer to `principles/scoring.md`, and the
embedded Live leaderboard table is removed. Those are artifacts of the
linter and site, not the canonical principle text.
- Badge section states the 70% eligibility floor, matching `scoring.md`
and `docs/badge.md`. Command references use `anc audit`, `anc emit
schema`, `--principle <1-8>`.
- Related is consolidated into sibling repos plus an in-repo doc map.

BRAND:

- Marks every channel as PRODUCT.md-earned and sharpens the
prose-tooling sync note. Adds `ripgrep` to the brand Vale vocabulary.

Changelog tooling:

- Collapse a duplicate `## [0.4.0]` section. A re-prepend had left a
second block with a broken `v0.4.0...v0.4.0` self-compare above the
canonical `v0.3.1...v0.4.0` one; the blocks were byte-identical and the
bullets match PR #25, release PR #26, and the published GitHub Release,
so no content changed.
- Guard `generate-changelog.sh` against prepending a version whose
section already exists, so the duplicate cannot recur.

_Documentation and release-tooling only: no changes to the standard's
requirements, tiers, applicability gates, or requirement IDs._

No audit changes needed. This PR touches `README.md`, `BRAND.md`, the
brand Vale vocabulary, `CHANGELOG.md` (de-dup), and
`scripts/generate-changelog.sh` (guard); it changes no principle text,
tier, applicability gate, or requirement frontmatter.

**Reviewer:** @brettdavies

AI-assisted: the README rework, the "Reading the spec" section, the
BRAND edits, the changelog de-dup, and the generator guard were
AI-drafted from the maintainer's direction and the repo's own sources
(PR #25/#26, `principles/scoring.md`, `principles/AGENTS.md`), then
reviewed by @brettdavies.
…n doc references (#41)

## Summary

Pre-release hygiene surfaced by a readiness audit of the `dev` → `main`
delta. No principle requirements change tier, ID, or applicability
shape.

- `check-last-revised.yml` now triggers only on PRs targeting `dev`. The
discipline is enforced when a principle change lands on `dev`; a release
PR to `main` replays those files unchanged, and comparing them against
`main`, which legitimately lags `dev`, flagged every principle revised
on a prior day as "date isn't today". The pre-push hook (which always
compares against `origin/dev`) still backstops a fresh principle edit
authored directly on a release branch.
- `principles/AGENTS.md` § Validation attributed the frontmatter
validation to a `.github/workflows/validate-principles.yml` workflow
that does not exist. Validation runs in the pre-push hook via
`scripts/validate-principles.mjs`; the text now says so.
- `RELEASES.md` § Branch protection listed a `ci` required status check
that does not exist and omitted `guard-provenance`. The required checks
are now stated as `guard-docs`, `guard-release`, `guard-provenance`.
- Pressure-test notes in P3, P4, P5, and P7 deferred several still-open
findings to "a v0.4.0 PR". v0.4.0 has shipped, so those disposition
labels now read "a future PR"; the deferred findings themselves remain
open and their verbatim quotes are untouched.

## Changelog

### Fixed

- The `last-revised` discipline check runs only on PRs targeting `dev`,
so release PRs to `main` no longer fail it for principles revised on an
earlier day.

## Linked audit review

No audit changes needed: prose-only pressure-test-note edits, a CI
trigger scope fix, and documentation corrections. No `requirements[]`
entry is added, removed, or re-tiered.

## Human reviewer

**Reviewer:** @brettdavies

## AI disclosure

AI-authored under human direction and review: the readiness audit, the
workflow scope fix, the documentation corrections, and the
de-versioning.
`PRODUCT.md`, `RELEASES.md`, and `RELEASES-RATIONALE.md` ship to `main`
but markdown-linked to `docs/architecture/`, which is dev-only (blocked
from `main` by `guard-main-docs.yml`). On a release branch those six
links resolve to nothing and fail `check-links`. Each link is now a
plain code-span path mention; the `(dev-only)` annotation and the path
itself stay, so the reference is still discoverable without a target
that breaks on `main`. `dev` and `main` now carry identical text for
these files, so no future release has to strip the links by hand.

No audit changes needed: documentation-only edit, no `requirements[]`
entry added, removed, or re-tiered.

**Reviewer:** @brettdavies

AI-authored under human direction and review.
PR #32's intentional em-dash -> colon swap on the Authoritative
content waterfall bullet got reverted during the PR #42 cherry-pick
conflict resolution. The other four PR #32 punctuation changes
(lines 10, 12, 64, 66) survived; this brings line 15 in line.
@brettdavies
brettdavies merged commit d5d4086 into main May 30, 2026
3 checks passed
@brettdavies
brettdavies deleted the release/v0.5.0-p3-version-p8-conditional branch May 30, 2026 18:29
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