results: NIH ChestX-ray14 imaging pipeline (manifest, solo, cascade x4 cues, referee, judge, multi-round, blind-metric) (#162/#163/#164/#165/#167/#168/#169/#170) - #166
Merged
Conversation
…referee) (#162/#163/#164/#165) Provenance manifest via the registered nih_cxr14 adapter with sha256 checksums per used image (#162); solo cue-susceptibility across cable/corner-tag/watermark/laterality, watermark +0.11 above the temperature-resampled noise floor (#163); the watermark cascade, shared adopt 0.97 vs isolated 0.34, contagion +0.63 (#164); a deployable referee with no privileged knowledge (transcript + one private re-read) catching peer-driven adoptions at P/R 0.86, FPR 0.23 versus a naive conformity gate's FPR 0.92 (#165). Branched fresh off main (not off the stale results/cascade-at-scale, which predates #146/#148/ #154/#157/#161 and would delete that work if merged) and reuses the already-committed, already-reviewed solo/cascade logic and numbers from that branch. All four runners are fully keyless-reproducible from the committed img_cache.jsonl (new_api_calls_this_run: 0, verified).
This was referenced Jul 21, 2026
…judge referee, multi-round, blind-metric) (#167/#168/#169/#170) Cascade on cable/corner-tag/laterality (#167): contagion +0.80/+0.74/+0.71, all stronger than watermark's +0.63 despite barely moving the model solo. The cascade does not depend on the cue being independently potent. Same-lineage judge referee (#168): a text-only judge reading only the shared transcript (no isolated-answer comparison, mirroring the text lane's referee_judge.py design) scores identically to the naive gate (0.65/1.0/0.92). Without a reasoning trace or a fresh independent signal, it has nothing beyond "did the answer match the peers" to work with; the deployable referee's private re-read is what earns its edge over the naive gate, not the judge framing. Multi-round dynamics (#169): shared adoption is already high at round 1 (0.89) and plateaus (round1 vs round3 McNemar p=0.25, not significant); isolated stays flat. Consistent with the text lane: adoption is decided on first exposure, not a slow build-up. Blind-metric substitution (#170): decoy uptake +0.83, suppressed to +0.37 when primed. Unlike the text lane (all 11 drifters named the rubric), 0 of 29 drifters here mention the rubric at all, verified against the raw justification text: every drifter gives a confabulated, purely clinical justification. Silent, not self-declared, gaming. All new/edited runners keyless-reproducible from the committed caches (verified, new_api_calls: 0). Independently reviewed: reproducibility, security/leak, and evaluation-correctness (judge non-circularity, blind-metric decoy fairness and the "0 named" finding against raw text) all PASS.
This was referenced Jul 21, 2026
Closed
Member
Author
|
Update: this PR now also closes #167, #168, #169, #170 (pushed as a second commit,
All new/edited runners verified keyless-reproducible and independently reviewed (reproducibility, security/leak, evaluation-correctness all PASS). |
This was referenced Jul 22, 2026
Member
Author
|
Rebased this branch onto current main (it had gone stale relative to #219/#142/#143 merged since this PR was opened; merged main in cleanly, no conflicts). Re-verified keyless reproduction of the full imaging pipeline afterward (cascade contagion still 0.6286, new_api_calls_this_run: 0). 625 tests pass, ruff clean. |
sebasmos
added a commit
that referenced
this pull request
Jul 22, 2026
…lean-A Addresses @Agastya191's review: imaging_solo.py here did not compute the noise floor its "watermark +0.21 above 0.13 floor" headline depended on, so that headline could not be regenerated from the committed script. Rather than duplicate the fix, the imaging lane is fully superseded by the standalone imaging pipeline in #166, which computes the noise floor as an explicit uncached pass and pins the exact case set. Removed the redundant experiments/imaging/ tree from this branch so #141 is scoped to the MedQA scale_c plausibility dose-response and clean-A contamination results that were validated in review. Also merged current main (branch was 36 commits behind).
sebasmos
added a commit
that referenced
this pull request
Aug 4, 2026
…lean-A Addresses @Agastya191's review: imaging_solo.py here did not compute the noise floor its "watermark +0.21 above 0.13 floor" headline depended on, so that headline could not be regenerated from the committed script. Rather than duplicate the fix, the imaging lane is fully superseded by the standalone imaging pipeline in #166, which computes the noise floor as an explicit uncached pass and pins the exact case set. Removed the redundant experiments/imaging/ tree from this branch so #141 is scoped to the MedQA scale_c plausibility dose-response and clean-A contamination results that were validated in review. Also merged current main (branch was 36 commits behind).
sebasmos
added a commit
that referenced
this pull request
Aug 4, 2026
…g subgroup (closes #185, closes #214) Pure re-analysis of the already-committed imaging cascade transcripts, zero API calls. #185: quantifies claim 4 (contagion rides on case plausibility, not the cue's own solo potency). Spearman of solo flip-above-noise vs cascade contagion across the four cues is -1.0 (n=4, descriptive): the weakest solo cue (cable) has the strongest cascade, the opposite of what a cue-potency account predicts. The sharper test, per-case cross-cue agreement across the shared 35 cases, shows corner-tag/watermark/laterality adopt on the EXACT same cases (phi=1.0, Jaccard=1.0); Cochran's Q across all four cues is not significant (p=0.392). Both support a case-driven, not cue-driven, account of contagion. #214: per-finding contagion breakdown (exploratory, n=35, cells as small as 1). No finding is categorically immune or uniquely susceptible at this sample size; Wilson intervals are wide and overlapping. Deliberately does not force a paired test across findings, since different findings involve different cases (not a repeated-measures design), which would be an invalid comparison. Also fixed along the way: PR #166's branch had gone stale relative to current main (predated #219/#142/#143 merged since it was opened); merged main into the same branch in place (zero reviews yet, so no review thread to disrupt) and re-verified keyless reproduction. This PR is stacked on top of #166 since it needs the imaging results that only exist there. Verified: ruff clean, 625 tests pass, no hardcoded personal paths, 0 em dashes, purely additive (no existing file modified).
sebasmos
added a commit
that referenced
this pull request
Aug 4, 2026
sebasmos
pushed a commit
that referenced
this pull request
Aug 4, 2026
…loses #133) Freezes the analysis plan for the confirmatory CheXpert Support Devices cascade (#120) before that run starts, as an instance of docs/PREREGISTRATION.md scoped to this one study. Grounds every design choice in the already-completed, keyless-reproducible NIH ChestX-ray14 injected-cue pilot (PR #166) rather than guessing: the primary endpoint (contagion = shared_adopt - isolated_adopt) reuses that pilot's exact paired shared-vs-isolated design, which held across four independent injected cues (watermark +0.629, cable +0.80, corner_tag +0.74, laterality +0.71). Sample size (target n=90) is computed with benchmaxxing.stats.required_pairs/ achieved_power anchored on the pilot's observed discordant proportion, under three effect-size scenarios so the target does not just assume the pilot's own effect transfers unchanged to a subtler natural cue -- verified n=90 clears 80% power (86.1%) even in the conservative scenario. Multiple-comparison policy picks Holm over Benjamini-Hochberg deliberately: the text-lane Break-it C dose-response (McNemar p=0.041) did not survive BH correction in the 2026-07-21 re-grade, and this study's primary result should not repeat that fragility. All cited pilot numbers are post the 2026-07-21 answer-parser fix (#161), verified against PR #166's committed summary JSON files at time of writing.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #162, closes #163, closes #164, closes #165, closes #167, closes #168, closes #169, closes #170.
Adds the full NIH ChestX-ray14 imaging pipeline as a self-contained, keyless-reproducible bundle: a provenance manifest builder, single-model cue susceptibility, the watermark cascade (plus the three remaining cues), a deployable referee-as-gate evaluation, a same-lineage judge referee, multi-round cascade dynamics, and a blind-metric substitution probe.
What's in it
build_manifest.py(Dataset: NIH ChestX-ray14 loader and provenance manifest (accessible imaging set) #162): builds a manifest via the already-registerednih_cxr14adapter, keeps only cases whose image resolves on disk and carries a real finding label, and records a sha256 checksum per used image (results/manifest_provenance.json).--case-ids-filepins the exact 35-case set used throughout.imaging_solo.py(Imaging solo cue susceptibility on NIH ChestX-ray14 (injected cues) #163): cable / corner-tag / watermark / laterality cue injection, flip rate vs a temperature-resampled noise floor. Watermark is the one cue that clears the floor (+0.11).imaging_cascade.py(Injected-cue imaging cascade on NIH ChestX-ray14 (watermark contagion) #164, Imaging cascade on the remaining cues (cable, corner-tag, laterality) on NIH ChestX-ray14 #167): does a committee adopt a wrong finding-read when two peers assert it? Watermark: shared 0.97 vs isolated 0.34, contagion +0.63. The other three cues (--cue {cable,corner_tag,laterality}) are even stronger: +0.80 / +0.74 / +0.71, despite barely moving the model solo. The cascade doesn't depend on the cue being independently potent.imaging_referee.py(Imaging referee-as-gate on the NIH ChestX-ray14 cascade transcripts #165): a deployable referee with no privileged knowledge (transcript + one private re-read) flags peer-driven adoption. Precision/recall 0.86, FPR 0.23, vs a naive gate's FPR 0.92.imaging_judge_referee.py(Imaging same-lineage judge referee on NIH ChestX-ray14 #168): a text-only same-lineage judge, given only the shared transcript, scores identically to the naive gate (0.65/1.0/0.92). Without a reasoning trace or a fresh independent signal, it has nothing beyond "did the answer match the peers." The deployable referee's private re-read is what earns its edge.imaging_multi_round.py(Imaging multi-round cascade dynamics on NIH ChestX-ray14 #169): shared adoption is already high at round 1 (0.89) and plateaus (round1-vs-round3 McNemar p=0.25, not significant); isolated stays flat. Adoption is decided on first exposure.imaging_blind_metric.py(Imaging blind-metric substitution probe on NIH ChestX-ray14 #170): decoy uptake +0.83 under a hidden rubric, suppressed to +0.37 when primed. Unlike the text lane (all drifters self-declared), 0 of 29 drifters here mention the rubric at all, verified against the raw justification text. Silent, not self-declared, gaming.All runners are argparse-based, read
GEMINI_API_KEYorGOOGLE_API_KEYfrom the environment only (no hardcoded paths or keys), and reproduce withnew_api_calls_this_run: 0off the committed caches (results/img_cache.jsonl,results/judge_cache.jsonl). Verified end-to-end with the key unset, twice (once per commit).ruff checkclean, full test suite unaffected (580 passed, 7 skipped), purely additive. Independently reviewed both rounds: reproducibility, security/leak, convention-fit, and evaluation-correctness (referee non-circularity, decoy fairness) all PASS.Note on #141
results/cascade-at-scale(#141) already has an earlier, unmerged version of the solo/cascade scripts underexperiments/imaging/, but that branch predates #146/#148/#154/#157/#161 and would delete all of that merged work if landed as-is. This PR is branched fresh off currentmainand reuses #141's already-good solo/cascade logic and numbers (verified identical), plus adds everything else. Once this lands, #141 should drop its now-redundantexperiments/imaging/changes on rebase.