proof-aware-crypto-tooling-.../ESTATE.md
mrwulf 0f094066f4 ESTATE.md: the one-page estate map (operator order 2026-07-19)
The endeavour spans ~12 active repos, a generated mirror, a droplet
with three containers, a full-account Forgejo mirror, operator-held
state, and two self-referential loops — enough that oversight was
genuinely lost. ESTATE.md is the canonical committed map: five lanes of
custody (upstream inputs -> verified subjects -> machinery &
operator-held -> published faces -> consumers) as a GitHub-rendered
Mermaid diagram, plus the two loops explained first (dogfood signer;
entry-13 self-attestation), a repository inventory with mutability
classes (frozen / generated / free / operator-only), the services and
operator-held table, an edge glossary, and maintenance triggers.

Lives HERE because pacta is the machinery hub and the only repo that
changes freely; the mirror is generated, the subjects are frozen, and
the book is independent. Linked from README and llms.txt. An
interactive operator's version of the same model exists outside the
repos.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 16:51:20 +02:00

7.9 KiB
Raw Blame History

The estate map

One page holding the entire mental model of the Lean Transparency Log endeavour: every repository, service, mirror, and operator-held entity, and — most importantly — the typed relationships between them, 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 fingerprint 874c8a00…, paper v0.9 camera-ready (23 pp), five attested components, pacta suite 118 green.

flowchart LR
  subgraph S["UPSTREAM INPUTS (frozen clones)"]
    s1["curve25519-dalek-source"]
    s2["anza-cryptography-source"]
    s3["risc0-…-dalek-source"]
    s4["betrusted-…-dalek-source"]
    s5["pasta_curves-source"]
  end
  subgraph V["VERIFIED SUBJECTS"]
    d["dalek-ed25519-verified<br/>16 certs · leaf 8 · signer source"]
    a["anza-ed25519-verified<br/>16 certs · leaf 9"]
    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"]
    c["ltl-accumulator-verified<br/>61 certs · entry-13 subject · frozen 172a1d0"]
  end
  subgraph M["MACHINERY — pacta + operator-held"]
    prov["provider service<br/>check · append · publish · site code · templates (CI-pinned)"]
    sig["dogfood signer<br/>verified-dalek binary"]
    lib["consumer library<br/>receipts · pin store · R0R5"]
    wal["warden (code)<br/>quorum wallet · MCP"]
    pap["paper<br/>v0.9 + v0.1/v0.2 archives"]
    crs["course + llms.txt<br/>14 notebooks"]
    key["SIGNING KEY (offline)"]
    ops["operational log state<br/>the true accumulator"]
    sd["SD archive<br/>kits · stamps · correspondence"]
  end
  subgraph P["PUBLISHED FACES"]
    mir["lean-transparency-log<br/>GENERATED mirror · fail-closed verify.py + selftest"]
    site["ltl.zkdefi.org<br/>homepage · /v1 API · /paper"]
    fj["Forgejo (droplet)<br/>nightly full-account mirror"]
    pcs["PersonalCloudServer (private)<br/>droplet infra as code"]
    book["verifying-crypto-with-lean<br/>undergrad book (independent)"]
  end
  subgraph C2["CONSUMERS"]
    cl["offline cloner<br/>verify.py --all"]
    wr["warden (runtime)"]
    ag["agents<br/>MCP · custody card"]
    sw["swisspost-evoting-go-poc<br/>prospective, family-level only"]
    rev["external reviewers<br/>GPT-5.6 + Claude"]
  end
  s1 --> d
  s2 --> a
  s3 --> r
  s4 --> b
  s5 --> p
  d -->|attest| prov
  a -->|attest| prov
  r -->|attest| prov
  b -->|attest| prov
  prov -->|append| ops
  key -->|signs heads| ops
  ops -->|publish| mir
  prov -.->|"templates (CI-pinned)"| mir
  prov -->|app code| site
  mir -->|published copy| site
  pap -->|/paper| site
  pcs -->|infra| site
  mir -.->|nightly| fj
  mir -->|clone + verify| cl
  site -->|API · custody card| ag
  mir -->|receipts · quorum| wr
  site -.->|prospective| sw
  sd -->|review kits| rev
  d ==>|"LOOP 1: built from"| sig
  sig ==>|"LOOP 1: signs the log"| ops
  mir ==>|"LOOP 1: contains the signer's own attestation (leaf 8)"| d
  c ==>|"LOOP 2: attested as entry 13"| prov
  mir ==>|"LOOP 2: carries proofs about its own accumulator"| c
  classDef src fill:#f1f3f5,stroke:#8a93a0,color:#1c2430
  classDef sub fill:#e2f2e9,stroke:#1e7f4f,color:#1c2430
  classDef mach fill:#eef0f7,stroke:#3b4d8f,color:#1c2430
  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 prov,sig,lib,wal,pap,crs mach
  class key,ops,sd held
  class mir,site,fj,pcs,book pub
  class cl,wr,ag,sw,rev cons

The two loops (read these first)

Loop 1 — the dogfood signer. The log's tree heads are signed by verified-dalek-serial, a binary built from dalek-ed25519-verified — whose own attestation is leaf 8 inside the log it signs. Before signing, the provider re-checks inclusion of the signer's leaf. The signature vouches for the tree; the tree contains the proofs of the signer's source. (Execution provenance is reported, not proven — the paper says so explicitly.)

Loop 2 — the self-attestation. ltl-accumulator-verified is a Lean corpus proving soundness of the log's own accumulator model (extractors, consistency binding, per-step pin safety). It was attested into the log as entry 13 — the log carries kernel-checked proofs about its own machinery, scoped honestly (recursive model, not the deployed verifier; see the corpus KNOWN-GAPS ledger).

Repository inventory

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
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
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, 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
verifying-crypto-with-lean published undergraduate book; zero coupling to log state changes freely
PersonalCloudServer (private) published droplet infrastructure as code changes freely
swisspost-evoting-go-poc consumer operator's PoC; prospective consumer (family-level dalek match only) independent

Services, infra, operator-held

Entity What it is
ltl.zkdefi.org droplet (caddy → docker cloud-ltl-1): homepage rendered from live leaves, /v1 API, /paper (+/v0.2, /v0.1), key endpoint. Read-only; no key material on the server.
Forgejo (cloud-forgejo-1) nightly (03:00) mirror of the entire saymrwulf GitHub account — disaster-recovery copy.
Signing key offline, operator-only; fingerprint 874c8a00…; sole copy + one encrypted SD backup; public half published in two independent locations.
Operational log state provider/state/transparency-log-main — the true accumulator. Appends happen here; the mirror is its projection.
SD archive review kits (rounds 115), stamped artifacts (_timestamp_hash8), evidence records, submission correspondence (never in git).

Edge glossary

Edge Meaning
extract pinned source → Lean model (Aeneas/Charon)
attest subject at pinned commit → provider check → signed leaf
append / publish leaf → operational state → generated mirror
templates (CI-pinned) pacta published_assets → mirror's verify.py/selftest/README; guarded by tests/test_published_assets.py since 2026-07-19
serve pacta app + mirror copy + paper → droplet → site
consume mirror/site → cloners, warden, agents (receipts recomputed, never trusted)

Maintenance

Update this file when: a leaf is appended or a head signed (snapshot line), the paper version changes, a repo/service/consumer is added or retired, or a loop-relevant mechanism changes. Rules that keep the map honest: generated artifacts are fixed at their source (mirror files → pacta templates); subject repos move only for docs; the three operator-held entities are never expanded into detail here.