diff --git a/ESTATE.md b/ESTATE.md index 6381223..e088ca5 100644 --- a/ESTATE.md +++ b/ESTATE.md @@ -9,7 +9,7 @@ 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. +attested components, pacta suite 130 green. ```mermaid flowchart LR @@ -133,6 +133,24 @@ 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) + +| Entity | Runtime | Where | Starts / stops | +|---|---|---|---| +| caddy (TLS, static blog) | **always on** | droplet container | `docker compose`, restart-unless-stopped | +| LTL web service (ltl.zkdefi.org) | **always on** | droplet container | `pacta_provider serve` with read-only mounts and `read_only: true` — it *cannot* write, sign, or append | +| Forgejo mirror | **always on** | droplet container | plus exactly one cron: 03:00 daily mirror reconcile | +| 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 | +| 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 +dimension included, is the cockpit's **Estate map** view +(`pacta wallet cockpit` → `/estate`); this file remains the canonical +committed version, and `tests/test_walletui.py` guards name-level drift +between the two. + ## Edge glossary | Edge | Meaning | diff --git a/docs/cockpit.md b/docs/cockpit.md index fdf071c..83d0aab 100644 --- a/docs/cockpit.md +++ b/docs/cockpit.md @@ -34,6 +34,7 @@ separate, explicitly reviewed milestone. | **Posture** (`/`) | custody latch state, ledger head with full hash-chain re-verification, the pinned quorum members (backend, component, tier, source commit, binary hash), spending policy verbatim, incident/refusal counts | `Wallet.posture()` / `Wallet.verify_ledger()` | | **Signature queue** (`/queue`) | parked airgap signing requests (outbox) and whether the device has answered (inbox) — observed, never operated | airgap outbox/inbox listing | | **Incidents & refusals** (`/incidents`) | incident records and signed refusal receipts, verbatim, newest first | `incidents/*.json`, `receipts/*.json` | +| **Estate map** (`/estate`) | the whole endeavour — every repo, service, mirror, loop — with RUNTIME on every entity (always-on / on-demand / not-running / static) | rendering of ESTATE.md's model (drift-guarded by test) | | **Receipt inspector** (`/inspect`) | paste an attestation + transparency receipt + log public key; the verdict, per-signature results, and diagnostics come verbatim from the deployed verifier | `pacta.transparency.verify_receipt` | Every panel also states what it does **not** prove (e.g. the quorum diff --git a/src/pacta/estateview.py b/src/pacta/estateview.py new file mode 100644 index 0000000..f0db9b5 --- /dev/null +++ b/src/pacta/estateview.py @@ -0,0 +1,411 @@ +"""estateview - the estate map as a cockpit view. + +The same model as ESTATE.md (the canonical committed version), rendered +interactively for humans, with RUNTIME as a first-class dimension: every +entity dossier states whether anything is actually running, where, and +when it starts and stops. A sync test guards name-level drift between +this page and ESTATE.md. +""" + +ESTATE_HTML = r'''