diff --git a/ESTATE.md b/ESTATE.md index 8f3745c..cf9fb49 100644 --- a/ESTATE.md +++ b/ESTATE.md @@ -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
16 certs · leaf 8 · signer source"] @@ -26,6 +28,7 @@ flowchart LR r["risc0-ed25519-verified
16 certs · leaf 10"] b["betrusted-ed25519-verified
16 certs · leaf 11"] p["pasta-pallas-verified
field layer only · NOT attested"] + f["fips205-slhdsa-verified
campaign in progress · 0 certs · NOT attested"] c["ltl-accumulator-verified
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 8–11, generations at 0–7) | 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 diff --git a/src/pacta/estateview.py b/src/pacta/estateview.py index c2ea519..1967d79 100644 --- a/src/pacta/estateview.py +++ b/src/pacta/estateview.py @@ -123,8 +123,9 @@ ESTATE_HTML = r'''LTL estate map — repos, services, loops key 874c8a00… paper v0.9 · 23 pp · camera-ready attested components 5 - pacta suite 135 green - state as of 2026-07-20 + pacta suite 144 green + SLH-DSA campaign open — 0 certificates + state as of 2026-07-22
ALWAYS ON droplet: caddy (TLS, static blog) · LTL web service (read-only container) · Forgejo (+ 03:00 mirror cron) @@ -155,6 +156,7 @@ ESTATE_HTML = r'''LTL estate map — repos, services, loops

risc0-…-dalek-source

RISC Zero fork, pinned clone

betrusted-…-dalek-source

Betrusted fork (+ xous-core, litex-boards context)

pasta_curves-source

Pasta curves, pinned clone
+

fips205-source

integritychain FIPS 205 (SLH-DSA), pinned snapshot
@@ -170,6 +172,8 @@ ESTATE_HTML = r'''LTL estate map — repos, services, loops
attested

pasta-pallas-verified

field layer proven · curve layer pending
not attested
+

fips205-slhdsa-verified

SLH-DSA-SHA2-128s verify path · skeleton — 0 certificates
+
campaign in progressnot attested

ltl-accumulator-verified

61 certs · proofs about the log's own accumulator model
attested · entry 13frozen 172a1d0loop 2
@@ -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 (T1–T4).","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"], diff --git a/src/pacta/liveness.py b/src/pacta/liveness.py index dfbccfa..cc28c4f 100644 --- a/src/pacta/liveness.py +++ b/src/pacta/liveness.py @@ -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", ] diff --git a/tests/test_walletui.py b/tests/test_walletui.py index 054385f..b486920 100644 --- a/tests/test_walletui.py +++ b/tests/test_walletui.py @@ -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}"