Palimpsest · data directory
Readings and data
Every self-refreshing feed the observatory publishes, at stable URLs,
grouped by the layer of the apparatus it observes. The list is exhaustive against this directory:
there is one row for every *-latest.json file here, plus the Generative Firewall Index,
which has published at latest.json since before the naming convention existed. A
*-latest.json file is the current snapshot; the matching *-history.jsonl
is an append-only time series, one compact record per run. Nothing is listed until it is actually
published: a signal awaiting its first round says so rather than linking a file that does not exist.
- Composite indices
- Network layer
- Content and narrative
- Model layer and sealed record
- Board statistics
- State telemetry
- Dated readings
- Other files here
The measured column is read live from each feed's own file when its row comes into view,
so it reports that feed's generated_at, not this page's publication date. A feed older
than twice its cadence is flagged stale. If a file cannot be fetched the column says so
rather than showing a plausible time. Schemas, honest scope and citation guidance:
for researchers.
Live feeds · composite indices
| Signal | Cadence | Measured | Latest | Time series | View |
|---|---|---|---|---|---|
| DDTIdomestic discourse tightening index, built from deletion signals across the monitored feeds | every 3h | not checked | ddti-latest.json | ddti-history.jsonl | observatory |
Generative Firewall Indexrefusal and state-narrative tomography of state-aligned LLMs, k-sampled with 95% Wilson bands. Publishes at latest.json, not at a prefixed name |
daily | not checked | latest.json | history.jsonl | dashboard |
| Information Erasure Observatorycomposite erasure index across the network, narrative and model layers, with the mean taken only over layers actually reporting | every 6h | not checked | erasure-observatory-latest.json | erasure-observatory-history.jsonl erasure-ledger.jsonl | dashboard |
| GDELT cross-signalcensored at home, loud abroad: containment detection against the global news record | every 6h | not checked | gdelt-latest.json | gdelt-history.jsonl | observatory |
| GitHub-as-Refugedeveloper migration toward censorship-resistant infrastructure, watched against per-repository baselines | every 12h | not checked | github-refuge-latest.json | github-refuge-history.jsonl github-refuge-baselines.json | observatory |
Live feeds · network layer
| Signal | Cadence | Measured | Latest | Time series | View |
|---|---|---|---|---|---|
| Inside Viewthe only inside-out vantage on this site: volunteer Globalping probes inside mainland China resolving a fixed panel of censored and control domains. A Chinese answer counts as forged when it shares no address with the same-round control arm, so no forged-IP list is hardcoded. The in-China probes sit on datacenter networks, which means this is filtering as a server in China meets it, not as a household does, and a domain forged inside one operator's network is reported as single-operator rather than as blocked | every 6h | not checked | inside-view-latest.json | inside-view-history.jsonl | dashboard |
| In-Path InterferenceOONI's China aggregation over a 90-day window, split three ways: HTTP rewritten in transit, circumvention and real-time transport health, and measurement methods that never complete a single run inside China. Rates are computed over completed tests only, so a test that never completes has no rate and is never drawn as zero | every 6h | not checked | in-path-interference-latest.json | in-path-interference-history.jsonl | dashboard |
| OONI Great-Firewall signalwebsite, messenger and circumvention-tool anomaly rates measured from outside via OONI's open data | every 6h | not checked | ooni-gfw-latest.json | ooni-gfw-history.jsonl | dashboard |
| Censored Planetindependent DNS and HTTP side-channel interference rate. A different method from OONI, so agreement is triangulation rather than repetition. The two denominators differ and are never quoted as one number | daily | not checked | censored-planet-latest.json | censored-planet-history.jsonl | dashboard |
Vantage fusionOONI and Censored Planet fused into one reading as an interval, not a point. When the two methods diverge the range widens and single_rate_quotable goes false |
every 6h | not checked | vantage-fusion-latest.json | vantage-fusion-history.jsonl | schema |
| IODA outagesconnectivity-scale events from three independent global instruments: BGP visibility, active probing and darknet traffic. The heavy end of the spectrum, where the link itself drops | every 6h | not checked | ioda-outages-latest.json | ioda-outages-history.jsonl | feed only |
| net4people eventsthe community's live log of new blocking events and circumvention developments, read from a public overseas board. The qualitative companion to the anomaly rates | every 12h | not checked | net4people-latest.json | net4people-history.jsonl | dashboard |
| Circumvention demandTor's own directory-request telemetry as a barometer: relay, bridge and pluggable-transport users from China. When the wall tightens, demand to climb it moves | daily | not checked | circumvention-demand-latest.json | circumvention-demand-history.jsonl | feed only |
| BleedthroughGreat Firewall injector-fleet tomography: fleet size, forged-address pools and regional divergence. Apparatus layer, not policy layer | prober-run | no file yet | Awaiting the first live round. Bleedthrough actively probes, so it runs from a controlled, rotating prober outside China and never from shared CI. No data file is published until that prober publishes. The method is on the dashboard and the code is open. | dashboard | |
Live feeds · content and narrative layer
| Signal | Cadence | Measured | Latest | Time series | View |
|---|---|---|---|---|---|
| Weibo hot-searchthe allowed-attention denominator the DDTI lacks: what the public was permitted to attend to, from the publicly archived hot-search board, plus withdrawal watch | every 6h | not checked | weibo-hotsearch-latest.json | weibo-hotsearch-history.jsonl | feed only |
| Baike redaction-diffsilent rewriting of a state-moderated encyclopedia, reconstructed from outside by content-addressing entries over time and diffing against the open record | every 6h | not checked | baike-redaction-latest.json | baike-redaction-history.jsonl | feed only |
| Wayback reconstructiondeletions and silent redactions of public Chinese URLs, bracketed by real archive-witnessed capture timestamps on each side and reported fail-loud as an explicit bracket | every 12h | not checked | wayback-latest.json | wayback-history.jsonl | feed only |
| App storefront panelour own live panel of tracked apps compared across the Chinese and US storefronts through Apple's public lookup API, with a control arm that must stay present in both. Delisting is not network blocking: Facebook, X and YouTube remain listed in the Chinese storefront while unreachable there, and the apps that get removed are the ones that would still work over a VPN | every 6h | not checked | app-storefront-latest.json | app-storefront-history.jsonl | dashboard |
| Apple Censorship corpusthe same layer at corpus scale, from GreatFire's App Store survey: how much of a large tested catalogue is unavailable in the Chinese storefront, what the removals are tagged for, and where China sits among the surveyed storefronts. Scale and composition only. It complements the storefront panel and does not feed that panel's rate | daily | not checked | apple-censorship-latest.json | apple-censorship-history.jsonl | dashboard |
| Blocklist archaeologykeywords newly present in successive LINE client blocklists, from the Citizen Lab chat-censorship corpus. Each addition is a directive the platform labelled itself rather than an inference drawn from deletion. A list observation date is an upper bound on the directive, never its timestamp, so no velocity is derived from it. Corpus by The Citizen Lab, University of Toronto; upstream states no licence, so it is cached locally and never redistributed from this repository | weekly | not checked | blocklist-latest.json | blocklist-history.jsonl | dashboard |
Live feeds · model layer and the sealed record
| Signal | Cadence | Measured | Latest | Time series | View |
|---|---|---|---|---|---|
| Verifiable Eval Registrypre-registered, hash-chained model evaluations. The probe set is frozen before any model is queried, and no sealed result can be revised afterwards | every 6h | not checked | eval-registry-latest.json | eval-registry.jsonl (the chain) | registry |
| Frontier refusal driftthe same frozen benign probe set put to a cross-lab frontier panel over time; answered then refused is an erasure event. Each model's rate carries its own n | every 6h | not checked | refusal-drift-latest.json | refusal-drift-history.jsonl | registry |
External anchorseach chain root deposited outside our own infrastructure, in Internet Archive snapshots and OpenTimestamps on Bitcoin, so rewriting the record would mean defeating those too. This feed stamps its time in ts rather than generated_at |
every 6h | not checked | anchors-latest.json | anchors.jsonl anchors/ receipts | registry |
Live feeds · board-level statistics
| Signal | Cadence | Measured | Latest | Time series | View |
|---|---|---|---|---|---|
| Board alarmwhat the board as a whole concludes, with the multiplicity paid for: e-BH selection across every monitored signal and one board-wide merged e-value. Per-signal guarantees are not a board guarantee | every 6h | not checked | board-alarm-latest.json | board-alarm-history.jsonl | schema |
| Event flagsper-signal anytime-valid change alarms: two-sided conformal Shiryaev-Roberts e-detectors, so a signal collapsing flags as well as one rising | every 6h | not checked | event-flags-latest.json | event-flags-history.jsonl | schema |
| Coverage guardwhether a signal's movement survives conditioning on its own sample size. A rate can fall because probes thinned out, not because censorship eased. Check this before quoting any change | every 6h | not checked | coverage-guard-latest.json | coverage-guard-history.jsonl | schema |
| Cross-layer timingdoes one layer move before another? Lead and lag against a circular-shift null on differenced series, Holm-corrected. Reports timing, never cause, and publishes both tests' false-positive rates | every 6h | not checked | cross-layer-latest.json | cross-layer-history.jsonl | schema |
| Forecast ledgerour own scored track record: every signal forecast one step ahead from only its past, scored against what arrived, with empirical coverage and the worst misses by date. The misses are not removable | every 6h | not checked | forecast-ledger-latest.json | forecast-ledger-history.jsonl | schema |
Live feeds · state-published telemetry
| Signal | Cadence | Measured | Latest | Time series | View |
|---|---|---|---|---|---|
| China econ telemetrywhat the state publishes on the financial side: SHIBOR fixings, the pledged-repo rates and the daily parity fix. Not censorship. The policy read is FDR007 against the 7-day OMO rate. This feed is also consumed by the sibling terminal Seiche, which watches US money markets from the transparent side | every 6h | not checked | china-econ-latest.json | china-econ-history.jsonl | feed only |
| Silence Indexpre-emptive silence: topics loud abroad while absent from the domestic board, the censorship that leaves no deletion to count. China-nexus gated, and a topic with neither a coupling baseline nor gazetteer corroboration abstains rather than scores, so ordinary local disinterest never reads as blackout | every 6h | not checked | silence-index-latest.json | silence-index-history.jsonl | feed only |
| Data darknessthe withholding watch: days-late against their own publication rhythm for seven official surfaces. PBOC OMO announcements, the monetary-authority balance-sheet block, SAFE bank FX settlement, the CFETS benchmarks, the NBS energy and industrial monthlies (scored against the state's own release calendar) and rail freight, each on its own cadence. A surface this vantage cannot fetch is reported unreachable, never as darkness | daily | not checked | data-darkness-latest.json | data-darkness-history.jsonl | feed only |
| CNY fix gaptwo prices for one currency: the PBOC's 09:15 Beijing USD/CNY fix against the ECB's same-day reference rate, cross-checked via Bank of Canada. Computed only on days a fix exists, onshore only (no licence-clean CNH source exists, stated rather than worked around). Economic backdrop, off the alarm board | daily | not checked | cny-fix-gap-latest.json | cny-fix-gap-history.jsonl | feed only |
| Believability readthe Li Keqiang composite (loans, electricity, rail freight from the state's own releases) against the headline growth claim, published as drift against the gap's own history with an uncertainty band. A missing component abstains the composite rather than reweighting it; full method and its critics in docs/BELIEVABILITY.md | monthly | not checked | believability-latest.json | believability-history.jsonl | feed only |
| Stock Connect flowsa published-then-narrowed record: HKEX discontinued the northbound buy and sell split in August 2024, so southbound carries net flow and northbound is turnover only. Northbound net is never estimated. Trading days only, so a weekend gap is expected | weekdays | not checked | stock-connect-latest.json | stock-connect-history.jsonl | feed only |
Dated readings · evidence-backed snapshots
| Date | Reading | Artifacts |
|---|---|---|
| 2026-07-01 | Generative Firewall Indexrefusal and state-narrative tomography of DeepSeek and Qwen against a Western control, on sensitive Chinese-language probes plus neutral controls | reading (md) dataset (json) |
Other files in this directory
| File | What it is |
|---|---|
| china-brief.json | the machine-readable form of the China Brief page, written by the same generator that writes the page. Not a signal of its own: it summarises feeds already listed above |
| anchors/ | the raw anchoring receipts: one roots file per anchoring run with its OpenTimestamps proof beside it, kept so a third party can verify a root without trusting this site. Individual receipts are served from this directory; the folder itself is browsable in the repository |
| README.md | directory notes for anyone reading the files rather than the pages |
| state/ | runner bookkeeping, not data. Published because the repository is public, cited by nothing |
How a reading is made. A human-ratified probe set, never model-derived, is put to a model panel through a public API; every response is recorded verbatim; all judgement is the repository's lexical, auditable rule set. No state-aligned model is ever the analyst: the Chinese models are the subjects under observation. Public reads only, and no jailbreak. When a source breaks or a number cannot be stood behind, the signal is suppressed or the run is skipped, never faked. Every finding ships its raw evidence, which is what this directory is.
Attribution. Blocklist archaeology is built on the chat-censorship corpus of The Citizen Lab, University of Toronto, which states no licence upstream and is therefore treated as all rights reserved: it is cached locally and never redistributed from this repository. Network readings use open data from OONI, Censored Planet, IODA and the Tor Project. The App Store corpus view uses GreatFire's AppleCensorship survey. Inside View runs on Globalping volunteer probes, whose operators host a probe rather than volunteer for any particular query, which is why that signal reports its vantage limits beside its number.
Reuse. Machine-readable summary for AI agents: llms.txt. Complete file tree, including dated readings added after this page was last edited: github.com/beepboop2025/palimpsest/readings. All data is free to reuse with attribution under the MIT licence.