Skip to content

Commit e2252af

Browse files
chore: add RSR git hooks + AFFIRMATION.adoc + 2026-06-15 handoff/status (#271)
Three additive artifacts from the 2026-06-15 estate-maintenance session. All new files, SPDX-headered; no existing code touched. ## `hooks/` — closes #254 item 2 echidna was missing the RSR `hooks/` dir (pre-commit enforcement) that echidnabot already has — surfaced by the rsr-template ↔ standards divergence check. - `pre-commit` → `just pre-commit` (fmt-check + lint [REUSE/SPDX + rustfmt + clippy] + test) - `pre-push` → `just validate-rsr` (RSR-H12) - `README.md` → opt-in via `git config core.hooksPath hooks`; each hook no-ops with a warning if `just` is absent. ## `AFFIRMATION.adoc` (root) Point-in-time honesty attestation per the RSR/CCCP audit gate (`rsr-template-repo/AUDIT.adoc`): claims don't outrun proofs; **verified** (proof corpus green, ABI zero-`believe_me`, all jobs timed-out, governance green) vs **aspirational** (ML-at-scale, Cap'n Proto, Stages 5–8) vs **known-debt** (#245/#250/#216/#251/#254); CRG-C complete, B not affirmed. Timestamped `:revdate: 2026-06-15`. > Provenance: the canonical standards AFFIRMATION template was **not reachable** from the session (404 at standards / rsr-template-repo / rhodium-standard-repositories; out of GitHub scope). Built to the reachable `AUDIT.adoc` gate + `RSR_COMPLIANCE.adoc` conventions — reconcile against the canonical template if one exists. ## `docs/handover/SESSION-HANDOFF-2026-06-15.md` MUST / INTEND / WISH status tables for **both** repos, the hard-constraint carry-forward list, and a ready-to-paste **prompt for the next session**. Draft until reviewed. https://claude.ai/code/session_01UAqDQaMwpUqWHUSZekGZWv --- _Generated by [Claude Code](https://claude.ai/code/session_01UAqDQaMwpUqWHUSZekGZWv)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 7c3495a commit e2252af

5 files changed

Lines changed: 210 additions & 0 deletions

File tree

AFFIRMATION.adoc

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
// SPDX-License-Identifier: MPL-2.0
2+
// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
3+
4+
= ECHIDNA — Affirmation of Honest State
5+
Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
6+
:revdate: 2026-06-15
7+
:toc:
8+
9+
A point-in-time honesty attestation, per the RSR / CCCP audit gate
10+
(`AUDIT.adoc` in `rsr-template-repo`): an affirmation that ECHIDNA's public
11+
claims do not outrun the proofs, tests, and artefacts that back them, with a
12+
plain disclosure of what is verified, what is aspirational, and what is
13+
known-debt as of the date above.
14+
15+
Companion to `RSR_COMPLIANCE.adoc` (hard-rule compliance) and `EXPLAINME.adoc`
16+
(receipts for README claims). Canonical live state: `CHANGELOG.md` + the git
17+
log + open issues.
18+
19+
[NOTE]
20+
====
21+
The canonical standards AFFIRMATION template was not reachable from the
22+
authoring session (outside repo scope at the time). This document follows the
23+
audit-gate rules in `rsr-template-repo/AUDIT.adoc` and the conventions of
24+
`RSR_COMPLIANCE.adoc`; reconcile it against the canonical template when
25+
available.
26+
====
27+
28+
== Affirmations
29+
30+
. *Claims do not outrun artefacts.* Every "verified" item below is reproduced in
31+
CI or by a named test/proof. Direction-of-travel items are labelled
32+
aspirational and make no readiness claim.
33+
. *No hidden proof debt.* Known gaps are disclosed under "Known debt" below, not
34+
buried; where stubs exist they are named.
35+
. *Stability discipline.* ECHIDNA is *not* affirmed `stable` or `v1.0.0`; the
36+
real release line is in `CHANGELOG.md`.
37+
. *Critical Reception Grade.* CRG-C is complete (unit + smoke + build + P2P +
38+
E2E + contract + aspect + benchmarks baselined, per
39+
`.machine_readable/6a2/STATE.a2ml`); CRG-B criteria are populated but B is
40+
*not* formally affirmed here.
41+
42+
== Verified as of 2026-06-15 (green / reproduced)
43+
44+
* Multi-language dogfood proof corpus — Coq, Lean 4, Agda, Idris2 — type-checks
45+
in CI (`dogfood-proofs-ci.yml` + `idris2-abi-ci.yml`); merged via #234 / #244.
46+
* Idris2 ABI carries zero `believe_me` / `assert_total` / `postulate`
47+
(enforced by `idris2-abi-ci.yml`).
48+
* Every CI workflow job carries an explicit `timeout-minutes` bound (#247).
49+
* Governance gates green on `main`: REUSE/SPDX, workflow-linter, A2ML manifest
50+
validation, K9 contracts, SPARK theatre gate.
51+
52+
== Aspirational (direction of travel — NOT done)
53+
54+
* ML-at-scale: GNN/Transformer training on the real corpus (scaffolds present,
55+
weights not trained on real data).
56+
* Cap'n Proto IPC; full Chapel-parallel dispatch; coprocessor hardware paths.
57+
* Stages 5–8 of `docs/ROADMAP.md` (distributed, cross-prover semantics,
58+
sovereign tooling, self-verified kernel).
59+
60+
== Known debt (disclosed, not hidden)
61+
62+
* `--features verisim`: 22 compile errors; feature gated off by default (#245).
63+
* `formal-verification.yml` `creusot-verify` red — `alt-ergo` not
64+
apt-installable (#250).
65+
* `src/rust/main.rs` SPDX-FileCopyrightText hook blocks commits to that file
66+
(#216) — owner-only fix; gates the 13-adapter dispatcher branch.
67+
* Prover-count drift across surfaces vs `docs/PROVER_COUNT.md` (#251).
68+
* RSR divergences vs the standards repo: stale `salt/` Python wording, and the
69+
polyglot language set not yet declared as an out-of-template adaptation
70+
(#254). The RSR `hooks/` requirement is addressed in the change that
71+
introduces this file.
72+
73+
== Scope
74+
75+
This affirmation covers `hyperpolymath/echidna`. `echidnabot` maintains its own
76+
state; its `proofs/coq/admitted_stub.v` and `proofs/lean/sorry_stub.lean` are
77+
*intentional* dogfood-CI failures, disclosed in its `CLAUDE.md`.
78+
79+
== Affirmed
80+
81+
Affirmed during the 2026-06-13/15 estate-maintenance session (Claude Code),
82+
pending owner counter-sign.
83+
84+
Owner: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>.
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<!-- SPDX-License-Identifier: MPL-2.0 -->
2+
<!-- SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> -->
3+
# Session handoff — 2026-06-15
4+
5+
Snapshot of the estate-reconciliation work (echidna + echidnabot) for the next
6+
session. Master tracker **echidna#238 is closed**; remaining work is split into
7+
discrete issues, captured below by normative tier (MUST / INTEND / WISH).
8+
9+
Legend: **done** = merged this campaign · **open** = tracked issue · **owner** =
10+
needs the repo owner (policy/SPDX/branch-delete) · **blocked** = gated on another item.
11+
12+
## Status — ECHIDNA
13+
14+
| Tier | Item | Status | Ref |
15+
|------|------|--------|-----|
16+
| MUST | Proof corpus repaired + CI-gated (Coq/Lean/Agda/Idris2) | done | #234 / #244 |
17+
| MUST | Every workflow job has `timeout-minutes` | done | #247 (closed #241) |
18+
| MUST | `hooks/` dir (RSR pre-commit-enforcement requirement) | this PR | #254·2 |
19+
| MUST | `src/rust/main.rs` SPDX hook blocks *all* commits to it | open · owner 1-liner | #216 |
20+
| MUST | `creusot-verify` CI red (`alt-ergo` not apt-installable) | open | #250 |
21+
| MUST | `salt/`/Python rule stale vs standards (no `salt/` exists) | open · owner doc | #254·1 |
22+
| MUST | Prover-count drift (48/105/113/128 vs `PROVER_COUNT.md`) | open · owner (R5a) | #251 |
23+
| INTEND | `--features verisim` 22 compile errors | open | #245 |
24+
| INTEND | machine_readable + contractile currency audit | open | #252 |
25+
| INTEND | Reconcile remaining RSR divergences (lang-tier undeclared) | open | #254·3 |
26+
| INTEND | Delete 6 reconciled stale branches | open · owner (proxy 403) | #253 |
27+
| INTEND | Wire 13 dispatcher adapters | blocked by #216 | `feat/corpus-dispatcher-all-17-adapters` |
28+
| INTEND | Structural-drift stale paths; ReScript→AffineScript migration | open | #242, #240, #266 |
29+
| WISH | Split Rust/FFI/proof safety alerts by risk class | open | #239 |
30+
| WISH | GNN-at-scale; Cap'n Proto / Chapel-full / coprocessors; 8-stage endpoint | aspirational | `docs/ROADMAP.md` |
31+
32+
## Status — ECHIDNABOT
33+
34+
| Tier | Item | Status | Ref |
35+
|------|------|--------|-----|
36+
| MUST | README test-count 129→184 + ProverSlug | done | #86 |
37+
| MUST | `echidna-fuzz` rate-limit-check timeout | done | #89 |
38+
| MUST | `LICENSE` missing SPDX header (Licence-consistency fails every PR) | open · owner-only | #87 |
39+
| MUST | `.gitignore`/`.gitattributes` PMPL→MPL SPDX drift | open · owner-only | #83 |
40+
| MUST | `gitbot-shared-context` path dep (no bare-clone build) | accepted debt — do not fix | #18 |
41+
| MUST-NOT | `admitted_stub.v` / `sorry_stub.lean` | intentional dogfood failures — leave ||
42+
| INTEND | Post-checkpoint hygiene (STATE dual-truth, SESSION_SUMMARY, contractiles, `.scm`, SONNET-TASKS, `curl\|sh`) | open | #88 |
43+
| INTEND | `proof-debt.md` TBD→rationale; cflite shared-context vendoring | open | #68, #67 |
44+
| WISH | Codeberg adapter; pre-built Podman images; K8s distributed; full bot-modes | aspirational | #62, #61, #59 |
45+
46+
## Hard constraints (carry forward — these OVERRIDE defaults)
47+
- **Languages:** no Python (the `salt/` exception was removed upstream), no TypeScript, no Go. Use Rust / Julia / Idris2 / Agda / Zig / Chapel / AffineScript / Nickel per `CLAUDE.md`.
48+
- **Build:** Justfile primary (RSR-H14). **Containers:** Podman + `Containerfile`, never Docker/`Dockerfile` (RSR-H15). **Packaging:** Guix; **no Nix** (`flake.nix`/`flake.lock` banned estate-wide).
49+
- **SPDX / LICENSE edits are owner-only, manual, file-by-file** (#216 / #83 / #87) — never automate; automated sweeps must not touch licence headers.
50+
- **echidnabot dogfood stubs** (`admitted_stub.v`, `sorry_stub.lean`) are intentional failures — never "fix".
51+
- **echidnabot** cannot `cargo build` from a bare clone (path-dep #18) — for code work use a `gitbot-fleet` monorepo checkout; doc work is fine standalone.
52+
- **Branch ref-deletes return HTTP 403** via the session git proxy and the GitHub MCP has no delete-branch tool, so branch cleanup (#253) is **owner-only**.
53+
- Develop on `claude/<topic>` branches; open **draft** PRs; be **frugal** with GitHub comments.
54+
55+
## Prompt for the next session
56+
57+
Copy-paste the block below to the next Claude:
58+
59+
> Continue estate maintenance on `hyperpolymath/echidna` + `hyperpolymath/echidnabot`.
60+
>
61+
> **First read:** echidna issue #238 (closed master checkpoint), `docs/handover/SESSION-HANDOFF-2026-06-15.md`, `AFFIRMATION.adoc`, and both repos' `CLAUDE.md` (their rules OVERRIDE defaults).
62+
>
63+
> **Where things stand:** the multi-language proof corpus is repaired, CI-gated, and green on `main`; the master checkpoint is closed; all this campaign's PRs merged. Remaining work is in discrete issues, grouped MUST / INTEND / WISH in the handoff doc.
64+
>
65+
> **Pick up in this order:**
66+
> 1. *Flag to the owner (don't auto-do — SPDX/policy/branch-delete):* #216 (main.rs SPDX hook — unblocks the `feat/corpus-dispatcher-all-17-adapters` branch), echidnabot #87 + #83 (LICENSE/SPDX), #251 (prover-count — fix the GitHub repo description first), #253 (delete the 6 stale branches).
67+
> 2. *Doable now, as draft PRs:* #250 (install `alt-ergo` via opam in `formal-verification.yml`), #245 (`--features verisim` — 22 compile errors), #252 (machine_readable + contractile currency audit — run a Haiku scout before bulk edits), #254 (reconcile the RSR divergences: drop the stale `salt/` wording, declare the polyglot language set as an out-of-template adaptation), echidnabot #88 (hygiene).
68+
>
69+
> **Honor the hard constraints** in the handoff doc (SPDX = owner-only; dogfood stubs intentional; Podman/Justfile/Guix; no Python/TS/Go). Develop on `claude/<topic>` branches, open draft PRs, keep GitHub comments frugal.
70+
71+
---
72+
_Generated 2026-06-15. Source of truth for status: the linked issues + `CHANGELOG.md` + git log; this snapshot drifts._

hooks/README.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<!-- SPDX-License-Identifier: MPL-2.0 -->
2+
<!-- SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> -->
3+
# Git hooks
4+
5+
Governance hooks for ECHIDNA — the RSR `hooks/` requirement (pre-commit
6+
enforcement). Each wraps the same `just` gate CI runs, so commits and pushes
7+
fail fast on the same checks.
8+
9+
| Hook | Runs | Covers |
10+
|------|------|--------|
11+
| `pre-commit` | `just pre-commit` | fmt-check + lint (REUSE/SPDX + rustfmt + clippy) + test |
12+
| `pre-push` | `just validate-rsr` | RSR compliance gate (RSR-H12) |
13+
14+
## Enable
15+
16+
Hooks are opt-in. Point git at this directory once per clone:
17+
18+
```bash
19+
git config core.hooksPath hooks
20+
```
21+
22+
Disable with `git config --unset core.hooksPath`. Each hook no-ops with a
23+
warning if `just` is not on PATH, so a missing toolchain never hard-blocks a
24+
commit.

hooks/pre-commit

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#!/usr/bin/env bash
2+
# SPDX-License-Identifier: MPL-2.0
3+
# SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
#
5+
# ECHIDNA pre-commit hook — satisfies the RSR hooks/ requirement
6+
# (pre-commit enforcement). Wraps the same fast gate CI runs.
7+
# Enable per clone: git config core.hooksPath hooks
8+
set -euo pipefail
9+
10+
if ! command -v just >/dev/null 2>&1; then
11+
echo "pre-commit: 'just' not on PATH (RSR-H14 build tool); skipping gate." >&2
12+
exit 0
13+
fi
14+
15+
# fmt-check + lint (REUSE/SPDX + rustfmt + clippy) + test — Justfile `pre-commit`.
16+
exec just pre-commit

hooks/pre-push

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#!/usr/bin/env bash
2+
# SPDX-License-Identifier: MPL-2.0
3+
# SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
#
5+
# ECHIDNA pre-push hook — RSR compliance gate (RSR-H12).
6+
# Enable per clone: git config core.hooksPath hooks
7+
set -euo pipefail
8+
9+
if ! command -v just >/dev/null 2>&1; then
10+
echo "pre-push: 'just' not on PATH; skipping RSR gate." >&2
11+
exit 0
12+
fi
13+
14+
exec just validate-rsr

0 commit comments

Comments
 (0)