The story

Reproduce it

The commands below are the README's, verbatim. Data, weights, model directories and submission TSVs are not in the repository; the layout they are expected in is stated, and the parity checks say how closely a live run reproduces the submitted file.

Setup

Requires uv and FFmpeg. Source: the README's setup section.

uv sync
cp .env.example .env
uv run pytest -q
uv run ruff check .

Data, weights, model directories and submission TSVs are gitignored; only the experiment log is tracked. Expected layout: the NSA test set at data/nsa/HackGTHearsayTesting/, the template at data/nsa/HearsayScoreKey4TeamX.tsv, pretrained weights under weights/, trained bundles under models/.

Score a directory

uv run python scripts/run_pipeline.py --in data/nsa/HackGTHearsayTesting --out outputs/runner/final --template data/nsa/HearsayScoreKey4TeamX.tsv --team CrossExam --fusion models/fusion_v2/constants.json

--fusion models/fusion_v2/constants.json selects the shipped rule. It writes CrossExam_predictions.tsv, one explanation JSON per file under results/, a resumable results.jsonl, timings.csv and run_meta.json. Rerun the same command to resume after a crash. --flip also writes the pre-flipped twin; --rule, --policy and --flip re-fuse the cached logits without reloading a model. Speed with M5 loaded: 1.34 ssource: README.md, section score-a-directory-on-the-mac per file on the full test set (38 minutessource: README.md, section score-a-directory-on-the-mac wall on a Mac shared with other jobs); peak memory 4.0 GBsource: README.md, section score-a-directory-on-the-mac. Source: the README.

Parity

CheckResult
Exported logits → shipped constants → policy, vs the submitted TSV, all 1,671source: README.md, section score-a-directory-on-the-mac rowsmax abs diff 6.7e-16source: README.md, section score-a-directory-on-the-mac
Same, --flip, vs the flipped twinmax abs diff 7.2e-16source: README.md, section score-a-directory-on-the-mac
Live from audio, all files, vs the submitted TSVSpearman 1.000000source: README.md, section score-a-directory-on-the-mac, max 9.3e-4source: README.md, section score-a-directory-on-the-mac, mean 1.8e-5source: README.md, section score-a-directory-on-the-mac; 0 verdict flips, 0 scorer errors
M5 logit, live CPU on WAV vs the A100 export on FLACmax 0.035source: README.md, section score-a-directory-on-the-mac, median 7.0e-4source: README.md, section score-a-directory-on-the-mac
Handcrafted logit, live vs exportmax 4.4e-16source: README.md, section score-a-directory-on-the-mac (numpy trees, identical)
M1b logit, live CPU vs the MPS-extracted exportmax 5.5e-4source: README.md, section score-a-directory-on-the-mac
Spectra-AASIST logit, live CPU vs MPS exportmax 1.1e-4source: README.md, section score-a-directory-on-the-mac
Previous rule: exported logits → previous constants vs the 08:13 TSV, all rowsmax abs diff 1.1e-16source: README.md, section score-a-directory-on-the-mac

Reproduce in Docker (offline, CPU; not a graded deliverable)

NSA said on Saturday that the image is not required; the deliverable is the TSV and the README. The image is kept as evidence that the pipeline runs offline from a clean build. The recorded image runs the previous rule, not the shipped one: it does not contain the M5 checkpoint. Source: the README.

bash docker/build.sh
docker run --network none -v <test_dir>:/data:ro -v <out_dir>:/out -v <path>/HearsayScoreKey4TeamX.tsv:/tmpl/key.tsv:ro -e HEARSAY_TEMPLATE=/tmpl/key.tsv -e HEARSAY_TEAM=CrossExam hearsay:20260926-0916

The image contains every engineered detector, the M1b probe, Spectra-AASIST, the ECAPA speaker model, the handcrafted bundle and the fusion constants, with a sha manifest of the shipped files checked at start. It refuses to start unless it is offline, and nothing is downloaded at run time. Always pass HEARSAY_TEAM: the runner's default team name is not ours. Recorded image hearsay:20260926-0916: 50source: README.md, section reproduce-in-docker-offline-cpu-linuxamd64-not-a-graded-deliverable test files scored inside the image against the previous rule's TSV, Spearman 1.0source: README.md, section reproduce-in-docker-offline-cpu-linuxamd64-not-a-graded-deliverable, max abs diff 2.02e-4source: README.md, section reproduce-in-docker-offline-cpu-linuxamd64-not-a-graded-deliverable; decoded audio identical to the Mac on 50 of 50 files; the smoke test passed, including the refusal to run online.

Where each artifact lives

ArtifactPath
Experiment log (every TSV with its holdout score)submissions/log.csv
Shipped fusion constantsmodels/fusion_v2/constants.json; previous rule models/fusion_v1/constants.json
Per-detector score exportsoutputs/detector_scores/<name>.csv (regenerable; commands in each report)
Model bundles and their readoutsmodels/<rung>_<stamp>/meta.json
Submitted TSVsubmissions/20260926-0914_M4_sweep_A3_w0.2_E_CANDIDATE_our_direction.tsv (sent as CrossExam_predictions.tsv)
Fold filesplits/nsa_folds.csv (+ nsa_folds_plus_asv19.csv for M1b)
Experiment write-upsdocs/reports/
Outside reviews we asked for, and their answersdocs/consults/
Run specs and auditsdocs/specs/

Repository layout

src/hearsay/            application code; detectors/ holds the contract and every detector
tests/                  pytest suite (hermetic; data- and weight-dependent tests are marked)
scripts/                extraction, training, fusion, runner, cloud and ops scripts
docker/                 build, entrypoint, smoke, parity and asset-manifest scripts
docs/                   plan, architecture, code map, reports/, specs/, consults/, handoffs/, and this site
submissions/            log.csv (tracked) and submission TSVs (ignored)
data/ weights/ models/  local only
.claude/                Claude Code skills and review scripts shared by the team