Receipts & the Seal
The differentiator made visible. A ledger with one entry per turn: the inference receipt, the memory receipt, and — only when the call was genuinely attested — the Seal.
#The Record
Every value in the Record is real; the component is built so we never render a receipt we did not receive. Inside each receipt, the provider links to the chain explorer, hashes carry a copy button, and tx hashes link out. A judge does not take the UI’s word for anything — every claim is a link to the underlying 0G record.
#The earned Seal
The Seal — an SVG wax stamp with concentric crimson rings and a circular “SWORN · TEE ATTESTED · 0G” legend — renders only when the inference was genuinely attested.
export function RecordEntry({ turn, variant, shareable }) {
const isSample = turn.turnId === 'turn_sample'; // the sample is always visibly marked
return (
<article className={'entry ' + variant}>
{isSample && <div className="entry-sample">Sample · illustrative, not a real receipt</div>}
<InferenceReceiptView receipt={turn.inferenceReceipt} />
<MemoryReceiptView receipt={turn.memoryReceipt} />
{/* the Seal is earned: shown only when the inference was genuinely attested */}
{turn.inferenceReceipt.valid && <SealBlock stamp={variant === 'now'} />}
{shareable && <a className="entry-share" href={verifyHref(turn.turnId)}>Verify this call</a>}
</article>
);
}Its docstring is blunt: “It is EARNED: render it only on a genuinely attested call. Faking it is the one unforgivable bug.”
#The state vocabulary
The chips translate the wire status into Sworn’s language, honestly in both directions:
export function InferenceStateChip({ valid }) {
// valid is the REAL processResponse result. true → "Sworn"; false → "Unsworn".
return valid
? <div className="state ok"><Tick />Sworn</div>
: <div className="state unsworn">Unsworn</div>;
}
export function MemoryStateChip({ status }) {
if (status === 'verified') return <div className="state ok"><Tick />On the record</div>;
if (status === 'failed') return <div className="state unsworn">Write failed</div>;
return <div className="state pending"><span className="spin" />Filing · ~3 min</div>;
}Sworn and On the record are the attested states; Filing is in flight; Unsworn and Write failed are shown plainly when verification did not happen.
#The design system
The look is deliberate: a near-black page, a single crimson accent (the wax-seal red), one serif-italic voice for emphasis, and monospace reserved strictly for on-chain data. The codebase calls it “affidavit meets terminal.” Color is meaning: crimson is the brand and the seal, sage means attested, amber means in flight — nothing else is chromatic.
:root{
--bg:#070708; --panel:#0e0c0e; --text:#f4f2ec;
--seal:#c5403a; /* THE accent */
--sage:#86b894; /* verified / sworn — ONLY */
--amber:#d2a24e; /* filing / pending — ONLY */
--sans:'Satoshi', system-ui, sans-serif;
--serif:'Instrument Serif', Georgia, serif;
--mono:'JetBrains Mono', ui-monospace, monospace;
}#The verify page
Every call is shareable. The public route /verify/[turnId] re-renders a stored turn with the live memory receipt swapped in by root hash — so a link sent to a teammate or a judge shows the real, up-to-the-second status, not a frozen snapshot. It is read-only: no wallet, nothing to sign.
For offline demos, the workbench can seed a clearly-marked sample turn so the proof feed is visible before compute is funded. That entry is tagged “Sample · illustrative, not a real receipt” everywhere it renders. Honesty is not only in the backend; it is in every pixel that could be misread.