Each step removes something the model was getting for free, and asks what survives. Every number here is read from the artifact named beside it.
ens_rank3) reaches 0.7443. The audio model loses to one demographic variable. n=8 repeats × 5 folds on 1,679 speakers · bench_svd_wavlm_mean_std.jsonV2_speaker_subspace.json, shares computed over the ranks whose CI excludes zeroV1_ssl_vs_handcrafted.jsonWhat survives once demographics and identity are stripped is AUC ≈ 0.65 — real, well above chance, far below the ~0.85 the literature reports here, and nowhere near clinical usefulness.
Each step links to the run that produced it: bench-wavlm · v2-speaker-subspace · v1-ssl-vs-handcrafted.
An autonomous, pre-registered audit harness that systematically re-tests published voice-health classification claims for speaker leakage, acquisition confounds, and cross-corpus collapse — publishing a transparent ledger of which claims survive. This program does not build another voice-disease detector.
This page is the master. Every claim on it drills down twice, and each tier is generated from the same declared artifacts, so the three cannot disagree.
experiment_log.jsonl in this repository.A person speaks; a model listens and predicts a health condition. The appeal is that the sensor is a microphone everyone already owns. Two mechanisms make it plausible rather than magical. First, the larynx is the instrument — a vocal-fold paralysis, a polyp, swelling, a tumour or surgical scarring changes the sound directly. Second, speech is a motor act needing breath control, timing and fine neuromuscular coordination, so neurological and respiratory disease can leave traces even when the larynx is healthy. The first mechanism is short and well-evidenced; the second is a long causal chain and correspondingly weaker. The literature also claims depression, diabetes and heart failure from voice — this program tests none of those, for the reason in the next block.
The primary corpus is the Saarbrücken Voice Database, a clinical archive from Saarland University Hospital. Each participant records 14 short vocalisations: the sustained vowels /a/, /i/, /u/ at normal, high, low and rising-falling pitch, plus one spoken German sentence.
Sorted by how many speakers carry each diagnosis — not how many recordings, since a condition with 200 clips from 8 people is an 8-person condition:
| condition has ≥ N speakers | number of conditions | speakers covered |
|---|---|---|
| ≥ 100 | 2 | 265 |
| ≥ 50 | 6 | 535 |
| ≥ 30 (this program's data floor) | 12 | 762 |
| ≥ 5 | 28 | 938 |
| ≥ 1 | 70 | 1,019 |
19 of the 70 conditions are represented by a single speaker. So the honest answer is:
And note what those conditions are: almost all are dysphonias and structural larynx disorders — the category where the sound changes because the sound-producing organ changed. This corpus contains essentially no systemic disease. A model trained here detects disordered voice, not disease in general, and describing it otherwise is a category error.
Published SVD results report UAR in the mid-80s. But healthy participants here average 27 years and patients 49, so patient age alone reaches ROC-AUC 0.87 without hearing a single audio sample (F1 below). Any classifier that quietly learns "older ⇒ patient" inherits that score for free. The interesting quantity is therefore not the accuracy but the margin above the demographic baseline on the identical folds — a number the field does not currently report. Measuring it is the entire purpose of this repository.
Every count in this section is recomputed at build time from data/interim/svd/manifest.csv; none is hand-entered.
SVD is one corpus of many. The companion page catalogues every dataset the field uses to claim a disease can be heard in a voice — 25 corpora across 7 disease families (larynx, Parkinson's, dementia, dysarthria, respiratory, mental health, multi-phenotype), 8 of them released or audited in 2026 — each scored on the question the published surveys do not ask: could a result on this dataset mean anything? Spoiler: 5 of the 25 can never carry a generalisation claim at all.
experiment_log.jsonl rows: 0 (the file does not exist; the run ledger is assembled from the artifacts themselves)data/PREPROCESSING_STATUS.md (hand-maintained, last written 2026-07-25 22:39 UTC) states SVD at 667 decoded files from 49 speakers. data/interim/svd/summary.json (machine-written, 2026-07-28 03:12 UTC) states 61,170 decoded from 1,679 speakers.
Every count on this page comes from the JSON. The markdown is stale and is flagged rather than narrated — an earlier build of this page rendered the markdown in one panel and the JSON in the next, so two adjacent elements contradicted each other with nothing marking either. This panel is generated by a comparison, so it disappears on its own once the markdown is refreshed.
CognoSpeak/PROCESS-2); Bridge2AI-Voice v3.1.0 needs PhysioNet credentialing plus a separate DACO application for raw audio. Both are paperwork-bound, not compute-bound. (data/ACQUISITION_STATUS.md)Using only the demographic metadata distributed with the Saarbrücken Voice Database — no audio, no features, no model of speech — over n = 2,225 sessions (1,356 pathological / 869 healthy) from 1,853 unique speakers:
| predictor | ROC-AUC (pathological vs healthy) | n |
|---|---|---|
| age alone | 0.8709 | 2,225 sessions |
| sex alone | 0.5172 | 2,225 sessions |
age + sex, logistic, speaker-disjoint 5-fold GroupKFold | 0.8768 | 2,225 sessions / 1,853 speaker groups |
Healthy speakers are young volunteers; pathological speakers are older clinic patients. Mean age 28.3 years (healthy) vs 51.0 years (pathological) — a gap of 22.7 years.

voice_data.csv by scripts/build_dashboard.py; the script aborts if the recomputed counts and means disagree with F1_demographic_baseline.json.200 of 1,853 speakers contribute more than one session (max 24 sessions for a single speaker). Splitting SVD at the recording level — the default in any naive train_test_split — leaks those speakers across folds. All work in this repository splits on SprecherID via GroupKFold and asserts speaker-disjointness before every fit.
Quoted verbatim from FINDINGS.md §F1. The published SVD benchmark is UAR 85.22 (arXiv:2410.10537) — different metric, indicative only.
# metadata (167 KB), then the baseline -- CPU, seconds, no audio required python scripts/fetch_svd.py --metadata-only python scripts/audit_demographic_baseline.py --dataset svd
Command: run_benchmark.py --corpus svd --backbone egemaps --head all --folds 5 --repeats 10 — opensmile-eGeMAPSv02, 88 features, 5-fold speaker-disjoint × 10 repeated partitions, n=667 recordings / 49 speakers, 20 pathological / 29 healthy speakers.
| head / baseline | speaker-level ROC-AUC | 95% CI | recording-level ROC-AUC | UAR | ECE | verdict vs age bar |
|---|---|---|---|---|---|---|
logreg | 0.6172 | [0.437, 0.777] | 0.5709 | 0.6560 | 0.204 | NOT CLEARED |
linsvm | 0.5259 | [0.353, 0.697] | 0.5314 | 0.5250 | 0.088 | NOT CLEARED |
mlp | 0.6310 | [0.460, 0.791] | 0.5958 | 0.6560 | 0.209 | NOT CLEARED |
gbt | 0.7983 | [0.663, 0.925] | 0.6910 | 0.6655 | 0.152 | NOT CLEARED |
ens_rank3 | 0.7190 | [0.566, 0.855] | 0.6394 | 0.6448 | 0.186 | NOT CLEARED |
confound age_only | 0.7086 | [0.533, 0.874] | 0.7027 | 0.6716 | 0.244 | THE BAR |
confound sex_only | 0.4569 | [0.286, 0.630] | 0.4552 | 0.6336 | 0.282 | baseline |
confound age_sex | 0.6776 | [0.495, 0.853] | 0.6725 | 0.7138 | 0.188 | baseline |
confound duration_only | 0.4414 | [0.283, 0.606] | 0.4149 | 0.5000 | 0.012 | baseline |
confound intensity_rms_only | 0.5155 | [0.359, 0.689] | 0.4655 | 0.5000 | 0.087 | baseline |
confound age_sex_duration_rms | 0.6759 | [0.495, 0.852] | 0.6723 | 0.7138 | 0.179 | baseline |
Sortable: click a column header. CI = 2,000-resample speaker-level bootstrap. All rows: n=667 recordings / 49 speakers.
Result: the strongest confound baseline is age_only at speaker-level AUC 0.7086. The best audio head (gbt) reaches 0.7983, a delta of +0.0897 (95% CI [-0.076, 0.264]). All 5 heads are NOT CLEARED. On this slice, eGeMAPS carries no demonstrated signal above patient age.
What this does NOT claim, and what has since superseded it. This is 49 speakers — a speaker-disjoint test fold holds about ten people and the 95% CI on any accuracy is roughly ±15 pp, visible in the intervals above. It satisfies the repeat contract (10 repeats) and is still a narrow slice; both facts are stated because either alone would mislead. It is not evidence that eGeMAPS fails on full SVD. The same corpus has since been measured at 1,679 speakers with a different representation — see run-bench-wavlm, which reaches the same verdict against the same bar. This section is kept rather than deleted because a superseded null that is quietly removed is indistinguishable from one that was never run (R8).

bench_svd_egemaps.json or F1_demographic_baseline.json. The dashed line is the published target and is a different metric (UAR) on a different, larger slice — it is drawn for orientation, not as a like-for-like contest.Published SOTA cells are quoted verbatim from corpus/SURVEY_datasets.md §1. "Ours" is filled only from a measured artifact in autoresearch_results/; everything else says not yet measured. Margins are shown only where the two numbers are the same metric on a comparable slice — otherwise the cell says so.
| dataset | published SOTA | ours | margin vs SOTA | confound baseline | margin vs confound | speaker-disjoint? | status |
|---|---|---|---|---|---|---|---|
| SVD (Saarbruecken Voice Database) | UAR 85.61 (F) / 84.69 (M) / 85.22 (combined) — arXiv:2410.10537 | UAR 0.7676 / AUC 0.8650 n=28,509 recordings / 1,679 speakers, 8 repeats × 5 folds, WavLM ens_rank3, speaker-level EVALUATIONsuperseded pilot: eGeMAPS gbt AUC 0.7983 on n=667 recordings / 49 speakers — same corpus, 3% of the speakers | not comparable the published figure is UAR; ours is ROC-AUC. Different metrics are not differenced here. | 0.8649 AUC age_sex_duration_rms, same folds, same run 0.8768 AUC age+sex, metadata only, full corpus (F1) | +0.0001 AUC 95% CI [-0.017, 0.018] — includes 0 NOT CLEARED | YES — SprecherID | EVALUATION NEGATIVE |
| Coswara | AUC ~0.92 intra-dataset | not yet measured | not yet measured | not yet measured | not yet measured | YES — participant id submission-disjoint, not person-disjoint: the returning-user flag is blank for 680 of 2,746 | PENDING |
| PROCESS-2 | macro-F1 0.59 (3-way), F1 0.85 (2-way), MMSE RMSE 3.87 (DistilBERT) arXiv:2605.14888 | not yet measured | not yet measured | not yet measured | not yet measured | n/a — not obtained | BLOCKED manual HF gate; 400 participants fails the 500/class bar — screening-tier only |
| ICBHI 2017 respiratory sound | ICBHI score (event-level) | not yet measured | not yet measured | not yet measured | not yet measured | n/a — not obtained | BLOCKED |
| ADReSS / ADReSSo / ADReSS-M | ADReSS F-score ~0.79 (with age+sex as inputs); ADReSSo acoustic F-score ~0.76 | not yet measured | not yet measured | not yet measured | not yet measured | n/a — not obtained | BLOCKED |
| corpus | on disk | files found | decoded | speakers | audio | class balance | licence / access | speaker-disjoint possible? |
|---|---|---|---|---|---|---|---|---|
| SVD (Saarbruecken) 33262 duplicate waveform hashes (within-speaker only) | 152 MB | 61,178 | 61,170 8 failed | 1,679 | 3639.2 min | 41,653 pathological 19,517 healthy | free to use ("free for reproducible voice science") | YES provenance: participant |
| COUGHVID | 2.30 GB | 13,535 | 13,535 | 13,535 | 1856.9 min | 10,132 healthy 2,683 symptomatic 720 COVID-19 | open (Creative Commons via Zenodo) | NO — cannot support an evaluation claim (0 real speaker ids) uuid is per-recording; one person may appear in both halves of any split and there is no way to detect it. Pretraining and OOD probing only. |
| Coswara | 12.98 GB | 684 | 610 74 failed | 72 | 110.7 min | 529 healthy 45 no_resp_illness_exposed 36 resp_illness_not_identified | open | YES provenance: participant |
Counts read from data/interim/<corpus>/summary.json and the row count of each manifest.csv; on-disk sizes from data/ACQUISITION_STATUS.md; licences from corpus/SURVEY_datasets.md. SVD and Coswara are partial acquisitions — the speaker counts here are what is decoded on this host, not corpus totals (SVD: 1,853 speakers exist in the distributed metadata, 1,679 decoded; Coswara: 2,746 exist, 72 decoded). Both totals are read, not typed: the SVD figure comes from F1_demographic_baseline.json and the Coswara figure from autoresearch_results/acquisition/coswara_meta_stats.json.
There is no experiment_log.jsonl in this repository, so this table is assembled from the result artifacts themselves through a declared registry in scripts/build_common.py: a run that is renamed, deleted, or added without being declared fails the build. That gate exists because three executed hypotheses once sat on disk for days while every published surface reported them UNTESTED. Every row carries its n and its tier; click a column header to sort, type to filter, click a run to open its full page.
| run | tier | n | corpus / representation | headline metric | reference bar | verdict | hypothesis | finding | written |
|---|---|---|---|---|---|---|---|---|---|
| v2-shuffle-control Label-shuffle negative control for the V2 subspace ablation | CONTROL SCOPE-LIMITED | 3 ×5 folds | svd wavlm | 0.5069 full-embedding disease AUC (shuffled labels) | 0.5047 AUC after removing the speaker subspace (k=8) | CONTROL PASSES -- effect vanishes under shuffling | V2 | F4 | 2026-07-28 21:11 UTC |
| v1-ssl-vs-handcrafted SSL vs handcrafted features under age-matched speaker-disjoint splits | EVALUATION SCOPE-LIMITED | 10 ×5 folds | svd see artifact | 0.6496 mean ROC-AUC, eGeMAPS (age-matched) | 0.6227 mean ROC-AUC, WavLM (same folds) | SSL DOES NOT BEAT HANDCRAFTED | V1 | F7 | 2026-07-28 16:05 UTC |
| v6-preprocessing-leakage Scaler-fit-before-split leakage, measured on embeddings | EVALUATION SCOPE-LIMITED | 10 ×5 folds | svd see artifact | 0.0042 max |delta AUC| across the cells that ran | 3 / 6 cells run / cells pre-registered | PARTIAL -- near-null reproduced; falsifier NOT evaluable | V6 | F5 | 2026-07-28 14:03 UTC |
| v7-silence-shortcut Silence-only features across three corpora -- the Clever-Hans probe | EVALUATION | 10 ×5 folds | svd see artifact | 0.5264 highest silence-only AUC of 4 cells (coughvid) | 4 / 6 cells run / cells pre-registered | PARTIAL -- shortcut does NOT generalise | V7 | F6 | 2026-07-28 12:56 UTC |
| v2-speaker-subspace Speaker-identity subspace ablation against variance-matched controls | EVALUATION SCOPE-LIMITED | 10 ×5 folds | svd wavlm | 0.7382 full-embedding disease AUC (real labels) | 0.6104 AUC after removing the speaker subspace (k=8) | CLAIM SUPPORTED -- falsifier did NOT fire | V2 | F4 | 2026-07-28 10:59 UTC |
| bench-wavlm WavLM-base+ on full-corpus SVD vs its own confound battery | EVALUATION SCOPE-LIMITED | 8 ×5 folds | svd wavlm | 0.8650 speaker-level ROC-AUC, ens_rank3 | 0.8649 confound bar (age_sex_duration_rms) | NOT CLEARED | predates the registry | F2, F3 | 2026-07-28 04:47 UTC |
| bench-egemaps eGeMAPS on the decoded SVD pilot slice vs its own confound battery | EVALUATION SCOPE-LIMITED | 10 ×5 folds | svd egemaps | 0.7983 speaker-level ROC-AUC, gbt | 0.7086 confound bar (age_only) | NOT CLEARED | predates the registry | — | 2026-07-25 23:55 UTC |
| f1-demographics SVD demographic baseline -- age and sex only, no audio | SCREENING SCOPE-LIMITED | 0 ×5 folds | svd metadata only | 0.8709 ROC-AUC, age alone | 0.5172 ROC-AUC, sex alone (negative control) | CONFOUND ESTABLISHED | predates the registry | F1 | 2026-07-25 21:28 UTC |
No row is highlighted as a champion, because this program has no champion. COMPOSITE.md defines a Goodhart-resistant composite (VOICE_AUDIT_COMPOSITE v1.0.0, fingerprint 37e745ed9b0bb4bd…) whose implementation location src/voiceaudit/composite.py does not exist, so no composite is computed for any row and no row can be ranked against another. Ranking these runs by a number that was never computed would be exactly the kind of orphan number the rest of this page refuses to print. Run ledger page →
One row per ## Fn section of FINDINGS.md, with the tier the finding claims for itself and the artifact it points at. Nulls, partials and blocked results appear here at the same prominence as positives (R8) — four of these seven are negative or partial.
| id | finding | tier | artifact | run page |
|---|---|---|---|---|
| F1 | On SVD, patient AGE alone reaches ROC-AUC 0.871 without hearing any audio SCREENING-tier, metadata-only. Reproducible in seconds on CPU. | SCREENING | data/raw/svd_meta/voice_data.csv | no single run artifact |
| F2 | WavLM embeddings do NOT clear the demographic bar on SVD (pilot) SCREENING, and formally UNDERPOWERED — the harness refused to certify it. | SCREENING | autoresearch_results/bench_svd_wavlm_mean_std.json | bench-wavlm |
| F3 | At FULL corpus scale (1,679 speakers), WavLM still does not clear the age bar stated in prose; see FINDINGS.md | CERTIFIED | autoresearch_results/bench_svd_wavlm_mean_std.json | bench-wavlm |
| F4 | About a third of WavLM's disease discrimination is speaker IDENTITY, not pathology EVALUATION (n = 10 repeats × 5-fold speaker-disjoint, m = 14 pre-registered, | EVALUATION | autoresearch_results/V2_speaker_subspace.json | v2-speaker-subspace |
| F5 | Scaler-before-split leakage is nothing on SVD embeddings (0.00004 AUC), but the corpus-specificity claim is UNTESTED PARTIAL — 3 of 6 pre-registered cells ran; one is underpowered by construction. n = 10 × 5-fold speaker-disjoint, | PARTIAL | autoresearch_results/V6_preprocessing_leakage.json | v6-preprocessing-leakage |
| F6 | The Clever-Hans silence shortcut does NOT generalise: near chance on all three corpora PARTIAL — 4 of 6 cells; but the silence arm ran on all three corpora. | PARTIAL | autoresearch_results/V7_silence_shortcut.json | v7-silence-shortcut |
| F7 | With age matched away, 88 handcrafted features BEAT a 1536-dim SSL model EVALUATION for the cell that ran (n = 10 × 5-fold speaker-disjoint, m = 9 | EVALUATION | autoresearch_results/V1_ssl_vs_handcrafted.json | v1-ssl-vs-handcrafted |
Six review documents, none of which was linked from any published surface before now. They are listed with their verdicts rather than their titles, because a link labelled “audit” that hides an INVALIDATES-RESULTS finding is worse than no link. Implementer, critic and judge share a model family (R5/R16), so none of these is external validation.
| document | what it found |
|---|---|
Data-split auditaudits/DATA_SPLIT_AUDIT.md · 2026-07-27 05:31 UTC | SVD conditional pass (screening only) · Coswara FAIL · COUGHVID HARD FAIL |
Implementation criticaudits/IMPL_CRITIC.md · 2026-07-28 10:04 UTC | one INVALIDATES-RESULTS defect (embedding cache key omits labels), 5 biases, and an empty tests/ — no rung-0 UNIT layer |
Scientific criticaudits/SCI_CRITIC.md · 2026-07-27 05:31 UTC | the composite fingerprint re-executes, but the composite is implemented nowhere; F1's 0.871 is on 1,853 speakers and was quoted against a 49-speaker slice |
Novelty critiqueaudits/NOVELTY_CRITIQUE.md · 2026-07-25 20:52 UTC | the loop is not novel (arXiv:2606.20394); the domain survives under exactly one framing — audit engine, not detector factory |
Prior-program archaeologyaudits/PRIOR_AUTORESEARCH_REPOS.md · 2026-07-27 05:31 UTC | 7 sibling programs replayed from their own logs; one ran 0 experiments across 324 scaffolded tasks |
Audit index + circularity disclosureaudits/README.md · 2026-07-27 05:30 UTC | leads with the single most serious defect found across all audits |
Per-hypothesis pages → — each registered hypothesis has its own page carrying the claim, the published result it audits, the pre-registered falsifier and predicted effect, and the power arithmetic. The prediction is rendered whether or not a result exists, so a reader can see what was promised before seeing what happened.
Parsed from IDEA_TABLE.md. A hypothesis whose falsifier has not been executed is UNTESTED, never SUPPORTED (R7). Tier and family size are pre-registered in version control before the sweep; reclassifying a loser as screening afterwards is HARKing and is a blocker.
3 of 7 registered hypotheses have never been executed. They are rows in this table with an UNTESTED chip and a run count of zero, not omissions — the prediction is on the record and the run is the debt.
| id | claim | falsifier | required n | tier | runs on disk | status |
|---|---|---|---|---|---|---|
| V1 "SSL beats handcrafted features" may be an artifact of leaky protocols | Under simultaneously speaker-disjoint and demographically balanced splits, frozen SSL/health embeddings do not reliably beat eGeMAPS. | If eGeMAPS lands within 2σ_seed of the best of {HeAR, WavLM-base+, Whisper-small-enc} on ≥ 2 of 3 corpora under A3 = speaker_disjoint + demographically_matched, A4 = fit_per_fold, the "SSL wins" claim is falsified for this task family. | 10 m = 9 (3 encoders × 3 corpora, each vs eGeMAPS) · n = 10 → 0.001953 ≤ 0.05/9 = 0.005556 ✓ | EVALUATION | v1-ssl-vs-handcrafted n=10 | CLAIM SUPPORTED CLAIM SUPPORTED on SVD — matching works (age 0.874→0.553); eGeMAPS 0.6496 BEATS WavLM 0.6227, CI [−0.032, −0.022], 10/10 seeds. Not formally closed (falsifier wants ≥2 corpora) — see F7 |
| V2 Speaker-identity subspace ablation: how much of the "disease" signal is identity? | A large fraction of frozen-embedding disease discrimination lives in a low-rank speaker-identity subspace, and removing it collapses AUC further than a variance-matched random projection of the same rank does. | Two-sided, both pre-registered. (a) If projecting out the rank-k speaker subspace collapses disease AUC toward chance while a variance-matched same-rank random projection does not — i.e. D(k) = AUC_rand(k) − AUC_spk(k) has a Holm-corrected 95% CI excluding 0 and AUC_spk(k)'s CI includes 0.5 — the clinical-validity claim for that model/dataset pair is falsified. (b) Conversely, if D(k) is within... | 10 m = 14 (7 ranks k ∈ {1,2,4,8,16,32,64} × 2 corpora) · n = 10 → 0.001953 ≤ 0.05/14 = 0.003571 ✓ | EVALUATION | v2-shuffle-control n=3 v2-speaker-subspace n=10 | CLAIM SUPPORTED CLAIM SUPPORTED, falsifier did NOT fire — see F4 |
| V3 Where does health-specific pretraining actually cross general-purpose pretraining? | Health-acoustic pretraining buys sample-efficiency, not ceiling: HeAR leads at small labelled-set size and is overtaken by Whisper-enc as n grows. | Sweep labelled-set size n_train ∈ {25, 50, 100, 200, 400, 800, all}, subject-disjoint. If HeAR never crosses Whisper-enc at any n_train on any of the 3 tasks (Holm-corrected), the "health pretraining is the right prior" claim is falsified and reduces to a low-data convenience argument. If HeAR wins low and loses high, the crossover point is the deliverable. | 12 m = 42 (2 contrasts {HeAR vs Whisper-enc, HeAR vs WavLM} × 7 sizes × 3 tasks) · n = 12 → 0.000488 ≤ 0.05/42 = 0.001190 ✓ | EVALUATION | none | UNTESTED UNTESTED |
| V4 Does calibration degrade with distribution shift, or independently of it? | Calibration error does not track AUC collapse under corpus shift, so model confidence is unusable as an out-of-domain detector. | Measure ECE, Brier, and reliability curves within- and cross-corpus on COUGHVID↔Coswara (both directions) and on SVD→VOICED. If ECE stays flat within its own seed noise band while AUC falls from ~0.80 to ~0.55, confidence is falsified as a shift detector — a negative result with direct deployment consequences. Raw and temperature-scaled variants reported separately. | 10 m = 6 (3 corpus pairings × {raw, temperature-scaled}) · n = 10 → 0.001953 ≤ 0.05/6 = 0.008333 ✓ | EVALUATION | none | UNTESTED UNTESTED |
| V5 Zero-shot audio-LLMs as a leakage-free reference point | The gap between a supervised probe and a zero-shot audio-LLM is a cheap, model-free estimate of how much leakage a protocol admits, because a zero-shot model has no training split and therefore cannot leak speaker identity, demographics, or preprocessing statistics. | Compute Δ_leaky = AUC_sup(random_recording split) − AUC_zeroshot and Δ_honest = AUC_sup(speaker_disjoint + demographically_matched) − AUC_zeroshot. If Δ_leaky ≈ Δ_honest (overlapping bootstrap CIs) on ≥ 2 of 3 datasets, the proposed leakage estimator is falsified — the gap tracks supervised capacity, not leakage. If Δ_leaky ≫ Δ_honest consistently across ≥ 3 datasets, the field gains a leakage audit... | 10 screening n ≤ 3 · promotion target m = 3 (3 datasets), n = 10 → 0.001953 ≤ 0.016667 ✓ (n = 8 would also satisfy m = 3) | EVALUATION | none | UNTESTED UNTESTED |
| V6 Preprocessing-fit leakage is corpus-specific and cannot be assumed small | The inflation from fitting the scaler/normaliser before splitting varies by an order of magnitude across corpora, so "we scaled before splitting but it's a small effect" is not defensible on an unmeasured corpus. | If the fit_on_all − fit_per_fold AUC difference has a 95% CI contained within ±0.01 AUC on all of SVD, Coswara, COUGHVID for both eGeMAPS and a frozen SSL representation, the "corpus-specific magnitude" claim is falsified for this pipeline family and preprocessing scope can be de-prioritised as an audit axis. | 10 m = 6 (3 corpora × 2 representations) · n = 10 → 0.001953 ≤ 0.008333 ✓ | EVALUATION | v6-preprocessing-leakage n=10 | PARTIAL PARTIAL — SVD near-null reproduced on embeddings; falsifier NOT evaluable — see F5 |
| V7 The Clever-Hans silence shortcut beyond the Pitt corpus | Non-phonatory signal alone (silence/pause structure, recording-level duration and intensity statistics) achieves a substantial fraction of headline performance on voice-health corpora outside the one where the effect was first documented. | If silence_only and duration+intensity_only baselines both score < 0.60 AUC on all of SVD, Coswara and COUGHVID under A3 = speaker_disjoint, the generalisation claim is falsified and the shortcut is confirmed Pitt-specific for this corpus set. | 10 m = 6 (3 corpora × 2 shortcut feature sets) · n = 10 → 0.001953 ≤ 0.008333 ✓ | EVALUATION | v7-silence-shortcut n=10 | PARTIAL PARTIAL — shortcut does NOT generalise; my mechanism was WRONG — see F6 |
The 10 traps catalogued in corpus/SURVEY_datasets.md §3, each reduced to its operative rule. Every experiment in this program is checked against this list.
| # | trap | operative rule |
|---|---|---|
| 3.1 | Speaker-dependent splits — the #1 leakage failure | Group-aware GroupKFold on speaker id, always. Never train_test_split on recordings. Report the speaker-level n alongside the recording-level n. |
| 3.2 | Recruitment / symptom confound — the field's canonical negative result | Any respiratory claim in this program must report a confounder-matched number alongside the raw number, or it is not a claim. |
| 3.3 | Recording-device and site confounds | Every headline number needs a cross-corpus companion number. Log the recording device / site as a feature and check that a device-only classifier is near chance. |
| 3.4 | Interviewer / prompt shortcut | Strip all interviewer audio and text from any interview-based corpus before training. |
| 3.5 | Age and sex confounds | Report per-sex and per-age-band metrics; include a demographics-only baseline classifier in every experiment and claim only the margin above it. |
| 3.6 | Language and accent confounds | Do not report a cross-lingual result as if it were an in-language one. |
| 3.7 | Tiny-n overfitting | Under the project's rigor contract these are screening-tier only: n<=3 seeds cannot reach p<0.05 under paired Wilcoxon, and a 12-speaker test fold has a standard error of roughly ±0.14 on accuracy. |
| 3.8 | "Balanced" is not "deconfounded", and ASR quality is a hidden variable | It does not remove recording-session, task-administration, or transcription-pipeline effects. |
| 3.9 | Label-provenance asymmetry | These are not interchangeable. A high AUC on a self-report corpus may be measuring self-report behaviour. |
| 3.10 | Anonymisation degrades diagnostic signal | Voice anonymisation, increasingly required for sharing, measurably harms downstream diagnostic classification (arXiv:2304.02181, COVID-19 case study). |
Every panel above is built from one of these files. The write times are shown because an input older than the run it describes is how a page ends up narrating a superseded state — the disagreement panel near the top is generated by exactly that comparison.
| source | bytes | last written (UTC) |
|---|---|---|
autoresearch_results/F1_demographic_baseline.json | 689 | 2026-07-25 21:28 UTC |
autoresearch_results/bench_svd_wavlm_mean_std.json | 12,894 | 2026-07-28 04:47 UTC |
autoresearch_results/bench_svd_egemaps.json | 18,813 | 2026-07-25 23:55 UTC |
autoresearch_results/V1_ssl_vs_handcrafted.json | 4,282 | 2026-07-28 16:05 UTC |
autoresearch_results/V2_speaker_subspace.json | 6,700 | 2026-07-28 10:59 UTC |
FINDINGS.md | 28,302 | 2026-07-28 21:12 UTC |
IDEA_TABLE.md | 22,243 | 2026-07-28 16:06 UTC |
COMPOSITE.md | 17,244 | 2026-07-25 21:10 UTC |
corpus/SURVEY_datasets.md | 27,279 | 2026-07-25 20:52 UTC |
data/ACQUISITION_STATUS.md | 14,726 | 2026-07-25 21:33 UTC |
data/PREPROCESSING_STATUS.md | 11,557 | 2026-07-25 22:39 UTC |
data/interim/svd/summary.json | 477 | 2026-07-28 03:12 UTC |
data/interim/coswara/summary.json | 463 | 2026-07-25 22:36 UTC |
data/interim/coughvid/summary.json | 455 | 2026-07-25 22:57 UTC |
autoresearch_results/acquisition/coswara_meta_stats.json | 2,536 | 2026-07-25 21:27 UTC |
data/raw/svd_meta/voice_data.csv | 167,457 | 2026-07-25 21:26 UTC |