Skip to main content
The architecture and the threat model state several invariants in prose. This page lists each one with the code that enforces it and the test or CI job that would fail if it stopped being true, so a reader can tell which claims are tested, which rest on a lint rule or a heuristic, and which are design intent with no test yet. Each row is written from the code, not from the prose elsewhere. Status as of 2026-10-13, checked against commit 5d661ed. bun run check:docs fails the build when a file, symbol, test or CI job named below no longer exists, or when a test it names is skipped. It checks names, not meaning: it cannot tell whether a symbol still holds the rule or a test still asserts it. That stays a review question.

How to read a row

  • Enforced by names a file and, after #, the symbol it declares that holds the rule.
  • Proved by names a test file and, after #, the exact name passed to test(), or a CI job in .github/workflows/ci.yml.
  • Status is one of:
    • Enforced: a test or CI job fails if the rule breaks.
    • Enforced, with a residual: the rule is tested, but the guarantee is narrower than it first reads; the residual is stated and linked.
    • Partly enforced: one half of the rule is tested and the other is not; the row says which.
    • Design intent: the code is written this way, but no test or job would catch a change.

Transaction construction and verification

The two server-side signing keys

Boundaries between the apps

Keys, confirmation and the page in the browser

Supply chain

Keeping this page true

A new close operation, signing key, adapter or app boundary adds or changes its row here in the same pull request, following the maintenance rule in the threat model, Section 13. Run bun run check:docs before pushing; CI runs it on every pull request.