# Receipt schema fields for interpretability claims (draft v0, from the Goodfire feasibility run)

Every field below was needed to make this one toy claim re-checkable. Fields marked * did not exist in our draft
plan and were added because this run surfaced them.

## 1. Claim
- claim_id, claim_text (one sentence, falsifiable), claim_source (URL + sha256 of the saved page, e.g. Goodfire blog), claim_kind (steer | ablate | patch | probe)
- feature_ids (SAE index list) + published_label for each, as the source gives it
- direction_of_effect (+/-), effect_threshold X, units

## 2. Pre-registration
- falsifier_path, falsifier_sha256, falsifier_written_at (UTC + local), and whether it was written before any outputs (bool)
- amendments[]: {path, sha256, written_at, reason, made_before_outcome (bool), post_hoc_wrt (what had been seen)}  *
- external_anchor (Rekor/transparency-log entry; null here, because it would count as outside contact)

## 3. Model under study
- model_repo, model_revision (commit sha), model_license (tag + LICENSE sha256), gated (bool)
- weight_files[]: {path, bytes, sha256, expected_lfs_sha256, match}
- mirror_of + mirror_equivalence_evidence (e.g. ungated mirror whose shard LFS hashes equal the gated original's)  *
- dtype / precision, variant (fp16)

## 4. SAE / featurizer
- sae_repo, sae_revision, sae_license, sae_file sha256, architecture (BatchTopK, d_in, d_hidden, k), loader_code (repo@commit + sha256)
- known_loader_deviations (e.g. upstream forward() references an undefined norm_constant, so encode/decode were called directly)  *
- hook_site (module path), hook_convention (block output vs residual update), token/patch positions
- sae_fidelity: FVU on our activations, FVU on the publisher's reference activations, activation-norm ratio, gate used  *

## 5. Intervention
- type (add-decoder-direction / clamp / zero-ablate), magnitude (m and how it was derived), unit-normalised (bool)
- spatial/token scope (here: central 8x8 of the 16x16 grid), timesteps/layers affected
- strength-selection protocol (grid, selection split, rule) and the chosen value

## 6. Data
- prompt_sets: {name, role (calibration | density_ref | test), n, file sha256}; disjointness asserted
- seeds (generation and control-draw seeds), RNG device (CPU generator, for cross-hardware reproducibility)

## 7. Metric
- metric_model (repo, revision, license, sha256), metric_definition (exact text prompts, scaling), paired design
- secondary/guard metrics (here: subject-preservation drop)

## 8. Controls and outcomes
- random_matched_density: density definition, reference set, matching rule, pool size, draw seed, feature ids, per-feature E
- shuffled_labels: scheme, n permutations, rule-pass rate, null mean/sd
- planted_fake: construction seed, verdict (must FAIL)
- random_feature_false_positive_count (each random feature put through the same rule)  *
- seed_sweep: per-seed effect
- permutation p-value, rank of the target among the controls

## 9. Verdict
- verdict (PASS | FAIL(list) | INVALID | NOT RUN), checks{P1..P5: bool}, validity_gate (planted)
- exploratory_results (labelled; they cannot change the verdict)

## 10. Environment
- hardware (GPU, driver, CUDA, RAM), OS, python, lockfile sha256 (pip freeze), library versions (torch, diffusers, transformers, huggingface_hub)
- resource limits (nice, threads, RAM cap) and co-tenancy note (shared GPU)  *
- host clock zone (the DGX runs MST; the receipt stores UTC)  *

## 11. Artifacts
- outputs[]: {path, bytes, sha256}, covering raw images, score tables, calibration files and logs
- receipt_sha256 (covers everything above), produced_by (agent/human), run window (start/end UTC)
