Skip to content

chore: retire the A2ML spec registry and its gates (#1161) - #1213

Merged
hyperpolymath merged 1 commit into
mainfrom
chore/retire-a2ml-registry-gates
Oct 9, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
chore/retire-a2ml-registry-gates

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

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 on main today because build-registry.sh hashed 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.sh and scripts/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.a2ml and scripts/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 16 HYP-S009 entries in .hypatia-baseline.json go 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):

  • Local and contractile enforcement:
    • The Justfile recipes registry, topology, registry-check and scorecards*; just validate no longer depends on registry-check.
    • The drift guard in hooks/pre-commit, and a retirement note in .githooks/pre-commit.
    • The registry-* checks in the Mustfile and the registry clause in MUST.contractile.
    • The registry-staleness blocks in the Adjustfile and Dustfile.
    • The two registry-verify.yml lines in actions.lock.
  • standards-map.toml:
    • The 7 a2ml/ profile-stub entries that named registry-verify as their gate now have gate = "", which is valid.
    • The .machine_readable entry now names k9-contractile.
  • Frozen snapshots: TOPOLOGY.adoc and 0-canon/COMPLIANCE-DASHBOARD.adoc are kept as their last generated output. Each carries an IMPORTANT banner saying nothing regenerates it.
  • REGISTRY.adoc is now the retirement notice: why, what was retired, permalinks to 6d19ce0e, what stays frozen, and what replaces it (nothing yet).
  • Prose: front doors, quickstarts, warm-ups, wikis, CONTRIBUTING, AUDIT, BADGE-CRITERIA-SPEC, the hypatia-rules README and two AI manifests no longer route readers to the registry or tell them to run just registry. README.adoc also stops calling 1-formats/SATELLITES.a2ml a 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 .a2ml files, 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:

  1. The Mustfile PR gate is preserved. The required check "K9-SVC contractile validation" (k9-contractile.yml) already runs the same two commands, scripts/check-mustfile-structure.sh and scripts/run-mustfile.sh. scripts/tests/wave8-gates-test.sh now names that workflow.
  2. The scorecard --verify is lost, deliberately and visibly. build-scorecards.sh --check --strict --verify executed every scorecard pass row's check, 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.adoc says 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 manifests in dogfood-gate.yml, across 13 repos) under the same doctrine. This PR does not touch it.

Type of change

  • 🐛 Bug fix. It does remove a red check from main, but by retiring the gate under D99/D269c/D312/D313, not by fixing its drift.
  • ✨ New feature. Nothing is added.
  • 💥 Breaking change. just registry, just topology, just registry-check and just scorecards* no longer exist, and REGISTRY.a2ml is gone. One external reader is known: gitbot-fleet's scripts/fix-session-detritus.sh reads REGISTRY.a2ml and already prints SKIP when it is absent, so it degrades rather than breaks. That is logged as a finding.
  • 🕳️ Soundness fix. The opposite: one executed check, the scorecard --verify, stops running. It is declared above, not hidden.
  • 📖 Documentation. Front doors, quickstarts, wikis and READMEs no longer route to the registry.
  • 🧹 Refactor / tech debt. Retires a generator for a retired format.
  • ⚡ Performance. One CI workflow fewer per PR, but that is not the purpose.
  • 🔧 Build / CI / tooling. A workflow, the hooks, the Justfile, the Mustfile, the contractiles and actions.lock change.

📌 New pins

  • Head SHA: ed4f98a3c5bd0e73a7f195f7fca5ea21b2835723
  • No pin is added or changed. One pin is removed: actions.lock drops the .github/workflows/registry-verify.yml entry (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.
  • The Mustfile gate is preserved:
    • bash scripts/check-mustfile-structure.sh → rc 0 (15 checks).
    • bash scripts/run-mustfile.sh → rc 0 (14 passed, 0 blocking).
    • These are the exact commands k9-contractile.yml runs.
  • Gate D: bash scripts/check-standards-map.sh → 124/124 entries resolve, bidirectionally.
  • actions.lock: bash scripts/check-lock-sync.sh → rc 0. gh actions-lock --no-fix → rc 1, with the same two failures that origin/main (6d19ce0e) already has. I measured them on a pristine git archive origin/main export: an unused hyperpolymath/standards@571cc734 record under ci-pipeline.yml, and the signed-push-smoke.yml local action. This PR adds no failure; the workflow count drops 60 → 59 because registry-verify.yml is gone. Both failures are logged in the findings ledger for a separate lock-only PR.
  • Baseline:
    • bash scripts/tests/apply-baseline-test.sh → 32/32.
    • bash scripts/tests/hypatia-blocking-gate-test.sh → rc 0.
    • The 16 entries were removed line-wise (sed) and not by a jq round-trip, which would have re-serialised unrelated entries. jq length is 205 → 189, and every remaining line is byte-identical to the original.
  • Exemption ratchet: bash scripts/check-exemption-ratchet.sh origin/main → Exemption ratchet: OK. (.hypatia-baseline.json SHRANK 205 → 189; the other four ledgers are unchanged). The baseline shrinks, which the ratchet allows freely, so no Ratchet-exception is needed.
  • Docstrings: .githooks/docstring-scan.sh --worktree --check → rc 0. No function is added, and none has its body modified.
  • Syntax: bash -n passes on every edited hook and script, and the MUST.contractile parentheses balance (74/74).
  • Leftover references: 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

  • My commits are signed (git commit -S). The SSH signature was checked with git log --show-signature before pushing.
  • I ran the project's own checks/tests locally and they pass. See above.
  • New files carry the correct SPDX-License-Identifier. No new files are added. The rewritten REGISTRY.adoc keeps its existing CC-BY-SA-4.0 header, and no file is relicensed.
  • Docs are updated, and no public claim now overstates what the code does. The frozen dashboard and topology say they are frozen, and REGISTRY.adoc says that --verify no longer runs.
  • I have not introduced a soundness hole, or I have flagged where I might have. Flagged: the scorecard pass rows are no longer executed (R5, DEED conversion campaign — tracking & acceptance criteria (.a2ml → .deed) #837), and the HYP-S009 carve-out recurrence guard has no detector (audit(hypatia): classify 61 structural-drift and canonical-home findings #687).

Notes for reviewers

  • Frozen, not regenerated: TOPOLOGY.adoc and COMPLIANCE-DASHBOARD.adoc are the last generated output. Their numbers describe 6d19ce0e.
  • Deliberately untouched:
    • the 29 scorecards and scorecard.schema.json (R5, DEED conversion campaign — tracking & acceptance criteria (.a2ml → .deed) #837);
    • canon.lock and the files it pins;
    • template-capability-gates.toml;
    • scripts/registry-readiness.sh, which is about package registries, not this registry;
    • the HYP-S009 fixture in scripts/tests/apply-baseline-test.sh, which is test data, not a live rule.
    • Historical records also keep their mentions: REORGANIZATION-PLAN.adoc, STATE.a2ml, docs/STANDARDS-CRITICAL-PATH.adoc and ADR-005.
  • What replaces the spec catalogue (ids, streams, and the external canonical_url/version_pin pointers) is an open owner decision. Until it is made, the catalogue survives only at 6d19ce0e.

🤖 Generated with Claude Code

https://claude.ai/code/session_015bTuGfwCcvjrmNFejydTML

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
@coderabbitai

coderabbitai Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 892a9891-f025-4ea4-87d3-0405a7b4bf38

📥 Commits

Reviewing files that changed from the base of the PR and between 6d19ce0 and ed4f98a.


⛔ Files ignored due to path filters (1)
  • .github/workflows/actions.lock is excluded by !**/*.lock

📒 Files selected for processing (45)
  • .githooks/pre-commit
  • .github/workflows/registry-verify.yml
  • .github/workflows/self-test.yml
  • .hypatia-baseline.json
  • .machine_readable/MUST.contractile
  • .machine_readable/REGISTRY.a2ml
  • .machine_readable/contractiles/adjust/Adjustfile.a2ml
  • .machine_readable/contractiles/dust/Dustfile.a2ml
  • .machine_readable/contractiles/must/Mustfile.a2ml
  • 0-AI-MANIFEST.a2ml
  • 0-canon/COMPLIANCE-DASHBOARD.adoc
  • 1-formats/SATELLITES.a2ml
  • 1-formats/sub-specs/form-fill-provenance/README.adoc
  • 3-practice/CONTRIBUTING.adoc
  • AGENTS.adoc
  • CICD-WORKFLOW-CATALOG.md
  • EXPLAINME.adoc
  • Justfile
  • QUICKSTART-DEV.adoc
  • QUICKSTART-USER.adoc
  • README.adoc
  • REGISTRY.adoc
  • TOPOLOGY.adoc
  • docs/AUDIT.adoc
  • docs/BADGE-CRITERIA-SPEC.adoc
  • docs/INNERVATION.adoc
  • docs/migrations/pmpl-to-mpl-sweep-runbook.adoc
  • docs/wikis/0.2-AI-MANIFEST.a2ml
  • docs/wikis/README.adoc
  • docs/wikis/developers/index.adoc
  • docs/wikis/maintainers/index.adoc
  • hooks/pre-commit
  • hypatia-rules/README.adoc
  • hypatia-rules/implementation-inside-canon.a2ml
  • hypatia-rules/registry-staleness.a2ml
  • llm-warmup-dev.adoc
  • llm-warmup-user.adoc
  • scripts/build-registry.sh
  • scripts/build-scorecards.sh
  • scripts/check-implementation-inside-canon.sh
  • scripts/check-workflow-staleness.sh
  • scripts/tests/build-registry-test.sh
  • scripts/tests/build-scorecards-test.sh
  • scripts/tests/wave8-gates-test.sh
  • standards-map.toml

💤 Files with no reviewable changes (15)
  • .machine_readable/REGISTRY.a2ml
  • .machine_readable/contractiles/adjust/Adjustfile.a2ml
  • .machine_readable/contractiles/must/Mustfile.a2ml
  • scripts/check-implementation-inside-canon.sh
  • scripts/tests/build-scorecards-test.sh
  • scripts/build-scorecards.sh
  • scripts/build-registry.sh
  • hypatia-rules/registry-staleness.a2ml
  • hypatia-rules/implementation-inside-canon.a2ml
  • docs/AUDIT.adoc
  • scripts/tests/build-registry-test.sh
  • .machine_readable/contractiles/dust/Dustfile.a2ml
  • .github/workflows/registry-verify.yml
  • hooks/pre-commit
  • .hypatia-baseline.json

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)
  • GitHub Check: Call CI Pipeline / Rust / Detect Cargo.toml
  • GitHub Check: Call CI Pipeline / Nickel
  • GitHub Check: governance / Validate Hypatia Baseline
  • GitHub Check: Trust pipeline summary
  • GitHub Check: Call CI Pipeline / Secret scanning / gitleaks
  • GitHub Check: Call CI Pipeline / Secret scanning / rust-secrets
  • GitHub Check: Call CI Pipeline / Secret scanning / shell-secrets
  • GitHub Check: analyze-js / analyze
  • GitHub Check: analyze-actions / analyze
  • GitHub Check: scan / gitleaks
  • GitHub Check: scorecard / Run Scorecard PR
  • GitHub Check: scan / Hypatia Neurosymbolic Analysis
  • GitHub Check: governance / Workflow security linter
  • GitHub Check: governance / UUID v7 conformance
  • GitHub Check: Repo self-tests
  • GitHub Check: K9-SVC contractile validation
  • GitHub Check: Lockfile self-consistency
  • GitHub Check: Report non-canonical JSON (report-only)
  • GitHub Check: semgrep-cloud-platform/scan

🧰 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)






📝 Summary

Summary by CodeRabbit

  • Changes
    • Retired the generated specification registry, its update and freshness checks, and the related CI workflow. Spec discovery now points to the README routing table.
    • Removed the registry-based compliance scorecard generation and verification tools. The compliance dashboard and architecture map remain available as frozen snapshots.
    • Updated contributor and project guidance to reflect these changes and clarify which validation checks remain active.

Walkthrough

The 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.

Changes

Registry and scorecard retirement

Layer / File(s) Summary
Remove registry and scorecard tooling
.machine_readable/REGISTRY.a2ml, scripts/build-registry.sh, scripts/build-scorecards.sh, scripts/check-implementation-inside-canon.sh, hypatia-rules/*, scripts/tests/*, .hypatia-baseline.json
The registry and scorecard generators, two Hypatia rules, the implementation scan, associated baseline entries and generator regression tests were removed. The Hypatia rule index now lists eight rules.
Remove enforcement and build wiring
.github/workflows/*, .githooks/pre-commit, hooks/pre-commit, Justfile, .machine_readable/contractiles/*, .machine_readable/MUST.contractile, standards-map.toml, scripts/tests/wave8-gates-test.sh, docs/AUDIT.adoc, scripts/check-workflow-staleness.sh
The registry verification workflow and pre-commit freshness check were removed. Registry and scorecard recipes, related contract checks and registry gate mappings were also removed or updated.
Record retired and frozen artefact status
REGISTRY.adoc, TOPOLOGY.adoc, 0-canon/COMPLIANCE-DASHBOARD.adoc, 1-formats/SATELLITES.a2ml, docs/BADGE-CRITERIA-SPEC.adoc
REGISTRY.adoc now records the retirement and identifies retained historical data. The topology and dashboard are labelled frozen snapshots; scorecard documentation describes the retired generator.
Update discovery and maintenance guidance
README.adoc, 0-AI-MANIFEST.a2ml, AGENTS.adoc, EXPLAINME.adoc, QUICKSTART-*.adoc, llm-warmup-*.adoc, docs/wikis/*, 3-practice/CONTRIBUTING.adoc, CICD-WORKFLOW-CATALOG.md, docs/INNERVATION.adoc, docs/migrations/*, 1-formats/sub-specs/form-fill-provenance/README.adoc
Repository guidance no longer directs readers to the live registry or describes its generation as active. Spec discovery points to the README routing table, and documentation identifies retired checks and frozen snapshots.

Priority: ➖ Normal

Estimated code review effort: 4 (Complex) | ~45 minutes

Change: Other · Severity of issue fixed: Medium

Suggested reviewers: joshuajewell


Merge Risk: ⚪ Minimal · up to ed4f9

The registry tooling is retired without an established failure in the remaining checks. The change is mergeable after normal checks.

Architecture Summary

Architecture risk: 🔵 Low · up to ed4f9

The change affects 20 systems.

Changed systems: docs, scripts, hypatia-rules, 1-formats, 0-AI-MANIFEST.a2ml, 0-canon, 3-practice, AGENTS.adoc, CICD-WORKFLOW-CATALOG.md, EXPLAINME.adoc, hooks, Justfile, llm-warmup-dev.adoc, llm-warmup-user.adoc, QUICKSTART-DEV.adoc, QUICKSTART-USER.adoc, README.adoc, REGISTRY.adoc, standards-map.toml, TOPOLOGY.adoc

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — docs (service) was modified; 8 changed files map to changed impact.
  • observed — scripts (service) was modified; 7 changed files map to changed impact.
  • observed — hypatia-rules (service) was modified; 3 changed files map to changed impact.
  • observed — 1-formats (service) was modified; 2 changed files map to changed impact.

Before / after behavior

  • observed — Modified behavior in 0-AI-MANIFEST.a2ml: The routing table removes the registry as the destination for finding every spec and drops the registry-stream qualifier for Protocols. It adds routes for task scope, enforcement/CI, and drift and staleness automation, and no longer labels TOPOLOGY.adoc as generated.
  • observed — Modified behavior in 0-AI-MANIFEST.a2ml: The generated-file regeneration and CI-verification instructions, registry invariant, registry-reading checklist item, and drift-automation diagram are removed. The licence and author invariants remain, renumbered as items 3 and 4. The attestation now names README.adoc as the human front door and states that licence/SPDX is Manual-Only; it omits the machine-index and generated-file statements.
  • observed — Modified behavior in 0-canon/COMPLIANCE-DASHBOARD.adoc: The file’s generated/derived header and instructions to edit scorecards and regenerate the dashboard are replaced by a frozen-snapshot notice. It identifies the last-generation date as 2026-10-09, states that the generator and registry were retired then and scorecard edits no longer update the snapshot, and points to ruling R5 for the scorecards’ fate.
  • observed — Modified behavior in 0-canon/COMPLIANCE-DASHBOARD.adoc: The maintenance-section heading changes from “How this dashboard stays honest” to “How this dashboard was kept current (retired 2026-10-09)”.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check Passed The title clearly and concisely describes the main change: retiring the A2ML specification registry and its associated gates.
Description check Passed The description is directly related to the changeset. It explains the retirement of the registry, generators, enforcement gates, frozen outputs, preserved checks, removed checks and verification perfo…
Linked Issues check Passed The relevant coding objective is #1161 §2. The PR deletes .machine_readable/REGISTRY.a2ml, its generator, the registry workflow, and the related checks. It also removes the associated hooks, recipes…
Out of Scope Changes check Passed The changes stay within the retirement scope described for #1161 §2. Documentation, frozen-snapshot notices, baseline cleanup, test updates, workflow cleanup, and replacement of the Mustfile gate refe…
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2…


✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR


  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

A rabbit checks the burrow map,
The old index rests beneath its cap.
Frozen pages mark the trail,
New routes guide each hopping mail.
The moonlit files now sleep in rows.
The rabbit nibbles, then off goes.

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

K9 contract conformance

run https://github.com/hyperpolymath/standards/actions/runs/37905036622

K9 normative contract typecheck

k9_contract.ncl typechecks

K9 contract self-test

== the bash mirrors cannot drift from the normative contract ==
ok   leash_levels mirrors k9_contract.ncl
ok   core_capabilities mirrors k9_contract.ncl
ok   contract_version mirrors k9_contract.ncl
ok   schema_major mirrors k9_contract.ncl
== capability arithmetic (§8) ==
ok   capability_ok fs.read accepted
ok   capability_ok rollback.apply accepted
ok   capability_ok x-acme.gpu.alloc accepted
ok   capability_ok x-acme rejected
ok   capability_ok x-.gpu rejected
ok   capability_ok fs.delete rejected
ok   capability_ok  rejected
== the extractor ==
ok   extracts pedigree.security.leash
ok   extracts pedigree.component_type
ok   extracts pedigree.metadata.name
ok   pedigree leash is not reported as top-level leash
ok   required_capabilities for a quiet component
ok   required_capabilities follows allow_network
== the envelope strip keeps line numbers (§3.6) ==
ok   line 1 becomes a comment
ok   line count is preserved
ok   schema_version stays on line 5
== L3: signature presence is not verification (§10) ==
ok   no verifier -> K9-C001 is SKIPPED, never a pass
ok   the skip states presence does not authorise 'Hunt
ok   verifier accepts -> verdict 'Verified, no K9-C001 finding
ok   verifier refuses -> K9-C001 error, verdict 'Rejected
== the fixture runner's attribution cannot be fooled by a filename ==
ok   every extracted finding is well-formed rule+layer
ok   the rule that really fired is attributed
ok   a rule named only in the filename is NOT attributed
ok   K9-C001 is present as a skipped finding
ok   and that same finding is NOT extractable as a rejection
== no Nickel reserved word is used as an identifier ==
ok   the contract and all 27 fixtures avoid Nickel's reserved words

self-test: all assertions passed

K9 conformance fixtures

== positive controls (must pass) ==
ok   extension-capability.k9.ncl
ok   extension-fields.k9.ncl
ok   hunt-fully-granted.k9.ncl
ok   kennel-data.k9.ncl
ok   library-base.ncl
ok   yard-typed-config.k9.ncl

== negative controls (must fail, by the named rule) ==
ok   L0-K9-E001-bad-magic.k9.ncl (rejected by K9-E001 at L0)
ok   L0-K9-E002-nul-byte.k9.ncl (rejected by K9-E002 at L0)
ok   L0-K9-E003-crlf.k9.ncl (rejected by K9-E003 at L0)
ok   L0-K9-E004-no-spdx.k9.ncl (rejected by K9-E004 at L0)
ok   L0-K9-E005-unclaimed-body.k9.ncl (rejected by K9-E005 at L0)
ok   L0-K9-S012-library-with-pedigree.ncl (rejected by K9-S012 at L0)
ok   L0-K9-S014-stray-leash.ncl (rejected by K9-S014 at L0)
ok   L1-K9-S001-no-pedigree.k9.ncl (rejected by K9-S001 at L1)
ok   L1-K9-S002-wrong-major.k9.ncl (rejected by K9-S002 at L1)
ok   L1-K9-S003-todo-component-type.k9.ncl (rejected by K9-S003 at L1)
ok   L1-K9-S004-unknown-leash.k9.ncl (rejected by K9-S004 at L1)
ok   L1-K9-S005-missing-name.k9.ncl (rejected by K9-S005 at L1)
ok   L1-K9-S006-unknown-capability.k9.ncl (rejected by K9-S006 at L1)
ok   L1-K9-S007-ungranted-flag.k9.ncl (rejected by K9-S007 at L1)
ok   L1-K9-S008-hunt-signature-not-required.k9.ncl (rejected by K9-S008 at L1)
ok   L1-K9-S009-hunt-no-signature-block.k9.ncl (rejected by K9-S009 at L1)
ok   L1-K9-S010-hunt-empty-side-effects.k9.ncl (rejected by K9-S010 at L1)
ok   L1-K9-S011-recipes-at-yard.k9.ncl (rejected by K9-S011 at L1)
ok   L1-K9-S013-dangling-import.k9.ncl (rejected by K9-S013 at L1)
ok   L2-K9-N001-two-segment-version.k9.ncl (rejected by K9-N001 at L2)
ok   L2-K9-N001-wrong-field-type.k9.ncl (rejected by K9-N001 at L2)

fixtures: 6 positive, 21 negative (0 needing nickel), 0 failure(s)

K9 corpus conformance (L2)

[validate-k9] debt rhodium-standard-repositories/rsr-compliance-checklist.k9.ncl (fail) — K9-N001 K9-S004 K9-S005 K9-S014 (grandfathered; touching it makes it blocking)
[validate-k9] 14 conforming, 1 grandfathered (layer all, contract v1.0.0)

@sonarqubecloud

sonarqubecloud Bot commented Oct 9, 2026

Copy link
Copy Markdown

@hyperpolymath
hyperpolymath merged commit 9d629d1 into main Oct 9, 2026
69 checks passed
@hyperpolymath
hyperpolymath deleted the chore/retire-a2ml-registry-gates branch October 9, 2026 09:21
hyperpolymath added a commit that referenced this pull request Oct 9, 2026
…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>
hyperpolymath added a commit that referenced this pull request Oct 9, 2026
…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>
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.

Two unowned reds on #1160: self-ci Haskell job builds at root with no cabal.project; registry drift on main

1 participant