IDEA-014 R4 and D3 specification
Written 2026-11-04, before any D3 lookup, intervention-name fetch or R4 label count. Seen before writing: deal-v0.1-results.md (R2 and R3 numbers under the old labels), and counts with no label or score: 124 targets, 69 uncensored at 36 months, 1,275 pre-deal NCTs, 130,531 cached studies, 16 of 124 acquirers matching a registry sponsor by normalised name. Owner approval: "Go for it", 2026-11-04, on the OWNER-QUEUE rows D3 and R4.
What this can show. All on past data the project has handled, so nothing here is a skill claim. Later trial progress is not deal value. Neither read changes the ranker or deal-v0.1.
D3: how much of R3's label is missing
- Pool: R3 primary pool at T = 2020-12-31 (406 companies: 33 ledger positives, 373 negatives).
- Sample:
random.Random(0).sample(sorted company ids, 30). Positives stay in the sample, so the searcher cannot infer status from selection. - Blind lookup: the searcher gets the company name and the window only. It sees no ledger status, score or pool description, and uses public web sources only.
- Record per company: acquired or not, announcement and completion dates, acquirer, whether the acquirer was SEC-registered, source URL. "Cannot determine" is an allowed answer.
- A miss: a ledger negative with a full change of control completed in (2020-12-31, 2023-12-31], by any acquirer, supported by a filing, company release or established news source. The executor opens the source for every claimed miss. Asset sales, partial stakes, and announced deals that did not complete are not misses. Row 16 of the obstacle map names private and foreign acquirers as the false negatives this check exists to measure, so they count. Misses by SEC-registered acquirers are reported separately.
- Binding metric: share of true acquisitions absent from the ledger,
M / (M + 33), whereM = (m / n_neg) * 373,m= misses andn_neg= negatives in the sample. Threshold: at or below 20 percent. - Why not misses over 30: about 8 percent of the pool is a ledger positive, so 20 percent of all sampled companies would allow a label that is mostly wrong.
- Resolution: in a sample with about 27 negatives, one miss already gives about 29 percent, so the rule passes only at
m = 0. Report the exact 95 percent interval onm / n_neg, converted to the same share. Thirty companies cannot certify a low rate, and the result must say so. - Unresolved companies: "cannot determine" counts as not a miss in the binding figure. Report also with every such negative counted as a miss.
- Non-binding rows, always reported:
m,n_neg,m/30,m/n_neg, and the unresolved-as-miss variant. About 2.4 ledger positives are expected in the sample. - Separation: the lookup and the adjudication are done by different agents. The searcher never sees ledger status or the sampling rule.
- Consequence: at or below 20 percent, the existing R3 decision rule applies. Its inputs are already known: the lower bound on rubric minus trial count is -0.079, so the result reads "adds nothing over trial count". Above 20 percent, R3 stays descriptive with a measured-noise caveat. No R3 number is recomputed. D3 cannot change R3's headline; it only sets the caveat.
R4: did the target's asset advance after the deal
- Population: unchanged from R2, one row per company at its earliest deal, with a trial before the deal; 69 uncensored and 55 censored at 36 months.
- Change from the queue row: the row assumed acquirer trials can be found by sponsor name. Only 16 of 124 acquirers resolve that way, because the ledger often holds merger-sub names. R4 therefore follows asset names across all cached industry studies. This fetches more studies from the same free public source and stores only NCT id, intervention names, other names and types.
- Fetch:
InterventionName,InterventionOtherName,InterventionTypefor industry-sponsored studies, into a new cachedata/raw/ctgov_names/. Phase, sponsor and posted date stay read from the 2026-10-15 cache. Studies absent from that cache are ignored. Name coverage must reach at least 95 percent of cached industry studies, with failures listed; below that, R4 stays descriptive and no label is computed. If the API needs a key, a paid tier or a data-use agreement, if the fetch cannot stay anonymous and polite, or if any field beyond those listed would be stored, the fetch stops and goes to OWNER-QUEUE. - Name normalisation: lowercase; drop parenthetical text; drop dose and unit tokens; collapse punctuation and whitespace; keep at least 4 characters. Types kept: DRUG, BIOLOGICAL, GENETIC, COMBINATION_PRODUCT.
- Asset names for a target: normalised names and other names on its trials posted before the deal, excluding the frozen generic list (placebo, vehicle, standard of care, best supportive care, saline, sham, control, comparator, usual care), and excluding any name on a trial posted before the deal by another lead sponsor. This exclusivity rule removes comparators and background drugs without a hand-made list, and it uses pre-deal dates only.
- Primary label: a study by any sponsor, posted in (deal, deal + 36 months], naming an asset at a phase strictly above that asset's own pre-deal maximum. Phase rule as in
ctgov.kind_for. Censoring as in R2. Every date split goes throughdiaspore.backtest.gate, with no ad hoc filter on posted dates; a guard test shows no name enters the exclusive set from a trial posted after the deal. - Named secondary: any study naming an asset in that window ("programme continued"). Descriptive.
- Linkage gate, before the full label is counted: 50 random NCTs (
random.Random(0)) from the pre-deal NCTs (1,275 by this spec's count, against 1,276 in the plan; the difference is recorded with the sample), judged by a path-mode Sonnet subagent that did not write the rule. It is given only the NCT id, title, interventions and exclusive set, with no score or label. Clean means at least one exclusive asset name and no exclusive name that is a comparator or background drug. Under 70 percent clean: R4 stays descriptive and no label is computed. - Positive audit: every label positive is hand-checked against both studies before any score is read. A false positive is reported and corrected by a fixed exception list saved with the file, never by changing the rule. The list corrects positives only, not false negatives, so it can only lower the count. Under 70 percent true positives after the list: R4 stays descriptive.
- Mode: minimum detectable AUC from the audited counts, by
min_detectable_auc. Above 0.85: "cannot test", and scorer AUCs are not read. At or below 0.85: a test. - Decision rule: passes only if the company-clustered 95 percent lower bound of AUC(rubric) minus AUC(trial count) is above 0. Otherwise report that the rubric adds nothing over trial count. Any change is
deal-v0.2. - Baselines: random (seed 0), stage only, trial count, price rank by low edge, rubric without economics (identical row), and the stored blind LLM scores with their existing "not a clean comparator" caveat.
- Auditor:
backtest-auditorruns before any R4 score relationship is read.
Known limits, stated before the read
- Names are 2026 registry state. They enter labels only, never features. Pre-deal exclusivity uses first-posted dates, but a name added to an old record later is seen as if it had always been there.
- A trial moved to the acquirer's name before our snapshot no longer links to the target, so pre-deal asset sets can be incomplete and positives undercounted.
- Exclusivity drops assets co-developed under another lead sponsor before the deal, another undercount.
- Device targets have few drug-type names and mostly leave the label's reach, so their label can only be 0. Report how many targets have no asset name.
- Advancing can reflect the acquirer's budget as well as the asset. It is not value and not a return.
- A short normalised name can match an unrelated later study. The positive audit is the only check for this, so it covers every positive.