The idea
Not is this quote real?Here is the proof that I quoted correctly.
Nobody can prove a sentence was never said. The denominator is unknowable — nobody holds every word a person ever spoke. So Citable turns the burden around and arms the person quoting, not the person doubting.
A statement is split at its blank lines. Every paragraph is bound to its position, and only the root of that tree goes on chain — 32 bytes. Quote from it and you can hand over the proof with the quote: this passage stood word for word at paragraph 5 of 7, here are its neighbours, here is the date.
No database, no indexer. The text sits on IPFS, the tree is rebuilt in your browser, and the chain holds 32 bytes. Checking a quote needs no service at all — including this one. Publishing uses one, to pin the text so the record points at something; it can go down, it cannot lie, because every bundle is held against the root on the chain.
Two doors, the same size
Citable walks every statement that name has registered, rebuilds each text from its bundle, and asks the contract which paragraph the quote was — and where it stood. All of it in this tab.
How a proof holds
Seven paragraphs go in. Thirty-two bytes come out.
Each paragraph is hashed together with its index, so a leaf says both what was written and where. Pairs are hashed into pairs until one value is left. That value is what goes on chain.
A quote comes back with the short path from its leaf to the root. The contract recomputes the path and either arrives at the registered root or does not. It never sees the text, and it never has to.
Move a paragraph and the leaf changes, because the index is inside it. Sorted sibling pairs would otherwise prove membership without proving position — and position is the whole claim.
The number of leaves cannot be recovered from a root. So “paragraph 5 of 7” takes its 7 from the bundle, which was itself checked against the root — never from the count the author wrote on chain.
What an answer can be
Three answers, and only two of them are facts.
A quote is checked in one direction only: word for word first, and the softer tests come after, each one weaker and each one labelled as such.
- Stage 1
Proven
This paragraph stood at this position, word for word.
- How
- The fragment is a whole paragraph. Its leaf and the path to the root go to the contract, which recomputes them.
- What it is worth
- A fact. Mathematics, checked on chain, with no trusted party anywhere in it.
- Stage 2
Part of a paragraph
The fragment is in the text, but it is not the whole paragraph.
- How
- A literal substring match inside a paragraph the bundle already held against the root.
- What it is worth
- Also a fact — and a warning. A shortened quote can be accurate and still mislead, so the rest of the paragraph is shown beside it.
- Stage 3
Covered
Paragraph 3 covers this claim to 83 %.
- How
- Embeddings shortlist three paragraphs, a value check drops any that assert a number or an actor the text never mentions, and an entailment model scores what is left.
- What it is worth
- A measurement, and it can be wrong. 83 % does not mean 83 % true — it means no distorted quote in the test set behind the threshold reached this value.
The case this was built for
The words change. The meaning does not.
A German sentence quoted in an English paper shares no characters with its source. A word-for-word proof has nothing to compare. That is where most of this problem actually lives, and it is the reason stage 3 exists. The source below is German because the demonstration needs it to be; every line of it is glossed in English.
Im vergangenen Quartal stieg der Umsatz um vier Prozent.Last quarter, revenue rose by four percent.
Five things asked of it
The paragraph itself, word for word
Im vergangenen Quartal stieg der Umsatz um vier Prozent.
Last quarter, revenue rose by four percent.
Proven
Stage 1. The leaf and its path go to the contract, which recomputes them. No model is involved and none is needed.
Translated into English
Revenue rose by four percent last quarter.
Covered83 %
Stage 3. Not one character matches, so stages 1 and 2 find nothing. The entailment model puts coverage at 0.8253 against paragraph 3 of 6.
Translated into Spanish
Los ingresos aumentaron un cuatro por ciento el trimestre pasado.
The same sentence, translated into Spanish.
Not covered56 %
The same sentence in Spanish scores 0.562 and falls below the 0.80 threshold. A correct quotation refused — the failure is real, and it is on the page rather than behind it.
One word changed: forty instead of four
Im vergangenen Quartal stieg der Umsatz um vierzig Prozent.
Last quarter, revenue rose by FORTY percent.
Not scored at all
The value check reads 40 in a claim about a paragraph that says four, and the model never sees the pair. Deterministic, no model, checkable by hand — and it normalises value rather than spelling, so four, vier and cuatro are the same number.
An admission that was never made
Roth hat zugegeben, dass die Zahlen manipuliert wurden.
Roth has admitted that the figures were manipulated.
Not covered9 %
A question in the text turned into a confession. Entailment asks whether the text carries the claim, and this text does not.
Why it is not a similarity score
Measured against the paragraph “Wurden die Zahlen manipuliert?” — were the figures manipulated? — the invented confession scored 0.880 on plain similarity — higher than a correct English translation of that same paragraph, at 0.877.
Similarity measures what a sentence is about. A question and an accusation are about the same thing. Entailment asks something else — is this claim carried by this text — and that is the only question worth answering here. The percentage is the entailment value, and it means that no distorted quotation in the test set reached it. It does not mean the claim is that likely to be true.
mDeBERTa-v3-base-xnli, threshold 0.80, run in your browser. The model identifier travels with every figure — another model gives another number. Sixteen test cases are a signal, not a validation.
What this cannot do
The limits are part of the instrument.
A measuring instrument that hides its error bars is not a measuring instrument.
- Not registered is not invented
- An absence says something about this registry and nothing about the world. That is why the screen never answers a plain no — it names how many statements and how many paragraphs it actually read.
- Stage 3 is a measurement
- Sixteen test cases are a signal, not a validation. Spanish scores measurably worse than English and would be rejected at the threshold. Irony and quote-within-quote are not handled at all.
- A proof is about position, not truth
- That a paragraph stood where it stood says nothing about whether it was right. Citable can show you were quoted accurately. It cannot show you were correct.
- Whoever registers a text first holds it
- Identical text gives an identical root, so someone can register another author's words before they do. Documented, not solved.
- The registry owner can switch the name check off
- A known central point. It cannot alter statements already recorded and no proof depends on it — but it is there, and pretending otherwise would be the same trick this project exists to expose.
- The cold start problem is unsolved
- A register of quotations is worth what is in it. Nothing here fixes that, and no hackathon project does.