You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(agents),ci: release notes are release-owned, scoped re-verify, merge_group triggers (#4490)
* docs(agents),ci: release notes are release-owned, scoped re-verify, merge_group triggers
Three multi-agent throughput fixes from one PR's merge history (#4458 went
three full green CI cycles without landing — main merged 18 PRs in the same
6 hours, and two of its three conflicts were rows racing into the same
release-notes table):
1. `content/docs/releases/` is RELEASE-OWNED — never edited in a code PR.
Release notes are compiled centrally at release time from changesets + the
ADR-0087 registries; a per-PR appended row made `releases/v<major>.mdx` the
repo's hottest conflict magnet. Inlined in CLAUDE.md (the must-never-miss
set), added to the AGENTS.md Documentation Guardrails table, and the
spec-property-retirement skill's checklist item — the one instruction that
explicitly sent agents into that file — now routes through the changeset
instead.
2. AGENTS.md multi-agent §10 scopes the post-merge re-verify. The first
pull-main-and-full-suite round stays. Subsequent merges done only because
main moved during CI: rebuild + `check:generated` when spec moved on either
side, assert the branch's delta vs main is still exactly the PR's intent,
and reserve the full typecheck+test for semantic overlap or non-mechanical
conflicts. CI validates the merge commit either way; a 15-minute full lap
per merge is what turns a busy main into a livelock.
3. `merge_group:` triggers on the three required-check workflows (ci.yml,
lint.yml, spec-liveness-check.yml), so the repo can turn on GitHub's merge
queue — the race-free version of §10, run by the platform. ci.yml details:
the paths filter has no merge_group support, so queue builds treat
everything as changed (a skipped filter step's empty output falls back to
'true'), and the full-suite step runs on queue builds (the queue result IS
the next main). §7 now names the queue as the sanctioned path once an admin
enables it — the opposite of the auto-merge it bans, since the queue lands
only speculatively-merged-and-green results. pr-automation and
docs-drift-check are deliberately NOT queue-triggered (PR-context-bound;
must not be marked required).
Enabling the queue itself is a branch-protection setting only an admin can
flip; this commit makes the workflows ready for it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M9uWvoEp9CoLzYjNExj9sL
* chore: empty-frontmatter changeset — this PR releases nothing
The Check Changeset gate requires each PR to declare its release impact; the
sanctioned "releases nothing" declaration is an empty-frontmatter changeset
(per the gate's own inline doc), which a docs+workflow-only PR is exactly the
case for.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M9uWvoEp9CoLzYjNExj9sL
---------
Co-authored-by: Claude <noreply@anthropic.com>
|`content/docs/references/`|**AUTO-GEN**| ❌ Never hand-edit. Regenerated by `packages/spec/scripts/build-docs.ts`. |
284
+
|`content/docs/releases/`|**RELEASE-OWNED**| ❌ Never edit in a code PR. Release notes are written **centrally at release time**, compiled from changesets + the ADR-0087 registries — not accreted a row per PR. Per-PR appends made `releases/v<major>.mdx` the repo's hottest conflict magnet (three PRs raced the same table inside one afternoon), and every manual resolution risks dropping someone else's row. Your PR's input is its **changeset**; for spec removals also the D2/D3 registry entries. Factual error on a releases page → dedicated docs-only PR or an issue, never a rider on code changes. |
258
285
|`**/translations/*.generated.ts` (nine packages — `platform-objects`, five plugins, three services) |**AUTO-GEN**| ❌ Never hand-edit the file *structure*. Run `node scripts/check-i18n-bundles.mjs --write` to regenerate all nine (merge mode — every existing translation is preserved); `pnpm i18n:extract` still covers `platform-objects` alone. Translation *values* are hand-written and expected to be: the gate compares against a merge-mode extract, so editing a string is fine, while adding or dropping keys is drift. `pnpm check:i18n` gates all nine in CI, and `pnpm check:i18n-coverage` ratchets untranslated declared labels. |
259
286
|`content/docs/guides/`| hand-written | ✅ Update `meta.json` when adding pages. |
0 commit comments