estate: the SLH-DSA (FIPS 205) campaign enters the map — two new entities

Two repos joined the estate on 2026-07-22; both renderings (ESTATE.md +
cockpit /estate) gain their cards, with every fact recomputed from the
repos themselves:

- fips205-source (upstream lane): verbatim snapshot of
  integritychain/fips205 (pure-Rust FIPS 205 / SLH-DSA), upstream pin
  30bac08, snapshot head 5dca0db — single deviation: upstream CI
  workflows stripped, documented in-commit. Aeneas-compat patches land
  there as transparent, individually-justified commits; nothing is
  proposed upstream.
- fips205-slhdsa-verified (subject lane): SLH-DSA-SHA2-128s verify-path
  campaign, marked exactly as its own check.sh says — CAMPAIGN IN
  PROGRESS, zero certificates, non-green by design. NOT attested; the
  map does not imply otherwise.

Also:
- liveness board now probes fips205-slhdsa-verified (a sibling under
  the default repos root). fips205-source is deliberately NOT probed:
  the upstream-source shelf lives outside that root, like the five
  existing source clones (comment documents the decision).
- drift tripwire (test_estate_view_and_estate_md_do_not_drift) extended
  with both new sentinel names.
- stale fact chip refreshed in both renderings: pacta suite 135 → 144
  green (the suite grew during the cockpit era; chip was never bumped).
- estateview's pasta dossier no longer calls the curve layer "the one
  open verification task in the estate" — the campaign is a second.

Suite 144 green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mrwulf 2026-07-22 22:02:39 +02:00
parent aff1c32fc5
commit fd2f6baa36
4 changed files with 28 additions and 8 deletions

View file

@ -7,9 +7,10 @@ including the two self-referential loops that make the estate hard to
keep in one head. Maintained here in pacta because pacta is the
machinery hub and the only repo that changes freely.
State snapshot (2026-07-19): log **13 leaves**, root `3488a2d0…`, key
State snapshot (2026-07-22): log **13 leaves**, root `3488a2d0…`, key
fingerprint `874c8a00…`, paper **v0.9 camera-ready (23 pp)**, five
attested components, pacta suite 135 green.
attested components, one campaign open (SLH-DSA — **zero
certificates**), pacta suite 144 green.
```mermaid
flowchart LR
@ -19,6 +20,7 @@ flowchart LR
s3["risc0-…-dalek-source"]
s4["betrusted-…-dalek-source"]
s5["pasta_curves-source"]
s6["fips205-source"]
end
subgraph V["VERIFIED SUBJECTS"]
d["dalek-ed25519-verified<br/>16 certs · leaf 8 · signer source"]
@ -26,6 +28,7 @@ flowchart LR
r["risc0-ed25519-verified<br/>16 certs · leaf 10"]
b["betrusted-ed25519-verified<br/>16 certs · leaf 11"]
p["pasta-pallas-verified<br/>field layer only · NOT attested"]
f["fips205-slhdsa-verified<br/>campaign in progress · 0 certs · NOT attested"]
c["ltl-accumulator-verified<br/>61 certs · entry-13 subject · frozen 172a1d0"]
end
subgraph M["MACHINERY — pacta + operator-held"]
@ -57,6 +60,7 @@ flowchart LR
s3 --> r
s4 --> b
s5 --> p
s6 --> f
d -->|attest| prov
a -->|attest| prov
r -->|attest| prov
@ -85,8 +89,8 @@ flowchart LR
classDef held fill:#2b3442,stroke:#2b3442,color:#e8ecf2
classDef pub fill:#efe9f5,stroke:#6d4a8f,color:#1c2430
classDef cons fill:#fdf0da,stroke:#a86a10,color:#1c2430
class s1,s2,s3,s4,s5 src
class d,a,r,b,p,c sub
class s1,s2,s3,s4,s5,s6 src
class d,a,r,b,p,c,f sub
class prov,sig,lib,wal,pap,crs mach
class key,ops,sd held
class mir,site,fj,book pub
@ -115,8 +119,10 @@ deployed verifier; see the corpus KNOWN-GAPS ledger).
| Repository | Lane | Role | Mutability |
|---|---|---|---|
| `curve25519-dalek-source`, `anza-cryptography-source`, `risc0-…-source`, `betrusted-…-source`, `pasta_curves-source` (+ `xous-core`, `litex-boards` context) | upstream | pinned inputs to extraction | **frozen — never modified** |
| `fips205-source` | upstream | verbatim snapshot of `integritychain/fips205` (pure-Rust FIPS 205 / SLH-DSA); upstream pin `30bac08`, snapshot head `5dca0db` — single deviation: upstream CI workflows stripped, documented in-commit | pinned; moves only for transparent, individually-justified Aeneas-compat patches (nothing proposed upstream) |
| `dalek-` / `anza-` / `risc0-` / `betrusted-ed25519-verified` | subject | Rust source + Lean proofs; 16 certs each; attested (leaves 811, generations at 07) | frozen at attested commits; branch moves only for docs |
| `pasta-pallas-verified` | subject | field layer proven; curve layer pending; **not attested** | changes freely |
| `fips205-slhdsa-verified` | subject | SLH-DSA (FIPS 205) verify-path campaign, parameter set SLH-DSA-SHA2-128s; **campaign in progress — zero certificates, `check.sh` non-green by design**; not attested | changes freely — campaign |
| `ltl-accumulator-verified` | subject | 61-cert corpus about the log's accumulator model; **entry-13 subject**, frozen `172a1d0` | frozen; doc-only commits allowed |
| `proof-aware-crypto-tooling-agent` (this repo) | machinery | provider service, consumer library, warden (+ local read-only cockpit), dogfood signer, paper, course, tests | **changes freely — the hub** |
| `lean-transparency-log` | published | the public mirror: leaves, heads, receipts, fail-closed `verify.py` + selftest | **generated by publish** — canonical files here, templates in pacta, CI-pinned |
@ -133,7 +139,7 @@ deployed verifier; see the corpus KNOWN-GAPS ledger).
| **Operational log state** | `provider/state/transparency-log-main` — the true accumulator. Appends happen here; the mirror is its projection. |
| **Evidence archive (offline)** | review kits and stamped artifacts (`_timestamp_hash8` convention); never in git. |
## What is running (operations, verified 2026-07-20)
## What is running (operations, verified 2026-07-20; campaign rows 2026-07-22)
| Entity | Runtime | Where | Starts / stops |
|---|---|---|---|
@ -143,6 +149,7 @@ deployed verifier; see the corpus KNOWN-GAPS ledger).
| provider write side (check / append / publish / sign) | **on demand** | operator machine | runs only during an append ceremony, minutes at a time; the signing key is offline otherwise |
| warden (the financial agent) | **not running** | nowhere | implemented prototype: a wallet directory plus CLI/MCP/cockpit processes that exist only while explicitly started; no deployed instance, no funds watched |
| custody cockpit | **on demand** | operator machine, localhost | `pacta wallet cockpit`, stops with Ctrl-C; read-only |
| SLH-DSA campaign (`fips205-source` + `fips205-slhdsa-verified`) | **no process** | — | static repos, **zero certificates yet**; extraction/proof sessions are episodic operator-machine runs under lean-guard |
| everything else (repos, paper, book, mirror, SD) | **no process** | — | static files; consumers and reviewers are external and episodic |
The human-facing interactive rendering of this whole map, runtime

View file

@ -123,8 +123,9 @@ ESTATE_HTML = r'''<title>LTL estate map — repos, services, loops</title>
<span class="fact">key <b class="mono">874c8a00</b></span>
<span class="fact">paper <b>v0.9 · 23 pp · camera-ready</b></span>
<span class="fact">attested components <b>5</b></span>
<span class="fact">pacta suite <b>135 green</b></span>
<span class="fact">state as of <b>2026-07-20</b></span>
<span class="fact">pacta suite <b>144 green</b></span>
<span class="fact">SLH-DSA campaign <b>open 0 certificates</b></span>
<span class="fact">state as of <b>2026-07-22</b></span>
</div>
<div class="facts" style="padding-top:.15rem">
<span class="fact" style="border-color:#1e7f4f"><b style="color:#1e7f4f">ALWAYS ON</b> droplet: caddy (TLS, static blog) &middot; LTL web service (read-only container) &middot; Forgejo (+ 03:00 mirror cron)</span>
@ -155,6 +156,7 @@ ESTATE_HTML = r'''<title>LTL estate map — repos, services, loops</title>
<div class="node" id="srcRisc0"><h3 class="mono">risc0--dalek-source</h3><div class="role">RISC Zero fork, pinned clone</div></div>
<div class="node" id="srcBet"><h3 class="mono">betrusted--dalek-source</h3><div class="role">Betrusted fork (+ xous-core, litex-boards context)</div></div>
<div class="node" id="srcPasta"><h3 class="mono">pasta_curves-source</h3><div class="role">Pasta curves, pinned clone</div></div>
<div class="node" id="srcFips205"><h3 class="mono">fips205-source</h3><div class="role">integritychain FIPS 205 (SLH-DSA), pinned snapshot</div></div>
</div>
</div>
@ -170,6 +172,8 @@ ESTATE_HTML = r'''<title>LTL estate map — repos, services, loops</title>
<div class="chips"><span class="chip ok">attested</span></div></div>
<div class="node" id="pasta"><h3 class="mono">pasta-pallas-verified</h3><div class="role">field layer proven · curve layer pending</div>
<div class="chips"><span class="chip warn">not attested</span></div></div>
<div class="node" id="fips"><h3 class="mono">fips205-slhdsa-verified</h3><div class="role">SLH-DSA-SHA2-128s verify path · skeleton 0 certificates</div>
<div class="chips"><span class="chip warn">campaign in progress</span><span class="chip warn">not attested</span></div></div>
<div class="node" id="corpus"><h3 class="mono">ltl-accumulator-verified</h3><div class="role">61 certs · proofs about the log's own accumulator model</div>
<div class="chips"><span class="chip ok">attested · entry 13</span><span class="chip frz">frozen 172a1d0</span><span class="chip l2">loop 2</span></div></div>
</div>
@ -241,9 +245,11 @@ const RUNTIME = {
srcDalek:"frozen clone — nothing runs", srcAnza:"frozen clone — nothing runs",
srcRisc0:"frozen clone — nothing runs", srcBet:"frozen clone — nothing runs",
srcPasta:"frozen clone — nothing runs",
srcFips205:"pinned snapshot — nothing runs; moves only for documented Aeneas-compat patches",
dalek:"static repo — proofs replay on demand", anza:"static repo — proofs replay on demand",
risc0:"static repo — proofs replay on demand", bet:"static repo — proofs replay on demand",
pasta:"static repo — open work, run manually", corpus:"frozen repo — replay on demand",
fips:"static repo — no process; campaign sessions are episodic operator-machine runs under lean-guard; check.sh exits non-green by design",
provider:"SPLIT: the write side (check/append/publish) runs ON DEMAND on the operator machine, only during a ceremony; the read-only web face runs ALWAYS ON in the droplet container",
signer:"on demand — invoked only while signing during a ceremony; key offline otherwise",
conslib:"library — runs inside whichever consumer invokes it",
@ -269,11 +275,13 @@ const DOSSIER = {
srcRisc0:{lane:"Upstream inputs",mut:"frozen",facts:["Pinned clone of the RISC Zero dalek fork.","Input to extraction; never modified."]},
srcBet:{lane:"Upstream inputs",mut:"frozen",facts:["Pinned clone of the Betrusted dalek fork.","xous-core and litex-boards sit alongside as platform context.","Input to extraction; never modified."]},
srcPasta:{lane:"Upstream inputs",mut:"frozen",facts:["Pinned clone of the Pasta curves crate.","Feeds pasta-pallas-verified; never modified."]},
srcFips205:{lane:"Upstream inputs",mut:"frozen",facts:["Verbatim snapshot of integritychain/fips205 — pure-Rust FIPS 205 / SLH-DSA (zero unsafe, no_std, const-generic).","Pinned at upstream 30bac08 (2025-09-01); snapshot head 5dca0db — the single deviation from verbatim is stripping upstream CI workflows, documented in that commit.","Aeneas-compat patches land HERE as transparent, individually-justified commits; nothing is proposed upstream (no affiliation)."]},
dalek:{lane:"Verified subjects",mut:"frozen",facts:["16 reviewed certificates: field, group law, scalars, signature apex (T1T4).","Attested in all three log generations; current leaf 8.","LOOP 1 anchor: the dogfood signer binary is built from this source — the log's heads are signed by code whose proofs are inside the log.","Attestation pins a commit; the branch only moves for docs."]},
anza:{lane:"Verified subjects",mut:"frozen",facts:["16 reviewed certificates; current leaf 9.","Same proof pyramid as dalek, rebuilt for the fork's code structure."]},
risc0:{lane:"Verified subjects",mut:"frozen",facts:["16 reviewed certificates; current leaf 10.","Differs from Betrusted's corpus by 27 changed proof lines (the paper's portability datum)."]},
bet:{lane:"Verified subjects",mut:"frozen",facts:["16 reviewed certificates; current leaf 11."]},
pasta:{lane:"Verified subjects",mut:"free",facts:["Field layer proven from own extraction; curve layer (group law + scalar mul) is the one open verification task in the estate.","NOT attested — the log carries only the four Ed25519 forks + the corpus."]},
pasta:{lane:"Verified subjects",mut:"free",facts:["Field layer proven from own extraction; curve layer (group law + scalar mul) remains open work.","NOT attested — the log carries only the four Ed25519 forks + the corpus."]},
fips:{lane:"Verified subjects",mut:"free",facts:["CAMPAIGN IN PROGRESS — ZERO certificates: verification/check.sh exits non-green and says so; that script is the only source of the word «proven» for this repo.","Scope: the FIPS 205 verify path only (slh_verify → fors / hypertree → xmss → wots → chain), parameter set SLH-DSA-SHA2-128s; keygen and signing are trusted base, exactly as ed25519 signing was.","The six SHA-2 hash oracles are opaque external models (TRUSTED-BASE.md), kept outside every future certificate's dependency cone.","Gate-0 (2026-07-22): Charon clean; Aeneas translated the whole cone with exactly one obstruction class (the Hashers fn-pointer struct) — campaign phase 1 is the compat patch in fips205-source.","NOT attested — the log carries nothing from this campaign yet."]},
corpus:{lane:"Verified subjects",mut:"frozen",facts:["61 certificates over one boundary axiom (LTLAcc.sha256); 222-constant environment inventory; 15-gap honest ledger.","Mechanizes the archived report's §6: extractors, consistency binding, per-step pin safety.","LOOP 2 anchor: attested INTO the log as entry 13 — the log carries kernel-checked proofs about its own accumulator model.","Frozen at 172a1d0 (the attested commit); doc-only commits may move the branch.","Docs carry numbering notes: paper references are v0.2 numbering."]},
provider:{lane:"pacta · machinery",mut:"free",facts:["pacta_provider: attestation check → log-append → log-publish; webdocs homepage + /v1 API code.","Holds the publish TEMPLATES for the mirror's verify.py / selftest / README — since 2026-07-19 pinned by CI (test_published_assets) after the audit caught a stale fail-open template.","Deploys to the droplet as the ltl container."]},
signer:{lane:"pacta · machinery",mut:"free",facts:["verified-dalek-serial: the Ed25519 binary built from the attested dalek source.","Signs every tree head; before signing, the provider re-checks inclusion of the signer's own leaf.","LOOP 1: signature vouches for the tree; the tree contains the attestation of the signer's source (leaf 8). Execution provenance is reported, not proven — stated in the paper."]},
@ -299,6 +307,7 @@ const EDGES = [
["srcDalek","dalek","","extract"],["srcAnza","anza","","extract"],
["srcRisc0","risc0","","extract"],["srcBet","bet","","extract"],
["srcPasta","pasta","","extract"],
["srcFips205","fips","","extract"],
["dalek","provider","","attest"],["anza","provider","","attest"],
["risc0","provider","","attest"],["bet","provider","","attest"],
["provider","opstate","append","publish"],

View file

@ -36,6 +36,8 @@ SERVICES: list[tuple[str, str, str]] = [
]
# local working copies expected as siblings of this repo checkout
# (the upstream-source shelf — curve25519-dalek-source, fips205-source, … —
# lives outside this root and is deliberately not probed here)
LOCAL_REPOS: list[str] = [
"lean-transparency-log",
"ltl-accumulator-verified",
@ -45,6 +47,7 @@ LOCAL_REPOS: list[str] = [
"risc0-ed25519-verified",
"betrusted-ed25519-verified",
"pasta-pallas-verified",
"fips205-slhdsa-verified",
"proof-aware-crypto-tooling-agent",
]

View file

@ -232,6 +232,7 @@ def test_estate_view_and_estate_md_do_not_drift():
for name in ("lean-transparency-log", "ltl-accumulator-verified",
"proof-aware-crypto-tooling-agent", "verifying-crypto-with-lean",
"dalek-ed25519-verified", "pasta-pallas-verified",
"fips205-source", "fips205-slhdsa-verified",
"ltl.zkdefi.org", "Forgejo"):
assert name in ESTATE_HTML, f"estate view lost: {name}"
assert name in estate_md, f"ESTATE.md lost: {name}"