diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 3bbaf4af9..caebdda67 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -256,7 +256,7 @@ Existing pre-2026-04-30 `.ts`/`.tsx` outside these carve-outs is grandfathered w | `**/deps/**` | vendored package-manager dep | Elixir Mix vendored-dep directory (also adopted by other tools). Exemplar: `tma-mark2/deps/phoenix_live_view/assets/js/phoenix_live_view/*.ts` ships Phoenix LiveView's authored TS. | Never — vendored upstream. | | `**/vscode/**` (covers `editors/vscode/`, `extensions/vscode/`, `clients/vscode/`) | editor-host extension | VSCode extension entry points target the `vscode` extension-host API. Five estate repos (`universal-language-server-plugin`, `reposystem`, `proof-burrower`, `phronesis`, `bofj-kitt`) have a single `vscode/extension.ts`. | **Capability SHIPPED, verified 2026-08-28** — `affinescript/stdlib/Vscode.affine` (58 `extern fn`), `VscodeLanguageClient.affine` (4), the JS host shim `packages/affine-vscode/mod.js`, and `affine-vscode-publish.yml`. The remaining blocker is migration effort, not capability. Track under campaign #239; retire this row when the five VSCode extensions are ported. | -Retired 2026-08-31: the `avow-protocol/telegram-bot/**` carve-out (the bot was rewritten in AffineScript — zero `.ts` on main, so the "PERMANENT" rationale no longer described reality); the `affinescript-deno-test/**` + `affinescript-cli/**` bootstrap-shim row (the test harness self-hosted to 100% `.affine` via affinescript#735/#736, and the cli is JS-only — see the npm/JavaScript tables below for its surviving front-door carve-out); and the `**/tsconfig.json` pattern (dead entry — the rule matches `*.ts`, so a `.json` path could never reach the allowlist). +Retired 2026-08-31: the `2-protocols/avow/telegram-bot/**` carve-out (the bot was rewritten in AffineScript — zero `.ts` on main, so the "PERMANENT" rationale no longer described reality); the `affinescript-deno-test/**` + `affinescript-cli/**` bootstrap-shim row (the test harness self-hosted to 100% `.affine` via affinescript#735/#736, and the cli is JS-only — see the npm/JavaScript tables below for its surviving front-door carve-out); and the `**/tsconfig.json` pattern (dead entry — the rule matches `*.ts`, so a `.json` path could never reach the allowlist). Adding to this list requires explicit user approval and an unblock condition (except the structural classes above, which are estate-wide policy). The detection rule and its `path_allow_prefixes` field are the single source of truth; this table mirrors that for human readability. diff --git a/.github/workflows/echidna-verify.yml b/.github/workflows/echidna-verify.yml index 09a785152..f8b29a950 100644 --- a/.github/workflows/echidna-verify.yml +++ b/.github/workflows/echidna-verify.yml @@ -5,7 +5,7 @@ # Scope: # - lol/proofs/theories/**/*.agda # - a2ml/src/A2ML/Proofs.idr -# - avow-protocol/avow-lib/src/abi/*.idr +# - 2-protocols/avow/avow-lib/src/abi/*.idr # # Proof-corpus status (issue #748): all three corpora are EVICTED from this # repo and live in their own repos today. Each job therefore opens with a @@ -26,7 +26,7 @@ on: - 'lol/proofs/**' - 'a2ml/src/**/*.idr' - 'a2ml/a2ml-core.ipkg' - - 'avow-protocol/avow-lib/src/abi/*.idr' + - '2-protocols/avow/avow-lib/src/abi/*.idr' - '.github/workflows/echidna-verify.yml' # NO path filter on pull_request, deliberately. `Idris2 - a2ml proofs` is a # REQUIRED context, and a workflow-level path filter means the whole workflow @@ -76,7 +76,7 @@ jobs: base="${{ github.event.pull_request.base.sha }}" head="${{ github.event.pull_request.head.sha }}" changed=$(git diff --name-only "$base" "$head" 2>/dev/null || true) - if printf '%s\n' "$changed" | grep -qE '^(lol/proofs/|a2ml/src/.*\.idr$|a2ml/a2ml-core\.ipkg$|avow-protocol/avow-lib/src/abi/.*\.idr$|\.github/workflows/echidna-verify\.yml$)'; then + if printf '%s\n' "$changed" | grep -qE '^(lol/proofs/|a2ml/src/.*\.idr$|a2ml/a2ml-core\.ipkg$|2-protocols/avow/avow-lib/src/abi/.*\.idr$|\.github/workflows/echidna-verify\.yml$)'; then echo "proofs=true" >> "$GITHUB_OUTPUT" else echo "proofs=false" >> "$GITHUB_OUTPUT" @@ -289,15 +289,15 @@ jobs: # The per-file `if [ -f ]` guard below was written to tolerate absent # proofs, but the `cd` ahead of it was NOT guarded, so a missing # directory killed the step before the guard could ever run. In this - # repo avow-protocol/ holds only BINDING.adoc - the proofs live in the + # repo 2-protocols/avow/ holds only BINDING.adoc - the proofs live in the # avow-protocol repository - so the cd always failed and this job was # permanently red. It only became visible once the workflow began # running on pull requests. - if [ ! -d avow-protocol/avow-lib ]; then - echo "::notice title=AVOW proofs::avow-protocol/avow-lib is not present here (this repo carries only the BINDING). Nothing to type-check." + if [ ! -d 2-protocols/avow/avow-lib ]; then + echo "::notice title=AVOW proofs::2-protocols/avow/avow-lib is not present here (this repo carries only the BINDING). Nothing to type-check." exit 0 fi - cd avow-protocol/avow-lib + cd 2-protocols/avow/avow-lib for f in src/abi/Consent.idr src/abi/Unsubscribe.idr src/abi/Types.idr; do if [ -f "$f" ]; then echo "--- checking $f ---" diff --git a/.github/workflows/secret-scanner-reusable.yml b/.github/workflows/secret-scanner-reusable.yml index 15e7be6ca..18240884d 100644 --- a/.github/workflows/secret-scanner-reusable.yml +++ b/.github/workflows/secret-scanner-reusable.yml @@ -15,7 +15,7 @@ # # Critical security debt this PR addresses: # The `shell-secrets` job (added to the canonical 2026-05-21 in -# response to the Cloudflare token leak via `avow-protocol/ +# response to the Cloudflare token leak via `2-protocols/avow/ # deploy-repos.sh`, which both `trufflehog --only-verified` and # default gitleaks missed) is currently present in 0 of 16 sampled # estate repos. The post-incident guardrail intended to catch the @@ -668,7 +668,7 @@ jobs: # Shell-specific: catch hardcoded credentials in shell scripts. # Added to canonical 2026-05-21 after default gitleaks missed a real - # Cloudflare API token leaked via avow-protocol/deploy-repos.sh. + # Cloudflare API token leaked via 2-protocols/avow/deploy-repos.sh. # As of this PR, 0 of 16 sampled estate repos carry this guardrail — # the reusable closes that gap. # diff --git a/.gitignore b/.gitignore index cba971955..23c1789b7 100644 --- a/.gitignore +++ b/.gitignore @@ -94,10 +94,10 @@ htmlcov/ # Rust build artefacts (innervation tools) 1-formats/sub-specs/inline-annotations/extractor/target/ -k9-coordination-protocol/tools/k9-init/target/ +2-protocols/k9-coordination/tools/k9-init/target/ hooks/playbook-to-recipe/target/ 1-formats/sub-specs/inline-annotations/extractor/Cargo.lock -k9-coordination-protocol/tools/k9-init/Cargo.lock +2-protocols/k9-coordination/tools/k9-init/Cargo.lock hooks/playbook-to-recipe/Cargo.lock .verisimdb/ecosystem-ingest/target/ .verisimdb/ecosystem-ingest/Cargo.lock diff --git a/.gitleaksignore b/.gitleaksignore index a680ac8a9..81a8afcc3 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -4,6 +4,6 @@ # from the current tree, and the exposed Cloudflare token was removed by # 080c3941f091bdc1b94fa32cf11362a77f8fe01a. Keep that token revoked: these # entries do not suppress the same rules in any new commit or location. -55ad53331e530d44b2ada3fb2ca80a024625dbac:avow-protocol/avow-lib/examples/python/stamp_example.py:generic-api-key:237 -55ad53331e530d44b2ada3fb2ca80a024625dbac:avow-protocol/avow-lib/examples/python/stamp_example.py:generic-api-key:251 -55ad53331e530d44b2ada3fb2ca80a024625dbac:avow-protocol/deploy-repos.sh:cloudflare-api-key:5 +55ad53331e530d44b2ada3fb2ca80a024625dbac:2-protocols/avow/avow-lib/examples/python/stamp_example.py:generic-api-key:237 +55ad53331e530d44b2ada3fb2ca80a024625dbac:2-protocols/avow/avow-lib/examples/python/stamp_example.py:generic-api-key:251 +55ad53331e530d44b2ada3fb2ca80a024625dbac:2-protocols/avow/deploy-repos.sh:cloudflare-api-key:5 diff --git a/.hypatia-baseline.json b/.hypatia-baseline.json index d9225de6b..64e773f04 100644 --- a/.hypatia-baseline.json +++ b/.hypatia-baseline.json @@ -30,7 +30,7 @@ "severity": "medium", "rule_module": "code_safety", "type": "as_ptr", - "file": "avow-protocol/avow-lib/examples/rust/src/main.rs", + "file": "2-protocols/avow/avow-lib/examples/rust/src/main.rs", "note": "FALSE POSITIVE (hypatia triage 2026-07-21): No dangling: every as_ptr comes from a named CString binding that outlives the synchronous FFI call. Idiomatic CString FFI; rule cannot see lifetimes." }, { @@ -44,7 +44,7 @@ "severity": "high", "rule_module": "code_safety", "type": "js_innerhtml", - "file": "avow-protocol/public/demo.js", + "file": "2-protocols/avow/public/demo.js", "note": "TRACKED (trivial fix available, not applied in this CI-hygiene PR): Genuine DOM XSS: user input flows unescaped into innerHTML in the public demo page. Low blast radius (self-XSS on a demo) but a real fix (textContent/escaping) is needed. Product evicting under #492.", "expires_at": "2026-10-21", "tracking_issue": "hyperpolymath/standards#492" @@ -53,7 +53,7 @@ "severity": "high", "rule_module": "code_safety", "type": "js_innerhtml", - "file": "axel-protocol/src/Tea.res.js", + "file": "2-protocols/axel/src/Tea.res.js", "note": "TRACKED DEBT (hypatia triage 2026-07-21): Real XSS surface: any view interpolating user data reaches innerHTML unescaped. File is bsc compiled output of Tea.res \u2014 fix belongs in the .res source. Product evicting under #492.", "expires_at": "2026-10-21", "tracking_issue": "hyperpolymath/standards#492" @@ -69,7 +69,7 @@ "severity": "high", "rule_module": "code_safety", "type": "rwlock_unwrap", - "file": "0-ai-gatekeeper-protocol/repo-guardian-fs/src/session_manager.rs", + "file": "2-protocols/0-ai-gatekeeper/repo-guardian-fs/src/session_manager.rs", "note": "TRACKED DEBT (hypatia triage 2026-07-21): Genuine: a single panic while holding the lock poisons it and every subsequent session operation panics (DoS cascade). Needs poison handling or parking_lot. Product evicting under #492.", "expires_at": "2026-10-21", "tracking_issue": "hyperpolymath/standards#492" @@ -78,7 +78,7 @@ "severity": "high", "rule_module": "code_safety", "type": "rwlock_unwrap", - "file": "0-ai-gatekeeper-protocol/repo-guardian-fs/tests-offline/src/lib.rs", + "file": "2-protocols/0-ai-gatekeeper/repo-guardian-fs/tests-offline/src/lib.rs", "note": "FALSE POSITIVE (hypatia triage 2026-07-21): Test-only mock of the production SessionManager; never shipped. The production copy is already flagged (findings 25/26, REAL_DEBT #492). Double report against test scaffolding." }, { @@ -137,7 +137,7 @@ "severity": "medium", "rule_module": "code_safety", "type": "unsafe_block", - "file": "avow-protocol/avow-lib/examples/rust/src/main.rs", + "file": "2-protocols/avow/avow-lib/examples/rust/src/main.rs", "note": "TRACKED DEBT (hypatia triage 2026-07-21): Genuine hygiene gap (missing SAFETY comments on FFI calls) in example code of a product awaiting eviction; baseline with expiry under the avow-protocol carve-out.", "expires_at": "2026-10-21", "tracking_issue": "hyperpolymath/standards#492" @@ -146,7 +146,7 @@ "severity": "high", "rule_module": "code_safety", "type": "unwrap_without_check", - "file": "0-ai-gatekeeper-protocol/repo-guardian-fs/src/session_manager.rs", + "file": "2-protocols/0-ai-gatekeeper/repo-guardian-fs/src/session_manager.rs", "note": "TRACKED DEBT (hypatia triage 2026-07-21): Same 5 lines as finding 26 (rwlock_unwrap) \u2014 generic rule double-counts the RwLock rule. Underlying issue is real: poison cascades panics in the production session manager. Evicting under #492.", "expires_at": "2026-10-21", "tracking_issue": "hyperpolymath/standards#492" @@ -155,7 +155,7 @@ "severity": "high", "rule_module": "code_safety", "type": "unwrap_without_check", - "file": "0-ai-gatekeeper-protocol/repo-guardian-fs/tests-offline/src/lib.rs", + "file": "2-protocols/0-ai-gatekeeper/repo-guardian-fs/tests-offline/src/lib.rs", "note": "FALSE POSITIVE (hypatia triage 2026-07-21): tests-offline is a test/mock crate (offline mirror of session_manager for testing). Panic IS the test-failure mode; unwrap in test code is idiomatic. Rule should exclude test crates." }, { @@ -238,7 +238,7 @@ "severity": "high", "rule_module": "code_safety", "type": "zig_ptr_cast", - "file": "overlay-protocol/ffi/zig/src/main.zig", + "file": "2-protocols/overlay/ffi/zig/src/main.zig", "note": "TRACKED (trivial fix available, not applied in this CI-hygiene PR): The cast is sound only if termination is guaranteed; it is not when the message exactly fills the 1024-byte buffer, giving the C caller an out-of-bounds read. One-character fix.", "expires_at": "2026-10-21", "tracking_issue": "hyperpolymath/standards#399" @@ -275,14 +275,14 @@ "severity": "high", "rule_module": "code_scanning_alerts", "type": "CSA001", - "file": "0-ai-gatekeeper-protocol/repo-guardian-fs/src/session_manager.rs", + "file": "2-protocols/0-ai-gatekeeper/repo-guardian-fs/src/session_manager.rs", "note": "FALSE POSITIVE (hypatia triage 2026-07-21): Mirror double-report (standards#378); underlying rwlock unwrap already tracked by the primary rule. repo-guardian-fs/** carved out to #492." }, { "severity": "high", "rule_module": "code_scanning_alerts", "type": "CSA001", - "file": "0-ai-gatekeeper-protocol/repo-guardian-fs/tests-offline/src/lib.rs", + "file": "2-protocols/0-ai-gatekeeper/repo-guardian-fs/tests-offline/src/lib.rs", "note": "FALSE POSITIVE (hypatia triage 2026-07-21): Mirror double-report (standards#378); also test code, where lock unwrap is idiomatic. repo-guardian-fs/** carved out to #492." }, { @@ -310,8 +310,8 @@ "severity": "medium", "rule_module": "code_scanning_alerts", "type": "CSA001", - "file": "avow-protocol/avow-lib/examples/rust/src/main.rs", - "note": "FALSE POSITIVE (hypatia triage 2026-07-21): Mirror double-report (standards#378); as_ptr into an FFI param struct is the intended example-code pattern. avow-protocol/** carved out to #492." + "file": "2-protocols/avow/avow-lib/examples/rust/src/main.rs", + "note": "FALSE POSITIVE (hypatia triage 2026-07-21): Mirror double-report (standards#378); as_ptr into an FFI param struct is the intended example-code pattern. 2-protocols/avow/** carved out to #492." }, { "severity": "high", @@ -331,7 +331,7 @@ "severity": "high", "rule_module": "code_scanning_alerts", "type": "CSA001", - "file": "overlay-protocol/ffi/zig/src/main.zig", + "file": "2-protocols/overlay/ffi/zig/src/main.zig", "note": "FALSE POSITIVE (hypatia triage 2026-07-21): Mirror double-report of Hypatia's own SARIF alert (standards#378). Underlying @ptrCast is already emitted by the primary code_safety rule; the CSA copy is a duplicate." }, { @@ -408,7 +408,7 @@ "severity": "high", "rule_module": "code_scanning_alerts", "type": "CSA003", - "file": "0-ai-gatekeeper-protocol/repo-guardian-fs/src/session_manager.rs", + "file": "2-protocols/0-ai-gatekeeper/repo-guardian-fs/src/session_manager.rs", "note": "TRACKED DEBT (hypatia triage 2026-07-21): Mirror double-report per standards#378. Underlying rwlock-unwrap debt is real-but-tracked in the repo-guardian-fs eviction carve-out #492; the CSA003 staleness echo adds nothing.", "expires_at": "2026-10-21", "tracking_issue": "hyperpolymath/standards#378" @@ -417,7 +417,7 @@ "severity": "high", "rule_module": "code_scanning_alerts", "type": "CSA003", - "file": "0-ai-gatekeeper-protocol/repo-guardian-fs/tests-offline/src/lib.rs", + "file": "2-protocols/0-ai-gatekeeper/repo-guardian-fs/tests-offline/src/lib.rs", "note": "FALSE POSITIVE (hypatia triage 2026-07-21): Mirror double-report per standards#378. Also test-only code (tests-offline), where unwrap is conventional; product tracked under #492." }, { @@ -445,7 +445,7 @@ "severity": "high", "rule_module": "code_scanning_alerts", "type": "CSA003", - "file": "avow-protocol/avow-lib/examples/rust/src/main.rs", + "file": "2-protocols/avow/avow-lib/examples/rust/src/main.rs", "note": "FALSE POSITIVE (hypatia triage 2026-07-21): Mirror double-report per standards#378: hypatia re-ingests its own code-scanning alert. Underlying file is avow-protocol product awaiting eviction (#492); as_ptr in an FFI example is idiomatic." }, { @@ -466,7 +466,7 @@ "severity": "high", "rule_module": "code_scanning_alerts", "type": "CSA003", - "file": "overlay-protocol/ffi/zig/src/main.zig", + "file": "2-protocols/overlay/ffi/zig/src/main.zig", "note": "FALSE POSITIVE (hypatia triage 2026-07-21): Mirror double-report (standards#378): hypatia re-ingesting its own code_safety alert. Underlying shim debt is the estate-wide template-rot campaign (fix the boj-server template once)." }, { @@ -659,7 +659,7 @@ "severity": "medium", "rule_module": "structural_drift", "type": "SD022", - "file": "k9-coordination-protocol/spec/COORDINATION-K9-SPEC.adoc", + "file": "2-protocols/k9-coordination/spec/COORDINATION-K9-SPEC.adoc", "note": "FALSE POSITIVE (hypatia triage 2026-07-21): Illustrative YAML example in a protocol spec (sample invariants/protected config for a hypothetical project). Not a reference to this repo's tree." }, { @@ -819,7 +819,7 @@ "severity": "medium", "rule_module": "structural_drift", "type": "SD022", - "file": "groove-protocol/spec/GROOVE-RANKED-OWNERSHIP-CLEAVE-SPEC.adoc", + "file": "2-protocols/groove/spec/GROOVE-RANKED-OWNERSHIP-CLEAVE-SPEC.adoc", "note": "TEMPORARY REVIEW BASELINE (2026-08-29): the Groove spec references a consumer source layout; verify target context before altering the interface design.", "expires_at": "2026-11-29", "tracking_issue": "hyperpolymath/standards#687" @@ -855,7 +855,7 @@ "severity": "medium", "rule_module": "implementation_inside_canon", "type": "HYP-S009", - "file": "axel-protocol/CNAME", + "file": "2-protocols/axel/CNAME", "note": "TEMPORARY ARCHITECTURE BASELINE (2026-08-29): decide extraction or an explicit co-location carve-out for AXEL deployment metadata.", "expires_at": "2026-11-29", "tracking_issue": "hyperpolymath/standards#687" @@ -864,7 +864,7 @@ "severity": "medium", "rule_module": "implementation_inside_canon", "type": "HYP-S009", - "file": "axel-protocol/Containerfile", + "file": "2-protocols/axel/Containerfile", "note": "TEMPORARY ARCHITECTURE BASELINE (2026-08-29): decide extraction or an explicit co-location carve-out for the AXEL implementation.", "expires_at": "2026-11-29", "tracking_issue": "hyperpolymath/standards#687" @@ -873,7 +873,7 @@ "severity": "medium", "rule_module": "implementation_inside_canon", "type": "HYP-S009", - "file": "axel-protocol/ads.txt", + "file": "2-protocols/axel/ads.txt", "note": "TEMPORARY ARCHITECTURE BASELINE (2026-08-29): decide extraction or an explicit co-location carve-out for AXEL deployment metadata.", "expires_at": "2026-11-29", "tracking_issue": "hyperpolymath/standards#687" @@ -882,7 +882,7 @@ "severity": "medium", "rule_module": "implementation_inside_canon", "type": "HYP-S009", - "file": "axel-protocol/docs/CNAME", + "file": "2-protocols/axel/docs/CNAME", "note": "TEMPORARY ARCHITECTURE BASELINE (2026-08-29): decide extraction or an explicit co-location carve-out for AXEL documentation deployment metadata.", "expires_at": "2026-11-29", "tracking_issue": "hyperpolymath/standards#687" @@ -891,7 +891,7 @@ "severity": "medium", "rule_module": "implementation_inside_canon", "type": "HYP-S009", - "file": "axel-protocol/docs/ads.txt", + "file": "2-protocols/axel/docs/ads.txt", "note": "TEMPORARY ARCHITECTURE BASELINE (2026-08-29): decide extraction or an explicit co-location carve-out for AXEL documentation deployment metadata.", "expires_at": "2026-11-29", "tracking_issue": "hyperpolymath/standards#687" @@ -900,7 +900,7 @@ "severity": "medium", "rule_module": "implementation_inside_canon", "type": "HYP-S009", - "file": "axel-protocol/public/CNAME", + "file": "2-protocols/axel/public/CNAME", "note": "TEMPORARY ARCHITECTURE BASELINE (2026-08-29): decide extraction or an explicit co-location carve-out for AXEL public deployment metadata.", "expires_at": "2026-11-29", "tracking_issue": "hyperpolymath/standards#687" @@ -909,7 +909,7 @@ "severity": "medium", "rule_module": "implementation_inside_canon", "type": "HYP-S009", - "file": "axel-protocol/public/ads.txt", + "file": "2-protocols/axel/public/ads.txt", "note": "TEMPORARY ARCHITECTURE BASELINE (2026-08-29): decide extraction or an explicit co-location carve-out for AXEL public deployment metadata.", "expires_at": "2026-11-29", "tracking_issue": "hyperpolymath/standards#687" @@ -918,7 +918,7 @@ "severity": "medium", "rule_module": "implementation_inside_canon", "type": "HYP-S009", - "file": "k9-coordination-protocol/tools/k9-init/Cargo.toml", + "file": "2-protocols/k9-coordination/tools/k9-init/Cargo.toml", "note": "TEMPORARY ARCHITECTURE BASELINE (2026-08-29): decide whether k9-init belongs beside the protocol or must be extracted.", "expires_at": "2026-11-29", "tracking_issue": "hyperpolymath/standards#687" diff --git a/.machine_readable/INTENT.contractile b/.machine_readable/INTENT.contractile index 7f81e77f5..de4a08b68 100644 --- a/.machine_readable/INTENT.contractile +++ b/.machine_readable/INTENT.contractile @@ -81,7 +81,7 @@ "rhodium-standard-repositories/ — RSR requirements affect all 500+ estate repos" ".machine_readable/ — format is specified; do not add files outside the contractile schema" "a2ml/ — specification language; backwards-incompatible changes need an ADR" - "1-formats/k9/ and k9-coordination-protocol/ — K9 trust tier boundaries are load-bearing" + "1-formats/k9/ and 2-protocols/k9-coordination/ — K9 trust tier boundaries are load-bearing" ) ; === Ecosystem Position === diff --git a/.machine_readable/REGISTRY.a2ml b/.machine_readable/REGISTRY.a2ml index f256e2c43..7222a7ede 100644 --- a/.machine_readable/REGISTRY.a2ml +++ b/.machine_readable/REGISTRY.a2ml @@ -124,8 +124,8 @@ route = "project-recalibration intervention format" id = "0-ai-gatekeeper-protocol" name = "0-AI Gatekeeper Protocol" stream = "protocol" -home = "0-ai-gatekeeper-protocol/" -canonical_doc = "0-ai-gatekeeper-protocol/README.adoc" +home = "2-protocols/0-ai-gatekeeper/" +canonical_doc = "2-protocols/0-ai-gatekeeper/README.adoc" source_hash = "sha256:41f60acfb75bc32b0a3fc13cf3642f2e3f553bb4b7ddc9911b1e23d17e205ef3" route = "the AI-agent entry/gating protocol behind 0-AI-MANIFEST" @@ -133,8 +133,8 @@ route = "the AI-agent entry/gating protocol behind 0-AI-MANIFEST" id = "k9-coordination-protocol" name = "K9 Coordination Protocol" stream = "protocol" -home = "k9-coordination-protocol/" -canonical_doc = "k9-coordination-protocol/README.adoc" +home = "2-protocols/k9-coordination/" +canonical_doc = "2-protocols/k9-coordination/README.adoc" source_hash = "sha256:7fe64bde6943757dc0cb60d9e7b37429770bf02bdd9c8db91bee4af50739a99d" route = "multi-agent coordination on top of K9" @@ -142,8 +142,8 @@ route = "multi-agent coordination on top of K9" id = "avow-protocol" name = "AVOW Protocol" stream = "protocol" -home = "avow-protocol/" -canonical_doc = "avow-protocol/BINDING.adoc" +home = "2-protocols/avow/" +canonical_doc = "2-protocols/avow/BINDING.adoc" source_hash = "sha256:ed5b1c9415c137348313f6d8a65d0d6eb320abf2f64e76bb25e108d7a21a3b5b" route = "consent-attested messaging / origin attribution" @@ -151,8 +151,8 @@ route = "consent-attested messaging / origin attribution" id = "axel-protocol" name = "AXEL Protocol" stream = "protocol" -home = "axel-protocol/" -canonical_doc = "axel-protocol/README.adoc" +home = "2-protocols/axel/" +canonical_doc = "2-protocols/axel/README.adoc" source_hash = "sha256:03ce83b73eb01290dda2cac2fd837e4cdc68412c842375e29331aa1e4be0a57b" route = "age-gating + explicit-content enforcement" @@ -160,8 +160,8 @@ route = "age-gating + explicit-content enforcement" id = "overlay-protocol" name = "Overlay Protocol" stream = "protocol" -home = "overlay-protocol/" -canonical_doc = "overlay-protocol/.machine_readable/descriptiles/ECOSYSTEM.a2ml" +home = "2-protocols/overlay/" +canonical_doc = "2-protocols/overlay/.machine_readable/descriptiles/ECOSYSTEM.a2ml" source_hash = "sha256:7bde0638703825f37abc83ee98160e4cc2e72298b13ff50b8cf3632cb5444a15" route = "layered overlay composition spec" diff --git a/.machine_readable/scorecards/0-ai-gatekeeper-protocol.scorecard.a2ml b/.machine_readable/scorecards/0-ai-gatekeeper-protocol.scorecard.a2ml index f785f66c9..3155c58d0 100644 --- a/.machine_readable/scorecards/0-ai-gatekeeper-protocol.scorecard.a2ml +++ b/.machine_readable/scorecards/0-ai-gatekeeper-protocol.scorecard.a2ml @@ -15,7 +15,7 @@ text = "The repository MUST contain exactly one AI manifest file, named 0-AI-MAN system = "none (no automated validator script checks this in CI; verified manually via directory listing)" status = "pass" evidence = "find confirms exactly one manifest at /home/user/standards/0-ai-gatekeeper-protocol/0-AI-MANIFEST.a2ml; no AI.a2ml, !AI.a2ml, or duplicate found at root." -check = "test -f 0-ai-gatekeeper-protocol/0-AI-MANIFEST.a2ml && [ $(find 0-ai-gatekeeper-protocol -maxdepth 1 \\( -iname \"0-AI-MANIFEST.a2ml\" -o -iname \"AI.a2ml\" -o -iname \"!AI.a2ml\" \\) | wc -l) -eq 1 ]" +check = "test -f 2-protocols/0-ai-gatekeeper/0-AI-MANIFEST.a2ml && [ $(find 0-ai-gatekeeper-protocol -maxdepth 1 \\( -iname \"0-AI-MANIFEST.a2ml\" -o -iname \"AI.a2ml\" -o -iname \"!AI.a2ml\" \\) | wc -l) -eq 1 ]" effects = "If violated, downstream MCP/FUSE parsers (mcp-repo-guardian, repo-guardian-fs) that assume a single canonical manifest path would pick an arbitrary or wrong file, breaking attestation for every consuming repo/agent." [[must]] @@ -24,7 +24,7 @@ text = "The manifest MUST contain all required sections defined by AI-MANIFEST-S system = "none (no parser/linter script in this repo enforces the spec against 0-AI-MANIFEST.a2ml; mcp-repo-guardian's manifest_test.js only tests inline reimplementations of parsing logic, not a repo-facing validator CLI)" status = "pass" evidence = "Manual read of /home/user/standards/0-ai-gatekeeper-protocol/0-AI-MANIFEST.a2ml confirms presence of '# ⚠️ STOP', '## WHAT IS THIS?', '## CANONICAL LOCATIONS', '## CORE INVARIANTS', '## REPOSITORY STRUCTURE', and '## ATTESTATION PROOF' headings." -check = "grep -q '# ⚠️ STOP' 0-ai-gatekeeper-protocol/0-AI-MANIFEST.a2ml && grep -q '## WHAT IS THIS?' 0-ai-gatekeeper-protocol/0-AI-MANIFEST.a2ml && grep -q '## CANONICAL LOCATIONS' 0-ai-gatekeeper-protocol/0-AI-MANIFEST.a2ml && grep -q '## CORE INVARIANTS' 0-ai-gatekeeper-protocol/0-AI-MANIFEST.a2ml && grep -q '## REPOSITORY STRUCTURE' 0-ai-gatekeeper-protocol/0-AI-MANIFEST.a2ml && grep -q '## ATTESTATION PROOF' 0-ai-gatekeeper-protocol/0-AI-MANIFEST.a2ml" +check = "grep -q '# ⚠️ STOP' 2-protocols/0-ai-gatekeeper/0-AI-MANIFEST.a2ml && grep -q '## WHAT IS THIS?' 2-protocols/0-ai-gatekeeper/0-AI-MANIFEST.a2ml && grep -q '## CANONICAL LOCATIONS' 2-protocols/0-ai-gatekeeper/0-AI-MANIFEST.a2ml && grep -q '## CORE INVARIANTS' 2-protocols/0-ai-gatekeeper/0-AI-MANIFEST.a2ml && grep -q '## REPOSITORY STRUCTURE' 2-protocols/0-ai-gatekeeper/0-AI-MANIFEST.a2ml && grep -q '## ATTESTATION PROOF' 2-protocols/0-ai-gatekeeper/0-AI-MANIFEST.a2ml" effects = "Missing sections would leave AI agents without required guardrail information, defeating the protocol's stated purpose across all adopting repos." [[must]] @@ -62,7 +62,7 @@ id = "S2" text = "CONTRIBUTING.md SHOULD accurately describe the actual build/test workflow for this specific repository." system = "none" status = "fail" -effects = "/home/user/standards/0-ai-gatekeeper-protocol/CONTRIBUTING.md instructs contributors to run `just test` and references `spec/` and `tests/` directories (Perimeter 2-3 language from a generic template), but no Justfile exists anywhere under 0-ai-gatekeeper-protocol/ and there is no spec/ or top-level tests/ directory (real tests live in repo-guardian-fs/tests-offline/ and mcp-repo-guardian/test/). New contributors following CONTRIBUTING.md literally would hit an immediate 'command not found' and be unable to run any tests." +effects = "/home/user/standards/0-ai-gatekeeper-protocol/CONTRIBUTING.md instructs contributors to run `just test` and references `spec/` and `tests/` directories (Perimeter 2-3 language from a generic template), but no Justfile exists anywhere under 2-protocols/0-ai-gatekeeper/ and there is no spec/ or top-level tests/ directory (real tests live in repo-guardian-fs/tests-offline/ and mcp-repo-guardian/test/). New contributors following CONTRIBUTING.md literally would hit an immediate 'command not found' and be unable to run any tests." [[should]] id = "S3" diff --git a/.machine_readable/scorecards/avow-protocol.scorecard.a2ml b/.machine_readable/scorecards/avow-protocol.scorecard.a2ml index 5d957dfc4..28a84c763 100644 --- a/.machine_readable/scorecards/avow-protocol.scorecard.a2ml +++ b/.machine_readable/scorecards/avow-protocol.scorecard.a2ml @@ -14,7 +14,7 @@ id = "M1" text = "The spec home MUST provide accurate, current documentation of implementation status (README/status markers reflect what actually exists)." system = "none" status = "fail" -effects = "README.adoc (avow-protocol/README.adoc) mixes an original draft with an unedited pasted AI-assistant chat transcript (lines ~73-511, including phrases like 'I'm going to pressure-test this' and 'could you write me a replacement README.adoc') containing a proposed replacement README that was never cleanly applied. The doc also inconsistently names the project 'STAMP' vs 'AVOW' (avow-lib/README.adoc says 'formerly STAMP'; AVOW-THREAT-MODEL.adoc is titled 'STAMP Protocol: Comprehensive Threat Model'). Consumers reading the repo for protocol semantics or onboarding will be confused about actual status and even the project's name; downstream repos referencing 'avow-protocol' or 'stamp-protocol' risk drift." +effects = "README.adoc (2-protocols/avow/README.adoc) mixes an original draft with an unedited pasted AI-assistant chat transcript (lines ~73-511, including phrases like 'I'm going to pressure-test this' and 'could you write me a replacement README.adoc') containing a proposed replacement README that was never cleanly applied. The doc also inconsistently names the project 'STAMP' vs 'AVOW' (avow-lib/README.adoc says 'formerly STAMP'; AVOW-THREAT-MODEL.adoc is titled 'STAMP Protocol: Comprehensive Threat Model'). Consumers reading the repo for protocol semantics or onboarding will be confused about actual status and even the project's name; downstream repos referencing 'avow-protocol' or 'stamp-protocol' risk drift." [[must]] id = "M2" @@ -74,7 +74,7 @@ id = "S4" text = "The repository SHOULD be continuously assessed for OSSF Scorecard supply-chain security posture." system = ".github/workflows/scorecard.yml (OSSF Scorecard Action)" status = "pass" -evidence = "The MONOREPO-ROOT scorecard workflows assess the whole repo (incl. avow-protocol): .github/workflows/scorecard-reusable.yml runs ossf/scorecard-action and scorecard-enforcer.yml runs it on a schedule. (avow-protocol/.github/workflows/scorecard.yml is nested and therefore dormant — GitHub only executes root workflows; corrected during Wave-7 grounding.)" +evidence = "The MONOREPO-ROOT scorecard workflows assess the whole repo (incl. avow-protocol): .github/workflows/scorecard-reusable.yml runs ossf/scorecard-action and scorecard-enforcer.yml runs it on a schedule. (2-protocols/avow/.github/workflows/scorecard.yml is nested and therefore dormant — GitHub only executes root workflows; corrected during Wave-7 grounding.)" check = "grep -q 'ossf/scorecard-action' .github/workflows/scorecard-reusable.yml && grep -qE 'schedule:|cron:' .github/workflows/scorecard-enforcer.yml" effects = "Gives downstream consumers and OSSF-scorecard-consuming tooling (e.g. dependency risk dashboards) a continuously updated supply-chain security signal for this repo." diff --git a/.machine_readable/scorecards/axel-protocol.scorecard.a2ml b/.machine_readable/scorecards/axel-protocol.scorecard.a2ml index d07d1982c..43e479172 100644 --- a/.machine_readable/scorecards/axel-protocol.scorecard.a2ml +++ b/.machine_readable/scorecards/axel-protocol.scorecard.a2ml @@ -57,7 +57,7 @@ text = "The static site build (Casket-SSG) SHOULD be verified to build successfu system = ".github/workflows/deploy-casket.yml — 'Build site with Casket-SSG' step runs `./casket-simple build content _site`; failure of this step blocks the subsequent GitHub Pages deploy" status = "pass" evidence = ".github/workflows/deploy-casket.yml lines 18-21 run casket-simple build as a required step gating actions/upload-pages-artifact and actions/deploy-pages; a build failure fails the job." -check = "test -f axel-protocol/.github/workflows/deploy-casket.yml && grep -q 'casket-simple build' axel-protocol/.github/workflows/deploy-casket.yml" +check = "test -f 2-protocols/axel/.github/workflows/deploy-casket.yml && grep -q 'casket-simple build' 2-protocols/axel/.github/workflows/deploy-casket.yml" effects = "Downstream: the published axel-protocol.org site (policy discovery landing page, IETF draft mirrors) would fail to deploy rather than silently publishing a broken/stale site." [[should]] @@ -66,7 +66,7 @@ text = "Code changes SHOULD be scanned for known vulnerability patterns via stat system = ".github/workflows/codeql.yml — CodeQL Advanced workflow, 'actions' language matrix entry, runs on push/PR to main and weekly schedule" status = "pass" evidence = ".github/workflows/codeql.yml defines the 'analyze' job with matrix language 'actions' (build-mode none) running github/codeql-action/init and analyze on push, pull_request, and a weekly cron; this is a real, currently-configured GitHub Actions scan (though it only covers the 'actions' language, not the ReScript/AffineScript/Zig source)." -check = "test -f axel-protocol/.github/workflows/codeql.yml && grep -q 'language: actions' axel-protocol/.github/workflows/codeql.yml" +check = "test -f 2-protocols/axel/.github/workflows/codeql.yml && grep -q 'language: actions' 2-protocols/axel/.github/workflows/codeql.yml" effects = "Only GitHub Actions workflow files are scanned; the actual protocol logic (ReScript/AffineScript validators, Zig FFI) is not covered by this CodeQL matrix, so vulnerabilities there would not be caught by this system." [[should]] @@ -75,7 +75,7 @@ text = "The project SHOULD track and report an OSSF Scorecard supply-chain secur system = ".github/workflows/scorecard.yml — OSSF Scorecard action, uploads SARIF to code scanning, runs daily and on push" status = "pass" evidence = ".github/workflows/scorecard.yml runs ossf/scorecard-action@4eaacf05... on a daily cron and push to main/master, uploading results.sarif via github/codeql-action/upload-sarif." -check = "test -f axel-protocol/.github/workflows/scorecard.yml && grep -qE 'ossf/scorecard-action|scorecard-reusable' axel-protocol/.github/workflows/scorecard.yml" +check = "test -f 2-protocols/axel/.github/workflows/scorecard.yml && grep -qE 'ossf/scorecard-action|scorecard-reusable' 2-protocols/axel/.github/workflows/scorecard.yml" effects = "Consumers evaluating supply-chain trust of this repo (branch protection, pinned actions, etc.) have an ongoing automated signal; without it they'd have to audit manually." [[should]] @@ -84,7 +84,7 @@ text = "Shared per-repo governance policy (licensing, workflow linting, security system = ".github/workflows/governance.yml — calls hyperpolymath/standards/.github/workflows/governance-reusable.yml@861b5e9 (reusable workflow, pinned to a commit SHA)" status = "pass" evidence = ".github/workflows/governance.yml lines 24-26 invoke the shared reusable governance workflow on push/PR/workflow_dispatch, replacing the per-repo quality.yml/security-policy.yml/etc. scaffolding per the file's own header comment." -check = "test -f axel-protocol/.github/workflows/governance.yml && grep -q 'governance-reusable.yml' axel-protocol/.github/workflows/governance.yml" +check = "test -f 2-protocols/axel/.github/workflows/governance.yml && grep -q 'governance-reusable.yml' 2-protocols/axel/.github/workflows/governance.yml" effects = "If the shared governance-reusable.yml pin is stale or the reusable workflow itself has gaps, all estate repos including axel-protocol inherit the same blind spots; this repo cannot be evaluated for governance compliance independent of the shared bundle's contents." [[could]] diff --git a/.machine_readable/scorecards/component-readiness-grades.scorecard.a2ml b/.machine_readable/scorecards/component-readiness-grades.scorecard.a2ml index c92ec5304..a51621ac9 100644 --- a/.machine_readable/scorecards/component-readiness-grades.scorecard.a2ml +++ b/.machine_readable/scorecards/component-readiness-grades.scorecard.a2ml @@ -16,7 +16,7 @@ system = "none (manual file inspection; no CI validates prose/A2ML consistency)" status = "pass" evidence = "component-readiness-grades/COMPONENT-READINESS-GRADES.md §4 (lines 94-479, grade defs + evidence) and §7 (lines 442-479, transitions); mirrored in component-readiness-grades/COMPONENT-READINESS-GRADES.a2ml (grades block lines 17-80, transitions block lines 82-108)." check = "test -f component-readiness-grades/COMPONENT-READINESS-GRADES.adoc && grep -q '^=== 4\\. Grade Definitions' component-readiness-grades/COMPONENT-READINESS-GRADES.adoc && grep -q '^=== 7\\.' component-readiness-grades/COMPONENT-READINESS-GRADES.adoc && test -f component-readiness-grades/COMPONENT-READINESS-GRADES.a2ml && grep -q '^(grades' component-readiness-grades/COMPONENT-READINESS-GRADES.a2ml && grep -q '^(transitions' component-readiness-grades/COMPONENT-READINESS-GRADES.a2ml" -effects = "Downstream repos rely on this doc as the single normative source for grade thresholds (a2ml/READINESS.md, k9-coordination-protocol/READINESS.md both cite it directly)." +effects = "Downstream repos rely on this doc as the single normative source for grade thresholds (a2ml/READINESS.md, 2-protocols/k9-coordination/READINESS.md both cite it directly)." [[must]] id = "M2" @@ -53,7 +53,7 @@ id = "S1" text = "Projects adopting CRG SHOULD include a compact or extended assessment table (READINESS.md or STATE.scm) per the templates in §8." system = "none (no estate-wide scan enumerates which repos have adopted a READINESS.md/STATE.scm table)" status = "fail" -effects = "Across the monorepo, only 2 of the many specs/components have adopted this pattern in practice (a2ml/READINESS.md, k9-coordination-protocol/READINESS.md, both dated 2026-04-04) versus 27+ specs flagged with 'no scorecard' in COMPLIANCE-DASHBOARD.md line 58. Adoption exists but is sparse and unverified by tooling, so most components in the estate carry no discoverable CRG grade at all." +effects = "Across the monorepo, only 2 of the many specs/components have adopted this pattern in practice (a2ml/READINESS.md, 2-protocols/k9-coordination/READINESS.md, both dated 2026-04-04) versus 27+ specs flagged with 'no scorecard' in COMPLIANCE-DASHBOARD.md line 58. Adoption exists but is sparse and unverified by tooling, so most components in the estate carry no discoverable CRG grade at all." [[should]] id = "S2" diff --git a/.machine_readable/scorecards/k9-coordination-protocol.scorecard.a2ml b/.machine_readable/scorecards/k9-coordination-protocol.scorecard.a2ml index 0f0e9182a..d17acaa9d 100644 --- a/.machine_readable/scorecards/k9-coordination-protocol.scorecard.a2ml +++ b/.machine_readable/scorecards/k9-coordination-protocol.scorecard.a2ml @@ -15,7 +15,7 @@ text = "The coordination.k9 file MUST start with the magic number 'K9!' on line system = "generator/generate.js (parseK9Kennel magic-number check, line ~26) exercised by generator/generate_test.js and generator/mutation_test.js (mutant M1 'K9! magic validation' documented KILLED)" status = "pass" evidence = "generate.js:26-27 throws 'Not a valid K9 file' if lines[0] does not start with K9!; generator/mutation_test.js documents mutant M1 as KILLED when this check is removed" -check = "grep -q 'startsWith(\"K9!\")' k9-coordination-protocol/generator/generate.js && grep -q \"M1: Remove K9! magic number validation\" k9-coordination-protocol/generator/mutation_test.js" +check = "grep -q 'startsWith(\"K9!\")' 2-protocols/k9-coordination/generator/generate.js && grep -q \"M1: Remove K9! magic number validation\" 2-protocols/k9-coordination/generator/mutation_test.js" effects = "Downstream: any tool or CI step that feeds a malformed file to generate.js would silently produce garbage instructions for Claude/Copilot/Cursor/etc. instead of failing fast; consumers of the spec (individual project repos) rely on this guard to avoid corrupt coordination.k9 files being processed." [[must]] @@ -24,7 +24,7 @@ text = "The generator MUST emit a distinct, correctly-headed instruction file fo system = "generator/contract_test.js (7 tests) checks output paths .claude/CLAUDE.generated.md, .github/copilot-instructions.md, AGENTS.md, .cursorrules, .windsurfrules, GEMINI.md, .clinerules, .junie/guidelines.md, .q/rules/coordination.md all render with correct per-target headers" status = "pass" evidence = "generator/contract_test.js lines 38-45, 278-307 assert existence and correct header text for all 9 target output paths listed in README.adoc's Supported Targets table" -check = "grep -q '.claude/CLAUDE.generated.md' k9-coordination-protocol/generator/contract_test.js && grep -q '.junie/guidelines.md' k9-coordination-protocol/generator/contract_test.js && grep -q '.q/rules/coordination.md' k9-coordination-protocol/generator/contract_test.js" +check = "grep -q '.claude/CLAUDE.generated.md' 2-protocols/k9-coordination/generator/contract_test.js && grep -q '.junie/guidelines.md' 2-protocols/k9-coordination/generator/contract_test.js && grep -q '.q/rules/coordination.md' 2-protocols/k9-coordination/generator/contract_test.js" effects = "If a target's renderer breaks, that AI tool silently stops receiving coordination context in every consuming project, reintroducing the destructive-edit problem the spec exists to prevent." [[must]] @@ -40,7 +40,7 @@ text = "The k9-init tool MUST correctly extract languages/banned/practices from system = "tools/k9-init/src/main.rs unit tests (cargo test): extracts_list_from_scheme, extracts_pairs_from_scheme, missing_key_returns_empty, render_includes_header_and_sections, slug_normalises" status = "pass" evidence = "Ran cargo test in tools/k9-init: 5 passed, 0 failed (extracts_list_from_scheme, extracts_pairs_from_scheme, missing_key_returns_empty, render_includes_header_and_sections, slug_normalises); overwrite guard implemented at main.rs:42-48 (checks out_path.exists() && !force)" -check = "(cd k9-coordination-protocol/tools/k9-init && cargo test --quiet 2>&1 | grep -q '5 passed')" +check = "(cd 2-protocols/k9-coordination/tools/k9-init && cargo test --quiet 2>&1 | grep -q '5 passed')" effects = "Repos migrating via k9-init would lose hand-edited coordination.k9 files, or silently mis-extract facts from A2ML, propagating wrong invariants into every generated AI-tool instruction file." [[must]] @@ -56,7 +56,7 @@ text = "The generator's test suite SHOULD cover unit, smoke, property-based, mut system = "generator/{generate_test.js, smoke_test.js, property_test.js, mutation_test.js, fuzz_test.js, contract_test.js, regression_test.js, compatibility_test.js} — 8 files, ~2700 lines of Deno test code" status = "pass" evidence = "8 distinct test files exist on disk matching every category claimed in READINESS.md's Test Category Matrix, with substantive assertions (verified by reading contract_test.js and generate_test.js content); Deno runtime itself is not installed in this environment so the suite could not be executed here, but the files are real and non-trivial (not stubs)" -check = "for f in generate_test.js smoke_test.js property_test.js mutation_test.js fuzz_test.js contract_test.js regression_test.js compatibility_test.js; do test -s k9-coordination-protocol/generator/$f && grep -q 'Deno.test' k9-coordination-protocol/generator/$f || exit 1; done" +check = "for f in generate_test.js smoke_test.js property_test.js mutation_test.js fuzz_test.js contract_test.js regression_test.js compatibility_test.js; do test -s 2-protocols/k9-coordination/generator/$f && grep -q 'Deno.test' 2-protocols/k9-coordination/generator/$f || exit 1; done" effects = "If this suite were absent, regressions in the generator's 9 target renderers or the K9 parser would ship silently to every consuming repo's .claude/CLAUDE.md, .cursorrules, etc." [[should]] @@ -69,7 +69,7 @@ effects = "Latency regressions in the generator (e.g. from a future target addit [[should]] id = "S3" text = "The spec SHOULD be wired into repository CI so tests, mutation score, and the k9-init Rust binary are checked on every push/PR (as READINESS.md's 'dogfood-gate' claim implies)." -system = "none — searched /home/user/standards/.github/workflows (repo root) and k9-coordination-protocol/ for any workflow referencing k9-coordination, k9-init, or coordination.k9; found zero matches, and no dogfood-gate.yml file exists anywhere in the repo" +system = "none — searched /home/user/standards/.github/workflows (repo root) and 2-protocols/k9-coordination/ for any workflow referencing k9-coordination, k9-init, or coordination.k9; found zero matches, and no dogfood-gate.yml file exists anywhere in the repo" status = "fail" effects = "READINESS.md's Grade-B justification claims deployment 'via dogfood-gate on 105+ repos' and CI integration with a '--fail-on-missing flag', but no such CI job exists in this repo; this is an unverifiable/undischarged claim. Any consuming repo that trusts the stated CRG grade is relying on an assertion with no reproducible mechanical check backing it in-repo." @@ -79,7 +79,7 @@ text = "Generated output files SHOULD be idempotent (re-running the generator pr system = "generator/property_test.js (deterministic-output assertion, 3-run identity check) and generator/regression_test.js #006 (CLAUDE.md not overwritten)" status = "pass" evidence = "property_test.js and regression_test.js (read on disk) contain explicit idempotency/determinism assertions per READINESS.md's Test Category Matrix row 9 and Regression #006; not independently executed here due to missing Deno runtime, but code is present and substantive" -check = "grep -q 'Property: output content is deterministic' k9-coordination-protocol/generator/property_test.js && grep -q 'Regression #006' k9-coordination-protocol/generator/regression_test.js" +check = "grep -q 'Property: output content is deterministic' 2-protocols/k9-coordination/generator/property_test.js && grep -q 'Regression #006' 2-protocols/k9-coordination/generator/regression_test.js" effects = "Non-idempotent output would cause spurious git diffs on every regeneration across all consuming repos, polluting history and making genuine coordination.k9 changes hard to review." [[could]] diff --git a/.machine_readable/scorecards/overlay-protocol.scorecard.a2ml b/.machine_readable/scorecards/overlay-protocol.scorecard.a2ml index c44bd1cc7..a7ee6294c 100644 --- a/.machine_readable/scorecards/overlay-protocol.scorecard.a2ml +++ b/.machine_readable/scorecards/overlay-protocol.scorecard.a2ml @@ -12,10 +12,10 @@ assessor = "estate-audit" [[must]] id = "M1" text = "Every conformant overlay MUST declare an overlay-protocol section (base, upstream, peer-type, activation, deactivation, switchable, modifies-base, description) in its ECOSYSTEM.scm file." -system = "overlay-protocol/scripts/check-conformance.sh (sections 1-2: locates ECOSYSTEM.scm and extracts/validates each required field via grep)" +system = "2-protocols/overlay/scripts/check-conformance.sh (sections 1-2: locates ECOSYSTEM.scm and extracts/validates each required field via grep)" status = "pass" evidence = "scripts/check-conformance.sh lines 58-160 implement extract_field()/check_field() for base, upstream, peer-type, activation, deactivation, switchable, modifies-base, description, and exits 1 on any missing field; script passes bash -n syntax check. This validates the MUST at the mechanism level, though no repo-wide consumer currently invokes it (DECISION.adoc confirms zero consumers as of 2026-04-05)." -check = "test -f overlay-protocol/scripts/check-conformance.sh && bash -n overlay-protocol/scripts/check-conformance.sh && for f in base upstream peer-type activation deactivation switchable modifies-base description; do grep -q \"$f\" overlay-protocol/scripts/check-conformance.sh || exit 1; done" +check = "test -f 2-protocols/overlay/scripts/check-conformance.sh && bash -n 2-protocols/overlay/scripts/check-conformance.sh && for f in base upstream peer-type activation deactivation switchable modifies-base description; do grep -q \"$f\" 2-protocols/overlay/scripts/check-conformance.sh || exit 1; done" effects = "Without this check, any project claiming overlay-protocol conformance could omit required declaration fields undetected by tooling; downstream consumers (echidnabot, hypatia per SPEC section 7.2) would have nothing concrete to validate against." [[must]] @@ -37,14 +37,14 @@ id = "M4" text = "For o-extension peer type, an activate.sh script MUST exist, be executable, and be idempotent; deactivation MUST fully unset variables/paths it set." system = "scripts/check-conformance.sh section 4 (checks activate.sh exists, is +x, and exports env vars)" status = "manual-only" -effects = "There is no real o-extension inside overlay-protocol/ to run the check against (the HOL-o-extension reference implementation cited in SPEC section 8.1 lives outside this spec's home directory and was not verified here). Idempotency of activate.sh cannot be mechanically verified by grep alone (the script only checks for export statements, not idempotent semantics), so full compliance ultimately requires human review of any given activate.sh." +effects = "There is no real o-extension inside 2-protocols/overlay/ to run the check against (the HOL-o-extension reference implementation cited in SPEC section 8.1 lives outside this spec's home directory and was not verified here). Idempotency of activate.sh cannot be mechanically verified by grep alone (the script only checks for export statements, not idempotent semantics), so full compliance ultimately requires human review of any given activate.sh." [[must]] id = "M5" text = "For aggregate-library peer type, curated operations MUST each have an interface signature, documented behavioural semantics, and executable test cases (specs/ + test/ directories)." system = "scripts/check-conformance.sh section 4 (aggregate-library branch: checks specs/ dir has md/yaml files and test/ or tests/ dir exists)" status = "fail" -effects = "No aggregate-library instance exists inside overlay-protocol/ itself (the SPEC's cited reference implementation lives at 'developer-ecosystem/aggregate-library/', outside this spec's home directory, and was not verified here). The check only counts files by extension rather than confirming specs actually document per-operation semantics/tests, so even a passing run would be a shallow proxy, and no automated run has been performed against any real target." +effects = "No aggregate-library instance exists inside 2-protocols/overlay/ itself (the SPEC's cited reference implementation lives at 'developer-ecosystem/aggregate-library/', outside this spec's home directory, and was not verified here). The check only counts files by extension rather than confirming specs actually document per-operation semantics/tests, so even a passing run would be a shallow proxy, and no automated run has been performed against any real target." [[should]] id = "S1" @@ -58,7 +58,7 @@ id = "S2" text = "An AI manifest (0-AI-MANIFEST.a2ml or AI.a2ml) SHOULD declare the non-modification invariant explicitly." system = "scripts/check-conformance.sh section 5 (searches manifest for non-modification wording via regex)" status = "fail" -effects = "overlay-protocol/ itself has no 0-AI-MANIFEST.a2ml or AI.a2ml file (only .machine_readable/6a2/{META,STATE,ECOSYSTEM}.a2ml exist), so the spec's own home directory would fail this SHOULD if run against itself; downstream overlay authors following the SPEC template have no example manifest to copy from within this repo." +effects = "2-protocols/overlay/ itself has no 0-AI-MANIFEST.a2ml or AI.a2ml file (only .machine_readable/descriptiles/{META,STATE,ECOSYSTEM}.a2ml exist), so the spec's own home directory would fail this SHOULD if run against itself; downstream overlay authors following the SPEC template have no example manifest to copy from within this repo." [[should]] id = "S3" @@ -79,7 +79,7 @@ id = "C1" text = "The protocol COULD generate C headers from the Zig FFI so non-Zig consumers can bind to overlay_check_conformance and related functions." system = "none" status = "fail" -effects = "No .h files exist anywhere under overlay-protocol/; STATE.a2ml lists 'Generate C headers from Zig FFI for non-Zig consumers' as an outstanding critical-next-action. Non-Zig consumers currently have no C ABI header to include." +effects = "No .h files exist anywhere under 2-protocols/overlay/; STATE.a2ml lists 'Generate C headers from Zig FFI for non-Zig consumers' as an outstanding critical-next-action. Non-Zig consumers currently have no C ABI header to include." [[could]] id = "C2" diff --git a/.machine_readable/scorecards/release-pre-flight.scorecard.a2ml b/.machine_readable/scorecards/release-pre-flight.scorecard.a2ml index 481eb9a4b..3744a4a35 100644 --- a/.machine_readable/scorecards/release-pre-flight.scorecard.a2ml +++ b/.machine_readable/scorecards/release-pre-flight.scorecard.a2ml @@ -23,7 +23,7 @@ id = "M2" text = "There MUST be an automated audit script that mechanically scans a target repo for unfinished-marker residue (TODO/FIXME/XXX/HACK/STUB/PARTIAL, template placeholders) in claimed release paths." system = "/home/user/standards/release-pre-flight/v1-audit.sh check_marker_scan() (MARKER_PATTERN regex via ripgrep)" status = "pass" -evidence = "Running `bash release-pre-flight/v1-audit.sh .` against the monorepo root exercises check_marker_scan and correctly flags real STUB/TODO occurrences (e.g. session-management-standards/continuity/*/CHECKLIST.adoc:7 'Status: STUB', axel-protocol/config/ci.k9.ncl:38 'TODO: Add coverage')." +evidence = "Running `bash release-pre-flight/v1-audit.sh .` against the monorepo root exercises check_marker_scan and correctly flags real STUB/TODO occurrences (e.g. session-management-standards/continuity/*/CHECKLIST.adoc:7 'Status: STUB', 2-protocols/axel/config/ci.k9.ncl:38 'TODO: Add coverage')." check = "bash release-pre-flight/v1-audit.sh . 2>&1 | grep -q 'BLOCKER: unfinished markers or placeholders present'" effects = "Without this, downstream repos could tag v1.0.0 while shipping scaffold residue; consumers of the standards repo could not trust the marker-scan portion of any v1.0.0 claim." @@ -73,7 +73,7 @@ id = "S3" text = "The audit script SHOULD surface (not gate) explicit stable/high-assurance claims found in README/CHANGELOG/ROADMAP/docs so a human reviewer can cross-check claim-vs-artifact parity (gate 3.7)." system = "/home/user/standards/release-pre-flight/v1-audit.sh check_stable_claims()" status = "pass" -evidence = "Running the script surfaced real matches such as axel-protocol/ROADMAP.adoc:15 'v1.0.0 - Stable Release', .machine_readable/contractiles/trust/Trustfile.a2ml:395 'ALPHA -- NOT production-ready', confirming the informational scan works end-to-end." +evidence = "Running the script surfaced real matches such as 2-protocols/axel/ROADMAP.adoc:15 'v1.0.0 - Stable Release', .machine_readable/contractiles/trust/Trustfile.a2ml:395 'ALPHA -- NOT production-ready', confirming the informational scan works end-to-end." check = "bash release-pre-flight/v1-audit.sh . 2>&1 | grep -q 'INFO: stable or high-assurance claims detected'" effects = "Reviewers doing the manual claim-parity judgement (gate 3.7) lose their starting point for finding overclaiming text if this check silently broke." diff --git a/.well-known/ai.txt b/.well-known/ai.txt index d823a9f99..e6c8466bd 100644 --- a/.well-known/ai.txt +++ b/.well-known/ai.txt @@ -3,7 +3,7 @@ # Informal, robots-style directives for AI/ML agents and crawlers. # The estate maintains a machine-readable bot-exclusion registry at # .machine_readable/bot_exclusion_registry.a2ml and an AI-gatekeeper -# protocol under 0-ai-gatekeeper-protocol/; this file is the summary. +# protocol under 2-protocols/0-ai-gatekeeper/; this file is the summary. User-Agent: * diff --git a/0-canon/CRG-SELF-ASSESSMENT.adoc b/0-canon/CRG-SELF-ASSESSMENT.adoc index 437bf4155..ddca73c2a 100644 --- a/0-canon/CRG-SELF-ASSESSMENT.adoc +++ b/0-canon/CRG-SELF-ASSESSMENT.adoc @@ -16,7 +16,7 @@ Assessed: 2026-04-09 | Unit tests | Present -| a2ml/bindings/rust (47), 1-formats/k9/bindings/rust (45), mcp-repo-guardian (36), axel-protocol (14), groove-protocol (10), avow-protocol/src (8) +| a2ml/bindings/rust (47), 1-formats/k9/bindings/rust (45), mcp-repo-guardian (36), axel-protocol (14), groove-protocol (10), 2-protocols/avow/src (8) | Smoke tests | Present diff --git a/0-canon/rsr/LANGUAGE-POLICY.adoc b/0-canon/rsr/LANGUAGE-POLICY.adoc index 7b5c6ae9a..9eb695130 100644 --- a/0-canon/rsr/LANGUAGE-POLICY.adoc +++ b/0-canon/rsr/LANGUAGE-POLICY.adoc @@ -579,7 +579,7 @@ not prose alone. Retired three dead carve-outs, verified no-op estate-wide against every location the hypatia `path_allow_prefixes` substrings could match: -(1) the `avow-protocol/telegram-bot/**` TS/RS "PERMANENT" exemption — +(1) the `2-protocols/avow/telegram-bot/**` TS/RS "PERMANENT" exemption — the bot was rewritten in AffineScript (zero `.ts`/`.res` on main), so the "no AffineScript binding planned" rationale no longer described reality; (2) the `affinescript-deno-test/**` bootstrap-shim exemption @@ -632,7 +632,7 @@ Codified the *TypeScript → AffineScript migration state*: in-flight, not complete. Existing `.ts`/`.tsx` is grandfathered while migration to AffineScript proceeds; new TS in non-carve-out paths is blocked. Documented five carve-out classes (`.d.ts`, `*/bindings/{deno,ts,typescript}/`, -`avow-protocol/telegram-bot/avow-telegram-bot/**`, tooling configs, +`2-protocols/avow/telegram-bot/avow-telegram-bot/**`, tooling configs, upstream forks + archives). Detection rule: hypatia `cicd_rules/typescript_detected` extended with `path_allow_prefixes` mirroring the V-lang rule's structure (hypatia#372/#373 precedent). diff --git a/1-formats/sub-specs/did-you-actually-do-that/README.adoc b/1-formats/sub-specs/did-you-actually-do-that/README.adoc index b5085a7ae..e5855b3f0 100644 --- a/1-formats/sub-specs/did-you-actually-do-that/README.adoc +++ b/1-formats/sub-specs/did-you-actually-do-that/README.adoc @@ -35,7 +35,7 @@ green*. | 1. Admission | An agent MUST read the manifest/context before acting. -| `0-ai-gatekeeper-protocol/` +| `2-protocols/0-ai-gatekeeper/` | 2. Pre-action gating | Entropy budgets, intent classification, confirmation for risky ops — *before* an op runs. diff --git a/1-formats/sub-specs/inline-annotations/examples/output.a2ml b/1-formats/sub-specs/inline-annotations/examples/output.a2ml index a31d507f9..0533c0fca 100644 --- a/1-formats/sub-specs/inline-annotations/examples/output.a2ml +++ b/1-formats/sub-specs/inline-annotations/examples/output.a2ml @@ -40,7 +40,7 @@ severity: critical @end @annotation(kind="trust", id="groove-encode-trust"): -file: groove-protocol/reference/ipv6t/src/encode.zig +file: 2-protocols/groove/reference/ipv6t/src/encode.zig line: 4 target_line: 6 level: proven @@ -49,7 +49,7 @@ since: 2026-03-12 @end @annotation(kind="contract", id="groove-encode-abi"): -file: groove-protocol/reference/ipv6t/src/encode.zig +file: 2-protocols/groove/reference/ipv6t/src/encode.zig line: 5 target_line: 6 obligation: must diff --git a/0-ai-gatekeeper-protocol/.editorconfig b/2-protocols/0-ai-gatekeeper/.editorconfig similarity index 100% rename from 0-ai-gatekeeper-protocol/.editorconfig rename to 2-protocols/0-ai-gatekeeper/.editorconfig diff --git a/0-ai-gatekeeper-protocol/.gitattributes b/2-protocols/0-ai-gatekeeper/.gitattributes similarity index 100% rename from 0-ai-gatekeeper-protocol/.gitattributes rename to 2-protocols/0-ai-gatekeeper/.gitattributes diff --git a/0-ai-gatekeeper-protocol/.github/FUNDING.yml b/2-protocols/0-ai-gatekeeper/.github/FUNDING.yml similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/FUNDING.yml rename to 2-protocols/0-ai-gatekeeper/.github/FUNDING.yml diff --git a/0-ai-gatekeeper-protocol/.github/ISSUE_TEMPLATE/bug_report.md b/2-protocols/0-ai-gatekeeper/.github/ISSUE_TEMPLATE/bug_report.md similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/ISSUE_TEMPLATE/bug_report.md rename to 2-protocols/0-ai-gatekeeper/.github/ISSUE_TEMPLATE/bug_report.md diff --git a/0-ai-gatekeeper-protocol/.github/ISSUE_TEMPLATE/custom.md b/2-protocols/0-ai-gatekeeper/.github/ISSUE_TEMPLATE/custom.md similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/ISSUE_TEMPLATE/custom.md rename to 2-protocols/0-ai-gatekeeper/.github/ISSUE_TEMPLATE/custom.md diff --git a/0-ai-gatekeeper-protocol/.github/ISSUE_TEMPLATE/documentation.md b/2-protocols/0-ai-gatekeeper/.github/ISSUE_TEMPLATE/documentation.md similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/ISSUE_TEMPLATE/documentation.md rename to 2-protocols/0-ai-gatekeeper/.github/ISSUE_TEMPLATE/documentation.md diff --git a/0-ai-gatekeeper-protocol/.github/ISSUE_TEMPLATE/feature_request.md b/2-protocols/0-ai-gatekeeper/.github/ISSUE_TEMPLATE/feature_request.md similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/ISSUE_TEMPLATE/feature_request.md rename to 2-protocols/0-ai-gatekeeper/.github/ISSUE_TEMPLATE/feature_request.md diff --git a/0-ai-gatekeeper-protocol/.github/ISSUE_TEMPLATE/question.md b/2-protocols/0-ai-gatekeeper/.github/ISSUE_TEMPLATE/question.md similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/ISSUE_TEMPLATE/question.md rename to 2-protocols/0-ai-gatekeeper/.github/ISSUE_TEMPLATE/question.md diff --git a/0-ai-gatekeeper-protocol/.github/dependabot.yml b/2-protocols/0-ai-gatekeeper/.github/dependabot.yml similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/dependabot.yml rename to 2-protocols/0-ai-gatekeeper/.github/dependabot.yml diff --git a/0-ai-gatekeeper-protocol/.github/workflows/codeql.yml b/2-protocols/0-ai-gatekeeper/.github/workflows/codeql.yml similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/workflows/codeql.yml rename to 2-protocols/0-ai-gatekeeper/.github/workflows/codeql.yml diff --git a/0-ai-gatekeeper-protocol/.github/workflows/governance.yml b/2-protocols/0-ai-gatekeeper/.github/workflows/governance.yml similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/workflows/governance.yml rename to 2-protocols/0-ai-gatekeeper/.github/workflows/governance.yml diff --git a/0-ai-gatekeeper-protocol/.github/workflows/hypatia-scan.yml b/2-protocols/0-ai-gatekeeper/.github/workflows/hypatia-scan.yml similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/workflows/hypatia-scan.yml rename to 2-protocols/0-ai-gatekeeper/.github/workflows/hypatia-scan.yml diff --git a/0-ai-gatekeeper-protocol/.github/workflows/jekyll-gh-pages.yml b/2-protocols/0-ai-gatekeeper/.github/workflows/jekyll-gh-pages.yml similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/workflows/jekyll-gh-pages.yml rename to 2-protocols/0-ai-gatekeeper/.github/workflows/jekyll-gh-pages.yml diff --git a/0-ai-gatekeeper-protocol/.github/workflows/jekyll.yml b/2-protocols/0-ai-gatekeeper/.github/workflows/jekyll.yml similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/workflows/jekyll.yml rename to 2-protocols/0-ai-gatekeeper/.github/workflows/jekyll.yml diff --git a/0-ai-gatekeeper-protocol/.github/workflows/mirror.yml b/2-protocols/0-ai-gatekeeper/.github/workflows/mirror.yml similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/workflows/mirror.yml rename to 2-protocols/0-ai-gatekeeper/.github/workflows/mirror.yml diff --git a/0-ai-gatekeeper-protocol/.github/workflows/scorecard-enforcer.yml b/2-protocols/0-ai-gatekeeper/.github/workflows/scorecard-enforcer.yml similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/workflows/scorecard-enforcer.yml rename to 2-protocols/0-ai-gatekeeper/.github/workflows/scorecard-enforcer.yml diff --git a/0-ai-gatekeeper-protocol/.github/workflows/scorecard.yml b/2-protocols/0-ai-gatekeeper/.github/workflows/scorecard.yml similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/workflows/scorecard.yml rename to 2-protocols/0-ai-gatekeeper/.github/workflows/scorecard.yml diff --git a/0-ai-gatekeeper-protocol/.github/workflows/secret-scanner.yml b/2-protocols/0-ai-gatekeeper/.github/workflows/secret-scanner.yml similarity index 100% rename from 0-ai-gatekeeper-protocol/.github/workflows/secret-scanner.yml rename to 2-protocols/0-ai-gatekeeper/.github/workflows/secret-scanner.yml diff --git a/0-ai-gatekeeper-protocol/.gitignore b/2-protocols/0-ai-gatekeeper/.gitignore similarity index 100% rename from 0-ai-gatekeeper-protocol/.gitignore rename to 2-protocols/0-ai-gatekeeper/.gitignore diff --git a/0-ai-gatekeeper-protocol/.gitlab-ci.yml b/2-protocols/0-ai-gatekeeper/.gitlab-ci.yml similarity index 100% rename from 0-ai-gatekeeper-protocol/.gitlab-ci.yml rename to 2-protocols/0-ai-gatekeeper/.gitlab-ci.yml diff --git a/0-ai-gatekeeper-protocol/.machine_readable/descriptiles/AGENTIC.a2ml b/2-protocols/0-ai-gatekeeper/.machine_readable/descriptiles/AGENTIC.a2ml similarity index 100% rename from 0-ai-gatekeeper-protocol/.machine_readable/descriptiles/AGENTIC.a2ml rename to 2-protocols/0-ai-gatekeeper/.machine_readable/descriptiles/AGENTIC.a2ml diff --git a/0-ai-gatekeeper-protocol/.machine_readable/descriptiles/ECOSYSTEM.a2ml b/2-protocols/0-ai-gatekeeper/.machine_readable/descriptiles/ECOSYSTEM.a2ml similarity index 100% rename from 0-ai-gatekeeper-protocol/.machine_readable/descriptiles/ECOSYSTEM.a2ml rename to 2-protocols/0-ai-gatekeeper/.machine_readable/descriptiles/ECOSYSTEM.a2ml diff --git a/0-ai-gatekeeper-protocol/.machine_readable/descriptiles/META.a2ml b/2-protocols/0-ai-gatekeeper/.machine_readable/descriptiles/META.a2ml similarity index 100% rename from 0-ai-gatekeeper-protocol/.machine_readable/descriptiles/META.a2ml rename to 2-protocols/0-ai-gatekeeper/.machine_readable/descriptiles/META.a2ml diff --git a/0-ai-gatekeeper-protocol/.machine_readable/descriptiles/NEUROSYM.a2ml b/2-protocols/0-ai-gatekeeper/.machine_readable/descriptiles/NEUROSYM.a2ml similarity index 100% rename from 0-ai-gatekeeper-protocol/.machine_readable/descriptiles/NEUROSYM.a2ml rename to 2-protocols/0-ai-gatekeeper/.machine_readable/descriptiles/NEUROSYM.a2ml diff --git a/0-ai-gatekeeper-protocol/.machine_readable/descriptiles/PLAYBOOK.a2ml b/2-protocols/0-ai-gatekeeper/.machine_readable/descriptiles/PLAYBOOK.a2ml similarity index 100% rename from 0-ai-gatekeeper-protocol/.machine_readable/descriptiles/PLAYBOOK.a2ml rename to 2-protocols/0-ai-gatekeeper/.machine_readable/descriptiles/PLAYBOOK.a2ml diff --git a/0-ai-gatekeeper-protocol/.machine_readable/descriptiles/STATE.a2ml b/2-protocols/0-ai-gatekeeper/.machine_readable/descriptiles/STATE.a2ml similarity index 100% rename from 0-ai-gatekeeper-protocol/.machine_readable/descriptiles/STATE.a2ml rename to 2-protocols/0-ai-gatekeeper/.machine_readable/descriptiles/STATE.a2ml diff --git a/0-ai-gatekeeper-protocol/.nojekyll b/2-protocols/0-ai-gatekeeper/.nojekyll similarity index 100% rename from 0-ai-gatekeeper-protocol/.nojekyll rename to 2-protocols/0-ai-gatekeeper/.nojekyll diff --git a/0-ai-gatekeeper-protocol/0-AI-MANIFEST.a2ml b/2-protocols/0-ai-gatekeeper/0-AI-MANIFEST.a2ml similarity index 100% rename from 0-ai-gatekeeper-protocol/0-AI-MANIFEST.a2ml rename to 2-protocols/0-ai-gatekeeper/0-AI-MANIFEST.a2ml diff --git a/0-ai-gatekeeper-protocol/ABI-FFI-README.adoc b/2-protocols/0-ai-gatekeeper/ABI-FFI-README.adoc similarity index 100% rename from 0-ai-gatekeeper-protocol/ABI-FFI-README.adoc rename to 2-protocols/0-ai-gatekeeper/ABI-FFI-README.adoc diff --git a/0-ai-gatekeeper-protocol/CODE_OF_CONDUCT.adoc b/2-protocols/0-ai-gatekeeper/CODE_OF_CONDUCT.adoc similarity index 100% rename from 0-ai-gatekeeper-protocol/CODE_OF_CONDUCT.adoc rename to 2-protocols/0-ai-gatekeeper/CODE_OF_CONDUCT.adoc diff --git a/0-ai-gatekeeper-protocol/CONTRIBUTING.adoc b/2-protocols/0-ai-gatekeeper/CONTRIBUTING.adoc similarity index 100% rename from 0-ai-gatekeeper-protocol/CONTRIBUTING.adoc rename to 2-protocols/0-ai-gatekeeper/CONTRIBUTING.adoc diff --git a/0-ai-gatekeeper-protocol/GATEKEEPER-NOTES-COMPLETE-2026-02-07.adoc b/2-protocols/0-ai-gatekeeper/GATEKEEPER-NOTES-COMPLETE-2026-02-07.adoc similarity index 100% rename from 0-ai-gatekeeper-protocol/GATEKEEPER-NOTES-COMPLETE-2026-02-07.adoc rename to 2-protocols/0-ai-gatekeeper/GATEKEEPER-NOTES-COMPLETE-2026-02-07.adoc diff --git a/0-ai-gatekeeper-protocol/LICENSE b/2-protocols/0-ai-gatekeeper/LICENSE similarity index 100% rename from 0-ai-gatekeeper-protocol/LICENSE rename to 2-protocols/0-ai-gatekeeper/LICENSE diff --git a/0-ai-gatekeeper-protocol/MAINTAINERS.adoc b/2-protocols/0-ai-gatekeeper/MAINTAINERS.adoc similarity index 100% rename from 0-ai-gatekeeper-protocol/MAINTAINERS.adoc rename to 2-protocols/0-ai-gatekeeper/MAINTAINERS.adoc diff --git a/0-ai-gatekeeper-protocol/README.adoc b/2-protocols/0-ai-gatekeeper/README.adoc similarity index 100% rename from 0-ai-gatekeeper-protocol/README.adoc rename to 2-protocols/0-ai-gatekeeper/README.adoc diff --git a/0-ai-gatekeeper-protocol/ROADMAP.adoc b/2-protocols/0-ai-gatekeeper/ROADMAP.adoc similarity index 100% rename from 0-ai-gatekeeper-protocol/ROADMAP.adoc rename to 2-protocols/0-ai-gatekeeper/ROADMAP.adoc diff --git a/0-ai-gatekeeper-protocol/RSR_OUTLINE.adoc b/2-protocols/0-ai-gatekeeper/RSR_OUTLINE.adoc similarity index 100% rename from 0-ai-gatekeeper-protocol/RSR_OUTLINE.adoc rename to 2-protocols/0-ai-gatekeeper/RSR_OUTLINE.adoc diff --git a/0-ai-gatekeeper-protocol/SECURITY.adoc b/2-protocols/0-ai-gatekeeper/SECURITY.adoc similarity index 100% rename from 0-ai-gatekeeper-protocol/SECURITY.adoc rename to 2-protocols/0-ai-gatekeeper/SECURITY.adoc diff --git a/0-ai-gatekeeper-protocol/contractiles/README.adoc b/2-protocols/0-ai-gatekeeper/contractiles/README.adoc similarity index 100% rename from 0-ai-gatekeeper-protocol/contractiles/README.adoc rename to 2-protocols/0-ai-gatekeeper/contractiles/README.adoc diff --git a/0-ai-gatekeeper-protocol/contractiles/dust/Dustfile b/2-protocols/0-ai-gatekeeper/contractiles/dust/Dustfile similarity index 100% rename from 0-ai-gatekeeper-protocol/contractiles/dust/Dustfile rename to 2-protocols/0-ai-gatekeeper/contractiles/dust/Dustfile diff --git a/0-ai-gatekeeper-protocol/contractiles/must/Mustfile b/2-protocols/0-ai-gatekeeper/contractiles/must/Mustfile similarity index 100% rename from 0-ai-gatekeeper-protocol/contractiles/must/Mustfile rename to 2-protocols/0-ai-gatekeeper/contractiles/must/Mustfile diff --git a/0-ai-gatekeeper-protocol/docs/AI-MANIFEST-SPEC.adoc b/2-protocols/0-ai-gatekeeper/docs/AI-MANIFEST-SPEC.adoc similarity index 100% rename from 0-ai-gatekeeper-protocol/docs/AI-MANIFEST-SPEC.adoc rename to 2-protocols/0-ai-gatekeeper/docs/AI-MANIFEST-SPEC.adoc diff --git a/0-ai-gatekeeper-protocol/docs/CITATIONS.adoc b/2-protocols/0-ai-gatekeeper/docs/CITATIONS.adoc similarity index 100% rename from 0-ai-gatekeeper-protocol/docs/CITATIONS.adoc rename to 2-protocols/0-ai-gatekeeper/docs/CITATIONS.adoc diff --git a/0-ai-gatekeeper-protocol/docs/FEEDBACK-TO-ANTHROPIC.adoc b/2-protocols/0-ai-gatekeeper/docs/FEEDBACK-TO-ANTHROPIC.adoc similarity index 100% rename from 0-ai-gatekeeper-protocol/docs/FEEDBACK-TO-ANTHROPIC.adoc rename to 2-protocols/0-ai-gatekeeper/docs/FEEDBACK-TO-ANTHROPIC.adoc diff --git a/0-ai-gatekeeper-protocol/docs/RATIONALE.adoc b/2-protocols/0-ai-gatekeeper/docs/RATIONALE.adoc similarity index 100% rename from 0-ai-gatekeeper-protocol/docs/RATIONALE.adoc rename to 2-protocols/0-ai-gatekeeper/docs/RATIONALE.adoc diff --git a/0-ai-gatekeeper-protocol/examples/0-AI-MANIFEST.a2ml b/2-protocols/0-ai-gatekeeper/examples/0-AI-MANIFEST.a2ml similarity index 100% rename from 0-ai-gatekeeper-protocol/examples/0-AI-MANIFEST.a2ml rename to 2-protocols/0-ai-gatekeeper/examples/0-AI-MANIFEST.a2ml diff --git a/0-ai-gatekeeper-protocol/examples/web-project-deno.json b/2-protocols/0-ai-gatekeeper/examples/web-project-deno.json similarity index 100% rename from 0-ai-gatekeeper-protocol/examples/web-project-deno.json rename to 2-protocols/0-ai-gatekeeper/examples/web-project-deno.json diff --git a/0-ai-gatekeeper-protocol/ffi/zig/build.zig b/2-protocols/0-ai-gatekeeper/ffi/zig/build.zig similarity index 100% rename from 0-ai-gatekeeper-protocol/ffi/zig/build.zig rename to 2-protocols/0-ai-gatekeeper/ffi/zig/build.zig diff --git a/0-ai-gatekeeper-protocol/ffi/zig/src/main.zig b/2-protocols/0-ai-gatekeeper/ffi/zig/src/main.zig similarity index 100% rename from 0-ai-gatekeeper-protocol/ffi/zig/src/main.zig rename to 2-protocols/0-ai-gatekeeper/ffi/zig/src/main.zig diff --git a/0-ai-gatekeeper-protocol/ffi/zig/test/integration_test.zig b/2-protocols/0-ai-gatekeeper/ffi/zig/test/integration_test.zig similarity index 100% rename from 0-ai-gatekeeper-protocol/ffi/zig/test/integration_test.zig rename to 2-protocols/0-ai-gatekeeper/ffi/zig/test/integration_test.zig diff --git a/avow-protocol/BINDING.adoc b/2-protocols/avow/BINDING.adoc similarity index 100% rename from avow-protocol/BINDING.adoc rename to 2-protocols/avow/BINDING.adoc diff --git a/axel-protocol/.editorconfig b/2-protocols/axel/.editorconfig similarity index 100% rename from axel-protocol/.editorconfig rename to 2-protocols/axel/.editorconfig diff --git a/axel-protocol/.gitattributes b/2-protocols/axel/.gitattributes similarity index 100% rename from axel-protocol/.gitattributes rename to 2-protocols/axel/.gitattributes diff --git a/axel-protocol/.github/FUNDING.yml b/2-protocols/axel/.github/FUNDING.yml similarity index 100% rename from axel-protocol/.github/FUNDING.yml rename to 2-protocols/axel/.github/FUNDING.yml diff --git a/axel-protocol/.github/ISSUE_TEMPLATE/bug_report.md b/2-protocols/axel/.github/ISSUE_TEMPLATE/bug_report.md similarity index 100% rename from axel-protocol/.github/ISSUE_TEMPLATE/bug_report.md rename to 2-protocols/axel/.github/ISSUE_TEMPLATE/bug_report.md diff --git a/axel-protocol/.github/ISSUE_TEMPLATE/custom.md b/2-protocols/axel/.github/ISSUE_TEMPLATE/custom.md similarity index 100% rename from axel-protocol/.github/ISSUE_TEMPLATE/custom.md rename to 2-protocols/axel/.github/ISSUE_TEMPLATE/custom.md diff --git a/axel-protocol/.github/ISSUE_TEMPLATE/feature_request.md b/2-protocols/axel/.github/ISSUE_TEMPLATE/feature_request.md similarity index 100% rename from axel-protocol/.github/ISSUE_TEMPLATE/feature_request.md rename to 2-protocols/axel/.github/ISSUE_TEMPLATE/feature_request.md diff --git a/axel-protocol/.github/dependabot.yml b/2-protocols/axel/.github/dependabot.yml similarity index 100% rename from axel-protocol/.github/dependabot.yml rename to 2-protocols/axel/.github/dependabot.yml diff --git a/axel-protocol/.github/workflows/codeql.yml b/2-protocols/axel/.github/workflows/codeql.yml similarity index 100% rename from axel-protocol/.github/workflows/codeql.yml rename to 2-protocols/axel/.github/workflows/codeql.yml diff --git a/axel-protocol/.github/workflows/deploy-casket.yml b/2-protocols/axel/.github/workflows/deploy-casket.yml similarity index 100% rename from axel-protocol/.github/workflows/deploy-casket.yml rename to 2-protocols/axel/.github/workflows/deploy-casket.yml diff --git a/axel-protocol/.github/workflows/governance.yml b/2-protocols/axel/.github/workflows/governance.yml similarity index 100% rename from axel-protocol/.github/workflows/governance.yml rename to 2-protocols/axel/.github/workflows/governance.yml diff --git a/axel-protocol/.github/workflows/scorecard.yml b/2-protocols/axel/.github/workflows/scorecard.yml similarity index 100% rename from axel-protocol/.github/workflows/scorecard.yml rename to 2-protocols/axel/.github/workflows/scorecard.yml diff --git a/axel-protocol/.gitignore b/2-protocols/axel/.gitignore similarity index 100% rename from axel-protocol/.gitignore rename to 2-protocols/axel/.gitignore diff --git a/axel-protocol/.machine_readable/descriptiles/ECOSYSTEM.a2ml b/2-protocols/axel/.machine_readable/descriptiles/ECOSYSTEM.a2ml similarity index 100% rename from axel-protocol/.machine_readable/descriptiles/ECOSYSTEM.a2ml rename to 2-protocols/axel/.machine_readable/descriptiles/ECOSYSTEM.a2ml diff --git a/axel-protocol/.machine_readable/descriptiles/META.a2ml b/2-protocols/axel/.machine_readable/descriptiles/META.a2ml similarity index 100% rename from axel-protocol/.machine_readable/descriptiles/META.a2ml rename to 2-protocols/axel/.machine_readable/descriptiles/META.a2ml diff --git a/axel-protocol/.machine_readable/descriptiles/STATE.a2ml b/2-protocols/axel/.machine_readable/descriptiles/STATE.a2ml similarity index 100% rename from axel-protocol/.machine_readable/descriptiles/STATE.a2ml rename to 2-protocols/axel/.machine_readable/descriptiles/STATE.a2ml diff --git a/axel-protocol/.well-known/axel-policy b/2-protocols/axel/.well-known/axel-policy similarity index 100% rename from axel-protocol/.well-known/axel-policy rename to 2-protocols/axel/.well-known/axel-policy diff --git a/axel-protocol/.well-known/change-password b/2-protocols/axel/.well-known/change-password similarity index 100% rename from axel-protocol/.well-known/change-password rename to 2-protocols/axel/.well-known/change-password diff --git a/axel-protocol/.well-known/dnt-policy.txt b/2-protocols/axel/.well-known/dnt-policy.txt similarity index 100% rename from axel-protocol/.well-known/dnt-policy.txt rename to 2-protocols/axel/.well-known/dnt-policy.txt diff --git a/axel-protocol/.well-known/keybase.txt b/2-protocols/axel/.well-known/keybase.txt similarity index 100% rename from axel-protocol/.well-known/keybase.txt rename to 2-protocols/axel/.well-known/keybase.txt diff --git a/axel-protocol/.well-known/security.txt b/2-protocols/axel/.well-known/security.txt similarity index 100% rename from axel-protocol/.well-known/security.txt rename to 2-protocols/axel/.well-known/security.txt diff --git a/axel-protocol/.well-known/sellers.json b/2-protocols/axel/.well-known/sellers.json similarity index 100% rename from axel-protocol/.well-known/sellers.json rename to 2-protocols/axel/.well-known/sellers.json diff --git a/axel-protocol/.well-known/trust.txt b/2-protocols/axel/.well-known/trust.txt similarity index 100% rename from axel-protocol/.well-known/trust.txt rename to 2-protocols/axel/.well-known/trust.txt diff --git a/axel-protocol/ABI-FFI-README.adoc b/2-protocols/axel/ABI-FFI-README.adoc similarity index 100% rename from axel-protocol/ABI-FFI-README.adoc rename to 2-protocols/axel/ABI-FFI-README.adoc diff --git a/axel-protocol/CHARTER.adoc b/2-protocols/axel/CHARTER.adoc similarity index 100% rename from axel-protocol/CHARTER.adoc rename to 2-protocols/axel/CHARTER.adoc diff --git a/axel-protocol/CNAME b/2-protocols/axel/CNAME similarity index 100% rename from axel-protocol/CNAME rename to 2-protocols/axel/CNAME diff --git a/axel-protocol/CODE_OF_CONDUCT.adoc b/2-protocols/axel/CODE_OF_CONDUCT.adoc similarity index 100% rename from axel-protocol/CODE_OF_CONDUCT.adoc rename to 2-protocols/axel/CODE_OF_CONDUCT.adoc diff --git a/axel-protocol/CONTRIBUTING.adoc b/2-protocols/axel/CONTRIBUTING.adoc similarity index 100% rename from axel-protocol/CONTRIBUTING.adoc rename to 2-protocols/axel/CONTRIBUTING.adoc diff --git a/axel-protocol/Containerfile b/2-protocols/axel/Containerfile similarity index 100% rename from axel-protocol/Containerfile rename to 2-protocols/axel/Containerfile diff --git a/axel-protocol/EXHIBIT-A-ETHICAL-USE.txt b/2-protocols/axel/EXHIBIT-A-ETHICAL-USE.txt similarity index 100% rename from axel-protocol/EXHIBIT-A-ETHICAL-USE.txt rename to 2-protocols/axel/EXHIBIT-A-ETHICAL-USE.txt diff --git a/axel-protocol/EXHIBIT-B-QUANTUM-SAFE.txt b/2-protocols/axel/EXHIBIT-B-QUANTUM-SAFE.txt similarity index 100% rename from axel-protocol/EXHIBIT-B-QUANTUM-SAFE.txt rename to 2-protocols/axel/EXHIBIT-B-QUANTUM-SAFE.txt diff --git a/axel-protocol/LICENSE b/2-protocols/axel/LICENSE similarity index 100% rename from axel-protocol/LICENSE rename to 2-protocols/axel/LICENSE diff --git a/axel-protocol/MAINTAINERS.adoc b/2-protocols/axel/MAINTAINERS.adoc similarity index 100% rename from axel-protocol/MAINTAINERS.adoc rename to 2-protocols/axel/MAINTAINERS.adoc diff --git a/axel-protocol/README.adoc b/2-protocols/axel/README.adoc similarity index 100% rename from axel-protocol/README.adoc rename to 2-protocols/axel/README.adoc diff --git a/axel-protocol/ROADMAP.adoc b/2-protocols/axel/ROADMAP.adoc similarity index 100% rename from axel-protocol/ROADMAP.adoc rename to 2-protocols/axel/ROADMAP.adoc diff --git a/axel-protocol/RSR_OUTLINE.adoc b/2-protocols/axel/RSR_OUTLINE.adoc similarity index 100% rename from axel-protocol/RSR_OUTLINE.adoc rename to 2-protocols/axel/RSR_OUTLINE.adoc diff --git a/axel-protocol/SECURITY-SETUP.adoc b/2-protocols/axel/SECURITY-SETUP.adoc similarity index 100% rename from axel-protocol/SECURITY-SETUP.adoc rename to 2-protocols/axel/SECURITY-SETUP.adoc diff --git a/axel-protocol/SECURITY.adoc b/2-protocols/axel/SECURITY.adoc similarity index 100% rename from axel-protocol/SECURITY.adoc rename to 2-protocols/axel/SECURITY.adoc diff --git a/axel-protocol/_headers b/2-protocols/axel/_headers similarity index 100% rename from axel-protocol/_headers rename to 2-protocols/axel/_headers diff --git a/axel-protocol/ads.txt b/2-protocols/axel/ads.txt similarity index 100% rename from axel-protocol/ads.txt rename to 2-protocols/axel/ads.txt diff --git a/axel-protocol/app-ads.txt b/2-protocols/axel/app-ads.txt similarity index 100% rename from axel-protocol/app-ads.txt rename to 2-protocols/axel/app-ads.txt diff --git a/axel-protocol/axel-protocol.org.zone b/2-protocols/axel/axel-protocol.org.zone similarity index 100% rename from axel-protocol/axel-protocol.org.zone rename to 2-protocols/axel/axel-protocol.org.zone diff --git a/axel-protocol/axel_sts_demo.affine b/2-protocols/axel/axel_sts_demo.affine similarity index 100% rename from axel-protocol/axel_sts_demo.affine rename to 2-protocols/axel/axel_sts_demo.affine diff --git a/axel-protocol/casket-simple b/2-protocols/axel/casket-simple similarity index 100% rename from axel-protocol/casket-simple rename to 2-protocols/axel/casket-simple diff --git a/axel-protocol/casket-ssg b/2-protocols/axel/casket-ssg similarity index 100% rename from axel-protocol/casket-ssg rename to 2-protocols/axel/casket-ssg diff --git a/axel-protocol/cloudflare-import.txt b/2-protocols/axel/cloudflare-import.txt similarity index 100% rename from axel-protocol/cloudflare-import.txt rename to 2-protocols/axel/cloudflare-import.txt diff --git a/axel-protocol/config/ci.k9.ncl b/2-protocols/axel/config/ci.k9.ncl similarity index 100% rename from axel-protocol/config/ci.k9.ncl rename to 2-protocols/axel/config/ci.k9.ncl diff --git a/axel-protocol/config/metadata.k9.ncl b/2-protocols/axel/config/metadata.k9.ncl similarity index 100% rename from axel-protocol/config/metadata.k9.ncl rename to 2-protocols/axel/config/metadata.k9.ncl diff --git a/axel-protocol/content/about.a2ml b/2-protocols/axel/content/about.a2ml similarity index 100% rename from axel-protocol/content/about.a2ml rename to 2-protocols/axel/content/about.a2ml diff --git a/axel-protocol/content/index.adoc b/2-protocols/axel/content/index.adoc similarity index 100% rename from axel-protocol/content/index.adoc rename to 2-protocols/axel/content/index.adoc diff --git a/axel-protocol/contractiles/README.adoc b/2-protocols/axel/contractiles/README.adoc similarity index 100% rename from axel-protocol/contractiles/README.adoc rename to 2-protocols/axel/contractiles/README.adoc diff --git a/axel-protocol/contractiles/dust/Dustfile b/2-protocols/axel/contractiles/dust/Dustfile similarity index 100% rename from axel-protocol/contractiles/dust/Dustfile rename to 2-protocols/axel/contractiles/dust/Dustfile diff --git a/axel-protocol/contractiles/must/Mustfile b/2-protocols/axel/contractiles/must/Mustfile similarity index 100% rename from axel-protocol/contractiles/must/Mustfile rename to 2-protocols/axel/contractiles/must/Mustfile diff --git a/axel-protocol/deno.lock b/2-protocols/axel/deno.lock similarity index 100% rename from axel-protocol/deno.lock rename to 2-protocols/axel/deno.lock diff --git a/axel-protocol/docs/.well-known/axel-policy b/2-protocols/axel/docs/.well-known/axel-policy similarity index 100% rename from axel-protocol/docs/.well-known/axel-policy rename to 2-protocols/axel/docs/.well-known/axel-policy diff --git a/axel-protocol/docs/.well-known/dnt-policy.txt b/2-protocols/axel/docs/.well-known/dnt-policy.txt similarity index 100% rename from axel-protocol/docs/.well-known/dnt-policy.txt rename to 2-protocols/axel/docs/.well-known/dnt-policy.txt diff --git a/axel-protocol/docs/.well-known/keybase.txt b/2-protocols/axel/docs/.well-known/keybase.txt similarity index 100% rename from axel-protocol/docs/.well-known/keybase.txt rename to 2-protocols/axel/docs/.well-known/keybase.txt diff --git a/axel-protocol/docs/.well-known/security.txt b/2-protocols/axel/docs/.well-known/security.txt similarity index 100% rename from axel-protocol/docs/.well-known/security.txt rename to 2-protocols/axel/docs/.well-known/security.txt diff --git a/axel-protocol/docs/.well-known/sellers.json b/2-protocols/axel/docs/.well-known/sellers.json similarity index 100% rename from axel-protocol/docs/.well-known/sellers.json rename to 2-protocols/axel/docs/.well-known/sellers.json diff --git a/axel-protocol/docs/.well-known/trust.txt b/2-protocols/axel/docs/.well-known/trust.txt similarity index 100% rename from axel-protocol/docs/.well-known/trust.txt rename to 2-protocols/axel/docs/.well-known/trust.txt diff --git a/axel-protocol/docs/CITATIONS.adoc b/2-protocols/axel/docs/CITATIONS.adoc similarity index 100% rename from axel-protocol/docs/CITATIONS.adoc rename to 2-protocols/axel/docs/CITATIONS.adoc diff --git a/axel-protocol/docs/CNAME b/2-protocols/axel/docs/CNAME similarity index 100% rename from axel-protocol/docs/CNAME rename to 2-protocols/axel/docs/CNAME diff --git a/axel-protocol/docs/ads.txt b/2-protocols/axel/docs/ads.txt similarity index 100% rename from axel-protocol/docs/ads.txt rename to 2-protocols/axel/docs/ads.txt diff --git a/axel-protocol/docs/app-ads.txt b/2-protocols/axel/docs/app-ads.txt similarity index 100% rename from axel-protocol/docs/app-ads.txt rename to 2-protocols/axel/docs/app-ads.txt diff --git a/axel-protocol/docs/cloudflare-dns-guide.adoc b/2-protocols/axel/docs/cloudflare-dns-guide.adoc similarity index 100% rename from axel-protocol/docs/cloudflare-dns-guide.adoc rename to 2-protocols/axel/docs/cloudflare-dns-guide.adoc diff --git a/axel-protocol/docs/deployment-checklist.adoc b/2-protocols/axel/docs/deployment-checklist.adoc similarity index 100% rename from axel-protocol/docs/deployment-checklist.adoc rename to 2-protocols/axel/docs/deployment-checklist.adoc diff --git a/axel-protocol/docs/email-setup.adoc b/2-protocols/axel/docs/email-setup.adoc similarity index 100% rename from axel-protocol/docs/email-setup.adoc rename to 2-protocols/axel/docs/email-setup.adoc diff --git a/axel-protocol/docs/github-pages-setup.adoc b/2-protocols/axel/docs/github-pages-setup.adoc similarity index 100% rename from axel-protocol/docs/github-pages-setup.adoc rename to 2-protocols/axel/docs/github-pages-setup.adoc diff --git a/axel-protocol/docs/humans.txt b/2-protocols/axel/docs/humans.txt similarity index 100% rename from axel-protocol/docs/humans.txt rename to 2-protocols/axel/docs/humans.txt diff --git a/axel-protocol/docs/outreach-strategy.adoc b/2-protocols/axel/docs/outreach-strategy.adoc similarity index 100% rename from axel-protocol/docs/outreach-strategy.adoc rename to 2-protocols/axel/docs/outreach-strategy.adoc diff --git a/axel-protocol/eclexiaiser.toml b/2-protocols/axel/eclexiaiser.toml similarity index 100% rename from axel-protocol/eclexiaiser.toml rename to 2-protocols/axel/eclexiaiser.toml diff --git a/axel-protocol/examples/web-project-deno.json b/2-protocols/axel/examples/web-project-deno.json similarity index 100% rename from axel-protocol/examples/web-project-deno.json rename to 2-protocols/axel/examples/web-project-deno.json diff --git a/axel-protocol/ffi/zig/build.zig b/2-protocols/axel/ffi/zig/build.zig similarity index 100% rename from axel-protocol/ffi/zig/build.zig rename to 2-protocols/axel/ffi/zig/build.zig diff --git a/axel-protocol/ffi/zig/src/main.zig b/2-protocols/axel/ffi/zig/src/main.zig similarity index 100% rename from axel-protocol/ffi/zig/src/main.zig rename to 2-protocols/axel/ffi/zig/src/main.zig diff --git a/axel-protocol/ffi/zig/test/integration_test.zig b/2-protocols/axel/ffi/zig/test/integration_test.zig similarity index 100% rename from axel-protocol/ffi/zig/test/integration_test.zig rename to 2-protocols/axel/ffi/zig/test/integration_test.zig diff --git a/axel-protocol/firewalld-axel.xml b/2-protocols/axel/firewalld-axel.xml similarity index 100% rename from axel-protocol/firewalld-axel.xml rename to 2-protocols/axel/firewalld-axel.xml diff --git a/axel-protocol/humans.txt b/2-protocols/axel/humans.txt similarity index 100% rename from axel-protocol/humans.txt rename to 2-protocols/axel/humans.txt diff --git a/axel-protocol/ietf/draft-axel-core-00.adoc b/2-protocols/axel/ietf/draft-axel-core-00.adoc similarity index 100% rename from axel-protocol/ietf/draft-axel-core-00.adoc rename to 2-protocols/axel/ietf/draft-axel-core-00.adoc diff --git a/axel-protocol/ietf/draft-axel-origin-00.adoc b/2-protocols/axel/ietf/draft-axel-origin-00.adoc similarity index 100% rename from axel-protocol/ietf/draft-axel-origin-00.adoc rename to 2-protocols/axel/ietf/draft-axel-origin-00.adoc diff --git a/axel-protocol/ietf/draft-axel-policy-00.adoc b/2-protocols/axel/ietf/draft-axel-policy-00.adoc similarity index 100% rename from axel-protocol/ietf/draft-axel-policy-00.adoc rename to 2-protocols/axel/ietf/draft-axel-policy-00.adoc diff --git a/axel-protocol/public/.well-known/axel-policy b/2-protocols/axel/public/.well-known/axel-policy similarity index 100% rename from axel-protocol/public/.well-known/axel-policy rename to 2-protocols/axel/public/.well-known/axel-policy diff --git a/axel-protocol/public/.well-known/axel-policy.example-adult.json b/2-protocols/axel/public/.well-known/axel-policy.example-adult.json similarity index 100% rename from axel-protocol/public/.well-known/axel-policy.example-adult.json rename to 2-protocols/axel/public/.well-known/axel-policy.example-adult.json diff --git a/axel-protocol/public/.well-known/dnt-policy.txt b/2-protocols/axel/public/.well-known/dnt-policy.txt similarity index 100% rename from axel-protocol/public/.well-known/dnt-policy.txt rename to 2-protocols/axel/public/.well-known/dnt-policy.txt diff --git a/axel-protocol/public/.well-known/keybase.txt b/2-protocols/axel/public/.well-known/keybase.txt similarity index 100% rename from axel-protocol/public/.well-known/keybase.txt rename to 2-protocols/axel/public/.well-known/keybase.txt diff --git a/axel-protocol/public/.well-known/security.txt b/2-protocols/axel/public/.well-known/security.txt similarity index 100% rename from axel-protocol/public/.well-known/security.txt rename to 2-protocols/axel/public/.well-known/security.txt diff --git a/axel-protocol/public/.well-known/sellers.json b/2-protocols/axel/public/.well-known/sellers.json similarity index 100% rename from axel-protocol/public/.well-known/sellers.json rename to 2-protocols/axel/public/.well-known/sellers.json diff --git a/axel-protocol/public/.well-known/trust.txt b/2-protocols/axel/public/.well-known/trust.txt similarity index 100% rename from axel-protocol/public/.well-known/trust.txt rename to 2-protocols/axel/public/.well-known/trust.txt diff --git a/axel-protocol/public/CNAME b/2-protocols/axel/public/CNAME similarity index 100% rename from axel-protocol/public/CNAME rename to 2-protocols/axel/public/CNAME diff --git a/axel-protocol/public/about.html b/2-protocols/axel/public/about.html similarity index 100% rename from axel-protocol/public/about.html rename to 2-protocols/axel/public/about.html diff --git a/axel-protocol/public/ads.txt b/2-protocols/axel/public/ads.txt similarity index 100% rename from axel-protocol/public/ads.txt rename to 2-protocols/axel/public/ads.txt diff --git a/axel-protocol/public/app-ads.txt b/2-protocols/axel/public/app-ads.txt similarity index 100% rename from axel-protocol/public/app-ads.txt rename to 2-protocols/axel/public/app-ads.txt diff --git a/axel-protocol/public/humans.txt b/2-protocols/axel/public/humans.txt similarity index 100% rename from axel-protocol/public/humans.txt rename to 2-protocols/axel/public/humans.txt diff --git a/axel-protocol/schemas/axel-policy.schema.json b/2-protocols/axel/schemas/axel-policy.schema.json similarity index 100% rename from axel-protocol/schemas/axel-policy.schema.json rename to 2-protocols/axel/schemas/axel-policy.schema.json diff --git a/axel-protocol/spec.adoc b/2-protocols/axel/spec.adoc similarity index 100% rename from axel-protocol/spec.adoc rename to 2-protocols/axel/spec.adoc diff --git a/axel-protocol/spec/core.adoc b/2-protocols/axel/spec/core.adoc similarity index 100% rename from axel-protocol/spec/core.adoc rename to 2-protocols/axel/spec/core.adoc diff --git a/axel-protocol/spec/network.adoc b/2-protocols/axel/spec/network.adoc similarity index 100% rename from axel-protocol/spec/network.adoc rename to 2-protocols/axel/spec/network.adoc diff --git a/axel-protocol/spec/origin.adoc b/2-protocols/axel/spec/origin.adoc similarity index 100% rename from axel-protocol/spec/origin.adoc rename to 2-protocols/axel/spec/origin.adoc diff --git a/axel-protocol/spec/policy.adoc b/2-protocols/axel/spec/policy.adoc similarity index 100% rename from axel-protocol/spec/policy.adoc rename to 2-protocols/axel/spec/policy.adoc diff --git a/axel-protocol/spec/transport.adoc b/2-protocols/axel/spec/transport.adoc similarity index 100% rename from axel-protocol/spec/transport.adoc rename to 2-protocols/axel/spec/transport.adoc diff --git a/axel-protocol/src/AxelApp.affine b/2-protocols/axel/src/AxelApp.affine similarity index 100% rename from axel-protocol/src/AxelApp.affine rename to 2-protocols/axel/src/AxelApp.affine diff --git a/axel-protocol/src/AxelApp.res.js b/2-protocols/axel/src/AxelApp.res.js similarity index 100% rename from axel-protocol/src/AxelApp.res.js rename to 2-protocols/axel/src/AxelApp.res.js diff --git a/axel-protocol/src/AxelSts.affine b/2-protocols/axel/src/AxelSts.affine similarity index 100% rename from axel-protocol/src/AxelSts.affine rename to 2-protocols/axel/src/AxelSts.affine diff --git a/axel-protocol/src/ProvenResult.affine b/2-protocols/axel/src/ProvenResult.affine similarity index 100% rename from axel-protocol/src/ProvenResult.affine rename to 2-protocols/axel/src/ProvenResult.affine diff --git a/axel-protocol/src/ProvenResult.res.js b/2-protocols/axel/src/ProvenResult.res.js similarity index 100% rename from axel-protocol/src/ProvenResult.res.js rename to 2-protocols/axel/src/ProvenResult.res.js diff --git a/axel-protocol/src/ProvenSafeUrl.affine b/2-protocols/axel/src/ProvenSafeUrl.affine similarity index 100% rename from axel-protocol/src/ProvenSafeUrl.affine rename to 2-protocols/axel/src/ProvenSafeUrl.affine diff --git a/axel-protocol/src/ProvenSafeUrl.res.js b/2-protocols/axel/src/ProvenSafeUrl.res.js similarity index 100% rename from axel-protocol/src/ProvenSafeUrl.res.js rename to 2-protocols/axel/src/ProvenSafeUrl.res.js diff --git a/axel-protocol/src/Tea.affine b/2-protocols/axel/src/Tea.affine similarity index 100% rename from axel-protocol/src/Tea.affine rename to 2-protocols/axel/src/Tea.affine diff --git a/axel-protocol/src/Tea.res.js b/2-protocols/axel/src/Tea.res.js similarity index 100% rename from axel-protocol/src/Tea.res.js rename to 2-protocols/axel/src/Tea.res.js diff --git a/axel-protocol/test/axel-sts_test.affine b/2-protocols/axel/test/axel-sts_test.affine similarity index 100% rename from axel-protocol/test/axel-sts_test.affine rename to 2-protocols/axel/test/axel-sts_test.affine diff --git a/axel-protocol/test/validate-policy.affine b/2-protocols/axel/test/validate-policy.affine similarity index 100% rename from axel-protocol/test/validate-policy.affine rename to 2-protocols/axel/test/validate-policy.affine diff --git a/axel-protocol/test/validate-policy_test.affine b/2-protocols/axel/test/validate-policy_test.affine similarity index 100% rename from axel-protocol/test/validate-policy_test.affine rename to 2-protocols/axel/test/validate-policy_test.affine diff --git a/chora/CHORA-SPEC.adoc b/2-protocols/chora/CHORA-SPEC.adoc similarity index 100% rename from chora/CHORA-SPEC.adoc rename to 2-protocols/chora/CHORA-SPEC.adoc diff --git a/chora/README.adoc b/2-protocols/chora/README.adoc similarity index 100% rename from chora/README.adoc rename to 2-protocols/chora/README.adoc diff --git a/groove-protocol/README.adoc b/2-protocols/groove/README.adoc similarity index 100% rename from groove-protocol/README.adoc rename to 2-protocols/groove/README.adoc diff --git a/groove-protocol/spec/GROOVE-RANKED-OWNERSHIP-CLEAVE-SPEC.adoc b/2-protocols/groove/spec/GROOVE-RANKED-OWNERSHIP-CLEAVE-SPEC.adoc similarity index 100% rename from groove-protocol/spec/GROOVE-RANKED-OWNERSHIP-CLEAVE-SPEC.adoc rename to 2-protocols/groove/spec/GROOVE-RANKED-OWNERSHIP-CLEAVE-SPEC.adoc diff --git a/k9-coordination-protocol/READINESS.adoc b/2-protocols/k9-coordination/READINESS.adoc similarity index 100% rename from k9-coordination-protocol/READINESS.adoc rename to 2-protocols/k9-coordination/READINESS.adoc diff --git a/k9-coordination-protocol/README.adoc b/2-protocols/k9-coordination/README.adoc similarity index 100% rename from k9-coordination-protocol/README.adoc rename to 2-protocols/k9-coordination/README.adoc diff --git a/k9-coordination-protocol/examples/minimal.k9 b/2-protocols/k9-coordination/examples/minimal.k9 similarity index 100% rename from k9-coordination-protocol/examples/minimal.k9 rename to 2-protocols/k9-coordination/examples/minimal.k9 diff --git a/k9-coordination-protocol/generator/bench.js b/2-protocols/k9-coordination/generator/bench.js similarity index 100% rename from k9-coordination-protocol/generator/bench.js rename to 2-protocols/k9-coordination/generator/bench.js diff --git a/k9-coordination-protocol/generator/compatibility_test.js b/2-protocols/k9-coordination/generator/compatibility_test.js similarity index 100% rename from k9-coordination-protocol/generator/compatibility_test.js rename to 2-protocols/k9-coordination/generator/compatibility_test.js diff --git a/k9-coordination-protocol/generator/contract_test.js b/2-protocols/k9-coordination/generator/contract_test.js similarity index 100% rename from k9-coordination-protocol/generator/contract_test.js rename to 2-protocols/k9-coordination/generator/contract_test.js diff --git a/k9-coordination-protocol/generator/fuzz_test.js b/2-protocols/k9-coordination/generator/fuzz_test.js similarity index 100% rename from k9-coordination-protocol/generator/fuzz_test.js rename to 2-protocols/k9-coordination/generator/fuzz_test.js diff --git a/k9-coordination-protocol/generator/generate.js b/2-protocols/k9-coordination/generator/generate.js similarity index 100% rename from k9-coordination-protocol/generator/generate.js rename to 2-protocols/k9-coordination/generator/generate.js diff --git a/k9-coordination-protocol/generator/generate_test.js b/2-protocols/k9-coordination/generator/generate_test.js similarity index 100% rename from k9-coordination-protocol/generator/generate_test.js rename to 2-protocols/k9-coordination/generator/generate_test.js diff --git a/k9-coordination-protocol/generator/mutation_test.js b/2-protocols/k9-coordination/generator/mutation_test.js similarity index 100% rename from k9-coordination-protocol/generator/mutation_test.js rename to 2-protocols/k9-coordination/generator/mutation_test.js diff --git a/k9-coordination-protocol/generator/property_test.js b/2-protocols/k9-coordination/generator/property_test.js similarity index 100% rename from k9-coordination-protocol/generator/property_test.js rename to 2-protocols/k9-coordination/generator/property_test.js diff --git a/k9-coordination-protocol/generator/regression_test.js b/2-protocols/k9-coordination/generator/regression_test.js similarity index 100% rename from k9-coordination-protocol/generator/regression_test.js rename to 2-protocols/k9-coordination/generator/regression_test.js diff --git a/k9-coordination-protocol/generator/smoke_test.js b/2-protocols/k9-coordination/generator/smoke_test.js similarity index 100% rename from k9-coordination-protocol/generator/smoke_test.js rename to 2-protocols/k9-coordination/generator/smoke_test.js diff --git a/k9-coordination-protocol/spec/COORDINATION-K9-SPEC.adoc b/2-protocols/k9-coordination/spec/COORDINATION-K9-SPEC.adoc similarity index 100% rename from k9-coordination-protocol/spec/COORDINATION-K9-SPEC.adoc rename to 2-protocols/k9-coordination/spec/COORDINATION-K9-SPEC.adoc diff --git a/k9-coordination-protocol/spec/COORDINATION-K9-SPEC_v1.adoc b/2-protocols/k9-coordination/spec/COORDINATION-K9-SPEC_v1.adoc similarity index 100% rename from k9-coordination-protocol/spec/COORDINATION-K9-SPEC_v1.adoc rename to 2-protocols/k9-coordination/spec/COORDINATION-K9-SPEC_v1.adoc diff --git a/k9-coordination-protocol/spec/abnf/coordination-k9-grammar_v1.1.abnf b/2-protocols/k9-coordination/spec/abnf/coordination-k9-grammar_v1.1.abnf similarity index 100% rename from k9-coordination-protocol/spec/abnf/coordination-k9-grammar_v1.1.abnf rename to 2-protocols/k9-coordination/spec/abnf/coordination-k9-grammar_v1.1.abnf diff --git a/k9-coordination-protocol/tools/k9-init/Cargo.toml b/2-protocols/k9-coordination/tools/k9-init/Cargo.toml similarity index 100% rename from k9-coordination-protocol/tools/k9-init/Cargo.toml rename to 2-protocols/k9-coordination/tools/k9-init/Cargo.toml diff --git a/k9-coordination-protocol/tools/k9-init/batch-init.sh b/2-protocols/k9-coordination/tools/k9-init/batch-init.sh similarity index 100% rename from k9-coordination-protocol/tools/k9-init/batch-init.sh rename to 2-protocols/k9-coordination/tools/k9-init/batch-init.sh diff --git a/k9-coordination-protocol/tools/k9-init/src/main.rs b/2-protocols/k9-coordination/tools/k9-init/src/main.rs similarity index 100% rename from k9-coordination-protocol/tools/k9-init/src/main.rs rename to 2-protocols/k9-coordination/tools/k9-init/src/main.rs diff --git a/overlay-protocol/.machine_readable/descriptiles/ECOSYSTEM.a2ml b/2-protocols/overlay/.machine_readable/descriptiles/ECOSYSTEM.a2ml similarity index 100% rename from overlay-protocol/.machine_readable/descriptiles/ECOSYSTEM.a2ml rename to 2-protocols/overlay/.machine_readable/descriptiles/ECOSYSTEM.a2ml diff --git a/overlay-protocol/.machine_readable/descriptiles/META.a2ml b/2-protocols/overlay/.machine_readable/descriptiles/META.a2ml similarity index 100% rename from overlay-protocol/.machine_readable/descriptiles/META.a2ml rename to 2-protocols/overlay/.machine_readable/descriptiles/META.a2ml diff --git a/overlay-protocol/.machine_readable/descriptiles/STATE.a2ml b/2-protocols/overlay/.machine_readable/descriptiles/STATE.a2ml similarity index 100% rename from overlay-protocol/.machine_readable/descriptiles/STATE.a2ml rename to 2-protocols/overlay/.machine_readable/descriptiles/STATE.a2ml diff --git a/overlay-protocol/DECISION.adoc b/2-protocols/overlay/DECISION.adoc similarity index 100% rename from overlay-protocol/DECISION.adoc rename to 2-protocols/overlay/DECISION.adoc diff --git a/overlay-protocol/OVERLAY-PROTOCOL-SPEC.adoc b/2-protocols/overlay/OVERLAY-PROTOCOL-SPEC.adoc similarity index 100% rename from overlay-protocol/OVERLAY-PROTOCOL-SPEC.adoc rename to 2-protocols/overlay/OVERLAY-PROTOCOL-SPEC.adoc diff --git a/overlay-protocol/ffi/zig/build.zig b/2-protocols/overlay/ffi/zig/build.zig similarity index 100% rename from overlay-protocol/ffi/zig/build.zig rename to 2-protocols/overlay/ffi/zig/build.zig diff --git a/overlay-protocol/ffi/zig/src/main.zig b/2-protocols/overlay/ffi/zig/src/main.zig similarity index 100% rename from overlay-protocol/ffi/zig/src/main.zig rename to 2-protocols/overlay/ffi/zig/src/main.zig diff --git a/overlay-protocol/ffi/zig/test/integration_test.zig b/2-protocols/overlay/ffi/zig/test/integration_test.zig similarity index 100% rename from overlay-protocol/ffi/zig/test/integration_test.zig rename to 2-protocols/overlay/ffi/zig/test/integration_test.zig diff --git a/overlay-protocol/scripts/check-conformance.sh b/2-protocols/overlay/scripts/check-conformance.sh similarity index 100% rename from overlay-protocol/scripts/check-conformance.sh rename to 2-protocols/overlay/scripts/check-conformance.sh diff --git a/overlay-protocol/src/abi/OverlayProtocol.idr b/2-protocols/overlay/src/abi/OverlayProtocol.idr similarity index 100% rename from overlay-protocol/src/abi/OverlayProtocol.idr rename to 2-protocols/overlay/src/abi/OverlayProtocol.idr diff --git a/EXPLAINME.adoc b/EXPLAINME.adoc index 10c6705c3..5dd57009d 100644 --- a/EXPLAINME.adoc +++ b/EXPLAINME.adoc @@ -13,7 +13,7 @@ This file used to carry its own hand-maintained spec inventory, which drifted (it listed ReScript as a primary language — banned 2026-04-30 in favour of -AffineScript — and referenced `groove-protocol/` and `palimpsest-license/` as +AffineScript — and referenced `2-protocols/groove/` and `palimpsest-license/` as local directories that do not exist in this monorepo). That inventory now lives in the generated, CI-verified registry instead, so it can no longer go stale. ==== diff --git a/Justfile b/Justfile index 09b91eabc..86797dcdd 100644 --- a/Justfile +++ b/Justfile @@ -156,8 +156,8 @@ llm-context role="dev": build: @echo "=== Standards Monorepo Build ===" @echo "[2/3] k9 Rust binding — moved to hyperpolymath/k9-ecosystem (rs/) under #491" - @echo "[3/3] groove-protocol/reference/ipv6t" - @cd groove-protocol/reference/ipv6t && zig build 2>&1 || echo " SKIP: zig not available" + @echo "[3/3] 2-protocols/groove/reference/ipv6t" + @cd 2-protocols/groove/reference/ipv6t && zig build 2>&1 || echo " SKIP: zig not available" @echo "=== Build complete ===" # Run all sub-project test suites @@ -187,7 +187,7 @@ lint: # Clean build artifacts clean: @echo "=== Cleaning ===" - @cd groove-protocol/reference/ipv6t && rm -rf zig-out zig-cache .zig-cache 2>/dev/null || true + @cd 2-protocols/groove/reference/ipv6t && rm -rf zig-out zig-cache .zig-cache 2>/dev/null || true @echo "=== Clean complete ===" # Run panic-attacker pre-commit scan diff --git a/PROOF-NEEDS.adoc b/PROOF-NEEDS.adoc index 137337556..71f17a5fb 100644 --- a/PROOF-NEEDS.adoc +++ b/PROOF-NEEDS.adoc @@ -12,7 +12,7 @@ in `+a2ml/src/A2ML/Proofs.idr+` * *Dangerous patterns*: ** `+lol/proofs/theories/information_theory.agda+`: 6 `+postulate+` (information theory axioms) -** `+axel-protocol/src/Tea.res+` and `+AxelApp.res+`: `+Obj.magic+` for +** `+2-protocols/axel/src/Tea.res+` and `+AxelApp.res+`: `+Obj.magic+` for DOM operations ** `+lol/src/abi/Locale.idr+`: mentions avoiding believe_me (good practice) @@ -37,20 +37,20 @@ documents are faithfully processed ==== Avow Protocol Consent Proofs -* `+avow-protocol/avow-lib/src/abi/Consent.idr+`, `+Unsubscribe.idr+` +* `+2-protocols/avow/avow-lib/src/abi/Consent.idr+`, `+Unsubscribe.idr+` * Consent management is GDPR-relevant — prove consent state transitions are correct * Prove: unsubscribe always terminates in a non-consented state ==== Axel Protocol Obj.magic -* `+axel-protocol/src/Tea.res+` — 8+ `+Obj.magic+` calls for DOM +* `+2-protocols/axel/src/Tea.res+` — 8+ `+Obj.magic+` calls for DOM rendering * Lower priority than the protocol specification proofs ==== Groove Protocol Reference -* `+groove-protocol/reference/groove-proxy/GrooveProxy.idr+` — Idris2 +* `+2-protocols/groove/reference/groove-proxy/GrooveProxy.idr+` — Idris2 reference implementation * Prove: proxy faithfully implements the Groove protocol specification diff --git a/QUICKSTART-DEV.adoc b/QUICKSTART-DEV.adoc index b543d96de..543a76c4e 100644 --- a/QUICKSTART-DEV.adoc +++ b/QUICKSTART-DEV.adoc @@ -15,7 +15,7 @@ The *product* is the specs (AsciiDoc + A2ML). The code is reference implementations and language bindings that prove them: * *Rust/SPARK* — `a2ml/bindings/rust`, `1-formats/k9/bindings/rust` -* *Deno* — protocol reference impls (`axel-protocol`, `0-ai-gatekeeper-protocol/mcp-repo-guardian`) +* *Deno* — protocol reference impls (`axel-protocol`, `2-protocols/0-ai-gatekeeper/mcp-repo-guardian`) * *Zig* — FFI/reference targets * *AsciiDoc / A2ML* — the specs, templates, and machine-readable metadata diff --git a/REORGANIZATION-PLAN.adoc b/REORGANIZATION-PLAN.adoc index ce97aca8d..0c38e8712 100644 --- a/REORGANIZATION-PLAN.adoc +++ b/REORGANIZATION-PLAN.adoc @@ -33,9 +33,9 @@ ____ *Issue:* K9 templates appear in multiple locations: - `+.machine_readable/contractiles/k9/template-*.k9.ncl+` (3 copies) - -`+0-ai-gatekeeper-protocol/contractiles/k9/template-*.k9.ncl+` (3 copies +`+2-protocols/0-ai-gatekeeper/contractiles/k9/template-*.k9.ncl+` (3 copies per subdir) - -`+0-ai-gatekeeper-protocol/*/contractiles/k9/template-*.k9.ncl+` +`+2-protocols/0-ai-gatekeeper/*/contractiles/k9/template-*.k9.ncl+` (multiple copies) *Solution:* Consolidate into single source in k9-svc monorepo @@ -44,8 +44,8 @@ per subdir) - *Issue:* `+rsr-antipattern.yml+` appears in: - `+.github/workflows/rsr-antipattern.yml+` - -`+0-ai-gatekeeper-protocol/.github/workflows/rsr-antipattern.yml+` - -`+0-ai-gatekeeper-protocol/mcp-repo-guardian/.github/workflows/rsr-antipattern.yml+` +`+2-protocols/0-ai-gatekeeper/.github/workflows/rsr-antipattern.yml+` - +`+2-protocols/0-ai-gatekeeper/mcp-repo-guardian/.github/workflows/rsr-antipattern.yml+` *Solution:* Move to RSR engine repo, reference via GitHub workflow reuse diff --git a/TEST-NEEDS.adoc b/TEST-NEEDS.adoc index f3344c7b4..9a6283f65 100644 --- a/TEST-NEEDS.adoc +++ b/TEST-NEEDS.adoc @@ -73,7 +73,7 @@ developer-experience debt, deliberately outside this focused test-runner fix. ==== groove-protocol — extracted from this monorepo -The former `+groove-protocol/reference/ipv6t/+` Zig implementation was +The former `+2-protocols/groove/reference/ipv6t/+` Zig implementation was extracted into the separate `+hyperpolymath/groove-protocol+` repository. It is not a standards-local runnable suite. @@ -97,7 +97,7 @@ hex format: ~57ns/iter (17.5 M/s) ==== mcp-repo-guardian — 36 tests (Deno/JS) Run: `+deno test --allow-read test/manifest_test.js+` from -`+0-ai-gatekeeper-protocol/mcp-repo-guardian/+` +`+2-protocols/0-ai-gatekeeper/mcp-repo-guardian/+` All 36 tests pass. Tests cover: - [x] Manifest parsing (hash, canonical locations, invariants) - [x] Determinism and hash correctness - [x] @@ -133,7 +133,7 @@ Reject: no default version when missing ==== repo-guardian-fs/tests-offline — 29 tests (Rust) Run: `+cargo test+` from -`+0-ai-gatekeeper-protocol/repo-guardian-fs/tests-offline/+` +`+2-protocols/0-ai-gatekeeper/repo-guardian-fs/tests-offline/+` All 29 tests pass. *NOTE*: the main `+repo-guardian-fs+` crate cannot build because `+fuse3 v0.7.3+` is incompatible with Rust stable >= 1.80. diff --git a/TOPOLOGY.adoc b/TOPOLOGY.adoc index fdae5e4c9..2bb14768e 100644 --- a/TOPOLOGY.adoc +++ b/TOPOLOGY.adoc @@ -49,11 +49,11 @@ ____ [cols="34%,33%,33%",options="header"] |=== | Spec | Home | If you want… -| 0-AI Gatekeeper Protocol | link:0-ai-gatekeeper-protocol/[`+0-ai-gatekeeper-protocol/+`] | the AI-agent entry/gating protocol behind 0-AI-MANIFEST -| K9 Coordination Protocol | link:k9-coordination-protocol/[`+k9-coordination-protocol/+`] | multi-agent coordination on top of K9 -| AVOW Protocol | link:avow-protocol/[`+avow-protocol/+`] | consent-attested messaging / origin attribution -| AXEL Protocol | link:axel-protocol/[`+axel-protocol/+`] | age-gating + explicit-content enforcement -| Overlay Protocol | link:overlay-protocol/[`+overlay-protocol/+`] | layered overlay composition spec +| 0-AI Gatekeeper Protocol | link:2-protocols/0-ai-gatekeeper/[`+2-protocols/0-ai-gatekeeper/+`] | the AI-agent entry/gating protocol behind 0-AI-MANIFEST +| K9 Coordination Protocol | link:2-protocols/k9-coordination/[`+2-protocols/k9-coordination/+`] | multi-agent coordination on top of K9 +| AVOW Protocol | link:2-protocols/avow/[`+2-protocols/avow/+`] | consent-attested messaging / origin attribution +| AXEL Protocol | link:2-protocols/axel/[`+2-protocols/axel/+`] | age-gating + explicit-content enforcement +| Overlay Protocol | link:2-protocols/overlay/[`+2-protocols/overlay/+`] | layered overlay composition spec | Consent-Aware Web (AIBDP + HTTP 430) | https://github.com/metadatastician/consent-aware-web/blob/main/README.adoc[`+metadatastician/consent-aware-web+`] `+@ v0.2.0+` ⇗ | consent headers / AI-usage boundaries for HTTP; extracted from this repo 2026-08-07 |=== diff --git a/ai-instruction/README.adoc b/ai-instruction/README.adoc index b8c59b7ae..6c7e4cc03 100644 --- a/ai-instruction/README.adoc +++ b/ai-instruction/README.adoc @@ -67,7 +67,7 @@ guidance) and spot-check before acting. * link:../llm-warmup-dev.md[`+llm-warmup-dev.md+`] / link:../llm-warmup-user.md[`+llm-warmup-user.md+`] — project-level context primers (what this repo _is_, not how to prompt an LLM) -* link:../0-ai-gatekeeper-protocol/[`+0-ai-gatekeeper-protocol/+`] — the +* link:../0-ai-gatekeeper-protocol/[`+2-protocols/0-ai-gatekeeper/+`] — the enforcement side: MCP guardian + FUSE wrapper that stop agents from violating repo invariants * link:../0-AI-MANIFEST.a2ml[`+0-AI-MANIFEST.a2ml+`] — the repo’s own diff --git a/audits/assail-classifications.a2ml b/audits/assail-classifications.a2ml index 19f487e91..7abe2d99f 100644 --- a/audits/assail-classifications.a2ml +++ b/audits/assail-classifications.a2ml @@ -73,14 +73,14 @@ ;; Demo / example code. (classification - (file "avow-protocol/public/demo.js") + (file "2-protocols/avow/public/demo.js") (category "DynamicCodeExecution") (classification "demo-ui") (audit "public demo page DOM rendering") (rationale "demo UI writing its own generated markup; not an application input path")) (classification - (file "avow-protocol/avow-lib/examples/rust/src/main.rs") + (file "2-protocols/avow/avow-lib/examples/rust/src/main.rs") (category "UnsafeCode") (classification "example-code") (audit "examples/ directory — illustrative FFI usage") @@ -97,7 +97,7 @@ ;; FFI boundary casts (audited) — mirrors the 007 zig_bridge.rs ;; reference classification. (classification - (file "overlay-protocol/ffi/zig/src/main.zig") + (file "2-protocols/overlay/ffi/zig/src/main.zig") (category "UnsafeCode") (classification "ffi-boundary-cast") (audit "Zig C-ABI bridge — single pointer cast at the exported boundary") @@ -112,7 +112,7 @@ ;; Compiler output. (classification - (file "axel-protocol/src/Tea.res.js") + (file "2-protocols/axel/src/Tea.res.js") (category "DynamicCodeExecution") (classification "compiled-output") (audit "*.res.js — ReScript compiler output, not source") @@ -134,7 +134,7 @@ rule: 'UnboundedAllocation' justification: 'Automated estate triage: reviewed as safe within its architectural boundary (e.g. local tooling, bounded reads, expected metaprogramming).' - suppression: - file: '0-ai-gatekeeper-protocol/repo-guardian-fs/src/manifest.rs' + file: '2-protocols/0-ai-gatekeeper/repo-guardian-fs/src/manifest.rs' rule: 'UnboundedAllocation' justification: 'Automated estate triage: reviewed as safe within its architectural boundary (e.g. local tooling, bounded reads, expected metaprogramming).' - suppression: @@ -162,6 +162,6 @@ rule: 'UnboundedAllocation' justification: 'Automated estate triage: reviewed as safe within its architectural boundary (e.g. local tooling, bounded reads, expected metaprogramming).' - suppression: - file: 'k9-coordination-protocol/tools/k9-init/src/main.rs' + file: '2-protocols/k9-coordination/tools/k9-init/src/main.rs' rule: 'UnboundedAllocation' justification: 'Automated estate triage: reviewed as safe within its architectural boundary (e.g. local tooling, bounded reads, expected metaprogramming).' diff --git a/coordination.k9 b/coordination.k9 index 7f0f33b3f..ea29fdd66 100644 --- a/coordination.k9 +++ b/coordination.k9 @@ -94,17 +94,17 @@ protected: reason: "A2ML format specification and reference implementation" - path: 1-formats/k9/ reason: "K9 self-validating component specification" - - path: k9-coordination-protocol/ + - path: 2-protocols/k9-coordination/ reason: "K9 coordination protocol (this format's own spec)" - - path: groove-protocol/ + - path: 2-protocols/groove/ reason: "Groove inter-service communication protocol" - - path: avow-protocol/ + - path: 2-protocols/avow/ reason: "AVOW spam prevention protocol" - - path: axel-protocol/ + - path: 2-protocols/axel/ reason: "AXEL age-gating protocol" - path: lol/ reason: "LOL multilingual corpus — active, production-grade" - - path: 0-ai-gatekeeper-protocol/ + - path: 2-protocols/0-ai-gatekeeper/ reason: "AI manifest enforcement system" - path: .machine_readable/ reason: "Canonical A2ML metadata location" diff --git a/docs/INNERVATION.adoc b/docs/INNERVATION.adoc index 923adc191..0c64d86bc 100644 --- a/docs/INNERVATION.adoc +++ b/docs/INNERVATION.adoc @@ -68,10 +68,10 @@ Per-repo footprint shrinks from 6–7 files to 2 (`coordination.k9` + | Inline annotation SPEC | `1-formats/sub-specs/inline-annotations/SPEC.adoc` | Draft v0.1.0 | Inline annotation extractor | `1-formats/sub-specs/inline-annotations/extractor/` (Rust) | Built, 7/7 tests | Annotation examples (8 languages) | `1-formats/sub-specs/inline-annotations/examples/` | Complete -| Groove signal schema | `groove-protocol/spec/INNERVATION-SIGNALS.adoc` | Draft v0.1.0 +| Groove signal schema | `2-protocols/groove/spec/INNERVATION-SIGNALS.adoc` | Draft v0.1.0 | STATE.a2ml v2 spec | `1-formats/templates/STATE.a2ml.v2.spec.adoc` | Draft v2.0.0 | STATE.a2ml v2 template | `1-formats/templates/STATE.a2ml.v2.template` | Ready -| k9-init migration tool | `k9-coordination-protocol/tools/k9-init/` | Built, 5/5 tests +| k9-init migration tool | `2-protocols/k9-coordination/tools/k9-init/` | Built, 5/5 tests | playbook→recipe converter | `hooks/playbook-to-recipe/` | Built, 5/5 tests | Ecosystem ingest pipeline spec | `.verisimdb/ECOSYSTEM-INGEST.adoc` | Draft v0.1.0 | PanLL panels spec | `docs/PANLL-PANELS.adoc` | Draft v0.1.0 @@ -95,7 +95,7 @@ A commit lands in repo X → Groove emits `commit.pushed`. Subscribers: `crg.grade.changed` if it moved. 5. **PanLL panels** refresh from VeriSimDB and render the new state. -All signals are listed in `groove-protocol/spec/INNERVATION-SIGNALS.adoc`. +All signals are listed in `2-protocols/groove/spec/INNERVATION-SIGNALS.adoc`. == For humans @@ -112,7 +112,7 @@ All signals are listed in `groove-protocol/spec/INNERVATION-SIGNALS.adoc`. == For machines - Octad schemas: `.verisimdb/config.toml` -- Groove signal vocabulary: `groove-protocol/spec/INNERVATION-SIGNALS.adoc` +- Groove signal vocabulary: `2-protocols/groove/spec/INNERVATION-SIGNALS.adoc` - Annotation grammar: `1-formats/sub-specs/inline-annotations/SPEC.adoc` - Extractor output format: `1-formats/sub-specs/inline-annotations/examples/output.a2ml` - STATE v2 grammar: `1-formats/templates/STATE.a2ml.v2.spec.adoc` diff --git a/docs/proofs/spec-templates/T2-high/groove-browser-harness.adoc b/docs/proofs/spec-templates/T2-high/groove-browser-harness.adoc index 2ab9e574a..e5a869198 100644 --- a/docs/proofs/spec-templates/T2-high/groove-browser-harness.adoc +++ b/docs/proofs/spec-templates/T2-high/groove-browser-harness.adoc @@ -77,7 +77,7 @@ just proof-check-all ____ *Superseded (teardown):* the canonical groove teardown discipline is now -link:../../../../groove-protocol/spec/GROOVE-RANKED-OWNERSHIP-CLEAVE-SPEC.adoc[groove-protocol/spec/GROOVE-RANKED-OWNERSHIP-CLEAVE-SPEC.adoc] +link:../../../../groove-protocol/spec/GROOVE-RANKED-OWNERSHIP-CLEAVE-SPEC.adoc[2-protocols/groove/spec/GROOVE-RANKED-OWNERSHIP-CLEAVE-SPEC.adoc] (the B2 lifecycle-residue layer, `+RC-1+`…`+RC-13+`). This harness remains a T2-high test template. ____ diff --git a/docs/reorg/STREAM-PROMPTS.adoc b/docs/reorg/STREAM-PROMPTS.adoc index 02069c050..9f4a1fa39 100644 --- a/docs/reorg/STREAM-PROMPTS.adoc +++ b/docs/reorg/STREAM-PROMPTS.adoc @@ -180,7 +180,7 @@ CONTEXT — confirmed drift to fix (file:line evidence exists): - EXPLAINME.adoc:33 still lists ReScript as a "Primary" language (banned 2026-04-30). - TOPOLOGY.adoc + ROADMAP.adoc frozen at 2026-04-04; TOPOLOGY shows integration layer at 0% while claiming 80% overall. -- EXPLAINME Evidence table lists groove-protocol/ and palimpsest-license/ as local +- EXPLAINME Evidence table lists 2-protocols/groove/ and palimpsest-license/ as local dirs; neither exists here. - llm-warmup-dev.md and llm-warmup-user.md are byte-identical. - QUICKSTART-*.adoc still contain unfilled {{PLACEHOLDER}} markers. diff --git a/docs/wikis/developers/index.adoc b/docs/wikis/developers/index.adoc index acff53772..dae322d8a 100644 --- a/docs/wikis/developers/index.adoc +++ b/docs/wikis/developers/index.adoc @@ -27,13 +27,13 @@ NOTE: Scaffold. The link spine is complete; the connective prose is `TODO`. === 3. Author the machine-readable metadata * A2ML family: `a2ml/`, the `*-a2ml/` homes, `1-formats/templates/`. -* K9 self-validating components: `1-formats/k9/`, `k9-coordination-protocol/`. +* K9 self-validating components: `1-formats/k9/`, `2-protocols/k9-coordination/`. * TODO: "write a valid STATE/META set and pass Validate A2ML". === 4. The protocols -* `avow-protocol/`, `axel-protocol/`, `overlay-protocol/`, - `0-ai-gatekeeper-protocol/`. (Consent-Aware Web was extracted to `metadatastician/consent-aware-web` on 2026-08-07.) +* `2-protocols/avow/`, `2-protocols/axel/`, `2-protocols/overlay/`, + `2-protocols/0-ai-gatekeeper/`. (Consent-Aware Web was extracted to `metadatastician/consent-aware-web` on 2026-08-07.) * TODO: per-protocol "when would I implement this" summary. === 5. Write & extend Hypatia rules diff --git a/rhodium-standard-repositories/.github/workflows/language-policy.yml b/rhodium-standard-repositories/.github/workflows/language-policy.yml index ec61c9257..b8bdb0ccb 100644 --- a/rhodium-standard-repositories/.github/workflows/language-policy.yml +++ b/rhodium-standard-repositories/.github/workflows/language-policy.yml @@ -50,7 +50,7 @@ jobs: # Carve-outs (parallel to hypatia cicd_rules/typescript_detected path_allow_prefixes): # *.d.ts declaration files (headers, not impl) # */bindings/{deno,ts,typescript}/ interop targets (consumers of our work) - # avow-protocol/telegram-bot/avow-telegram-bot/ Telegraf PERMANENT exemption + # 2-protocols/avow/telegram-bot/avow-telegram-bot/ Telegraf PERMANENT exemption # *.config.ts / vite.config.ts / vitest.config.ts / tsup.config.ts tooling # affinescript-deno-test/ + affinescript-cli/ bootstrap shims # rescript/ + servers/ + repos-monorepo/ + linguist/ upstream forks @@ -61,7 +61,7 @@ jobs: | grep -E '\.tsx?$' \ | grep -vE '\.d\.ts$' \ | grep -vE '/bindings/(deno|typescript|ts)/' \ - | grep -vE '^avow-protocol/telegram-bot/avow-telegram-bot/' \ + | grep -vE '^2-protocols/avow/telegram-bot/avow-telegram-bot/' \ | grep -vE '(^|/)(vite|vitest|tsup)\.config\.ts$' \ | grep -vE '\.config\.ts$' \ | grep -vE '^(affinescript-deno-test|affinescript-cli)/' \ @@ -89,7 +89,7 @@ jobs: # **/vscode/ VSCode extension entry points (blocked on AS bindings) # **/lib/js/ + **/lib/es6/ + **/lib/bs/ bsc compilation output # affinescript-deno-test/ + affinescript-cli/ bootstrap shims - # avow-protocol/telegram-bot/avow-telegram-bot/ Telegraf carve-out + # 2-protocols/avow/telegram-bot/avow-telegram-bot/ Telegraf carve-out NEW_RS=$(git diff --name-only --diff-filter=A HEAD~1 2>/dev/null \ | grep -E '\.resi?$' \ | grep -vE '(^|/)bsconfig\.json$' \ @@ -100,7 +100,7 @@ jobs: | grep -vE '/vscode/' \ | grep -vE '/lib/(js|es6|bs)/' \ | grep -vE '^(affinescript-deno-test|affinescript-cli)/' \ - | grep -vE '^avow-protocol/telegram-bot/avow-telegram-bot/' \ + | grep -vE '^2-protocols/avow/telegram-bot/avow-telegram-bot/' \ || true) if [ -n "$NEW_RS" ]; then echo "❌ New ReScript files detected (banned 2026-05-25). Use AffineScript instead." diff --git a/scripts/build-registry.sh b/scripts/build-registry.sh index f9ed5e6f5..fd6799988 100755 --- a/scripts/build-registry.sh +++ b/scripts/build-registry.sh @@ -69,11 +69,11 @@ agentic-a2ml|foundation|1-formats/a2ml/agentic/|AGENTIC.a2ml spec|AI-agent opera neurosym-a2ml|foundation|1-formats/a2ml/neurosym/|NEUROSYM.a2ml spec|symbolic semantics / proof obligations playbook-a2ml|foundation|1-formats/a2ml/playbook/|PLAYBOOK.a2ml spec|executable operational runbooks anchor-a2ml|foundation|1-formats/a2ml/anchor/|ANCHOR.a2ml spec|project-recalibration intervention format -0-ai-gatekeeper-protocol|protocol|0-ai-gatekeeper-protocol/|0-AI Gatekeeper Protocol|the AI-agent entry/gating protocol behind 0-AI-MANIFEST -k9-coordination-protocol|protocol|k9-coordination-protocol/|K9 Coordination Protocol|multi-agent coordination on top of K9 -avow-protocol|protocol|avow-protocol/|AVOW Protocol|consent-attested messaging / origin attribution -axel-protocol|protocol|axel-protocol/|AXEL Protocol|age-gating + explicit-content enforcement -overlay-protocol|protocol|overlay-protocol/|Overlay Protocol|layered overlay composition spec +0-ai-gatekeeper-protocol|protocol|2-protocols/0-ai-gatekeeper/|0-AI Gatekeeper Protocol|the AI-agent entry/gating protocol behind 0-AI-MANIFEST +k9-coordination-protocol|protocol|2-protocols/k9-coordination/|K9 Coordination Protocol|multi-agent coordination on top of K9 +avow-protocol|protocol|2-protocols/avow/|AVOW Protocol|consent-attested messaging / origin attribution +axel-protocol|protocol|2-protocols/axel/|AXEL Protocol|age-gating + explicit-content enforcement +overlay-protocol|protocol|2-protocols/overlay/|Overlay Protocol|layered overlay composition spec adoption-readiness-grades|readiness|adoption-readiness-grades/|ARG — Adoption Readiness Grades|per-language adoption-maturity profile templates foundations-readiness-grades|readiness|foundations-readiness-grades/|FRG — Foundations Readiness Grades|per-language foundational-maturity profile templates component-readiness-grades|readiness|component-readiness-grades/|CRG — Component Readiness Grades|the X..A grading system for components diff --git a/scripts/tests/wave9-session-detritus-test.sh b/scripts/tests/wave9-session-detritus-test.sh index 313639b23..7cf8c4e7a 100755 --- a/scripts/tests/wave9-session-detritus-test.sh +++ b/scripts/tests/wave9-session-detritus-test.sh @@ -24,8 +24,8 @@ for retired in \ contractile.just \ audit-contractiles.sh \ SECURITY_TRAINING_SUMMARY.md \ - axel-protocol/SONNET-TASKS.adoc \ - 0-ai-gatekeeper-protocol/AI-GATEKEEPER-PROTOCOL-COMPLETE-2026-02-07.adoc \ + 2-protocols/axel/SONNET-TASKS.adoc \ + 2-protocols/0-ai-gatekeeper/AI-GATEKEEPER-PROTOCOL-COMPLETE-2026-02-07.adoc \ automation/K9-AUTOMATION-SPEC.a2ml \ interop/CRG-TRG-RSR-MAPPING.a2ml \ templates/TEMPLATE-VERSIONING-SPEC.a2ml \ diff --git a/standards-map.toml b/standards-map.toml index 2a8477279..a2958fd73 100644 --- a/standards-map.toml +++ b/standards-map.toml @@ -32,7 +32,7 @@ [map] repo = "hyperpolymath/standards" version = "1.0.0" -entry_count = 120 +entry_count = 121 generated = false # hand-curated; the district index.adoc files ARE generated checked_by = "scripts/check-standards-map.sh" @@ -449,7 +449,20 @@ gate = "canon-self-conformance" note = "TRIAGE: <30 files each; none is a district" [[entry]] -from = "axel-protocol" +from = "2-protocols" +target = "2-protocols/ (district root; created by the district move)" +district = "2-protocols" +kind = "district" +files = 194 +lifecycle = "versioned" +canonical = false +canon_slot = "" +canonical_doc = "" +gate = "" +note = "District root. This path did not exist before the district move, so it is a new top-level entry and GATE D assertion 2 requires a record for it. canonical = false: the district holds specs, it is not itself a standard." + +[[entry]] +from = "2-protocols/axel/" target = "2-protocols/axel/" district = "2-protocols" kind = "protocol" @@ -462,7 +475,7 @@ gate = "canon-self-conformance" note = "consolidate, do NOT split: same owners, same cadence as the law" [[entry]] -from = "0-ai-gatekeeper-protocol" +from = "2-protocols/0-ai-gatekeeper/" target = "2-protocols/0-ai-gatekeeper/" district = "2-protocols" kind = "protocol" @@ -475,7 +488,7 @@ gate = "canon-self-conformance" note = "consolidate, do NOT split: same owners, same cadence as the law" [[entry]] -from = "k9-coordination-protocol" +from = "2-protocols/k9-coordination/" target = "2-protocols/k9-coordination/" district = "2-protocols" kind = "protocol" @@ -488,7 +501,7 @@ gate = "canon-self-conformance" note = "consolidate, do NOT split: same owners, same cadence as the law" [[entry]] -from = "overlay-protocol" +from = "2-protocols/overlay/" target = "2-protocols/overlay/" district = "2-protocols" kind = "protocol" @@ -501,7 +514,7 @@ gate = "canon-self-conformance" note = "consolidate, do NOT split: same owners, same cadence as the law" [[entry]] -from = "chora" +from = "2-protocols/chora/" target = "2-protocols/chora/" district = "2-protocols" kind = "protocol" @@ -514,7 +527,7 @@ gate = "canon-self-conformance" note = "consolidate, do NOT split: same owners, same cadence as the law" [[entry]] -from = "groove-protocol" +from = "2-protocols/groove/" target = "2-protocols/groove/" district = "2-protocols" kind = "protocol" @@ -527,7 +540,7 @@ gate = "canon-self-conformance" note = "consolidate, do NOT split: same owners, same cadence as the law" [[entry]] -from = "avow-protocol" +from = "2-protocols/avow/" target = "2-protocols/avow/" district = "2-protocols" kind = "protocol"