Compare a rewrite with its original, inspect the passages, record your decisions, and export the review. Comparison runs in this browser. Generated rewrites can also carry an independently verifiable render receipt.
Literal comparison only: unchanged passages are matched exactly; suggested changed passages share words. Read every change for negation, conditions, quantities and attribution. This is not a semantic judge or a meaning-preservation score.
Passage review
Accepting a passage records your decision; it does not create a signed claim or verify factual accuracy. Source links select the exact retained passage above.
0
Optional: extract claims and generate a rewrite
Extraction sends the source to the configured extraction service. Review extracted claims against the original before rendering. Generating a rewrite sends those claims to the selected provider. The original remains available for review.
1.00
Extracted claims (not verified) 0
Gödel state integer
—
what is this
Each fact (subject, predicate, object) is deterministically mapped to a unique prime via SHA-256(axiom_key) → seed → nextprime(seed). The state integer is the LCM of every prime. Two SUM states merge losslessly by taking their LCM. Entailment: state % prime == 0 answers "does this knowledge base contain fact X?"
unsigned in-browser mint — bundle carries signature: "unsigned:v0".
Structural integrity (state integer ↔ tome) is still verifiable by anyone.
For HMAC or Ed25519 signatures, run sum attest --signing-key …
(see DID_SETUP.md).
Render tome with sliders
Five axes shape the tome from the same facts. Density (above) is deterministic — selects which facts to include.
The four below condition an LLM render via /api/render, which returns a signed
sum.render_receipt.v1 attesting the render. Across a fixed benchmark corpus, fact preservation
across the non-density axes measured median 1.000 (p10 0.818 short-corpus n=8, 0.769 long-corpus n=16) —
corpus-level, not certified for your document, and this live render does not re-measure it; measured,
not yet same-commit-replayable; see
SLIDER_CONTRACT.md.
⚙ Settings — bring your own API keys
operator-funded
Default: operator-funded (the demo's keys). To use your own quota, paste a
scoped/restricted API key below — stored in this browser's localStorage only,
sent to /api/render as a request header per render, never persisted server-side.
The signed receipt's provider still reflects which API actually served the call.
Free-tier cascade providers — used by the Python CLI today
(the hosted Worker's /api/render currently only honours Anthropic + OpenAI
BYO headers). Keys stored in localStorage; the CLI recipe panel below the slider
builds a copy-paste invocation that uses these.
See BYOK_AND_FREE_PROVIDERS.md
for full cascade design.
Security: localStorage is per-origin and survives reloads. Use a scoped key with a low spend cap
and rotate it after this session if anyone else uses this browser. XSS would expose the key — the demo's
CSP is tight (script-src 'unsafe-inline', connect-src 'self'), but no browser-stored
secret is invulnerable. Receipt-verifier path does not use these keys.
The hosted Worker today only routes Anthropic + OpenAI BYO-keys. For the rest of the cascade
(1000 free NIM credits, Groq daily quota, Cerebras daily quota, your HF credits, Ollama free
+ local), the Python CLI is the path. This panel builds the exact invocation matching your
current slider position + the keys you've configured above. See
FALLBACK_PROVIDER_CASCADE
for the full design.
(set at least one key above to see a CLI recipe)
Receipt not checked: use Verify below to check the signature and the exact output, selected claims and slider bindings
(§5 trust scope).
Preservation benchmarked: median 1.000; p10 0.769 long / 0.818 short.
Not recomputed for this render — see
SLIDER_CONTRACT.md.
Signed does not mean true: the receipt is not a truth oracle.
Recorded example: one real bill, four altitudes measured, not certified
A real US Congressional bill (BillSum, CC0) descending the altitude ladder. Scrub the slider:
each detent shows the text at that altitude and what the named NLI judge measured it
kept, dropped, and added versus the full bill.
Optional: measure with a local semantic judge
The browser comparison above is literal and advisory. For a separate per-document proxy measurement under a named local judge, run:
pip install "sum-engine[research,judge]"
sum meaning-diff source.txt rewrite.txt --scorer nli
A per-document measurement under a named judge — not a certified bound (a
sum.meaning_risk_receipt.v1 over a corpus states a bound under its sampling assumptions).
Integrators verify any SUM receipt offline, dependency-light:
pip install "sum-engine[verify]" → python -m sum_verify.
See the meaning-loss frontier.
Open and verify an exported review packet
Paste the packet JSON. Checks run here without an account, API key or network call. Included public keys establish signature consistency, not the issuer's identity. Source and review decisions remain unsigned.
Opening replaces the source and rewrite above with this packet's texts. Its review decisions remain unsigned.
Verify a bundle
Paste a SUM bundle JSON. This in-browser verifier runs two checks: structural — recomputes the state integer from the canonical tome and confirms it matches the claim; Ed25519 — if the bundle carries a public_signature and public_key, the signature is verified natively via SubtleCrypto (Chrome 113+, Firefox 129+, Safari 17+). No server, no network, no keys to supply. HMAC (shared-secret) signatures still require sum verify --signing-key ….
Verify a meaning receipt
Paste a sum.meaning_risk_receipt.v1 (or sum.perspective_risk_receipt.v1) and its issuer JWKS. This runs Stage A in-browser — Ed25519 signature, schema, and the required meaning-loss disclosure — the same checks the Python sum_verify SDK and the Node verifier run, byte-for-byte. Stage B (the conformal-bound replay) stays Python-side (python -m sum_verify --demo). There is no live meaning-issuing key, so load/paste a JWKS rather than fetching one. A clean ✓ is a cryptographic fact, not proof meaning was preserved.
This file is both a standalone HTML page AND a Claude artifact. Paste it into a Claude artifact conversation and extraction upgrades automatically to Claude-grade recall (SVO, lowercased, underscore-joined subjects, negation suppressed, passive inverted — the same rules SUM's Python sieve enforces). Outside an artifact it uses a naive tokeniser; the attestation layer is identical either way. Source + cross-runtime harnesses: github.com/OtotaO/SUM.