Skip to content

How it works

01Capture!receipt saves a source sentence and requests a Twitch clip.
02TranscribeSpeech becomes broadcaster-attributed transcript evidence.
03RetrieveNew source text retrieves related saved promises.
04ClassifySafety and contradiction checks can raise a private review.
05ReviewThe owner can approve a stamp or open an appeal.
06ResolveChat votes on the appeal, and OBS shows the verdict.

The sequence above describes the intended flow. Hosted evidence verifies capture, review, approval, appeal voting, and the verdict across staged runs.

The ASR path combines adjacent raw chunks of about five seconds each into overlapping windows. A window spans nominally ten seconds and has a twelve-second hard limit. Raw claims stay disjoint. Durable transcription_windows rows reference both audio ranges. Exact full ASR text and window bounds remain evidence. Receipts does not rewrite transcript fragments. It skips identical text from shared overlap. It rejects gaps, stale ownership, duplicate raw submissions, partial claims, paraphrases, joined claims, and unsafe quotation context.

Longer promises and ASR errors can still abstain. Offline checks passed, but paid live verification remains pending.

Production uses GPT-6 Luna for promise extraction, sensitivity checks, and contradiction classification. The system also uses text-embedding-3-small for retrieval and gpt-transcribe for transcription.

Sensitive or uncertain outcomes fail closed. A classification never creates a public stamp by itself. The owner controls approval, and chat controls the appeal outcome.

Go 1.27 and Keel 0.9 power the server and SQLite ledger. Svelte 5 and Chaaya 0.5 power the overlay and owner dock. Twitch EventSub, Helix, and clips provide the stream integration.