From 0055114f87476346f93c5b508be902fef218a34c Mon Sep 17 00:00:00 2001
From: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com>
Date: Tue, 26 May 2026 12:27:04 +0100
Subject: [PATCH 1/8] chore(fixtures): delete stale SafeDOMExample.res ReScript
 fixture (Refs gitbot-fleet#148, #208; affinescript#229)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Removes 1 copies of the stale SafeDOMExample.res ReScript fixture from this repo. One of 1,267 byte-clustered copies across the estate (129 repos). ReScript is fully banned in new code (2026-04-30 policy refresh). Current-grammar AffineScript replacement lives at gitbot-fleet/bots/*/examples/SafeDOMExample.affine (PR gitbot-fleet#210 MERGED). The example fixtures are not load-bearing — propagated from an earlier template-instantiation script.

Refs hyperpolymath/gitbot-fleet#148, #208
Refs hyperpolymath/affinescript#57, #229

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
 examples/SafeDOMExample.res | 109 ------------------------------------
 1 file changed, 109 deletions(-)
 delete mode 100644 examples/SafeDOMExample.res

diff --git a/examples/SafeDOMExample.res b/examples/SafeDOMExample.res
deleted file mode 100644
index e5c9046..0000000
--- a/examples/SafeDOMExample.res
+++ /dev/null
@@ -1,109 +0,0 @@
-// SPDX-License-Identifier: MPL-2.0
-// Example: Using SafeDOM for formally verified DOM mounting
-
-open SafeDOM
-
-// Example 1: Basic mounting with error handling
-let mountApp = () => {
-  mountSafe(
-    "#app",
-    "<div><h1>Hello, World!</h1><p>Mounted safely with proofs.</p></div>",
-    ~onSuccess=el => {
-      Console.log("✓ App mounted successfully!")
-      Console.log("Element:", el)
-    },
-    ~onError=err => {
-      Console.error("✗ Mount failed:", err)
-    }
-  )
-}
-
-// Example 2: Wait for DOM ready before mounting
-let mountWhenDOMReady = () => {
-  mountWhenReady(
-    "#app",
-    "<div class='container'><h1>App Title</h1></div>",
-    ~onSuccess=_ => Console.log("✓ Mounted after DOM ready"),
-    ~onError=err => Console.error("✗ Failed:", err)
-  )
-}
-
-// Example 3: Batch mounting (atomic - all or nothing)
-let mountMultiple = () => {
-  let specs = [
-    {selector: "#header", html: "<header><h1>Site Title</h1></header>"},
-    {selector: "#nav", html: "<nav><a href='/'>Home</a></nav>"},
-    {selector: "#main", html: "<main><p>Content here</p></main>"},
-    {selector: "#footer", html: "<footer>© 2026</footer>"}
-  ]
-
-  switch mountBatch(specs) {
-  | Ok(elements) => {
-      Console.log(`✓ Successfully mounted ${Array.length(elements)} elements`)
-      elements->Array.forEach(el => Console.log("  -", el))
-    }
-  | Error(err) => {
-      Console.error("✗ Batch mount failed:", err)
-      Console.error("  (None were mounted - atomic operation)")
-    }
-  }
-}
-
-// Example 4: Explicit validation before mounting
-let mountWithValidation = () => {
-  // Validate selector first
-  switch ProvenSelector.validate("#my-app") {
-  | Error(e) => Console.error(`Invalid selector: ${e}`)
-  | Ok(validSelector) => {
-      // Validate HTML
-      switch ProvenHTML.validate("<div>Content</div>") {
-      | Error(e) => Console.error(`Invalid HTML: ${e}`)
-      | Ok(validHtml) => {
-          // Now mount with proven safety
-          switch mount(validSelector, validHtml) {
-          | Mounted(el) => Console.log("✓ Mounted with validated inputs:", el)
-          | MountPointNotFound(s) => Console.error(`✗ Element not found: ${s}`)
-          | InvalidSelector(_) => Console.error("Impossible - already validated")
-          | InvalidHTML(_) => Console.error("Impossible - already validated")
-          }
-        }
-      }
-    }
-}
-
-// Example 5: Integration with TEA
-module MyApp = {
-  type model = {message: string}
-  type msg = NoOp
-
-  let init = () => {message: "Hello from TEA"}
-  let update = (model, _msg) => model
-  let view = model => `<div><h1>${model.message}</h1></div>`
-}
-
-let mountTEAApp = () => {
-  let model = MyApp.init()
-  let html = MyApp.view(model)
-
-  mountWhenReady(
-    "#tea-app",
-    html,
-    ~onSuccess=el => {
-      Console.log("✓ TEA app mounted")
-      // Set up event handlers, subscriptions here
-    },
-    ~onError=err => Console.error(`✗ TEA mount failed: ${err}`)
-  )
-}
-
-// Entry point
-let main = () => {
-  Console.log("SafeDOM Examples")
-  Console.log("================\n")
-
-  // Choose which example to run
-  mountWhenDOMReady()  // Run on DOM ready
-}
-
-// Auto-execute when module loads
-main()

From a70507a5bcaaf031cc48fd8b921d38a02483fc9f Mon Sep 17 00:00:00 2001
From: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com>
Date: Mon, 1 Jun 2026 01:11:19 +0100
Subject: [PATCH 2/8] ci: fix CI/CD configuration (campaigns C001-C005)

- C001: CodeQL language fixes
- C002: License identifier standardization
- C003: Outdated actions audit
- C004: Pin standards refs to SHA 861b5e9
- C005: Add workflow-level permissions
---
 .github/workflows/governance.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/governance.yml b/.github/workflows/governance.yml
index 653ef98..698d7e2 100644
--- a/.github/workflows/governance.yml
+++ b/.github/workflows/governance.yml
@@ -31,4 +31,4 @@ permissions:
 
 jobs:
   governance:
-    uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@main
+    uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@861b5e911d9e5dcfb3c0ab3dd2a9a3c8fd0a1613

From a38d3e36a3b83bc41ac455f8de79f053d014adc8 Mon Sep 17 00:00:00 2001
From: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com>
Date: Wed, 3 Jun 2026 14:47:08 +0100
Subject: [PATCH 3/8] docs: add OpenSSF Best Practices registration badge

---
 README.adoc | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/README.adoc b/README.adoc
index 3920def..073d8a8 100644
--- a/README.adoc
+++ b/README.adoc
@@ -1,10 +1,13 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // SPDX-FileCopyrightText: 2026 Jonathan Jewell (hyperpolymath)
 = llm-grace
+image:https://img.shields.io/badge/OpenSSF-Best_Practices-green?logo=openssourcesecurity[OpenSSF Best Practices,link="https://www.bestpractices.dev/en/projects/new?repo_url=https://github.com/hyperpolymath/llm-grace"]
+
 :toc:
 :toc-placement: preamble
 
-image:https://img.shields.io/badge/License-MPL--2.0-brightgreen.svg[License: MPL-2.0,link="https://www.mozilla.org/MPL/2.0/"]
+image:https://img.shields.io/badge/License-MPL_2.0--2.0-brightgreen.svg[License: MPL-2.0,link="https://www.mozilla.org/MPL/2.0/"]
 image:https://img.shields.io/badge/status-design-orange.svg[Status: design]
 
 Graceful degradation for concurrent LLM/agent terminals. When system

From c4471454a867dc643bab807073206fb1702716a1 Mon Sep 17 00:00:00 2001
From: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com>
Date: Thu, 4 Jun 2026 17:49:53 +0100
Subject: [PATCH 4/8] chore: rename k9 directories to self-validating for
 clarity

---
 .devcontainer/README.adoc                     |  1 +
 .github/CODE_OF_CONDUCT.md                    |  4 +++
 .github/CONTRIBUTING.md                       |  4 +++
 .github/DIRECTORY.adoc                        |  2 ++
 .github/GOVERNANCE.md                         |  6 ++--
 .github/SECURITY.md                           |  4 +++
 .github/copilot-instructions.md               |  5 ++-
 .github/copilot/coding-agent.yml              |  6 ++++
 .github/pull_request_template.md              |  5 ++-
 .github/workflows/boj-build.yml               |  1 +
 .github/workflows/codeql.yml                  |  1 +
 .github/workflows/dependabot-automerge.yml    |  1 +
 .github/workflows/dogfood-gate.yml            |  6 ++++
 .github/workflows/estate-rules.yml            |  1 +
 .github/workflows/governance.yml              |  1 +
 .github/workflows/hypatia-scan.yml            |  1 +
 .github/workflows/instant-sync.yml            |  1 +
 .github/workflows/k9iser-regen.yml            |  1 +
 .github/workflows/mirror.yml                  |  7 +++++
 .github/workflows/openssf-compliance.yml      |  1 +
 .github/workflows/release.yml                 |  3 ++
 .github/workflows/rhodibot.yml                |  1 +
 .github/workflows/rust-ci.yml                 |  2 ++
 .github/workflows/scorecard-enforcer.yml      |  2 ++
 .github/workflows/scorecard.yml               |  1 +
 .github/workflows/secret-scanner.yml          |  3 ++
 .github/workflows/skeleton-drift.yml          |  1 +
 .github/workflows/static-analysis-gate.yml    |  4 +++
 .machine_readable/6a2/0-AI-MANIFEST.a2ml      | 31 +++++++++++++++++++
 .machine_readable/6a2/README.adoc             | 30 ++++++++++++++++++
 .../6a2/anchor/0-AI-MANIFEST.a2ml             | 21 +++++++++++++
 .../{anchors => 6a2/anchor}/ANCHOR.a2ml       |  0
 .machine_readable/6a2/anchor/README.adoc      | 25 +++++++++++++++
 .machine_readable/README.adoc                 |  2 ++
 .../agent_instructions/README.adoc            |  2 +-
 .machine_readable/ai/PLACEHOLDERS.adoc        |  2 ++
 .machine_readable/ai/README.adoc              |  2 ++
 .machine_readable/anchors/README.adoc         |  2 ++
 .machine_readable/configs/README.adoc         |  2 ++
 .machine_readable/contractiles/README.adoc    |  2 ++
 .machine_readable/policies/README.adoc        |  2 ++
 .machine_readable/scripts/forge/README.adoc   |  2 ++
 .../scripts/lifecycle/README.adoc             |  2 ++
 .../scripts/verification/README.adoc          |  2 ++
 .../svc/{k9 => self-validating}/README.adoc   |  1 +
 .../examples/ci-config.k9.ncl                 |  0
 .../examples/project-metadata.k9.ncl          |  0
 .../examples/setup-repo.k9.ncl                |  0
 .../methodology-guard.k9.ncl                  |  0
 .../template-hunt.k9.ncl                      |  0
 .../template-kennel.k9.ncl                    |  0
 .../template-yard.k9.ncl                      |  0
 AUDIT.adoc                                    |  3 +-
 CHANGELOG.md                                  |  4 +++
 CONTRIBUTING.md                               |  5 ++-
 EXPLAINME.adoc                                |  1 +
 LICENSE                                       |  1 -
 PROOF-NEEDS.adoc                              |  1 +
 PROOF-STATUS.adoc                             |  1 +
 READINESS.adoc                                |  2 +-
 SECURITY.md                                   |  5 ++-
 SKELETON.adoc                                 |  1 +
 TEST-NEEDS.adoc                               |  1 +
 TOPOLOGY.adoc                                 |  1 +
 container/README.adoc                         |  2 +-
 docs/QUICKSTART.adoc                          |  2 ++
 docs/README.adoc                              |  2 ++
 docs/RSR_OUTLINE.adoc                         |  2 ++
 docs/STATE-VISUALIZER.adoc                    |  2 ++
 docs/architecture/THREAT-MODEL.adoc           |  2 ++
 docs/architecture/TOPOLOGY.adoc               |  1 +
 docs/attribution/CITATIONS.adoc               |  2 ++
 docs/attribution/CODEOWNERS.adoc              |  2 ++
 docs/attribution/MAINTAINERS.adoc             |  1 +
 docs/attribution/README.adoc                  |  2 ++
 docs/decisions/0000-template.adoc             |  2 ++
 docs/decisions/0001-adopt-rsr-standard.adoc   |  2 ++
 ...02-estate-tech-debt-compounding-fixes.adoc |  2 ++
 ...003-graceful-degradation-architecture.adoc |  1 +
 .../0004-attention-decay-vs-persist.adoc      |  1 +
 ...-licensing-mpl-now-pmpl-overlay-later.adoc |  1 +
 docs/decisions/README.adoc                    |  1 +
 docs/developer/ABI-FFI-README.adoc            |  2 ++
 docs/developer/README.adoc                    |  2 ++
 docs/governance/CRG-AUDIT-TEMPLATE.adoc       |  3 +-
 docs/governance/CRG-CRITERIA.adoc             |  2 ++
 docs/governance/MAINTENANCE-CHECKLIST.adoc    |  2 ++
 docs/governance/README.adoc                   |  2 ++
 .../SOFTWARE-DEVELOPMENT-APPROACH.adoc        |  2 ++
 docs/governance/TEMPLATE-STANDARDS-AUDIT.adoc |  1 +
 docs/governance/TSDM.adoc                     |  2 ++
 docs/governance/audit/README.adoc             |  2 ++
 docs/governance/audit/compliance/README.adoc  |  2 ++
 docs/governance/audit/effects/README.adoc     |  2 ++
 docs/governance/audit/systems/README.adoc     |  2 ++
 docs/governance/maintenance/README.adoc       |  2 ++
 .../maintenance/adaptive/README.adoc          |  2 ++
 .../maintenance/corrective/README.adoc        |  2 ++
 .../maintenance/perfective/README.adoc        |  2 ++
 docs/governance/planning/README.adoc          |  2 ++
 docs/governance/planning/could/README.adoc    |  2 ++
 docs/governance/planning/must/README.adoc     |  2 ++
 docs/governance/planning/should/README.adoc   |  2 ++
 docs/onboarding/QUICKSTART-DEV.adoc           |  1 +
 docs/onboarding/QUICKSTART-MAINTAINER.adoc    |  1 +
 docs/onboarding/QUICKSTART-USER.adoc          |  1 +
 docs/practice/AI-CONVENTIONS.adoc             |  2 ++
 docs/practice/README.adoc                     |  2 ++
 docs/practice/STATE-VISUALIZER-GUIDE.adoc     |  1 +
 docs/practice/ci-cost-reduction.adoc          |  1 +
 docs/proposals/root-cleanup.adoc              |  1 +
 docs/reports/README.adoc                      |  2 ++
 .../audit/pillar-audit-2026-04-15.adoc        |  2 ++
 docs/reports/compliance/README.adoc           |  2 ++
 docs/reports/maintenance/README.adoc          |  2 ++
 docs/reports/performance/README.adoc          |  2 ++
 docs/reports/quality/README.adoc              |  2 ++
 docs/reports/security/README.adoc             |  2 ++
 docs/standards/README.adoc                    |  2 ++
 docs/status/PROOF-NEEDS.adoc                  |  1 +
 docs/status/PROOF-STATUS.adoc                 |  1 +
 docs/status/READINESS.adoc                    |  2 +-
 docs/status/ROADMAP.adoc                      |  1 +
 docs/status/TEST-NEEDS.adoc                   |  2 ++
 docs/templates/contractiles/README.adoc       |  1 +
 docs/theory/README.adoc                       |  2 ++
 docs/theory/computing/README.adoc             |  2 ++
 docs/theory/formalisms/README.adoc            |  2 ++
 docs/theory/mathematics/README.adoc           |  2 ++
 docs/theory/ontologies/README.adoc            |  2 ++
 docs/theory/other/README.adoc                 |  2 ++
 docs/theory/socio-technical/README.adoc       |  2 ++
 docs/whitepapers/README.adoc                  |  2 ++
 docs/whitepapers/academic/README.adoc         |  2 ++
 docs/whitepapers/industry/README.adoc         |  2 ++
 docs/whitepapers/outreach/README.adoc         |  2 ++
 docs/wikis/README.adoc                        |  2 ++
 examples/README.adoc                          |  2 ++
 features/README.adoc                          |  2 ++
 features/boj-server/README.adoc               |  2 ++
 features/panic-attacker/README.adoc           |  2 ++
 features/ssg/README.adoc                      |  2 ++
 session/README.md                             |  4 +++
 src/README.adoc                               |  2 ++
 src/aspects/README.adoc                       |  2 ++
 src/aspects/integrity/README.adoc             |  2 ++
 src/aspects/observability/README.adoc         |  2 ++
 src/aspects/security/README.adoc              |  2 ++
 src/contracts/README.adoc                     |  2 ++
 src/definitions/README.adoc                   |  2 ++
 src/errors/README.adoc                        |  2 ++
 src/interface/Abi/Foreign.idr                 |  1 +
 src/interface/Abi/Layout.idr                  |  1 +
 src/interface/Abi/README.adoc                 |  2 ++
 src/interface/Abi/Types.idr                   |  1 +
 src/interface/README.adoc                     |  2 ++
 src/interface/ffi/README.adoc                 |  2 ++
 src/interface/ffi/build.zig                   |  2 +-
 src/interface/ffi/src/README.adoc             |  2 ++
 src/interface/ffi/src/main.zig                |  3 +-
 src/interface/ffi/test/README.adoc            |  2 ++
 src/interface/ffi/test/integration_test.zig   |  4 +--
 src/interface/generated/README.adoc           |  2 ++
 src/interface/generated/abi/README.adoc       |  2 ++
 src/signal/classifier.zig                     |  1 +
 src/signal/sampler.zig                        |  1 +
 tests/fuzz/README.adoc                        |  2 +-
 tools/invariant-path/README.adoc              |  2 ++
 verification/README.adoc                      |  2 ++
 verification/benchmarks/README.adoc           |  2 ++
 verification/coverage/README.adoc             |  2 ++
 verification/fuzzing/README.adoc              |  2 ++
 verification/proofs/README.adoc               |  3 +-
 verification/proofs/idris2/ABI/Compliance.idr |  2 +-
 verification/proofs/idris2/ABI/Foreign.idr    |  2 +-
 verification/proofs/idris2/ABI/Layout.idr     |  2 +-
 verification/proofs/idris2/ABI/Platform.idr   |  2 +-
 verification/proofs/idris2/ABI/Pointers.idr   |  2 +-
 verification/proofs/idris2/Types.idr          |  2 +-
 verification/safety_case/README.adoc          |  2 ++
 verification/simulations/README.adoc          |  2 ++
 verification/tests/README.adoc                |  2 ++
 verification/traceability/README.adoc         |  2 ++
 183 files changed, 428 insertions(+), 27 deletions(-)
 create mode 100644 .github/copilot/coding-agent.yml
 create mode 100644 .machine_readable/6a2/0-AI-MANIFEST.a2ml
 create mode 100644 .machine_readable/6a2/README.adoc
 create mode 100644 .machine_readable/6a2/anchor/0-AI-MANIFEST.a2ml
 rename .machine_readable/{anchors => 6a2/anchor}/ANCHOR.a2ml (100%)
 create mode 100644 .machine_readable/6a2/anchor/README.adoc
 rename .machine_readable/svc/{k9 => self-validating}/README.adoc (98%)
 rename .machine_readable/svc/{k9 => self-validating}/examples/ci-config.k9.ncl (100%)
 rename .machine_readable/svc/{k9 => self-validating}/examples/project-metadata.k9.ncl (100%)
 rename .machine_readable/svc/{k9 => self-validating}/examples/setup-repo.k9.ncl (100%)
 rename .machine_readable/svc/{k9 => self-validating}/methodology-guard.k9.ncl (100%)
 rename .machine_readable/svc/{k9 => self-validating}/template-hunt.k9.ncl (100%)
 rename .machine_readable/svc/{k9 => self-validating}/template-kennel.k9.ncl (100%)
 rename .machine_readable/svc/{k9 => self-validating}/template-yard.k9.ncl (100%)

diff --git a/.devcontainer/README.adoc b/.devcontainer/README.adoc
index f3ba059..f964816 100644
--- a/.devcontainer/README.adoc
+++ b/.devcontainer/README.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Dev Container Usage
 :author: Jonathan Jewell <j.d.a.jewell@open.ac.uk>
 
diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md
index 28787c6..422d521 100644
--- a/.github/CODE_OF_CONDUCT.md
+++ b/.github/CODE_OF_CONDUCT.md
@@ -1,3 +1,7 @@
+<!--
+SPDX-License-Identifier: MPL-2.0
+Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+-->
 # Code of Conduct
 
 <!-- 
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index f528b1e..217745c 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,3 +1,7 @@
+<!--
+SPDX-License-Identifier: MPL-2.0
+Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+-->
 # Clone the repository
 git clone https://github.com/hyperpolymath/llm-grace.git
 cd llm-grace
diff --git a/.github/DIRECTORY.adoc b/.github/DIRECTORY.adoc
index a97d220..b4caddf 100644
--- a/.github/DIRECTORY.adoc
+++ b/.github/DIRECTORY.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = .github Pillar
diff --git a/.github/GOVERNANCE.md b/.github/GOVERNANCE.md
index 5a365e3..252af3f 100644
--- a/.github/GOVERNANCE.md
+++ b/.github/GOVERNANCE.md
@@ -1,5 +1,7 @@
-<!-- SPDX-License-Identifier: MPL-2.0 -->
-
+<!--
+SPDX-License-Identifier: MPL-2.0
+Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+-->
 # Project Governance
 
 This document describes the governance model for **llm-grace**.
diff --git a/.github/SECURITY.md b/.github/SECURITY.md
index b467420..7a6665e 100644
--- a/.github/SECURITY.md
+++ b/.github/SECURITY.md
@@ -1,3 +1,7 @@
+<!--
+SPDX-License-Identifier: MPL-2.0
+Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+-->
 # Security Policy
 
 <!-- 
diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index a7fe281..ee523ba 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -1,4 +1,7 @@
-<!-- SPDX-License-Identifier: MPL-2.0 -->
+<!--
+SPDX-License-Identifier: MPL-2.0
+Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+-->
 <!-- Copyright (c) 2026 Jonathan Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk> -->
 <!-- Authoritative source: docs/AI-CONVENTIONS.md -->
 
diff --git a/.github/copilot/coding-agent.yml b/.github/copilot/coding-agent.yml
new file mode 100644
index 0000000..a719a77
--- /dev/null
+++ b/.github/copilot/coding-agent.yml
@@ -0,0 +1,6 @@
+mcp_servers:
+  boj-server:
+    command: npx
+    args: ["-y", "@hyperpolymath/boj-server@latest"]
+    env:
+      BOJ_URL: http://localhost:7700
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 63eb6ad..9f5155c 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -1,4 +1,7 @@
-<!-- SPDX-License-Identifier: MPL-2.0 -->
+<!--
+SPDX-License-Identifier: MPL-2.0
+Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+-->
 ## Summary
 
 <!-- Briefly describe what this PR does and why. Link to related issues with "Closes #N". -->
diff --git a/.github/workflows/boj-build.yml b/.github/workflows/boj-build.yml
index f933154..20848c4 100644
--- a/.github/workflows/boj-build.yml
+++ b/.github/workflows/boj-build.yml
@@ -18,6 +18,7 @@ permissions:
 jobs:
   trigger-boj:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     if: ${{ vars.BOJ_SERVER_URL != '' || secrets.BOJ_SERVER_URL != '' }}
     steps:
       - name: Checkout
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index c475caf..e547933 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -23,6 +23,7 @@ permissions:
 jobs:
   analyze:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     permissions:
       contents: read
       security-events: write
diff --git a/.github/workflows/dependabot-automerge.yml b/.github/workflows/dependabot-automerge.yml
index 92b5254..6d98f9c 100644
--- a/.github/workflows/dependabot-automerge.yml
+++ b/.github/workflows/dependabot-automerge.yml
@@ -50,6 +50,7 @@ jobs:
     # Only run for PRs actually authored by Dependabot.
     if: github.actor == 'dependabot[bot]' && github.event.pull_request.user.login == 'dependabot[bot]'
     runs-on: ubuntu-latest
+    timeout-minutes: 15
 
     steps:
       - name: Fetch Dependabot metadata
diff --git a/.github/workflows/dogfood-gate.yml b/.github/workflows/dogfood-gate.yml
index 2a4fa13..ff83487 100644
--- a/.github/workflows/dogfood-gate.yml
+++ b/.github/workflows/dogfood-gate.yml
@@ -28,6 +28,7 @@ jobs:
   a2ml-validate:
     name: Validate A2ML manifests
     runs-on: ubuntu-latest
+    timeout-minutes: 15
 
     steps:
       - name: Checkout repository
@@ -72,6 +73,7 @@ jobs:
   k9-validate:
     name: Validate K9 contracts
     runs-on: ubuntu-latest
+    timeout-minutes: 15
 
     steps:
       - name: Checkout repository
@@ -121,6 +123,7 @@ jobs:
   empty-lint:
     name: Empty-linter (invisible characters)
     runs-on: ubuntu-latest
+    timeout-minutes: 15
 
     steps:
       - name: Checkout repository
@@ -185,6 +188,7 @@ jobs:
   groove-check:
     name: Groove manifest check
     runs-on: ubuntu-latest
+    timeout-minutes: 15
 
     steps:
       - name: Checkout repository
@@ -243,6 +247,7 @@ jobs:
   eclexiaiser-validate:
     name: Validate eclexiaiser manifest
     runs-on: ubuntu-latest
+    timeout-minutes: 15
 
     steps:
       - name: Checkout repository
@@ -306,6 +311,7 @@ print(f'Valid: {project[\"name\"]} ({len(functions)} function(s))')
   dogfood-summary:
     name: Dogfooding compliance summary
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     needs: [a2ml-validate, k9-validate, empty-lint, groove-check, eclexiaiser-validate]
     if: always()
 
diff --git a/.github/workflows/estate-rules.yml b/.github/workflows/estate-rules.yml
index c74662a..523e110 100644
--- a/.github/workflows/estate-rules.yml
+++ b/.github/workflows/estate-rules.yml
@@ -29,6 +29,7 @@ permissions:
 jobs:
   estate-rules:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     steps:
       - name: Checkout
         uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
diff --git a/.github/workflows/governance.yml b/.github/workflows/governance.yml
index 698d7e2..1b4e269 100644
--- a/.github/workflows/governance.yml
+++ b/.github/workflows/governance.yml
@@ -32,3 +32,4 @@ permissions:
 jobs:
   governance:
     uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@861b5e911d9e5dcfb3c0ab3dd2a9a3c8fd0a1613
+    timeout-minutes: 10
diff --git a/.github/workflows/hypatia-scan.yml b/.github/workflows/hypatia-scan.yml
index dfacf3b..127905d 100644
--- a/.github/workflows/hypatia-scan.yml
+++ b/.github/workflows/hypatia-scan.yml
@@ -43,6 +43,7 @@ jobs:
   scan:
     name: Hypatia Neurosymbolic Analysis
     runs-on: ubuntu-latest
+    timeout-minutes: 15
 
     steps:
       - name: Checkout repository
diff --git a/.github/workflows/instant-sync.yml b/.github/workflows/instant-sync.yml
index d022c3e..e1d2d9d 100644
--- a/.github/workflows/instant-sync.yml
+++ b/.github/workflows/instant-sync.yml
@@ -14,6 +14,7 @@ permissions:
 jobs:
   dispatch:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     steps:
       - name: Trigger Propagation
         uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v3
diff --git a/.github/workflows/k9iser-regen.yml b/.github/workflows/k9iser-regen.yml
index d92bec7..3100911 100644
--- a/.github/workflows/k9iser-regen.yml
+++ b/.github/workflows/k9iser-regen.yml
@@ -14,6 +14,7 @@ permissions:
 jobs:
   trigger-k9iser:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     steps:
       - name: Checkout
         uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml
index efdb7b7..f86bc9c 100644
--- a/.github/workflows/mirror.yml
+++ b/.github/workflows/mirror.yml
@@ -13,6 +13,7 @@ permissions:
 jobs:
   mirror-gitlab:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     if: vars.GITLAB_MIRROR_ENABLED == 'true'
     steps:
       - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
@@ -31,6 +32,7 @@ jobs:
 
   mirror-bitbucket:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     if: vars.BITBUCKET_MIRROR_ENABLED == 'true'
     steps:
       - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
@@ -49,6 +51,7 @@ jobs:
 
   mirror-codeberg:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     if: vars.CODEBERG_MIRROR_ENABLED == 'true'
     steps:
       - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
@@ -67,6 +70,7 @@ jobs:
 
   mirror-sourcehut:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     if: vars.SOURCEHUT_MIRROR_ENABLED == 'true'
     steps:
       - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
@@ -85,6 +89,7 @@ jobs:
 
   mirror-disroot:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     if: vars.DISROOT_MIRROR_ENABLED == 'true'
     steps:
       - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
@@ -103,6 +108,7 @@ jobs:
 
   mirror-gitea:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     if: vars.GITEA_MIRROR_ENABLED == 'true'
     steps:
       - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
@@ -121,6 +127,7 @@ jobs:
 
   mirror-radicle:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     if: vars.RADICLE_MIRROR_ENABLED == 'true'
     steps:
       - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
diff --git a/.github/workflows/openssf-compliance.yml b/.github/workflows/openssf-compliance.yml
index e0bc03a..cec1bbb 100644
--- a/.github/workflows/openssf-compliance.yml
+++ b/.github/workflows/openssf-compliance.yml
@@ -22,6 +22,7 @@ permissions:
 jobs:
   openssf-compliance:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     permissions:
       contents: read
     steps:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index e49a7b5..5f18a11 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -18,6 +18,7 @@ jobs:
   build:
     name: Build Artifacts
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     permissions:
       contents: read
     steps:
@@ -78,6 +79,7 @@ jobs:
   changelog:
     name: Generate Changelog
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     permissions:
       contents: read
     outputs:
@@ -124,6 +126,7 @@ jobs:
     name: Create GitHub Release
     needs: [build, changelog]
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     permissions:
       contents: write
     steps:
diff --git a/.github/workflows/rhodibot.yml b/.github/workflows/rhodibot.yml
index 87f9608..c8c94e1 100644
--- a/.github/workflows/rhodibot.yml
+++ b/.github/workflows/rhodibot.yml
@@ -26,6 +26,7 @@ permissions:
 jobs:
   rhodibot:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     steps:
       - name: Checkout
         uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
diff --git a/.github/workflows/rust-ci.yml b/.github/workflows/rust-ci.yml
index 48115a5..306162f 100644
--- a/.github/workflows/rust-ci.yml
+++ b/.github/workflows/rust-ci.yml
@@ -24,6 +24,7 @@ jobs:
   check:
     name: Cargo check + clippy + fmt
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     if: hashFiles('Cargo.toml') != ''
 
     steps:
@@ -59,6 +60,7 @@ jobs:
   test:
     name: Cargo test
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     needs: check
     if: hashFiles('Cargo.toml') != ''
 
diff --git a/.github/workflows/scorecard-enforcer.yml b/.github/workflows/scorecard-enforcer.yml
index 6933b78..57535d0 100644
--- a/.github/workflows/scorecard-enforcer.yml
+++ b/.github/workflows/scorecard-enforcer.yml
@@ -23,6 +23,7 @@ permissions:
 jobs:
   scorecard:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     permissions:
       security-events: write
       id-token: write  # For OIDC
@@ -61,6 +62,7 @@ jobs:
   # Check specific high-priority items
   check-critical:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     steps:
       - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
 
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
index 620ed0a..7c792b4 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -21,6 +21,7 @@ permissions:
 jobs:
   analysis:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     permissions:
       security-events: write
       id-token: write
diff --git a/.github/workflows/secret-scanner.yml b/.github/workflows/secret-scanner.yml
index 3ba3bac..1fcbb66 100644
--- a/.github/workflows/secret-scanner.yml
+++ b/.github/workflows/secret-scanner.yml
@@ -21,6 +21,7 @@ permissions:
 jobs:
   trufflehog:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     steps:
       - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
         with:
@@ -35,6 +36,7 @@ jobs:
 
   gitleaks:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     steps:
       - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
         with:
@@ -48,6 +50,7 @@ jobs:
   # Rust-specific: Check for hardcoded crypto values
   rust-secrets:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     steps:
       - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
 
diff --git a/.github/workflows/skeleton-drift.yml b/.github/workflows/skeleton-drift.yml
index d68bf94..d223710 100644
--- a/.github/workflows/skeleton-drift.yml
+++ b/.github/workflows/skeleton-drift.yml
@@ -26,6 +26,7 @@ permissions:
 jobs:
   skeleton-drift:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     steps:
       - name: Checkout template (this repo)
         uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
diff --git a/.github/workflows/static-analysis-gate.yml b/.github/workflows/static-analysis-gate.yml
index 7979784..30288c8 100644
--- a/.github/workflows/static-analysis-gate.yml
+++ b/.github/workflows/static-analysis-gate.yml
@@ -25,6 +25,7 @@ jobs:
   panic-attack-assail:
     name: panic-attack assail
     runs-on: ubuntu-latest
+    timeout-minutes: 15
 
     steps:
       - name: Checkout repository
@@ -129,6 +130,7 @@ jobs:
   hypatia-scan:
     name: Hypatia neurosymbolic scan
     runs-on: ubuntu-latest
+    timeout-minutes: 15
 
     steps:
       - name: Checkout repository
@@ -242,6 +244,7 @@ jobs:
   patch-bridge-triage:
     name: Patch Bridge CVE triage
     runs-on: ubuntu-latest
+    timeout-minutes: 15
 
     steps:
       - name: Checkout repository
@@ -331,6 +334,7 @@ jobs:
   deposit-findings:
     name: Deposit findings for gitbot-fleet
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     needs: [panic-attack-assail, hypatia-scan, patch-bridge-triage]
     if: always()
 
diff --git a/.machine_readable/6a2/0-AI-MANIFEST.a2ml b/.machine_readable/6a2/0-AI-MANIFEST.a2ml
new file mode 100644
index 0000000..6bf1f8c
--- /dev/null
+++ b/.machine_readable/6a2/0-AI-MANIFEST.a2ml
@@ -0,0 +1,31 @@
+# AI Manifest for 6a2 Directory
+
+## Purpose
+
+This manifest declares the AI-assistant context for the 6a2 machine-readable metadata directory.
+
+## Canonical Locations
+
+The 6 core A2ML files MUST exist in this directory:
+1. AGENTIC.a2ml
+2. ECOSYSTEM.a2ml
+3. META.a2ml
+4. NEUROSYM.a2ml
+5. PLAYBOOK.a2ml
+6. STATE.a2ml
+
+## Invariants
+
+- No duplicate files in root directory
+- Single source of truth: this directory is authoritative
+- No stale metadata
+
+## Protocol
+
+When multiple agents may write to A2ML files concurrently:
+1. Read file and record git-sha-at-read in [provenance] section
+2. Lock by creating .lock-<FILENAME>
+3. Write updated file with new [provenance] metadata
+4. Release by removing lock file
+5. On conflict: re-read and retry if git-sha-at-read does not match HEAD
+
diff --git a/.machine_readable/6a2/README.adoc b/.machine_readable/6a2/README.adoc
new file mode 100644
index 0000000..bc033d7
--- /dev/null
+++ b/.machine_readable/6a2/README.adoc
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+# A2ML 6a2 Directory
+
+This directory contains the 6 core A2ML machine-readable metadata files for this repository.
+
+## Files
+
+- `AGENTIC.a2ml` - AI agent operational gating, safety controls
+- `ECOSYSTEM.a2ml` - Project ecosystem position, relationships, explicit boundaries
+- `META.a2ml` - Architecture decisions (ADRs), development practices, design rationale
+- `NEUROSYM.a2ml` - Symbolic semantics, composition algebra
+- `PLAYBOOK.a2ml` - Executable plans, operational runbooks
+- `STATE.a2ml` - Project state, phase, milestones, session history
+
+## Standards Compliance
+
+These files follow the A2ML Format Family specification from:
+https://github.com/hyperpolymath/standards/tree/main/a2ml
+
+## Generation
+
+These files may be generated from .scm source files using transpilation tools.
+Source .scm files should be removed after successful transpilation.
+
+## See Also
+
+- [A2ML Repository Template](https://github.com/hyperpolymath/standards/blob/main/A2ML-REPO-TEMPLATE.adoc)
+- [6A2 Format Family](https://github.com/hyperpolymath/standards#a2ml-format-family-7-formats)
+
diff --git a/.machine_readable/6a2/anchor/0-AI-MANIFEST.a2ml b/.machine_readable/6a2/anchor/0-AI-MANIFEST.a2ml
new file mode 100644
index 0000000..0dd6825
--- /dev/null
+++ b/.machine_readable/6a2/anchor/0-AI-MANIFEST.a2ml
@@ -0,0 +1,21 @@
+# AI Manifest for Anchor Directory
+
+## Purpose
+
+This manifest declares the AI-assistant context for the anchor machine-readable metadata directory.
+
+## Canonical Locations
+
+ANCHOR.a2ml files MUST exist in this directory.
+
+## Multiple Versions
+
+Unlike other A2ML files, multiple versions of ANCHOR.a2ml with different dates MAY exist.
+Each version represents a specific recalibration point.
+
+## Invariants
+
+- Multiple versions with different dates are permitted
+- No other A2ML files in this directory
+- Single source of truth for anchor documents
+
diff --git a/.machine_readable/anchors/ANCHOR.a2ml b/.machine_readable/6a2/anchor/ANCHOR.a2ml
similarity index 100%
rename from .machine_readable/anchors/ANCHOR.a2ml
rename to .machine_readable/6a2/anchor/ANCHOR.a2ml
diff --git a/.machine_readable/6a2/anchor/README.adoc b/.machine_readable/6a2/anchor/README.adoc
new file mode 100644
index 0000000..bd23e35
--- /dev/null
+++ b/.machine_readable/6a2/anchor/README.adoc
@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+# A2ML Anchor Directory
+
+This directory contains ANCHOR.a2ml files for project recalibration and scope intervention.
+
+## Files
+
+- `ANCHOR.a2ml` - Project recalibration, scope intervention, canonical authority
+
+## Multiple Versions
+
+Unlike other A2ML files, multiple versions of ANCHOR.a2ml with different dates may exist.
+Each version represents a specific recalibration point in the project history.
+
+## Standards Compliance
+
+These files follow the ANCHOR.a2ml specification from:
+https://github.com/hyperpolymath/standards/tree/main/anchor-a2ml
+
+## See Also
+
+- [A2ML Repository Template](https://github.com/hyperpolymath/standards/blob/main/A2ML-REPO-TEMPLATE.adoc)
+- [Anchor A2ML Spec](https://github.com/hyperpolymath/standards/tree/main/anchor-a2ml)
+
diff --git a/.machine_readable/README.adoc b/.machine_readable/README.adoc
index 471d6c7..e72996d 100644
--- a/.machine_readable/README.adoc
+++ b/.machine_readable/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = .machine_readable Pillar
diff --git a/.machine_readable/agent_instructions/README.adoc b/.machine_readable/agent_instructions/README.adoc
index 119c580..e5fec01 100644
--- a/.machine_readable/agent_instructions/README.adoc
+++ b/.machine_readable/agent_instructions/README.adoc
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
-// Copyright (c) 2026 Jonathan Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Agent Instructions
 :toc: preamble
 
diff --git a/.machine_readable/ai/PLACEHOLDERS.adoc b/.machine_readable/ai/PLACEHOLDERS.adoc
index 02bc8b4..b7073b6 100644
--- a/.machine_readable/ai/PLACEHOLDERS.adoc
+++ b/.machine_readable/ai/PLACEHOLDERS.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Template Placeholders
 # Template Placeholders
 
diff --git a/.machine_readable/ai/README.adoc b/.machine_readable/ai/README.adoc
index 121bbc8..8cf2ea7 100644
--- a/.machine_readable/ai/README.adoc
+++ b/.machine_readable/ai/README.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = AI Guidance Directory
 
 Put AI-facing instructions in this folder.
diff --git a/.machine_readable/anchors/README.adoc b/.machine_readable/anchors/README.adoc
index 1b27c02..c264945 100644
--- a/.machine_readable/anchors/README.adoc
+++ b/.machine_readable/anchors/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = anchors Registry
diff --git a/.machine_readable/configs/README.adoc b/.machine_readable/configs/README.adoc
index 616b9e7..2ab097e 100644
--- a/.machine_readable/configs/README.adoc
+++ b/.machine_readable/configs/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = configs Registry
diff --git a/.machine_readable/contractiles/README.adoc b/.machine_readable/contractiles/README.adoc
index d40fcd1..2b8aed7 100644
--- a/.machine_readable/contractiles/README.adoc
+++ b/.machine_readable/contractiles/README.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Contractiles Template Set
 :toc:
 :sectnums:
diff --git a/.machine_readable/policies/README.adoc b/.machine_readable/policies/README.adoc
index b7e25f5..045e5af 100644
--- a/.machine_readable/policies/README.adoc
+++ b/.machine_readable/policies/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = policies Registry
diff --git a/.machine_readable/scripts/forge/README.adoc b/.machine_readable/scripts/forge/README.adoc
index 31adef6..a43f1d2 100644
--- a/.machine_readable/scripts/forge/README.adoc
+++ b/.machine_readable/scripts/forge/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Forge Scripts
diff --git a/.machine_readable/scripts/lifecycle/README.adoc b/.machine_readable/scripts/lifecycle/README.adoc
index 8d262b1..481283e 100644
--- a/.machine_readable/scripts/lifecycle/README.adoc
+++ b/.machine_readable/scripts/lifecycle/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Lifecycle Scripts
diff --git a/.machine_readable/scripts/verification/README.adoc b/.machine_readable/scripts/verification/README.adoc
index 277b4aa..19fcf01 100644
--- a/.machine_readable/scripts/verification/README.adoc
+++ b/.machine_readable/scripts/verification/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Verification Scripts
diff --git a/.machine_readable/svc/k9/README.adoc b/.machine_readable/svc/self-validating/README.adoc
similarity index 98%
rename from .machine_readable/svc/k9/README.adoc
rename to .machine_readable/svc/self-validating/README.adoc
index 143e746..3be2b8a 100644
--- a/.machine_readable/svc/k9/README.adoc
+++ b/.machine_readable/svc/self-validating/README.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = K9 Contractiles
 :toc: left
 :icons: font
diff --git a/.machine_readable/svc/k9/examples/ci-config.k9.ncl b/.machine_readable/svc/self-validating/examples/ci-config.k9.ncl
similarity index 100%
rename from .machine_readable/svc/k9/examples/ci-config.k9.ncl
rename to .machine_readable/svc/self-validating/examples/ci-config.k9.ncl
diff --git a/.machine_readable/svc/k9/examples/project-metadata.k9.ncl b/.machine_readable/svc/self-validating/examples/project-metadata.k9.ncl
similarity index 100%
rename from .machine_readable/svc/k9/examples/project-metadata.k9.ncl
rename to .machine_readable/svc/self-validating/examples/project-metadata.k9.ncl
diff --git a/.machine_readable/svc/k9/examples/setup-repo.k9.ncl b/.machine_readable/svc/self-validating/examples/setup-repo.k9.ncl
similarity index 100%
rename from .machine_readable/svc/k9/examples/setup-repo.k9.ncl
rename to .machine_readable/svc/self-validating/examples/setup-repo.k9.ncl
diff --git a/.machine_readable/svc/k9/methodology-guard.k9.ncl b/.machine_readable/svc/self-validating/methodology-guard.k9.ncl
similarity index 100%
rename from .machine_readable/svc/k9/methodology-guard.k9.ncl
rename to .machine_readable/svc/self-validating/methodology-guard.k9.ncl
diff --git a/.machine_readable/svc/k9/template-hunt.k9.ncl b/.machine_readable/svc/self-validating/template-hunt.k9.ncl
similarity index 100%
rename from .machine_readable/svc/k9/template-hunt.k9.ncl
rename to .machine_readable/svc/self-validating/template-hunt.k9.ncl
diff --git a/.machine_readable/svc/k9/template-kennel.k9.ncl b/.machine_readable/svc/self-validating/template-kennel.k9.ncl
similarity index 100%
rename from .machine_readable/svc/k9/template-kennel.k9.ncl
rename to .machine_readable/svc/self-validating/template-kennel.k9.ncl
diff --git a/.machine_readable/svc/k9/template-yard.k9.ncl b/.machine_readable/svc/self-validating/template-yard.k9.ncl
similarity index 100%
rename from .machine_readable/svc/k9/template-yard.k9.ncl
rename to .machine_readable/svc/self-validating/template-yard.k9.ncl
diff --git a/AUDIT.adoc b/AUDIT.adoc
index cd5669d..0f4f5ac 100644
--- a/AUDIT.adoc
+++ b/AUDIT.adoc
@@ -1,6 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
-// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
-
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Audit Gate
 Codex
 v1.1, 2026-04-07
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8109476..66fa7a0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+<!--
+SPDX-License-Identifier: MPL-2.0
+Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+-->
 # Changelog
 
 All notable changes to this project will be documented in this file.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 1d8caa1..8779679 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,4 +1,7 @@
-<!-- SPDX-License-Identifier: MPL-2.0 -->
+<!--
+SPDX-License-Identifier: MPL-2.0
+Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+-->
 # Contributing
 
 1. Fork the repository
diff --git a/EXPLAINME.adoc b/EXPLAINME.adoc
index cff5314..a7c01d0 100644
--- a/EXPLAINME.adoc
+++ b/EXPLAINME.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = RSR Template Repo - Explainme
 :toc:
 :icons: font
diff --git a/LICENSE b/LICENSE
index 570135f..d0a1fa1 100644
--- a/LICENSE
+++ b/LICENSE
@@ -371,4 +371,3 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice
 
   This Source Code Form is "Incompatible With Secondary Licenses", as
   defined by the Mozilla Public License, v. 2.0.
-
diff --git a/PROOF-NEEDS.adoc b/PROOF-NEEDS.adoc
index 504e23d..ffcf302 100644
--- a/PROOF-NEEDS.adoc
+++ b/PROOF-NEEDS.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // Template: rsr-template-repo/PROOF-NEEDS.adoc
 // Authoritative master list: ~/Desktop/PROOF-REQUIREMENTS-MASTER.adoc
 = Proof Requirements — LLM_GRACE
diff --git a/PROOF-STATUS.adoc b/PROOF-STATUS.adoc
index fe757fa..bcd2ded 100644
--- a/PROOF-STATUS.adoc
+++ b/PROOF-STATUS.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // Template: rsr-template-repo/PROOF-STATUS.adoc
 // Tracks proof completion. Requirements defined in PROOF-NEEDS.adoc
 = Proof Status — LLM_GRACE
diff --git a/READINESS.adoc b/READINESS.adoc
index 591dfcc..34acbef 100644
--- a/READINESS.adoc
+++ b/READINESS.adoc
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
-// Copyright (c) 2026 Jonathan Jewell <j.d.a.jewell@open.ac.uk>
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = llm-grace Component Readiness Assessment
 
 *Standard:* link:https://github.com/hyperpolymath/standards/tree/main/component-readiness-grades[Component Readiness Grades (CRG) v2.0 STRICT] +
diff --git a/SECURITY.md b/SECURITY.md
index ff9b45b..de2200f 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -1,4 +1,7 @@
-<!-- SPDX-License-Identifier: MPL-2.0 -->
+<!--
+SPDX-License-Identifier: MPL-2.0
+Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+-->
 # Security Policy
 
 ## Reporting a Vulnerability
diff --git a/SKELETON.adoc b/SKELETON.adoc
index 951fabc..7e0a5f9 100644
--- a/SKELETON.adoc
+++ b/SKELETON.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = RSR Skeleton: Generator-Derived
 
 The RSR *required-files set* in this repository is **not hand-maintained**.
diff --git a/TEST-NEEDS.adoc b/TEST-NEEDS.adoc
index 7c86e34..bcbbb11 100644
--- a/TEST-NEEDS.adoc
+++ b/TEST-NEEDS.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = TEST-NEEDS: rsr-template-repo
 
 == CRG Grade: C — ACHIEVED 2026-04-04
diff --git a/TOPOLOGY.adoc b/TOPOLOGY.adoc
index 4b67127..e1f3ee2 100644
--- a/TOPOLOGY.adoc
+++ b/TOPOLOGY.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // Last updated: 2026-04-04
 = Architecture Topology
 
diff --git a/container/README.adoc b/container/README.adoc
index fb7184e..726bc2c 100644
--- a/container/README.adoc
+++ b/container/README.adoc
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
-// Copyright (c) 2026 Jonathan Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = llm-grace Container Templates
 :toc: left
 :toclevels: 3
diff --git a/docs/QUICKSTART.adoc b/docs/QUICKSTART.adoc
index b20b3d0..013bf34 100644
--- a/docs/QUICKSTART.adoc
+++ b/docs/QUICKSTART.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Quickstart
 :toc: preamble
 
diff --git a/docs/README.adoc b/docs/README.adoc
index df45be7..adf6a02 100644
--- a/docs/README.adoc
+++ b/docs/README.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Documentation Layout
 
 Primary tracks:
diff --git a/docs/RSR_OUTLINE.adoc b/docs/RSR_OUTLINE.adoc
index c66a55e..e1491ff 100644
--- a/docs/RSR_OUTLINE.adoc
+++ b/docs/RSR_OUTLINE.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = RSR Template Repository
 
 image:[Palimpsest-MPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"] image:[Palimpsest,link="https://github.com/hyperpolymath/palimpsest-license"]
diff --git a/docs/STATE-VISUALIZER.adoc b/docs/STATE-VISUALIZER.adoc
index 422fcd5..77c0248 100644
--- a/docs/STATE-VISUALIZER.adoc
+++ b/docs/STATE-VISUALIZER.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Project State Visualizer
 [source]
 ----
diff --git a/docs/architecture/THREAT-MODEL.adoc b/docs/architecture/THREAT-MODEL.adoc
index 06618d8..bf4a42f 100644
--- a/docs/architecture/THREAT-MODEL.adoc
+++ b/docs/architecture/THREAT-MODEL.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Threat Model
 <!-- SPDX-License-Identifier: MPL-2.0 -->
 <!-- Copyright (c) 2026 Jonathan Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk> -->
diff --git a/docs/architecture/TOPOLOGY.adoc b/docs/architecture/TOPOLOGY.adoc
index f9c1779..1319ad6 100644
--- a/docs/architecture/TOPOLOGY.adoc
+++ b/docs/architecture/TOPOLOGY.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // Last updated: 2026-04-04
 = Architecture Topology
 
diff --git a/docs/attribution/CITATIONS.adoc b/docs/attribution/CITATIONS.adoc
index 4a68b63..f3e2cd9 100644
--- a/docs/attribution/CITATIONS.adoc
+++ b/docs/attribution/CITATIONS.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = llm-grace - Citation Guide
 :toc:
 
diff --git a/docs/attribution/CODEOWNERS.adoc b/docs/attribution/CODEOWNERS.adoc
index 3714055..668df01 100644
--- a/docs/attribution/CODEOWNERS.adoc
+++ b/docs/attribution/CODEOWNERS.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Code Ownership
 :icons: font
 
diff --git a/docs/attribution/MAINTAINERS.adoc b/docs/attribution/MAINTAINERS.adoc
index befd196..02eb791 100644
--- a/docs/attribution/MAINTAINERS.adoc
+++ b/docs/attribution/MAINTAINERS.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Maintainers
 :toc: preamble
 
diff --git a/docs/attribution/README.adoc b/docs/attribution/README.adoc
index b095612..2e50721 100644
--- a/docs/attribution/README.adoc
+++ b/docs/attribution/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = attribution Unit
diff --git a/docs/decisions/0000-template.adoc b/docs/decisions/0000-template.adoc
index 5ca9927..f0306c6 100644
--- a/docs/decisions/0000-template.adoc
+++ b/docs/decisions/0000-template.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Architecture Decision Record: 0000-template
 <!-- SPDX-License-Identifier: MPL-2.0 -->
 <!-- Copyright (c) 2026 Jonathan Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk> -->
diff --git a/docs/decisions/0001-adopt-rsr-standard.adoc b/docs/decisions/0001-adopt-rsr-standard.adoc
index d051f54..3664881 100644
--- a/docs/decisions/0001-adopt-rsr-standard.adoc
+++ b/docs/decisions/0001-adopt-rsr-standard.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Architecture Decision Record: 0001-adopt-rsr-standard
 <!-- SPDX-License-Identifier: MPL-2.0 -->
 <!-- Copyright (c) 2026 Jonathan Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk> -->
diff --git a/docs/decisions/0002-estate-tech-debt-compounding-fixes.adoc b/docs/decisions/0002-estate-tech-debt-compounding-fixes.adoc
index 41f6cf4..423674d 100644
--- a/docs/decisions/0002-estate-tech-debt-compounding-fixes.adoc
+++ b/docs/decisions/0002-estate-tech-debt-compounding-fixes.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Architecture Decision Record: 0002-estate-tech-debt-compounding-fixes
 <!-- SPDX-License-Identifier: MPL-2.0 -->
 <!-- Copyright (c) 2026 Jonathan Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk> -->
diff --git a/docs/decisions/0003-graceful-degradation-architecture.adoc b/docs/decisions/0003-graceful-degradation-architecture.adoc
index f7aac66..0bf94a6 100644
--- a/docs/decisions/0003-graceful-degradation-architecture.adoc
+++ b/docs/decisions/0003-graceful-degradation-architecture.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // SPDX-FileCopyrightText: 2026 Jonathan Jewell (hyperpolymath)
 
 = Graceful Degradation for Concurrent Claude Sessions — Design Decisions
diff --git a/docs/decisions/0004-attention-decay-vs-persist.adoc b/docs/decisions/0004-attention-decay-vs-persist.adoc
index f660e7c..371c0bf 100644
--- a/docs/decisions/0004-attention-decay-vs-persist.adoc
+++ b/docs/decisions/0004-attention-decay-vs-persist.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // SPDX-FileCopyrightText: 2026 Jonathan Jewell (hyperpolymath)
 = ADR-0004: Attention model — decay vs. persist
 :status: ACCEPTED
diff --git a/docs/decisions/0005-licensing-mpl-now-pmpl-overlay-later.adoc b/docs/decisions/0005-licensing-mpl-now-pmpl-overlay-later.adoc
index 41cb0ba..aec6ef3 100644
--- a/docs/decisions/0005-licensing-mpl-now-pmpl-overlay-later.adoc
+++ b/docs/decisions/0005-licensing-mpl-now-pmpl-overlay-later.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // SPDX-FileCopyrightText: 2026 Jonathan Jewell (hyperpolymath)
 = ADR-0005: llm-grace is a deliberate MPL-2.0 exception
 :status: ACCEPTED
diff --git a/docs/decisions/README.adoc b/docs/decisions/README.adoc
index fa7abbb..dd687e4 100644
--- a/docs/decisions/README.adoc
+++ b/docs/decisions/README.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // SPDX-FileCopyrightText: 2026 Jonathan Jewell (hyperpolymath)
 = Architecture Decision Records
 
diff --git a/docs/developer/ABI-FFI-README.adoc b/docs/developer/ABI-FFI-README.adoc
index 98d331f..de6e062 100644
--- a/docs/developer/ABI-FFI-README.adoc
+++ b/docs/developer/ABI-FFI-README.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = ABI/FFI Standards
 {{~ Aditionally delete this line and fill out the template below ~}}
 
diff --git a/docs/developer/README.adoc b/docs/developer/README.adoc
index 1d00529..2b328b4 100644
--- a/docs/developer/README.adoc
+++ b/docs/developer/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = developer Unit
diff --git a/docs/governance/CRG-AUDIT-TEMPLATE.adoc b/docs/governance/CRG-AUDIT-TEMPLATE.adoc
index 8be6f1c..d81b64f 100644
--- a/docs/governance/CRG-AUDIT-TEMPLATE.adoc
+++ b/docs/governance/CRG-AUDIT-TEMPLATE.adoc
@@ -1,6 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
-// Copyright (c) 2026 Jonathan Jewell <j.d.a.jewell@open.ac.uk>
-
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = llm-grace — CRG Audit (2026-05-18)
 Jonathan Jewell
 2026-05-18
diff --git a/docs/governance/CRG-CRITERIA.adoc b/docs/governance/CRG-CRITERIA.adoc
index f8264e6..926df5a 100644
--- a/docs/governance/CRG-CRITERIA.adoc
+++ b/docs/governance/CRG-CRITERIA.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Component Readiness Grades (CRG) Criteria
 :toc: preamble
 :icons: font
diff --git a/docs/governance/MAINTENANCE-CHECKLIST.adoc b/docs/governance/MAINTENANCE-CHECKLIST.adoc
index 1160797..0b27a19 100644
--- a/docs/governance/MAINTENANCE-CHECKLIST.adoc
+++ b/docs/governance/MAINTENANCE-CHECKLIST.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Maintenance Checklist
 # Maintenance Checklist (Cross-Repo)
 
diff --git a/docs/governance/README.adoc b/docs/governance/README.adoc
index 114ee94..48cac0d 100644
--- a/docs/governance/README.adoc
+++ b/docs/governance/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Governance Pillar (TSDM)
diff --git a/docs/governance/SOFTWARE-DEVELOPMENT-APPROACH.adoc b/docs/governance/SOFTWARE-DEVELOPMENT-APPROACH.adoc
index e8805c6..2bfa0ff 100644
--- a/docs/governance/SOFTWARE-DEVELOPMENT-APPROACH.adoc
+++ b/docs/governance/SOFTWARE-DEVELOPMENT-APPROACH.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Software Development Approach (General)
 :toc: left
 :toclevels: 2
diff --git a/docs/governance/TEMPLATE-STANDARDS-AUDIT.adoc b/docs/governance/TEMPLATE-STANDARDS-AUDIT.adoc
index 4fed22f..b316a8a 100644
--- a/docs/governance/TEMPLATE-STANDARDS-AUDIT.adoc
+++ b/docs/governance/TEMPLATE-STANDARDS-AUDIT.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Template Standards Audit
 Codex
 v1.0, 2026-04-07
diff --git a/docs/governance/TSDM.adoc b/docs/governance/TSDM.adoc
index cbd582c..6bf4ee8 100644
--- a/docs/governance/TSDM.adoc
+++ b/docs/governance/TSDM.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Triaxial Software Development Methodology (TSDM)
 :toc: preamble
 :icons: font
diff --git a/docs/governance/audit/README.adoc b/docs/governance/audit/README.adoc
index fac3740..02aff13 100644
--- a/docs/governance/audit/README.adoc
+++ b/docs/governance/audit/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Audit Axis
diff --git a/docs/governance/audit/compliance/README.adoc b/docs/governance/audit/compliance/README.adoc
index 876954f..9948dbc 100644
--- a/docs/governance/audit/compliance/README.adoc
+++ b/docs/governance/audit/compliance/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Compliance Unit
diff --git a/docs/governance/audit/effects/README.adoc b/docs/governance/audit/effects/README.adoc
index 3634799..e5620ee 100644
--- a/docs/governance/audit/effects/README.adoc
+++ b/docs/governance/audit/effects/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Effects Unit
diff --git a/docs/governance/audit/systems/README.adoc b/docs/governance/audit/systems/README.adoc
index 8d179b4..00a67de 100644
--- a/docs/governance/audit/systems/README.adoc
+++ b/docs/governance/audit/systems/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Systems Unit
diff --git a/docs/governance/maintenance/README.adoc b/docs/governance/maintenance/README.adoc
index 0ed2f1b..7083a83 100644
--- a/docs/governance/maintenance/README.adoc
+++ b/docs/governance/maintenance/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Maintenance Axis
diff --git a/docs/governance/maintenance/adaptive/README.adoc b/docs/governance/maintenance/adaptive/README.adoc
index 7b60992..72d0381 100644
--- a/docs/governance/maintenance/adaptive/README.adoc
+++ b/docs/governance/maintenance/adaptive/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Adaptive Unit
diff --git a/docs/governance/maintenance/corrective/README.adoc b/docs/governance/maintenance/corrective/README.adoc
index ed904a8..9a0ed5d 100644
--- a/docs/governance/maintenance/corrective/README.adoc
+++ b/docs/governance/maintenance/corrective/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Corrective Unit
diff --git a/docs/governance/maintenance/perfective/README.adoc b/docs/governance/maintenance/perfective/README.adoc
index 8759d74..12e3d14 100644
--- a/docs/governance/maintenance/perfective/README.adoc
+++ b/docs/governance/maintenance/perfective/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Perfective Unit
diff --git a/docs/governance/planning/README.adoc b/docs/governance/planning/README.adoc
index 62aa375..2694fe9 100644
--- a/docs/governance/planning/README.adoc
+++ b/docs/governance/planning/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Planning Axis
diff --git a/docs/governance/planning/could/README.adoc b/docs/governance/planning/could/README.adoc
index ad5a6b8..acc41ce 100644
--- a/docs/governance/planning/could/README.adoc
+++ b/docs/governance/planning/could/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Could Unit
diff --git a/docs/governance/planning/must/README.adoc b/docs/governance/planning/must/README.adoc
index 47eb46d..5759550 100644
--- a/docs/governance/planning/must/README.adoc
+++ b/docs/governance/planning/must/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Must Unit
diff --git a/docs/governance/planning/should/README.adoc b/docs/governance/planning/should/README.adoc
index 605489c..a00f585 100644
--- a/docs/governance/planning/should/README.adoc
+++ b/docs/governance/planning/should/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Should Unit
diff --git a/docs/onboarding/QUICKSTART-DEV.adoc b/docs/onboarding/QUICKSTART-DEV.adoc
index ecac063..2742204 100644
--- a/docs/onboarding/QUICKSTART-DEV.adoc
+++ b/docs/onboarding/QUICKSTART-DEV.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // Template: QUICKSTART-DEV.adoc — clone → build → test → PR
 // Replace rsr-template-repo, zig build, zig build test, Zig (core), shell (Claude Code hook adapter), LMDB with actuals
 = rsr-template-repo — Quick Start for Developers
diff --git a/docs/onboarding/QUICKSTART-MAINTAINER.adoc b/docs/onboarding/QUICKSTART-MAINTAINER.adoc
index bd8a0fd..fba8bea 100644
--- a/docs/onboarding/QUICKSTART-MAINTAINER.adoc
+++ b/docs/onboarding/QUICKSTART-MAINTAINER.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // Template: QUICKSTART-MAINTAINER.adoc — packaging, deploying, and maintaining
 // Replace rsr-template-repo, llm-grace, {{DEPS}} with actuals
 = rsr-template-repo — Quick Start for Platform Maintainers
diff --git a/docs/onboarding/QUICKSTART-USER.adoc b/docs/onboarding/QUICKSTART-USER.adoc
index c85eabe..4992e32 100644
--- a/docs/onboarding/QUICKSTART-USER.adoc
+++ b/docs/onboarding/QUICKSTART-USER.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // Template: QUICKSTART-USER.adoc — 5-minute path to working software
 // Replace rsr-template-repo, Rsr Template Repo — See README.adoc for details., just run, Rsr Template Repo started successfully. with actuals
 = rsr-template-repo — Quick Start for Users
diff --git a/docs/practice/AI-CONVENTIONS.adoc b/docs/practice/AI-CONVENTIONS.adoc
index 521d231..913d77f 100644
--- a/docs/practice/AI-CONVENTIONS.adoc
+++ b/docs/practice/AI-CONVENTIONS.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = AI Conventions
 <!-- SPDX-License-Identifier: MPL-2.0 -->
 <!-- Copyright (c) 2026 Jonathan Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk> -->
diff --git a/docs/practice/README.adoc b/docs/practice/README.adoc
index ae3326b..caceb5c 100644
--- a/docs/practice/README.adoc
+++ b/docs/practice/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = practice Unit
diff --git a/docs/practice/STATE-VISUALIZER-GUIDE.adoc b/docs/practice/STATE-VISUALIZER-GUIDE.adoc
index 279e431..8140b39 100644
--- a/docs/practice/STATE-VISUALIZER-GUIDE.adoc
+++ b/docs/practice/STATE-VISUALIZER-GUIDE.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = TOPOLOGY.md — Generation Guide
 Jonathan Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
 :toc:
diff --git a/docs/practice/ci-cost-reduction.adoc b/docs/practice/ci-cost-reduction.adoc
index 1aa8ce2..45181aa 100644
--- a/docs/practice/ci-cost-reduction.adoc
+++ b/docs/practice/ci-cost-reduction.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // (MPL-2.0 is automatic legal fallback until PMPL is formally recognised)
 = CI Cost Reduction — RSR Estate Spec
 :toc: left
diff --git a/docs/proposals/root-cleanup.adoc b/docs/proposals/root-cleanup.adoc
index 6d4b275..a1abaad 100644
--- a/docs/proposals/root-cleanup.adoc
+++ b/docs/proposals/root-cleanup.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Root Cleanup Proposal — Reconcile Template With Its Own Audit
 :toc:
 :toclevels: 3
diff --git a/docs/reports/README.adoc b/docs/reports/README.adoc
index 0c06c31..e91d79e 100644
--- a/docs/reports/README.adoc
+++ b/docs/reports/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = reports Unit
diff --git a/docs/reports/audit/pillar-audit-2026-04-15.adoc b/docs/reports/audit/pillar-audit-2026-04-15.adoc
index 186a9dd..c62d4bd 100644
--- a/docs/reports/audit/pillar-audit-2026-04-15.adoc
+++ b/docs/reports/audit/pillar-audit-2026-04-15.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Gemini Audit Report (M2: Pillar Repo Audits)
 :date: 2026-04-15
 
diff --git a/docs/reports/compliance/README.adoc b/docs/reports/compliance/README.adoc
index c38c66a..1f6b885 100644
--- a/docs/reports/compliance/README.adoc
+++ b/docs/reports/compliance/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Compliance Reports
diff --git a/docs/reports/maintenance/README.adoc b/docs/reports/maintenance/README.adoc
index f13abf7..82f845e 100644
--- a/docs/reports/maintenance/README.adoc
+++ b/docs/reports/maintenance/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Maintenance Reports
diff --git a/docs/reports/performance/README.adoc b/docs/reports/performance/README.adoc
index 037767d..6473ed3 100644
--- a/docs/reports/performance/README.adoc
+++ b/docs/reports/performance/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Performance Reports
diff --git a/docs/reports/quality/README.adoc b/docs/reports/quality/README.adoc
index d1be848..dbdb3ba 100644
--- a/docs/reports/quality/README.adoc
+++ b/docs/reports/quality/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Quality Reports
diff --git a/docs/reports/security/README.adoc b/docs/reports/security/README.adoc
index 9a78a8b..76656cc 100644
--- a/docs/reports/security/README.adoc
+++ b/docs/reports/security/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Security Reports
diff --git a/docs/standards/README.adoc b/docs/standards/README.adoc
index 34a94c4..41f7a31 100644
--- a/docs/standards/README.adoc
+++ b/docs/standards/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Standards Unit
diff --git a/docs/status/PROOF-NEEDS.adoc b/docs/status/PROOF-NEEDS.adoc
index 3ddce0e..24bde72 100644
--- a/docs/status/PROOF-NEEDS.adoc
+++ b/docs/status/PROOF-NEEDS.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // Template: rsr-template-repo/docs/status/PROOF-NEEDS.adoc
 // Authoritative master list: ~/Desktop/PROOF-REQUIREMENTS-MASTER.adoc
 = Proof Requirements — LLM_GRACE
diff --git a/docs/status/PROOF-STATUS.adoc b/docs/status/PROOF-STATUS.adoc
index a830ece..a91e018 100644
--- a/docs/status/PROOF-STATUS.adoc
+++ b/docs/status/PROOF-STATUS.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // Template: rsr-template-repo/docs/status/PROOF-STATUS.adoc
 // Tracks proof completion. Requirements defined in PROOF-NEEDS.adoc
 = Proof Status — LLM_GRACE
diff --git a/docs/status/READINESS.adoc b/docs/status/READINESS.adoc
index 2425d06..08fabf7 100644
--- a/docs/status/READINESS.adoc
+++ b/docs/status/READINESS.adoc
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
-// Copyright (c) 2026 Jonathan Jewell <j.d.a.jewell@open.ac.uk>
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = llm-grace Component Readiness Assessment
 
 *Standard:* link:https://github.com/hyperpolymath/standards/tree/main/component-readiness-grades[Component Readiness Grades (CRG) v2.0 STRICT] +
diff --git a/docs/status/ROADMAP.adoc b/docs/status/ROADMAP.adoc
index 3648ef1..128ed39 100644
--- a/docs/status/ROADMAP.adoc
+++ b/docs/status/ROADMAP.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = YOUR Template Repo Roadmap
 
 == Current Status
diff --git a/docs/status/TEST-NEEDS.adoc b/docs/status/TEST-NEEDS.adoc
index aa58a9d..dc1a47f 100644
--- a/docs/status/TEST-NEEDS.adoc
+++ b/docs/status/TEST-NEEDS.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = TEST-NEEDS: rsr-template-repo
 
 == CRG Grade: C — ACHIEVED 2026-04-04
diff --git a/docs/templates/contractiles/README.adoc b/docs/templates/contractiles/README.adoc
index 121da7a..c544de6 100644
--- a/docs/templates/contractiles/README.adoc
+++ b/docs/templates/contractiles/README.adoc
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Contractile Templates
 
 Blank templates for projects that want to replace the hyperpolymath
diff --git a/docs/theory/README.adoc b/docs/theory/README.adoc
index c0ddf28..b2658b1 100644
--- a/docs/theory/README.adoc
+++ b/docs/theory/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = theory Unit
diff --git a/docs/theory/computing/README.adoc b/docs/theory/computing/README.adoc
index 4d0db25..aec951f 100644
--- a/docs/theory/computing/README.adoc
+++ b/docs/theory/computing/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Computing Theory
diff --git a/docs/theory/formalisms/README.adoc b/docs/theory/formalisms/README.adoc
index 5d064c3..288a410 100644
--- a/docs/theory/formalisms/README.adoc
+++ b/docs/theory/formalisms/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Formalisms Theory
diff --git a/docs/theory/mathematics/README.adoc b/docs/theory/mathematics/README.adoc
index 356236f..c9b223d 100644
--- a/docs/theory/mathematics/README.adoc
+++ b/docs/theory/mathematics/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Mathematics Theory
diff --git a/docs/theory/ontologies/README.adoc b/docs/theory/ontologies/README.adoc
index 6d16ecf..9267ab0 100644
--- a/docs/theory/ontologies/README.adoc
+++ b/docs/theory/ontologies/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Ontologies Theory
diff --git a/docs/theory/other/README.adoc b/docs/theory/other/README.adoc
index 1861d6d..0ec8432 100644
--- a/docs/theory/other/README.adoc
+++ b/docs/theory/other/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Other Theory
diff --git a/docs/theory/socio-technical/README.adoc b/docs/theory/socio-technical/README.adoc
index 9ab4ee0..5c3c819 100644
--- a/docs/theory/socio-technical/README.adoc
+++ b/docs/theory/socio-technical/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Socio technical Theory
diff --git a/docs/whitepapers/README.adoc b/docs/whitepapers/README.adoc
index 88e83c5..1ee0309 100644
--- a/docs/whitepapers/README.adoc
+++ b/docs/whitepapers/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = whitepapers Unit
diff --git a/docs/whitepapers/academic/README.adoc b/docs/whitepapers/academic/README.adoc
index 16c3f45..d6dc7a0 100644
--- a/docs/whitepapers/academic/README.adoc
+++ b/docs/whitepapers/academic/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Academic Logic
diff --git a/docs/whitepapers/industry/README.adoc b/docs/whitepapers/industry/README.adoc
index 7bc7fcd..2f795b7 100644
--- a/docs/whitepapers/industry/README.adoc
+++ b/docs/whitepapers/industry/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Industry Logic
diff --git a/docs/whitepapers/outreach/README.adoc b/docs/whitepapers/outreach/README.adoc
index 8141463..f3ea4da 100644
--- a/docs/whitepapers/outreach/README.adoc
+++ b/docs/whitepapers/outreach/README.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Outreach & Education
 :toc: preamble
 :icons: font
diff --git a/docs/wikis/README.adoc b/docs/wikis/README.adoc
index 71b60d1..4d493b4 100644
--- a/docs/wikis/README.adoc
+++ b/docs/wikis/README.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Project Wikis
 :toc: preamble
 :icons: font
diff --git a/examples/README.adoc b/examples/README.adoc
index b9cdb48..40bc850 100644
--- a/examples/README.adoc
+++ b/examples/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = examples Pillar
diff --git a/features/README.adoc b/features/README.adoc
index 3899280..4922891 100644
--- a/features/README.adoc
+++ b/features/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Project Features
diff --git a/features/boj-server/README.adoc b/features/boj-server/README.adoc
index 0039c37..0ef0376 100644
--- a/features/boj-server/README.adoc
+++ b/features/boj-server/README.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = BoJ Server Integration
 :icons: font
 
diff --git a/features/panic-attacker/README.adoc b/features/panic-attacker/README.adoc
index 72d56a4..de0bd9b 100644
--- a/features/panic-attacker/README.adoc
+++ b/features/panic-attacker/README.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Panic Attacker Feature
 :icons: font
 
diff --git a/features/ssg/README.adoc b/features/ssg/README.adoc
index e15687b..a6ef262 100644
--- a/features/ssg/README.adoc
+++ b/features/ssg/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Ssg Feature
diff --git a/session/README.md b/session/README.md
index 70d7444..ee83d59 100644
--- a/session/README.md
+++ b/session/README.md
@@ -1,3 +1,7 @@
+<!--
+SPDX-License-Identifier: MPL-2.0
+Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+-->
 # Session Bindings (Thin Local Layer)
 
 This directory provides local integration for central session-management standards.
diff --git a/src/README.adoc b/src/README.adoc
index 5529f66..d8c8116 100644
--- a/src/README.adoc
+++ b/src/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = src Pillar
diff --git a/src/aspects/README.adoc b/src/aspects/README.adoc
index 6456f96..9b7b80f 100644
--- a/src/aspects/README.adoc
+++ b/src/aspects/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Aspects Pillar
diff --git a/src/aspects/integrity/README.adoc b/src/aspects/integrity/README.adoc
index f15d829..17a09db 100644
--- a/src/aspects/integrity/README.adoc
+++ b/src/aspects/integrity/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Integrity Aspect
diff --git a/src/aspects/observability/README.adoc b/src/aspects/observability/README.adoc
index 7852ee6..df2ca36 100644
--- a/src/aspects/observability/README.adoc
+++ b/src/aspects/observability/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Observability Aspect
diff --git a/src/aspects/security/README.adoc b/src/aspects/security/README.adoc
index 3c3536e..11ad21b 100644
--- a/src/aspects/security/README.adoc
+++ b/src/aspects/security/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Security Aspect
diff --git a/src/contracts/README.adoc b/src/contracts/README.adoc
index 9cfa209..20dd4ca 100644
--- a/src/contracts/README.adoc
+++ b/src/contracts/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Contracts Unit
diff --git a/src/definitions/README.adoc b/src/definitions/README.adoc
index 9548349..5a9912f 100644
--- a/src/definitions/README.adoc
+++ b/src/definitions/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Definitions Unit
diff --git a/src/errors/README.adoc b/src/errors/README.adoc
index 460fc1e..eff7b29 100644
--- a/src/errors/README.adoc
+++ b/src/errors/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Errors Unit
diff --git a/src/interface/Abi/Foreign.idr b/src/interface/Abi/Foreign.idr
index 3f16342..ca66b08 100644
--- a/src/interface/Abi/Foreign.idr
+++ b/src/interface/Abi/Foreign.idr
@@ -1,4 +1,5 @@
 -- SPDX-License-Identifier: MPL-2.0
+-- Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 ||| Foreign Function Interface Bridge
 |||
 ||| This module defines the raw FFI calls and their safe wrappers,
diff --git a/src/interface/Abi/Layout.idr b/src/interface/Abi/Layout.idr
index fec979d..e1f4275 100644
--- a/src/interface/Abi/Layout.idr
+++ b/src/interface/Abi/Layout.idr
@@ -1,4 +1,5 @@
 -- SPDX-License-Identifier: MPL-2.0
+-- Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 ||| ABI Layout Verification
 |||
 ||| This module provides formal proofs about memory layout, alignment,
diff --git a/src/interface/Abi/README.adoc b/src/interface/Abi/README.adoc
index 2330304..46743d7 100644
--- a/src/interface/Abi/README.adoc
+++ b/src/interface/Abi/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = abi Logic
diff --git a/src/interface/Abi/Types.idr b/src/interface/Abi/Types.idr
index 6fc4d04..9d30051 100644
--- a/src/interface/Abi/Types.idr
+++ b/src/interface/Abi/Types.idr
@@ -1,4 +1,5 @@
 -- SPDX-License-Identifier: MPL-2.0
+-- Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 ||| ABI Type Definitions Template
 |||
 ||| This module defines the Application Binary Interface (ABI) for this library.
diff --git a/src/interface/README.adoc b/src/interface/README.adoc
index 8faf0aa..727b9e7 100644
--- a/src/interface/README.adoc
+++ b/src/interface/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = interface Unit
diff --git a/src/interface/ffi/README.adoc b/src/interface/ffi/README.adoc
index 8fe57d3..b402d64 100644
--- a/src/interface/ffi/README.adoc
+++ b/src/interface/ffi/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = ffi Logic
diff --git a/src/interface/ffi/build.zig b/src/interface/ffi/build.zig
index 69a6377..2607c11 100644
--- a/src/interface/ffi/build.zig
+++ b/src/interface/ffi/build.zig
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
-// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 //
 // Template FFI Build Configuration (Zig 0.15.2+)
 // Note: This is a minimal build file that demonstrates Zig integration
diff --git a/src/interface/ffi/src/README.adoc b/src/interface/ffi/src/README.adoc
index a5c0c6d..4228438 100644
--- a/src/interface/ffi/src/README.adoc
+++ b/src/interface/ffi/src/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Src Logic
diff --git a/src/interface/ffi/src/main.zig b/src/interface/ffi/src/main.zig
index 0342520..c46b261 100644
--- a/src/interface/ffi/src/main.zig
+++ b/src/interface/ffi/src/main.zig
@@ -1,9 +1,10 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // LLM_GRACE FFI Implementation
 //
 // This module implements the C-compatible FFI declared in src/abi/Foreign.idr
 // All types and layouts must match the Idris2 ABI definitions.
 //
-// SPDX-License-Identifier: MPL-2.0
 
 const std = @import("std");
 
diff --git a/src/interface/ffi/test/README.adoc b/src/interface/ffi/test/README.adoc
index f6f38bf..cdbb47d 100644
--- a/src/interface/ffi/test/README.adoc
+++ b/src/interface/ffi/test/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Test Logic
diff --git a/src/interface/ffi/test/integration_test.zig b/src/interface/ffi/test/integration_test.zig
index 361bd05..484e156 100644
--- a/src/interface/ffi/test/integration_test.zig
+++ b/src/interface/ffi/test/integration_test.zig
@@ -1,6 +1,6 @@
-// RSR Template FFI Integration Tests
 // SPDX-License-Identifier: MPL-2.0
-// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+// RSR Template FFI Integration Tests
 //
 // These tests verify that the Zig FFI correctly implements the Idris2 ABI.
 // This is a TEMPLATE FILE — when instantiating a new project:
diff --git a/src/interface/generated/README.adoc b/src/interface/generated/README.adoc
index 3691b06..93daef2 100644
--- a/src/interface/generated/README.adoc
+++ b/src/interface/generated/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = generated Logic
diff --git a/src/interface/generated/abi/README.adoc b/src/interface/generated/abi/README.adoc
index aff61a9..0e29b69 100644
--- a/src/interface/generated/abi/README.adoc
+++ b/src/interface/generated/abi/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Abi Logic
diff --git a/src/signal/classifier.zig b/src/signal/classifier.zig
index 4e4feab..f291930 100644
--- a/src/signal/classifier.zig
+++ b/src/signal/classifier.zig
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // SPDX-FileCopyrightText: 2026 Jonathan Jewell (hyperpolymath)
 //
 // llm-grace — pure pressure-signal classifier.
diff --git a/src/signal/sampler.zig b/src/signal/sampler.zig
index ea667f7..09a2ca2 100644
--- a/src/signal/sampler.zig
+++ b/src/signal/sampler.zig
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 // SPDX-FileCopyrightText: 2026 Jonathan Jewell (hyperpolymath)
 //
 // llm-grace — /proc sampler.
diff --git a/tests/fuzz/README.adoc b/tests/fuzz/README.adoc
index 55b92f3..44ae058 100644
--- a/tests/fuzz/README.adoc
+++ b/tests/fuzz/README.adoc
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MPL-2.0
-// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Fuzz Testing
 :toc:
 
diff --git a/tools/invariant-path/README.adoc b/tools/invariant-path/README.adoc
index 009d702..57c4e3d 100644
--- a/tools/invariant-path/README.adoc
+++ b/tools/invariant-path/README.adoc
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Invariant Path Integration (RSR Template)
 
 Run Invariant Path from this repository root:
diff --git a/verification/README.adoc b/verification/README.adoc
index f07e7f3..efa7fb2 100644
--- a/verification/README.adoc
+++ b/verification/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Verification Pillar
diff --git a/verification/benchmarks/README.adoc b/verification/benchmarks/README.adoc
index 5db7648..beb83cd 100644
--- a/verification/benchmarks/README.adoc
+++ b/verification/benchmarks/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Benchmarks Unit
diff --git a/verification/coverage/README.adoc b/verification/coverage/README.adoc
index 2566956..c10a6ac 100644
--- a/verification/coverage/README.adoc
+++ b/verification/coverage/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Coverage Unit
diff --git a/verification/fuzzing/README.adoc b/verification/fuzzing/README.adoc
index edeb179..b07ea68 100644
--- a/verification/fuzzing/README.adoc
+++ b/verification/fuzzing/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Fuzzing Unit
diff --git a/verification/proofs/README.adoc b/verification/proofs/README.adoc
index 29cf7e8..520f5e9 100644
--- a/verification/proofs/README.adoc
+++ b/verification/proofs/README.adoc
@@ -1,5 +1,6 @@
-= Formal Verification Proofs
 // SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+= Formal Verification Proofs
 
 This directory contains formal proofs organised by proof assistant.
 
diff --git a/verification/proofs/idris2/ABI/Compliance.idr b/verification/proofs/idris2/ABI/Compliance.idr
index d38c0d5..b94a5db 100644
--- a/verification/proofs/idris2/ABI/Compliance.idr
+++ b/verification/proofs/idris2/ABI/Compliance.idr
@@ -1,5 +1,5 @@
 -- SPDX-License-Identifier: MPL-2.0
--- Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
+-- Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 --
 -- ABI Proof: C ABI compliance
 -- Proves that struct layouts are C ABI compliant.
diff --git a/verification/proofs/idris2/ABI/Foreign.idr b/verification/proofs/idris2/ABI/Foreign.idr
index cb98ecd..1e550dd 100644
--- a/verification/proofs/idris2/ABI/Foreign.idr
+++ b/verification/proofs/idris2/ABI/Foreign.idr
@@ -1,5 +1,5 @@
 -- SPDX-License-Identifier: MPL-2.0
--- Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
+-- Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 --
 -- ABI Proof: FFI function return type proofs
 -- Proves that all FFI functions return expected types.
diff --git a/verification/proofs/idris2/ABI/Layout.idr b/verification/proofs/idris2/ABI/Layout.idr
index f38fcca..9040a5e 100644
--- a/verification/proofs/idris2/ABI/Layout.idr
+++ b/verification/proofs/idris2/ABI/Layout.idr
@@ -1,5 +1,5 @@
 -- SPDX-License-Identifier: MPL-2.0
--- Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
+-- Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 --
 -- ABI Proof: Memory layout correctness
 -- Proves struct size, alignment, and padding properties.
diff --git a/verification/proofs/idris2/ABI/Platform.idr b/verification/proofs/idris2/ABI/Platform.idr
index 6b80d20..a8d6b94 100644
--- a/verification/proofs/idris2/ABI/Platform.idr
+++ b/verification/proofs/idris2/ABI/Platform.idr
@@ -1,5 +1,5 @@
 -- SPDX-License-Identifier: MPL-2.0
--- Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
+-- Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 --
 -- ABI Proof: Platform-specific type size proofs
 -- Proves that C type sizes are correct per platform.
diff --git a/verification/proofs/idris2/ABI/Pointers.idr b/verification/proofs/idris2/ABI/Pointers.idr
index 49efd2f..31b6c5f 100644
--- a/verification/proofs/idris2/ABI/Pointers.idr
+++ b/verification/proofs/idris2/ABI/Pointers.idr
@@ -1,5 +1,5 @@
 -- SPDX-License-Identifier: MPL-2.0
--- Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
+-- Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 --
 -- ABI Proof: Non-null pointer safety
 -- Template proof — customise for your project's pointer types.
diff --git a/verification/proofs/idris2/Types.idr b/verification/proofs/idris2/Types.idr
index 85ea9b7..cc7cce8 100644
--- a/verification/proofs/idris2/Types.idr
+++ b/verification/proofs/idris2/Types.idr
@@ -1,5 +1,5 @@
 -- SPDX-License-Identifier: MPL-2.0
--- Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
+-- Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 --
 -- Typing Proof: Core data type well-formedness
 -- Template — replace with your project's core types.
diff --git a/verification/safety_case/README.adoc b/verification/safety_case/README.adoc
index 47c8e36..ffb53bd 100644
--- a/verification/safety_case/README.adoc
+++ b/verification/safety_case/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Safety case Unit
diff --git a/verification/simulations/README.adoc b/verification/simulations/README.adoc
index 8e1b13a..42e184c 100644
--- a/verification/simulations/README.adoc
+++ b/verification/simulations/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Simulations Unit
diff --git a/verification/tests/README.adoc b/verification/tests/README.adoc
index 344bf86..3930981 100644
--- a/verification/tests/README.adoc
+++ b/verification/tests/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Tests Unit
diff --git a/verification/traceability/README.adoc b/verification/traceability/README.adoc
index ff23dd7..e6e54bc 100644
--- a/verification/traceability/README.adoc
+++ b/verification/traceability/README.adoc
@@ -1 +1,3 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
 = Traceability Unit

From 8720a10b197e4d4ff6bb8cd4521ba4a7a7438526 Mon Sep 17 00:00:00 2001
From: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com>
Date: Thu, 4 Jun 2026 18:08:26 +0100
Subject: [PATCH 5/8] chore: flatten self-validating directory structure

---
 .machine_readable/{svc => }/self-validating/README.adoc           | 0
 .../{svc => }/self-validating/examples/ci-config.k9.ncl           | 0
 .../{svc => }/self-validating/examples/project-metadata.k9.ncl    | 0
 .../{svc => }/self-validating/examples/setup-repo.k9.ncl          | 0
 .../{svc => }/self-validating/methodology-guard.k9.ncl            | 0
 .machine_readable/{svc => }/self-validating/template-hunt.k9.ncl  | 0
 .../{svc => }/self-validating/template-kennel.k9.ncl              | 0
 .machine_readable/{svc => }/self-validating/template-yard.k9.ncl  | 0
 8 files changed, 0 insertions(+), 0 deletions(-)
 rename .machine_readable/{svc => }/self-validating/README.adoc (100%)
 rename .machine_readable/{svc => }/self-validating/examples/ci-config.k9.ncl (100%)
 rename .machine_readable/{svc => }/self-validating/examples/project-metadata.k9.ncl (100%)
 rename .machine_readable/{svc => }/self-validating/examples/setup-repo.k9.ncl (100%)
 rename .machine_readable/{svc => }/self-validating/methodology-guard.k9.ncl (100%)
 rename .machine_readable/{svc => }/self-validating/template-hunt.k9.ncl (100%)
 rename .machine_readable/{svc => }/self-validating/template-kennel.k9.ncl (100%)
 rename .machine_readable/{svc => }/self-validating/template-yard.k9.ncl (100%)

diff --git a/.machine_readable/svc/self-validating/README.adoc b/.machine_readable/self-validating/README.adoc
similarity index 100%
rename from .machine_readable/svc/self-validating/README.adoc
rename to .machine_readable/self-validating/README.adoc
diff --git a/.machine_readable/svc/self-validating/examples/ci-config.k9.ncl b/.machine_readable/self-validating/examples/ci-config.k9.ncl
similarity index 100%
rename from .machine_readable/svc/self-validating/examples/ci-config.k9.ncl
rename to .machine_readable/self-validating/examples/ci-config.k9.ncl
diff --git a/.machine_readable/svc/self-validating/examples/project-metadata.k9.ncl b/.machine_readable/self-validating/examples/project-metadata.k9.ncl
similarity index 100%
rename from .machine_readable/svc/self-validating/examples/project-metadata.k9.ncl
rename to .machine_readable/self-validating/examples/project-metadata.k9.ncl
diff --git a/.machine_readable/svc/self-validating/examples/setup-repo.k9.ncl b/.machine_readable/self-validating/examples/setup-repo.k9.ncl
similarity index 100%
rename from .machine_readable/svc/self-validating/examples/setup-repo.k9.ncl
rename to .machine_readable/self-validating/examples/setup-repo.k9.ncl
diff --git a/.machine_readable/svc/self-validating/methodology-guard.k9.ncl b/.machine_readable/self-validating/methodology-guard.k9.ncl
similarity index 100%
rename from .machine_readable/svc/self-validating/methodology-guard.k9.ncl
rename to .machine_readable/self-validating/methodology-guard.k9.ncl
diff --git a/.machine_readable/svc/self-validating/template-hunt.k9.ncl b/.machine_readable/self-validating/template-hunt.k9.ncl
similarity index 100%
rename from .machine_readable/svc/self-validating/template-hunt.k9.ncl
rename to .machine_readable/self-validating/template-hunt.k9.ncl
diff --git a/.machine_readable/svc/self-validating/template-kennel.k9.ncl b/.machine_readable/self-validating/template-kennel.k9.ncl
similarity index 100%
rename from .machine_readable/svc/self-validating/template-kennel.k9.ncl
rename to .machine_readable/self-validating/template-kennel.k9.ncl
diff --git a/.machine_readable/svc/self-validating/template-yard.k9.ncl b/.machine_readable/self-validating/template-yard.k9.ncl
similarity index 100%
rename from .machine_readable/svc/self-validating/template-yard.k9.ncl
rename to .machine_readable/self-validating/template-yard.k9.ncl

From aec0e4f8dadc083deea5622b617ee497337c941c Mon Sep 17 00:00:00 2001
From: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com>
Date: Thu, 4 Jun 2026 18:55:50 +0100
Subject: [PATCH 6/8] chore: rename agent_instructions to bot_directives for
 spec alignment

---
 .machine_readable/6a2/AGENTIC.a2ml                   | 12 ++++++------
 .../README.adoc                                      |  2 +-
 .../coverage.a2ml                                    |  0
 .../{agent_instructions => bot_directives}/debt.a2ml |  0
 .../methodology.a2ml                                 |  0
 .../self-validating/methodology-guard.k9.ncl         |  4 ++--
 build/just/assess.just                               |  4 ++--
 7 files changed, 11 insertions(+), 11 deletions(-)
 rename .machine_readable/{agent_instructions => bot_directives}/README.adoc (94%)
 rename .machine_readable/{agent_instructions => bot_directives}/coverage.a2ml (100%)
 rename .machine_readable/{agent_instructions => bot_directives}/debt.a2ml (100%)
 rename .machine_readable/{agent_instructions => bot_directives}/methodology.a2ml (100%)

diff --git a/.machine_readable/6a2/AGENTIC.a2ml b/.machine_readable/6a2/AGENTIC.a2ml
index 116d877..4552d3f 100644
--- a/.machine_readable/6a2/AGENTIC.a2ml
+++ b/.machine_readable/6a2/AGENTIC.a2ml
@@ -34,18 +34,18 @@ release-claim-requires-hard-pass = true
 # METHODOLOGY (ADR-002)
 # ============================================================================
 # Detailed methodology configuration lives in:
-#   .machine_readable/agent_instructions/methodology.a2ml
-#   .machine_readable/agent_instructions/coverage.a2ml
-#   .machine_readable/agent_instructions/debt.a2ml
+#   .machine_readable/bot_directives/methodology.a2ml
+#   .machine_readable/bot_directives/coverage.a2ml
+#   .machine_readable/bot_directives/debt.a2ml
 #
 # AGENTIC.a2ml declares WHAT agents can do (permissions, gating).
-# agent_instructions/ declares HOW agents should work (methodology).
+# bot_directives/ declares HOW agents should work (methodology).
 
 [methodology]
-instructions-dir = ".machine_readable/agent_instructions/"
+instructions-dir = ".machine_readable/bot_directives/"
 default-mode = "hybrid"
 
 [automation-hooks]
-# on-enter: Read STATE.a2ml, then agent_instructions/
+# on-enter: Read STATE.a2ml, then bot_directives/
 # on-exit: Update STATE.a2ml, coverage.a2ml, and debt.a2ml with session outcomes
 # on-commit: Run just validate-rsr
diff --git a/.machine_readable/agent_instructions/README.adoc b/.machine_readable/bot_directives/README.adoc
similarity index 94%
rename from .machine_readable/agent_instructions/README.adoc
rename to .machine_readable/bot_directives/README.adoc
index e5fec01..a5315c7 100644
--- a/.machine_readable/agent_instructions/README.adoc
+++ b/.machine_readable/bot_directives/README.adoc
@@ -32,7 +32,7 @@ Methodology-aware configuration for AI agents. Read by any AI agent
 == Relationship to Other Files
 
 * `AGENTIC.a2ml` says WHAT agents can do (permissions, gating)
-* `agent_instructions/` says HOW agents should work (methodology)
+* `bot_directives/` says HOW agents should work (methodology)
 * `bot_directives/` says what the gitbot-fleet does (fleet-specific)
 * `CLAUDE.md` says how Claude specifically should work (Claude-specific)
 
diff --git a/.machine_readable/agent_instructions/coverage.a2ml b/.machine_readable/bot_directives/coverage.a2ml
similarity index 100%
rename from .machine_readable/agent_instructions/coverage.a2ml
rename to .machine_readable/bot_directives/coverage.a2ml
diff --git a/.machine_readable/agent_instructions/debt.a2ml b/.machine_readable/bot_directives/debt.a2ml
similarity index 100%
rename from .machine_readable/agent_instructions/debt.a2ml
rename to .machine_readable/bot_directives/debt.a2ml
diff --git a/.machine_readable/agent_instructions/methodology.a2ml b/.machine_readable/bot_directives/methodology.a2ml
similarity index 100%
rename from .machine_readable/agent_instructions/methodology.a2ml
rename to .machine_readable/bot_directives/methodology.a2ml
diff --git a/.machine_readable/self-validating/methodology-guard.k9.ncl b/.machine_readable/self-validating/methodology-guard.k9.ncl
index 775168a..f221bc9 100644
--- a/.machine_readable/self-validating/methodology-guard.k9.ncl
+++ b/.machine_readable/self-validating/methodology-guard.k9.ncl
@@ -3,7 +3,7 @@
 #
 # K9 Validator: Methodology Guard
 # Checks that agent work respects methodology constraints declared in
-# agent_instructions/methodology.a2ml.
+# bot_directives/methodology.a2ml.
 #
 # Usage: k9 validate methodology-guard
 
@@ -50,7 +50,7 @@ let methodology_guard = {
     coverage_updated = {
       description = "coverage.a2ml should be updated within 30 days",
       severity = "info",
-      file = ".machine_readable/agent_instructions/coverage.a2ml",
+      file = ".machine_readable/bot_directives/coverage.a2ml",
       staleness_days = 30,
     },
   },
diff --git a/build/just/assess.just b/build/just/assess.just
index b382fff..c2988a5 100644
--- a/build/just/assess.just
+++ b/build/just/assess.just
@@ -147,8 +147,8 @@ self-assess:
         echo "    ready for automated maintenance when the fleet arrives."
     fi
 
-    if [ -d ".machine_readable/agent_instructions" ]; then
-        echo "  ◆ agent_instructions/ — AI agent methodology config."
+    if [ -d ".machine_readable/bot_directives" ]; then
+        echo "  ◆ bot_directives/ — AI agent methodology config."
         echo "    Guides Claude/Gemini/etc on how to work in this repo."
         echo "    No cost to keep. Improves AI assistance quality."
     fi

From 1485614a7642a3275a645a1f8065bb0ed895ece9 Mon Sep 17 00:00:00 2001
From: Mistral Vibe <vibe@mistral.ai>
Date: Sun, 7 Jun 2026 09:03:24 +0100
Subject: [PATCH 7/8] docs: Add CODEOWNERS, MAINTAINERS, and GOVERNANCE
 documents

---
 GOVERNANCE.adoc  | 162 +++++++++++++++++++++++++++++++++++++++++++++++
 MAINTAINERS.adoc |  65 +++++++++++++++++++
 2 files changed, 227 insertions(+)
 create mode 100644 GOVERNANCE.adoc
 create mode 100644 MAINTAINERS.adoc

diff --git a/GOVERNANCE.adoc b/GOVERNANCE.adoc
new file mode 100644
index 0000000..8bbf167
--- /dev/null
+++ b/GOVERNANCE.adoc
@@ -0,0 +1,162 @@
+// SPDX-License-Identifier: MPL-2.0
+// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+= Governance Model
+:toc: preamble
+
+This document describes the governance model for this repository.
+
+== Overview
+
+This repository follows a **Sole Maintainer Governance Model**:
+
+* Single maintainer (@hyperpolymath) has full authority over the project
+* All contributions are welcome and reviewed by the maintainer
+* Decisions are made transparently through GitHub issues and discussions
+* The project adheres to the hyperpolymath estate policies where applicable
+
+== Core Principles
+
+[cols="1,2"]
+|===
+| Principle | Description
+
+| **Benevolent Dictatorship** | Maintainer has final decision authority but seeks community input
+
+| **Meritocracy** | Contributions are judged on technical merit, not contributor identity
+
+| **Transparency** | All significant decisions are documented publicly
+
+| **Consensus-Seeking** | Maintainer prefers consensus but will decide when necessary
+
+| **Open Contribution** | Anyone can contribute via fork and pull request
+
+|===
+
+== Roles and Permissions
+
+[cols="1,2,2"]
+|===
+| Role | Permissions | Assignment
+
+| **Maintainer** | Write access, merge rights, admin | @hyperpolymath
+| **Contributors** | Read access, fork, submit PRs | All GitHub users
+| **Users** | Use the software, report issues | All GitHub users
+
+|===
+
+== Decision Making Framework
+
+=== Routine Decisions
+
+* Bug fixes
+* Documentation improvements
+* Minor feature additions
+* Dependency updates
+
+**Process**: Maintainer reviews and merges PRs that meet quality standards.
+
+=== Significant Changes
+
+* New major features
+* API changes
+* Architecture modifications
+* Breaking changes
+
+**Process**:
+. Open issue describing the change
+. Discuss with community (minimum 72 hours)
+. Maintainer makes final decision
+. Document rationale in issue/PR
+
+=== Structural Decisions
+
+* Repository purpose/renaming
+* License changes
+* Ownership transfer
+* Deprecation/archival
+
+**Process**: 
+. Extended discussion (minimum 1 week)
+. Maintainer makes final decision
+. Document in CHANGELOG and governance docs
+
+== Contribution Lifecycle
+
+[cols="1,2"]
+|===
+| Stage | Process
+
+| **Ideation** | Open issue, discuss feasibility
+
+| **Development** | Fork, implement, test thoroughly
+
+| **Review** | Submit PR, maintainer reviews within 7 days
+
+| **Merge** | Maintainer merges or requests changes
+
+| **Release** | Maintainer publishes according to project conventions
+
+|===
+
+== Conflict Resolution
+
+In case of disagreements:
+
+. Discuss in the relevant GitHub issue or PR
+. Provide technical justification for positions
+. Maintainer mediates and makes final decision
+. Decision is documented and can be revisited later
+
+== Project Policies
+
+This repository adheres to hyperpolymath estate-wide policies:
+
+* **License**: MPL-2.0 for code, CC-BY-SA-4.0 for prose (per standards/LICENCE-POLICY.adoc)
+* **Code of Conduct**: Follows hyperpolymath CODE_OF_CONDUCT.md
+* **Security**: Follows hyperpolymath SECURITY.md
+* **Contributing**: Follows hyperpolymath CONTRIBUTING.adoc conventions
+
+== Repository-Specific Conventions
+
+[cols="1,2"]
+|===
+| Convention | Description
+
+| **Signing** | All commits must be signed (SSH or GPG)
+
+| **SPDX Headers** | All source files must have SPDX license identifiers
+
+| **Contractiles** | Mustfile, Trustfile, Intendfile, Adjustfile in root
+
+| **Machine Readable** | META.a2ml in .machine_readable/6a2/
+
+| **CI/CD** | GitHub Actions workflows in .github/workflows/
+
+|===
+
+== Governance Evolution
+
+As the project grows, this governance model may evolve:
+
+* **Adding Co-Maintainers**: When contribution volume warrants it
+* **Forming a Team**: For complex multi-maintainer projects
+* **Adopting TPCF**: For large, multi-repository projects (see rhodium-standard-repositories)
+
+Changes to this document require the same process as Significant Changes above.
+
+== See Also
+
+* link:MAINTAINERS.adoc[Maintainers]
+* link:CODE_OF_CONDUCT.md[Code of Conduct]
+* link:CONTRIBUTING.adoc[Contributing Guide]
+* link:https://github.com/hyperpolymath/standards/blob/main/LICENCE-POLICY.adoc[Estate License Policy]
+* link:https://github.com/hyperpolymath/standards[rhodium-standard-repositories (TPCF)]
+
+== Changelog
+
+[cols="1,1,1"]
+|===
+| Date | Change | By
+
+| 2026-06-07 | Initial governance model established | @hyperpolymath
+|===
diff --git a/MAINTAINERS.adoc b/MAINTAINERS.adoc
new file mode 100644
index 0000000..9910dd8
--- /dev/null
+++ b/MAINTAINERS.adoc
@@ -0,0 +1,65 @@
+// SPDX-License-Identifier: MPL-2.0
+// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+= Maintainers
+:toc: preamble
+
+== Current Maintainers
+
+[cols="2,3,2",options="header"]
+|===
+| Name | Role | Contact
+
+| Jonathan D.A. Jewell | Sole Maintainer | https://github.com/hyperpolymath[@hyperpolymath]
+|===
+
+== Maintainer Responsibilities
+
+As the sole maintainer, all responsibilities apply to @hyperpolymath:
+
+* Reviewing and merging pull requests
+* Triaging issues and feature requests
+* Ensuring code quality and security standards
+* Managing releases and versioning
+* Upholding the project's Code of Conduct
+* Maintaining documentation and examples
+* Responding to security vulnerabilities
+
+== Contribution Process
+
+This is a sole-maintainer project. All contributions are welcome via:
+
+1. **Issues**: Report bugs, request features, ask questions
+2. **Pull Requests**: Submit improvements for review
+3. **Discussions**: Engage in community discussions
+
+All contributions will be reviewed by the maintainer.
+
+== Decision Making
+
+* Routine decisions (bug fixes, minor improvements): Made by maintainer
+* Significant changes: Discussed in issues before implementation
+* Breaking changes: Announced in advance with migration path
+
+== Becoming a Maintainer
+
+This project currently has a single maintainer. If you're interested in becoming a co-maintainer:
+
+1. Demonstrate consistent, high-quality contributions
+2. Show understanding of project goals and standards
+3. Participate constructively in discussions
+4. Express interest to the current maintainer
+
+Co-maintainers may be added at the discretion of the current maintainer.
+
+== Contact
+
+For questions about project governance:
+
+* Open a GitHub issue in this repository
+* Contact: https://github.com/hyperpolymath
+
+== See Also
+
+* link:GOVERNANCE.adoc[Governance Model]
+* link:CODE_OF_CONDUCT.md[Code of Conduct]
+* link:CONTRIBUTING.adoc[Contributing Guide]

From 8c77b2144981c83753b5873220968bb6b89549a4 Mon Sep 17 00:00:00 2001
From: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com>
Date: Sun, 7 Jun 2026 23:19:26 +0100
Subject: [PATCH 8/8] Apply estate standardization: governance docs,
 contractiles, CI/CD cleanup

---
 .machine_readable/ADJUST.contractile          | 126 ---
 .machine_readable/INTENT.contractile          |  72 --
 .machine_readable/MUST.contractile            |  90 --
 .machine_readable/TRUST.contractile           |  80 --
 .../contractiles/Adjustfile.a2ml              |  72 ++
 .../contractiles/Intentfile.a2ml              |  99 +++
 .machine_readable/contractiles/Justfile       | 783 ++++++++++++++++++
 .machine_readable/contractiles/Mustfile.a2ml  | 102 +++
 .machine_readable/contractiles/Trustfile.a2ml |  88 ++
 .../contractiles/bust/Bustfile.a2ml           |  28 -
 .machine_readable/contractiles/bust/bust.ncl  |  66 --
 .../contractiles/dust/Dustfile.a2ml           |  44 -
 .../contractiles/must/Mustfile.a2ml           |  64 --
 .../contractiles/trust/Trustfile.a2ml         |  74 --
 build/flake.lock                              |  61 --
 build/flake.nix                               | 170 ----
 manifest.scm                                  |  24 +
 17 files changed, 1168 insertions(+), 875 deletions(-)
 delete mode 100644 .machine_readable/ADJUST.contractile
 delete mode 100644 .machine_readable/INTENT.contractile
 delete mode 100644 .machine_readable/MUST.contractile
 delete mode 100644 .machine_readable/TRUST.contractile
 create mode 100644 .machine_readable/contractiles/Adjustfile.a2ml
 create mode 100644 .machine_readable/contractiles/Intentfile.a2ml
 create mode 100644 .machine_readable/contractiles/Justfile
 create mode 100644 .machine_readable/contractiles/Mustfile.a2ml
 create mode 100644 .machine_readable/contractiles/Trustfile.a2ml
 delete mode 100644 .machine_readable/contractiles/bust/Bustfile.a2ml
 delete mode 100644 .machine_readable/contractiles/bust/bust.ncl
 delete mode 100644 .machine_readable/contractiles/dust/Dustfile.a2ml
 delete mode 100644 .machine_readable/contractiles/must/Mustfile.a2ml
 delete mode 100644 .machine_readable/contractiles/trust/Trustfile.a2ml
 delete mode 100644 build/flake.lock
 delete mode 100644 build/flake.nix
 create mode 100644 manifest.scm

diff --git a/.machine_readable/ADJUST.contractile b/.machine_readable/ADJUST.contractile
deleted file mode 100644
index d9c798f..0000000
--- a/.machine_readable/ADJUST.contractile
+++ /dev/null
@@ -1,126 +0,0 @@
-; SPDX-License-Identifier: MPL-2.0
-; ADJUST.contractile — Accessibility invariants for rsr-template-repo
-; "ADJUST" = Accessibility & Digital Justice for Universal Software & Technology
-;
-; Part of the contractile family: MUST, TRUST, DUST, INTENT, ADJUST
-; This file is machine-readable. LLM/SLM agents MUST NOT violate these invariants.
-
-; ── Definitions ──────────────────────────────────────────────────
-;
-; ADJUST (noun/verb)
-;   The accessibility contractile. Defines how software must adapt to serve
-;   all users regardless of ability, device, or context. Named for the verb
-;   "adjust" — to make suitable, to adapt, to accommodate — which is the
-;   core action of accessible design.
-;
-; Scope:
-;   ADJUST governs all user-facing interfaces: GUI, TUI, CLI, web, mobile,
-;   documentation, error messages, and installation flows. It applies to
-;   both human users and assistive technologies (screen readers, switch
-;   devices, braille displays, voice control).
-;
-; Relationship to other contractiles:
-;   - MUST: ADJUST invariants are a subset of MUST — violating ADJUST
-;     is a MUST violation. ADJUST exists separately because accessibility
-;     rules are numerous enough to warrant their own file, and because
-;     LLMs frequently forget accessibility unless explicitly reminded.
-;   - TRUST: ADJUST does not affect trust levels. All trust tiers must
-;     respect ADJUST invariants equally.
-;   - DUST: Deprecating a feature does not exempt it from ADJUST until
-;     it is fully removed. Deprecated UI must remain accessible.
-;   - INTENT: ADJUST supports the anti-purpose "this software is NOT
-;     only for able-bodied users with modern hardware."
-;
-; Standard: WCAG 2.2 Level AA (minimum)
-;   https://www.w3.org/WAI/WCAG22/quickref/?levels=aaa
-;
-; Why a separate file:
-;   Experience shows LLMs and developers alike treat accessibility as an
-;   afterthought. By placing invariants in a contractile that is loaded
-;   at session start, we make it structurally impossible to forget.
-;
-; ── End Definitions ──────────────────────────────────────────────
-
-(adjust-contractile
-  (version "1.0.0")
-  (full-name "Accessibility & Digital Justice for Universal Software & Technology")
-  (standard "WCAG-2.2-AA")
-  (repo "rsr-template-repo")
-
-  (invariants
-    ; ── Visual ──
-    (adjust "colour-contrast-ratio >= 4.5:1 for normal text")
-    (adjust "colour-contrast-ratio >= 3:1 for large text (18pt+ or 14pt+ bold)")
-    (adjust "no information conveyed by colour alone")
-    (adjust "no flashing or strobing content (3 flashes/second max)")
-    (adjust "text resizable to 200% without loss of content or function")
-    (adjust "focus indicators visible on all interactive elements")
-
-    ; ── Keyboard ──
-    (adjust "all interactive elements reachable via keyboard (Tab/Shift+Tab)")
-    (adjust "no keyboard traps — user can always Tab away")
-    (adjust "skip navigation link present on pages with repeated blocks")
-    (adjust "logical focus order follows visual reading order")
-
-    ; ── Screen reader ──
-    (adjust "all images have meaningful alt text (or alt='' if decorative)")
-    (adjust "all form inputs have associated labels")
-    (adjust "ARIA landmarks used for page regions (main, nav, banner, etc.)")
-    (adjust "dynamic content updates announced via aria-live regions")
-    (adjust "semantic HTML used (headings, lists, tables) — not div soup")
-
-    ; ── Interactive ──
-    (adjust "touch targets minimum 44x44px on mobile/touch interfaces")
-    (adjust "error messages identify the field and describe the error")
-    (adjust "error messages not conveyed by colour or position alone")
-    (adjust "form validation provides suggestions for correction")
-
-    ; ── Media ──
-    (adjust "video has captions (closed or open)")
-    (adjust "audio-only content has text transcript")
-    (adjust "no autoplay of media with sound")
-
-    ; ── Motion ──
-    (adjust "animations respect prefers-reduced-motion media query")
-    (adjust "no content depends on motion to convey meaning")
-
-    ; ── CLI/TUI ──
-    (adjust "CLI output must not rely solely on colour (use symbols: [OK] [FAIL])")
-    (adjust "TUI must support high-contrast mode")
-    (adjust "all CLI commands support --help with plain-text output")
-    (adjust "error messages written in plain language, not jargon or codes alone")
-
-    ; ── Documentation ──
-    (adjust "docs use clear language, short sentences, logical structure")
-    (adjust "code examples include comments explaining non-obvious steps")
-    (adjust "diagrams have text descriptions or alt text")
-
-    ; ── Internationalisation (i18n) ──
-    (adjust "all user-facing strings externalisable for translation")
-    (adjust "no hardcoded English in error messages — use message keys")
-    (adjust "date/time/number formats locale-aware")
-    (adjust "RTL (right-to-left) layout support where applicable")
-    (adjust "Unicode handled correctly throughout (UTF-8 everywhere)")
-  )
-
-  (related-resources
-    ; LOL — super-parallel corpus crawler for 1500+ languages
-    ; Use for linguistic data, translation coverage, and i18n validation
-    (lol "standards/lol — multilingual NLP corpus, see README.adoc")
-    (polyglot-i18n "polyglot-i18n — i18n framework and WASM translation engine")
-  )
-
-  (enforcement
-    (ci "accessibility linting in quality.yml workflow")
-    (pr-block "PR blocked if accessibility regression detected")
-    (tool "axe-core or pa11y for automated checks on web UI")
-    (tool "CLI output inspected for colour-only signalling")
-    (manual "manual screen reader test before major releases")
-  )
-
-  (notes
-    "These are MINIMUM requirements. Exceeding them (AAA) is encouraged."
-    "When in doubt about an accessibility decision, ask — don't guess."
-    "Accessibility is not optional polish — it is a structural requirement."
-  )
-)
diff --git a/.machine_readable/INTENT.contractile b/.machine_readable/INTENT.contractile
deleted file mode 100644
index be6ea46..0000000
--- a/.machine_readable/INTENT.contractile
+++ /dev/null
@@ -1,72 +0,0 @@
-; SPDX-License-Identifier: MPL-2.0
-; INTENT.contractile — Purpose and scope for rsr-template-repo
-; Helps LLM/SLM agents understand what this repo IS and IS NOT.
-;
-; Part of the contractile family: MUST, TRUST, DUST, INTENT, ADJUST
-
-; ── Definitions ──────────────────────────────────────────────────
-;
-; INTENT (noun)
-;   The purpose contractile. Defines what this repository IS, what it is
-;   NOT (anti-purpose), and which architectural decisions are load-bearing.
-;   Without INTENT, LLMs drift into scope creep, reverse key decisions,
-;   or add features that belong in a different repo.
-;
-; Scope:
-;   INTENT governs the conceptual boundaries of the project — its reason
-;   for existing, its domain, and its relationship to the ecosystem.
-;   It does NOT specify implementation details (that's MUST and code).
-;
-; Relationship to other contractiles:
-;   - MUST: INTENT explains WHY certain MUSTs exist. If you don't
-;     understand a MUST, read INTENT first.
-;   - TRUST: The "ask-before-touching" section in INTENT maps directly
-;     to TRUST.trust-deny for the most sensitive areas.
-;   - ADJUST: INTENT's anti-purpose should include "this software is
-;     NOT only for users with perfect vision/hearing/mobility."
-;   - DUST: When INTENT changes (repo pivots), related DUST entries
-;     should be created for the abandoned direction.
-;
-; ── End Definitions ──────────────────────────────────────────────
-
-(intent-contractile
-  (version "1.0.0")
-  (repo "rsr-template-repo")
-
-  ; === Purpose (what this repo IS) ===
-  (purpose
-    "When system resources get hairy, agent terminals back off voluntarily and in priority order before the OS OOM-kills everything at once, so the work that matters survives and a returning human comes back to an autopsy, not a smoking crater."
-  )
-
-  ; === Anti-Purpose (what this repo is NOT — prevents scope creep) ===
-  (anti-purpose
-    "This is not a monitoring dashboard or an incident-theatre tool; its success is its own invisibility. If you read autopsies often, it has failed at its real job."
-    ; Examples:
-    ; "This is NOT a general-purpose database — it solves one specific problem."
-    ; "This is NOT a framework — it is a library with a focused API."
-    ; "This does NOT handle authentication — that is delegated to [other repo]."
-  )
-
-  ; === Key Architectural Decisions That Must Not Be Reversed ===
-  (architectural-invariants
-    ; *REMINDER: List the foundational decisions*
-    ; ("Idris2 for ABI definitions — dependent types prove interface correctness")
-    ; ("Zig for FFI — zero-cost C ABI compatibility")
-    ; ("Elixir for supervision — OTP fault tolerance")
-  )
-
-  ; === Sensitive Areas (if in doubt, ask) ===
-  (ask-before-touching
-    ; *REMINDER: List areas where LLMs should check before modifying*
-    ; "src/abi/ — formal proofs, changes require re-verification"
-    ; "ffi/zig/ — C ABI boundary, changes affect all language bindings"
-    ; ".machine_readable/ — checkpoint files, format is specified"
-  )
-
-  ; === Ecosystem Position ===
-  (ecosystem
-    (belongs-to "standalone")
-    (depends-on ("{{DEP1}}" "{{DEP2}}"))
-    (depended-on-by ("{{CONSUMER1}}" "{{CONSUMER2}}"))
-  )
-)
diff --git a/.machine_readable/MUST.contractile b/.machine_readable/MUST.contractile
deleted file mode 100644
index 8010ec2..0000000
--- a/.machine_readable/MUST.contractile
+++ /dev/null
@@ -1,90 +0,0 @@
-; SPDX-License-Identifier: MPL-2.0
-; MUST.contractile — Baseline invariants for rsr-template-repo
-; These constraints MUST NOT be violated. K9 validators enforce them.
-;
-; Part of the contractile family: MUST, TRUST, DUST, INTENT, ADJUST
-
-; ── Definitions ──────────────────────────────────────────────────
-;
-; MUST (noun/verb)
-;   The hard-constraint contractile. Defines invariants that are structurally
-;   required for the repository to function correctly and safely. Violating
-;   a MUST is always a bug — there are no "soft" MUSTs.
-;
-; Scope:
-;   MUST governs code, configuration, CI, and structure. It does NOT govern
-;   style, preference, or approach — those belong in CLAUDE.md or coding
-;   standards. MUST is for things that break the project if violated.
-;
-; Relationship to other contractiles:
-;   - TRUST: MUST is enforced regardless of trust level. Even maximal-trust
-;     agents cannot violate MUST constraints.
-;   - ADJUST: All ADJUST invariants are implicitly MUST invariants too.
-;     ADJUST exists separately for visibility.
-;   - INTENT: MUST protects the architectural decisions described in INTENT.
-;   - DUST: When a feature enters DUST (deprecation), its MUST constraints
-;     remain active until the feature is fully removed.
-;
-; Enforcement:
-;   K9 validators in contractiles/k9/ machine-check MUST constraints.
-;   CI runs these on every PR. Violations block merge.
-;
-; ── End Definitions ──────────────────────────────────────────────
-
-(must-contractile
-  (version "1.0.0")
-  (repo "rsr-template-repo")
-
-  ; === Universal Invariants (apply to ALL repos) ===
-
-  (invariants
-    ; Paths
-    (must "no hardcoded absolute paths (/home/*, /mnt/*, /var/mnt/*)")
-    (must "all paths use env vars, XDG dirs, or relative references")
-
-    ; Language policy
-    (must "no new TypeScript files")
-    (must "no new Python files")
-    (must "no new Go files")
-    (must "no npm/bun/yarn/pnpm dependencies — Deno only")
-
-    ; Dangerous patterns
-    (must "no believe_me (Idris2)")
-    (must "no assert_total (Idris2)")
-    (must "no Admitted (Coq)")
-    (must "no sorry (Lean)")
-    (must "no unsafeCoerce (Haskell)")
-    (must "no Obj.magic (OCaml)")
-    (must "no unsafe {} blocks without safety comment (Rust)")
-
-    ; License
-    (must "SPDX-License-Identifier header on every source file")
-    (must "no removal or modification of LICENSE file")
-
-    ; Structure
-    (must ".machine_readable/ directory preserved")
-    (must "no SCM files in repo root — only in .machine_readable/")
-
-    ; CI
-    (must "no removal of CI workflows without explicit approval")
-    (must "all GitHub Actions SHA-pinned")
-
-    ; Code quality
-    (must "tests must not be deleted or weakened")
-    (must "generated code in generated/ directory only")
-    (must "no introduction of OWASP top 10 vulnerabilities")
-
-    ; ABI/FFI (if applicable)
-    (must "no modification of ABI contracts without proof update")
-    (must "no removal of formal verification proofs")
-  )
-
-  ; === Project-Specific Invariants ===
-  ; *REMINDER: Add invariants specific to this repo*
-  ; (must "# Add project-specific invariants here")
-
-  (enforcement
-    (k9-validator "contractiles/k9/must-check.k9.ncl")
-    (ci "quality.yml runs must-check on every PR")
-  )
-)
diff --git a/.machine_readable/TRUST.contractile b/.machine_readable/TRUST.contractile
deleted file mode 100644
index 52fd1f0..0000000
--- a/.machine_readable/TRUST.contractile
+++ /dev/null
@@ -1,80 +0,0 @@
-; SPDX-License-Identifier: MPL-2.0
-; TRUST.contractile — Trust boundaries for rsr-template-repo
-; Defines what LLM/SLM agents are trusted to do without asking.
-;
-; Part of the contractile family: MUST, TRUST, DUST, INTENT, ADJUST
-
-; ── Definitions ──────────────────────────────────────────────────
-;
-; TRUST (noun/verb)
-;   The permission contractile. Defines the boundary between what an AI
-;   agent may do autonomously and what requires human approval. Trust is
-;   graduated — not binary — with four levels from minimal to maximal.
-;
-; Trust levels:
-;   - maximal:    Agent may read, build, test, lint, format, heal freely.
-;                 Only destructive/external actions require approval.
-;   - standard:   Agent may read and build. Test/lint need approval.
-;   - restricted: Agent may read only. All modifications need approval.
-;   - minimal:    Agent may read specific files only. Everything else blocked.
-;
-; Scope:
-;   TRUST governs AI agent behaviour only. It does not affect human
-;   contributors — humans follow CONTRIBUTING.md and GOVERNANCE.adoc.
-;
-; Relationship to other contractiles:
-;   - MUST: Trust never overrides MUST. Even at maximal trust, MUST
-;     violations are blocked.
-;   - ADJUST: Trust does not exempt from ADJUST. All trust tiers must
-;     produce accessible output.
-;   - INTENT: TRUST.trust-deny protects the sensitive areas listed in
-;     INTENT.ask-before-touching.
-;   - DUST: Deprecated features have the same trust rules as active ones.
-;
-; ── End Definitions ──────────────────────────────────────────────
-
-(trust-contractile
-  (version "1.0.0")
-  (repo "rsr-template-repo")
-
-  (trust-level "maximal")  ; maximal | standard | restricted | minimal
-
-  ; === Maximal Trust (default) ===
-  ; LLM may freely do these without asking:
-  (trust-actions
-    "read"          ; Read any file in the repo
-    "build"         ; Run build commands
-    "test"          ; Run test suites
-    "lint"          ; Run linters and formatters
-    "format"        ; Auto-format code
-    "doctor"        ; Run self-diagnostics
-    "heal"          ; Attempt automatic repair
-    "git-status"    ; Check git status
-    "git-diff"      ; View diffs
-    "git-log"       ; View history
-  )
-
-  ; === Denied Actions (always require human approval) ===
-  (trust-deny
-    "delete-branch"           ; Could lose work
-    "force-push"              ; Overwrites history
-    "modify-ci-secrets"       ; Security sensitive
-    "publish"                 ; External visibility
-    "push-to-main"            ; Protected branch
-    "delete-files-bulk"       ; More than 5 files at once
-    "modify-license"          ; Legal implications
-    "modify-security-policy"  ; Security implications
-    "remove-proofs"           ; Formal verification regression
-    "disable-ci-checks"       ; Safety regression
-  )
-
-  ; === Trust Boundary ===
-  (trust-boundary "repo")  ; LLM confined to this repo unless explicitly told otherwise
-
-  ; === Override ===
-  ; Repos requiring tighter trust override these settings with justification:
-  ; (override
-  ;   (trust-level "restricted")
-  ;   (reason "Contains production secrets / handles PII / etc.")
-  ; )
-)
diff --git a/.machine_readable/contractiles/Adjustfile.a2ml b/.machine_readable/contractiles/Adjustfile.a2ml
new file mode 100644
index 0000000..6f01e89
--- /dev/null
+++ b/.machine_readable/contractiles/Adjustfile.a2ml
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: MPL-2.0
+# Adjustfile — Drift-tolerance contract for rsr-template-repo
+# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+#
+# Cumulative-drift catchment: tolerance bands + corrective actions.
+# Authority: advisory (Yard) — continue-with-warnings; auto_fix where deterministic.
+# Run with: adjust check
+# Fix with: adjust fix (applies deterministic patches; advisory otherwise)
+
+@abstract:
+Drift tolerances and corrective actions for rsr-template-repo. Unlike
+MUST (hard gate), ADJUST tracks cumulative drift against tolerance bands
+and proposes corrective actions. Advisory — it warns and trends, it does
+not block.
+@end
+
+## Template Drift
+
+### placeholder-drift
+- description: Template placeholders should be replaced when copied
+- tolerance: 0 placeholder markers in copied repos
+- corrective: Search and replace all {{PLACEHOLDER}} markers
+- severity: advisory
+- notes: This check only applies to repos that copied from this template
+
+### template-version-drift
+- description: Template version should match RSR spec version
+- tolerance: Template version matches current RSR spec
+- corrective: Update template to match latest RSR spec
+- severity: advisory
+
+## Documentation Drift
+
+### readme-completeness
+- description: README should document all template features
+- tolerance: README covers all contractiles and directory structure
+- corrective: Update README.adoc with missing sections
+- severity: advisory
+
+### example-accuracy
+- description: Examples in documentation should match actual template content
+- tolerance: All code examples in docs are accurate
+- corrective: Audit and fix examples in documentation
+- severity: advisory
+
+## Structural Drift
+
+### contractile-sync
+- description: All contractiles should have matching a2ml and ncl implementations
+- tolerance: Every .a2ml has a corresponding .ncl
+- corrective: Generate missing .ncl files from .a2ml
+- severity: advisory
+
+### no-broken-symlinks
+- description: No broken symbolic links in template structure
+- tolerance: 0 broken symlinks
+- corrective: Run symlink-check script
+- severity: advisory
+
+## Accessibility Drift
+
+### adoc-not-md
+- description: Template docs should prefer AsciiDoc
+- tolerance: New prose docs are *.adoc
+- corrective: Convert any new *.md to *.adoc
+- severity: advisory
+
+### spdx-header-consistency
+- description: All template files have correct SPDX headers
+- tolerance: 0 files missing SPDX-License-Identifier
+- corrective: Add SPDX headers to files that need them
+- severity: advisory
diff --git a/.machine_readable/contractiles/Intentfile.a2ml b/.machine_readable/contractiles/Intentfile.a2ml
new file mode 100644
index 0000000..ef74f45
--- /dev/null
+++ b/.machine_readable/contractiles/Intentfile.a2ml
@@ -0,0 +1,99 @@
+# SPDX-License-Identifier: MPL-2.0
+# Intentfile (A2ML Canonical) — north-star contractile for rsr-template-repo
+# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+#
+# Paired runner: intend.ncl
+# Verb:          intend
+#
+# Semantics: North-star contractile. Declares BOTH concrete committed
+#            next-actions AND horizon aspirations the project wishes to
+#            become. Two sections share one file because they answer
+#            the same question at different ranges:
+#              [[intents]] — "we WILL do this; track progress"
+#                            status: declared → in_progress → done |
+#                                    deferred | retired
+#              [[wishes]]  — "we WISH this were true; revisit later"
+#                            status: declared → in_progress → achieved |
+#                                    abandoned
+#                            grouped by horizon: near / mid / far.
+#            Non-gating — this is a report, not a gate. See the `must`
+#            contractile for hard gates.
+
+@abstract:
+North-star contractile for rsr-template-repo. This repository is the
+canonical template for Rhodium Standard Repository compliance. It provides
+the scaffold that all hyperpolymath repos should copy and customize.
+@end
+
+## Purpose
+
+The rsr-template-repo serves as the master template for all hyperpolymath
+repositories. It contains the complete set of contractile files, machine-readable
+specifications, and governance documentation that define the Rhodium Standard.
+
+Every new repository in the hyperpolymath estate should be initialized by
+copying this template and substituting the placeholder values with
+repo-specific content.
+
+## Anti-Purpose
+
+This repository is NOT:
+- A general-purpose project scaffold for external use (hyperpolymath-only)
+- A replacement for per-repo customization (all files must be bespoke)
+- A static template that never changes (evolves with RSR spec)
+- A runtime library or framework (build-time only)
+
+## If In Doubt
+
+If you are unsure whether a change is in scope, ask. Sensitive areas:
+- .machine_readable/ contractile definitions
+- RSR specification files
+- Governance templates
+- License policy documents
+
+## Committed Next-Actions
+
+### repo-initialization
+- description: Provide just copy-and-substitute template for new repos
+- probe: test -f scripts/init-repo.sh
+- status: done
+- notes: Run with source scripts/init-repo.sh <new-repo-name>
+
+### contractile-completeness
+- description: Every RSR contractile has an a2ml and ncl implementation
+- probe: ls .machine_readable/contractiles/*.a2ml | wc -l | grep -q "^6$"
+- status: in_progress
+- notes: Currently 6 contractile verbs: intend, must, trust, adjust, bust, dust
+
+### automation-scripts
+- description: All repetitive tasks have just recipes
+- probe: grep -c "^# " Justfile | grep -q "^[6-9][0-9]*$"
+- status: in_progress
+
+## Wishes
+
+### Near Horizon
+
+#### cross-repo-validation
+- description: Tooling to validate all repos against RSR spec
+- horizon: near
+- status: declared
+
+#### automated-substitution
+- description: Script to automate repo-specific substitution in template
+- horizon: near
+- status: declared
+
+### Mid Horizon
+
+#### formal-verification
+- description: Idris2 proofs for all critical contractile invariants
+- horizon: mid
+- status: declared
+
+### Far Horizon
+
+#### ecosystem-visualization
+- description: Interactive graph of all hyperpolymath repos and dependencies
+- horizon: far
+- status: declared
diff --git a/.machine_readable/contractiles/Justfile b/.machine_readable/contractiles/Justfile
new file mode 100644
index 0000000..03a698c
--- /dev/null
+++ b/.machine_readable/contractiles/Justfile
@@ -0,0 +1,783 @@
+# SPDX-License-Identifier: MPL-2.0
+# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
+#
+# RSR Standard Justfile Template
+# https://just.systems/man/en/
+#
+# Copy this file to new projects and customize the placeholder values.
+#
+# Run `just` to see all available recipes
+# Run `just cookbook` to generate docs/just-cookbook.adoc
+# Run `just combinations` to see matrix recipe options
+
+set shell := ["bash", "-uc"]
+set dotenv-load := true
+set positional-arguments := true
+
+# Import auto-generated contractile recipes (must-check, trust-verify, etc.)
+# Re-generate with: contractile gen-just
+import? "build/contractile.just"
+
+# Project metadata — customize these
+project := "rsr-template-repo"
+OWNER := "hyperpolymath"
+REPO := "rsr-template-repo"
+version := "0.1.0"
+tier := "infrastructure"  # 1 | 2 | infrastructure
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# DEFAULT & HELP
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Show all available recipes with descriptions
+default:
+    @just --list --unsorted
+
+# Show detailed help for a specific recipe
+help recipe="":
+    #!/usr/bin/env bash
+    if [ -z "{{recipe}}" ]; then
+        just --list --unsorted
+        echo ""
+        echo "Usage: just help <recipe>"
+        echo "       just cookbook     # Generate full documentation"
+        echo "       just combinations # Show matrix recipes"
+    else
+        just --show "{{recipe}}" 2>/dev/null || echo "Recipe '{{recipe}}' not found"
+    fi
+
+# Show this project's info
+info:
+    @echo "Project: llm_grace"
+    @echo "Version: {{version}}"
+    @echo "RSR Tier: {{tier}}"
+    @echo "Recipes: $(just --summary | wc -w)"
+    @[ -f ".machine_readable/STATE.a2ml" ] && grep -oP 'phase\s*=\s*"\K[^"]+' .machine_readable/STATE.a2ml | head -1 | xargs -I{} echo "Phase: {}" || true
+
+# Run Invariant Path overlay tools for this repository
+invariant-path *ARGS:
+    ./scripts/invariant-path.sh {{ARGS}}
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# INIT — see build/just/init.just
+# ═══════════════════════════════════════════════════════════════════════════════
+
+import? "build/just/init.just"
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# GROOVE PROTOCOL — see build/just/groove.just
+# ═══════════════════════════════════════════════════════════════════════════════
+
+import? "build/just/groove.just"
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# PROJECT SELF-ASSESSMENT + OPENSSF COMPLIANCE — see build/just/assess.just
+# ═══════════════════════════════════════════════════════════════════════════════
+
+import? "build/just/assess.just"
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# BUILD & COMPILE
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Build the project (debug mode)
+build *args:
+    @echo "Building llm_grace (debug)..."
+    # TODO: Replace with your build command
+    # Examples:
+    #   cargo build {{args}}                    # Rust
+    #   mix compile {{args}}                    # Elixir
+    #   zig build {{args}}                      # Zig
+    #   deno task build {{args}}                # Deno/ReScript
+    @echo "Build complete"
+
+# Build in release mode with optimizations
+build-release *args:
+    @echo "Building llm_grace (release)..."
+    # TODO: Replace with your release build command
+    # Examples:
+    #   cargo build --release {{args}}
+    #   MIX_ENV=prod mix compile {{args}}
+    #   zig build -Doptimize=ReleaseFast {{args}}
+    @echo "Release build complete"
+
+# Build and watch for changes (requires entr or similar)
+build-watch:
+    @echo "Watching for changes..."
+    # TODO: Customize file patterns for your language
+    # Examples:
+    #   find src -name '*.rs' | entr -c just build
+    #   mix compile --force --warnings-as-errors
+    #   deno task dev
+
+# Clean build artifacts [reversible: rebuild with `just build`]
+clean:
+    @echo "Cleaning..."
+    # TODO: Customize for your build system
+    rm -rf target/ _build/ build/ dist/ out/ obj/ bin/
+
+# Deep clean including caches [reversible: rebuild]
+clean-all: clean
+    rm -rf .cache .tmp
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# TEST & QUALITY
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Run all tests
+test *args:
+    @echo "Running tests..."
+    # TODO: Replace with your test command
+    # Examples:
+    #   cargo test {{args}}
+    #   mix test {{args}}
+    #   zig build test {{args}}
+    #   deno test {{args}}
+    @echo "Tests passed!"
+
+# Run tests with verbose output
+test-verbose:
+    @echo "Running tests (verbose)..."
+    # TODO: Replace with verbose test command
+
+# Smoke test
+test-smoke:
+    @echo "Smoke test..."
+    # TODO: Add basic sanity checks
+
+# Run end-to-end tests (full pipeline: build → run → verify)
+e2e:
+    @echo "Running E2E tests..."
+    # TODO: Replace with your E2E test command. Examples:
+    #   bash tests/e2e.sh                    # Shell-based E2E
+    #   npx playwright test                  # Browser E2E
+    #   mix test test/integration/e2e_test.exs  # Elixir E2E
+    #   cargo test --test end_to_end         # Rust E2E
+    @echo "E2E tests passed!"
+
+# Run aspect tests (cross-cutting concern validation)
+aspect:
+    @echo "Running aspect tests..."
+    # TODO: Replace with your aspect test command. Examples:
+    #   bash tests/aspect_tests.sh           # Shell-based aspect tests
+    #   cargo test --test aspects             # Rust aspect tests
+    # Aspect tests validate architectural invariants:
+    #   - Thread safety (mutex in FFI modules)
+    #   - ABI/FFI contract (declarations match exports)
+    #   - SPDX compliance (all files have license headers)
+    #   - No dangerous patterns (believe_me, assert_total, etc.)
+    @echo "Aspect tests passed!"
+
+# Run benchmarks (performance regression detection)
+bench:
+    @echo "Running benchmarks..."
+    # TODO: Replace with your benchmark command. Examples:
+    #   cargo bench                           # Rust criterion
+    #   zig build bench                       # Zig benchmarks
+    #   mix run bench/benchmarks.exs          # Elixir benchee
+    #   deno bench                            # Deno bench
+    @echo "Benchmarks complete!"
+
+# Run readiness tests (Component Readiness Grade: D/C/B)
+readiness:
+    @echo "Running readiness tests..."
+    # TODO: Replace with your readiness test command. Examples:
+    #   cargo test --test readiness -- --nocapture
+    @echo "Readiness tests complete!"
+
+# Print the current CRG grade (reads from READINESS.md '**Current Grade:** X' line)
+crg-grade:
+    @grade=$$(grep -oP '(?<=\*\*Current Grade:\*\* )[A-FX]' READINESS.md 2>/dev/null | head -1); \
+    [ -z "$$grade" ] && grade="X"; \
+    echo "$$grade"
+
+# Print a shields.io CRG badge for embedding in README files
+# Looks for '**Current Grade:** X' in READINESS.md; falls back to X
+crg-badge:
+    @grade=$$(grep -oP '(?<=\*\*Current Grade:\*\* )[A-FX]' READINESS.md 2>/dev/null | head -1); \
+    [ -z "$$grade" ] && grade="X"; \
+    case "$$grade" in \
+      A) color="brightgreen" ;; \
+      B) color="green" ;; \
+      C) color="yellow" ;; \
+      D) color="orange" ;; \
+      E) color="red" ;; \
+      F) color="critical" ;; \
+      *) color="lightgrey" ;; \
+    esac; \
+    echo "[![CRG $$grade](https://img.shields.io/badge/CRG-$$grade-$$color?style=flat-square)](https://github.com/hyperpolymath/standards/tree/main/component-readiness-grades)"
+
+# Run the full merge-requirement test suite (ALL categories)
+# Per STANDING rule: P2P + E2E + aspect + execution + lifecycle + bench
+test-all: test e2e aspect bench readiness
+    @echo "All test categories passed — safe to merge!"
+
+# Run all quality checks
+quality: fmt-check lint test
+    @echo "All quality checks passed!"
+
+# Fix all auto-fixable issues [reversible: git checkout]
+fix: fmt
+    @echo "Fixed all auto-fixable issues"
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# LINT & FORMAT
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Format all source files [reversible: git checkout]
+fmt:
+    @echo "Formatting source files..."
+    # TODO: Replace with your formatter
+    # Examples:
+    #   cargo fmt
+    #   mix format
+    #   gleam format
+    #   deno fmt
+
+# Check formatting without changes
+fmt-check:
+    @echo "Checking formatting..."
+    # TODO: Replace with your format check
+    # Examples:
+    #   cargo fmt --check
+    #   mix format --check-formatted
+    #   gleam format --check
+
+# Run linter
+lint:
+    @echo "Linting source files..."
+    # TODO: Replace with your linter
+    # Examples:
+    #   cargo clippy -- -D warnings
+    #   mix credo --strict
+    #   gleam check
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# RUN & EXECUTE
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Run the application
+run *args: build
+    # TODO: Replace with your run command
+    echo "Run not configured yet"
+
+# Run with verbose output
+run-verbose *args: build
+    # TODO: Replace with verbose run command
+    echo "Run not configured yet"
+
+# Install to user path
+install: build-release
+    @echo "Installing llm_grace..."
+    # TODO: Replace with your install command
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# DEPENDENCIES
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Install/check all dependencies
+deps:
+    @echo "Checking dependencies..."
+    # TODO: Replace with your dependency check
+    # Examples:
+    #   cargo check
+    #   mix deps.get
+    #   gleam deps download
+    @echo "All dependencies satisfied"
+
+# Audit dependencies for vulnerabilities
+deps-audit:
+    @echo "Auditing for vulnerabilities..."
+    # TODO: Replace with your audit command
+    # Examples:
+    #   cargo audit
+    #   mix audit
+    @command -v trivy >/dev/null && trivy fs --severity HIGH,CRITICAL --quiet . || true
+    @command -v gitleaks >/dev/null && gitleaks detect --source . --no-git --quiet || true
+    @echo "Audit complete"
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# DOCUMENTATION
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Generate all documentation
+docs:
+    @mkdir -p docs/generated docs/man
+    just cookbook
+    just man
+    @echo "Documentation generated in docs/"
+
+# Generate justfile cookbook documentation
+cookbook:
+    #!/usr/bin/env bash
+    mkdir -p docs
+    OUTPUT="docs/just-cookbook.adoc"
+    echo "= llm_grace Justfile Cookbook" > "$OUTPUT"
+    echo ":toc: left" >> "$OUTPUT"
+    echo ":toclevels: 3" >> "$OUTPUT"
+    echo "" >> "$OUTPUT"
+    echo "Generated: $(date -Iseconds)" >> "$OUTPUT"
+    echo "" >> "$OUTPUT"
+    echo "== Recipes" >> "$OUTPUT"
+    echo "" >> "$OUTPUT"
+    just --list --unsorted | while read -r line; do
+        if [[ "$line" =~ ^[[:space:]]+([a-z_-]+) ]]; then
+            recipe="${BASH_REMATCH[1]}"
+            echo "=== $recipe" >> "$OUTPUT"
+            echo "" >> "$OUTPUT"
+            echo "[source,bash]" >> "$OUTPUT"
+            echo "----" >> "$OUTPUT"
+            echo "just $recipe" >> "$OUTPUT"
+            echo "----" >> "$OUTPUT"
+            echo "" >> "$OUTPUT"
+        fi
+    done
+    echo "Generated: $OUTPUT"
+
+# Generate man page
+man:
+    #!/usr/bin/env bash
+    mkdir -p docs/man
+    cat > docs/man/llm_grace.1 << EOF
+    .TH llm_grace 1 "$(date +%Y-%m-%d)" "{{version}}" "llm_grace Manual"
+    .SH NAME
+    llm_grace \- RSR-compliant project
+    .SH SYNOPSIS
+    .B just
+    [recipe] [args...]
+    .SH DESCRIPTION
+    RSR (Rhodium Standard Repository) project managed with just.
+    .SH AUTHOR
+    $(git config user.name 2>/dev/null || echo "Author") <$(git config user.email 2>/dev/null || echo "email")>
+    EOF
+    echo "Generated: docs/man/llm_grace.1"
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# CONTAINERS (stapeln ecosystem — Podman + Chainguard Wolfi)
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Initialise container templates — substitute placeholders with project values
+container-init:
+    #!/usr/bin/env bash
+    set -euo pipefail
+
+    if [ ! -d "container" ]; then
+        echo "Error: container/ directory not found."
+        echo "This repo may not have been created from rsr-template-repo."
+        exit 1
+    fi
+
+    echo "=== Container Template Initialisation ==="
+    echo ""
+
+    # Load RSR defaults if available
+    DEFAULTS="${XDG_CONFIG_HOME:-$HOME/.config}/rsr/defaults"
+    if [ -f "$DEFAULTS" ]; then
+        echo "Loading defaults from $DEFAULTS"
+        # shellcheck source=/dev/null
+        source "$DEFAULTS"
+        echo ""
+    fi
+
+    # Prompt for container-specific values
+    read -rp "Service name (e.g. my-api) [llm_grace]: " _SERVICE_NAME
+    SERVICE_NAME="${_SERVICE_NAME:-llm_grace}"
+
+    read -rp "Primary port [8080]: " _PORT
+    PORT="${_PORT:-8080}"
+
+    read -rp "Container registry [ghcr.io/${OWNER:-hyperpolymath}]: " _REGISTRY
+    REGISTRY="${_REGISTRY:-ghcr.io/${OWNER:-hyperpolymath}}"
+
+    echo ""
+    echo "  Service: $SERVICE_NAME"
+    echo "  Port:    $PORT"
+    echo "  Registry: $REGISTRY"
+    echo ""
+    read -rp "Proceed? [Y/n] " CONFIRM
+    [[ "${CONFIRM:-Y}" =~ ^[Nn] ]] && echo "Aborted." && exit 0
+
+    echo ""
+    echo "Replacing container placeholders..."
+
+    # Brace tokens as variables (hex escapes avoid just interpolation)
+    LB=$(printf '\x7b\x7b')
+    RB=$(printf '\x7d\x7d')
+
+    SED_ARGS=(
+        -e "s|${LB}SERVICE_NAME${RB}|${SERVICE_NAME}|g"
+        -e "s|${LB}PORT${RB}|${PORT}|g"
+        -e "s|${LB}REGISTRY${RB}|${REGISTRY}|g"
+    )
+
+    find container/ -type f | while read -r file; do
+        if file --brief "$file" | grep -qi 'text\|ascii\|utf'; then
+            sed -i "${SED_ARGS[@]}" "$file"
+        fi
+    done
+
+    echo "Container templates initialised."
+    echo ""
+    echo "Next steps:"
+    echo "  1. Edit container/Containerfile — add your build commands"
+    echo "  2. Edit container/entrypoint.sh — set your application binary"
+    echo "  3. Review container/compose.toml — adjust services and volumes"
+    echo "  4. Build: just container-build"
+
+# Build container image via cerro-torre pipeline
+container-build *args:
+    #!/usr/bin/env bash
+    if [ -f "container/ct-build.sh" ]; then
+        cd container && ./ct-build.sh {{args}}
+    elif [ -f "container/Containerfile" ]; then
+        podman build -t llm_grace:latest -f container/Containerfile .
+    elif [ -f "build/Containerfile" ]; then
+        podman build -t llm_grace:latest -f build/Containerfile .
+    elif [ -f "Containerfile" ]; then
+        podman build -t llm_grace:latest -f Containerfile .
+    else
+        echo "No Containerfile found in container/, build/, or project root"
+        exit 1
+    fi
+
+# Verify compose configuration
+container-verify:
+    #!/usr/bin/env bash
+    if [ ! -f "container/compose.toml" ]; then
+        echo "No container/compose.toml found"
+        exit 1
+    fi
+    cd container
+    if command -v selur-compose &>/dev/null; then
+        selur-compose verify
+    else
+        echo "selur-compose not found, falling back to podman compose"
+        podman compose --file compose.toml config
+    fi
+
+# Start container stack
+container-up *args:
+    #!/usr/bin/env bash
+    if [ ! -f "container/compose.toml" ]; then
+        echo "No container/compose.toml found"
+        exit 1
+    fi
+    cd container
+    if command -v selur-compose &>/dev/null; then
+        selur-compose up {{args}}
+    else
+        podman compose --file compose.toml up {{args}}
+    fi
+
+# Stop container stack
+container-down:
+    #!/usr/bin/env bash
+    cd container 2>/dev/null || { echo "No container/ directory"; exit 1; }
+    if command -v selur-compose &>/dev/null; then
+        selur-compose down
+    else
+        podman compose --file compose.toml down
+    fi
+
+# Sign and verify container bundle (build + pack + sign + verify)
+container-sign:
+    #!/usr/bin/env bash
+    if [ -f "container/ct-build.sh" ]; then
+        cd container && ./ct-build.sh
+    else
+        echo "No container/ct-build.sh found"
+        exit 1
+    fi
+
+# Push signed bundle to registry
+container-push:
+    #!/usr/bin/env bash
+    if [ -f "container/ct-build.sh" ]; then
+        cd container && ./ct-build.sh --push
+    else
+        echo "No container/ct-build.sh found — falling back to podman push"
+        podman push llm_grace:latest
+    fi
+
+# Run container interactively (for debugging)
+container-run *args:
+    podman run --rm -it llm_grace:latest {{args}}
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# CI & AUTOMATION
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Run full CI pipeline locally
+ci: deps quality
+    @echo "CI pipeline complete!"
+
+# Install git hooks
+install-hooks:
+    @mkdir -p .git/hooks
+    @cat > .git/hooks/pre-commit << 'HOOKEOF'
+    #!/bin/bash
+    just fmt-check || exit 1
+    just lint || exit 1
+    just assail || exit 1
+    HOOKEOF
+    @chmod +x .git/hooks/pre-commit
+    @echo "Git hooks installed"
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# SECURITY
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Run security audit
+security: deps-audit
+    @echo "=== Security Audit ==="
+    @command -v gitleaks >/dev/null && gitleaks detect --source . --verbose || true
+    @command -v trivy >/dev/null && trivy fs --severity HIGH,CRITICAL . || true
+    @echo "Security audit complete"
+
+# Generate SBOM
+sbom:
+    @mkdir -p docs/security
+    @command -v syft >/dev/null && syft . -o spdx-json > docs/security/sbom.spdx.json || echo "syft not found"
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# VALIDATION & COMPLIANCE — see build/just/validate.just
+# ═══════════════════════════════════════════════════════════════════════════════
+
+import? "build/just/validate.just"
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# STATE MANAGEMENT
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Update STATE.a2ml timestamp
+state-touch:
+    @if [ -f ".machine_readable/STATE.a2ml" ]; then \
+        sed -i 's/last-updated = "[^"]*"/last-updated = "'"$(date +%Y-%m-%d)"'"/' .machine_readable/STATE.a2ml && \
+        echo "STATE.a2ml timestamp updated"; \
+    fi
+
+# Show current phase from STATE.a2ml
+state-phase:
+    @grep -oP 'phase\s*=\s*"\K[^"]+' .machine_readable/STATE.a2ml 2>/dev/null | head -1 || echo "unknown"
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# GUIX & NIX
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Enter Guix development shell (primary)
+guix-shell:
+    guix shell -D -f guix.scm
+
+# Build with Guix
+guix-build:
+    guix build -f guix.scm
+
+# Enter Nix development shell (fallback)
+nix-shell:
+    @if [ -f "flake.nix" ]; then nix develop; else echo "No flake.nix"; fi
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# HYBRID AUTOMATION
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Run local automation tasks
+automate task="all":
+    #!/usr/bin/env bash
+    case "{{task}}" in
+        all) just fmt && just lint && just test && just docs && just state-touch ;;
+        cleanup) just clean && find . -name "*.orig" -delete && find . -name "*~" -delete ;;
+        update) just deps && just validate ;;
+        *) echo "Unknown: {{task}}. Use: all, cleanup, update" && exit 1 ;;
+    esac
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# COMBINATORIC MATRIX RECIPES
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Build matrix: [debug|release] x [target] x [features]
+build-matrix mode="debug" target="" features="":
+    @echo "Build matrix: mode={{mode}} target={{target}} features={{features}}"
+
+# Test matrix: [unit|integration|e2e|all] x [verbosity] x [parallel]
+test-matrix suite="unit" verbosity="normal" parallel="true":
+    @echo "Test matrix: suite={{suite}} verbosity={{verbosity}} parallel={{parallel}}"
+
+# Container matrix: [build|run|push|shell|scan] x [registry] x [tag]
+container-matrix action="build" registry="ghcr.io/hyperpolymath" tag="latest":
+    @echo "Container matrix: action={{action}} registry={{registry}} tag={{tag}}"
+
+# CI matrix: [lint|test|build|security|all] x [quick|full]
+ci-matrix stage="all" depth="quick":
+    @echo "CI matrix: stage={{stage}} depth={{depth}}"
+
+# Show all matrix combinations
+combinations:
+    @echo "=== Combinatoric Matrix Recipes ==="
+    @echo ""
+    @echo "Build Matrix: just build-matrix [debug|release] [target] [features]"
+    @echo "Test Matrix:  just test-matrix [unit|integration|e2e|all] [verbosity] [parallel]"
+    @echo "Container:    just container-matrix [build|run|push|shell|scan] [registry] [tag]"
+    @echo "CI Matrix:    just ci-matrix [lint|test|build|security|all] [quick|full]"
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# VERSION CONTROL
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Show git status
+status:
+    @git status --short
+
+# Show recent commits
+log count="20":
+    @git log --oneline -{{count}}
+
+# Generate CHANGELOG.md with git-cliff
+changelog:
+    @command -v git-cliff >/dev/null || { echo "git-cliff not found — install: cargo install git-cliff"; exit 1; }
+    git cliff --config .machine_readable/configs/git-cliff/cliff.toml --output CHANGELOG.md
+    @echo "Generated CHANGELOG.md"
+
+# Preview changelog for unreleased commits (does not write)
+changelog-preview:
+    @command -v git-cliff >/dev/null || { echo "git-cliff not found — install: cargo install git-cliff"; exit 1; }
+    git cliff --config .machine_readable/configs/git-cliff/cliff.toml --unreleased --strip header
+
+# Tag a new release (usage: just release-tag 1.2.3)
+release-tag version:
+    #!/usr/bin/env bash
+    TAG="v{{version}}"
+    if git rev-parse "$TAG" >/dev/null 2>&1; then
+        echo "Tag $TAG already exists"
+        exit 1
+    fi
+    just changelog
+    git add CHANGELOG.md
+    git commit -m "chore(release): prepare $TAG"
+    git tag -a "$TAG" -m "Release $TAG"
+    echo "Created tag $TAG — push with: git push origin main --tags"
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# UTILITIES
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Count lines of code
+loc:
+    @find . \( -name "*.rs" -o -name "*.ex" -o -name "*.exs" -o -name "*.res" -o -name "*.gleam" -o -name "*.zig" -o -name "*.idr" -o -name "*.hs" -o -name "*.ncl" -o -name "*.scm" -o -name "*.adb" -o -name "*.ads" \) -not -path './target/*' -not -path './_build/*' 2>/dev/null | xargs wc -l 2>/dev/null | tail -1 || echo "0"
+
+# Show TODO comments
+todos:
+    @grep -rn "TODO\|FIXME\|HACK\|XXX" --include="*.rs" --include="*.ex" --include="*.res" --include="*.gleam" --include="*.zig" --include="*.idr" --include="*.hs" . 2>/dev/null || echo "No TODOs"
+
+# Open in editor
+edit:
+    ${EDITOR:-code} .
+
+# Run high-rigor security assault using panic-attacker
+maint-assault:
+    @./.machine_readable/scripts/maintenance/maint-assault.sh
+
+# Run panic-attacker pre-commit scan (foundational floor-raise requirement)
+assail:
+    @command -v panic-attack >/dev/null 2>&1 && panic-attack assail . || echo "WARN: panic-attack not found — install from https://github.com/hyperpolymath/panic-attacker"
+
+
+# Self-diagnostic — checks dependencies, permissions, paths
+doctor:
+    @echo "Running diagnostics for rsr-template-repo..."
+    @echo "Checking required tools..."
+    @command -v just >/dev/null 2>&1 && echo "  [OK] just" || echo "  [FAIL] just not found"
+    @command -v git >/dev/null 2>&1 && echo "  [OK] git" || echo "  [FAIL] git not found"
+    @echo "Checking for hardcoded paths..."
+    @grep -rn '$HOME\|$ECLIPSE_DIR' --include='*.rs' --include='*.ex' --include='*.res' --include='*.gleam' --include='*.sh' . 2>/dev/null | head -5 || echo "  [OK] No hardcoded paths"
+    @echo "Diagnostics complete."
+
+# Guided tour of key features
+tour:
+    @echo "=== rsr-template-repo Tour ==="
+    @echo ""
+    @echo "1. Project structure:"
+    @ls -la
+    @echo ""
+    @echo "2. Available commands: just --list"
+    @echo ""
+    @echo "3. Read README.adoc for full overview"
+    @echo "4. Read EXPLAINME.adoc for architecture decisions"
+    @echo "5. Run 'just doctor' to check your setup"
+    @echo ""
+    @echo "Tour complete! Try 'just --list' to see all available commands."
+
+# Open feedback channel with diagnostic context
+help-me:
+    @echo "=== rsr-template-repo Help ==="
+    @echo "Platform: $(uname -s) $(uname -m)"
+    @echo "Shell: $SHELL"
+    @echo ""
+    @echo "To report an issue:"
+    @echo "  https://github.com/hyperpolymath/rsr-template-repo/issues/new"
+    @echo ""
+    @echo "Include the output of 'just doctor' in your report."
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# FORMAL VERIFICATION (PROOFS) — see build/just/proofs.just
+# ═══════════════════════════════════════════════════════════════════════════════
+
+import? "build/just/proofs.just"
+
+# ═══════════════════════════════════════════════════════════════════════════════
+# SESSION MANAGEMENT (THIN BINDINGS TO CENTRAL STANDARDS)
+# ═══════════════════════════════════════════════════════════════════════════════
+
+# Show canonical session-management command model
+session-help:
+    @echo "Canonical command model:"
+    @echo "  intake repo <path>"
+    @echo "  checkpoint change <path>"
+    @echo "  verify maintenance <path>"
+    @echo "  verify substantial <path>"
+    @echo "  verify release <path>"
+    @echo "  close planned <path>"
+    @echo "  close urgent <path>"
+    @echo "  recover repo <path>"
+    @echo "  handover full <path>"
+    @echo "  handover split <path>"
+    @echo "  handover model <path>"
+    @echo "  handover human <path>"
+    @echo ""
+    @echo "Use Just aliases below (thin wrappers around ./session/dispatch.sh)."
+
+# Canonical aliases (friendly recipe names that map to canonical commands)
+intake-repo path=".":
+    @./session/dispatch.sh intake repo "{{path}}"
+
+checkpoint-change path=".":
+    @./session/dispatch.sh checkpoint change "{{path}}"
+
+verify-maintenance path=".":
+    @./session/dispatch.sh verify maintenance "{{path}}"
+
+verify-substantial path=".":
+    @./session/dispatch.sh verify substantial "{{path}}"
+
+verify-release path=".":
+    @./session/dispatch.sh verify release "{{path}}"
+
+close-planned path=".":
+    @./session/dispatch.sh close planned "{{path}}"
+
+close-urgent path=".":
+    @./session/dispatch.sh close urgent "{{path}}"
+
+recover-repo path=".":
+    @./session/dispatch.sh recover repo "{{path}}"
+
+handover-full path=".":
+    @./session/dispatch.sh handover full "{{path}}"
+
+handover-split path=".":
+    @./session/dispatch.sh handover split "{{path}}"
+
+handover-model path=".":
+    @./session/dispatch.sh handover model "{{path}}"
+
+handover-human path=".":
+    @./session/dispatch.sh handover human "{{path}}"
diff --git a/.machine_readable/contractiles/Mustfile.a2ml b/.machine_readable/contractiles/Mustfile.a2ml
new file mode 100644
index 0000000..55f8ab4
--- /dev/null
+++ b/.machine_readable/contractiles/Mustfile.a2ml
@@ -0,0 +1,102 @@
+# SPDX-License-Identifier: MPL-2.0
+# Mustfile — Physical state contract for rsr-template-repo
+# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+#
+# What MUST be true about this repository. Hard requirements.
+# Run with: must check
+# Fix with: must fix (where a deterministic fix exists)
+
+@abstract:
+Physical-state invariants for rsr-template-repo. This is the canonical
+RSR template repository. These are hard requirements — CI and pre-commit
+hooks fail if any check fails.
+@end
+
+## File Presence
+
+### license-present
+- description: LICENSE file must exist
+- run: test -f LICENSE
+- severity: critical
+
+### readme-present
+- description: README.adoc must exist
+- run: test -f README.adoc
+- severity: critical
+
+### security-policy
+- description: SECURITY.md must exist
+- run: test -f SECURITY.md
+- severity: critical
+
+### ai-manifest
+- description: 0-AI-MANIFEST.a2ml must exist
+- run: test -f 0-AI-MANIFEST.a2ml
+- severity: critical
+
+### governance-docs
+- description: GOVERNANCE.adoc, MAINTAINERS.adoc, CODEOWNERS must exist
+- run: test -f GOVERNANCE.adoc && test -f MAINTAINERS.adoc && test -f .github/CODEOWNERS
+- severity: critical
+
+### machine-readable-dir
+- description: .machine_readable/ directory must exist
+- run: test -d .machine_readable
+- severity: critical
+
+## Directory Structure
+
+### contractiles-complete
+- description: All required contractile directories exist
+- run: test -d .machine_readable/contractiles && test -d .machine_readable/contractiles/bust && test -d .machine_readable/contractiles/dust
+- severity: critical
+
+### contractiles-files-present
+- description: All four primary contractile files exist
+- run: test -f .machine_readable/contractiles/Intentfile.a2ml && test -f .machine_readable/contractiles/Mustfile.a2ml && test -f .machine_readable/contractiles/Trustfile.a2ml && test -f .machine_readable/contractiles/Adjustfile.a2ml
+- severity: critical
+
+### bust-dust-files-present
+- description: Bustfile and Dustfile exist in their directories
+- run: test -f .machine_readable/contractiles/bust/Bustfile.a2ml && test -f .machine_readable/contractiles/dust/Dustfile.a2ml
+- severity: critical
+
+### six-directory-present
+- description: 6a2 directory exists with required files
+- run: test -d .machine_readable/6a2 && test -f .machine_readable/6a2/META.a2ml && test -f .machine_readable/6a2/ECOSYSTEM.a2ml && test -f .machine_readable/6a2/STATE.a2ml && test -f .machine_readable/6a2/PLAYBOOK.a2ml && test -f .machine_readable/6a2/AGENTIC.a2ml && test -f .machine_readable/6a2/NEUROSYM.a2ml
+- severity: critical
+
+### anchors-directory
+- description: anchors directory exists in 6a2
+- run: test -d .machine_readable/6a2/anchors
+- severity: warning
+
+### self-validating-structure
+- description: self-validating directory has k9-svc and examples
+- run: test -d .machine_readable/self-validating && test -d .machine_readable/self-validating/k9-svc && test -d .machine_readable/self-validating/examples
+- severity: warning
+
+## Template Integrity
+
+### no-placeholder-values
+- description: No placeholder values remain in template files
+- run: test -z "$(grep -r '{{' .machine_readable/contractiles/ 2>/dev/null)"
+- severity: critical
+- notes: All placeholders must be substituted when copying this template
+
+### template-readonly
+- description: Template marker files are not modified
+- run: grep -q 'RSR_TEMPLATE_DO_NOT_EDIT' .machine_readable/0.1-AI-MANIFEST.a2ml
+- severity: warning
+
+## Git State
+
+### no-untracked-contractiles
+- description: All contractile files are tracked in git
+- run: test -z "$(git ls-files -o --exclude-standard .machine_readable/contractiles/ 2>/dev/null)"
+- severity: critical
+
+### signed-commits
+- description: All commits must be signed
+- run: git verify-commit HEAD
+- severity: critical
diff --git a/.machine_readable/contractiles/Trustfile.a2ml b/.machine_readable/contractiles/Trustfile.a2ml
new file mode 100644
index 0000000..e2028b5
--- /dev/null
+++ b/.machine_readable/contractiles/Trustfile.a2ml
@@ -0,0 +1,88 @@
+# SPDX-License-Identifier: MPL-2.0
+# Trustfile — Trust boundaries and integrity invariants for rsr-template-repo
+# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
+#
+# Defines what LLM/SLM agents are trusted to do without asking, and
+# integrity invariants that verify the repo has not been tampered with.
+
+@abstract:
+Trust boundaries and integrity checks for rsr-template-repo. This file
+combines the trust-level definitions from the original TRUST.contractile
+with the integrity invariants from the old Trustfile.a2ml. It defines
+what AI agents may do autonomously and what requires human approval,
+plus checks that verify repository integrity.
+@end
+
+## Trust Levels
+
+The rsr-template-repo operates at trust level: maximal
+
+Trust levels:
+- maximal:    Agent may read, build, test, lint, format, heal freely.
+             Only destructive/external actions require approval.
+- standard:   Agent may read and build. Test/lint need approval.
+- restricted: Agent may read only. All modifications need approval.
+- minimal:    Agent may read specific files only. Everything else blocked.
+
+Current trust level: maximal
+
+## Integrity Invariants
+
+### Secrets
+
+#### no-secrets-committed
+- description: No credential files in repo
+- run: test ! -f .env && test ! -f credentials.json && test ! -f .env.local && test ! -f .env.production
+- severity: critical
+
+#### no-private-keys
+- description: No private key files committed
+- run: "! find . -name '*.pem' -o -name '*.key' -o -name 'id_rsa' -o -name 'id_ed25519' 2>/dev/null | grep -v node_modules | head -1 | grep -q ."
+- severity: critical
+
+#### no-tokens-in-source
+- description: No hardcoded API tokens in source
+- run: "! grep -rE '(api[_-]?key|secret|token|password)\s*[:=]\s*[\"'\\''][A-Za-z0-9]{16,}' --include='*.js' --include='*.ts' --include='*.res' --include='*.py' . 2>/dev/null | grep -v node_modules | head -1 | grep -q ."
+- severity: critical
+
+## Provenance
+
+#### author-correct
+- description: Git author matches expected identity
+- run: "git log -1 --format='%ae' | grep -qE '(hyperpolymath|j\\.d\\.a\\.jewell)'"
+- severity: warning
+
+#### license-content
+- description: LICENSE contains expected identifier
+- run: grep -q 'PMPL\|MPL\|MIT\|Apache\|LGPL' LICENSE
+- severity: warning
+
+## Template-Specific Trust
+
+### template-files-readonly
+- description: Template scaffold files should not be modified except by maintainer
+- run: test -z "$(git status --short .machine_readable/ 2>/dev/null | grep -v '^??' || true)"
+- severity: advisory
+- notes: Changes to template files require careful review
+
+### trust-deny-areas
+- description: Sensitive areas from INTENT.contractile require explicit approval
+- run: echo "Check .machine_readable/ contractiles and governance docs"
+- severity: advisory
+- areas:
+  - .machine_readable/
+  - GOVERNANCE.adoc
+  - MAINTAINERS.adoc
+  - .github/CODEOWNERS
+
+## Container Security
+
+#### container-images-pinned
+- description: Containerfile uses pinned base images
+- run: test ! -f Containerfile || grep -q 'cgr.dev\|@sha256:' Containerfile
+- severity: warning
+
+#### no-dockerfile
+- description: No Dockerfile (use Containerfile)
+- run: test ! -f Dockerfile
+- severity: warning
diff --git a/.machine_readable/contractiles/bust/Bustfile.a2ml b/.machine_readable/contractiles/bust/Bustfile.a2ml
deleted file mode 100644
index 86e271f..0000000
--- a/.machine_readable/contractiles/bust/Bustfile.a2ml
+++ /dev/null
@@ -1,28 +0,0 @@
-// Bustfile.a2ml — meta-repo bust contractile (breakage / rollback)
-// SPDX-License-Identifier: MPL-2.0
-
-Bust {
-    name: "rsr-template-repo"
-    version: "1.0.0"
-    description: "Rollback procedures when something breaks in the meta-repo"
-
-    scenarios: {
-        "bad-pointer-bump": "git revert <bump-commit> in meta-repo; child repo itself untouched"
-        "submodule-pointer-points-at-missing-sha": "git submodule update --init --checkout <path> resets child to parent-recorded SHA; OR revert the stale bump commit"
-        "submodule-orphan-after-local-only-commit": "roll back locally with git reset to before the stranded commit; fix remote situation before re-attempting"
-        "accidental-private-repo-content-leaked-to-public-submodule": "hard-rotate the leaked secret immediately; git-filter-repo or BFG on the submodule's own history; public re-publication only after rotation complete"
-    }
-
-    escalation-ladder: [
-        "1. revert the meta-repo commit (reversible, low blast radius)",
-        "2. reset the local submodule clone (affects only local workspace)",
-        "3. force-push to main — PROHIBITED without explicit user confirmation (violates branch protection)",
-        "4. registry-level (delete/archive the GitHub repo) — human-only action, never by AI"
-    ]
-
-    backup-points: [
-        "GitHub serves as the durable backup for every submodule's own history",
-        "Meta-repo history on origin/main is the durable backup for pointer state",
-        "Local backup tags (backup/pre-<operation>-<date>) retained on risky rewrites"
-    ]
-}
diff --git a/.machine_readable/contractiles/bust/bust.ncl b/.machine_readable/contractiles/bust/bust.ncl
deleted file mode 100644
index fc8cb8c..0000000
--- a/.machine_readable/contractiles/bust/bust.ncl
+++ /dev/null
@@ -1,66 +0,0 @@
-# SPDX-License-Identifier: MPL-2.0
-# Bust — error-handling / failure-recovery runner
-#
-# Pairs with: Bustfile.a2ml (same directory)
-# Verb:       bust
-# Semantics:  every declared failure mode must have a recovery path that has
-#             been exercised. Runner injects failures (via declared probes)
-#             and verifies the recovery path works. Hard gate on any
-#             failure-mode with missing or broken recovery.
-# CLI:        `contractile bust check`  → list failure modes + recovery status
-#             `contractile bust drill`  → inject declared failures, verify recovery
-#
-# Anything else in this directory is human-only notes/archive; machines ignore.
-#
-# Base: ../_base.ncl provides pedigree_schema, run_defaults, probe_schema.
-# See: docs/CONTRACTILE-SPEC.adoc
-
-let base = import "../_base.ncl" in
-
-{
-  pedigree = base.pedigree_schema & {
-    contractile_verb = "bust",
-    semantics = "error handling + failure recovery",
-    security = {
-      leash = 'Kennel,
-      trust_level = "controlled failure injection; scoped to system-under-test",
-      allow_network = false,
-      allow_filesystem_write = true,      # drills may write transient state (tmp dirs, test DBs)
-      allow_subprocess = true,
-      injection_scope = "system-under-test-only",
-    },
-    metadata = {
-      name = "bust-runner",
-      version = "1.0.0",
-      description = "Exercises declared failure modes and verifies recovery paths. Hard-gates on any failure mode without working recovery.",
-      paired_xfile = "Bustfile.a2ml",
-      author = "Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>",
-    },
-  },
-
-  schema = {
-    failure_modes
-      | Array {
-          id | String,
-          description | String,
-          class | [| 'network, 'disk_full, 'oom, 'timeout, 'partial_write, 'panic, 'crash, 'rollback, 'concurrency |],
-          # TODO: migrate to base.probe_schema (structured probe) when CLI supports it
-          injection_probe | String,          # command that deterministically causes this failure
-          # TODO: migrate to base.probe_schema (structured probe) when CLI supports it
-          recovery_probe | String,           # command that verifies recovery (exit 0 = recovered)
-          expected_recovery_time_seconds | Number | default = 30,
-          # status_core values: 'declared, 'verified, 'failing; bust adds 'drilled
-          status | [| 'declared, 'drilled, 'verified, 'failing |] | default = 'declared,
-          notes | String | optional,
-        },
-  },
-
-  # Runner behaviour — inherits from base.run_defaults.
-  # bust adds record_recovery_times for performance tier feeding.
-  run = base.run_defaults & {
-    on_any_fail = "exit-nonzero",         # missing or broken recovery blocks merge
-    report_format = "a2ml",
-    emit_summary = true,
-    record_recovery_times = true,         # feeds the performance tier
-  },
-}
diff --git a/.machine_readable/contractiles/dust/Dustfile.a2ml b/.machine_readable/contractiles/dust/Dustfile.a2ml
deleted file mode 100644
index 3759b38..0000000
--- a/.machine_readable/contractiles/dust/Dustfile.a2ml
+++ /dev/null
@@ -1,44 +0,0 @@
-# SPDX-License-Identifier: MPL-2.0
-# Dustfile — Cleanup and hygiene contract
-# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
-
-@abstract:
-What should be cleaned up or removed from this repository.
-These are housekeeping items, not blockers.
-@end
-
-## Stale Files
-
-### no-stale-snapshots
-- description: No dated status/completion files in root
-- run: "! ls *-STATUS-*.md *-COMPLETION-*.md *-COMPLETE.md *-VERIFIED-*.md 2>/dev/null | head -1 | grep -q ."
-- severity: info
-
-### no-ai-djot
-- description: AI.djot is a banned legacy file; superseded by .machine_readable/ manifests
-- run: test ! -f AI.djot
-- severity: warning
-
-### no-next-steps
-- description: NEXT_STEPS.md superseded by ROADMAP
-- run: test ! -f NEXT_STEPS.md
-- severity: info
-
-## Build Artifacts
-
-### no-tracked-artifacts
-- description: No build artifacts tracked in git
-- run: "! git ls-files lib/bs/ lib/ocaml/ target/release/ _build/ 2>/dev/null | head -1 | grep -q ."
-- severity: warning
-
-## Format Duplicates
-
-### no-duplicate-contributing
-- description: Only one CONTRIBUTING format (keep .md)
-- run: "! (test -f CONTRIBUTING.md && test -f CONTRIBUTING.adoc)"
-- severity: warning
-
-### no-duplicate-readme
-- description: Only one README format
-- run: "! (test -f README.md && test -f README.adoc && [ $(wc -l < README.md) -gt 5 ])"
-- severity: warning
diff --git a/.machine_readable/contractiles/must/Mustfile.a2ml b/.machine_readable/contractiles/must/Mustfile.a2ml
deleted file mode 100644
index a9f228a..0000000
--- a/.machine_readable/contractiles/must/Mustfile.a2ml
+++ /dev/null
@@ -1,64 +0,0 @@
-# SPDX-License-Identifier: MPL-2.0
-# Mustfile — Physical state contract
-# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
-
-@abstract:
-What MUST be true about this repository's files and configuration.
-These are hard requirements — CI fails if any check fails.
-@end
-
-## File Presence
-
-### license-present
-- description: LICENSE file must exist
-- run: test -f LICENSE
-- severity: critical
-
-### readme-present
-- description: README.adoc or README.md must exist
-- run: test -f README.adoc || test -f README.md
-- severity: critical
-
-### security-policy
-- description: SECURITY.md must exist
-- run: test -f SECURITY.md
-- severity: critical
-
-### contributing
-- description: CONTRIBUTING.md must exist (GitHub community health)
-- run: test -f CONTRIBUTING.md
-- severity: warning
-
-### editorconfig
-- description: .editorconfig must exist
-- run: test -f .editorconfig
-- severity: warning
-
-## SPDX Compliance
-
-### spdx-headers
-- description: All source files must have SPDX-License-Identifier
-- run: "! find src/ -name '*.rs' -o -name '*.res' -o -name '*.idr' -o -name '*.zig' 2>/dev/null | head -20 | xargs grep -L 'SPDX-License-Identifier' 2>/dev/null | head -1 | grep -q ."
-- severity: warning
-
-### no-agpl
-- description: No AGPL-3.0 references in dotfiles
-- run: "! grep -r 'AGPL-3.0' .gitignore .gitattributes .editorconfig 2>/dev/null | head -1 | grep -q ."
-- severity: critical
-
-## Dangerous Patterns
-
-### no-believe-me
-- description: No believe_me in Idris2 code
-- run: "! grep -r 'believe_me' --include='*.idr' . 2>/dev/null | grep -v node_modules | head -1 | grep -q ."
-- severity: critical
-
-### no-sorry
-- description: No sorry in Lean code
-- run: "! grep -r 'sorry' --include='*.lean' . 2>/dev/null | grep -v node_modules | head -1 | grep -q ."
-- severity: critical
-
-### no-admitted
-- description: No Admitted in Coq code
-- run: "! grep -r 'Admitted' --include='*.v' . 2>/dev/null | grep -v node_modules | head -1 | grep -q ."
-- severity: critical
diff --git a/.machine_readable/contractiles/trust/Trustfile.a2ml b/.machine_readable/contractiles/trust/Trustfile.a2ml
deleted file mode 100644
index 2e583a3..0000000
--- a/.machine_readable/contractiles/trust/Trustfile.a2ml
+++ /dev/null
@@ -1,74 +0,0 @@
-# SPDX-License-Identifier: MPL-2.0
-# Trustfile — Integrity and provenance verification
-# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
-
-@abstract:
-Integrity invariants for this repository. These verify that the repo
-has not been tampered with, secrets are not leaked, and provenance
-is traceable.
-@end
-
-## Secrets
-
-### no-secrets-committed
-- description: No credential files in repo
-- run: test ! -f .env && test ! -f credentials.json && test ! -f .env.local && test ! -f .env.production
-- severity: critical
-
-### no-private-keys
-- description: No private key files committed
-- run: "! find . -name '*.pem' -o -name '*.key' -o -name 'id_rsa' -o -name 'id_ed25519' 2>/dev/null | grep -v node_modules | head -1 | grep -q ."
-- severity: critical
-
-### no-tokens-in-source
-- description: No hardcoded API tokens in source
-- run: "! grep -rE '(api[_-]?key|secret|token|password)\s*[:=]\s*[\"'\\''][A-Za-z0-9]{16,}' --include='*.js' --include='*.ts' --include='*.res' --include='*.py' . 2>/dev/null | grep -v node_modules | head -1 | grep -q ."
-- severity: critical
-
-## Provenance
-
-### author-correct
-- description: Git author matches expected identity
-- run: "git log -1 --format='%ae' | grep -qE '(hyperpolymath|j\\.d\\.a\\.jewell)'"
-- severity: warning
-
-### license-content
-- description: LICENSE contains expected identifier
-- run: grep -q 'PMPL\|MPL\|MIT\|Apache\|LGPL' LICENSE
-- severity: warning
-
-## Container Security
-
-### container-images-pinned
-- description: Containerfile uses pinned base images
-- run: test ! -f Containerfile || grep -q 'cgr.dev\|@sha256:' Containerfile
-- severity: warning
-
-### no-dockerfile
-- description: No Dockerfile (use Containerfile)
-- run: test ! -f Dockerfile
-- severity: warning
-
-## Dangerous Patterns
-
-### no-believe-me
-- description: No believe_me, assert_total, Admitted, sorry, unsafeCoerce, Obj.magic
-- run: "! grep -rE 'believe_me|assert_total|Admitted|sorry|unsafeCoerce|Obj\\.magic' --include='*.idr' --include='*.lean' --include='*.v' --include='*.ml' --include='*.hs' . 2>/dev/null | head -1 | grep -q ."
-- severity: critical
-
-### no-unsafe-without-comment
-- description: All unsafe blocks in Rust must have SAFETY comments
-- run: "! grep -B1 'unsafe {' --include='*.rs' -r . 2>/dev/null | grep -v SAFETY | grep 'unsafe {' | head -1 | grep -q ."
-- severity: warning
-
-## Service Security (if applicable)
-
-### localhost-only-bindings
-- description: Backend services bind to 127.0.0.1 only
-- run: "! grep -rE 'bind\\(\"0\\.0\\.0\\.0' --include='*.rs' --include='*.ex' --include='*.ts' . 2>/dev/null | head -1 | grep -q ."
-- severity: critical
-
-### coordination-file-permissions
-- description: Coordination/session files are owner-only (0600)
-- run: test ! -d ~/.claude/coordination || find ~/.claude/coordination -type f ! -perm 600 2>/dev/null | wc -l | grep -q '^0$'
-- severity: warning
diff --git a/build/flake.lock b/build/flake.lock
deleted file mode 100644
index 7e0248c..0000000
--- a/build/flake.lock
+++ /dev/null
@@ -1,61 +0,0 @@
-{
-  "nodes": {
-    "flake-utils": {
-      "inputs": {
-        "systems": "systems"
-      },
-      "locked": {
-        "lastModified": 1731533236,
-        "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
-        "owner": "numtide",
-        "repo": "flake-utils",
-        "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
-        "type": "github"
-      },
-      "original": {
-        "owner": "numtide",
-        "repo": "flake-utils",
-        "type": "github"
-      }
-    },
-    "nixpkgs": {
-      "locked": {
-        "lastModified": 1776949667,
-        "narHash": "sha256-GMSVw35Q+294GlrTUKlx087E31z7KurReQ1YHSKp5iw=",
-        "owner": "NixOS",
-        "repo": "nixpkgs",
-        "rev": "01fbdeef22b76df85ea168fbfe1bfd9e63681b30",
-        "type": "github"
-      },
-      "original": {
-        "owner": "NixOS",
-        "ref": "nixpkgs-unstable",
-        "repo": "nixpkgs",
-        "type": "github"
-      }
-    },
-    "root": {
-      "inputs": {
-        "flake-utils": "flake-utils",
-        "nixpkgs": "nixpkgs"
-      }
-    },
-    "systems": {
-      "locked": {
-        "lastModified": 1681028828,
-        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
-        "owner": "nix-systems",
-        "repo": "default",
-        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
-        "type": "github"
-      },
-      "original": {
-        "owner": "nix-systems",
-        "repo": "default",
-        "type": "github"
-      }
-    }
-  },
-  "root": "root",
-  "version": 7
-}
diff --git a/build/flake.nix b/build/flake.nix
deleted file mode 100644
index 3a6cada..0000000
--- a/build/flake.nix
+++ /dev/null
@@ -1,170 +0,0 @@
-# SPDX-License-Identifier: MPL-2.0
-# Copyright (c) 2026 Jonathan Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
-#
-# Nix flake for llm-grace
-#
-# NOTE: guix.scm is the PRIMARY development environment. This flake is provided
-# as a FALLBACK for contributors who use Nix instead of Guix. The .envrc checks
-# for Guix first, then falls back to Nix.
-#
-# Usage:
-#   nix develop          # Enter development shell
-#   nix build            # Build the project
-#   nix flake check      # Run checks
-#   nix flake show       # Show flake outputs
-#
-# With direnv (.envrc already configured):
-#   direnv allow         # Auto-enters shell on cd
-#
-# TODO: Replace llm-grace and Graceful degradation for concurrent LLM/agent terminals with actual values.
-
-{
-  description = "llm-grace — RSR-compliant project";
-
-  inputs = {
-    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
-    flake-utils.url = "github:numtide/flake-utils";
-  };
-
-  outputs = { self, nixpkgs, flake-utils }:
-    flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" ] (system:
-      let
-        pkgs = import nixpkgs { inherit system; };
-
-        # Common development tools present in every RSR project.
-        commonTools = with pkgs; [
-          git
-          just
-          nickel
-          curl
-          bash
-          coreutils
-        ];
-
-        # ---------------------------------------------------------------
-        # Language-specific packages: uncomment the stacks you need.
-        # ---------------------------------------------------------------
-        #
-        # Rust:
-        #   rustc cargo clippy rustfmt rust-analyzer
-        #
-        # Elixir:
-        #   elixir erlang
-        #
-        # Gleam:
-        #   gleam erlang
-        #
-        # Zig:
-        #   zig zls
-        #
-        # Haskell:
-        #   ghc cabal-install haskell-language-server
-        #
-        # Idris2:
-        #   idris2
-        #
-        # OCaml:
-        #   ocaml dune_3 ocaml-lsp
-        #
-        # ReScript (via Deno):
-        #   deno
-        #
-        # Julia:
-        #   julia
-        #
-        # Ada/SPARK:
-        #   gnat gprbuild
-        #
-        # ---------------------------------------------------------------
-        languageTools = with pkgs; [
-          # TODO: Uncomment or add packages for your stack.
-          # Example for a Rust project:
-          # rustc
-          # cargo
-          # clippy
-          # rustfmt
-          # rust-analyzer
-        ];
-
-      in
-      {
-        # ---------------------------------------------------------------
-        # Development shell — `nix develop`
-        # ---------------------------------------------------------------
-        devShells.default = pkgs.mkShell {
-          name = "llm-grace-dev";
-
-          buildInputs = commonTools ++ languageTools;
-
-          # Environment variables available inside the shell.
-          env = {
-            PROJECT_NAME = "llm-grace";
-            RSR_TIER = "infrastructure";
-          };
-
-          shellHook = ''
-            echo ""
-            echo "  llm-grace — development shell"
-            echo "  Nix:    $(nix --version 2>/dev/null || echo 'unknown')"
-            echo "  Just:   $(just --version 2>/dev/null || echo 'not found')"
-            echo ""
-            echo "  Run 'just' to see available recipes."
-            echo ""
-
-            # Source .envrc manually when direnv is not managing the shell.
-            # This keeps project env vars (PROJECT_NAME, DATABASE_URL, etc.)
-            # consistent whether you enter via 'nix develop' or 'direnv allow'.
-            if [ -z "''${DIRENV_IN_ENVRC:-}" ] && [ -f .envrc ]; then
-              # Only source the non-nix parts to avoid recursion.
-              export PROJECT_NAME="llm-grace"
-              export RSR_TIER="infrastructure"
-              if [ -f .env ]; then
-                set -a
-                . .env
-                set +a
-              fi
-            fi
-          '';
-        };
-
-        # ---------------------------------------------------------------
-        # Package — `nix build`
-        # ---------------------------------------------------------------
-        packages.default = pkgs.stdenv.mkDerivation {
-          pname = "llm-grace";
-          version = "0.1.0";
-
-          src = self;
-
-          # TODO: Replace with real build instructions.
-          # Examples:
-          #
-          # Rust (use rustPlatform.buildRustPackage instead of stdenv):
-          #   packages.default = pkgs.rustPlatform.buildRustPackage { ... };
-          #
-          # Elixir (use mixRelease):
-          #   packages.default = pkgs.beamPackages.mixRelease { ... };
-          #
-          # Zig:
-          #   buildPhase = "zig build -Doptimize=ReleaseSafe";
-
-          buildPhase = ''
-            echo "TODO: Add build commands for llm-grace"
-          '';
-
-          installPhase = ''
-            mkdir -p $out/share/doc
-            cp README.adoc $out/share/doc/ 2>/dev/null || true
-          '';
-
-          meta = with pkgs.lib; {
-            description = "Graceful degradation for concurrent LLM/agent terminals";
-            homepage = "https://github.com/hyperpolymath/llm-grace";
-            license = licenses.mpl20; # MPL-2.0 extends MPL-2.0
-            maintainers = [];
-            platforms = [ "x86_64-linux" "aarch64-linux" ];
-          };
-        };
-      }
-    );
-}
diff --git a/manifest.scm b/manifest.scm
new file mode 100644
index 0000000..dd942c7
--- /dev/null
+++ b/manifest.scm
@@ -0,0 +1,24 @@
+;;; SPDX-License-Identifier: MPL-2.0
+;;; manifest.scm — Generic Guix manifest for RSR-compliant projects
+;;;
+;;; Usage:
+;;;   guix shell -m manifest.scm
+;;;
+
+(specifications->manifest
+  '(;; Core development tools
+    "git"
+    "just"
+    "nickel"
+    "curl"
+    "bash"
+    "coreutils"
+
+    ;; Documentation
+    "asciidoctor"
+    "pandoc"
+
+    ;; Common build dependencies
+    "openssl"
+    "zlib"
+    "pkg-config"))
