proof-aware-crypto-tooling-.../provider/src/pacta_provider/webdocs.py

311 lines
19 KiB
Python
Raw Normal View History

The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
"""The LTL website, served at the log's base path — one self-contained HTML
page (inline CSS + inline SVG, no external assets: works air-gapped behind
any reverse proxy). Rendered from the LIVE log state, so the graphic and
every number on the page are the accumulator, not a brochure about it."""
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
from __future__ import annotations
from html import escape
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
from typing import Any
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
from pacta.transparency import node_hash
from .transparency_log import LogEntry, TransparencyLog
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
_STYLE = """
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
:root{--ink:#1c2430;--ink2:#5a6675;--line:#dde2e9;--ok:#1e7f4f;--okbg:#e2f2e9;
--warn:#a86a10;--warnbg:#fdf0da;--accent:#3b4d8f;--accentbg:#eef0f7;--bg:#f8f9fa}
*{box-sizing:border-box}
body{font-family:system-ui,sans-serif;max-width:66rem;margin:0 auto;padding:2rem 1.2rem 4rem;
color:var(--ink);line-height:1.6;background:var(--bg)}
h1{font-size:2rem;margin:.2rem 0 0;letter-spacing:-.01em}
h2{font-size:1.2rem;margin-top:2.6rem;border-bottom:2px solid var(--line);padding-bottom:.3rem}
.tagline{font-size:1.05rem;color:var(--ink2);max-width:46rem}
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
code,pre{font-family:ui-monospace,Menlo,Consolas,monospace;background:#eef0f3;border-radius:4px}
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
code{padding:.1rem .3rem;font-size:.9em} pre{padding:.9rem;overflow-x:auto;font-size:.85rem}
table{border-collapse:collapse;width:100%;font-size:.93rem;background:#fff}
td,th{border:1px solid var(--line);padding:.5rem .7rem;text-align:left;vertical-align:top}
th{background:var(--accentbg)}
.pill{display:inline-block;border-radius:9px;padding:.08rem .6rem;font-size:.78rem;font-weight:600}
.ok{background:var(--okbg);color:var(--ok)} .warn{background:var(--warnbg);color:var(--warn)}
.acc{background:var(--accentbg);color:var(--accent)}
.muted{color:var(--ink2);font-size:.9rem}
.card{background:#fff;border:1px solid var(--line);border-radius:8px;padding:1rem 1.2rem;margin:.8rem 0}
.steps{counter-reset:s} .steps .card{position:relative;padding-left:3.2rem}
.steps .card::before{counter-increment:s;content:counter(s);position:absolute;left:1rem;top:1rem;
width:1.6rem;height:1.6rem;border-radius:50%;background:var(--accent);color:#fff;
display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.9rem}
svg{max-width:100%;height:auto;display:block;margin:1rem auto;background:#fff;
border:1px solid var(--line);border-radius:8px}
a{color:var(--accent)}
.legend{display:flex;gap:1.4rem;flex-wrap:wrap;font-size:.85rem;color:var(--ink2);justify-content:center}
.sw{display:inline-block;width:.8rem;height:.8rem;border-radius:3px;vertical-align:-1px;margin-right:.3rem}
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
"""
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
def _leaf_ok(entry: LogEntry) -> bool:
certificates = ((entry.leaf.get("attestation") or {}).get("certificates")) or []
return bool(certificates) and all(
certificate.get("status") == "proven" and certificate.get("axiom_status") == "clean"
for certificate in certificates
)
def _svg_tree(entries: list[LogEntry], root_hex: str, signing_backend: str) -> str:
"""The accumulator, drawn from its real leaves."""
if not entries:
return "<p class='muted'>(log is empty)</p>"
hashes = [bytes.fromhex(entry.leaf_hash) for entry in entries]
levels: list[list[bytes]] = [hashes]
while len(levels[-1]) > 1:
level = levels[-1]
nxt = [node_hash(level[i], level[i + 1]) for i in range(0, len(level) - 1, 2)]
if len(level) % 2:
nxt.append(level[-1])
levels.append(nxt)
width, level_gap = 1000, 86
height = 150 + level_gap * len(levels)
out = [f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 {width} {height}" font-family="ui-monospace,monospace" font-size="11">']
positions: dict[tuple[int, int], tuple[float, float]] = {}
for level_index, level in enumerate(levels):
y = height - 56 - level_index * level_gap
span = width / (len(level) + 1)
for node_index, node in enumerate(level):
x = span * (node_index + 1)
positions[(level_index, node_index)] = (x, y)
if level_index == 0:
entry = entries[node_index]
ok = _leaf_ok(entry)
component = (((entry.leaf.get("attestation") or {}).get("subject")) or {}).get("component", "?")
fill, stroke = ("#e2f2e9", "#1e7f4f") if ok else ("#f4f4f6", "#8a93a0")
out.append(f'<rect x="{x-56}" y="{y-22}" width="112" height="44" rx="5" fill="{fill}" stroke="{stroke}" stroke-width="1.4"/>')
out.append(f'<text x="{x}" y="{y-6}" text-anchor="middle" fill="#333">leaf {node_index}</text>')
short = escape(str(component).replace("-ed25519-verified", ""))
label = short if ok else f"{short}"
out.append(f'<text x="{x}" y="{y+8}" text-anchor="middle" fill="{stroke}">{label}</text>')
out.append(f'<text x="{x}" y="{y+19}" text-anchor="middle" fill="#999" font-size="9">{node.hex()[:10]}…</text>')
else:
is_root = level_index == len(levels) - 1
out.append(f'<rect x="{x-50}" y="{y-15}" width="100" height="30" rx="5" fill="{"#eef0f7" if is_root else "#fff"}" stroke="{"#3b4d8f" if is_root else "#bbb"}" stroke-width="{1.6 if is_root else 1}"/>')
out.append(f'<text x="{x}" y="{y-2}" text-anchor="middle" fill="#333">{"ROOT" if is_root else "node"}</text>')
out.append(f'<text x="{x}" y="{y+10}" text-anchor="middle" fill="#999" font-size="9">{node.hex()[:10]}…</text>')
for child in (2 * node_index, 2 * node_index + 1):
if (level_index - 1, child) in positions:
cx, cy = positions[(level_index - 1, child)]
out.append(f'<line x1="{x}" y1="{y+15}" x2="{cx}" y2="{cy-22 if level_index==1 else cy-15}" stroke="#ccc"/>')
root_x, root_y = positions[(len(levels) - 1, 0)]
out.append(f'<rect x="{root_x-190}" y="{root_y-72}" width="380" height="34" rx="6" fill="#e2f2e9" stroke="#1e7f4f" stroke-width="1.6"/>')
out.append(f'<text x="{root_x}" y="{root_y-58}" text-anchor="middle" fill="#1e7f4f" font-weight="bold">Signed Tree Head — Ed25519({root_hex[:12]}…)</text>')
out.append(f'<text x="{root_x}" y="{root_y-46}" text-anchor="middle" fill="#1e7f4f" font-size="9">signed by: {escape(signing_backend)} (the proof-attested library itself)</text>')
out.append(f'<line x1="{root_x}" y1="{root_y-38}" x2="{root_x}" y2="{root_y-15}" stroke="#1e7f4f" stroke-width="1.4"/>')
out.append("</svg>")
return "".join(out)
def _trust_anchor_html(log: TransparencyLog, metadata: dict[str, Any], base: str, mirror: str) -> str:
"""The provider public key, displayed in full on the front page. The key
is the one thing a consumer takes on trust, once - hiding it behind a
path would invert the page's priorities."""
key_path = log.log_dir / "provider.ed25519.pub"
fingerprint = str(metadata.get("ed25519_public_key_fingerprint_sha256", ""))
if not key_path.is_file():
return (
'<div class="card"><span class="pill warn">missing</span> This deployment '
"does not expose its public key in the log directory - fetch it from the "
f'<a href="{mirror}/blob/main/provider.ed25519.pub">mirror</a> instead.</div>'
)
pem = escape(key_path.read_text(encoding="utf-8").strip())
return f"""<div class="card">
<p style="margin-top:0">This key is the <strong>sole cryptographic identity anchor</strong>: it
authenticates that these statements were made by the operator. It does not, by itself, make
those statements true each attestation's truth additionally rests on the replay, theorem,
extraction and toolchain assumptions stated in that leaf. Every tree head and attestation is
signature-checked against this key.
Pin it, and compare this copy byte-for-byte with the independently hosted
<a href="{mirror}/blob/main/provider.ed25519.pub">mirror copy</a>; they must be identical.</p>
<pre style="margin-bottom:.4rem">{pem}</pre>
<p class="muted" style="margin:.2rem 0 0">SHA-256 fingerprint <code>{escape(fingerprint)}</code>
&nbsp;·&nbsp; raw: <a href="{base}/log-public-key"><code>{base or ''}/log-public-key</code></a>
&nbsp;·&nbsp; <code>curl -s ltl.zkdefi.org/log-public-key</code></p>
</div>"""
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
def render_docs(log: TransparencyLog, base_path: str) -> str:
base = "/" + base_path.strip("/") if base_path.strip("/") else ""
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
metadata = log.metadata()
history = log.sth_history()
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
latest: dict[str, Any] = history[-1] if history else {}
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
entries = log.entries()
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
ed = (latest.get("signatures") or {}).get("ed25519") or {}
provenance = ed.get("signing_provenance") or {}
signing_backend = str(ed.get("signing_backend", "openssl"))
# newest entry per component, with its real proven/total from the leaf
newest: dict[str, Any] = {}
for entry in entries:
if not _leaf_ok(entry):
continue
comp = ((entry.leaf.get("attestation") or {}).get("subject") or {}).get("component")
if comp:
newest[comp] = entry
def _counts(entry) -> str:
certs = ((entry.leaf.get("attestation") or {}).get("certificates")) or []
total = len(certs)
proven = sum(1 for c in certs
if c.get("status") == "proven" and c.get("axiom_status") == "clean")
return f"{proven}/{total} proven"
components = sorted(newest)
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
mirror = "https://github.com/saymrwulf/lean-transparency-log"
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
rows = "".join(
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
f"<tr><td><code>{escape(c)}</code></td>"
f"<td><a href='{base}/v1/attestation?component={escape(c)}'>attestation</a></td>"
f"<td><a href='{base}/v1/proof?component={escape(c)}'>inclusion proof</a></td>"
f"<td><span class='pill ok'>{escape(_counts(newest[c]))}</span></td></tr>"
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
for c in components
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
)
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
tree_svg = _svg_tree(entries, str(latest.get("root_hash", "")), signing_backend)
return f"""<!doctype html><html lang="en"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>LTL Lean Transparency Log</title><style>{_STYLE}</style></head><body>
<p class="muted" style="margin-bottom:0">zkdefi
· <a href="https://blog.zkdefi.org/">notes</a>
· <a href="https://zkdefi.org/saymrwulf">code</a>
· <a href="https://zkdefi.com/">cv</a></p>
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
<h1>LTL the Lean Transparency Log</h1>
<p class="tagline"><strong>One sentence:</strong> a public, append-only Merkle
accumulator of <em>signed statements that the Lean&nbsp;4 formal proofs of specific
cryptographic Rust libraries, at specific git commits, machine-re-check with exactly
their documented assumptions</em> so that you can trust a proof result by checking
<strong>one signature and ~{max(1,(latest.get('tree_size') or 1).bit_length())} hashes in
milliseconds</strong>, instead of running a theorem prover for hours.</p>
<h2>The trust anchor pin this key</h2>
{_trust_anchor_html(log, metadata, base, mirror)}
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
<h2>The accumulator, live</h2>
{tree_svg}
<p class="legend">
<span><span class="sw" style="background:#e2f2e9;border:1px solid #1e7f4f"></span>verified attestation (all certificates proven, axiom cones boundary-exact)</span>
<span><span class="sw" style="background:#f4f4f6;border:1px solid #8a93a0"></span>historical audit-failure attestation kept forever; an append-only ledger does not erase its bad day</span>
</p>
<p class="muted">Every box above is computed from the live log at page render leaf hashes,
internal nodes, the root, and the signature are the real ones. Before signing this
root, the provider Merkle-verified its own signing library's leaf
(index {provenance.get('signing_library_leaf_index','?')},
certificates {escape(str(provenance.get('signing_library_certificates_proven','?')))})
against this very tree so the signed tree <em>contains</em> an attestation of the source the
operator reports its signing binary was built from. (An Ed25519 signature cannot by itself prove
which binary generated it; execution provenance is reported, not proven, and the provenance
fields live in the unsigned signature metadata.) Tree size {latest.get('tree_size',0)},
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
log id <code>{escape(str(metadata.get('log_id',''))[:16])}</code>.</p>
<h2>What do I download? the three artifacts, unambiguously</h2>
<p>To benefit from the accumulator you need <strong>exactly three files</strong> per
library, plus optionally the whole mirror. Nothing else.</p>
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
<table>
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
<tr><th>#</th><th>Artifact</th><th>What it is</th><th>Where</th></tr>
<tr><td><b>1</b></td><td><code>provider.ed25519.pub</code></td>
<td><strong>The identity anchor.</strong> The provider's public key — the sole cryptographic
identity you pin. It authenticates the operator's statements; their truth rests on each leaf's
stated assumptions. Fetch it from BOTH independent locations and compare; the copies must be
identical.</td>
<td><a href="{base}/log-public-key">this site</a> · <a href="{mirror}/blob/main/provider.ed25519.pub">mirror</a></td></tr>
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
<tr><td><b>2</b></td><td><code>&lt;library&gt;.attestation.json</code></td>
<td><strong>The claim.</strong> Which repo, which exact git commit, which theorems,
which observed axiom cones, what machine protection signed by the provider.</td>
<td>table above, or <a href="{mirror}">mirror</a> <code>entries/</code></td></tr>
<tr><td><b>3</b></td><td><code>&lt;library&gt;.receipt.json</code></td>
<td><strong>The proof of inclusion.</strong> Binds artifact&nbsp;2 into the signed tree:
leaf index, sibling hashes, the Signed Tree Head. ~25 lines of stdlib Python verify it.</td>
<td>table above, or <a href="{mirror}">mirror</a> <code>receipts/</code></td></tr>
<tr><td>+</td><td>the full mirror clone</td>
<td><strong>Maximal benefit: become a witness.</strong> Every leaf + every signed head
ever issued + <code>verify.py</code> (stdlib-only). <code>python3 verify.py --all</code>
recomputes the entire tree and every historical head you then hold a retained view that can
later EXPOSE a conflicting head shown to someone else. (A single clone cannot by itself prove the
log never split its view toward another consumer; that requires comparing heads across
consumers.)</td>
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
<td><code>git clone {mirror}</code></td></tr>
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
</table>
<h2>Attested libraries</h2>
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
<table><tr><th>component</th><th>artifact 2</th><th>artifact 3</th><th>status</th></tr>{rows}</table>
<h2>Three ways to use it</h2>
<div class="steps">
<div class="card"><strong>Quick check</strong> (any machine, milliseconds): download
artifacts 13, then<br>
<code>pacta receipt-verify --attestation --receipt --log-public-key provider.ed25519.pub</code>
<br><span class="muted">No Lean, no Rust, no account. Add <code>--sth-store pins.json</code> for split-view defense.</span></div>
<div class="card"><strong>Zero-install audit</strong>: <code>git clone {mirror} &amp;&amp; python3 verify.py --all</code>
<br><span class="muted">Standard-library Python only. You become a witness of the whole history.</span></div>
<div class="card"><strong>Autonomous agent</strong>: the <a href="https://github.com/saymrwulf/proof-aware-crypto-tooling-agent">pacta</a>
tool adds STH pinning, freshness policy, online refresh from this service, risk scoring
(R0R5) with policy-gated consequences, and optionally verifies every signature through
the proof-attested Ed25519 code path itself (<code>--require-verified-verifier</code>).</div>
</div>
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
<h2>API</h2>
<pre>GET {base}/v1/sth latest Signed Tree Head
audit v3: paper-reality congruence + external-pointer integrity (Fable-5 Socratic pass) Two Fable-5 inventory agents cross-checked every empirical claim in the paper against code/deployed log, and every external pointer against the live internet. Fixes on both sides: CODE (system brought up to the paper's claims): - SECURITY: pin-store mutation (incl. permanent poisoning) was reachable via receipts whose head signature FAILED verification in two of three consumer paths (attestation.py, cli.py) - an unauthenticated forged head at the pinned size could poison a consumer's pin forever and pollute the equivocation-evidence pair with an unverifiable head, contradicting SS5.4's 'validly signed' precondition and Prop 1. Both paths now gate the store on a verified Ed25519 head signature (logclient.py already did). Regression test added. - Prop 2 made literally true: _normalize_certificate now derives the cleanliness verdict purely from (observed cone, local allowed set) in EVERY branch; the operator's axiom_status label is never copied (was passed through for non-proven certs), missing cone => unverifiable always. Labels can deny, never grant. Test added. - webdocs: '/v1/sth-history: every head ever signed' -> 'the published head history'. PAPER (claims brought down to reality): - 'every head ever signed' -> the signed head history since publication began (heads for sizes 1-7 predate the mirror and were not retained). - Run-3 bullet: 'independently checkable by diffing the two commit trees' was no longer reproducible (pre-rewrite objects discarded); now states the log-internal corroboration (identical cert lists and cones across leaves 4-7 vs 8-11) and that tree diffs are not public. - Appendix A leaf block now actually verbatim: scheme openssl-ed25519, verified_backend serial/u64, real Lean version (4.30.0-rc2) instead of 4.x.y placeholder, leaf's actual axiom order (finalize/new/update), machine_protection note quoted, elisions marked; preamble wording matches. - Appendix C upstream boundary reordered to check.sh's verbatim order. - '27 lines - all annotation' -> honest description (axiom-list entries + operation reordering from one fork's black_box barrier). - Prop 2 proof + App A: status label consulted only negatively. - SS7: provenance fields noted as outside the signed payload; consumer chain relies on none of them. - Bibliography: all 20 entries verified against DBLP/RFC-editor - zero errors; added missing page numbers to 6 entries; thebibliography width 19->20. All URLs verified public; no PlanetMacro leakage. 17 pages, 106 tests green, accumulator untouched (tree_size 12). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 19:33:28 +00:00
GET {base}/v1/sth-history the published head history (witness material)
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
GET {base}/v1/sth-consistency?first=N consistency proof from your pinned size
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
GET {base}/v1/proof?component=NAME inclusion proof (artifact 3, freshly issued)
GET {base}/v1/attestation?component=NAME the claim (artifact 2)
GET {base}/v1/entries?start=N&amp;end=M raw leaves
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
GET {base}/v1/metadata log identity
GET {base}/healthz</pre>
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
<h2>What a verified inclusion means and what it does not</h2>
<div class="card"><span class="pill ok">means</span> The provider whose key you hold
attests: the Lean proofs of the named repository at the named git commit re-check with
exactly the documented assumptions and this signed head irrevocably commits that statement to
this view. Consumers who compare heads, or retain the public mirror, can expose any conflicting
view.</div>
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
<div class="card"><span class="pill warn">does not mean</span> A verified binary. The
proofs cover Rust <em>source</em>; clone the attested commit (the commit id identifies the
committed git tree not external dependencies, toolchain downloads, or generated artifacts) and
build it yourself compiler and build are declared trusted base
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
until the reproducible-builds program (R5) lands. Every attestation carries its full
residual-risk list. Honesty about the boundary is the product.</div>
<h2>You hold the ruler</h2>
<div class="card">The list of assumptions a certificate is <em>allowed</em> to rest on
is not something this site hands you at verification time it is a
<strong>requirements card</strong> that lives in <em>your</em> tooling, on
<em>your</em> disk, and that you can read in five minutes or rewrite from first
principles: Lean's three foundational axioms, plus — for the signature tiers only —
named placeholders for SHA-512 and the wire format. Your tooling ignores this
operator's pass/fail labels entirely and re-derives every verdict by comparing the
attestation's <em>observed</em> axiom list against <em>your</em> card, name by name.
The operator is trusted to copy down what the proof kernel printed never to
interpret it.</div>
<div class="card">A card you write yourself will match this log's supply
<strong>exactly</strong> and that is engineered, not coincidence: the corpus was
shrunk until every remaining axiom justifies its existence. If your card is
<em>stricter</em> (say: "SHA-512 itself must be proven"), there is nothing here to
negotiate the gap is itemized, never blurred, and you have three honest options:
accept a <em>named</em> line item, walk away, or prove the missing piece and enter it
into this same log. <strong>If your ruler is stricter than our supply, your ruler is
our roadmap.</strong> (The full walk-through is lecture&nbsp;11 in the
<a href="https://github.com/saymrwulf/proof-aware-crypto-tooling-agent">course</a>.)</div>
<h2>The paper</h2>
paper v0.3: the reinvention — accountable distribution of machine-checked evidence Executes the approved reinvention outline, using the round-11 GPT-5.6 draft as base material; the operator remains the author of record and this pass is the authorial fact-check + completion of that draft. New title: 'Accountable Distribution of Machine-Checked Correctness Evidence: A Transparency Model and the Lean Transparency Log' (16 pp). Old 19-page system report archived byte-identical as v0.2 (paper/ltl-v0.2.{tex,pdf}, served at /paper/v0.2; v0.1 unchanged). Every factual claim in the draft was verified against the estate before adoption: 222 inventoried constants + 61 reviewed cones (README:36), all four fidelity counts, the gap-14 lied-size witness reproduced empirically (deployed verify_consistency(1,3,R2,R3,P)=True while the recursive model rejects; honest 2->3 True/True), all four apex theorem names greped from the dalek repo, the entry-13 scope block now quoted VERBATIM (was silently trimmed), the new klaus2026 citation confirmed real via the arXiv API (author order corrected to Klaus, Conejero, Tolmach), remaining 20 bibitems byte-identical to the F10-verified set. Author corrections beyond the draft: 'opaque SHA-256 function' -> uninterpreted/boundary AXIOM (matches axiom sha256 : List UInt8 -> Hash); STH field list now matches the deployed head (adds type tag); lied-size mechanism sentence from the gap ledger; six-published-heads (sizes 8-13) mirror honesty; consumers subsection (warden + Swiss Post family-level negative) per outline item 7; optimistic-accountability related-work paragraph per outline item 8; fifteen-gap ledger pointer per outline item 9; verify.py fail-closed tie-ins in artifact availability and appendix C; wired the six uncited bibitems (lean4, pnueli, eddsa, rfc8032, edwards+twisted, easycrypt); certificate listing gains the deployed 'diagnostics' field. Build: 16 pages, 0 overfull, 0 undefined. web.py: /paper/v0.2 route + loader. webdocs: paper card rewritten for v0.3 with both archived versions linked. Suite 115 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 07:39:04 +00:00
<div class="card"><a href="{base}/paper"><strong>Accountable Distribution of Machine-Checked
Correctness Evidence: A Transparency Model and the Lean Transparency Log</strong></a>
paper v0.5: B6 executed — accountability games + explicit composition theorem (IACR track) New \S5.4 'Scheme-level games and a composition theorem' (operator order: third attempt targets an IACR venue): - Game PB (position binding): two accepting openings of different leaves at one (m,n,r) -> explicit B_pb outputs a SHA-256 collision in <= 2(ceil(log2 n)+1) hash evaluations (two-transcript top-down comparison; 32-byte widths make argument pairs recoverable). - Lemma (prefix transport): an accepted ConsRec transcript plus an accepting opening at m<n0 under the NEW head yields a collision or an assembled accepting opening under the OLD head (frontier comparison + old-root spine assembly; degenerate power-of-two case handled). - Game HIST (local history binding): pin-rule chains + contradictory openings at any two accepted heads -> collision, by transport induction + PB. Supplies the multi-step closure at paper level. - Game FORK: evidence completeness by construction; frame resistance reduces to EUF-CMA. Win condition deliberately over canonical PAYLOADS, not heads — a second signature on an already-signed payload is not an EUF-CMA forgery (SUF/EUF trap caught in the self-audit pass before integration). - Policy separation as a deterministic lemma (per GPT B6's own suggestion), formal Definition 3, and Theorem 7: the construction is an accountable replay-distribution scheme. - Fixed-function SHA-256 handled per Rogaway's human-ignorance treatment (new citation, arXiv-API/DBLP/Springer-verified: VIETCRYPT, LNCS 4341, pp. 211-228, 2006 — note Rogaway's own page carries a 221- typo): every hash statement is an explicit reduction, the scheme-level continuation of the named-extractor discipline. - Games are non-interactive BECAUSE the operator-adversary holds the signing key (no secrets, no oracles) — stated in the section, mirroring the deployment's non-interactive verification. - Honesty anchored: scope remark + new coverage-table row (two- transcript comparisons and prefix transport are paper-level, not mechanized); Definition 2 re-badged informal with pointer; DGHS two-transcript lineage credited in related work. 19 pages, 0 overfull, suite 115 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 11:31:51 +00:00
(PDF, 19 pages, v0.5) the trust decomposition (expensive verification produces an
observation; transparency makes the observation accountable; consumer-local policy decides
acceptance), collision-extracting soundness for inclusion and consistency, scheme-level
accountability GAMES with an explicit composition theorem (position binding, history
binding, fork evidence all discharged by named reductions), the policy boundary where
operator labels can veto but never grant acceptance, the live thirteen-leaf deployment
whose entry 13 attests the accumulator's own mechanized model, and the measured
model/deployment divergence (3,867 lied-size cases, every one accepted only by the
deployed verifier) reported as a result rather than hidden.
paper v0.3: the reinvention — accountable distribution of machine-checked evidence Executes the approved reinvention outline, using the round-11 GPT-5.6 draft as base material; the operator remains the author of record and this pass is the authorial fact-check + completion of that draft. New title: 'Accountable Distribution of Machine-Checked Correctness Evidence: A Transparency Model and the Lean Transparency Log' (16 pp). Old 19-page system report archived byte-identical as v0.2 (paper/ltl-v0.2.{tex,pdf}, served at /paper/v0.2; v0.1 unchanged). Every factual claim in the draft was verified against the estate before adoption: 222 inventoried constants + 61 reviewed cones (README:36), all four fidelity counts, the gap-14 lied-size witness reproduced empirically (deployed verify_consistency(1,3,R2,R3,P)=True while the recursive model rejects; honest 2->3 True/True), all four apex theorem names greped from the dalek repo, the entry-13 scope block now quoted VERBATIM (was silently trimmed), the new klaus2026 citation confirmed real via the arXiv API (author order corrected to Klaus, Conejero, Tolmach), remaining 20 bibitems byte-identical to the F10-verified set. Author corrections beyond the draft: 'opaque SHA-256 function' -> uninterpreted/boundary AXIOM (matches axiom sha256 : List UInt8 -> Hash); STH field list now matches the deployed head (adds type tag); lied-size mechanism sentence from the gap ledger; six-published-heads (sizes 8-13) mirror honesty; consumers subsection (warden + Swiss Post family-level negative) per outline item 7; optimistic-accountability related-work paragraph per outline item 8; fifteen-gap ledger pointer per outline item 9; verify.py fail-closed tie-ins in artifact availability and appendix C; wired the six uncited bibitems (lean4, pnueli, eddsa, rfc8032, edwards+twisted, easycrypt); certificate listing gains the deployed 'diagnostics' field. Build: 16 pages, 0 overfull, 0 undefined. web.py: /paper/v0.2 route + loader. webdocs: paper card rewritten for v0.3 with both archived versions linked. Suite 115 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 07:39:04 +00:00
<span class="muted">Previous versions: <a href="{base}/paper/v0.2">v0.2</a> (19 pages, the
system report) · <a href="{base}/paper/v0.1">v0.1</a> (4 pages).</span></div>
The LTL website: the accumulator drawn live, artifacts named unambiguously The /docs route is now a real landing site (still one self-contained HTML, inline CSS + inline SVG, zero external assets): - One-sentence definition up top: what the LTL is and the cost asymmetry it exists for (one signature + a few hashes in milliseconds vs hours of theorem proving). - THE GRAPHIC: the accumulator itself, rendered server-side from the LIVE log at page load - real leaf hashes, real internal nodes, the real root and signature. Green leaves are boundary-exact verified attestations; grey leaves are the historical audit-failure entries, labeled "kept forever - an append-only ledger does not erase its bad day". The signature box names the dogfood backend and the provider's self-inclusion check (the signature vouches for the code; the tree vouches for the signature's code). - "What do I download?" - exactly three artifacts, numbered, each with what-it-is and where: (1) provider.ed25519.pub, the sole trust anchor, cross-checkable between this site and the GitHub mirror; (2) the attestation = the claim; (3) the receipt = the proof of inclusion. Plus the maximal-benefit path: clone the mirror, run verify.py --all, become a witness. - Three usage lanes (quick check / zero-install audit / autonomous agent), the API, and the means / does-NOT-mean cards. Rendered against the real 8-leaf log and content-asserted in tests' presence. 54/54 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:38:37 +00:00
<p class="muted">Log heads are signed offline; this service is read-only and holds no
key material. Provider tooling, agent tooling, and the full course (12 Jupyter
lectures) live in the <a href="https://github.com/saymrwulf/proof-aware-crypto-tooling-agent">pacta repository</a>.</p>
The log goes public: git-published mirror, online service, witnesses Three synchronized faces of one log - transport orthogonal to trust: - PUBLISHED GIT MIRROR: log-publish exports the public face (one file per leaf so git history mirrors log history; the FULL STH history as the witness channel; per-component attestations + receipts; the provider public key; a standalone stdlib-only verify.py and customer README). Live at github.com/saymrwulf/lean-transparency-log (genesis: 8 leaves incl. the honest failed-run entries, dogfood-signed head). - ONLINE SERVICE (pacta_provider serve): read-only, zero-dependency HTTP with CT-style endpoints under a base path for zkdefi.org/lean-transparency-log - /v1/sth, /v1/sth-history, /v1/sth-consistency?first=N, /v1/proof, /v1/attestation, /v1/entries, /v1/metadata, /healthz - plus self-contained customer documentation at /docs (current state, attested components, API, the verify- without-trusting-this-site path, and the means/does-NOT-mean boundary). The process never loads private keys: heads are signed offline; a compromised server can withhold or replay (pinning + freshness detect both) but never forge. STH history now recorded append-only by the provider (with a backfill head signed for the existing log). - AGENT ONLINE CLIENT: pacta log-fetch (download evidence; explicitly UNVERIFIED until receipt-verify runs - transport is not trust) and pacta sth-refresh (fetch head, verify signature, advance the pin via an online consistency proof from the pinned size; fail closed). - WITNESSES: pacta witness-audit over a clone of the published mirror recomputes every prefix root from the public leaves and checks every historical head + signature - no consistency proofs needed when the leaves are public. Tampering one published entry trips both the leaf-hash check and the prefix-root check (tested). verify.py gives customers the same audit with zero installation. - DEPLOY.md: the complete server-session checklist for zkdefi.org - reconstruct the servable log FROM the published mirror (the server stays in witness trust-position), hardened systemd unit, nginx/Caddy path routing, Forgejo mirror setup, the provider->world update cycle, and remote smoke tests. Validated end-to-end on the REAL log: all 10 endpoints, online-fetched proof re-verified locally through the dogfood verifier with pinning, online pin refresh, publish + witness audit green, tamper caught, standalone verify.py green in the published clone. 54/54 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:20 +00:00
</body></html>"""