warden docs + study material: WALLET.md, products lineup, llms.txt, lecture 10
- WALLET.md: the product manual (one idea, trust posture table, R4 gate,
quickstart, MCP surface, self-proving card, firewall, taxonomy)
- docs/products.md: four production-ready deployment profiles
(solo/airgap/treasury/choir) with honest built-vs-wired boundaries
- llms.txt: agent-native discovery manifest at repo root
- README: warden intro + lecture 10 pointer
- notebooks/10_verified_custody_wallet.ipynb: ratchet-rule lecture (toy
3-of-3 -> real four proven forks -> counterparty recomputes a card's
inclusion proof); course README + notebook test updated
- 83 tests green
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 21:46:27 +00:00
|
|
|
# warden — the product lineup
|
|
|
|
|
|
|
|
|
|
warden is one core (quorum boundary + signing firewall + hash-chained
|
|
|
|
|
ledger + agent-native MCP surface) with four deployment profiles. These
|
|
|
|
|
are **production-ready product definitions**, not four separate codebases:
|
|
|
|
|
each is the same `pacta wallet` core with a different signer, policy, and
|
|
|
|
|
surface. Presented here as products so the shape of each is unambiguous.
|
|
|
|
|
|
docs: coherence + portability audit — clean-clone bootstrap proven
Audit question: is the documentation coherent, and is the app portable
to a fresh machine (macOS) with proper isolation? Findings and fixes:
- README never mentioned the cockpit/deck/lab manual (three rounds of UI
evolution invisible at the front door). Added: human-surface section
with the one command, expanded Install (editable-from-clone is the
supported mode — repo files are part of the product; zero-install
PYTHONPATH=src alternative; fresh-machine skip behavior), macOS
openssl/LibreSSL Ed25519 prerequisite with a one-line self-check,
wallet commands in the command list.
- The lab manual violated the repo's own macOS law (AGENTS.md): GNU
sha256sum -> shasum -a 256; GNU sed -i -> portable python3 -c
one-liner (executed and output-matched before shipping: entry 0 hash
mismatch, BROKEN, exit 1).
- Fresh-clone bootstrap was actually tested end to end in a scratch
clone: zero-install suite 130 passed / 0 failed / 14 skipped after
fixing the one unguarded test (test_ledger_is_hash_chained now skips
like its siblings when the dogfood binary is absent - capability gap,
not failure); venv + pip install -e . -> pacta console script serves
bridge/deck/manual/sample-prefill/drift-tripwire with no PYTHONPATH.
- PYTHONPATH incantations simplified: cockpit needs src only (provider
never imported by src/pacta); manual + cockpit.md updated.
- threat-model.md: cockpit attack-surface note (no mutating routes,
no auth because nothing to operate, localhost-only disclosure risk,
probe-only network I/O, fake-cockpit = host-compromise boundary).
- products.md: cockpit named as the shared human surface of all four
profiles. AGENTS.md: doc-portability law + the cockpit's three laws
added to the standing guidance.
Suite 144 green here; 130/0/14 on a bare clone.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 16:00:08 +00:00
|
|
|
Every profile also ships the same human surface: the **custody cockpit**
|
|
|
|
|
(`pacta wallet cockpit`) — local, read-only, six role stations over live
|
|
|
|
|
evidence instruments, with the deck, the guide, and the lab manual. See
|
|
|
|
|
[docs/cockpit.md](cockpit.md).
|
|
|
|
|
|
warden docs + study material: WALLET.md, products lineup, llms.txt, lecture 10
- WALLET.md: the product manual (one idea, trust posture table, R4 gate,
quickstart, MCP surface, self-proving card, firewall, taxonomy)
- docs/products.md: four production-ready deployment profiles
(solo/airgap/treasury/choir) with honest built-vs-wired boundaries
- llms.txt: agent-native discovery manifest at repo root
- README: warden intro + lecture 10 pointer
- notebooks/10_verified_custody_wallet.ipynb: ratchet-rule lecture (toy
3-of-3 -> real four proven forks -> counterparty recomputes a card's
inclusion proof); course README + notebook test updated
- 83 tests green
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 21:46:27 +00:00
|
|
|
The trust posture in [WALLET.md](../WALLET.md#trust-posture) applies to all
|
|
|
|
|
four without exception. What differs is *where the boundary sits* and *what
|
|
|
|
|
the wallet is wired into*.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 1. warden-solo — the custody sidecar
|
|
|
|
|
|
|
|
|
|
**For:** a single autonomous agent that owns a wallet and must not sign
|
|
|
|
|
anything it would regret.
|
|
|
|
|
|
|
|
|
|
**Shape:** local dogfood signer; the quorum firewall on every outbound
|
|
|
|
|
signature; MCP over stdio next to the agent. The agent calls
|
|
|
|
|
`request_signature` with an intent; warden binds the intent to the bytes,
|
|
|
|
|
signs, runs the four-fork firewall, and releases only on unanimity. Every
|
|
|
|
|
inbound authorization the agent receives goes through `verify_inbound`
|
|
|
|
|
first.
|
|
|
|
|
|
|
|
|
|
**The sci-fi line:** *the agent gets a conscience it cannot bribe.* The
|
|
|
|
|
refusal receipts are the conscience made portable — when warden says no,
|
|
|
|
|
the agent can prove to its principal exactly what was refused and why.
|
|
|
|
|
|
|
|
|
|
**Ready because:** this is the tested default path. `pacta wallet init`
|
|
|
|
|
→ `mcp`; the live end-to-end test is exactly this profile.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 2. warden-airgap — the signing firewall for hardware custody
|
|
|
|
|
|
|
|
|
|
**For:** custody where the key must never touch the networked host — a
|
|
|
|
|
Precursor/Betrusted device, an HSM, a phone in a drawer.
|
|
|
|
|
|
|
|
|
|
**Shape:** the `AirgapSigner`. An outbound request is written to
|
|
|
|
|
`airgap/outbox/<id>.request.json`; the device (or a human courier) signs
|
|
|
|
|
across the gap and drops `airgap/inbox/<id>.response.json`. warden resumes
|
|
|
|
|
on the next call with the same request id — **and the returned signature
|
|
|
|
|
still faces the quorum firewall.**
|
|
|
|
|
|
|
|
|
|
**The sci-fi line:** *verify-after-sign, but the verifier is proven.* The
|
|
|
|
|
classic countermeasure against fault-injection on a signer is to verify
|
|
|
|
|
its output before trusting it; warden makes that verifier a quorum of
|
|
|
|
|
machine-checked code. A glitched or substituted device signature is
|
|
|
|
|
quarantined and latches custody — it never reaches the chain.
|
|
|
|
|
|
|
|
|
|
**Ready because:** the airgap protocol is a two-file JSON exchange with a
|
|
|
|
|
documented schema and a park-then-complete test; the betrusted fork it
|
|
|
|
|
leans on is one of the four proven members.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 3. warden-treasury — trust-minimized chain watching
|
|
|
|
|
|
|
|
|
|
**For:** an agent (or a fleet) that must believe on-chain state — a
|
|
|
|
|
deposit landed, a multisig approved — without trusting an RPC provider's
|
|
|
|
|
word.
|
|
|
|
|
|
|
|
|
|
**Shape:** point the `anza` member (Solana's own verify path,
|
|
|
|
|
certificate-covered) at the signatures on transactions touching the
|
|
|
|
|
treasury and re-verify them locally through the quorum before believing
|
|
|
|
|
any balance change. The RPC provider is demoted from oracle to bandwidth.
|
|
|
|
|
This is the observation-not-verdict principle applied to chain data: take
|
|
|
|
|
the bytes, re-derive the verdict, with a verifier you hold a proof about.
|
|
|
|
|
|
|
|
|
|
**The sci-fi line:** *the treasury trusts mathematics, not middlemen.* A
|
|
|
|
|
compromised or lying RPC can withhold data but cannot manufacture a
|
|
|
|
|
signature the quorum will accept.
|
|
|
|
|
|
warden hardening round: policy engine, ledger rotation, MCP UX, treasury LIVE, ops docs
Tier 2:
- request_signature decomposed into named gates (latch, freshness,
intent, policy, signer, firewall)
- ledger: O(1) tail-read appends under a dedicated lock file (survives
rotation rename); hash-chained segment rotation at policy
ledger.rotate_at; verify-ledger walks all segments to genesis;
archive tampering detected (tested)
- docs/threat-model.md (attacker matrix 1-9, proven-vs-trusted, design
invariants) + docs/runbook-latch.md (diagnose-first recovery)
- lecture 10: executable corrupt-a-member exercise (capsule pin catches
one appended byte), honest note on what the pin does NOT stop
Lightweight policy engine (POLICY_DENIED wired):
- policy.json: per-request/per-day amount ceilings, counterparty
allow/deny lists, per-identity overrides; rules make their intent
fields mandatory; daily sums from the ledger
-
Agent UX:
- signed refusal receipts travel inside MCP errors (receipt +
receipt_path in structuredContent)
- airgap over MCP: request_signature signer=airgap + request_id,
new airgap_pending tool; park -> list -> device answers -> complete
(tested end-to-end)
- all 8 tools carry readOnly/destructive annotations
- sliding-window rate limiter per tool class (custody/verify/liveness);
RATE_LIMITED refusal code; surface control, not ledgered
warden-treasury LIVE:
- treasury.py: stdlib base58, compact-u16, legacy+v0 wire parsing;
every required signature quorum-verified over exact message bytes;
completeness gap named in every verdict; RPC fetch uses response as
bytes only
-
- live-quorum test: synthetic Solana tx signed with wallet key ->
authentic via 4 proven forks; flipped byte -> not authentic
100 tests green (was 85).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:38:42 +00:00
|
|
|
**Ready because:** it is built: `pacta wallet treasury-verify` parses
|
|
|
|
|
wire-format transactions (legacy + v0, stdlib only) and quorum-verifies
|
|
|
|
|
every required signature, with the completeness gap (an RPC can withhold)
|
|
|
|
|
named in every verdict. The wire parser is ~120 lines of declared trusted
|
|
|
|
|
base, exactly like the forks' own parsers are hypotheses of the theorems.
|
warden docs + study material: WALLET.md, products lineup, llms.txt, lecture 10
- WALLET.md: the product manual (one idea, trust posture table, R4 gate,
quickstart, MCP surface, self-proving card, firewall, taxonomy)
- docs/products.md: four production-ready deployment profiles
(solo/airgap/treasury/choir) with honest built-vs-wired boundaries
- llms.txt: agent-native discovery manifest at repo root
- README: warden intro + lecture 10 pointer
- notebooks/10_verified_custody_wallet.ipynb: ratchet-rule lecture (toy
3-of-3 -> real four proven forks -> counterparty recomputes a card's
inclusion proof); course README + notebook test updated
- 83 tests green
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 21:46:27 +00:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 4. warden-choir — cross-witnessed custody
|
|
|
|
|
|
|
|
|
|
**For:** operators who want no single warden to be able to rewrite its own
|
|
|
|
|
history unobserved.
|
|
|
|
|
|
|
|
|
|
**Shape:** N wardens gossip each other's ledger heads and periodically
|
|
|
|
|
cross-sign them — the same witness pattern the Lean Transparency Log uses
|
|
|
|
|
for its signed tree heads, turned inward on the wallets' own append-only
|
|
|
|
|
ledgers. A warden that tried to fork or rewrite its ledger would have to
|
|
|
|
|
fool every peer that holds a countersigned head.
|
|
|
|
|
|
|
|
|
|
**The sci-fi line:** *a wallet that keeps the others honest.* Custody
|
|
|
|
|
becomes a small transparency log of its own, and equivocation has to
|
|
|
|
|
survive every member's memory.
|
|
|
|
|
|
|
|
|
|
**Ready because:** the ledger is already hash-chained and every head is
|
|
|
|
|
already exportable in the posture attestation; the choir is a gossip layer
|
|
|
|
|
over primitives that exist and are tested. (This profile is defined and
|
|
|
|
|
scaffolded; the gossip transport is the one net-new component and is
|
|
|
|
|
scoped as the next build.)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Honesty about "production-ready"
|
|
|
|
|
|
warden hardening round: policy engine, ledger rotation, MCP UX, treasury LIVE, ops docs
Tier 2:
- request_signature decomposed into named gates (latch, freshness,
intent, policy, signer, firewall)
- ledger: O(1) tail-read appends under a dedicated lock file (survives
rotation rename); hash-chained segment rotation at policy
ledger.rotate_at; verify-ledger walks all segments to genesis;
archive tampering detected (tested)
- docs/threat-model.md (attacker matrix 1-9, proven-vs-trusted, design
invariants) + docs/runbook-latch.md (diagnose-first recovery)
- lecture 10: executable corrupt-a-member exercise (capsule pin catches
one appended byte), honest note on what the pin does NOT stop
Lightweight policy engine (POLICY_DENIED wired):
- policy.json: per-request/per-day amount ceilings, counterparty
allow/deny lists, per-identity overrides; rules make their intent
fields mandatory; daily sums from the ledger
-
Agent UX:
- signed refusal receipts travel inside MCP errors (receipt +
receipt_path in structuredContent)
- airgap over MCP: request_signature signer=airgap + request_id,
new airgap_pending tool; park -> list -> device answers -> complete
(tested end-to-end)
- all 8 tools carry readOnly/destructive annotations
- sliding-window rate limiter per tool class (custody/verify/liveness);
RATE_LIMITED refusal code; surface control, not ledgered
warden-treasury LIVE:
- treasury.py: stdlib base58, compact-u16, legacy+v0 wire parsing;
every required signature quorum-verified over exact message bytes;
completeness gap named in every verdict; RPC fetch uses response as
bytes only
-
- live-quorum test: synthetic Solana tx signed with wallet key ->
authentic via 4 proven forks; flipped byte -> not authentic
100 tests green (was 85).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:38:42 +00:00
|
|
|
Profiles 1, 2, and 3 run end-to-end today on the tested core. Profile 4
|
|
|
|
|
is a complete *product definition* on the same core with one documented
|
|
|
|
|
integration point (a gossip transport) —
|
warden docs + study material: WALLET.md, products lineup, llms.txt, lecture 10
- WALLET.md: the product manual (one idea, trust posture table, R4 gate,
quickstart, MCP surface, self-proving card, firewall, taxonomy)
- docs/products.md: four production-ready deployment profiles
(solo/airgap/treasury/choir) with honest built-vs-wired boundaries
- llms.txt: agent-native discovery manifest at repo root
- README: warden intro + lecture 10 pointer
- notebooks/10_verified_custody_wallet.ipynb: ratchet-rule lecture (toy
3-of-3 -> real four proven forks -> counterparty recomputes a card's
inclusion proof); course README + notebook test updated
- 83 tests green
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 21:46:27 +00:00
|
|
|
named here so the boundary between "built and tested" and "wired to your
|
|
|
|
|
environment" is exact, which is the whole ethos of this project. None of
|
|
|
|
|
them changes the trust posture; all of them fail closed.
|