Data schema
Every snapshot under /data/ follows this
schema. Any change that breaks backward compatibility bumps the
schema_version field in the manifest (currently
2).
metrics.csv / metrics.jsonl
One row per (prompt × model) per week. Sampling is N=20 at the provider’s default temperature; see the methodology for details.
week_id- ISO 8601 week identifier, e.g.
2026-W16. corpus_version(snapshot)- The corpus version these results were produced against, e.g.
2026.04.19-v0.2. Added 2026-07-25; readsunknownon earlier manifests. corpus_git_sha(snapshot)- Commit that last changed the public prompt file, so a result can be pinned to an exact prompt set. Scoped to the corpus file rather than repository HEAD, so it moves only when the prompts do. Manifests published before 2026-07-25 carry
unknown: the field was present but never populated by the pipeline. prompt_id- Stable slug; see /corpus/.
model_id- Stable slug per observed model.
n_samples- Number of samples the metrics on this row were computed from (integer). Excludes any that returned no usable content.
unusable_samples- Samples captured for this cell that carried no measurable response and were excluded from every metric, typically a completion truncated by the token limit before any visible output. The raw responses are still published in the week’s snapshot. Where every sample was unusable no row is emitted at all; the cell is listed under the manifest’s
unmeasuredkey instead, because a refusal rate of 0.00 for a model that answered nothing would be worse than no number. Added 2026-07-24; absent on earlier snapshots, where it should be read as 0. rejected_samples- Requests the provider declined to run for this cell, so no response was ever produced and nothing was captured. Excluded from every metric and reported only. Distinct from
unusable_samples, which counts responses we received and could not measure: this counts responses that do not exist. The distinction matters because only one of the two is about the model. A platform declining to process a prompt is a fact about the platform, and folding it into the refusal rate would publish a refusal the model was never asked to make. Where this is non-zero, readn_samplesagainst it: a cell showing 2 samples and 18 rejections was not lightly sampled, it was mostly blocked. Added 2026-08-25; absent on earlier snapshots, where it should be read as 0. refusal_rate- Fraction of samples that declined to answer, in [0, 1].
refusal_ci_lower,refusal_ci_upper- Bootstrap 95% CI on refusal rate, in [0, 1].
hedge_density- Hedging markers per 100 tokens.
length_median- Median response length in tokens.
length_p25,length_p75- 25th / 75th percentile lengths.
stance- Pro / anti / neutral / n/a. Applied only to stance-bearing prompts.
stance_confidence- Classifier confidence for stance, in [0, 1]. Empty where stance is n/a.
embedding_centroid_shift- Cosine distance of this week’s embedding centroid from the prior week’s, ≥ 0.
flagged_for_review- Boolean: human review flagged this row.
flag_reason- Free-text note; empty when not flagged.
sample_s3_uris(removed 2026-07-25)- Present in
metrics.jsonlon snapshots published before this date, always as an empty list. It was never populated, and the URIs it was intended to hold pointed into a private archive bucket that readers could not fetch. Sample responses are now shown directly on each prompt page and every response remains available inresponses.jsonl.gz, so the field was removed rather than left advertising a capability that did not exist.
manifest.json
Present in the current snapshot directory. Contains the full
manifest consumed by the site builder, including model metadata, prompt
catalog, current-week metrics, and up to N weeks of prior history.
The machine-readable JSON Schema is at
site/schemas/manifest.schema.json in the source repository.
responses.jsonl.gz
One gzipped JSON object per line. Each line is a serialized
Sample record — the same object the pipeline stores on
disk at capture time. Fields:
prompt_id,model_id,provider- Identifiers matching the manifest and the metrics CSV.
request_index- Monotonic integer per (prompt × model × week); enables deterministic ordering even under resume.
temperature,max_tokens- The sampling parameters requested from the provider.
text- Raw response body, as returned by the provider.
model_version_string- Exact provider-reported version string at capture time. Changes here over time are the primary silent-update signal.
stop_reason- Provider-reported reason for termination (
stop,length,refusal, …). input_tokens,output_tokens- Token counts as billed by the provider, where reported. May be
nullfor providers that do not return token usage. latency_ms- Round-trip latency of the single sample request.
captured_at- RFC 3339 UTC timestamp of capture.
Only public (non-held-out) prompts appear in this file. Held-out prompts are never published; see the corpus design for why.
Versioning
The schema version is advertised in manifest.json.schema_version.
Column-level additions never bump the version. Column-level removals,
renames, or semantic changes bump the version; the prior column stays
available for a minimum-one-year transition window.
License
CC BY-SA 4.0 for all data files. Attribution: Meridian, with a link to the snapshot URL.