Repository navigation
chore: retire the A2ML spec registry and its gates (#1161) - #1213
Conversation
A2ML is retired (D99, D269c, D312, D313); descriptive metadata now lives in deed clauses, k9 contracts and the k9 coordination protocol. The registry generator kept writing .machine_readable/REGISTRY.a2ml, and "Registry + topology in sync" went red whenever that output drifted. It is red on main today because build-registry.sh hashed tracked lockfiles inside spec homes. Retire the machinery instead of regenerating it (D222 pattern): - delete registry-verify.yml, REGISTRY.a2ml, build-registry.sh, build-scorecards.sh and their two tests; - retire Hypatia HYP-S006 (registry-staleness) and HYP-S009 (implementation-inside-canon, whose only input was the registry), with the 16 HYP-S009 baseline entries (205 -> 189; debts stay tracked in #687); - drop the registry/topology/scorecards Justfile recipes, the pre-commit drift guard, the registry checks in the Mustfile and MUST.contractile, the Adjustfile/Dustfile staleness blocks and the registry-verify actions.lock entry; - keep TOPOLOGY.adoc and COMPLIANCE-DASHBOARD.adoc as frozen snapshots, and turn REGISTRY.adoc into the retirement notice with permalinks to 6d19ce0; - stop front doors, quickstarts, wikis and manifests routing readers to the registry (content deleted only in .a2ml files). registry-verify.yml also hosted two other gates. The Mustfile PR gate is unchanged: the required k9-contractile.yml runs the same two commands. The scorecard --verify (executing each pass row's check) is lost; the scorecards are frozen data pending R5 (#837), and REGISTRY.adoc says so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015bTuGfwCcvjrmNFejydTML
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
⛔ Files ignored due to path filters (1)
📒 Files selected for processing (45)
💤 Files with no reviewable changes (15)
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review. 📜 Recent review details⏰ Context from checks skipped due to timeout. (19)
🧰 Additional context used🪛 zizmor (1.30.1).github/workflows/self-test.yml[warning] 37-47: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false (artipacked) 📝 SummarySummary by CodeRabbit
WalkthroughThe change removes the machine-readable registry, its generators and related verification gates. It labels the topology and compliance dashboard as frozen snapshots and updates repository documentation to direct readers to current routing sources. ChangesRegistry and scorecard retirement
Priority: ➖ Normal Estimated code review effort: 4 (Complex) | ~45 minutes Change: Other · Severity of issue fixed: Medium Suggested reviewers: Merge Risk: ⚪ Minimal · up to The registry tooling is retired without an established failure in the remaining checks. The change is mergeable after normal checks. Architecture SummaryArchitecture risk: 🔵 Low · up to The change affects 20 systems. Changed systems: Architecture concerns Review detailsSystems and components
Before / after behavior
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)✨ Finishing Touches📝 Generate docstrings
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. A rabbit checks the burrow map, Comment |
K9 contract conformancerun https://github.com/hyperpolymath/standards/actions/runs/37905036622 K9 normative contract typecheckK9 contract self-testK9 conformance fixturesK9 corpus conformance (L2) |
|
…tacked on #1213) (#1214) ## Summary > **Rebased onto `main` after #1213 merged** (squash commit `9d629d11`, 2026-10-09T09:21Z). `git range-diff` shows the commit unchanged (`=`). `main` differs from #1213's head `ed4f98a3` only in `docs/AFFIRMATION.adoc` and `docs/affirmations/AFFIRMATION-2026-10-07.adoc` (#1212's follow-up `76773445`), so the measurements below that name the base `ed4f98a3` still hold for `main`. A2ML is retired (owner rulings D99, D269c, D312, D313). The files an agent reads first in this repo still told it to **create** the seven A2ML files: - `0-AI-MANIFEST.a2ml`: "The 7 A2ML files MUST exist", under a "UNIVERSAL RULE". - `.meta/REQUIRED-FILES.adoc`: "Mandatory A2ML Files". - `.claude/CLAUDE.md`: "Every Hyperpolymath repo must have `.machine_readable/` with these 6 A2ML files", plus an ALLOWED-languages row for A2ML. - `README.adoc`: the 7-format family table, the templates and the execution pipeline. So agents kept writing new A2ML, or rewriting old A2ML into "new" A2ML in a different shape, instead of producing the forms that replace it. This PR repoints every one of those front doors at the three live forms. Each form is named with its **normative grammar** in this repo and the **checker** that enforces it: | Form | Grammar | Check | |---|---|---| | `<repo>_chora.deed` at the repo root (D312) | `1-formats/deed/spec/abnf/deed.abnf` (normative, D308) | `bun 1-formats/deed/tools/deed_lint.js FILE.deed` | | `*.k9.ncl` contracts | `1-formats/k9/spec/K9-CONTRACT-SPEC.adoc` | `1-formats/k9/tools/k9-validate.sh --strict FILE` | | `coordination.k9` at the repo root | `2-protocols/k9-coordination/spec/abnf/coordination-k9-grammar_v1.1.abnf` + `COORDINATION-K9-SPEC.adoc` | no validator script yet (stated as such) | The front doors also point at the deed mapping specs (`1-formats/deed/mappings/`) for where former A2ML content goes ("anything a mapping spec does not list does not translate"), name `rsr-template-repo_chora.deed` as the worked model, and forbid bulk hand-conversion (D313). **Per file:** - **`.claude/CLAUDE.md`:** - "Machine-Readable Artefacts" is rewritten: the A2ML-retired paragraph, the three-form table, and notes on translation, the worked model, no bulk conversion, "a deed is not TOML", and existing `.a2ml` files. - The ALLOWED table's A2ML row is replaced by **deed** and **k9** rows. - The License Policy section is untouched. - **`.meta/REQUIRED-FILES.adoc`:** "Mandatory A2ML Files" becomes "Machine-Readable Metadata", with the same three forms and relative links. See Also now points at the deed README and COORDINATION-K9-SPEC. - **`AGENTS.adoc`:** adds the A2ML-retired paragraph. The validation line now names both checkers. - **`README.adoc`:** - New section "Machine-Readable Metadata", which the front-door table and the Overview link to. - The "A2ML Format Family (7 Formats)" table, the templates line and the "Execution Pipeline" are replaced by one short **retired-history** note. No deed-era execution ordering has been ruled, and deed lists carry no ordering, so the pipeline is not restated. - "Monorepo Architecture" gets a history NOTE. - The tree listing and Related Projects label the `1-formats/a2ml/*` specs and `1-formats/templates/` as retired history. - Usage step 2 now says to create `<repo>_chora.deed` (plus `coordination.k9` / `*.k9.ncl` where they apply) and not `.a2ml`. - The dead Document Formats link `tree/main/a2ml` (that directory does not exist) is replaced by a link to `1-formats/deed/`. - **`0-AI-MANIFEST.a2ml`: deletion only.** - Removed: the "CANONICAL LOCATIONS (UNIVERSAL RULE)" section ("The 7 A2ML files MUST exist…"), "A2ML" and the dead paths `a2ml/` and `*-a2ml/` from the Stream 1 routing row, "the A2ML metadata family" from the description, and the A2ML sentence of the attestation. - Every `+` line is a shortened copy of a removed line, and no word is added (checked mechanically, below). Deed routing is **not** added into the `.a2ml`: its startup checklist sends the agent to `README.adoc` next, and that file now carries it. No issue is closed. This is the follow-up to #1213 that removes the instructions that keep regenerating A2ML. ## Type of change - [ ] 🐛 Bug fix. No code or gate behaviour changes; only instructions do. - [ ] ✨ New feature. Nothing is added beyond documentation. - [ ] 💥 Breaking change. No tool, recipe, path or check is removed or renamed. The A2ML files in this repo stay where they are. - [ ] 🕳️ Soundness fix. No checker changes. - [x] 📖 Documentation. Five front-door files now route to deed, k9 and coordination with their ABNFs. - [ ] 🧹 Refactor / tech debt. Docs only. - [ ] ⚡ Performance. Not applicable. - [ ] 🔧 Build / CI / tooling. No workflow, hook, script or lockfile is touched. ## 📌 New pins - **Head SHA: `11d458334a0ae9c0954dc7f4a712cd9862376543`** - **No pins added or changed.** No `uses:` SHA, no `actions.lock` entry, no lockfile record, no container digest. ## How has this been verified? All commands were run locally in the worktree (Debian 13, WSL2) with `MISE_DISABLE=1`. - **After the rebase onto `9d629d11`:** `bash scripts/check-canonical-names.sh origin/main` → `no deprecated names reintroduced`, rc 0. `git range-diff ed4f98a..ec64f1f origin/main..HEAD` → `1: ec64f1f = 1: 11d4583`. - **`bash scripts/run-shell-test-suite.sh` → `All 80 test file(s) passed.`, rc 0.** - **The two checkers the docs now name run as written.** Each was run on a valid fixture and on an invalid control: - `bun 1-formats/deed/tools/deed_lint.js 1-formats/deed/tools/fixtures/valid/booleans-uuid_chora.deed` → `OK`, rc 0. On `fixtures/invalid/inequals_chora.deed` → `FAIL … '=' as a field separator is not a deed`, rc 1. - `bash 1-formats/k9/tools/k9-validate.sh --strict 1-formats/k9/tools/fixtures/valid/extension-capability.k9.ncl` → `1 file(s) conforming`, rc 0. On `fixtures/invalid/L0-K9-E001-bad-magic.k9.ncl` → `K9-E001`, rc 1. - **Every new link resolves.** Each added `link:` target and each added backticked repo path was tested with `-e`, relative to the file that holds it (`.meta/` links use `../`). Result: 18 links and 15 paths, 0 missing. - **The cross-reference resolves.** `asciidoctor -v README.adoc` renders the anchor `_machine_readable_metadata`, and all 5 `<<Machine-Readable Metadata>>` references link to it. - **asciidoctor warnings: none new.** Each edited `.adoc` was rendered both new and on the base. The single error, `README.adoc: line 71: dropping cells from incomplete row`, is identical on the base `ed4f98a3` and is not introduced here. - **`0-AI-MANIFEST.a2ml` is deletion-only.** The set of words on its `+` lines, minus the set of words in the original file, is empty. - **No remaining instruction to create A2ML.** In the five files, `grep -i -E '(must|should|create|include|add|use|write|generate|mandatory|required).{0,60}a2ml'` finds only prohibitions ("do not create…") and history. - **Pre-commit passed in full**, including gitleaks, the canonical-names guard and bot directives. The first attempt was refused by `check-canonical-names.sh`, because the draft repeated a deprecated directory name. That clause was dropped and the guard now reports `no deprecated names reintroduced`. - **`.githooks/docstring-scan.sh --worktree --check` → rc 0.** No function is touched. - **`git diff --check` → clean.** ## Checklist - [x] My commits are **signed** (`git commit -S`). `git log --show-signature` reports a good ED25519 signature on `11d45833`. - [x] I ran the project's own checks/tests locally and they pass. See above. - [x] New files carry the correct `SPDX-License-Identifier`. No new files are added, and no existing header is changed. - [x] Docs are updated, and no public claim now overstates what the code does. `coordination.k9` is described as having no validator script yet, and the retired pipeline is not restated as live. - [x] I have not introduced a soundness hole, or I have flagged where I might have. No checker changes. ## Notes for reviewers - **Left as they are, on purpose:** - **README L26 and `AGENTS.adoc` L4** still send an AI agent to `0-AI-MANIFEST.a2ml` first. That is an instruction to *read* an existing file, not to create one, and the manifest no longer tells anyone to create A2ML. - **The manifest's other reading pointers** (`descriptiles/STATE.a2ml`, `AGENTIC.a2ml`) and its "no A2ML in the repo root" invariant stay. They describe this repo's existing files, which are not hand-converted (D313). - **Not in this PR:** `2-protocols/0-ai-gatekeeper/docs/AI-MANIFEST-SPEC.adoc` L258 still says normatively "These 6 A2ML files MUST exist in `.machine_readable/descriptiles/`". That is a versioned protocol spec, not a front door, so changing it needs its own ruling. It is logged in the owner's findings ledger. - **Where STATE content goes** in the deed era is still marked "DECISION REQUIRED (owner)" in the mapping specs. These docs point at the mappings and do not pre-empt that decision. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_015bTuGfwCcvjrmNFejydTML Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…1216) ## Summary > **Rebased onto `main` after #1213 merged** (squash commit `9d629d11`, 2026-10-09T09:21Z). `git range-diff` shows the commit unchanged (`=`). `main` differs from #1213's head `ed4f98a3` only in `docs/AFFIRMATION.adoc` and `docs/affirmations/AFFIRMATION-2026-10-07.adoc` (#1212's follow-up `76773445`), so the measurements below that name the base `ed4f98a3` still hold for `main`. **Ruling R5 on #837 (owner, 2026-10-09): option B, with the §4 path-leak clean first.** This PR is increment 1 of three. It freezes the spec scorecard corpus into a tombstoned archive. It does not translate the records into deeds. - **Leak clean, before the move.** 47 lines in the 29 `*.scorecard.a2ml` records cited the machine-local prefix `/home/user/standards/` (50 occurrences: 25 `evidence`, 12 `system` and 10 `effects` lines). Each prefix is removed, so every path is now repo-relative. The one bare root reference (`toolchain-readiness-grades`, "under /home/user/standards") now reads "under the repository root". The full file:line list is below. - **Record hygiene, deletion and repointing only.** Each record's "Regenerate the dashboard with: just scorecards" header line is deleted, because that recipe is already gone. Each `# Schema:` comment now points at the archived schema (28 files; `estate-constitution` has none). The schema's `$id` is a historical identifier and is left as it is. No fact is added to any `.a2ml` file. - **The move.** `.machine_readable/scorecards/` (29 records + `scorecard.schema.json`) moves with `git mv` to `.machine_readable/archive/scorecards-v1/`. All 30 are renames, with history kept. A new `README.adoc` there is the tombstone: frozen, do not edit, add or convert; why it was archived; what changed on the way in; what replaces it; and what it is not (the verisim-data per-repo RSR scorecards, and the OpenSSF Scorecard workflow). - **Consumers repointed.** `.hypatia-baseline.json` (the SD022 entry's `file`), `docs/BADGE-CRITERIA-SPEC.adoc`, `1-formats/k9/spec/MIGRATION-1058.adoc` and `REGISTRY.adoc` ("What stays, frozen"). - **Decision record.** `1-formats/deed/mappings/scorecard-corpus-decision.adoc` goes from "awaiting ruling" to **RULED: option B**. A new §5 records the three increments and what each one closes. - **Two guards learn the archive, narrowly.** `scripts/check-canonical-names.sh` and both modes of `.githooks/validate-bot-directives.sh` now skip `.machine_readable/archive/scorecards-v1/*.scorecard.a2ml`. They do not skip the archive README, any other file there, or a sibling archive. The records are assessments that cite the names and tools of their day. They are not live directives, and the README forbids editing them. Refs #837. It does not close it: increments 2 and 3 remain (see Notes). ## Type of change - [x] 🐛 Bug fix. `validate-bot-directives.sh` scan mode (what `pre-push` runs without a diff) exits 1 on the base tree: "Codex" in `k9-coordination-protocol.scorecard.a2ml` L23 is a historical assessment, not a directive. It exits 0 after this PR. - [ ] ✨ New feature. No new capability. The tombstone is documentation. - [ ] 💥 Breaking change. The old path has no remaining consumer in this repo. Every consumer found with `git grep` is repointed, and the `just scorecards` recipe and its builder were already gone before this PR. Callers outside this repo, if any, are not covered by that search. - [ ] 🕳️ Soundness fix. The guard changes widen nothing beyond the archived records, and planted positives pin that (see verification). - [x] 📖 Documentation. A tombstone README, the ruling recorded in the decision spec, and four consumer docs repointed. - [x] 🧹 Refactor / tech debt. 29 records frozen and leak-free; ruled debt on #837 paid down. - [ ] ⚡ Performance. Not applicable. - [x] 🔧 Build / CI / tooling. Two hook scripts gain one exclusion each; two hook tests gain cases. ## 📌 New pins - **Head SHA: `afb8a4f6fcc4c66124964923b9fbcbad6505236c`** - **No pins added or changed.** No `uses:` SHA, no `actions.lock` entry, no lockfile record, no container digest. ## How has this been verified? All commands were run locally in the worktree (Debian 13, WSL2) with `MISE_DISABLE=1`. - **After the rebase onto `9d629d11`:** `bash scripts/check-canonical-names.sh origin/main` → `no deprecated names reintroduced`. `wave6-canonical-names-test.sh` → 8 passed, 0 failed. `validate-bot-directives-test.sh` → 10 passed, 0 failed. `validate-bot-directives.sh` in scan mode → `All files validated`. `git range-diff ed4f98a..321f616 origin/main..HEAD` → `1: 321f616 = 1: afb8a4f`. - **`bash scripts/run-shell-test-suite.sh` → `All 80 test file(s) passed.`, rc 0.** That includes both edited tests. - **`bash scripts/tests/wave6-canonical-names-test.sh` → 8 passed, 0 failed.** The new case reproduces the real move: a record is committed, `git mv`'d into the archive and edited, so the diff is a rename carrying a `+` line under the new path. - Mutant: deleting the exclusion line from the guard gives **7 passed, 1 failed**, and the failure is exactly the archived-record case. - Planted positives: the archive README and a sibling `archive/scorecards-v2/` are still blocked. - **`bash scripts/tests/validate-bot-directives-test.sh` → 10 passed, 0 failed.** It has 5 new cases: staged-mode archived record → 0; archive README → 1; sibling archive → 1; scan-mode archived record → 0; scan-mode live `.deed` directive beside the archive → 1. - Mutant: removing both exclusions gives **8 passed, 2 failed**, and the failures are exactly the two archived-record cases. - **The guards on the real change:** - `bash scripts/check-canonical-names.sh ed4f98a` → `no deprecated names reintroduced`, rc 0. With the exclusion removed, it flags `0-ai-gatekeeper-protocol` and `release-pre-flight`, so the exclusion is load-bearing and is reached through the rename. - `INPUT_PATH=. bash .githooks/validate-bot-directives.sh` (scan mode) → `All files validated`, rc 0. - The same hook on a `git archive` of the base `ed4f98a3` → `ERROR: .machine_readable/scorecards/k9-coordination-protocol.scorecard.a2ml contains deprecated bot directives`, rc 1. - **No absolute path is left.** `grep -E '/home/|/Users/|/root/|/tmp/|/mnt/|C:\\|~/'` over the 29 archived records → 0 matches. `git ls-files '*.scorecard.a2ml'` → 29, all under `archive/scorecards-v1/` (acceptance item 1 of the decision spec, §3). - **Every added link resolves.** Each new `link:` target in the four edited or new `.adoc` files was tested with `-e` relative to its file: 6 links, 0 missing. - **`.hypatia-baseline.json` still parses** (`jq -e .`), and its one changed value is the `file` of the SD022 entry. Its entry count is unchanged by this PR. The ratchet's `205 -> 189` reading below is the base's own delta from `main`. - **`bash scripts/check-exemption-ratchet.sh origin/main` → `Exemption ratchet: OK.`** `bash scripts/check-standards-map.sh` → `GATE D PASSED`. `apply-baseline-test.sh`, `filter-sarif-by-baseline-test.sh` and `hypatia-blocking-gate-test.sh` → rc 0. - **`.githooks/docstring-scan.sh --staged --check` → rc 0.** The modified `is_excluded` and the new `cks` are both documented. - **Pre-commit and pre-push passed in full**, including gitleaks, canonical names and bot directives. The first commit attempt was refused by `commit-msg` (subject was 78 characters, limit 72) and was shortened. No hook was bypassed. - **`git diff --cached --check` → clean.** ## Checklist - [x] My commits are **signed** (`git commit -S`). `git log --show-signature` reports a good ED25519 signature on `afb8a4f6`. - [x] I ran the project's own checks/tests locally and they pass. See above. - [x] New files carry the correct `SPDX-License-Identifier`. The one new file, the archive `README.adoc`, is prose and carries `CC-BY-SA-4.0`. No existing header is changed. - [x] Docs are updated, and no public claim now overstates what the code does. The README and §5 say plainly that the `(assessment …)` clauses and the estate-audit emitter do **not** exist yet. - [x] I have not introduced a soundness hole, or I have flagged where I might have. The two guard exclusions are the only widening. They are fenced to `*.scorecard.a2ml` in one directory, and planted positives prove that nothing else there, and no sibling archive, escapes. ## Notes for reviewers - **Reduced scope, stated (§5b):** - **Acceptance item 2**, one `(assessment …)` clause per `spec_id`, is increment 2. It needs a `<repo>_chora.deed` for this repository, which does not exist yet. Whether the canon repo's own deed carries a canon clause is an open question for that increment. - **Acceptance item 3**, a forward link from each archived record, will be met by the directory tombstone, not by editing each record: writing a link into a frozen `.a2ml` would add content to a retired format. The tombstone gains the forward link when the deed exists. - **Increment 3** is the estate-audit emitter for future assessments. - **Why the leak list is here and not in `estate-residue-ledger.tsv`:** the decision spec's §4 suggested the residue ledger, but that file is generated by `scripts/spine/board.awk` and checked by `verify-board.sh`, so a hand-added row would be lost at the next regeneration. - **47 lines here, 48 in the R5 register.** The register comment on #837 (2026-09-19) counted 48 leak lines, on `main` at `000b9f6b`. One of them, an `evidence` line in `0-ai-gatekeeper-protocol`, was rewritten by #947 (`7b05a323`, 2026-09-22), so 47 remained at the base, and all 47 are cleaned here. After this PR, 0 remain. - **The corpus measured 29 files, not the "70+" in the decision spec's title.** The title is left as it was, and §5 records the measured count. - **Left as they are, on purpose:** `0-canon/COMPLIANCE-DASHBOARD.adoc` (a frozen snapshot), `RSR-SPEC-v2.adoc` L147 and `rsr-criteria-v2.a2ml` L65 (a different scorecard corpus), `canon.lock` (its only "scorecard" hit is the OpenSSF workflow), and the data line `hypatia-rules` L69, which mentions `just scorecards` as assessment evidence rather than as an instruction. <details> <summary>The 47 cleaned lines (file:line on the base <code>ed4f98a3</code>, under <code>.machine_readable/scorecards/</code>; each line held the prefix named in the Summary; content omitted)</summary> ``` 0-ai-gatekeeper-protocol.scorecard.a2ml:26 0-ai-gatekeeper-protocol.scorecard.a2ml:36 0-ai-gatekeeper-protocol.scorecard.a2ml:43 0-ai-gatekeeper-protocol.scorecard.a2ml:51 0-ai-gatekeeper-protocol.scorecard.a2ml:65 accessibility.scorecard.a2ml:17 accessibility.scorecard.a2ml:33 accessibility.scorecard.a2ml:56 accessibility.scorecard.a2ml:63 adoption-readiness-grades.scorecard.a2ml:17 adoption-readiness-grades.scorecard.a2ml:75 agentic-a2ml.scorecard.a2ml:17 agentic-a2ml.scorecard.a2ml:54 anchor-a2ml.scorecard.a2ml:64 ecosystem-a2ml.scorecard.a2ml:17 ecosystem-a2ml.scorecard.a2ml:33 ecosystem-a2ml.scorecard.a2ml:77 foundations-readiness-grades.scorecard.a2ml:17 hypatia-rules.scorecard.a2ml:17 k9-coordination-protocol.scorecard.a2ml:72 k9-svc.scorecard.a2ml:17 k9-svc.scorecard.a2ml:26 k9-svc.scorecard.a2ml:56 k9-svc.scorecard.a2ml:63 k9-svc.scorecard.a2ml:65 k9-svc.scorecard.a2ml:74 k9-svc.scorecard.a2ml:122 meta-a2ml.scorecard.a2ml:17 meta-a2ml.scorecard.a2ml:75 meta-a2ml.scorecard.a2ml:98 neurosym-a2ml.scorecard.a2ml:45 overlay-protocol.scorecard.a2ml:68 release-pre-flight.scorecard.a2ml:15 release-pre-flight.scorecard.a2ml:24 release-pre-flight.scorecard.a2ml:33 release-pre-flight.scorecard.a2ml:42 release-pre-flight.scorecard.a2ml:44 release-pre-flight.scorecard.a2ml:49 release-pre-flight.scorecard.a2ml:51 release-pre-flight.scorecard.a2ml:60 release-pre-flight.scorecard.a2ml:65 release-pre-flight.scorecard.a2ml:74 release-pre-flight.scorecard.a2ml:83 release-pre-flight.scorecard.a2ml:85 toolchain-readiness-grades.scorecard.a2ml:17 toolchain-readiness-grades.scorecard.a2ml:38 toolchain-readiness-grades.scorecard.a2ml:54 ``` </details> 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_015bTuGfwCcvjrmNFejydTML Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>



Summary
This PR retires the generated A2ML spec registry, its generators and every gate that checked them. A2ML is retired (owner rulings D99, D269c, D312 and D313). Descriptive metadata now lives in deed clauses (
1-formats/deed/spec/abnf/deed.abnf), k9 contracts and the k9 coordination protocol (2-protocols/k9-coordination/spec/abnf/coordination-k9-grammar_v1.1.abnf). Until now, a generator kept writing.machine_readable/REGISTRY.a2ml, and the required-looking check "Registry + topology in sync" went red whenever that output drifted. It is red onmaintoday becausebuild-registry.shhashed tracked lockfiles inside spec homes, so every Dependabot lockfile bump drifted the registry.The retirement follows the D222 / echo-types#332 pattern: delete the machinery, leave a notice with permalinks to the frozen tree, and drop the checks aimed at deleted files. Nothing regenerates the registry, and the PR does not regenerate it.
Deleted (9 files, 1,940 lines):
.github/workflows/registry-verify.yml: the "Registry + topology in sync" check..machine_readable/REGISTRY.a2ml.scripts/build-registry.shandscripts/build-scorecards.sh, with their tests (scripts/tests/build-registry-test.sh,scripts/tests/build-scorecards-test.sh).hypatia-rules/registry-staleness.a2ml(HYP-S006).hypatia-rules/implementation-inside-canon.a2mlandscripts/check-implementation-inside-canon.sh(HYP-S009). The rule's only input was the registry. Without it the rule only printed a warning, so it is retired rather than left as a warning-only no-op. Hypatia's evaluator goes dormant when the rule file is absent. The 16HYP-S009entries in.hypatia-baseline.jsongo with it (205 → 189 entries). The carve-out debts they recorded stay tracked in audit(hypatia): classify 61 structural-drift and canonical-home findings #687.Edited (37 files):
registry,topology,registry-checkandscorecards*;just validateno longer depends onregistry-check.hooks/pre-commit, and a retirement note in.githooks/pre-commit.registry-*checks in the Mustfile and the registry clause inMUST.contractile.registry-stalenessblocks in the Adjustfile and Dustfile.registry-verify.ymllines inactions.lock.standards-map.toml:a2ml/profile-stub entries that namedregistry-verifyas their gate now havegate = "", which is valid..machine_readableentry now namesk9-contractile.TOPOLOGY.adocand0-canon/COMPLIANCE-DASHBOARD.adocare kept as their last generated output. Each carries an IMPORTANT banner saying nothing regenerates it.REGISTRY.adocis now the retirement notice: why, what was retired, permalinks to6d19ce0e, what stays frozen, and what replaces it (nothing yet).just registry.README.adocalso stops calling1-formats/SATELLITES.a2mla live machine-readable registry; that file has been empty since [carve-out 6/9] Data out of spec dirs: grade data → archive, PORT-REGISTRY → verisim-data, retire SATELLITES.a2ml #495. In.a2mlfiles, content was only deleted: every added line is a shortened or renumbered copy of a removed one, and no fact was added.Two gates were hosted inside
registry-verify.yml. They are handled differently:k9-contractile.yml) already runs the same two commands,scripts/check-mustfile-structure.shandscripts/run-mustfile.sh.scripts/tests/wave8-gates-test.shnow names that workflow.--verifyis lost, deliberately and visibly.build-scorecards.sh --check --strict --verifyexecuted every scorecard pass row'scheck, so a claimed pass that no longer held failed CI. Nothing runs it now. The 29 scorecards under.machine_readable/scorecards/are untouched frozen data until ruling R5 (DEED conversion campaign — tracking & acceptance criteria (.a2ml → .deed) #837) settles them.REGISTRY.adocsays so, and the loss is logged in the owner's findings ledger.Resolves #1161 §2 ("Registry + topology in sync"). #1161 §1 (the self-ci Haskell job) is unrelated and stays open.
Related: #1010 retires a different A2ML gate (
Validate A2ML manifestsindogfood-gate.yml, across 13 repos) under the same doctrine. This PR does not touch it.Type of change
main, but by retiring the gate under D99/D269c/D312/D313, not by fixing its drift.just registry,just topology,just registry-checkandjust scorecards*no longer exist, andREGISTRY.a2mlis gone. One external reader is known: gitbot-fleet'sscripts/fix-session-detritus.shreadsREGISTRY.a2mland already printsSKIPwhen it is absent, so it degrades rather than breaks. That is logged as a finding.--verify, stops running. It is declared above, not hidden.actions.lockchange.📌 New pins
ed4f98a3c5bd0e73a7f195f7fca5ea21b2835723actions.lockdrops the.github/workflows/registry-verify.ymlentry (actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1) along with the workflow. That SHA stays pinned for every other workflow that uses it. No lockfile record or container digest changes.How has this been verified?
All commands were run locally in the worktree (Debian 13, WSL2) with
MISE_DISABLE=1.bash scripts/run-shell-test-suite.sh→All 80 test file(s) passed., rc 0. The two deleted tests are no longer in it, and nothing else references them.bash scripts/check-mustfile-structure.sh→ rc 0 (15 checks).bash scripts/run-mustfile.sh→ rc 0 (14 passed, 0 blocking).k9-contractile.ymlruns.bash scripts/check-standards-map.sh→ 124/124 entries resolve, bidirectionally.bash scripts/check-lock-sync.sh→ rc 0.gh actions-lock --no-fix→ rc 1, with the same two failures thatorigin/main(6d19ce0e) already has. I measured them on a pristinegit archive origin/mainexport: an unusedhyperpolymath/standards@571cc734record underci-pipeline.yml, and thesigned-push-smoke.ymllocal action. This PR adds no failure; the workflow count drops 60 → 59 becauseregistry-verify.ymlis gone. Both failures are logged in the findings ledger for a separate lock-only PR.bash scripts/tests/apply-baseline-test.sh→ 32/32.bash scripts/tests/hypatia-blocking-gate-test.sh→ rc 0.sed) and not by a jq round-trip, which would have re-serialised unrelated entries.jq lengthis 205 → 189, and every remaining line is byte-identical to the original.bash scripts/check-exemption-ratchet.sh origin/main→Exemption ratchet: OK.(.hypatia-baseline.jsonSHRANK 205 → 189; the other four ledgers are unchanged). The baseline shrinks, which the ratchet allows freely, so noRatchet-exceptionis needed..githooks/docstring-scan.sh --worktree --check→ rc 0. No function is added, and none has its body modified.bash -npasses on every edited hook and script, and theMUST.contractileparentheses balance (74/74).LC_ALL=C grep -rn -E "REGISTRY\.a2ml|build-registry|build-scorecards|registry-verify|registry-check|HYP-S009|implementation-inside-canon"over the tree still finds hits, but every one is a retirement notice, a historical record, a canon-locked file or a test fixture (listed under Notes for reviewers). None of them is a live reference to the retired machinery.Checklist
git commit -S). The SSH signature was checked withgit log --show-signaturebefore pushing.SPDX-License-Identifier. No new files are added. The rewrittenREGISTRY.adockeeps its existingCC-BY-SA-4.0header, and no file is relicensed.REGISTRY.adocsays that--verifyno longer runs.Notes for reviewers
TOPOLOGY.adocandCOMPLIANCE-DASHBOARD.adocare the last generated output. Their numbers describe6d19ce0e.scorecard.schema.json(R5, DEED conversion campaign — tracking & acceptance criteria (.a2ml → .deed) #837);canon.lockand the files it pins;template-capability-gates.toml;scripts/registry-readiness.sh, which is about package registries, not this registry;scripts/tests/apply-baseline-test.sh, which is test data, not a live rule.REORGANIZATION-PLAN.adoc,STATE.a2ml,docs/STANDARDS-CRITICAL-PATH.adocand ADR-005.canonical_url/version_pinpointers) is an open owner decision. Until it is made, the catalogue survives only at6d19ce0e.🤖 Generated with Claude Code
https://claude.ai/code/session_015bTuGfwCcvjrmNFejydTML