Find a deleted post
Open the journalist evidence trail. Each row is an already-public post, ledger item, or Wayback reconstruction. Search the table by title, term, or source URL. Absence is a coverage gap, not a claim that nothing was deleted.
For researchers, journalists and analysts
Palimpsest is a free public-good observatory for researching the Great Firewall, documented deletion and AI-model refusal behavior. It keeps network, content and model evidence separate, publishes source files and limitations beside every reading, and watches the censor—never the censored.
A reporter who is not the operator should be able to find a public deletion, see the evidence trail, download it, and cite it. The erasure desk is that path. It is not buried in a JSON blob.
Open the journalist evidence trail. Each row is an already-public post, ledger item, or Wayback reconstruction. Search the table by title, term, or source URL. Absence is a coverage gap, not a claim that nothing was deleted.
Every row shows first-seen, last-seen, last-confirmed-alive when known, the source URL, a Wayback snapshot or lookup, and a SHA-256 of the public excerpt. The Situation desk repeats those fields on linked OSINT rows. A lookup URL is an address to try, not a claimed capture, unless a snapshot is attached.
Download the CSV or JSON. Copy the citation line on the row. Cite Palimpsest as the observatory that recorded a public disappearance — not as a witness inside China and not as proof of motive. Method: journalist guide.
Captured: public posts, public deletion ledgers, Wayback reconstructions, and GFW injector telemetry from separate instruments. Not captured: private WeChat, classified systems, in-country accounts, follower graphs, comments, locations, or media binaries. Palimpsest never fabricates a live reading when a collector is silent.
Use more than one vantage. Palimpsest publishes separate measurements from OONI and Censored Planet and from volunteer DNS probes. When methods disagree, the result is an interval—not a fabricated national rate.
Documented removals can be treated as observations, then compared over time for changing attention and novelty. The DDTI Observatory exposes the samples behind each reading. A deletion does not, by itself, prove motive or measure every act of censorship.
It describes behavior on a frozen prompt suite at a stated time. It does not prove motive or universal behavior. The Eval Registry seals prompts, outputs and labels so others can verify the record and avoid comparing incompatible suites; the assurance report states which stronger validity claims remain open.
Each signal recomputes on a fixed schedule and publishes a machine readable file plus a committed time series. Signals that would need a network vantage inside China are held back on purpose until that measurement can be verified, rather than published as a guess.
| Signal | What it measures | Source | Updated | Status |
|---|---|---|---|---|
| DDTI deletion-differential threat index |
Which topics the censor is most actively scrubbing, ranked by attention and novelty. | China Digital Times | every 3 hours | LIVE |
| Generative Firewall state-AI refusal index |
The share of sensitive prompts that state-aligned LLMs refuse or rewrite, against neutral controls. | Public model APIs | daily | LIVE |
| GDELT cross-signal censored at home, loud abroad |
Which censored topics the world's press is covering heavily (containment) versus silently absent (blackout). | GDELT global news index | every 6 hours | LIVE |
| GitHub-refuge pressure on the mirrors |
Takedowns, legal blocks, and visibility drops on GitHub repos that shelter censored material, plus defensive fork and star bursts. | GitHub public API | twice a day | LIVE |
| Eval Registry sealed model evaluations |
Pre-registered, hash-chained audits of Chinese state-aligned and Western frontier models, including refusal drift over time. The registry keeps separate suites: the preserved cn-sensitive-generative-firewall-v1 history covers the state-aligned panel, its staged v2 protocol adds exact-prompt and full-matrix evidence, and frontier-overrefusal-v2 covers the Western frontier panel. They share evidence machinery, not a rubric. A served edit breaks the chain; public history, anchors and witnesses address whole-chain rewriting. The v2 frontier suite asks questions through paraphrase families, publishes Wilson intervals, and seals raw-response digests so a reader can reproduce the current seals and labels. The assurance report separately shows that the human study and unaffiliated replication are unfinished. |
Public model APIs | every 6 hours | LIVE |
| Erasure Observatory composite erasure index |
What the record lost, across the network, narrative, and model layers, sealed into a tamper-evident ledger. Layers that cannot report are shown absent, never zero-filled. | OONI and model audits; Baike disabled and retained as stale | every 6 hours | LIVE |
| GFW network signal live firewall blocking |
Independent, side-channel measurements of Great Firewall blocking events, with historical backfill. | OONI open data | every 6 hours | LIVE |
| Velocity deletion speed |
How fast a post is deleted after posting, timed to the minute. | In-country observation | held back | SUPPRESSED |
All files are plain JSON. The *-latest.json files hold the current snapshot; the *-history.jsonl files are append-only time series, one compact record per run, so you can chart a signal over time.
scripts/verify_eval_registry.py.docs/FRONTIER-DRIFT.md.scripts/verify_refusal_transcripts.py can prove the served text is the sealed text and re-derive every label. Current run only; prior runs live in git history and still verify against their seals.scripts/verify_ledger.py.single_rate_quotable goes false, because a midpoint of two numbers that disagree is not an estimate.A machine-readable summary for AI agents lives at llms.txt. The full directory is at /readings.
Method: METHODOLOGY.md · NEW-METHODS.md · VALIDATION.md · Sources: OSINT_SOURCES.md · Ethics: ETHICS.md · SAFETY.md
Every signal on this board is also forecast one step ahead from only its own past, never refit with hindsight, and then scored against what actually arrived. The uncomfortable half is the point: the published interval either covered the next reading or it did not, and both counts are here. A forecast record with the misses taken out is worth nothing.
The scored track record is read from forecast-ledger-latest.json when this page loads. Figures appear below once that file is read. If it cannot be read, this panel says so instead of showing a number.
| Signal | Forecasts | Coverage | Gap | WIS | Beats baseline | Misses | Worst miss |
|---|
Raw: forecast-ledger-latest.json · forecast-ledger-history.jsonl · coverage-guard-latest.json
If you use this data in an article, report, or paper, a citation and a link back are appreciated. Please cite the accessed date, since the signals update continuously. For a specific signal on a specific day, use the citation builder or python3 -m scripts.build_citation_pack --dataset ddti --day YYYY-MM-DD. To challenge a number, follow How to challenge a number. The sealed weekly fusion lives at weekly-situation.html.
Palimpsest (2026). Palimpsest Censorship Observatory and Verifiable Eval Registry: DDTI, Generative Firewall Index, GDELT cross-signal, and sealed model evaluations [live dataset]. https://palimpsest.info (accessed YYYY-MM-DD).
@misc{palimpsest,
title = {Palimpsest Censorship Observatory and Verifiable Eval Registry},
author = {Palimpsest},
year = {2026},
url = {https://palimpsest.info},
note = {Open live dataset: DDTI, Generative Firewall Index, GDELT
cross-signal, Wayback deletion reconstruction, sealed eval
registry with refusal drift}
}
Palimpsest is fully open source under the MIT licence. The signals recompute inside public, auditable GitHub Actions, and every refresh is a timestamped commit in the repository, so the entire history of what was measured, and when, is public and verifiable. There is no private backend deciding the numbers.
Two of the surfaces go further than the commit trail: the erasure ledger and the eval registry are hash-chained and Merkle-committed, so they stay verifiable even outside git. Clone the repo and run python3 scripts/verify_ledger.py or python3 scripts/verify_eval_registry.py; exit 0 means every seal recomputes and, for the registry, that every run referenced a probe set frozen before the model was queried. This constraint applies to us too. If we edited a published number, our own verifier would report the break.
The roots are also deposited with parties we do not control. Every refresh that moves a root gets an Internet Archive snapshot of the served chain files and an OpenTimestamps stamp into Bitcoin (the .ots proofs live in readings/anchors/ and verify with the standard client, against the blockchain, not against us; anchors-latest.json is the currently stamped root). An independent witness on separate infrastructure re-verifies the served chains on a timer and alerts if any previously seen history changes; anyone can run one with python3 ops/witness/palimpsest_witness.py. Single attestations verify without downloading the chain via python3 scripts/prove_inclusion.py <seq>. The full layer-by-layer trust model, including what these layers cannot prove, is written down in docs/INTEGRITY.md.
The Generative Firewall Index labels every model answer with a transparent rule based classifier: refused, state narrative, or answered. A researcher whose work this instrument builds on asked us a fair question: would actual humans agree with those labels? We want to find out properly, and that part cannot be automated. We need two volunteer coders.
The task. We send you a short manual and a spreadsheet of 145 model answers, some Chinese, some English. Each one is a chatbot's answer to a question. Lengths vary a lot: over two fifths of them are under 500 characters, the median is 683, and the longest is 3,509, so a few are a screen or two of reading. You read the answer and pick one of three labels. That's the whole job. Around four hours, alone, on your own schedule inside two weeks.
Why 145 and not more. The sampler asked for 60 refusals and 50 party-line answers and could only draw 17 and 38: outright refusals and undisguised state-narrative answers are simply rare in the corpus the models produced. We shipped the shortfall rather than pad those cells with near misses, so agreement on the refused and party_line strata will carry wide uncertainty and we will report it that way. The exact targets, pool sizes, and shortfalls are recorded in validation/studies/2026-08-01-gfi-classifier-v1/manifest.json.
Who. Anyone who reads Chinese fluently. Any nationality, no technical background, the manual carries everything you need. One hard restriction: if you are currently in mainland China or Hong Kong, please do not volunteer. The texts touch politically sensitive topics, and no dataset is worth risk to you.
The rules. Work alone, no comparing notes with the other coder until you are both done, and no AI help of any kind. If a machine assists the judgment, the study measures nothing. The entire point is unaided human agreement.
What you get. Your name in the acknowledgments here and in the research paper this feeds, or full anonymity if you prefer. Either way, a public instrument that watches censorship gets a stronger spine because you read carefully for an afternoon.
To volunteer, open a GitHub issue titled Validation coder and say roughly where you are and how you come by your Chinese: native, degree, HSK, or grew up with it. First two qualified volunteers get the sheets.
If you are a reporter, researcher, or think tank and want a specific term tracked, a data extract, or help interpreting a signal, open an issue on GitHub. Palimpsest is a public good and collaboration is welcome.
Free and open source, developed in the open as a public good. Never a commercial product, and it never monetizes the people or topics it observes. The internet stays free because people keep measuring the dark.