11
Build-ready — the two novel pieces
The parts that make this defensible rather than plumbing. Everything else you compose from INDRA / POPPER / PaperQA2.
① The mechanism card + evidence ledger
mechanism_card.json · one per hit
{
"hit": { "gene": "C-114", "condition": "Stim48hr",
"th2_effect": -0.79, "th1_effect": 0.03,
"kd_efficiency": 0.74, "donor_reproducibility": 0.85,
"known_regulator": false },
"hypothesis": "C-114 sustains GATA3 induction; its knockdown collapses
IL4/IL5/IL13 without engaging the Th1 / T-bet axis.",
"claims": [
{ "id": 1, "statement": "C-114 knockdown phenocopies GATA3 knockdown",
"evidence": "co-perturbation r=0.71 vs the GATA3 signature",
"source": "DE_stats.h5ad (this study)", "confidence": 0.90,
"tag": "observed" }, # <- the novel piece #2
{ "id": 2, "statement": "C-114 co-occurs with NuRD subunits (CHD4/MTA2)",
"evidence": "physical complex membership",
"source": "CORUM:123 / Krogan map", "confidence": 0.60,
"tag": "known" },
{ "id": 3, "statement": "C-114 directly represses the IL4 locus",
"evidence": "none found",
"source": null, "confidence": 0.25,
"tag": "speculative" } # <- what the experiment must test
],
"counter_evidence": [
{ "claim_id": 2, "statement": "NuRD reported GATA3-independent in Tregs",
"source": "PMID:XXXXXXXX" } # from the falsification pass
],
"discriminating_experiment": "GATA3-OE rescue after C-114 knockdown",
"overall_confidence": 0.62
}
② The cheapest-discriminating-experiment optimizer
Given a hit with two competing mechanisms, score every feasible assay by how differently the two hypotheses predict its readout, per unit cost — return the winner. Nobody else does this; everyone else proposes batches to maximize discovery.
discriminate.py · pseudocode
# two competing mechanistic hypotheses for one hit
H1 = "acts through GATA3" # predicts: GATA3 protein down; rescue restores IL4/5/13
H2 = "acts parallel to GATA3" # predicts: GATA3 protein flat; rescue does nothing
best = None
for e in ASSAY_LIBRARY: # each assay e has a cost and a readout
p1 = predict_readout(e, H1) # distribution H1 expects
p2 = predict_readout(e, H2) # distribution H2 expects
discrimination = divergence(p1, p2) # how differently they predict e
score = discrimination / e.cost # cheap AND separating
best = keep_max(best, e, score)
return best # the single cheapest experiment that splits H1 from H2
Worked example — the hit's competing hypotheses H1 “acts through GATA3” vs H2 “acts parallel to GATA3”:
| Assay | Cost | Reads out | Splits H1 / H2? |
| GATA3-overexpression rescue after KD ← winner | med | are IL4/5/13 restored? | strongly — H1 yes, H2 no |
| GATA3 intracellular stain after KD | low | GATA3 protein level | yes — H1 ↓, H2 flat |
| X × GATA3 double perturbation | high | epistasis / pathway order | yes, but costly |
| ChIP / ATAC at the IL4 locus | high | direct binding | partial |
| IL4/IL5/IL13 secretome | low | program output | no — both predict ↓ |
The optimizer picks the GATA3 stain or OE-rescue (high discrimination ÷ low–med cost), not the expensive double-perturbation and not the secretome (which can't tell the hypotheses apart). That per-hit choice is the crown jewel.
③ Target triage — real vs false positive · Haltavey's ask
Score every candidate on two independent axes — don't fold “is it real?” and “is it exciting?” into one number. Fast triage over all 172 before the deep mechanism cards.
| Feature | Axis | Catches / means |
| signif_knockdown = True | validity gate | failed knockdowns |
| not core-essential · offtarget = False | validity gate | viability & off-target FPs |
| Th2 effect size · Th1-flatness | validity | weak hits · skewers · dampeners |
| donor reproducibility (4 donors) | validity | noise / one-donor flukes |
| co-perturbation coherence vs GATA3/STAT6/IL4R ← key | validity | random dampener vs real Th2-module member — needs no literature |
| Th2 literature prior (low = novel) | novelty | the finding vs the textbook |
| druggable class (E3 ligase / kinase / receptor) | druggability | translational value — E3s are gold |
Shortlist = high validity ∩ (novel + druggable), with novel hits held to a higher validity bar. Co-perturbation coherence is the strongest real-vs-false discriminator — interventional, internal, and literature-free, exactly what a novel hit requires. An E3-ligase hit clears the druggability axis outright.