Skip to content

release: PRODUCT.md migration + channel artifact stack docs#29

Merged
brettdavies merged 3 commits into
mainfrom
release/channel-artifacts-docs
May 13, 2026
Merged

release: PRODUCT.md migration + channel artifact stack docs#29
brettdavies merged 3 commits into
mainfrom
release/channel-artifacts-docs

Conversation

@brettdavies

Copy link
Copy Markdown
Owner

Summary

Ships PR #27 and PR #28 from dev. No principle changes, no VERSION bump; this release lands on main without producing a tag, GitHub Release, or downstream dispatch (per RELEASES.md § Release gating).

PR #27 broadens the No explainer prose anywhere in the body rule from ## Summary to the whole template and adds a new No hard line wraps rule covering PR bodies, heredoc commit messages, and any markdown that ships verbatim to GitHub.

PR #28 migrates the channel-design context filename from the legacy .impeccable.md to the canonical PRODUCT.md expected by the /impeccable skill loader, and adds previously-implicit architectural self-documentation: a ## Channel artifacts table in BRAND.md, a vendoring-source header that travels into consumer repos, a tier-3 location convention, an ## Inheritance section in PRODUCT.md, and a one-line canonical-filename policy in CONTRIBUTING.md. The principles/AGENTS.md reference sweep finished along with it; docs/architecture/voice-enforcement.md updates from the same PR stay on dev (guarded out of main).

Changelog

Added

  • Channel artifact stack documented in BRAND.md: ## Channel artifacts table, vendoring-source header that travels into consumer repos, and a tier-3 location convention note.
  • PRODUCT.md gains an ## Inheritance section naming the spec channel's three-tier waterfall (universal BRAND.md, channel-delta PRODUCT.md, authoritative principles/architecture/decisions).
  • CONTRIBUTING.md gains a one-line policy: PRODUCT.md is the canonical channel-design context filename; .impeccable.md is migrated atomically with no backward-compatibility shim.

Changed

  • Rename .impeccable.mdPRODUCT.md across the spec repo. Consumers vendoring BRAND.md pick up the rename on their next sync-prose-tooling.sh run.
  • Document No explainer prose anywhere in the body as a body-wide PR-authoring rule, replacing the narrower ## Summary-only bullet; the same do-not-paste guidance now covers every section of the PR template.
  • Document No hard line wraps as the PR-body, heredoc-commit-message, and ship-verbatim-markdown authoring rule, with rationale (GitHub soft-wrap, prose-check pipeline interactions) named in-line.

Linked check review

no check changes needed. This release ships only documentation and governance prose; no requirements[] entry is added, removed, or re-tiered.

Human reviewer

Reviewer: @brettdavies

AI disclosure

Cherry-picks, conflict resolution (dropping docs/architecture/voice-enforcement.md per the guard), triple-diff verification, and PR body drafted by Claude (Opus 4.7) in Claude Code under @brettdavies's direction. Upstream PR #27 and #28 bodies were human-reviewed at merge; the release-PR body repeats their ## Changelog entries verbatim per RELEASES.md.

## Summary

Broadens the existing **Summary** bullet in RELEASES.md `## PR body` to
**No explainer prose anywhere in the body**, applying the same
do-not-paste guidance (workflow recap, triple-diff output, pre-push gate
results, CI status, exclusion rationale, verification artifacts) to
every section of the PR template rather than just `## Summary`. The
narrower scoping was producing the anti-pattern in `## Linked check
review` and `## Human reviewer` where authors were padding the actual
answer with justification prose; the broader rule names the pattern once
and covers every section.

Adds a new **No hard line wraps** bullet covering PR bodies,
heredoc-composed commit messages, and any markdown that ships verbatim
to GitHub. Paragraphs and bullets are authored as one logical line
because GitHub soft-wraps for display and hard wraps within prose
produce visible mid-sentence breaks in some renderers, while also
defeating the prose-check pipeline: Vale's line-anchored output reports
findings against split lines, and LanguageTool's input handling can
choke on certain control-char interactions across wrapped boundaries.

Both bullets are themselves authored one-logical-line-per-paragraph; the
rule applies first to the PR that documents it. The scope is the GitHub
API surface (PR bodies, commit message subjects/bodies, release notes);
in-repo markdown still wraps at 120 cols via `md-wrap.py`, which is why
this PR's RELEASES.md additions are themselves wrapped while the rule
they document covers content that bypasses that wrapping step.

`styles/config/vocabularies/brand/accept.txt`: adds `heredoc`,
`renderer`, `renderers` so the new RELEASES.md prose passes pre-push
Vale.Spelling. No other prose touched these words yet; additions support
the new paragraph and are not a broader vocabulary expansion.

## Changelog

### Changed

- Document **No explainer prose anywhere in the body** as a body-wide
PR-authoring rule, replacing the narrower `## Summary`-only bullet; the
same do-not-paste guidance now covers every section of the PR template.
- Document **No hard line wraps** as the PR-body,
heredoc-commit-message, and ship-verbatim-markdown authoring rule, with
rationale (GitHub soft-wrap, prose-check pipeline interactions) named
in-line.

## Linked check review

no check changes needed. RELEASES.md is governance prose, not a
`requirements[]` add/remove/re-tier.

## Human reviewer

**Reviewer:** @brettdavies

## AI disclosure

Rule wording and PR body drafted by Claude (Opus 4.7) in Claude Code
under @brettdavies's direction; Brett authored the underlying
working-tree edits to RELEASES.md and reviewed the commit, vocab
additions, and PR body before push.
Migrates the channel-design context filename from the legacy
`.impeccable.md` to the canonical `PRODUCT.md` expected by the
`/impeccable` skill loader, and adds architectural self-documentation
that was previously implicit.

Four commits, scoped to docs only (no principle/requirement changes):

1. **`ee675f7`** — Rename `.impeccable.md` → `PRODUCT.md` across live
references (BRAND.md, AGENTS.md, CONTRIBUTING.md, README.md, the
pack-README generator, Vale rule packs and YAML examples). Historical
artifacts under `docs/brainstorms/` and `docs/plans/` intentionally keep
the legacy spelling.
2. **`efeb3d8`** — Documents the channel artifact stack: BRAND.md gains
a `## Channel artifacts` table, a vendoring-source header that travels
into consumer repos, and a tier-3 location convention. PRODUCT.md gains
an `## Inheritance` section. CONTRIBUTING.md gains a one-line
canonical-filename policy.
3. **`d367f42`** — Finishes the rename sweep across
`principles/AGENTS.md` and `docs/architecture/voice-enforcement.md` (the
two stragglers M1 flagged but skipped).
4. **`5af8b30`** — Fixes a dangling markdown link to
`scripts/sync-prose-tooling.sh` in BRAND.md's source-of-truth blockquote
(the script lives in consumer repos, not spec).

- Channel artifact stack documented in `BRAND.md`: `## Channel
artifacts` table, vendoring-source header that travels into consumer
repos, and a tier-3 location convention note.
- `PRODUCT.md` gains an `## Inheritance` section naming the spec
channel's three-tier waterfall (universal `BRAND.md`, channel-delta
`PRODUCT.md`, authoritative principles/architecture/decisions).
- `CONTRIBUTING.md` gains a one-line policy: `PRODUCT.md` is the
canonical channel-design context filename; `.impeccable.md` is migrated
atomically with no backward-compatibility shim.

- Rename `.impeccable.md` → `PRODUCT.md` across the spec repo. Consumers
vendoring `BRAND.md` pick up the rename on their next
`sync-prose-tooling.sh` run.

no check changes needed — this PR is documentation-only and does not
add, remove, or move any MUST/SHOULD/MAY tier on any principle.

**Reviewer:** @brettdavies

Drafted with Claude Code (Opus 4.7) under Brett's direction;
commit-by-commit guidance and final wording were human-reviewed. The
rename sweep, BRAND.md additions, and dangling-link fix were generated
by the assistant from explicit instructions; Brett reviewed every diff
before commit.
The `## Inheritance` section added in PR #28 linked to docs/architecture/
relatively. That path exists on dev only; main excludes it via the
guard-main-docs workflow, so check-links rejected the push. Same pattern as
819b1b8.

Replace the broken link with plain backticks. The prose still names the path
as part of the three-tier waterfall; consumers reading on main just don't get
a click-through (which would 404 anyway).

BRAND.md line 87 already references docs/architecture/ in plain backticks (no
link), so no fix needed there.
@brettdavies brettdavies merged commit 1625416 into main May 13, 2026
3 checks passed
@brettdavies brettdavies deleted the release/channel-artifacts-docs branch May 13, 2026 22:21
brettdavies added a commit to brettdavies/agentnative-site that referenced this pull request May 14, 2026
## Summary

Reconciles the site to spec v0.4.0 (eight principles; the new P8 covers
Discoverable Through Agent Skill Bundles), migrates the channel-context
filename to the canonical `PRODUCT.md` expected by the `/impeccable`
skill loader, hoists `DESIGN.md` from `docs/` to the repo root for the
same reason, and refreshes the vendored `BRAND.md` plus Vale stack from
spec `main` HEAD. Decouples `sync-prose-tooling.sh` from spec release
tags (now tracks `main` so prose-tooling iterates on its own cadence),
un-vendors `scripts/prose-check.sh` (consumer-owned now; ends the
regression where every sync clobbered the SITE-LOCAL DIVERGENCE block),
and decouples the OG image's version footer from anc's binary so social
shares show the spec version the site currently presents.

## Changelog

### Added

- New principle **P8: Discoverable Through Agent Skill Bundles** at
`/p8` and `/p8.md`, plus card on the homepage index. Cites
`p8-must-bundle-install`, `p8-should-bundle-exists`,
`p8-may-install-all`, `p8-may-bundle-update` from spec v0.4.0.
- `## Inheritance` section in `PRODUCT.md` self-documenting the
three-tier waterfall (BRAND.md universal, PRODUCT.md channel delta,
DESIGN.md visual system).
- `## Channel artifacts` table and "Source of truth" header arrive in
`BRAND.md` from spec main.
- Voice docs (`docs/research/VOICE.md`) codify Register 1a (homepage
lede) vs 1b (principle page) split, with surface-specific notes for
both.
- `Definition-as-card coupling` documented in
`content/principles/README.md`: the Definition first paragraph is also
the homepage card and budgets to 2-3 sentences.

### Changed

- "Seven principles" sweeps to "Eight principles" across `_intro.md`,
`about.md`, `check.md`, `install.md`, `methodology.md`,
`scorecard-schema.md`, build comments, leaderboard hero, AI-summary
prompt.
- OG image decoupled from per-feature couplings on two axes: card text
no longer cites the principle count (now reads "a standard for CLIs that
agents can operate"), and the version footer now reads from
`content/principles/VERSION` (SITE_SPEC_VERSION, what the site presents)
instead of the highest `scorecards/anc-v*.json` (what anc was last
compiled against). The OG and in-page footer now always agree on the
version. Per-tool badge SVGs continue to use each scorecard's own
`spec_version` since they describe the binary that scored each tool.
- Rename `.impeccable.md` to `PRODUCT.md` (canonical filename for the
`/impeccable` skill loader's `load-context.mjs`).
- Hoist `docs/DESIGN.md` to `DESIGN.md` (root) so the loader finds it
without `IMPECCABLE_CONTEXT_DIR=docs/`.
- `scripts/sync-prose-tooling.sh` tracks spec `main` HEAD instead of
latest `v*` tag. The principle contract still pins to tags via
`sync-spec.sh`; tooling iterates faster than the contract and does not
need release ceremony.
- Re-sync `BRAND.md` and Vale stack (`scripts/generate-pack-readme.mjs`,
`styles/brand/README.md`, `styles/site/README.md`,
`styles/config/vocabularies/brand/accept.txt`) from spec main HEAD
`1625416`.
- `content/principles/p8-discoverable-skill-bundle.md` Definition
compressed from 4 sentences to 2 so the homepage card matches P1-P7
weight.

### Fixed

- `scripts/prose-check.sh` un-vendored (consumer-owned). The SITE-LOCAL
DIVERGENCE block (consumer-specific path exclusions and LT denylist
additions for `IN_PRINCIPAL`, `CONTRACT_CONTACT`, `TO_DO_HYPHEN`) was
being clobbered on every prose-tooling sync. Long-term sidecar-config
fix tracked at
`agentnative-spec/.context/compound-engineering/todos/012-pending-p3-prose-check-sidecar-config-and-revendor.md`.
- Vale file-pattern exemptions in `.vale.ini` updated for the renamed
paths (`PRODUCT.md`, `DESIGN.md`) so the policy docs that legitimately
enumerate banned fonts and aesthetics stop firing the rules they define.
- Stale `.impeccable.md` references swept across
`styles/site/BannedFonts.yml`, `styles/site/BannedAesthetics.yml`,
`styles/site/README.md`, `scripts/check-banned-fonts.sh`.
- Pre-existing biome and markdownlint blockers cleared (do.ts
suppression named the wrong rule; vendored `coverage-matrix.json`
flagged for format; one over-long bullet in `RELEASES.md`).

### Documentation

- Broaden `RELEASES.md` "no explainer prose" rule from `## Summary` only
to the entire PR body. Same do-not-paste guidance now covers every
section.

## Type of Change

- [x] `feat`: New feature (P8 + Inheritance section + Channel artifacts
table)
- [x] `refactor`: Code refactoring (PRODUCT.md / DESIGN.md renames,
sync-prose-tooling.sh main-tracking, prose-check.sh un-vendor, OG
version-source decoupling)
- [x] `docs`: Documentation update (Voice register codification,
Definition-as-card coupling note, RELEASES.md prose rule)
- [ ] `BREAKING CHANGE`: not breaking (anchor slugs preserved, all
`/p<n>` URLs stable, internal renames only)

## Related Issues/Stories

- Story: None.
- Issue: None.
- Architecture: spec PR
[#29](brettdavies/agentnative#29) (`release:
PRODUCT.md migration + channel artifact stack docs`) merged to spec
`main` 2026-05-13.
- Related PRs: cli `docs/migrate-impeccable-to-product` and skill
`docs/migrate-impeccable-to-product` (parallel migrations, not yet
PRed).

## Testing

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

**Test Summary:**

- Unit tests: 315 passing (regression #1 LOCKED_SLUGS extended to
include `p8-discoverable-skill-bundle`; regression #2 llms.txt bullet
count assertion updated to 8 in p1..p8 order; build.test.ts OG alt-text
snapshot updated to the count-decoupled string)
- Pre-push hook: passes (md-wrap, markdownlint 35 files / 0 errors,
check-links 48 files, validate-principles 8 files / 57 IDs, pack-README
drift, prose-check 0 blocking / 1100 warning)
- Coverage: not measured for site (no coverage tool wired)

## Files Modified

**Modified:**

- Content: `content/_intro.md`, `content/about.md`, `content/check.md`,
`content/install.md`, `content/methodology.md`,
`content/scorecard-schema.md`, `content/changelog.md`,
`content/principles/README.md`, `content/principles/VERSION` (and all
`content/principles/p1-*.md` through `p7-*.md` reconciled to spec
v0.4.0)
- Build: `src/build/build.mjs`, `src/build/coverage.mjs`,
`src/build/llms.mjs`, `src/build/scorecards-render.mjs`,
`src/build/shell.mjs`
- Voice docs: `docs/research/VOICE.md`
- Scripts: `scripts/sync-prose-tooling.sh`, `scripts/SYNCS.md`,
`scripts/og/og.html`, `scripts/og/generate.ts`,
`scripts/check-banned-fonts.sh`, `scripts/design/generate-palette.mjs`,
`scripts/prose-check.sh`
- Styles: `styles/site/README.md`, `styles/site/BannedFonts.yml`,
`styles/site/BannedAesthetics.yml`, `styles/brand/README.md`,
`styles/config/vocabularies/brand/accept.txt`,
`styles/config/vocabularies/site/accept.txt`
- Vendored: `BRAND.md`, `scripts/generate-pack-readme.mjs`,
`src/data/spec/` (vendored to v0.4.0), `src/data/coverage-matrix.json`
- Top-level: `AGENTS.md`, `RELEASES.md`, `.vale.ini`, `biome.json`
- Tests: `tests/build.test.ts`, `tests/regression.test.ts`
- Worker: `src/worker/score/do.ts`
- Public: `public/og-image.png`

**Created:**

- `content/principles/p8-discoverable-skill-bundle.md`

**Renamed:**

- `.impeccable.md` to `PRODUCT.md`
- `docs/DESIGN.md` to `DESIGN.md`

**Deleted:**

- None.

## Breaking Changes

- [x] No breaking changes.
- [ ] Breaking changes described below.

Anchor slugs preserved (`#p1-non-interactive-by-default` through
`#p8-discoverable-skill-bundle` are permanent). Per-principle URLs
unchanged for `/p1` through `/p7`; `/p8` is new. The `.impeccable.md` to
`PRODUCT.md` and `docs/DESIGN.md` to `DESIGN.md` renames are source-tree
paths, not user-facing URLs.

## Deployment Notes

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

OG image regenerated as part of this PR (`public/og-image.png`).
Cloudflare Worker deployment proceeds normally on merge. Social-share
platforms cache OG previews aggressively; expect Twitter, Slack, etc. to
keep showing the v0.3.0 card until they re-scrape `https://anc.dev/`.

## Checklist

- [x] Code follows project conventions and style guidelines
- [x] Commit messages follow Conventional Commits
- [x] Self-review of code completed
- [x] Tests added/updated and passing
- [x] No new warnings or errors introduced
- [x] Changes are backward compatible

## Additional Context

This PR completes the site-side half of the cross-repo migration
coordinated with `agentnative-spec`. Parallel work on `agentnative-cli`
and `agentnative-skill` is staged on
`docs/migrate-impeccable-to-product` branches in those repos pending
separate PRs.

The un-vendoring of `scripts/prose-check.sh` is a workaround. The
long-term sidecar-config fix (Option C in the cross-repo migration
analysis) is tracked upstream at
`agentnative-spec/.context/compound-engineering/todos/012-pending-p3-prose-check-sidecar-config-and-revendor.md`
(P3). When that lands, this site can re-vendor the script and drop the
CONSUMER-OWNED header.

The OG version-source decoupling is symmetric in spirit to the
prose-tooling decoupling: both sever a coupling that made the site lag
behind a downstream binary release. Per-tool badge SVGs intentionally
remain coupled to each scorecard's `spec_version` since they describe
the binary that scored that specific tool.
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