Q4 2026 roadmap: earn a signal, ship a list

Milestone: Q4 2026 · Ledger: the “Q4 2026 ledger” issue in that milestone · Charter: research_steward_charter.md · Approved by Richard: 2026-10-01

This is the Research Steward’s playbook. It says what Q4 is for, the order of work, and the pre-registered gates that decide whether a result counts. Every number here was verified on 2026-10-01 against code, the production database (read-only) or GitHub. Re-verify before relying on one.


1. Where Q4 starts

Smoke run #1 (#439) proved the pipeline runs end to end on her released PRS, traceably. Its science result is an honest null, and nothing was planned after it.

AreaState on 2026-10-01Source
MachineryAll ten checks pass, about $130 spent, every artifact traceable.#439, [[results/mods_smoke_run_1_writeup
Base modelLoses to popularity. Held-out filtered MRR is 0.021, against 0.031 for per-relation tail frequency. Graded RGCC ρ is +0.03 and +0.05 per draw, against +0.37 for node degree alone. Score vs degree: Spearman 0.86. Suspected cause: the mirror edge stays in the training graph (remove_one_hop=False).#523
PersonalizationThe released criterion stalls in epoch 1 and ignores λ. It can only demote, and 73% of its mass runs through contraindicated_for.writeup §4.3, #420
Validation labelsRGCC is single-agent and blind to her combination regimen, and degree explains much of it. Her medication history is circular. No clean label with n ≫ 1 exists.#523, vector memory
PRS590 released over 109 disease anchors (smoke_v0); 3,752 computed. The model reads one slot per anchor.Gate F v0
Expression84 genes, the union of two Caris MI Profile panels (10 of them from the 2024 specimen). Full WTS is ingested but unused: 59,960 genes, 17,604 in the foundation vocabulary.#212, #454
KG exportOnly Biolink predicate is exported, never source_predicate. PrimeKG’s ~30 relations become ~20 labels. DDI and PPI share interacts_with (73% of test triples). Drug→protein roles are lost (display_relation is dropped at ingest).#592, #438
CombinationsNone modeled; CIViC/OncoKB combinations are split into single-drug edges.#316, #594
Metro MapHand-curated YAML (McLelland), uncited, not connected to KG reasoning or training.#595, #89, #90
Treatments83 registry rows, mostly Translator auto-seeds. 0 suggestions, 1 candidate entry, no meetings/claims model, no trials connector.#565, #28
CohortsDesigned, nothing built.#327, #316
Public notebookLast deployed 2026-09-27 18:05 UTC, before #448’s corrections merged (2026-09-28 17:18 UTC). An editorial note-to-self is visible on live MapleLog pages.#589
Her recordNothing has arrived since 2026-05-08 except one lab. The last Signatera report on file is 2026-03-03.#512, #131
G1 (the list)Never shipped.[[MODS_MISSION_SPEC

Since then (2026-10-05): Arm A at 40 epochs became the checkpoint of record. It passed gates S3 and S4, then failed S5 and S6 on 2026-10-04: for her query it still ranks drugs mostly by popularity. Kaiser documents from after May began to arrive on 2026-10-02, when the backfill ran (#621). Decided cards are marked in §7, and the ledger (#599) holds the current state. The plan below is as approved on 2026-10-01.

2. The thesis

Two spines run in parallel. The Research Steward drives both, and Richard’s time goes only to decisions.

  • Spine A: earn a signal. Make the base ranker beat popularity, then make personalization beat the base ranker. Judge both on labels with n ≫ 1 (cell lines, organoids), with RGCC as a secondary do-no-harm check.
  • Spine B: ship a list. An Options Ledger organized by decision horizon (Maintain / Prevent while NED / Prepare for recurrence). It is fed by trials, cohorts, measured combination data and the metabolic work, and by the model only once it has passed its gates. G1 never depends on the model.

Spine A alone repeats the last nine months: machine first, list later. Spine B alone abandons the project’s distinctive bet. B also gives A a destination, because every model candidate enters the Ledger with its evidence.

The lesson that shapes the gates: the project polished inputs (PRS) before testing the model that consumes them, and a ten-minute degree baseline would have exposed the model months earlier. So in Q4, every model number ships beside the strongest non-learned baseline for its surface, computed by committed code.


3. Spine A: earn a signal (Run #2)

3.1 Order of work

  1. S0, no retrain. Test #523’s shortcut hypothesis on the existing foundation.
  2. Evaluation rebuild (#593):
    • commit the baseline scorers;
    • write per-triple ranks and report per relation;
    • rank drugs given a disease (the G1 query);
    • partial ρ controlling for degree;
    • a validation curve;
    • zero-shot ULTRA as a baseline.
  3. Arm A. Retrain with entity_model.remove_one_hop: yes and nothing else changed (same export, same split fingerprint). About $115 and about 21 h.
  4. Arm B or B′, chosen by how A comes out:
    • if A passes S3/S4, Arm B is the relation-fidelity export (#592);
    • if A closes the shortcut but fails S3, Arm B′ is one diagnostic: more negatives (128 instead of 10), or an ULTRA-4g warm start. A warm start from ultra_3g cost −46% MRR on GP-KG before the evaluation fixes (agent_hallucination_log.md B3), so it is a diagnostic, not a default.
  5. Mechanism A in context (playbook §9.4). Score drug-grouped folds of her RGCC edges added to the fact graph at query time. There is no retrain, because ULTRA has no per-relation parameters. Judged against the drug-class-mean and degree baselines.
  6. Proxy benchmark (#591). Run PRISM first, then GDSC2, with a frozen leave-one-subject-out split and drug-mean as the baseline. Test simple conditioned models (kNN on expression, TabPFN) before #420.
  7. #420, the signed criterion. Only if a conditioned baseline beats drug-mean on the proxies. Weights start at 0, early stopping uses the criterion’s own loss, and λ is applied at score time.

Cap: two foundation retrains in Q4. Week-7 review (D19): if the best arm fails S4 and S6, foundation work stops. The KG then supplies evidence paths only, and the budget moves to proxies.

3.2 The baseline rule (D11)

Every model number is reported beside the strongest non-learned baseline for that surface, computed on exactly the same items by committed code. “Signal” means the paired-bootstrap 95% CI of (model − baseline) excludes 0. A result that is above zero but not above its baseline is written up as “no signal beyond popularity.”

SurfaceBaselines
Held-out link predictionper-relation tail frequency; degree; zero-shot ULTRA
Drugs ranked given a disease (G1 query)treats-subject count; degree
RGCC, per drawdegree (partial ρ given degree); drug-class mean
Proxies (across subjects)drug-mean (scores exactly 0 within-drug)

Per-relation reporting. Every held-out eval writes per-triple ranks. The stored table gives, per predicate (and per source_predicate once the export carries it), the n, filtered MRR and Hits@10 for the model and every baseline. The headline macro-average excludes interacts_with. The G1 query gets its own row.

3.3 Pre-registered gates

M4 (export hygiene), M9 (provenance) and M10 (venue) carry over from the smoke run unchanged. Nothing is scored until D11–D20 are settled in the ledger, and no metric is looked at until its whole grid is computed.

#CheckPasses when
S0Shortcut diagnosis (no retrain)On f1228371, 500 training triples: filtered MRR with the query edge and its mirror removed is ≤ 1/5 of the MRR with the query edge alone removed. If not, remove_one_hop isn’t the fix; go to B′ (D12).
S1Clean A/BArm A’s split fingerprint = 4518539f…, and the resolved config differs only by entity_model.remove_one_hop: yes.
S2Shortcut closedThe S0 probe on Arm A drops by at most 2×. A fixed 5K validation MRR is logged every 5 epochs. Training extends to 40 epochs only if the last two checkpoints are still rising.
S3Held-out edges vs baselinesOn the same 50K sample, Δ MRR vs per-relation tail frequency has a CI above 0, both micro and macro (relations with n ≥ 1,000). Zero-shot ULTRA and degree are reported alongside.
S4Indication recovery (G1 query)On held-out treats edges, drugs ranked given the disease among drug-domain candidates: Δ vs treats-subject count has a CI above 0.
S5Not just popularitySpearman(score, degree) over the ~7,800 drug candidates for her CRC query is ≤ 0.6 (today 0.86). The top 10 come with paths (MODE=explain_paths), at least 3 of them mechanistic or personal.
S6RGCC (secondary)Graded panel, per draw: partial ρ(score, RGCC given degree) has a CI above 0 on both draws. BRAF/MEK/EGFR agents are excluded, and test-retest is printed.
S7Proxy benchmark is validThe frozen LOSO split is registered on #591 before any model runs. The drug-mean baseline is stored. The positive control (pan-cancer BRAF V600E → BRAF-inhibitor response, AUROC ≥ 0.75) is in the data and recovered. HT-29 is reported and never tuned on.
S8Personalization (G3)LOSO on colorectal lines: mean within-drug, across-line Spearman has a CI above 0, and across-drug performance is no worse than drug-mean. For #420: on synthetic fits, s_resistant < 0 < s_sensitive, and at least 20% of adjusted drugs move up. On Maureen, Mission Spec §9’s Δρ ≥ 0.05 counts only with a CI above 0 and above degree.
S9ProvenanceBaselines come from committed scripts and are stored as validation-result rows named by variant.

3.4 Decisions Richard makes before launch (D11–D20)

Recommendations are mine. Each one is a card in the ledger, and none is settled until Richard ticks it.

#DecisionRecommendation
D11Adopt the baseline rule (§3.2)Adopt.
D12Retrain armsCap at two. Arm A is remove_one_hop only. Then B (relation fidelity) if A passes S3/S4, or B′ (one diagnostic) if A fails S3.
D13Export relation identity (#592)Option B: Biolink predicate + source qualifier for every source predicate. That invents no new ontology mapping and drops no distinction. Drug-protein roles need a PrimeKG display_relation re-ingest; do it in Q4 if it is cheap, otherwise disclose. #438’s wrong merges: disclose now, fix with the re-ingest.
D14Candidate set for her queryDrug-domain only. CIViC/OncoKB therapy and regimen entities are decomposed through the regimen tables or reported separately, never silently mixed in.
D15RGCC’s role, and #324RGCC becomes secondary (S6). #324: declare the pre-smoke RGCC numbers void instead of restating them one by one.
D16Proxy datasetsPRISM Repurposing first, GDSC2 as replication. CTRPv2, organoids and PDXE move to Q1 2027.
D17Shared gene axis (#212)Drug-target genes present in both her WTS and the proxies’ expression, plus pathway-activity scores. One normalization for both.
D18#420 parameterization (ii)Hierarchical, built per-type first: per-type effects in v0, with a per-entity residual added when the proxies support it. Weights start at 0.
D19Week-7 reviewIf the best arm fails S4 and S6, stop foundation work; the KG supplies evidence paths only.
D20Run #2 moneyInside the $500/month steward budget. Pre-registered jobs are pre-approved. Any single job above the steward’s approval threshold asks. Every job is estimated before launch and cancelled at 1.5× its estimate.

4. Spine B: ship a list

4.1 The Options Ledger (#565, #28)

Sequencing per #565. First consolidate docs/maureen_candidate_treatments.md to 5–10 real entries, then derive the schema from their shape. The catalog consolidation is running now.

Draft schema, to be checked against the entries. It gets its own tables, and ModsIntervention stays the patient-agnostic knowledge base:

TablePurpose and key fields
mods_optionHer candidate: kind {drug, combination, procedure, cell_therapy, vaccine, trial, supplement, lifestyle, monitoring_test}, target_condition, horizon {maintain, prevent_while_ned, prepare_for_recurrence}, status {researching, discussed_with_clinician, pursuing, started, declined, parked}, evidence_level, fit (facts, each with its source; a fact without a source doesn’t render), safety_vs_regimen {none_known, monitor, caution, avoid, unknown}, access_path, cost, readout (how benefit would ever be seen), next_step, decision_due, origin {human, model_run, llm_report, seed}
mods_option_eventAppend-only history of status changes and decisions
mods_claimEvery claim a clinic, company or paper makes: type, source kind, verification {unverified, verified, contradicted, stale}, expires_at (30 days for trial status)
mods_partyOrganizations and people. Never published.
mods_meetingDate, parties, options discussed, summary, follow-ups
mods_trialClinicalTrials.gov v2 cache: overall_status, why_stopped, eligibility, locations, fetched_at
  • Routes and UI. Routes mount in backend/mods_clinic_api.py, which main.py already includes, so no registry hotspots are touched. A “Options” tab goes in the clinic view of ModsLabDashboard.jsx: a board by horizon, a detail drawer with sourced facts, claims and their verification badges, trials with their last-checked date, and a “Stale” filter. Desktop only.
  • Trials connector. Refreshed weekly; it alerts on status changes. A BATTMAN-style termination must never again reach us through a press release.
  • Ranking. A transparent rubric: evidence × fit × safety × access × reversibility. It is a ranking you can argue with, not a score.
  • The migration is a production schema change, because main.py applies migrations at startup. Its merge waits for Richard’s schema card.

4.2 The G1 brief

The G1 brief is a rendering of the Ledger organized by horizon, with at most three options per horizon in v0. G1 definition of done: Mission Spec §9’s fields (mechanism, evidence level, her supporting data, interaction and contraindication flags, access path), plus “discussed with a clinician.”

4.3 People like Maureen (#590, #591)

  • Guardrails.
    • Other patients never become KG nodes (Richard, 2026-06: population conditioning, not patients-as-nodes).
    • Cohorts are validation and decision support, never a repurposing signal.
    • A single-patient table cannot learn personalization, so cohorts and proxies are what make G3 identifiable.
  • Cohort funnel (#590, running).
    • MSK-CHORD: public, 25,040 tumors, 24,028 treatment records, CC BY-NC-ND.
    • Other cBioPortal CRC studies.
    • Neighbors v0 is a two-week spike with one pre-registered question, proposed from the funnel: how long BRAF/EGFR therapy holds in disease without liver metastases, and what patients received next.
  • Her cell-line twin. HT-29 carries the exact APC c.4666dupA found in her tumour, plus BRAF V600E and MSS (verified in Cellosaurus 2026-10-01). It also has TP53 R273H, SMAD4 and PIK3CA changes her tumour doesn’t carry, so it is a sentinel, never a tuning target.

4.4 Combinations (#594)

  • Q4 adds a combination evidence column to the Ledger, filled from measured data: NCI ALMANAC (the NCI-60 colon panel includes HT-29 and COLO 205) and Jaaks 2022.
  • Positive control: BRAF + EGFR synergy in BRAF-mutant colon lines. ALMANAC tests small molecules, so its pair is likely a BRAF inhibitor plus an EGFR TKI; verify that the pair exists.
  • Q1 2027: regimen entities in the graph and learned combination scoring.

4.5 Metro (#595): a priority lane

Decided 2026-10-05 (D-Q4-04, #612): Metro is not reduced.

  • Why. The Metro Map is the only Maple feature Maureen has asked about or researched. A useful Metro is the fastest way to get her using the system, and her use is the only user feedback the project will get. So Metro and the metabolic hypotheses are among the most important parts of the research. They sit beside PDR, not in place of it.
  • Scope. As much as current data and architecture allow. The therapy-adaptation layer, new metabolic sources and a patient metabolic model are back in scope where they fit. None of them is required this year.
  • Standing rule. Ask of any new work how it could feed Metro, and where Metro’s ideas could apply elsewhere: the Options Ledger, the G1 brief, model candidate lists.
  • The wider bet. The repurposing engine need not stop at single prescription drugs. It can be pointed at a combination of metabolic changes, brought on by diet, drugs or something else.

Order of work. The plan is on #595, as a starting point for Richard rather than a decision. In outline:

  1. Safe to read, and hers. Every station gets a badge against her current regimen, cited to the drug labels. Today the map lists itraconazole, a strong CYP3A4 inhibitor, and the Braftovi label says to avoid those. A plain-language key goes with it. “Ask about this” and “Add to my options” write to the Options Ledger; that is the feedback channel.
  2. Ground it. Every station→line claim carries a KG path through a target edge, or a citation checked against a primary source. An unsupported claim is shown as unsupported.
  3. Light it from her WTS percentiles against the Caris colorectal reference, for both colorectal specimens (the 2024 primary and the 2025 recurrence), with the caveats beside it.
  4. Widen it. Her systemic metabolism (labs first, then measurement-trait PRS after D-Q4-11), diet and supplement stations under the same safety screen, and combinations on the map with #594.
  5. Research. Stations suggested by the graph (judged against degree, D11), therapy-adaptation claims as cited claims, model scores once a foundation passes its gates, and a patient metabolic model as a stretch spike.

On “fundamentally metabolic.” D-Q4-04 doesn’t turn on this question. Metro is a priority because it is the surface she uses, and the testable form below is one of the things it should help test. Claude’s view, recorded for the record: the evidence doesn’t support it for her tumor.

  • Her tumor has a canonical driver, and the one intervention with a measured, dramatic effect targets that driver’s signaling loop. ctDNA went from 20.74 to 0.15 MTM/mL in about four weeks and has been negative since 2025-12-05.
  • BRAF V600E does rewire metabolism in targetable ways (Yun 2015, Science: high-dose vitamin C and GAPDH).
  • MAPK-blockade survivors are thought to shift toward oxidative metabolism. That is established in melanoma and open in CRC.

So the testable form is: her driver creates metabolic dependencies, and her maintenance therapy creates new ones. That lands on the NED question: what kills the cells her regimen doesn’t?


5. Background lanes

LaneQ4 scopeIssue
Record freshness (week 1)Records since 2026-05-08, Signatera after 2026-03-03 (needs Richard’s portal access), the Signatera parser#512, #131
Safety (week 1)Is she taking anything new? If so, screen it against encorafenib, binimetinib and cetuximab first.ledger
Notebook (week 1)Fix PR running; the redeploy is Richard’s call#589
PRS v1Settle NR scale policy (+18 anchors on its own), #428 → #422 (palindromes, +8 alone, up to +71 together), parameterize the release tag; D2/D3 on the v1 candidate set only; defer ancestry PCs (#429) with the EUR basis documented#295, #422, #428
Expression axis v3D17, shared with the proxies; becomes Spine A critical path once #591 lands#212
SocialDraft → approve (Richard, 2026-10-01). Builds only after #589 is redeployed, the account exists, and Maureen agrees to the framing#597
StewardCharter, switch, watchdog, digest, fixer coordination#596

6. Calendar (Pacific time; PDT ends Nov 1)

WeekSpine ASpine BOperations
1 (Oct 1–7)S0; cards D11–D20; D13 tableCatalog consolidation; cohort funnel; trials clientRoadmap and charter PR; notebook fix; freshness and safety questions; steward live
2 (Oct 8–14)Eval rebuild (#593); zero-shot ULTRA; launch Arm ALedger migration, service, API, MCP (after the schema card); Metro step 1 (#595)PRISM pull and frozen split (#591)
3 (Oct 15–21)Arm A against S1–S6Options tab; seed import; Metro step 1 in front of her (a frontend deploy)Drug-mean and kNN baselines (S7)
4 (Oct 22–28)Export work for B or B′ (#592)G1 v0 brief (≤ 3 options per horizon); Metro: ground itTabPFN LOSO (#316)
5 (Oct 29–Nov 4)Launch B or B′G1 v0 ready for a clinician conversation; Metro: light itDST ends Nov 1
6 (Nov 5–11)Evaluate B; top-10 pathsTrial screening; claim re-verificationBuild the D17 axis
7 (Nov 12–18)D19 reviewCombination column (#594)Metro: widen it (#595)
8 (Nov 19–25)#420 code (if the gate allows)Neighbors v0 spikePRS v1 decisions
9 (Nov 26–Dec 2)#420 tests; second container rebuildLight week (Thanksgiving)—
10 (Dec 3–9)#420 LOSO, then Maureen (S8)Neighbors readoutPRS v1 release
11 (Dec 10–16)Run #2 writeupG1 v1 (model candidates only if they passed the gates)Metro research spikes, if steps 1–3 have landed
12 (Dec 17–23)Q1 2027 plan; Mission Spec refresh proposed to RichardStale-claim sweepDeploy freeze from Dec 21
13 (Dec 24–31)—Monitoring onlyFixer docs-only

What’s realistic by Dec 31:

  • Very likely:
    • the Ledger, the trials connector and G1 v0;
    • the steward running and the notebook fixed;
    • the cohort funnel;
    • baselines in every eval.
  • Likely:
    • Neighbors v0 and PRS v1;
    • Metro in front of Maureen, with safety badges, grounding and lighting;
    • the combination column with its positive control;
    • G1 v1;
    • a foundation that beats frequency on held-out edges, if S0 confirms the shortcut.
  • Plausible:
    • beating degree on RGCC and the proxies;
    • Metro’s wider layers: her systemic metabolism, diet and supplement stations, combinations.
  • Stretch:
    • measurable personalization lift on proxies;
    • a patient metabolic model spike (D-Q4-04 unfenced it).
  • Not this year:
    • GENIE BPC and UK Biobank data;
    • learned combinations;
    • prospective PRISM results.

7. Decision cards (the queue)

Each open card is a sub-issue of the ledger (#599), deliberated one at a time. The ledger body’s clearinghouse table holds the outcomes; this table is the plan of record.

CardTopicSub-issueStatus
D-Q4-01Export relation identity (#592; D13)#611decided 2026-10-04: B′ (bridged identity; Arm B changes relation identity only)
D-Q4-02When and how the notebook goes public again#615decided 2026-10-05: public and anonymous again, after #608’s gate lands and Richard reviews a locally staged build; byline Maple, with the model shown; every MapleLog entry in Maple’s voice and published, minus those held for open issues. The flip itself waits for his go-ahead after the review
D-Q4-06Fixer coordination (#596)#804decided 2026-10-05: A (the steward takes over open fixer PRs; a 7-day cooldown after a merged partial; a pre-flight test of main; docs only from Dec 21)
D-Q4-03Run #2 pre-registration (D11, D12, D15, D19, D20)—adopted 2026-10-01
D-Q4-04Q4 scope adjustments: Neighbors as a spike; combinations as a column; Metro v2 grounding and lighting only; social builds after its gates; PRS v1 trimmed#612decided 2026-10-05: items 1, 2, 4 and 5 as recommended; item 3 replaced, so Metro is a priority lane with as much as is feasible (§4.5)
D-Q4-05Options Ledger schema (#565)#613decided 2026-10-05: A with the defaults (the full table set in v0, meetings and questions included)
D-Q4-13The one pre-registered question for Neighbors v0#614decided 2026-10-05: approved as proposed (time on encorafenib by liver status at encorafenib start, MSK-CHORD)
D-Q4-14Orient directional edges at export#610open
D-Q4-15Notebook privacy (six germline-inference leaks)—decided: private at 13:05 PT 2026-10-01

Cards still to be raised, each as its own sub-issue when it comes up:

CardTopicWhen
D-Q4-07NR weight-scale policy (PRS)Week 2–3
D-Q4-08Palindrome class (#422)Week 2–3
D-Q4-09Shared gene axis (#212; D17)Week 3
D-Q4-10#420 parameterization (D18)Before week 8
D-Q4-11Measurement-trait PRS slotsQ4 or Q1
D-Q4-12Maureen’s OK on the public framing (social)Any time

8. Risks

RiskMitigation
Spine A comes back null after two retrains (the most likely outcome)S0 before any spend; the two-arm cap; the week-7 review; G1 never depends on the model
Her situation moves faster than the record (a recurrence, or a maintenance decision on stale data)Freshness in week 1; the “prepare for recurrence” horizon goes first; trial claims expire after 30 days; days-since figures in every digest
Richard’s attention is the bottleneckOne batched digest; a weekly 30-minute decision session; defaults only on reversible choices
Churn in prod (overnight deploys, partial merges)Fixer queue mode, a morning merge train, health checks after each deploy, the Dec 21 freeze
The validation fools us (degree and drug-mean confounds, duplicate CURIEs, tuning to HT-29, tissue vs cell-line expression)Splits registered before modeling; the baseline rule; the sentinel never tuned on; Ledger tables never published

9. Deferred to Q1 2027

  • Population conditioning (the June design) trained across proxies and cohorts.
  • Learned combination scoring, and regimen entities in the graph.
  • A patient-specific genome-scale metabolic model (Human-GEM constrained by her WTS), validated against HT-29’s measured dependencies. Unfenced by D-Q4-04: in scope this year where it fits (§4.5).
  • New metabolic and natural-product sources. Also unfenced by D-Q4-04.
  • GENIE BPC (Synapse registration is Richard’s).
  • A prospective PRISM screen of the model’s frozen top-N.

10. Parallelization analysis

  • Surfaces touched:
    • backend API: yes (the Ledger, the trials client);
    • frontend: yes (the Options tab; Metro v2);
    • worker handler: yes (explain_paths, proxy tasks);
    • migration: yes (the Ledger);
    • MCP tools: yes;
    • DB-stored config: no;
    • docs and tests: yes.
  • Parallel worktrees: model/eval, proxy data, Ledger backend, trials client, docs and notebook. The Ledger UI waits on the API contract. Export work starts in week 4.
  • Hotspots, serialized:
    • backend/migrations.py: the Ledger first. It is 109 today; re-check against all branches.
    • worker/task_handlers.py: one owner at a time.
    • lib/pdr2/code/script/*: exactly two batched container rebuilds.
    • backend/scripts/export_composition_for_training.py: frozen until Arm A’s export is done.
    • Component registry files: untouched.
  • Verify-how: gates S0–S9; pytest plus the migration bootstrap check for the Ledger; the trials client returns TERMINATED and its whyStopped for NCT07152821 (verified live 2026-10-01); a UI walk-through of the Options tab.

Appendix A. The questions behind this plan (Richard, 2026-10-01), condensed

  • More PRS. Count anchors, not scores. One slot per disease anchor: 109 today, about 180 reachable. NR policy alone gives +18; NR and palindromes together give up to +71. 2,133 measurement-trait scores have no slot in a disease-keyed loss, and placing them is a mapping decision. No lift is expected until #420 lands.
  • Biomarkers.
    • The 84 come from two Caris PDF panels.
    • The tumor transcriptome is WTS (RNA), not WGS, which is her germline DNA.
    • It is mechanically interchangeable with the UK Biobank inputs but semantically different: UKB used plasma proteins measured against healthy people; ours is tumor mRNA measured against other colorectal tumors. For ranking drugs against her tumor, ours is arguably the more relevant signal.
    • Axis v3 should be drug-target genes plus pathway scores, not all 17,604 genes.
  • The KG. Fix fidelity before breadth (#592, #438). Hetionet, DRKG and BioKG belong in pretraining (#121), not compositions. RTX-KG2 is parked unless an ablation earns it. The PDR2 paper’s released code also trains its foundation from scratch, so initialization isn’t the gap.
  • Combinations. Not representable today; in Q4 they come in as measured evidence with positive controls (#594).
  • Metro. See §4.5.
  • Similar patients and tabular research. See §4.3; neighbors only show what was tried, while PRISM-scale proxies can surface the untried.
  • Other treatments. The Options Ledger (§4.1).
  • The “move things forward” switch. The Research Steward (charter).
  • Social. Draft → approve, after the notebook is fixed, the account exists and Maureen agrees.

Provenance

  • Assembled 2026-10-01 from:
    • three read-only codebase explorations and one design review;
    • #439, #523, #420, #327, #316, #565 and the smoke-run playbook, charter and writeup;
    • read-only production queries;
    • the live notebook and its deploy repo;
    • Cellosaurus (HT-29), cBioPortal (MSK-CHORD) and ClinicalTrials.gov v2 (NCT07152821).
  • Two numbers were corrected during planning:
    • the NR policy alone unlocks +18 anchors, not 51 (51 is the count of new anchors whose scores fail that rule first);
    • the PDR2 foundation trained from scratch, not from a pretrained ULTRA.