Skip to content

Commit ed7ba25

Browse files
committed
Clarify FX Borzoi rescue trajectory
1 parent 8a16da3 commit ed7ba25

5 files changed

Lines changed: 97 additions & 37 deletions

File tree

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,8 +324,9 @@ jobs. Fixture outputs are test evidence, not model results.
324324
useful planning behavior.
325325
- No GenoLeWM-FX model or demo ships; the FX pivot is stopped at the
326326
feasibility gate.
327-
- The precomputed-Borzoi rescue path is an overlap audit first, not a
328-
training or benchmark claim.
327+
- The precomputed-Borzoi rescue path is a TraitGym-native row-alignment
328+
audit first; a full fipip table join is optional staged provenance, not
329+
a training or benchmark claim.
329330
- No clinical utility claim; the public model evidence is not clinical
330331
evidence.
331332
- Personal-genome workflows are local-first, but local execution is not

docs/index.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ for Carbon-backed training paths.
5151
- No useful-planning claim from the current planning demo.
5252
- No GenoLeWM-FX model or demo ships; the FX pivot is stopped at the
5353
feasibility gate.
54-
- The only active FX follow-up is a narrow precomputed-Borzoi overlap
55-
audit, not a model-quality claim.
54+
- The only active FX follow-up is a narrow TraitGym-native
55+
precomputed-Borzoi row-alignment audit; a full fipip table join is
56+
optional staged provenance, not a model-quality claim.
5657
- No runtime or privacy assurance beyond local execution contracts and
5758
checksum provenance.

docs/research/fx-borzoi-rescue-plan.md

Lines changed: 70 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,44 @@ Status: follow-up trajectory #266 after issue #257.
44

55
This plan does not reverse the #257 kill decision. It defines one narrow
66
way to reopen the FX question without running expensive teacher
7-
inference: use precomputed Borzoi scores as the teacher-derived
8-
functional substrate, then test whether enough public TraitGym variants
9-
overlap to justify the residual-model path.
7+
inference: use public precomputed Borzoi-derived scores as the
8+
teacher-derived functional substrate, then test whether enough public
9+
TraitGym variants can be aligned to justify the residual-model path.
1010

1111
## Source Fact Pattern
1212

1313
The statgen/fipip repository documents precomputed Borzoi scores for
1414
more than 19 million common and low-frequency variants. Those scores are
1515
based on hg19 and include both variant-effect predictions and principal
16-
components derived from those VEPs.
17-
18-
That changes the blocker from "run a teacher" to "prove overlap,
19-
coordinate compatibility, score semantics, and reproducibility." If the
20-
overlap is too small or the score columns do not support the FX target,
21-
the kill decision remains in force.
16+
components derived from those VEPs. The public score table is available
17+
through Google Cloud Storage under
18+
`seqnn-share/sniff/borzoi_102_annotation_set/`, with the main compressed
19+
annotation table published as `sniff_102_annotations.gz`.
20+
21+
The practical implementation finding is narrower than the original
22+
overlap wording. The full fipip table is public but large enough that a
23+
first-pass rescue should not pretend to have staged or joined it unless a
24+
local copy is explicitly provided. TraitGym also publishes row-aligned
25+
precomputed Borzoi artifacts for its matched slices, including the
26+
compact `complex_traits_matched_9/preds/all/Borzoi_L2_L2.plus.all.parquet`
27+
score vector. That artifact is the default executable substrate for the
28+
rescue trajectory. A full fipip table exact join remains an optional
29+
provenance and coordinate-integrity audit, not a prerequisite for the
30+
first cache/baseline gate.
31+
32+
This changes the blocker from "run a teacher" to "prove row alignment,
33+
source identity, score semantics, split integrity, and reproducibility."
34+
If the TraitGym-native Borzoi artifact is missing, row counts do not
35+
match, labels/splits are unusable, the exact fipip join contradicts the
36+
row-aligned substrate when run, or the score columns do not support the
37+
FX target, the kill decision remains in force.
2238

2339
Relevant public sources:
2440

2541
- fipip precomputed Borzoi score path:
2642
<https://github.com/statgen/fipip>
43+
- fipip public score prefix:
44+
<https://console.cloud.google.com/storage/browser/seqnn-share/sniff/borzoi_102_annotation_set>
2745
- Borzoi model repository:
2846
<https://github.com/calico/borzoi>
2947
- TraitGym regulatory variant benchmark:
@@ -36,8 +54,13 @@ or cached for a public 10k-50k slice. The rescue hypothesis is narrower:
3654

3755
- input: TraitGym variant identity, local edit/action metadata, source
3856
metadata, and optional GenoLeWM/Carbon features;
39-
- target: precomputed Borzoi VEP or Borzoi-PC score columns matched by
40-
normalized variant identity;
57+
- primary target: TraitGym-native, row-aligned precomputed Borzoi score
58+
artifacts matched to the public TraitGym slice by row identity and
59+
validated against the slice length, labels, split policy, and artifact
60+
receipts;
61+
- optional audit target: fipip Borzoi VEP or Borzoi-PC score columns
62+
matched by normalized variant identity when the large score table is
63+
staged locally;
4164
- objective: predict a residual over zero/source-only, Carbon, direct
4265
Borzoi score, and linear/logistic probe baselines;
4366
- success: a locked overlap-backed benchmark shows a meaningful gain
@@ -57,39 +80,56 @@ superiority, or proof of useful planning.
5780
Lock the rescue-specific contract before building caches:
5881

5982
- exact source URLs and revisions;
60-
- fipip/precomputed-score access path;
61-
- genome build and liftover rules;
83+
- fipip/precomputed-score access path and TraitGym-native Borzoi
84+
artifact path;
85+
- genome build and liftover rules for any exact fipip table join;
6286
- variant key normalization for `chrom,pos,ref,alt`;
6387
- selected Borzoi VEP/PC score columns;
88+
- row-alignment requirements for TraitGym-native score vectors;
6489
- minimum overlap threshold;
6590
- leakage and split rules;
6691
- claim boundaries.
6792

6893
### Stage 1 - Overlap Audit
6994

70-
Join TraitGym variants to precomputed Borzoi score identities without
71-
training a model. The go threshold is:
95+
Validate TraitGym variants against public precomputed Borzoi artifacts
96+
without training a model. The default go threshold is:
7297

73-
- at least 10,000 matched variants in one primary public task slice;
74-
- no unresolved ref/alt flips or build mismatches in the matched set;
98+
- at least 10,000 matched variants in one primary public task slice,
99+
where "matched" means the public TraitGym slice and the row-aligned
100+
Borzoi score vector have identical row counts and stable artifact
101+
receipts;
102+
- no unresolved row-order, duplicate-key, label, or split mismatch in
103+
the matched set;
75104
- enough positives and negatives after the locked holdout rule;
76105
- a publishable overlap manifest with checksums.
77106

107+
If a local fipip score table is staged, the audit should also join by
108+
`chrom,pos,ref,alt` with explicit handling for allele flips, strand
109+
issues, multi-allelic rows, and duplicates. If that exact join is not
110+
run, the report must say so directly and must not claim exact fipip
111+
table overlap.
112+
78113
If this fails, stop and publish the overlap no-go report.
79114

80115
### Stage 2 - Score Cache
81116

82-
Materialize only the matched precomputed columns and metadata needed for
83-
the experiment. The cache must include source revision, checksum,
84-
genome-build handling, matched/unmatched counts, split identity, and
117+
Materialize only the matched precomputed score columns and metadata
118+
needed for the experiment. The first cache should consume the compact
119+
TraitGym-native Borzoi score vector, not the full fipip table. If a
120+
later exact fipip join is run, the cache may add selected fipip-derived
121+
VEP/PC columns behind the same manifest contract.
122+
123+
The cache must include source revision, checksum, genome-build handling
124+
where applicable, matched/unmatched counts, split identity, and
85125
redaction-safe commands.
86126

87127
### Stage 3 - Baseline Gate
88128

89-
Run source-only, label-prior, Carbon where applicable, direct Borzoi
90-
score, and linear/logistic probe baselines. The path continues only if
91-
the task is not saturated and the Borzoi-derived target has enough
92-
signal to make a residual model meaningful.
129+
Run source-only, label-prior, Carbon where applicable, direct
130+
TraitGym-native Borzoi score, and linear/logistic probe baselines. The
131+
path continues only if the task is not saturated and the Borzoi-derived
132+
target has enough signal to make a residual model meaningful.
93133

94134
### Stage 4 - Residual Model And Locked Eval
95135

@@ -104,9 +144,12 @@ historical kill report for the teacher-inference path. The follow-up
104144
children are:
105145

106146
- #267 - lock rescue contract and coordinate rules;
107-
- #268 - audit TraitGym coverage by precomputed Borzoi scores;
108-
- #269 - build the manifest-backed precomputed Borzoi score cache;
109-
- #270 - run the leakage-aware baseline and saturation gate;
147+
- #268 - audit TraitGym-native Borzoi score-vector alignment, and record
148+
exact fipip join status separately;
149+
- #269 - build the manifest-backed precomputed Borzoi score cache from
150+
the compact TraitGym-native score vector first;
151+
- #270 - run the leakage-aware baseline and saturation gate against the
152+
direct TraitGym-native Borzoi score and simple probes;
110153
- #271 - train a residual model only after the baseline gate;
111154
- #272 - publish the locked result or overlap kill report.
112155

docs/research/fx-decision-package.md

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,22 @@ target was not reproducible under the contract.
4444
## Follow-Up Trajectory
4545

4646
The #257 kill decision remains correct for the teacher-inference path.
47-
A separate follow-up trajectory can test whether precomputed Borzoi
48-
scores from statgen/fipip rescue the idea without running a teacher. The
49-
follow-up must start with an overlap audit against TraitGym variant
50-
identities and must stop quickly if there is not a reproducible,
51-
public, checksum-backed 10k-50k matched slice.
47+
A separate follow-up trajectory can test whether public precomputed
48+
Borzoi-derived scores rescue the idea without running a teacher. The
49+
trajectory now has two explicit lanes:
50+
51+
- the default executable lane uses TraitGym's row-aligned
52+
`Borzoi_L2_L2.plus.all` score artifact for the matched complex-trait
53+
slice;
54+
- the optional provenance lane joins against the large statgen/fipip
55+
Borzoi table only when that table is explicitly staged locally.
56+
57+
The follow-up must start with an alignment and artifact-receipt audit
58+
against TraitGym identities, labels, splits, and the row-aligned Borzoi
59+
score vector. It must stop quickly if there is not a reproducible,
60+
public, checksum-backed 10k-50k matched slice. If the optional full
61+
fipip table join is not run, reports must say that directly and must not
62+
claim exact fipip table overlap.
5263

5364
That follow-up is tracked in #266 and documented in
5465
[GenoLeWM-FX Borzoi rescue plan](fx-borzoi-rescue-plan.md).

tests/lint/test_fx_contract_docs.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ def test_public_docs_link_fx_research_without_success_language() -> None:
6464
assert "FX pivot" in combined
6565
assert "No GenoLeWM-FX model or demo ships" in combined
6666
assert "precomputed-Borzoi" in normalized
67-
assert "overlap audit" in normalized
67+
assert "row-alignment audit" in normalized
68+
assert "full fipip table join is optional staged provenance" in normalized
6869
assert "GenoLeWM-FX improves" not in combined
6970
assert "GenoLeWM-FX outperforms" not in combined
7071

@@ -75,6 +76,9 @@ def test_fx_borzoi_rescue_plan_is_overlap_first_and_claim_bounded() -> None:
7576
required = (
7677
"This plan does not reverse the #257 kill decision",
7778
"precomputed Borzoi scores",
79+
"TraitGym-native, row-aligned precomputed Borzoi score artifacts",
80+
"full fipip table exact join remains an optional",
81+
"must not claim exact fipip table overlap",
7882
"more than 19 million common and low-frequency variants",
7983
"based on hg19",
8084
"at least 10,000 matched variants",

0 commit comments

Comments
 (0)