TEDDY × ANM
CITE-seq · NeurIPS 2021 BMMC · site4 · registered v3 tests

Keep TEDDY frozen.
Test, under registration, what ANM adds to the calls built on it.

TEDDY, an RNA foundation model, embeds each cell’s RNA; our head predicts 134 surface proteins from that embedding (phase-1 Pearson ≈ 0.60). All numbers use TEDDY-G’s official preprocessing; the earlier non-official preprocessing gave the same phase-1 Pearson. In the registered v3 tests, ANM’s engine made exactly a declared rule’s call on every test cell, and none of its readouts added decision value over TEDDY’s own margin, a trained classifier or a validation-trained fuser. These verdicts test decision-gain claims that earlier versions of this page made. ANM’s own output is a response chain: how a pushed source moves the retained state and the readout, measured apart; for a declared readout the same responses test and select candidate retained states, and on TEDDY (E7) that selected none.

★ Registered v3 results · 1 Oct 2026 · all eight finalE1: ANM = declared rule on every test cell; a classifier trained on the old question’s labels beat the zero-label rule on a new one (−0.078, loss). E2 falsified. E3 rejected “repairable on frozen TEDDY”. E4: ANM’s fusion lost to a validation-trained stacker. E5 stopped at its derivative check. E5-M inconclusive. E6 (external data, RNA possibly seen by TEDDY in pretraining, key not validated): ANM = declared rule again, and TEDDY’s margin ranked the calls better than ANM’s top score in 8 of 8 donors. E7: with the downstream component fixed, the layer-11 gene-mean is rejected as a sufficient state, and no revision was selected. See the results ↓

Open loop, every event at t = 0: ANM’s dynamics (retention over real steps, histories, feedback) aren’t tested here; not yet, not impossible (why ↓).

  • TEDDY and our head never retrained
  • v3 endpoints fixed before the test
  • Held-out truth only grades (except withdrawn 2, 6)
  • Accuracy is not the claim
  • Not clinical

One cell, end to end

TEDDY embeds RNA; our head predicts proteins; ANM’s engine makes the call, here exactly a declared rule’s.
TEDDY + our head · unchanged
CITE-seq cellRNA in; measured proteins sealed as the answer key
TEDDY-G 70M · frozenRNA → a 512-number embedding
Our head on TEDDY’s embedding → 134 predicted proteins9 become typed evidence (v2; v3: 12, with NK)
B · CD19 CD72 CD22T · CD3 CD2 CD5Myeloid · CD16 CD11c CD36
ANM · added
Decision layerwritten question (observer) → call or “no call”, with checks

Registered v3 (1 Oct 2026): E1–E7 and E5-M final; v3 supersedes the v2 headlines below where they conflict. Results ↓ · Corrections (29 Sep 2026): the old “ANM is more accurate” came only from declining more; Experiments 2, 6 withdrawn. All corrections ↓

中文:TEDDY 与我们的 head 不动;ANM 的引擎作为决策层读取 head 的预测。决策增益检验针对的是早期页面的说法;ANM 本身测的是响应链(推动一个源,分别测保留状态和读出怎么变),并为声明的读出检验、选择候选保留状态(E7 在 TEDDY 上什么也没选出)。v3 预注册检验中,ANM 引擎与声明规则逐细胞判定相同,其读出未带来决策价值(不胜 TEDDY 的分数差、训练分类器或验证集堆叠器);八项实验均已完成:E5-M 判定为不确定,E6 在外部数据上再次得到 ANM 与声明规则相同,E7 在第 11 层切点否决了 gene-mean 且未选出修订。开环,所有事件在 t = 0,动力学尚未检验。

The short answer · after the registered v3 tests

What ANM brings TEDDY now

ANM’s output is a response chain, not decisions, and the decision-gain claims that earlier versions made did not hold. Its response tests gave one validated measurement about TEDDY (E5-M) and one registered reject → select → validate run that rejected the gene-mean and selected nothing (E7); neither settles where the NK–T loss sits. All eight registered tests (v3) are final and give this honest list; the four v2 findings below are kept as a record, each marked where v3 supersedes it.

  1. A check that the declared readouts are what the engine computes. ANM’s engine equals the declared rule (E1.1a: 0 mismatches on site4; E6: 0 in every external donor); its leave-one-out equals the exact closed form (E1.3a: agreement 1.0000, after A1.3 found that the registered form re-coded zeroing an event, while ANM deletes the event’s site); its fusion equals its closed form (E4). Bookkeeping, not news about TEDDY.
  2. The decision-gain claims did not hold, by construction here. All events enter at t = 0, so ANM’s decision-layer calls equal a re-coded declared rule. Its readouts (top action score, closure readout, contradiction fusion) did not beat TEDDY’s margin, the mean rule, a trained classifier or a validation-trained stacker at any registered primary endpoint (E1, E4). On the external data TEDDY’s margin ranked the rule’s calls better than the top score in all 8 donors (E6: −0.0087 [−0.0182, −0.0017]; still inconclusive under E1’s own decision rule). ANM’s fusion did beat channel 1 alone on the E4 key (+0.0177), but so does the declared trust-weighted average (+0.0143), and the difference between the two is inconclusive.
  3. One validated measurement about TEDDY, and it does not settle the registered question. E2’s decomposition added nothing beyond the accuracy curve; E5’s registered derivative gate failed in float32. E5-M ran ANM’s sufficiency machinery on TEDDY end to end (derivative gate passed, positive control passed): for E3’s attention-pooling readout, at first order, 0.085 of its response on NK–T look-alike cells flows through what gene-mean pooling discards, against 0.127 on random cells. The registered verdict is inconclusive, so neither “pooling loses the look-alike difference” nor “the gene-mean state is sufficient” is established, and it holds for this one observer only. E7 ran the ANM paper’s inverse loop at TEDDY’s layer-11 cut with the downstream component fixed: histories with exactly the same layer-11 gene-mean gave different readouts (rejected, 0.125 [0.090, 0.161] against a tolerance of 0.05), and no revision was selected from the declared library (the step that keeps the candidates with no violation and takes the one with the fewest states), so nothing was validated. E5-M → · E7 →
  4. What TEDDY users can take away now (not ANM-specific): measured operating points under a five-class key with an explicit validity check, which flagged donor 13272 on site4 and the key on the external data (kappa 0.6562); a trained classifier on the same evidence beats the declared rule even for a changed question, though its call-ordering advantage did not carry over to the external data; ranking the rule’s calls by TEDDY’s own margin, ahead in 8 of 8 external donors (inconclusive on site4 and under E1’s own decision rule); a layer-mean MLP or attention pooling over frozen TEDDY did not improve NK-vs-T accuracy over our head.

Earlier findings on the v2 key (29–30 Sep) · kept as a record, superseded where marked

v2 prototype · the sufficiency test · superseded by v3 E3

NK and T cells nearly merge in TEDDY’s embedding, and the protein differences predicted from it are squeezed

Superseded by v3E3 rejected “the NK–T loss is in the readout or pooling and is repairable on frozen TEDDY”: a layer-mean MLP (R1) and attention pooling over gene tokens (R2) both told NK from T less accurately than our head (−0.0409 and −0.1925 at coverage 0.9, registered losses). On the registered within-donor pairs the head’s gap ratio is 0.1169 on flagged vs 0.3985 on unflagged pairs, with overlapping intervals and mostly from gdT CD158b+ pairs in the weak-key donor; without those pairs 0.4729 vs 0.5137. The ANM test of the gene-mean state (E5-M) is inconclusive: for the attention-pooling readout, a smaller share of its response flows through what pooling discards on look-alike cells (0.085) than on random cells (0.127), for this one observer. E3 → · E5-M →

The principle: a declared candidate retained state is sufficient for a declared readout only if the same state always gives the same readout. Here the candidate is TEDDY’s embedding and the readout the proteins our head predicts from it, so this probes TEDDY’s embedding + our head together. Declaring the state does not establish that it is sufficient: the test rejects it, or, within a candidate set declared in advance, selects the candidate with no violation and the fewest states.

Neighbours in the embedding; predicted gap shrinks; measured gap doesn’t.
One neighbour pair · cosine 0.970An NK cell and a CD8+ T TIGIT+ CD45RA+ cell, almost the same point in TEDDY’s embedding. Their CD3, a T-cell marker:
Predicted (TEDDY + head)NK 0.10 · T 0.28
NKT
MeasuredNK 0.30 · T 1.00
NKT

The predictions (TEDDY + head) put the two cells close together; the measured proteins put them far apart.

How much of the measured difference the predictions keep453 NK–T neighbour pairs at held-out site 4: median predicted gap ÷ median measured gap
NK–T neighboursrandom NK–T pairs, not neighbours: 0.8–1.51 = the whole measured difference
  • Right direction, compressed. NK has the higher predicted CD56 in 68% of pairs, but predicted gaps are a quarter to a third of measured ones (CD335 0.88).
  • Not generic shrinkage? (v2 reading) Non-neighbour NK–T pairs keep 0.8–1.5, so v2 tied the loss to near-merged cells. v3 E3: on registered pairs the flagged-vs-unflagged contrast is descriptive only and not robust.
  • Partly in our head’s readout? (v2 Mode A probes) A linear probe tells NK from T at every TEDDY layer (held-out AUC 0.991–0.997). On these pairs our head keeps 0.24 / 0.31 / 0.88 / 0.27 of the measured CD56 / CD94 / CD335 / CD3 gap and a linear probe on the embedding about the same (less for CD335), but an MLP probe on the same embedding keeps about twice as much: 0.47 / 0.59 / 0.74 / 0.61 (MLP − head interval above 0 for CD56, CD94 and CD3 at every depth). v3 E3: two trained readouts of frozen TEDDY lost NK-vs-T accuracy to our head.
  • Partly mean pooling, partly not in the RNA? (v2 reading) The states of 13 NK/T gene tokens keep more than the gene-mean of the same forward pass (layer 12, MLP: 0.58 / 0.62 / 0.72 / 0.56 vs 0.41 / 0.43 / 0.49 / 0.45), about as much already at the input layer: it is mostly which genes are detected and at what rank, and TEDDY’s layers neither add nor remove much of it. Even the best probe keeps only about half to three-quarters, and CD3E is among the tokens in only 45% of NK and 60% of T pair cells. v2 concluded that a non-linear, token-aware readout of frozen TEDDY could recover part of the NK–T difference; v3 E3 rejected that (attention pooling over gene tokens, R2, lost NK-vs-T accuracy to our head: −0.1925). Caveats: one site; probes, not the head’s objective; token probes fit on 990 random site4 NK/T cells and scored on the 483 pair cells; some intervals overlap.

Experiment 6 redesign prototype (the experiment stays withdrawn; redesigned and registered as v3 E3, E5 and E5-M). Left out: 1053 of the 1,506 pairs, “gdT CD158b+” cells that look NK-like in both predicted and measured protein, likely mislabelled · Mode A reports: linear · MLP / kNN · token · Experiment 6 →

2 · Audit

Every call carries an audit record

Question, evidence, deciding marker, distance to flip, or “no call”. Cell cite_site4_75462, annotated CD8+ T naive:

Each call prints its question, deciding marker and flip distance.
QuestionCallFlips if
SoftT · rightCD2 falls 0.078 → B
Strictno call–
B/T-priorityT · rightCD3 falls 0.003 → no call

Caveat: a fixed rule plus some code can compute this too; ANM makes it a standard record.

v3E1.3: ANM’s leave-one-out equals the exact closed form (agreement 1.0000), but flip-sensitive calls flag errors no better than as many lowest-margin calls (0.004 [−0.008, 0.022], inconclusive). E1 →

Experiment 3 · Why this call? →
3 · Response

Push the input, follow the state, read the output

Thin each cell’s RNA, re-embed with TEDDY, let our head predict again. At 5% of counts (median 305 UMIs):

Thin the RNA to 5%; follow the drop to calls.
0.936 → 0.855panel-protein Pearson
0.983 → 0.959lineage accuracy

On validation cells and the v2 key this looked robust to shallow sequencing (v3 below: not on unseen donors), more so with the official preprocessing than with the earlier one; a declared per-depth trust performed like one tuned threshold at matched coverage.

1,500 validation cells (donor 18303), held-out site unused; Experiment 2 redesign prototype (the experiment stays withdrawn).

v3E2 on unseen donors (primary key): decision accuracy falls by 0.022 with 80% of UMIs kept, 0.162 with 20% and 0.140 with 5%; splitting the losses by stage added nothing beyond this curve (falsified), and the response is not linear at these sizes. E2 →

Experiment 2 · When RNA is missing →
4 · Coverage vs accuracy

Nested readouts make the trade explicit

Soft → strict → B/T-priority, on the same evidence:

Stricter questions call fewer cells; out-of-scope cells still slip through.
SoftStrictB/T-priority
No calls2721,4932,551
Accuracy of calls0.9430.9670.955

73–95% of out-of-scope cells still get a call: the key needs NK and out-of-scope classes.

v3The v3 key has NK and out-of-scope classes. C2: at the same coverage ANM’s closure readout declines out-of-scope cells no better than the mean rule (0.261 vs 0.261; 0.000 [−0.006, 0.003], equivalent) and loses in-scope accuracy (−0.056). E1 →

Experiment 1 · Change the question →

✕ Not broughtHigher accuracy, a better trust gate, label savings, a better out-of-scope decline or better fusion (v3 E1 and E4, registered; E6 on external data). ANM’s calls equal the declared rule’s on every test cell (E1; E6: every external donor; v2: all 16,750 site4 cells, Experiment 1).

八项 v3 实验全部完成后的简短回答:ANM 不带来更好的决策;响应理论工具给出了一项关于 TEDDY 的经验证测量(E5-M)和一项注册的否决(E7),都未解决 NK–T 损失在哪里。① 核对:引擎与声明规则逐细胞一致(site4 与外部数据皆 0 不一致),留一法与闭式解一致(1.0000);② 所有事件在 t = 0,判定等于重写的声明规则,其读出不胜 TEDDY 的分数差、训练分类器或验证集堆叠器;外部数据上 TEDDY 的分数差在 8/8 供体中排序优于顶分(按 E1 判定规则仍为不确定);③ E2 已证伪,E5 的导数检验在 float32 下未通过;E5-M 判定为不确定(R2 响应流经池化丢弃部分的份额:相似细胞 0.085,随机细胞 0.127,仅针对这一个观察者);E7 在第 11 层切点、下游组件固定时否决了 gene-mean,且未从声明的候选库中选出修订;④ 对 TEDDY 用户:五类答案键与有效性检验(供体 13272 与外部数据的答案键偏弱)、训练分类器优于声明规则(其排序优势在外部数据上未复现)、两种冻结 TEDDY 读出未提高 NK/T 准确率。下方四条为 v2 记录,已标注被 v3 取代之处。

The v2 experiments at a glance · a v3 note under each

Corrections and disclosures (29 Sep 2026): Experiments 1, 3, 4, 5 rerun; 2 and 6 withdrawn
  • Marker order: fixed. ANM’s engine entered the markers one per step in panel order, a hidden weight. In the rerun all markers enter at once, and the answer key, the fixed rule and ANM share one scoring function. ANM’s scores are then a fixed multiple of the rule’s, so ANM makes the same call as TEDDY + fixed rule (re-coded for each question) on every site4 cell, for all three questions. What remains is a declared, auditable layer: the question is written down, the checks come with it, and every call has a per-marker reason; a rule written down the same way gives the same record (v3: a check, not a gain).
  • Per-cell scaling: fixed. The head’s predictions were scaled by a per-cell factor computed from the cell’s measured protein, the answer key. The rerun uses one train-median factor, 0.92663 (67,405 training cells).
  • Which change moved which number. The fixed rule’s “no calls” under the soft and B/T-priority rules (101 → 448, 1,796 → 3,169) moved because of the new size factor alone; the shared scoring leaves them unchanged. The strict rule is redefined (a weighted mean with key markers at weight 2): its “no calls” go 881 → 1,277 from the scoring and 1,277 → 2,014 from the size factor. The official TEDDY-G preprocessing then gives 272 / 1,493 / 2,551.
  • The old ANM accuracy edge came only from declining more. Old run, B/T-priority rule: ANM 0.960 vs rule 0.943 on calls made, but at ANM’s coverage (3,373 declined) the old rule scored 0.966.
  • Experiment 3: CD5 decided 23.6% of calls in the first run; now CD2 decides most often (17.9%), CD5 close behind (17.3%); the shuffle now keeps values within their lineage (p ≈ 0.0099, the smallest 100 shuffles can give). With all markers at once the deciding marker is the protein with the largest normalised value in the called lineage, so it is not specific to ANM.
  • Experiment 4: ANM’s confidence (soft_P) never gates better than the rule’s own margin at the same coverage (every difference ≤ 0; B/T-priority, 40%: 0.9988 vs 0.9988). soft_P reaches 1.11, so it is a score, not a probability. The hard cells are mostly out of scope: NK/ILC 3.1× and erythroid 3.4× over-represented.
  • Experiment 5: labels are now drawn from a pool disjoint from the scored cells (11,725 / 5,025). Labels to match ANM: logistic 500, MLP 1,000 (was 200), threshold grid 50.
  • Answer key. It still has three classes (B, T, myeloid) and no NK or out-of-scope class. Out-of-scope cells (NK, ILC, erythroid, progenitor) still get a call 73–95% of the time, from ANM and the rule alike.
  • Experiment 2 (RNA missing): withdrawn pending redesign. Prototype: with degraded RNA fed to TEDDY, ANM with a declared trust per level makes the same decisions as the fixed rule with a stricter bar per level.
  • Experiment 6 (look-alike cells): withdrawn pending redesign. Prototype: the TEDDY + head predictions do separate NK from T in the right direction but compress the differences to about a quarter to a third of the measured ones (CD335 0.88). On site4, 1053 of the 1,506 NK–T look-alike pairs involve “gdT CD158b+” cells, which look NK-like in both predicted and measured protein (an annotation problem, not a pipeline failure); on the other 453 pairs the median within-pair gap in predicted (TEDDY + head) CD56 / CD94 / CD335 / CD3 is 0.148 / 0.100 / 0.364 / 0.205 vs measured 0.621 / 0.321 / 0.413 / 0.756.
  • Phase 1 re-evaluated with the train-median factor: test Pearson 0.610 → 0.603 (MLP) and 0.596 → 0.588 (flow matching); panel proteins drop by at most 0.013. With the official preprocessing: 0.603 (MLP) and 0.582 (flow matching), T-cell panel markers slightly lower.
  • Phase 2 retrained on the official embedding after its fixes (ADT transformed once, train-median size factor). Test Pearson (134 proteins), RNA-only / protein-only / joint: 0.613 / 0.767 / 0.763 decoded directly, 0.211 / 0.216 / 0.219 from one flow-matching sample, 0.358 / 0.382 / 0.379 from the mean of 5; the legacy arm (old double transform, measured size factor) decodes to 0.622 / 0.745 / 0.738. So the old ≈ 0.25 came mostly from scoring one flow-matching sample; the fix adds about 0.02 when protein is an input; RNA-only is 0.613 against the legacy arm’s 0.622, which used each cell’s own measured protein depth (the leak), and is now slightly above phase 1 (0.603). Protein-only and joint inputs contain the measured protein: reconstructions, not predictions.
  • TEDDY preprocessing: now official. The earlier embedding was a mean over real tokens at 512 tokens with no gene-median normalisation. Every number on this page now comes from TEDDY-G’s official preprocessing (counts ÷ total × 10⁴, ÷ TEDDY’s non-zero gene medians, top-2,048 rank tokens, no CLS token, mean over gene tokens); phase-1 Pearson is unchanged (0.603 vs 0.603).
  • “0 labels for a new question” holds for any written rule, including the fixed rule; it is not specific to ANM.
  • Cells. Donor 15078 is in training at other sites and is 32.6% of the site4 test cells. The “out-of-site check” is held-out donor 18303 at a training site, which was also the validation set. The 9 panel proteins were chosen by test-set Pearson.

Reports behind this page’s numbers (official-preprocessing rerun, outputs/*_official/): HARD_PROOF_OFFICIAL (Experiments 1, 3, 5) · SCOPE_REFINE_PROOF_OFFICIAL (Experiment 4) · Mode A linear, MLP / kNN, token (Experiment 6) · Experiment 2 prototype one sample, direct. Earlier runs, kept as a record: HARD_PROOF_V2 · SCOPE_REFINE_PROOF_V2 (before the official preprocessing) and the first-run reports.

v3The registered results supersede these where they conflict: V3_REGISTERED_RESULTS · v3_numbers.json (every v3 number with its source file and key).

00 — The setup

How ANM connects to TEDDY

Three roles, one direction: TEDDY + our head turn RNA into evidence, ANM’s engine decides, the measured proteins grade. Nothing flows back into TEDDY.

Evidence source · frozen

TEDDY + our head

  • Frozen TEDDY reads only RNA → a 512-number embedding; never retrained or opened.
  • Our head, trained once on training sites’ proteins, predicts 134 (Pearson ≈ 0.60); v2 used 9 picked by test-set Pearson, v3 uses 12 picked on the validation donor.
  • Embedding from TEDDY-G’s official preprocessing; the earlier non-official one gave the same Pearson.
Decision layer · added, not trained

ANM

  • Reads the predicted panel proteins as typed evidence (v2: 9; v3: 12; exceptions: table below).
  • A written question (the observer) → a call or “no call”: the fixed rule’s call for that question.
  • No learned weights; open loop, so its dynamics are not tested here.
  • ANM itself measures response chains (push a source, measure state and readout apart) and tests and selects candidate retained states for a declared readout; here that runs only inside TEDDY (E5-M, E7).
Answer key · held out

Measured proteins

  • CITE-seq measures the same cell’s proteins, kept aside.
  • They grade calls with the rule’s and ANM’s scoring function.
  • v2 key: 3 classes, no NK class (1,342 of 1,690 NK cells counted as “myeloid”). v3 key: B, T, NK, myeloid and out of scope, kept only where annotation and a protein gate agree.

Two separate axes: phases build the evidence, modes say how ANM uses TEDDY

What it isStatus
Phase 1Frozen TEDDY embeds RNA once; our head maps it to 134 proteins (test Pearson 0.603).Done. Every experiment uses the head’s predictions.
Phase 2A fusion model: TEDDY’s embedding plus a protein encoder, one modality dropped. No ANM.Unfinished scaffold, retrained on the official embedding: RNA-only test Pearson 0.613 decoded directly, slightly above phase 1’s 0.603. Only the RNA-missing stand-in in Experiment 2 (withdrawn).
Mode BANM’s engine decides on the phase-1 predictions (our head on TEDDY’s embedding); labelled exceptions.v2: Experiments 1, 3, 4, 5 rerun; 2 and 6 withdrawn. v3 (registered, final): E1, E2, E4, and E6 on external data.
Mode ALooking inside TEDDY: its layers as ANM’s steps, the gene-mean or the per-gene residual stream as a candidate retained state to test, and to select among, for a declared readout, layer Jacobians, gene perturbations.v2: linear, MLP / kNN and gene-token probes. v3: E5 (layer Jacobians) final, stopped at its gate; E5-M (sufficiency of the gene-mean) final, inconclusive; E7 (the inverse loop at the layer-11 cut) final, rejected with no revision; E3 compared readouts of TEDDY’s layer means and token states.

Why two words. Phases build the evidence model; modes are two independent ways for ANM to engage TEDDY, on its outputs (B) or inside it (A).

What we compare · three methods, six questions

Baseline

TEDDY + fixed rule

The TEDDY + head predictions plus a fixed rule: average each lineage’s markers, call the best if it clears a bar.

Treatment

TEDDY + ANM

The same predictions, decided by ANM under a written-down question.

Control

TEDDY + trained classifier

“Just train harder”: a classifier fitted on labels, modelled on Jev’s interface; Jev was never called.

Question (experiment)TEDDY + fixed ruleTEDDY + ANMTEDDY + trained classifier
1 · Change the questionKept soft, answers 2,279 cells B/T-priority holds back; re-coded (0 labels): exactly ANM’s calls0 labels: “no calls” follow the question, 272 → 1,493 → 2,551; same calls as the re-coded rule“No calls” stay at 43 until retrained on new labels
2 · When RNA is missingWithdrawn; redesigned as v3 E2, E4Withdrawn. Prototype: a declared trust per RNA level = the fixed rule with a stricter barWithdrawn
3 · Why this call?Reports no reason; once written down, the same leave-one-out runs on itLeave-one-out on all 16,478 calls; CD2 decides most often, 17.9% (p ≈ 0.0099; CD5 17.3%), the largest normalised valueLearned weights (opaque)
4 · Which calls to trust?Its own score margin gates as well: 0.9988 keeping 40% (B/T-priority)Confidence gate: 0.911 → 0.9988 keeping 40% (B/T-priority), never better than the marginHard-cell labels gain little over random: +0.058 at 50, +0.018 at 100
5 · Cost of a new questionRe-code the rule (0 labels) or re-tune on labels0 labels, like any written rule (the fixed rule too)≈ 50 (grid), 500 (logistic) or 1,000 (MLP) labels to match, again at every change (v2; v3 E1.5: n* = 0)
6 · Look-alike cellsWithdrawn; redesigned as v3 E3, E5, E5-MWithdrawn. Prototype: right direction, compressed (CD56 gap 0.148 vs 0.621, 453 pairs); an MLP probe on the same embedding keeps about twice that (Mode A)Withdrawn

Accuracy is not the claim. These rows are the v2 key: 1, 3, 4, 5 corrected rerun; 2 and 6 withdrawn. v3 supersedes them: rows 1, 3, 4, 5 → E1; row 2 → E2, E4; row 6 → E3, E5, E5-M.

Is this a multimodal model?

TEDDY is not: it reads only RNA. The data are (RNA and protein from one cell), and protein is only the answer key, except in the withdrawn Experiments 2 and 6 (table below) and in v3 E4, whose second channel reads the 122 non-panel measured proteins (never the scored panel).

What ANM reads in each experiment

ExperimentANM’s evidenceGraded against
1 · Change the questionThe 9 TEDDY + head predictions, asked three waysmeasured, keyed per question
2 · When RNA is missingRNA: TEDDY + head · RNA missing: protein-only stand-in · both: averaged (withdrawn)measured
3 · Why this call?The 9 predictions, then one marker removed at a timemeasured
4 · Which calls to trust?The 9 predictions (first run’s RNA-missing view not rerun)measured
5 · Cost of a new questionThe 9 predictions, 0 labels; compared heads also get 32 embedding numbers (grid: the 9 only)measured
6 · Look-alike cellsPairs picked outside ANM; calls from the predictions, or measured protein in the complement test (withdrawn)measured

Two ways to study a foundation model

Mode B decides on outputs; Mode A probes TEDDY’s layers (v2 probes; v3 E5, E5-M).
This repo

Mode B · decide on top of TEDDY

TEDDY + our head stay a closed box of evidence; we study the decision on top.

Answers: how should we decide from the TEDDY + head outputs?

v3: E5 · E5-M · E7 final

Mode A · look inside TEDDY

Open TEDDY up: its layers as steps; push a source and measure the state and the readout apart; test candidate retained states (the gene-mean, the per-gene residual stream) and select within a declared set; layer Jacobians, in-silico gene perturbations.

Would answer: what TEDDY’s layers keep and lose. v2 probes suggested part of the NK–T loss sat in our head’s readout and in mean pooling. v3 did not confirm a repair: two trained readouts of frozen TEDDY told NK from T less accurately than our head (E3), and E5’s layer-by-layer test stopped at its derivative check. E5-M, the sufficiency test of the gene-mean, was inconclusive for the one attention-pooling observer tested. E7 rejected the layer-11 gene-mean as a sufficient state for TEDDY’s layer 12 and our head, with no revision selected.

三种角色、单向流动:TEDDY 只读 RNA、给出 512 维嵌入,我们训练的 head 从中预测蛋白(证据);ANM 通常只读 head 的输出并判定或拒答;实测蛋白只负责打分(撤回的实验 2、6 有标明的例外)。我们做 Mode B(ANM 的引擎作为决策层);Mode A 用的是 ANM 本身的响应检验(推动源、分别测状态和读出,检验并选择候选保留状态):v2 探针曾提示部分 NK–T 损失在 head 的读出与均值池化中;v3 E3 中两种冻结 TEDDY 读出的 NK/T 准确率均不如 head,E5 停在导数检验,E5-M(基因均值的充分性检验)对所测的一个观察者判定为不确定,E7 否决了第 11 层 gene-mean 对第 12 层 + head 的充分性且未选出修订。

v3 — Registered experiments · 1 Oct 2026

Registered experiments (v3): what held up

The v1/v2 tests further down had problems that made their headlines untestable or invalid: an answer key with no NK and no out-of-scope class, a panel chosen on the test set, a test donor also in training, event order acting as a hidden weight. v3 fixed each one, registered every endpoint, margin and decision rule on training and validation data only, and then ran each test once on the two site4 donors that appear in no other split (11,294 cells). E6 repeated E1’s main endpoints on 8 external donors (40,000 cells). All eight registered experiments are final, and every verdict is reported as registered.

Bottom line

  • ANM equals a declared rule in this setup, and the registered tests found no decision value from ANM’s readouts. Its engine made the declared rule’s call on every test cell for all three questions (0 mismatches), on site4 and in every external donor, and E1’s registered falsification clause holds. E1 →
  • Writing a new question with zero labels did not beat training. On the changed question, a classifier trained only on the old question’s labels was more accurate than the zero-label rule: rule minus classifier −0.078 [−0.134, −0.028], loss. E1 →
  • The response and repair claims did not hold. E2’s stage-by-stage decomposition added nothing beyond the accuracy curve (falsified). E3 rejected “the NK–T loss is in the readout or pooling and is repairable on frozen TEDDY”. E4: ANM’s fusion lost to a stacker trained on the validation donor. E5 stopped at its registered derivative check (float32; float64 passes). E2–E5 →
  • E5-M, does TEDDY’s gene-mean state lose what a token readout uses? Inconclusive. For E3’s attention-pooling readout, at first order, the median share of its response that flows through what gene-mean pooling discards is 0.085 on NK–T look-alike cells and 0.127 on matched random cells: smaller on look-alikes, the opposite of the hypothesis (−0.043 [−0.062, −0.011]), but neither a registered loss nor equivalent. Neither “pooling loses the look-alike difference” nor “the gene-mean state is sufficient” is established, and the measurement holds for this one observer only. E5-M →
  • E6, external PBMC data (labelled “RNA possibly seen by TEDDY in pretraining” and “key not validated”): ANM equals the declared rule in every donor (E1.1a replicates). TEDDY’s margin ranks the rule’s calls better than the rule’s (= ANM’s) top score in 8 of 8 donors (−0.0087 [−0.0182, −0.0017], replicates); under E1’s own decision rule this is still inconclusive, as it was on site4. The site4 finding that a classifier orders calls better does not replicate. E6 →
  • E7, the ANM paper’s inverse loop on TEDDY: rejected, no revision. With the downstream component fixed (TEDDY’s layer 12, gene-mean pooling and our frozen head), histories with exactly the same layer-11 gene-mean give readouts that differ beyond the 0.05 tolerance on fresh site4 comparisons (median 0.125 [0.090, 0.161], in units of the measured NK–T gap). Adding the six marker genes’ token states does not fix it (0.122), and no candidate was selected in development. The first step of the loop holds on TEDDY; the second returned no revision, so no revised representation is validated. These are exact state interventions, not biological variation. E7 →
  • The answer key is weak for one of the two test donors (donor 13272: kappa 0.4177), so every result is also shown on the annotation-only key, with equal prominence. On the external data the key is not validated either (kappa 0.6562 < 0.70), so the annotation-only key decides E6. Key validity →

What ANM is for, in the paper

Push a source; measure the candidate state and the readout apart; compare with bands drawn in advance.

ANM measures a response chain: push one source by a known amount and measure separately how the retained state and the readout move. That shows where information is lost (not carried by the state, or carried but not used by the readout) and which distinctions the state must keep. The push is an intervention; that the readout change passes through the state is not established (“the dashed state-to-readout relation is a hypothesis, not an established causal path”; the ANM paper’s v2 draft, PR #16, v37, commit 8f8c7780, 2026-10-09, not yet released). The retained state is a candidate (“The choice of representation itself becomes an experimental hypothesis”). For a declared observer (readout, pushes, window) the same responses test and select it: a candidate is rejected when identical states give different outputs; within a candidate set declared in advance, the one with no violation and the fewest states is selected, fixed and validated on new comparisons. In the paper’s exact construction that gives the coarsest sufficient representation, 2 states. The set is given, so this selects rather than discovers. For its graph study the paper says: “The dynamics are prescribed and open-loop, without readout feedback.” It now separates open-loop experiments from closed-loop workflows, where an action changes the next observation. In its closed-loop study (a constructed release-check task; Qwen2.5-14B with simulated tools), version-omitting summaries are rejected (32 resolved violations among 56 matched comparisons), a predefined current-version summary agrees within bounds in all 24 comparisons, and forecast Brier loss falls from 0.2559 to 0.0181; an ordinary dependency rule also predicts the observed actions.

PR #16 (v2 draft, v37, at 8f8c7780): the paper also has one restricted inverse test with a fixed downstream model. On recipient A only, 768 new calls (512 base + 256 control) reject a snapshot description (same snapshot, opposite routing: largest probability difference at least 0.8358), and an association description chosen from declared candidates gets bounded support on four new histories and two continuation combinations (largest probability difference at most 0.0821, below the fixed margin 0.15). The broader development screen selected none; support came only after the readout was restricted to recipient A, a scope chosen after that screen. All 768 answers matched the reference, so support there coincides with the model answering correctly (our observation). The model and interface stay fixed: this supports the analyst’s description, not a repair of the model. On TEDDY, E7 ran this reject → select → validate loop at the layer-11 cut with the downstream component fixed and selected nothing: the rejection step held, the selection step returned no revision from the declared library, and nothing reached validation.

ANM 测的是一条响应链:把一个源推动已知的量,分别测量保留状态和读出怎么变,从而看出信息在哪里丢失。声明观测者之后,同样的响应还能检验候选保留状态:同一状态下输出不同的候选被否决;在事先声明的候选集合里,选出没有违例、状态数最少的那个,固定后用新的比较验证。候选集合是给定的,所以这是选择而不是发现;源一端是干预,但没有证明读出的变化经由该状态传递。ANM 论文 v2 草稿(PR #16,v37,commit 8f8c7780,2026-10-09,尚未发布)对图研究的原文是 “The dynamics are prescribed and open-loop, without readout feedback.”,并区分开环实验与闭环工作流(动作改变下一次观测)。其闭环研究(构造的发布检查任务,Qwen2.5-14B 加模拟工具)否决了省略版本的摘要(56 个匹配比较中 32 个违例),事先给定的当前版本摘要在全部 24 个比较上有界一致,预测 Brier 损失从 0.2559 降到 0.0181;普通的依赖规则也能预测观测到的动作。该稿还有一项范围受限、下游模型固定的逆向检验:仅针对接收者 A,768 次新调用(512 次基础 + 256 次对照)否决了快照描述(快照相同、路由相反时最大概率差至少 0.8358);从声明候选中选出的关联描述在四个新历史和两个后续组合上获得有界支持(最大概率差至多 0.0821,低于固定容差 0.15)。较广的开发筛选未选出任何候选,只有把读出限定为接收者 A(范围在那之后确定)后才得到支持;768 个回答全部答对,所以那里的“支持”与模型答对重合(我们的观察)。模型与接口不变,支持的是分析者的描述,不是对模型的修复。在 TEDDY 上,E7 在第 11 层切点、下游组件固定时运行了这一“否决 → 选择 → 验证”闭环,什么也没选出:否决步骤成立,选择步骤在声明的候选库中没有得到修订,因此没有进入验证。ANM 的作用是测量响应链、为声明的读出检验和选择候选保留状态;上面的决策增益判定检验的是早期页面的说法,不是 ANM 的目的。

Here every event enters at t = 0, so the field acts only as a constant gain per class (G(3)·3·S) and ANM’s decision-layer calls equal a re-coded rule. The response tools were used in E2 (push the RNA), E5 (follow a push through TEDDY’s layers), E5-M (test the gene-mean as a declared candidate state) and E7 (the inverse loop at the layer-11 cut). E2 and E5 produced no validated finding about TEDDY. E5-M produced one validated measurement for one observer, and its registered verdict is inconclusive. E7 rejected the layer-11 gene-mean for a fixed downstream component, with no revision selected.

Overall: ANM’s role is to measure the response chain and to test and select candidate retained states for a declared readout. In this project that gave one first-order measurement for one observer (E5-M, inconclusive) and one reject → select → validate run that selected nothing (E7: the layer-11 gene-mean rejected, no revision). The decision-gain verdicts on this page test claims that earlier versions of it made; they are not ANM’s purpose.

Fairness: what was fixed in advance, and when

The registration (registration_v3.json, sha256 e4c8a33e…), amendments A1, A2, A3 and the per-experiment addenda are on GitHub, branch exp/registered-v3. The GitHub push events are the independent timestamps; local commit times come from the committing machine. A site4 evaluation is the first stage that reads site4 protein or cell types (forward passes of site4 RNA alone are label-free). All times are 1 Oct 2026, UTC.

File it depends onCommittedPushed to GitHubEvaluation that uses it (site4; external for E6)Pushed before it?
Registration03:54:5304:24:22 (branch created)first v3 site4 read: E5 cell selection 05:10:36yes
A1 (final)04:37:0407:57:00E5 05:10:36 · E1 05:36:47 · E3 08:42:23 · E4 09:04:11 · E2 10:41:58no for E5 and E1 (committed before, pushed after); yes for E2, E3, E4
E5 addendum (v3)04:50:0007:57:00E5 05:10:36 (results 10:42:46)no (committed before; pushed while E5 ran)
E2 addendum05:23:2607:57:00E2 report 10:41:58yes
E3 addendum05:25:0507:57:00E3 evaluate 08:42:23yes
E1 addendum05:30:5907:57:00E1 05:36:47–05:44:44no (committed about 5 min before E1; pushed 2 h 12 min after it finished)
A206:11:3707:57:00E3 08:42:23 · E2 10:41:58yes
E4 addendum06:44:4907:57:00E4 evaluate 09:04:11yes
A307:03:0907:57:00E3 08:42:23yes
E5-M addendum07:39:1607:57:00E5-M run started 10:43:09 (report 11:06:15)yes
E6 addendum v1 / v210:07:39 / 10:43:0010:43:44E6 external run started 11:54:31; its key-validity stage, the first to read external protein and cell types, 11:54:34yes (before any external outcome; see the prep note below)
E7 addendum v1 / v222:01:06 / 22:24:0522:25:53E7 development (val only) 22:26:38 · site4 confirmation 22:40:20yes (v2 before any development, site4 or external forward)
E7 selection records (dev / follow-up)22:33:13 / 22:40:1822:40:19E7 site4 confirmation started 22:40:20 (local clock), site4 roster logged 22:40:22 · external 22:54:05yes, by 1 s on two different clocks (see below)
  • Pushed before the evaluation they govern: the registration, A2, A3 and the E2, E3, E4, E5-M and E7 addenda. The E6 addenda (v1 committed 10:07:39, v2 10:43:00) reached GitHub together at 10:43:44, before any external outcome: the addendum records outputs/v3/E6 absent at 10:40:07, and the E6 run started at 11:54:31. It ran at local commit cac4f8a (11:32:45), which differs from the pushed 2a55f81 only in docs/reports. Earlier, before either addendum, the data-preparation step had read some external protein summaries while the annotation map was being revised, so E6’s registered order for the map was not met in time (disclosed in the addendum; an independent re-derivation from the label names alone reproduced the committed map, 31 of 31 labels).
  • E7. Addendum version 2 (0e40d3e, committed 22:24:05) reached GitHub at 22:25:53, before E7’s first development forward pass (22:26:38, val donor 18303 only); version 1 (22:01:06) went up in the same push. The dev selection record was committed at 22:33:13, when the follow-up development run (val only) started, and reached GitHub with the follow-up record (22:40:18) at 22:40:19. The site4 confirmation started at 22:40:20 by the local clock: 1 s after GitHub’s push time, on a different clock, so that margin alone is not an independent ordering. The local commit at 22:40:18 and the result file, which records the selection record’s sha256, committed: true and HEAD 871b709 (the pushed commit), support it.
  • Committed before the evaluation, pushed after it: for E1 and E5 the governing files (A1, the E1 addendum, the E5 addendum v3) were committed locally before the evaluation, and each result file records their sha256 and committed: true, but they reached GitHub only at 07:57:00. For these two, the ordering rests on local commit times and recorded hashes, not on an independent timestamp. (The E5 addendum’s first version, 820cce0 at 04:19:49, was in the 04:24:22 push; A1.10 then made the registered endpoint and cells primary, which the v3 version records.)
  • E1 came before A2 and A3. E1 finished at 05:44:44; A2 was built at 06:09:15 and A3 at 07:00:56, and both concern only E2 and E3. A3 states that the E1 site4 results had been seen and that nothing in it depends on them; A2 does not say. The E5-M and E6 addenda record the same disclosure (E1, and for E6 also E3 and E4, had been seen); E6’s version-2 panel revision was decided by a session that had seen those site4 results but no external value.
  • E3’s site4 pairs were built early, by E5. E5’s cell selection at 05:10:36 rebuilt E3’s within-donor NK–T pairs from the primary key, so it read site4 protein and cell types, before the E3 addendum, A2 and A3. Its log records only the pair count (253) and cells per donor and class; no E3 statistic was computed then.
  • Key validity. On the test cells the annotation-vs-gate kappa is 0.5781 (agreement 0.6847), below the registered 0.85, so the flag is raised: donor 13272 kappa 0.4177 (agreement 0.5617), donor 19593 0.8798. In donor 13272 the gate puts 4,148 of 7,365 cells in out of scope, against 1,707 annotated. 3,561 of the 11,294 test cells are unscored on the primary key. The key is not switched (that would use site4 labels to choose); annotation-only rows are shown beside every primary-key row.
  • Other disclosures: site4 is not virgin (v1/v2 read it, and v3’s design is informed by what they showed); the head’s checkpoint was selected on validation; its training size factors used one global ADT-median scalar over all cells, site4 included; pretraining contamination of TEDDY with this dataset is not verified. For E6’s external data the addendum’s answer is “likely yes” (the dataset was public in CELLxGENE before TEDDY’s training data were downloaded), hence its label.

Splits

SplitRuleCells
trainsites 1–3, every donor except 1830367,405
valdonor 18303 at site16,106
test (primary)site4 donors in no other split: 13272 (7,365), 19593 (3,929)11,294
test (secondary)donor 15078, in training at sites 1–3; never changes a verdict5,456

Questions, panels and methods (fixed on validation)

  • Five classes: B, T, NK, myeloid and out of scope (no call is right).
  • Panels (3 per class, by worst-pair AUROC on val): B CD20 CD22 CD268 · T CD3 CD2 CD5 · NK CD122 CD94 CD56 · myeloid CD172a CD11c CD62P.
  • Questions: Q1 soft four-class (bar 0.298614) · Q2 strict, nested in Q1 (0.661255) · Q3 B / T / NK / classical monocyte anchored on CD19, CD3, CD56 and CD14 (0.273973).
  • Methods on the same evidence: the declared rule · TEDDY + ANM · a trained classifier · TEDDY’s margin. Every comparison at matched coverage, with registered verdict rules.
Why v3: the v1/v2 problems and the fix for each
Problem in v1/v2v3 fix
Three-class key (B, T, myeloid): NK cells, which carry CD16, scored as “myeloid” (1,342 of 1,690), and no class where “no call” is rightFive classes including NK and out of scope; the primary key keeps cells where annotation and a protein gate agree, and the annotation-only key is always reported
B/T-priority question was synthetic; it changed 12.48% of expected answersQ3 is the standard four-population question, anchored on CD19, CD3, CD56 and CD14
The 9 panel proteins were chosen by test-set PearsonPanels selected on the validation donor only; the old panel survives only as a sensitivity row
Donor 15078 is in training and 32.6% of the site4 cellsPrimary test = the site4 donors in no other split (13272, 19593); 15078 is secondary
Measured protein scales sat in the evidence path (per-cell factor first; then the train median 0.92663 and measured-protein 95th percentiles)Evidence = prediction ÷ the training 95th percentile of the head’s own predictions; no measured-protein array enters
Event order was a hidden weight; the first run’s ANM “edge” came from declining more (rule 0.9657 at ANM’s coverage)All events at t = 0; every accuracy comparison at matched coverage
No registered margins, decision rules or donor-level uncertainty; “0 labels” holds for any written ruleRegistered endpoints, margins and win / loss / equivalent rules; two-stage donor-then-cell bootstrap; failures reported; zero labels credited to any written rule, never to ANM

八项预注册实验全部完成:ANM 在 site4 与外部数据上都与声明规则逐细胞判定相同,预注册检验未发现其读出带来决策价值;零标签改问题不胜训练分类器;E2 被证伪,E3 被拒绝,E4 不敌验证集堆叠器,E5 停在导数检验;E5-M 判定为不确定(R2 响应流经池化丢弃部分的份额:相似细胞 0.085,随机细胞 0.127,仅针对这一个观察者);E6(RNA 可能已被 TEDDY 预训练见过、答案键未验证)复现了 ANM = 声明规则,以及 TEDDY 的分数差在 8/8 供体中排序优于顶分(按 E1 判定规则仍为不确定);E7(论文逆向闭环在第 11 层切点的类比,下游组件固定)否决了第 11 层 gene-mean 及加六个标记基因 token 状态的候选,开发阶段未选出修订,没有验证任何修订后的表示。公平性:E1、E5 的依据文件只在评估前本地提交,推送晚于评估;E2、E3、E4、E5-M 的附录在评估前已推送,E6 附录在任何外部结果之前推送(数据准备阶段此前读过部分外部蛋白汇总,已披露);E7 附录第 2 版在任何开发运行之前推送,两份开发选择记录在 site4 确认开始前 1 秒推送(GitHub 与本地两个时钟,另有本地提交时间与结果文件中的哈希佐证)。

E1
E1 · decision layer on the v3 key · final

Is ANM’s decision layer worth more than a declared rule?

Experiments 1, 3, 4, 5 and the nested-readout check (C2), rerun under registration: change the question, explain a call, rank calls by trust, count labels, decline out-of-scope cells.

V3 report ↗
In plain words

Same evidence, several deciders. ANM made exactly the declared rule’s call on every test cell. None of its extra readouts beat TEDDY’s own margin, and a classifier trained on the old question’s labels answered the new question better than the zero-label rule.

Problem

The v2 site credited ANM with a declared question, a trust gate, per-marker reasons and zero-label questions. Are any of them worth more than TEDDY + a declared rule, TEDDY’s margin or a trained classifier, on a five-class key and unseen donors?

Compared

declared ruleTEDDY + ANMtrained classifierTEDDY’s margin 11,294 test cellsQ1 · Q2 · Q3

What we do, step by step

  1. Evidence: the frozen head predicts the 12 panel proteins from TEDDY’s embedding; each is divided by the training 95th percentile of the head’s own predictions and clipped to [0, 1].
  2. Three questions with bars fixed on validation; Q1 → Q3 changes 0.127 of calls, Q1 → Q2 0.249.
  3. ANM’s engine gets one event per panel protein, all at t = 0. With equal panels each class score is G(3)·3·S, G(3) = 0.370041 (S = the rule’s score), so its calls equal the rule’s by construction; E1.1a checks it cell by cell.
  4. Endpoints: change the question (margin 0.01), attribution (0.02), trust ordering by AURC (0.005), label cost, nested readouts (0.05), each at matched coverage, two-stage bootstrap B = 2000.
  5. Grade on the primary key and, with equal prominence, the annotation-only key.

bridge_anm/v3_e1_mode_b.py · bridge_anm/lib/v3_e1.py, v3_key.py · addendum E1.json

Registered endpoints · test cells · difference [95% CI]

scroll →

EndpointPrimary keyAnnotation-onlyVerdict
E1.1a · ANM vs rule, call mismatches (Q1 / Q2 / Q3)0 / 0 / 0—pass
E1.1c · rule − Q1-label classifier, Q3 selective accuracy−0.078[−0.134, −0.028]−0.054[−0.121, −0.018]loss
E1.1d · rule − Q3-label classifier−0.078[−0.137, −0.024]−0.053[−0.121, −0.018]loss
E1.3c · error of flip-sensitive minus lowest-margin calls0.004[−0.008, 0.022]0.008[−0.000, 0.023]inconclusive
E1.4a · AURC, ANM’s top score − TEDDY’s margin−0.002[−0.024, 0.020]0.002[−0.009, 0.009]inconclusive
E1.5 · Q3 labels the classifier needs (n*)00measured
C2 · out-of-scope decline, closure − mean rule, at c* = 0.9490.000[−0.006, 0.003]−0.001[−0.007, 0.001]equivalent · guard failed
Deployed operating points · coverage / selective accuracy / out-of-scope decline (primary key)
MethodCoverageSelective acc.OUT decline
Q1 declared rule (= TEDDY + ANM)0.9490.6970.261
Q1 ANM closure readout0.9470.6540.271
Q1 trained classifier0.9680.7570.172
Q3 declared rule0.9350.6920.287

Q1 rule on the annotation-only key: selective accuracy 0.730. Classifier: logistic regression on the 12 evidence values, 58,657 labelled training cells, C = 100 by validation log-loss. Margin = top score − second score.

0 · 0 · 0
calls where ANM’s engine differs from the declared rule, Q1 / Q2 / Q3; its closure readout matches its closed form too.
0.770 vs 0.692
Q3 selective accuracy: classifier trained on Q1 labels only vs the zero-label rule (−0.078, loss; n* = 0).
0.843 vs 0.844
AURC: ANM’s top score vs TEDDY’s margin (inconclusive); a classifier on the same evidence: 0.942.
0.261 vs 0.261
out-of-scope cells declined at c*: ANM’s closure vs the mean rule (equivalent); in-scope accuracy −0.056 (guard failed).
ShowsANM’s engine computes exactly the declared rule (0 mismatches), and its leave-one-out attribution equals the exact closed form (top-marker and flip agreement 1.0000 on 10,715 calls). That is a correctness check, not a gain.
Does not proveAny decision value from ANM’s readouts: neither the trust-ordering test (E1.4) nor the nested-readout test (C2) is a win, so E1’s registered falsification clause holds. The secondary 0.90-coverage win of the top score (+0.021) belongs to the rule’s top score, not to ANM. “Zero labels” belongs to any written rule. Per-marker shares (CD20 0.484 of B, CD2 0.618 of T, CD94 0.572 of NK, CD11c 0.832 of myeloid calls) describe the evidence; for B they do not hold in donor 19593 (CD20 0.339, p = 0.6494).

E1:ANM 与声明规则逐细胞判定相同(0 不一致),只是核对,不是增益;改为 Q3 后,仅用 Q1 标签训练的分类器优于零标签规则(−0.078,loss;n* = 0);信任排序、归因、嵌套读出均未取胜。

E2
E2 · response decomposition and linearity · final

Where are calls lost when the RNA degrades?

Thin each cell’s RNA or mask one gene, re-embed with TEDDY, and follow the change to the call. Does labelling each lost call as representation, head or decision say more than the plain perturbation → accuracy curve?

V3 report ↗
In plain words

No. Splitting the losses by stage added nothing beyond the accuracy curve (falsified), and at these sizes the pipeline’s response is not linear in the size of the perturbation.

Problem

ANM’s forward use asks where information is lost between input and readout. The v2 prototype thinned RNA on validation cells only. Registered question: on unseen donors, does a stage-by-stage split of the losses tell us more than how much accuracy is lost?

Compared

decomposition: representation / head / decisionthe plain accuracy curve 1,000 test cells · 23,116 cases+ 250 cells of donor 15078

What we do, step by step

  1. Perturb: binomial thinning of each cell’s UMIs (keep 95% down to 5%), or scale one of 20 genes among the cell’s tokens by 1 − ε (the coding genes of the 12 panel proteins and 13 NK/T genes, which overlap; SELP is absent and was dropped).
  2. Follow it: re-embed with the official TEDDY-G preprocessing → frozen head → evidence → Q1 rule and ANM (0 engine mismatches over all cases).
  3. Label each lost call in order: representation if a logistic probe on training embeddings is wrong on the perturbed embedding; else head if the rule’s argmax on the perturbed evidence is wrong; else decision.
  4. Falsified unless (i) two perturbations with similar losses differ by ≥ 0.15 in a share, or (ii) the small-ε response predicts which cells change call at ε = 0.8 with AUROC ≥ 0.02 above the margin, in each donor too (A2.3).
  5. Linearity: compare the response at ε and ε/2 at each stage (embedding, evidence, score).

scripts/e2_response_decomposition.py · bridge_anm/lib/e2_response.py · addendum E2.json

The comparator curve and the decomposition · test cells, primary key

scroll →

PerturbationDecision-accuracy lossLost cellsRepr. / head / decision
80% of UMIs kept0.022[0.004, 0.042]250.000 / 1.000 / 0.000
20% kept0.162[0.121, 0.194]1120.069 / 0.931 / 0.000
5% kept0.140[0.112, 0.172]1250.281 / 0.719 / 0.000
one gene masked (ε = 1)0.012[0.001, 0.024]200.000 / 1.000 / 0.000
Falsification criteria (registered)
CriterionResultVerdict
(i) pairs of perturbations that qualify0not met
(ii) AUROC, small-ε response − margin (398 of 2,000 cases change call)−0.092[−0.125, −0.057]loss
C5 · share of cells in the linear regime, any stage, any row≤ 0.098measured

Baseline Q1: coverage 0.945, selective accuracy 0.695, decision accuracy 0.716. Smallest thinning pair (ε 0.1 vs 0.05): the embedding’s median slope ratio is 0.667 and the median cosine between the two responses 0.564 (1 and 1 if linear). Verdict on donor 15078 too: adds nothing beyond the curve.

falsified
registered verdict: the decomposition adds nothing beyond the curve (test and donor 15078).
0.162
decision accuracy lost with 20% of UMIs kept [0.121, 0.194]; 0.022 at 80%, 0.140 at 5%.
−0.092
AUROC of the small-ε response minus TEDDY’s margin for predicting which calls change (loss).
≤ 0.098
share of cells whose response is linear in ε, at any stage: not linear at these sizes.
ShowsThe measured degradation curve of TEDDY + head + rule on unseen donors, and that the response to these perturbations is not linear in their size. The least linear stage is the embedding itself; TEDDY reads genes as rank tokens, and thinning reorders them (a reading, not separately tested).
Does not proveThat the losses sit in our head. “Head” collects most lost calls by construction: the embedding probe is near-perfect on validation (accuracy 0.9977) and is tested first, so “representation” rarely fires. No lost call fell below the bar (“decision” 0.000 at every level); coverage rose under thinning (0.961 at 80% kept, 1.000 at 20%).

E2:把扰动造成的错误分解为表示/头部/决策,并不比普通的扰动-准确率曲线多提供信息(已证伪);“头部”占多数部分源于标签顺序的构造;响应在所测尺度下不是线性的。

E3
E3 · NK–T look-alikes and repair on frozen TEDDY · final

Can a better readout of frozen TEDDY repair NK vs T?

On NK–T pairs that are neighbours in TEDDY’s embedding, does our head compress the protein difference more, and does a layer-mean MLP (R1) or attention pooling over gene tokens (R2) recover it?

V3 report ↗
In plain words

No. Both alternative readouts of frozen TEDDY told NK from T less accurately than our head, and “the NK–T loss is in the readout or pooling and is repairable on frozen TEDDY” was rejected. The earlier compression example is not robust.

Problem

v2’s most-cited finding: NK and T cells nearly merge in TEDDY’s embedding, our head squeezes their predicted protein differences, and probes suggested a nonlinear or token-aware readout could recover part. Registered test of both parts.

Compared

head (registered)R1 · MLP on 12 layer meansR2 · attention over layer-12 gene tokensnull · head retrained, seed 1 253 pairs · 164 flagged3,861 NK / T cells

What we do, step by step

  1. Pairs: k = 10 cosine neighbours within each donor; one primary-key NK and one T cell; flagged if the cosine is ≥ 0.949402 (set on validation). 13272: 157 pairs (111 flagged); 19593: 96 (53).
  2. Gap ratio per readout: median predicted ÷ median measured difference within pairs, averaged over CD56, CD94, CD335 and CD3.
  3. H3a: D_R = the flagged-minus-unflagged gain of readout R over the head, minus the same for the null. A win needs ≥ 0.05 plus the A2.1 scale checks (A3.1 for pooling).
  4. H3b: NK-vs-T selective accuracy at coverage 0.9 and 0.8, margin 0.01.
  5. No ANM arm: decisions use the declared Q1 rule.

scripts/v3_e3_nkt_repair.py · bridge_anm/lib/v3_e3.py, v3_e3_readouts.py · addendum E3.json

Registered statistics · test cells · point [95% CI]

scroll →

StatisticPointPer donor (13272, 19593)Verdict
H3b · R1 − head, NK-vs-T accuracy at 0.9−0.0409[−0.0554, −0.0121]−0.0503, −0.0208loss
H3b · R2 − head at 0.9−0.1925[−0.2899, −0.0836]−0.089, −0.2789loss
H3b · R1 − head at 0.8−0.0356[−0.0497, −0.0009]—loss
H3b · R2 − head at 0.8−0.1978[−0.2815, −0.0729]—loss
H3a · D_R10.1496[−0.1358, 0.2948]0.1728, −0.034inconclusive
H3a · D_R20.1121[−0.5087, 0.4327]0.311, −0.417inconclusive
H3a · pooling, D_R2 − D_R1−0.0375[−0.4408, 0.22]0.1382, −0.383inconclusive
Gap ratio · flagged vs unflagged pairs (descriptive)
ReadoutFlaggedUnflagged
head0.1169[0.0472, 0.4677]0.3985[0.3105, 0.6207]
R10.2635[0.1737, 0.5369]0.4058[0.3481, 0.5586]
R20.2722[0.2026, 0.3911]0.452[0.3876, 0.6125]
head, without gdT CD158b+ pairs (163)0.4729[0.3246, 0.7898]0.5137[0.3258, 0.7393]

Head NK-vs-T accuracy at 0.9: 0.8319 (R1 0.7911, R2 0.6394). R1 keeps more of the gap on flagged pairs (recovery term 0.1465 [0.0493, 0.1858]) but not more than a rescaling would (scale-free contrast 0.4384 [−0.3074, 1.3336]).

rejected
“the NK–T loss is in the readout or pooling and is repairable on frozen TEDDY” (A2.1 falsification).
−0.0409
R1 (layer-mean MLP) − head, NK-vs-T accuracy at coverage 0.9: loss.
−0.1925
R2 (attention over gene tokens) − head at 0.9: loss.
+0.0547
a seed-1 retrain of the head above the registered head (descriptive): head-training variance is not small.
ShowsNeither tested readout of frozen TEDDY improves NK-vs-T calls over the registered head (four registered losses). R2 fits worse than R1 even on validation (CD56 Pearson 0.5514 vs 0.7091).
Does not proveThat the head compresses NK–T differences more on look-alike pairs. The pooled 0.1169 vs 0.3985 has no registered test, the intervals overlap, and it comes mostly from gdT CD158b+ pairs in donor 13272, the donor with the weak key (in 19593: 0.3978 vs 0.4214). 253 pairs from 2 donors give wide intervals.

E3:“损失位于读出/池化并可在冻结 TEDDY 上修复”被拒绝;R1、R2 的 NK-T 准确率均输给原头部;头部在近邻配对上压缩更甚只是描述性结果,区间重叠,且主要来自供体 13272 的 gdT CD158b+ 配对。

E4
E4 · two-channel fusion (Experiment 2 redesigned) · final

Does ANM’s field fuse two evidence channels better?

Channel 1: TEDDY + head, predicting the panel from RNA. Channel 2: a ridge regressor from the 122 non-panel measured proteins. Here ANM’s field runs, with contradiction events. Does it fuse better than declared averages or trained fusers?

V3 report ↗
In plain words

No. A stacker trained on the validation donor fused best and ANM’s fusion lost to it. Against the trust-weighted average, which is ANM without its contradiction events, the difference is inconclusive.

Problem

v2’s Experiment 2 (RNA missing) was withdrawn. Redesigned as a fair test where ANM’s field actually does something: two noisy channels, per-channel trust, and contradiction events when the channels disagree.

Compared

F0 channel 1 · F0b channel 2F1 simple · F2 trust-weighted averageF3 stacker (val) · F4 learned fusionF5 TEDDY + ANM fusion noise L0–L3controls C1–C3

What we do, step by step

  1. E4 key: Q1 scoring on the measured panel; a cell is out of scope below τ_K = 0.55 (set on val). Neither channel reads the measured panel.
  2. Noise: L0 none · L1 RNA thinned to 0.2 · L2 half of channel 2’s inputs set to 0 · L3 both.
  3. Trust per channel and level on validation (mean max(0, Pearson) with the measured panel); ANM’s source scale = trust ÷ the larger trust.
  4. F5: support events per channel plus contradiction events (each channel’s top class contradicts the other classes at 0.5 × its top score), all at t = 0. Its scores equal the closed form R(nk)·[3 s1S1 + 3 s2S2 − the contradiction terms], R(nk) being the field’s response for a class with nk event sites (checked on every cell).
  5. Endpoint: selective accuracy at coverage 0.8, mean over L0–L3, margin 0.01; comparator F3, chosen on validation (A1.9).

bridge_anm/v3_e4_fusion.py · bridge_anm/lib/v3_e4.py · addendum E4.json

Mean selective accuracy at coverage 0.8 · E4 key, test cells

scroll →

ComparisonDifferencePer donor (13272, 19593)Verdict
F5 − F3 (registered primary)−0.0815[−0.1380, −0.0535]−0.0553, −0.1340loss · “field hurts”
F5 − F2 (field effect)+0.0034[−0.0007, +0.0103]+0.0000, +0.0091inconclusive
F5 − F0+0.0177[+0.0074, +0.0359]+0.0095, +0.0329win
F2 − F0+0.0143[+0.0072, +0.0269]+0.0095, +0.0238win
F5 − F4−0.0155[−0.0818, +0.0187]+0.0165, −0.0775inconclusive
C2 − F5 (channel 2 declared at t = 2)+0.0003[−0.0003, +0.0009]+0.0006, +0.0004equivalent
Per method
MethodMean at 0.8 [95% CI]
F0 channel 1 alone (TEDDY + head)0.8361[0.7645, 0.8753]
F0b channel 2 alone0.7353[0.7235, 0.7565]
F1 simple average0.8360[0.7808, 0.8656]
F2 trust-weighted average0.8504[0.7887, 0.8838]
F3 stacker (validation-trained)0.9353[0.9304, 0.9412]
F4 learned fusion0.8693[0.8601, 0.8852]
F5 TEDDY + ANM fusion0.8538[0.7974, 0.8841]

E4 key vs annotation: kappa 0.7668 (< 0.85), so the v3 primary key is reported with equal prominence: F5 − F3 −0.1125 [−0.1610, −0.0687], loss; F5 − F2 inconclusive. C3 (no contradiction events) selects exactly the cells F2 selects.

−0.0815
F5 (ANM fusion) − F3 (stacker): loss, registered outcome label “field hurts”.
+0.0034
F5 − F2, the field’s own effect over the trust-weighted average: inconclusive (equivalent at 0.9).
+0.0003
declaring channel 2 two steps later (t = 2) changes nothing: equivalent.
+0.0143
F2 − F0: fusing by a declared rule beats TEDDY + head alone on the E4 key, but not on the v3 primary key (+0.0073).
ShowsWhere ANM’s field runs with contradiction events, it does not measurably beat a declared trust-weighted average, and a validation-trained stacker beats it. Declared time order on one channel changes nothing.
Does not proveThat fusion never helps TEDDY: the declared average’s gain over channel 1 alone holds on the E4 key only (v3 primary key +0.0073, inconclusive; donor 15078 −0.0030, equivalent). F3 uses validation labels the declared rules do not. With every event at t = 0, ANM’s retention contributes only a constant gain per star size.

E4:ANM 融合输给在验证集上训练的堆叠器(注册标签 “field hurts”);相对信任加权平均(即去掉矛盾事件的 ANM),差异不确定;声明的时间顺序不改变结果。

E5
E5 · looking inside TEDDY’s layers · final

Which TEDDY layer shrinks the NK–T response?

Push one gene’s input token, follow the response through TEDDY’s 12 layers with Jacobian-vector products, and find the layer where its NK–T component shrinks most. Does it match the layer where a linear NK–T probe’s gap ratio drops most?

V3 report ↗
In plain words

The registered derivative check failed in float32 (it passes in float64), so by its own rule E5 stops: no layer is localised. TEDDY’s layers are a real processing order, but following a push through them first needs validated derivatives.

Problem

Looking inside TEDDY asks what its layers keep and lose. The v2 site proposed TEDDY’s layers as ANM’s steps; E5 is the registered test of a layer-by-layer linear response.

Compared

JVP through each layercentral finite differences (the gate)linear NK–T probe’s layer 478 cells · 7,862 cases

What we do, step by step

  1. Cells: the test cells of E3’s pairs plus 100 random NK/T cells per donor.
  2. Push: each panel or NK/T gene’s input token along its own embedding; random-direction and other-gene controls.
  3. Follow: exact first-order changes through each of TEDDY-G’s 12 post-norm layers; project on the training NK-minus-T direction at that depth.
  4. Gate: finite differences at ε = 1e-3 must agree with the JVP (relative error ≤ 0.05, cosine ≥ 0.99) in ≥ 95% of cases, else “JVP not validated” and E5 stops.
  5. Endpoint: l* = the layer with the most negative median log-gain, compared with the probe’s layer (agree within 1 layer).

scripts/mode_a_layer_dynamics.py · addendum E5.json

Registered derivative check (the gate)

scroll →

CheckCasesPass shareVerdict
float32, ε = 1e-3 (registered)2,6710.854below 0.95
float32, ε = 1e-25711.000—
float64, both ε (S5, secondary)791.000—
Computed anyway, because registered (does not change the verdict)
QuantityValue
l*, layer of the steepest median log-gain drop11 (−0.706; in 0.9775 of bootstrap draws)
probe comparator layer9 (not within 1 layer)
specificity vs random directions, D0.115[−0.007, 0.174] inconclusive
S1 · NK − T input push: largest single-layer droplayer 2, −0.217[−0.229, −0.197]
S1 · median NK–T component kept, layer 5 / layer 120.285 / 0.503

Deviations listed in the addendum: Apple-GPU float32 replaced the CPU, and explicit attention arithmetic replaced fused kernels, which have no forward-mode derivative. No amendment adopting the float64 check was committed before site4, so the registered verdict stands.

0.854 < 0.95
registered gate pass share, float32 at ε = 1e-3: “JVP not validated”, E5 stops.
1.000
the same check in float64 (79 cases), so the failure is attributed to float32 rounding.
11 vs 9
computed l* vs the probe’s layer: no agreement within 1 layer either.
layer 2
secondary S1: largest single-layer drop of an NK − T input push (−0.217); look-alikes damp it no more than random NK/T cells.
ShowsThe registered linear-response description is not validated at this scale in float32; the float64 version of the same check passes, so the registered verdict attributes the failure to float32 rounding.
Does not proveThat any TEDDY layer localises the NK–T loss, or that it does not. The float64 path was not registered before site4. Secondary findings S1–S4 are descriptive: look-alike cells do not damp the push more than random NK/T cells (S2), and the head does not pass less of it than the layer-12 state (S3).

E5:注册的有限差分检验在 float32、ε = 1e-3 下通过率 0.854 < 0.95(float64 通过),按注册规则停止;未能定位任何层;次要分析为描述性。

E5-M
E5-M · sufficiency of TEDDY’s gene-mean state · final

Is TEDDY’s gene-mean state enough for an independent observer?

At first order, does the layer-12 gene-mean (what our head reads) carry what an independent observer of the layer-12 token states uses, on NK–T look-alike cells?

V3 report ↗
In plain words

Inconclusive. For E3’s attention-pooling readout (R2), a smaller share of its first-order response flows through what gene-mean pooling discards on NK–T look-alike cells (0.085) than on matched random cells (0.127), the opposite of the hypothesis, but short of the registered loss margin. The gene-mean is not shown sufficient either: 0.085 is above the 0.05 margin. This holds for this one observer only, and its attention is nearly uniform.

Problem

Is the NK–T difference lost when TEDDY’s token states are averaged into the gene-mean our head reads? This is the one v3 test that uses ANM’s own sufficiency machinery on TEDDY. The addendum motivates the cells as those “where the head loses the NK–T difference”; that is a motivation, not a v3 result (E3’s contrast is descriptive only).

Compared (declared observers)

O_tok · E3’s frozen R2O_rand · random token observer (negative control)O_head · head on the gene-mean (positive control, residual 0) CD56 · CD94 · CD335 · CD3195 test cells

What we do, step by step

  1. Declare the candidate: the gene-mean of the layer-12 token states. The readout-visible quotient is reported only as a diagnostic, never used as the state.
  2. Push: for each of 7 declared NK/T genes present in a cell, three unit pushes of its input token (own embedding, E5’s training NK-minus-T direction, one fixed random direction); a median of 9 columns per cell (3–18).
  3. Clamp estimator: H = Λ·pinv(Γ), ANM’s own clamp estimator, computed from clamps of the candidate alone and never fitted on the tested responses.
  4. Residual per cell: r_O = ‖K_O − H·K_z‖ / ‖K_O‖, the share of an observer’s response that flows through what gene-mean pooling discards.
  5. H5M: Δ_tok = median r_tok on pair cells − on random cells ≥ 0.05 under the common win rule, and beyond the random-observer null. Falsified if equivalent or a loss; PASS_SUFFICIENT needs Δ_tok equivalent and the pair-cell level’s upper bound below 0.05.

scripts/mode_a_observer_sufficiency.py · bridge_anm/lib/v3_e5m.py · addendum E5M.json

Median clamp residual · 195 test cells · point [95% CI]

scroll →

ObserverPair cellsRandom cells
O_tok · trained token readout (R2)0.085[0.071, 0.096]0.127[0.098, 0.142]
O_rand · random token readout0.067[0.056, 0.073]0.068
O_head · head readout0.0000.000 (by construction)
Registered contrasts
StatisticPointPer donor (13272, 19593)Verdict
Δ_tok · pair − random, R2 (decides; margin 0.05)−0.043[−0.062, −0.011]−0.048, −0.029inconclusive
DD_rand · Δ_tok − Δ_rand (H5M needs a lower bound > 0)−0.041[−0.061, −0.004]−0.047, −0.021not met
level · median r_tok on pair cells (PASS_SUFFICIENT needs an upper bound < 0.05)0.085[0.071, 0.096]0.081, 0.087not met
Δ_rand · pair − random, random readout−0.001[−0.021, 0.012]−0.001, −0.008reported
Gates and ANM’s own factorization check
CheckResultRole
finite differences (Richardson, ε 0.01 and 0.02) vs JVP, each of 4 targets1.000 of 357validated
positive control: largest head-readout residual (tolerance 0.001)6.02e-07passed
analyze_factorization, R2, rtol 1e-4REJECTED in 195 of 195secondary
its source-kernel testNOT_INFORMATIVE in 195 of 195secondary
readout-visible quotient of R2 (diagnostic)rank 4 in 128 cells, 3 in 62, 2 in 4, 1 in 1; participation ratio 1.221 (pair), 1.388 (random)diagnostic

Cells: a GPU-budget subset of E5’s cells fixed in the addendum before site4 (60 pair and 40 random cells per primary donor, 200 cells); 5 contain none of the 7 genes, so 195 are analysed. The positive control holds by construction, so it checks the derivative code; the pooling decomposition is checked separately (R2’s residual response equals its direct JVP along the pooling-discarded part to within 1.04e-07). The source-kernel result is what the addendum and the ANM paper predict: K_z has full column rank in every cell, so first-order kernel inclusion is automatic and says nothing.

inconclusive
registered verdict: Δ_tok is neither a win, a loss nor equivalent.
0.085 vs 0.127
median share of R2’s response that flows through what pooling discards: look-alike pair cells vs random cells.
−0.043
Δ_tok [−0.062, −0.011]: the opposite sign to H5M; not a loss (the point does not reach −0.05), not equivalent (the interval passes −0.05).
195 / 195
cells where ANM’s factorization check rejects the gene-mean as an exact first-order state for R2 (rtol 1e-4); it says nothing about size.
ShowsWith validated derivatives (pass share 1.000 for every target) and a passing positive control, how much of one observer’s first-order response passes through what gene-mean pooling discards: 0.085 on look-alike pair cells, 0.127 on random cells. ANM’s own factorization check rejects the gene-mean as an exact first-order retained state for R2, and its source-kernel test is not informative here, as the paper predicts; the informative quantity is the clamp residual.
Does not proveThat pooling loses the look-alike difference (H5M is not supported, and the measured difference has the opposite sign). Nor that the gene-mean is sufficient, the registered PASS_SUFFICIENT reading “z_12 suffices for this observer at first order, so the NK-T loss is in our head, not in pooling” (not reached: 0.085 is above 0.05 and Δ_tok is not equivalent). One observer whose attention is nearly uniform (median 1,141.957 effective of 1,368 tokens, E3), first order only, 7 genes, 195 cells from 2 donors; pair cells are defined on the primary key, weak in donor 13272.

E5-M(预注册,判定为“不确定”):对 E3 的 R2 观察者,在一阶下,其响应流经基因均值池化所丢弃部分的中位份额在 NK–T 相似配对细胞上为 0.085,在匹配随机细胞上为 0.127,方向与假设相反(Δ_tok −0.043 [−0.062, −0.011]),未达到 −0.05 的损失边界,也不在等价区间内;配对细胞上的 0.085 高于 0.05,故也不能说基因均值状态充分。ANM 的分解检验在 rtol 1e-4 下拒绝精确分解,源核检验不提供信息(与论文预期一致)。结论只针对这一个注意力近乎均匀的观察者。

E6
E6 · external confirmation · final

Does E1 replicate on another dataset?

Hao et al. 2021 PBMC CITE-seq (GSE164378): rerun E1’s main endpoints with TEDDY, the head, the evidence normaliser, panels, bars, classifier and gate logic all frozen.

V3 report ↗
In plain words

Partly, and every E6 result carries two labels: “RNA possibly seen by TEDDY in pretraining” and “key not validated”. ANM equals the declared rule in every external donor. TEDDY’s margin ranked the rule’s calls better than the rule’s (= ANM’s) top score in all 8 donors (replicates; still inconclusive under E1’s own decision rule). The site4 advantage of a trained classifier does not replicate: on these data every method’s AURC lies between 0.983 and 0.993.

Problem

Every other v3 verdict rests on two donors at one site. Do E1’s conclusions hold on another dataset, with nothing re-tuned?

Compared

declared ruleTEDDY + ANMtrained classifierTEDDY’s margin 40,000 cells · 8 donors × 5,000

What we do, step by step

  1. Data: 3′ data, 5,000 cells per donor from 8 donors, chosen by donor id only.
  2. Panels (addendum version 2): every arm reads the full frozen registered panels, as in E1, so ANM still equals the mean rule. CD5 and CD94 are not in the external protein panel, but their evidence is the head’s prediction from RNA, so it exists; the literal reduced-panel reading is a sensitivity that never decides.
  3. Gate: thresholds re-estimated within each external donor, label-free; CD33 and CD94 are not measured externally, so their gate conditions are removed.
  4. Endpoints: E1.1a; E1.4a (primary: top score − margin, AURC); E1.C2 (primary: closure − rule, out-of-scope decline at c*); Q1 selective accuracy at matched coverage; per donor and pooled.
  5. Replication rule: a v3 conclusion replicates if its sign holds in at least 5 of 8 donors and the pooled interval excludes 0 on the same side; a site4 point of exactly 0 gives “no v3 direction”. E1’s own decision rule, with each external donor as a primary donor, is reported beside it and never replaces it.
  6. Key validity first: below kappa 0.70 the key is “not validated” and the annotation-only key decides.

scripts/v3_e6_external.py · scripts/prepare_external_cite.py · bridge_anm/lib/v3_e6.py · addendum E6.json

Registered endpoints · annotation-only key (decides) · pooled [95% CI] · donors with the v3 sign

scroll →

EndpointExternalDonors, v3 signReplication · E1 rule
E1.1a · ANM vs rule, call mismatches (Q1 / Q2 / Q3, closure)site4 (E1): 00 in every donor8 of 8replicates
E1.4a · AURC, top score (rule = ANM) − margin (primary)site4 (E1): −0.0015−0.0087[−0.0182, −0.0017]8 of 8replicatesE1 rule: inconclusive
C2 · closure − rule, out-of-scope decline at c* (primary)site4 (E1): 0.00000.0000[0.0000, 0.0000]—no v3 directionE1 rule: equivalent; in-scope guard failed (−0.0086)
Secondary rows (never decide)
EndpointExternalDonors, v3 signReplication · E1 rule
E1.4a · top score − classifier, AURCsite4 (E1): −0.09900.0010[−0.0102, 0.0091]2 of 8does not replicateinconclusive
E1.4a · top score − entropy, AURCsite4 (E1): −0.0040−0.0095[−0.0213, −0.0013]8 of 8replicatesinconclusive
Q1 accuracy, top score − margin at coverage 0.90site4 (E1): 0.0210−0.0023[−0.0046, 0.0008]3 of 8does not replicateequivalent
Q1 accuracy, top score − margin at 0.70site4 (E1): −0.0021−0.0115[−0.0234, −0.0025]8 of 8replicatesinconclusive
Q1 accuracy, top score − classifier at 0.90site4 (E1): −0.0871−0.0005[−0.0104, 0.0070]2 of 8does not replicateinconclusive
Q1 accuracy, top score − classifier at 0.70site4 (E1): −0.11490.0003[−0.0110, 0.0087]2 of 8does not replicateinconclusive
C2 · closure − rule at coverage 0.80site4 (E1): 0.05120.0095[−0.0314, 0.0407]4 of 8does not replicateequivalent
C2 · closure − rule at 0.70site4 (E1): 0.00690.0285[0.0000, 0.0484]6 of 8does not replicateequivalent
Deployed operating points · coverage / selective accuracy / out-of-scope decline (annotation-only key, descriptive)
MethodCoverageSelective acc.OUT decline
Q1 declared rule (= TEDDY + ANM)0.9930.9660.292
Q1 ANM closure readout0.9920.9590.351
Q1 trained classifier0.9980.9670.103

Key validity, computed before any method result: pooled five-class kappa 0.6562, below the registered 0.70 (per donor 0.4314 to 0.7887); the gate puts 10,686 cells out of scope against 949 annotated. AURC on the deciding key: top score (rule = ANM) 0.984, margin 0.993, entropy 0.993, classifier 0.983; the rule’s Q1 coverage c* is 0.993. On the primary key (10,097 cells unscored) the two primary rows have the same status. Reduced panels (sensitivity): ANM no longer equals the mean rule (123 Q1 calls differ), and its top score − margin is −0.0116 [−0.0178, −0.0056]. The rule calls 442 of 486 platelets myeloid, because CD62P is in the myeloid panel.

0 · 0 · 0
calls where ANM’s engine differs from the declared rule, Q1 / Q2 / Q3, in every external donor: E1.1a replicates.
−0.0087
AURC, top score (rule = ANM) − TEDDY’s margin [−0.0182, −0.0017]: the margin is ahead in 8 of 8 donors (replicates; E1 rule: inconclusive).
0.0000
closure − rule at c*: the site4 point is exactly 0, so “no v3 direction”; externally equivalent, in-scope guard failed.
0.6562 < 0.70
pooled key kappa: “key not validated”, so the annotation-only key decides.
ShowsE1’s bookkeeping result holds on another dataset: ANM equals the declared rule, with 0 mismatches and 0 rejected events in every donor. The direction “TEDDY’s margin ranks the rule’s calls at least as well as the rule’s (= ANM’s) top score” replicates (8 of 8 donors, pooled interval below 0), which supports keeping the trust-gate claim withdrawn. It does not make ANM worse than the rule: top score (ANM) − rule is 0.0000 by construction.
Does not proveReplication on data TEDDY has certainly not seen (the addendum’s contamination answer is “likely yes”), or on a validated key (kappa 0.6562; 0.4314 in donor P7). The data are easy for this pipeline (c* 0.993; every AURC 0.983–0.993), which limits what any comparison can show. E1.1b–d, E1.3, E1.5 and the Q2 and Q3 endpoints were not run externally. The annotation map’s first version was revised after the prep step had read external values (disclosed; an independent re-derivation reproduced the map, 31 of 31 labels). 8 donors; the intervals describe these donors.

E6(预注册):所有结果带两个标签——“RNA 可能已被 TEDDY 预训练见过”和“答案键未验证”(kappa 0.6562 < 0.70,故以仅注释键判定)。E1.1a 在每个外部供体上复现(0 不一致)。主要终点 E1.4a(顶分 − margin 的 AURC)为 −0.0087 [−0.0182, −0.0017],8 个供体全为负,按复现规则“复现”:TEDDY 的 margin 对调用的排序至少与规则(即 ANM)的顶分一样好;按 E1 自身判定规则仍为不确定。C2 在 c* 处为 0.0000,“无 v3 方向”(等价)。分类器排序优势未复现(外部数据过易,各方法 AURC 在 0.983–0.993 之间)。

E7
E7 · the ANM paper’s inverse loop on TEDDY · final

Is the layer-11 gene-mean enough for TEDDY’s last layer and our head?

With the downstream component fixed (TEDDY’s layer 12, gene-mean pooling, our frozen head), do histories with exactly the same layer-11 gene-mean give the same NK/T panel readout? If not, does a declared revision, chosen on development data, hold on fresh comparisons?

V3 report ↗
In plain words

No, and no revision was found. Averaging pairs of TEDDY’s layer-11 token states keeps their mean exactly, yet it changes what layer 12 and our head predict by more than the tolerance (5% of the measured NK–T gap): a median 0.125 on fresh site4 cells. Keeping the six marker genes’ token states fixed as well does not help (0.122), and nothing in the declared list passed in development. The first step of the paper’s inverse loop holds on TEDDY; the second returned no revision, so no revised representation is validated. The changes are exact state interventions, not biological variation.

Problem

The ANM paper’s v2 draft (PR #16, v37, at 8f8c7780; not yet released) tests a description of a model with an inverse loop of three steps, with the downstream component (a fixed program or model) unchanged: reject it with histories that share it but give different readouts; select a revision from a declared candidate library on development data; validate the revision on fresh comparisons. The selection rule, as in the paper, keeps the candidates whose development differences stay within the tolerance and takes the smallest. E5-M tested one declared state at first order, with no selection. E7 registered the whole sequence on TEDDY, at the layer-11 cut; it ended at step 2, which selected no revision.

Compared (declared candidate library)

1 · layer-11 gene-mean2 · gene-mean + the 6 marker genes’ token states (G)3 · all token states (uninformative) CD56 · CD94 · CD335 · CD3400 site4 cells · 400 external

What we do, step by step

  1. Fix the downstream component: layer-11 token states → TEDDY’s own layer 12 → mean over the real tokens → our frozen head. Layer 12 has no positional input, so it sees only the set of token states.
  2. Histories: mean-preserving state interventions. Disjoint pairs of non-G tokens are replaced by their average, for a share 1/32, 1/8 or 1/2 of the non-G tokens (plus a fresh 1/4 in confirmation). G twins also average each G token with a partner.
  3. Difference: the largest over the 4 proteins of |change| ÷ the measured val NK–T gap; tolerance 0.05. Per cell, D is the largest difference over the candidate’s matched pairs.
  4. Select, on val only: keep a candidate if the 95th percentile of D over 200 val cells is at most 0.05. If none is kept, one declared follow-up runs on 200 fresh val cells, with the NK–T score as readout.
  5. Confirm on fresh site4 cells (100 NK + 100 T per donor, none used by E3, E5 or E5-M), fresh pairs and a fresh size: reject if the lower end of the median’s 95% interval is above 0.05, pooled and in each donor.
  6. Controls: a positive control P (the gene-mean clamped by the training NK − T difference), a detectability witness R (the same shift through the patched tokens only), the G witness W, implementation checks on every cell and a float64 re-check.

scripts/mode_a_inverse_e7.py · bridge_anm/lib/v3_e7.py · addendum E7.json · selection record · registration page

Fresh comparisons · median per-cell difference, in units of the measured NK–T gap · point [95% CI]

scroll →

StatisticSite4Per donor (13272, 19593)Verdict
D · gene-mean (tolerance 0.05)external: 0.112 [0.097, 0.136]0.125[0.090, 0.161]0.094, 0.153rejected
D · gene-mean + Gexternal: 0.107 [0.091, 0.128]0.122[0.086, 0.153]0.092, 0.148rejected
all token statesno matched pair—uninformative
W · G witness (marker states changed, gene-mean fixed)0.013[0.009, 0.018]0.009, 0.017not detected
P · positive control (gene-mean clamped by the NK − T difference)0.261[0.222, 0.282]0.265, 0.243detected
R · detectability witness (the same shift through the patched tokens)0.260[0.217, 0.276]0.261, 0.244detected
Development on val (decides the selection) · 95th percentile of D over 200 cells
RosterGene-meanGene-mean + GSelected
primary · panel readout0.2760.256none
declared follow-up · NK–T score, fresh val cells0.2360.236none
Secondary · median D for the gene-mean by patch size
Share of non-G tokens averagedSite4External
1/320.0220.020
1/80.0460.046
1/4 (fresh size)0.0730.073
1/20.1250.111

Timeline (UTC): addendum version 2 committed 22:24:05 and pushed 22:25:53, before the first development forward pass (22:26:38). The selection records (dev 22:33:13, follow-up 22:40:18) were pushed together at 22:40:19; the site4 confirmation started at 22:40:20 by the local clock, 1 s later on a different clock. The registered statistic takes each cell’s largest difference over all sizes, so the larger patches drive the rejection. NK cells differ more than T cells (site4 0.141 vs 0.091). External per donor 0.078 to 0.158, every interval above 0.05. Implementation checks pass on every cell; the largest float64 gap is 3.3e-06.

rejected · no revision
registered verdict (REJECTED_NO_REVISION), site4 and external: no candidate selected in development; the gene-mean and gene-mean + G rejected on fresh comparisons.
0.125
median D for the gene-mean [0.090, 0.161], donors 0.094 and 0.153, against a tolerance of 0.05 of the measured NK–T gap.
0 selected
candidates passing in development (95th percentiles 0.276 and 0.256), and none in the declared follow-up (0.236 and 0.236).
0.261 vs 0.013
positive control (detected) vs G witness (not detected): the comparisons see an NK/T-sized change, but changing the marker states barely moves the readout.
ShowsWith the downstream component fixed and on fresh comparisons, histories with exactly the same layer-11 gene-mean give different readouts, so the first step of the paper’s inverse loop holds on TEDDY. The second step returned no revision: neither the declared marker-token augmentation nor the follow-up passed in development, as in the paper’s broader development screen that selected none. For this downstream component and these interventions, what layer 12 and the head use is spread over the other tokens’ states; it is not held by the gene-mean, nor by the six marker tokens.
Does not proveA validated revised representation: nothing was selected, so the validation step was not reached. Anything about biological variation: the patches are exact state interventions at the layer-11 cut, off the data manifold. Why our head loses NK vs T, or what the RNA contains. Other cuts, downstream components, readouts or a richer library. Only 2 primary donors. The external family carries “RNA possibly seen by TEDDY in pretraining” and “key not validated”; E7 picks external cells by annotated cell type and reads no external protein. Disclosed in the addendum: the design was revised twice after code tests on training cells, and once more (version 2) after a val smoke-pool check, before any development run.

E7(预注册):论文 v2 草稿逆向闭环在 TEDDY 上的类比。下游组件固定(第 12 层 + gene-mean 池化 + 冻结 head),历史是第 11 层切点上的精确保均值状态干预,容差为实测 NK–T 差距的 0.05。注册判定 REJECTED_NO_REVISION:第 11 层 gene-mean 在新的 site4 比较上被否决(中位差异 0.125 [0.090, 0.161],供体 0.094、0.153),加六个标记基因 token 状态的候选同样被否决(0.122),开发阶段及事先声明的后续都未选出候选;G 见证未检出(0.013),阳性对照(0.261)与可检测性见证(0.260)检出。差异随补丁幅度增大(1/32 时 0.022,低于容差;1/2 时 0.125),NK 大于 T。完成了逆向闭环的第一步,第二步没有得到修订,没有验证任何修订后的表示;这些是状态干预,不是生物学变异,也不解释 NK–T 损失。外部家族带两个标签(E7 按注释细胞类型选细胞,不读外部蛋白)。

✓
Claims ledger · v3

What we can claim, what we cannot, and what was not tested

Each claim names its status: registered (a registered verdict or check decides it), secondary (reported, never decides) or descriptive (a measurement with no decision rule). Most rows test decision-gain claims that earlier versions of this page made; they are not ANM’s purpose. The E5-M and E7 rows come from ANM’s own response tests on TEDDY.

V3 report ↗

Can claim

  1. In this setup ANM’s engine computes exactly the declared rule, on site4 and on the external data. A check, not a gain. registeredE1.1a: 0 mismatches (Q1, Q2, Q3, closure), both test splits; E6: 0 in every external donor, 0 rejected events; E2: 0 over all cases; E4: engine = closed form.
  2. ANM’s leave-one-out attribution equals the exact closed form. registeredE1.3a: agreement 1.0000 on 10,715 calls.
  3. Pooled, one panel protein decides more calls than the 1/3 null in each class; a property of the evidence that any rule reproduces; not by donor for B. secondaryCD11c 0.832, CD2 0.618, CD94 0.572, CD20 0.484; p = 0.0010.
  4. On site4, a logistic classifier on the same 12 evidence values orders calls better than the rule’s (= ANM’s) top score. This does not replicate on the external data. secondarySite4 AURC 0.942 vs 0.843; −0.099 [−0.163, −0.034]. E6: 0.0010 [−0.0102, 0.0091], v3 sign in 2 of 8 donors; every arm’s AURC 0.983–0.993.
  5. A classifier trained only on the old question’s labels answers the new question better than the zero-label rule. registeredE1.1c −0.078 [−0.134, −0.028], loss; annotation-only −0.054; E1.5 n* = 0. Not run externally.
  6. Operating points of TEDDY + head + Q1 rule. Unseen-donor site4 cells: coverage 0.949, selective accuracy 0.697 (annotation-only 0.730), out-of-scope decline 0.261. External PBMC data (annotation-only key; RNA possibly seen by TEDDY in pretraining): 0.993, 0.966, 0.292. descriptive
  7. TEDDY + head + rule loses decision accuracy as RNA is thinned: 0.022 at 80% kept, 0.162 at 20% (0.140 at 5%). descriptive
  8. The response to these perturbations is not linear in their size. descriptiveE2 C5: at most 0.098 of cells linear at any stage.
  9. Two trained readouts of frozen TEDDY separate NK from T worse than the registered head. registeredE3.H3b at 0.9: R1 −0.0409, R2 −0.1925; losses at 0.8 too.
  10. A validation-trained stacker fuses the two channels best, and ANM’s fusion loses to it. registeredE4: F3 0.9353 vs F5 0.8538. F2 − F0 +0.0143 (E4 key only; secondary).
  11. E5’s registered derivative check failed in float32 at ε = 1e-3; the float64 version passes. registered0.854 < 0.95; S5 1.000.
  12. On the external data, TEDDY’s margin ranks the declared rule’s calls at least as well as the rule’s (= ANM’s) top score: ahead in all 8 donors, pooled interval below 0. On site4 the same comparison was inconclusive. registeredE6 primary E1.4a: −0.0087 [−0.0182, −0.0017], replicates; E1 decision rule over the 8 donors: inconclusive. Site4: −0.002 [−0.024, 0.020]. Key not validated; RNA possibly seen by TEDDY in pretraining.
  13. For E3’s attention-pooling readout R2, at first order on 195 site4 cells, the median share of its response that flows through what gene-mean pooling discards is 0.085 on NK–T look-alike pair cells and 0.127 on matched random cells: smaller, not larger, on look-alikes. registeredA registered measurement; the verdict on H5M is inconclusive (E5-M). Δ_tok −0.043 [−0.062, −0.011]; DD_rand −0.041 [−0.061, −0.004]; random token readout 0.067 / 0.068. Derivative gate validated (1.000); positive control passed. For this observer only; its attention is nearly uniform.
  14. ANM’s own factorization check rejects the gene-mean as an exact first-order retained state for R2, and its source-kernel test is uninformative here, as the ANM paper predicts. secondaryE5-M S4, rtol 1e-4: REJECTED in 195 of 195 cells; source kernel NOT_INFORMATIVE in 195 of 195 (K_z full column rank in every cell).
  15. For a fixed downstream component (TEDDY’s layer 12 + gene-mean pooling + our frozen head) and exact mean-preserving state interventions at the layer-11 cut, the layer-11 gene-mean is rejected as a sufficient retained state on fresh site4 comparisons, and so is the gene-mean plus the six marker genes’ token states; no declared candidate was selected in development. The first step of the paper’s inverse loop on TEDDY, with no revision. registeredE7 REJECTED_NO_REVISION. Site4 median D 0.125 [0.090, 0.161] (donors 0.094, 0.153); gene-mean + G 0.122 [0.086, 0.153]; tolerance 0.05 of the measured NK–T gap. Development 95th percentiles 0.276 / 0.256, follow-up 0.236 / 0.236. G witness 0.013, not detected; positive control 0.261 and detectability witness 0.260, detected. External (secondary; labels): 0.112 [0.097, 0.136].
  16. In E7 the readout difference grows with the size of the mean-preserving patch, and it is larger in NK than in T cells. secondarySite4 median D for the gene-mean: 0.022 at 1/32 of the non-G tokens (below the tolerance), 0.046 at 1/8, 0.073 at 1/4, 0.125 at 1/2; NK 0.141 vs T 0.091 (external 0.162 vs 0.070).

Cannot claim · rejected by

  1. “ANM adds decision value as a decision layer on TEDDY.”E1 falsification: neither E1.4 nor C2 is a win; every ANM arm equals a re-coded rule. E6: the engine equals the rule in every external donor, and the margin ranks calls better than the top score in 8 of 8 donors.
  2. “ANM’s confidence is a better trust gate than TEDDY’s margin.”E1.4a −0.002 [−0.024, 0.020], inconclusive; the gate claim stays withdrawn. E6: the direction against it replicates (−0.0087 [−0.0182, −0.0017]). The site4 0.90-coverage gain is secondary, belongs to the rule’s top score, and does not replicate (−0.0023 [−0.0046, 0.0008]).
  3. “ANM’s nested (closure) readout declines out-of-scope cells better.”C2 at c*: 0.000, equivalent; in-scope guard failed (−0.056). E6: 0.0000, no v3 direction; guard failed (−0.0086).
  4. “Editing the question with zero labels beats training” / “ANM saves labels.”E1.1c/d loss (−0.078); E1.5 n* = 0. Not run externally.
  5. “Attribution flags wrong calls better than TEDDY’s margin.”E1.3c 0.004 [−0.008, 0.022], inconclusive.
  6. “The representation / head / decision split tells more than the accuracy curve.”E2 falsified; criterion (ii) loss (−0.092).
  7. “The NK–T loss is in the readout or pooling and is repairable on frozen TEDDY.”E3 falsification (A2.1): rejected.
  8. “The NK–T loss is in mean pooling” / “pooling discards NK–T information that a token readout uses on look-alike cells.”E3 pooling: −0.0375 [−0.4408, 0.22], inconclusive. E5-M: H5M not supported; for R2 the look-alike excess has the opposite sign (Δ_tok −0.043 [−0.062, −0.011]).
  9. “TEDDY’s gene-mean state is sufficient for an independent observer on look-alikes” / “pooling is not the problem; the NK–T loss is in our head.”E5-M: PASS_SUFFICIENT not reached; the pair-cell level is 0.085 [0.071, 0.096], above 0.05, and Δ_tok is not equivalent. Measured for one near-uniform observer only.
  10. “ANM’s field fuses evidence channels better.”E4: F5 − F3 −0.0815, loss; F5 − F2 inconclusive.
  11. “A specific TEDDY layer localises the NK–T loss.”E5: JVP not validated; l* = 11 vs probe layer 9.
  12. “A trained classifier orders calls better than the rule in general.”Site4 only; E6: 0.0010 [−0.0102, 0.0091], does not replicate.
  13. “E6 confirms v3 on data TEDDY never saw, with a validated key.”Contamination answer “likely yes”; key not validated (0.6562 < 0.70).
  14. “E7 validates a revised TEDDY representation” / “the reject → select → validate loop is complete on TEDDY” / “the six marker genes’ token states carry what the downstream component needs.”E7: no candidate selected in development or in the follow-up; gene-mean + G rejected on fresh comparisons (0.122 [0.086, 0.153]); G witness not detected (0.013). LOOP_COMPLETE not reached.
  15. “E7 explains or locates the NK–T loss”, says what the RNA contains, or describes biological variation between cells.E7’s patches are exact state interventions at the layer-11 cut (off-manifold), for one fixed downstream component; it never changes the input RNA and has no repair or localisation endpoint.
  16. Any population-level statement.Two site4 donors and 8 external donors; the intervals describe these donors.
  17. Any v1/v2 headline as a v3 result (the first run’s ANM accuracy edge, “0 vs 50–1,000 labels”, the confidence gate, the NK–T compression example).Superseded by E1 and E3 under the v3 key.

Not tested

  1. ANM’s field dynamics: retention over real processing steps, multi-step propagation, histories, feedback.Every event at t = 0: the field is a constant gain per class (G(3)·3·S). E4’s t = 2 control is a declared order, not a history.
  2. Sufficiency of TEDDY’s gene-mean for other observers (sharper attention, nonlinear readouts), for larger pushes, and on more cells.Partly tested: one observer, first order, 195 cells (E5-M). R2’s attention is nearly uniform (median 1,141.957 effective of 1,368 tokens). E7 tests the layer-11 gene-mean for layer 12 + our head under finite mean-preserving state interventions (rejected), not the layer-12 gene-mean for another observer.
  3. Replication on data TEDDY has certainly not seen, and external replication of E1.1b–d, E1.3, E1.5 and of E2–E5-M.Partly tested (E6): its data are labelled RNA possibly seen by TEDDY in pretraining; it ran E1.1a, E1.4a, E1.C2 and Q1 accuracy only; E7 ran on the same donors as a secondary family.
  4. Pretraining contamination of TEDDY with this dataset (GSE194122).Not verified.
  5. Effect of the head’s global ADT-median size factor (over all cells, site4 included) on its weights.Not testable without retraining.
  6. Retraining TEDDY or the head; other heads, panels or questions.Out of scope.
  7. Comparison with TypeSafe AI’s Jev.Never called; the classifier is a stand-in.
  8. Validated layer-wise linear response in TEDDY (E5’s question).E5 stopped at its gate; the float64 path was not registered before site4. E5-M’s own gate passed, but it validates E5-M’s derivatives and does not answer E5’s layer question.
  9. The validation step of the inverse loop on TEDDY (a revised representation selected and then supported on fresh comparisons), other cuts and downstream components, a richer candidate library, and on-manifold (real-cell) perturbations.E7’s declared library had no candidate that passed in development, so nothing reached validation; one cut, one downstream component, one class of state interventions.

账本(每条都有状态;多数条目检验的是早期页面的决策增益说法,不是 ANM 的目的,E5-M 与 E7 两类条目来自 ANM 本身的响应检验):能说的是 ANM 在 site4 与外部数据上都精确复现声明规则、分类器优于零标签规则、两个替代读出的 NK-T 准确率不如原头部、验证集堆叠器融合最好、在外部数据上 TEDDY 的分数差对调用的排序至少与顶分一样好(8/8 供体;site4 上不确定)、R2 观察者在相似细胞上流经池化丢弃部分的份额反而更小(E5-M,判定不确定,仅限该观察者)、下游组件固定时第 11 层 gene-mean 及加六个标记基因 token 状态的候选都被否决且未选出修订(E7)等;不能说 ANM 提升决策、信任门控、嵌套读出、节省标签、融合、层定位,也不能说“池化丢失信息”或“基因均值状态充分”,不能说 TEDDY 上的逆向闭环已完成或 E7 解释了 NK–T 损失;未检验的是 ANM 的场动力学、其他观察者、逆向闭环的验证步骤、真正未见过的数据及污染问题。

01 — The problem

TEDDY + our head give the evidence. The v2 question: is deciding from it the gap?

Read by one fixed rule, the pipeline has six gaps, one v2 experiment each; the registered v3 tests (above) retested them. In v3 ANM closed none of them beyond what a declared rule does, and a classifier trained on the old question’s labels answered a changed question better than the zero-label rule (E1).

One fixed rule answers one question, the same way, always.
New question, old stamp: the hard-wired rule keeps answering.
GAP 1

Change the question

Switch to a stricter question, or key markers only?

TEDDY + fixed ruleRe-code or re-tune on labels; until then it answers 2,279 cells B/T-priority holds back.

Experiment 1 →
No RNA, no TEDDY: a weaker stand-in, answered as if strong.
GAP 2

Missing input

RNA missing, only a weaker protein-only model?

TEDDY + fixed ruleNo RNA, no embedding, no prediction. Withdrawn.

Experiment 2 (withdrawn) →
A call arrives with no reason and no margin.
GAP 3

Explain a call

Which marker drove this call; how close was a flip?

TEDDY + fixed ruleNeither, until written down; then the same leave-one-out runs on it.

Experiment 3 →
Every call looks equally sure; where should follow-up go?
GAP 4

Know where to trust it

Which calls are safe to act on?

TEDDY + fixed ruleIts score margin is a graded confidence it doesn’t report.

Experiment 4 →
v2 framing: a trained readout charges labels again for every new question (v3 E1.5: n* = 0).
GAP 5

Price of a new question

What does B/T-priority cost a trained readout?

Trained readoutv2: 50–1,000 new labelled cells, again at every change. v3 E1.5: a classifier trained on the old question’s labels already beat the rule on the new one (n* = 0).

Experiment 5 →
Different cells, nearly the same embedding, same call, no flag.
GAP 6

Is the embedding enough?

Can it flag cells TEDDY’s embedding nearly merges?

TEDDY + fixed ruleIn the first run, some myeloid and T cells sat at cosine 0.982. Withdrawn; redesigned as v3 E3, E5 and E5-M.

v3 E3, E5, E5-M →

Not a goal: beating our head’s Pearson ≈ 0.60 or retraining TEDDY or the head; the head’s predictions enter every experiment unchanged.

02 — How we compare

One fair test, reused in every experiment

“ANM helps TEDDY” means TEDDY + ANM beats TEDDY + fixed rule on a decision property a trained head needs labels for, TEDDY and our head unchanged. After the rerun no experiment shows better calls; what remains is a declared layer (written question, checks, per-marker reasons), which a rule written down the same way also gives. v3 kept this definition and registered it; under it, no registered test found help (v3).

Same evidence, three deciders; truth only grades at the end.

Four rules

R1
Same frozen TEDDY and headNeither is retrained (best.pt is the head). Rule and ANM read the same 9 predicted proteins as typed evidence; classifiers in Experiments 1 and 5 add 32 embedding numbers.
R2
Same cells16,750 held-out cells from site4 plus an “out-of-site check” on 2,000; donor 15078 (32.6% of site4) is in training at other sites; donor 18303 was the validation set.
R3
Truth only checks answersMeasured proteins score the calls, with labelled exceptions (withdrawn Experiments 2 and 6); one train-median size factor, 0.92663, not a per-cell one.
R4
Decision metrics firstDeclining, label cost, per-marker reasons, coverage vs accuracy, false agreement. Accuracy is reported, never the win condition.

Three methods

Baseline

TEDDY + fixed rule

Predicted proteins → a score per lineage → the best if it clears the bar (the soft rule).

Treatment

TEDDY + ANM

The same predictions → ANM’s engine under a written observer → a call or “no call”, with workability and exactness checks.

Control

TEDDY + trained classifier

A classifier fitted on labelled cells (inputs vary by experiment), modelled on Jev’s interface; Jev was never called.

v3 changed these rulesTest donors in no other split (11,294 cells; donor 15078 secondary), panels and bars fixed on the validation donor, evidence divided by the head’s own training 95th percentile (no measured protein), all events at t = 0, a five-class key with an explicit validity check, and every comparison at matched coverage with registered margins and verdict rules. v3 →

help = (TEDDY + ANM) − (TEDDY + fixed rule) on the same predictions,  with TEDDY + trained classifier as the “just train harder” control

So a difference comes from the decision layer: both read the same evidence (Experiment 6 changes the evidence itself); the classifiers’ extra 32 embedding numbers can only favour them.

The observer is the question, written downYAML copy in bridge_anm/readouts/; the code runs CRITERIA in bridge_anm/lib/lineage_panels.py. The predictions don’t change.

          
Key terms: every term on this site

03 — Six experiments · v2 key (29–30 Sep)

What we tested, how, and what each one proves

One row per experiment (click to jump): 1, 3, 4, 5 are the corrected rerun; 2 and 6 are withdrawn, first-run numbers kept as a record. The registered v3 tests supersede all six where they conflict; each block below says how (v3).

Six experiments, one engine; each turns exactly one dial.
ExperimentFixed-rule gapComparedKey resultWhat v2 credited to ANM · v3
1Change the questionKeeps answering the old question3 methods × 3 questions · 16,750 cellsANM “no calls” 272 → 1,493 → 2,551, same calls as the re-coded rule; trained head flat at 43a declared question, edited with 0 labels (any written rule); not better callsv3 E1: a classifier on old labels beats the zero-label rule (loss)
2When RNA is missingNo RNA, no TEDDY (withdrawn)Fixed rule vs ANM × 3 inputs · 12,563 cells eachWithdrawn (first run: “no calls” 0 → 1,664)withdrawn: trust per level = the fixed rule, stricter barv3 E2 falsified; E4: ANM’s fusion loses to a stacker
3Why this call?No per-marker reasonLeave-one-out on every call + statistical tests16,478 cells · 30.0% flip · CD2 decides most often, 17.9% (p ≈ 0.0099)an auditable “why” per call; top marker = largest normalised valuev3 E1.3: flags errors no better than the margin
4Which calls to trust?Its own margin is not reportedANM confidence vs the rule’s margin · hard vs random cells0.938 → 0.9993 at 40% coverage (rule margin 0.9994); hard cells 0.791 vs 0.939a confidence gate, never better than the rule’s own marginv3 E1.4a: inconclusive; E6: the margin ranks better in 8 of 8 donors; gate claim withdrawn
5Cost of a new questionA new question costs labelsANM (0 labels) vs heads on 50 → 10,619 labels≈ 50 / 500 / 1,000 labels (grid / logistic / MLP)new questions free on the same evidence, like any written rulev3 E1.5: n* = 0, the classifier already wins
6Look-alike cellsCan’t flag where the embedding fails5,000 look-alike pairs · 1,490 myeloid↔Twithdrawn (first run: false agreement 0.85 → 0.40)withdrawn; redesigned in v3v3 E3: repair rejected; E5 stopped; E5-M inconclusive
1
Experiment 1

Change the question

Can the TEDDY + head predictions answer a new question without new labels or a retrain?

HARD_PROOF_OFFICIAL ↗
In plain words

A collaborator changes the question: who can follow it without new training data?

Rewrite the question; no-calls follow; the re-coded rule matches exactly.

Problem · TEDDY + fixed rule

Hard-wired to the soft rule, it answers cells a strict or B/T-priority question holds back, until re-coded or re-tuned.

Compared

TEDDY + fixed ruleTEDDY + ANMTEDDY + trained classifier 16,750 held-out cellssoft → strict → B/T-priority

What we do, step by step

  1. Take the predictions. Each cell’s 9 predicted proteins, unchanged, become typed evidence.
  2. Write the question three ways. Soft → strict → B/T-priority; no labels.
  3. Let ANM answer. All 9 markers enter at once: a call, or “no call”.
  4. Ask the others. The fixed rule keeps its soft rule or is re-coded; the classifier stays.
  5. Check the answers against the held-out proteins, which only score them.

bridge_anm/run_hard_proof.py · rules in bridge_anm/lib/lineage_panels.py

Show

Poster: change the question, keep the frozen map

First-run poster, drawn before the corrections.

Animation: soft, strict and B/T-priority questions on the same evidence

The question changes (soft → strict → B/T-priority) on the same typed evidence. First-run animation, drawn before the corrections.

272 → 1,493 → 2,551
ANM’s “no calls” follow the question, with 0 new labels.
100%
of the 16,750 cells: same call as the re-coded rule, by construction.
43 · 43 · 43
The trained classifier’s “no calls” don’t move.
2,279
cells the kept soft rule answers that B/T-priority holds back (strict: 1,221).
Showed (v2 key)Written down, a new question is answered from the unchanged TEDDY + head predictions with zero labels and no retrain; re-coded, the fixed rule makes exactly ANM’s calls.
Does not proveBetter calls: accuracy of calls made is identical, 0.943 / 0.967 / 0.955. The first run’s edge (0.960 vs 0.943) came from declining more; at matched coverage the rule scored 0.966. Donor 18303: identical too (B/T-priority 0.916, 129 declined).

Superseded by v3E1 on the five-class key and unseen donors: ANM again equals the declared rule (0 mismatches), but on the changed question Q3 a classifier trained only on Q1 labels is more accurate than the zero-label rule (−0.078 [−0.134, −0.028], loss). E1 →

改写问题即可:“不作答”随之变化(272 → 1,493 → 2,551),零标签、不重训;重写的固定规则判定完全相同;训练分类器不跟随(43)。v3 中改问题后,用旧问题标签训练的分类器优于零标签规则。

2
Experiment 2 · withdrawn · redesigned as v3 E2, E4

When RNA is missing

If RNA is missing, TEDDY can’t run. When the pipeline falls back on a weaker source, does the readout hold back or keep answering?

MISSING_MODALITY ↗
Withdrawn

Withdrawn; the numbers below are the first run’s. Redesign prototype: with thinned RNA fed to TEDDY, ANM with a declared trust per level decides exactly like the fixed rule with a stricter bar per level (bar ÷ trust).

Redesigned in v3E2 (degraded RNA through TEDDY, response decomposition): falsified. E4 (two-channel fusion where ANM’s field runs): ANM’s fusion lost to a validation-trained stacker (−0.0815, loss) and is inconclusive against the trust-weighted average. E2 · E4 →

Question

Poster: without RNA TEDDY can’t run; ANM follows the declared trust in the weaker stand-in

First-run poster; the experiment is withdrawn.

Animation: RNA only, RNA missing, both

RNA (TEDDY + head) → RNA missing (protein-only stand-in, no TEDDY) → both. Dashboard.

0 → 1,664
“no calls” with RNA missing (rule → ANM, soft), set by the 0.35 trust.
86.8%
of RNA-missing cells still called (workability 0.868); RNA 98.1%, both 100%.
12,563 / 12,563
declined under B/T-priority by construction: best case 0.126, bar 0.20.
≈ 0.68–0.70
accuracy of a head re-tuned on B/T-priority labels, even 1,000.
First-run method (withdrawn)

TEDDY reads RNA, so without RNA there is no embedding and our head predicts nothing. Three input conditions: RNA (the TEDDY + head predictions), RNA missing (a weaker protein-only model stands in) and both (averaged); who holds back on the weak stand-in?

Problem · TEDDY + fixed rule

Without RNA, our head gets no embedding, so a pipeline falls back on another model. The fixed rule is not told this evidence is weaker and keeps answering: every cell under the soft rule, 12,310 of 12,563 under the B/T-priority rule.

Compared

Fixed rule (TEDDY + fixed rule)ANM · declared trustre-tuned head RNA · RNA missing · both12,563 cells each

What we do, step by step

  1. Three input conditions for the same 12,563 cells: RNA, RNA missing (phase-2 model on protein only) and both; 4,187 more cells supply re-tuning labels.
  2. Turn each condition’s predictions into typed evidence, tagged with where it came from.
  3. Declare how far to trust each source: RNA and both 1.0, the stand-in 0.35, chosen by us, not estimated.
  4. Let everyone answer. ANM (soft, B/T-priority); the fixed rule unscaled; a head re-tuned on 50–1,000 labels.
  5. Check the answers against the held-out proteins.

export_missing_modality_events.py → run_missing_modality_demo.py

Withdrawn (redesigned as v3 E2, E4)First run: when the pipeline falls back on a weaker source, ANM’s calls follow the declared trust. The prototype shows this is the fixed rule with a stricter bar per source, not specific to ANM.
Does not proveThat ANM detects weak evidence itself (the 0.35 is declared), or anything about the TEDDY + head accuracy: with RNA missing neither TEDDY nor our head is involved. The stand-in reads the measured proteins yet stays weak (panel Pearson 0.446, vs 0.915 for TEDDY + head); accuracy barely moves (0.628 → 0.649). Official prototype: with the default export (one flow-matching sample) the protein-only panel Pearson is 0.353, with direct decoding (--phase2-decode direct) 0.945 (both, decoded directly, 0.945; RNA via phase 1 0.900; one sample · direct). These masks feed the measured protein into the encoder, so they are reconstructions, not evidence for the redesign.

(已撤回,首轮存档)缺 RNA 时只能用较弱的纯蛋白替代模型;ANM 按声明的可信度 0.35 少答(0 → 1,664),等同于更严的门槛。官方原型:单次 flow-matching 采样时纯蛋白面板 Pearson 为 0.353,直接解码为 0.945(两者直接解码为 0.945,RNA 经 phase 1 为 0.900);这些输入含实测蛋白,属于重建,不能作为重设计的证据。

3
Experiment 3 · attribution

Why this call?

Which marker carried each call, and how near was a flip?

HARD_PROOF_OFFICIAL ↗
In plain words

Drop one protein at a time; decide again.

Lift one marker at a time; see which call depends on it.

Problem · TEDDY + fixed rule

Its call is the top lineage score, no reason; written down, the rule gets the same leave-one-out; a trained head, only learned weights.

Compared

TEDDY + ANM (soft rule)all 16,478 called cells bootstrap 200×permutation 100×

What we do, step by step

  1. Decide every cell under the soft rule.
  2. Leave one out: drop each of the 9 in turn; decide again.
  3. Deciding marker: its removal moves the score most; note flips.
  4. Flip distance: the smallest change to it that switches the call.
  5. Is it real? Bootstrap and a within-lineage permutation test.

bridge_anm/run_hard_proof.py --attr-n 0 --n-boot 200 --n-perm 100

View

Poster: which marker flipped this call

First-run poster, drawn before the corrections.

Deciding marker and flip-distance figure

Deciding marker + flip distance · three-method dashboard. First-run figures, drawn before the corrections.

16,478
called cells, each with a named deciding marker.
30.0%
of calls flip without their deciding marker (first run 27.7%).
0.74
median flip distance (middle half 0.47–0.80; first run 0.75).
p ≈ 0.0099
CD2 decides most often, 17.9% vs 15.7% shuffled (CD5 17.3%, first run 23.6%); the 100-shuffle floor.
Showed (v2 key)Each call on the TEDDY + head evidence gets a checkable per-marker reason from the written rule: no surrogate model.
Does not proveAnything ANM-specific or about TEDDY’s internals: the deciding marker is the largest normalised value in the called lineage. Not SHAP, not Mode A: it explains the decision, not the representation.

Superseded by v3E1.3: ANM’s leave-one-out equals the exact closed form (agreement 1.0000 on 10,715 calls), but flip-sensitive calls are no more often wrong than as many lowest-margin calls (0.004 [−0.008, 0.022], inconclusive): attribution adds no flagging value beyond TEDDY’s margin. E1 →

每个判定都有逐蛋白理由(留一法 + 翻转距离,16,478 个细胞);CD2 最常主导(17.9%,p≈0.0099),CD5 接近(17.3%),即所判谱系中归一化值最大的蛋白,并非 ANM 特有。v3:归因与闭式解一致,但标记错误不优于 TEDDY 的分数差。

4
Experiment 4 · scope gate

Which calls to trust?

Which fixed-rule calls can we act on, and which cells are genuinely hard?

SCOPE_REFINE_OFFICIAL ↗
In plain words

Keeping only calls ANM is confident about raises accuracy; the rule’s own margin does it at least as well.

Keep confident calls: accuracy climbs, but the rule’s margin ties.

Problem · TEDDY + fixed rule

It reports a call, not how sure it is; its own score margin (top minus runner-up) could.

Compared

Fixed-rule calls × the rule’s own marginFixed-rule calls × ANM confidence random cells, same number16,750 held-out cells

What we do, step by step

  1. Score: ANM’s confidence (a score, not a probability).
  2. Cut: keep the rule’s calls only for the most confident cells.
  3. Compare: rank by the rule’s own margin at the same coverage (100% to 10%).
  4. Hard cells: calls that flip under leave-one-out (4,942) vs 40 random draws.
  5. Budget: a small head trained on hard vs random labels, tested on hard cells.

bridge_anm/run_scope_refine_proof.py --bridge-dir outputs/anm_cite_bridge_v2 --skip-adt-only

View

Poster: spend budget on trustworthy cells

First-run poster, drawn before the corrections.

0.9993 vs 0.9994
soft rule, keeping 40%: ANM vs the rule’s margin (all cells 0.938).
0.9988 vs 0.9988
B/T-priority rule, keeping 40%: the same (all cells 0.911).
0.791 vs 0.939
accuracy on the 4,942 hard cells vs random cells.
3.1× · 3.4×
NK/ILC and erythroid over-represented: 65% of hard cells, out of scope.
ShowsA graded trust signal: calls kept where ANM is confident are more accurate, and hard cells show where the 3-class question fits worst.
Does not proveA gate only ANM has, or a better one: the rule’s margin ties or beats it at every matched coverage, under both rules. Confidence reaches 1.11: not a probability. Label-budget gains are small: +0.058 at 50, +0.018 at 100.

Superseded by v3E1.4a: ranking calls by ANM’s top score (= G(3)·3 × the rule’s top score) is no better than TEDDY’s margin (AURC −0.002 [−0.024, 0.020], inconclusive), and a logistic classifier on the same evidence orders calls better (0.942 vs 0.843). On external PBMC data (E6) the margin ranked the calls better than the top score in 8 of 8 donors (−0.0087 [−0.0182, −0.0017]; still inconclusive under E1’s decision rule), and the classifier’s advantage did not replicate. The gate claim stays withdrawn. E1 → · E6 →

用 ANM 的置信分给固定规则的判定把关:保留 40% 时 0.9993 / 0.9988,任何覆盖率下都不优于固定规则自身分数差(0.9994 / 0.9988);难例准确率 0.791(随机 0.939),多为范围外细胞。

5
Experiment 5 · zero-label transfer

Cost of a new question

What does adopting B/T-priority cost: written down vs trained?

HARD_PROOF_OFFICIAL ↗
In plain words

Written down: 0 labels, as for any rule. Trained: how many?

Written rule: zero labels. Trained heads: 50 to 1,000 to match.

Problem · a trained readout

v2 framing: every new question means new labels, retraining and recalibration (v3 E1.5: a classifier trained only on the old question’s labels already beat the rule on the new one).

Compared

TEDDY + ANM · 0 labelsthreshold grid · MLP · logistic heads 50 → 10,619 labels

What we do, step by step

  1. Split: 11,725 label-pool cells, 5,025 scored cells, no overlap.
  2. Target: ANM’s B/T-priority answers, 0 labels (declines 15.3%, exactness 0.857).
  3. Train: logistic, MLP and threshold-grid heads, 50 to 10,619 labels.
  4. Calibrate: tune each cut on the pool, label-free, to decline like ANM.
  5. Match: the smallest budget reaching ANM’s decline rate and exactness.

bridge_anm/run_hard_proof.py (label-cost part)

View

Poster: new question, zero new labels

First-run poster, drawn before the corrections.

Label cost curve animation

The accuracy gap shrinks with labels, but labels never buy a written-down rule. First-run curve, drawn before the corrections.

0
labels to adopt the B/T-priority rule: write it down, like any rule.
≈ 50
for a threshold grid (exactness 0.858, declines 15.0%).
≈ 500
for a logistic head, the trained classifier (exactness 0.841, declines 14.9%).
≈ 1,000
for an MLP head (exactness 0.838, declines 15.7%); the first run’s 200 overlapped.
Showed (v2 key)On the TEDDY + head evidence a new question costs zero labels, as for any written rule; trained heads paid labels for the change tested here (v3 E1.5: on Q3 a classifier trained on the old labels needed none).
Does not proveThat labels can’t buy the numbers: with enough, a head matches or beats them (accuracy 0.963 at 10,619 labels), without an editable rule or leave-one-out reasons.

Superseded by v3E1.5 (a registered measurement): the classifier needs n* = 0 Q3 labels to reach the rule’s Q3 selective accuracy minus 0.005, because trained only on Q1 labels it already scores 0.770 against the rule’s 0.692. “Zero labels” belongs to any written rule, and training on the old labels still won. E1 →

新问题零标签(任何书面规则皆然);训练与评估不重叠后,训练分类器约需 50 / 500 / 1,000 个标签才追平,且没有可编辑规则与逐蛋白理由。v3:n* = 0,仅用旧标签训练的分类器已优于零标签规则。

6
Experiment 6 · decision loop · withdrawn · redesigned as v3 E3, E5, E5-M

Look-alike cells

When TEDDY’s embedding can’t tell two cells apart, can the pipeline flag it, and can the decision layer fix it without a retrain?

Interactive report ↗
Withdrawn

Withdrawn; the numbers below are the first run’s. Prototype: the TEDDY + head predictions separate NK from T in the right direction but compress the differences. Mode A probes: an MLP on the same embedding keeps about twice as much for CD56, CD94 and CD3, and gene-token states more than their mean. v2 read this as: part of the loss is in our head’s readout and in mean pooling, part may not be in the detected RNA; v3 E3 did not support that reading (linear · MLP / kNN · token).

Redesigned in v3E3 rejected “the NK–T loss is in the readout or pooling and is repairable on frozen TEDDY”: both trained readouts lost NK-vs-T accuracy to our head, and the head’s compression on look-alike pairs is descriptive only. E5 (layers) stopped at its derivative check; E5-M (sufficiency of the gene-mean) was inconclusive for the one observer tested. E3 · E5 · E5-M →

Pairs

0.85 → 0.40
false agreement on myeloid↔T pairs.
0.17 → 0.63
soft separation: pairs told apart.
0.74 → 0.99
accuracy of calls made.
−0.27
z⁺ (glued protein features) worsens the global must-separate rate.
First-run method (withdrawn)

Some myeloid and T cells look almost identical in TEDDY’s embedding. We find those pairs, flag that the readout built on TEDDY’s embedding can’t separate them, swap in the missing evidence, and check that the readout now tells them apart.

Problem · TEDDY + fixed rule

TEDDY’s embedding puts some myeloid and T cells at cosine ≈ 0.982. Any readout that trusts it gives both the same call, and nothing in TEDDY + fixed rule flags that the embedding is insufficient there.

Compared

TEDDY + fixed rule · soft rulemeasured protein as evidence · strict rule question only · feature swap5,000 look-alike pairs · 1,490 myeloid↔T

What we do, step by step

  1. Expect: cells with nearly the same embedding should get the same call.
  2. Veto: neighbour pairs (cosine ≥ 0.98) whose measured proteins disagree: must-separate pairs.
  3. Complement: question only, measured protein as typed evidence, or glued features (z⁺).
  4. Verify: score the same pairs again: false agreement, soft separation, accuracy.

reverse_step1_must_separate.py → reverse_loop_small.py

Headline withdrawn (redesigned in v3)The test also changes the question (soft → strict), and the answer key has no NK or out-of-scope class, so many “myeloid” cells in these pairs are NK cells. Redesign prototype: the TEDDY + head predictions do separate NK from T in the right direction but compress the differences to about a quarter to a third of the measured ones (CD335 0.88). On site4, 1053 of the 1,506 NK–T look-alike pairs involve “gdT CD158b+” cells, which look NK-like in both predicted and measured protein (an annotation problem, not a pipeline failure); on the other 453 pairs the median within-pair gap in predicted (TEDDY + head) CD56 / CD94 / CD335 / CD3 is 0.148 / 0.100 / 0.364 / 0.205 vs measured 0.621 / 0.321 / 0.413 / 0.756. Kept for the record (a v2 claim, never registered): a veto computed outside ANM flags where the readout on TEDDY’s embedding is insufficient, and ANM then reads a different typed evidence channel there, without retraining TEDDY or our head.
Does not proveA production fix: measured protein replaces the TEDDY + head predictions as the evidence in this one test; in normal use it stays the answer key. Gains are smaller on all 5,000 pairs (0.893 → 0.586). A decision loop, not a study of TEDDY’s internals.
Step through the loop ↗Veto evidence, every fix we tried, scoreboard by fix × metric.

(已撤回,首轮存档)先找出在 TEDDY 嵌入中几乎重合、读出分不开的“形似”细胞对,再补证据、在同一批对上核验;不是换特征,也不是研究 TEDDY 内部。Mode A 探针:同一嵌入上的 MLP 保留约两倍的 CD56、CD94、CD3 差异;v2 据此认为部分损失在 head 的读出与均值池化中、部分可能不在检测到的 RNA 里,v3 E3 未支持这一解读。

04 — Claim boundary

What we claim, and what we don’t

Mode B: TEDDY + our head are the evidence source, we study the decision on top, the loop is open (below); Mode A: v2 probes, then v3 E5 and E5-M (both final); v3 E3 compared readouts of TEDDY’s layer and token states. The registered list is the v3 claims ledger; this boundary agrees with it.

Claimed · the decision layer

  • The TEDDY + head predictions as typed evidence → ANM decisions
  • ANM’s engine computes exactly the declared rule (v3 E1.1a: 0 mismatches): a check, not a gain
  • Questions rewritten without retraining TEDDY or the head, as for any written rule
  • Per-marker reasons (leave-one-out) equal to the exact closed form (v3 E1.3a), as any written rule can give
  • Measured operating points, degradation curves and NK-vs-T comparisons of TEDDY + head (v3 E1–E3; external operating points in E6)

Not claimed

  • Better calls than TEDDY + fixed rule: identical by construction
  • A better or ANM-only confidence gate (v3 E1.4a inconclusive; on the external data TEDDY’s margin ranked the calls better in 8 of 8 donors, E6; a classifier ordered calls better on site4, not externally)
  • Label savings: on a changed question a classifier trained on old labels beat the zero-label rule (v3 E1.1c, E1.5)
  • Better out-of-scope declines from ANM’s closure readout (v3 C2 equivalent) or better fusion from ANM’s field (v3 E4 loss)
  • A repairable NK–T readout loss on frozen TEDDY (v3 E3 rejected), or a TEDDY layer that localises it (v3 E5 not validated)
  • That gene-mean pooling loses the NK–T look-alike difference, or that TEDDY’s gene-mean state is sufficient for it: E5-M was inconclusive, for one observer at first order
  • ANM’s dynamics (retention over real steps, histories, feedback): every event at t = 0, not yet tested
  • Any population-level statement: two site4 donors and 8 external donors
  • Pearson above phase-1 ≈ 0.60 from RNA (phase 2’s higher protein-input scores are reconstructions)
  • ATAC / chromatin · clinical superiority · anything about TypeSafe AI’s Jev itself: never called here

“Dynamics not tested” is not “no time here”: ANM’s step is an order, not necessarily a clock

ANM’s step t is any declared processing order, not necessarily physical time, as long as the order is real.

Panel order isn’t a real order; TEDDY’s layers are.
Not a real order Panel order of the nine markers

They come from one prediction, so feeding them in panel order made memory decay a hidden weight, fixed by entering all at once.

A real order TEDDY’s transformer layers
hl+1 = hl + fl(hl)⇒ δhl+1 = (I + ∂fl/∂h) δhl

The per-gene residual stream is a natural candidate retained state, to be tested against a declared readout (and, within a declared candidate set, selected), not assumed sufficient; attention couples the gene tokens.

So field dynamics on TEDDY are not yet tested, not impossible. v3 registered the first layer-wise test in Mode A (E5): its derivative check failed in float32 (float64 passes), so it stopped; E5-M tested the gene-mean as a declared candidate state at first order, inconclusive for the one observer tested; E7 ran the reject → select → validate test at the layer-11 cut and selected nothing. In the ANM–Jev multimodal tests the field gained only when arrival order carried information (+1.4 points), and a 2-step window beat it by 7 points.

Honest weak spots

  • v3: two primary donors only; a key that is weak in one of them (donor 13272, kappa 0.4177); bars from one validation donor; for E1 and E5 the registration order rests on local commit times (pushed after the evaluation).
  • ANM and the rule make the same calls once written alike; first-run gaps came from a hidden weight and declining more (rule 0.966 vs 0.960).
  • The v2 3-class key has no NK or out-of-scope class: those cells get a call 73–95% of the time and fill Experiment 4’s hard cells (the v3 key has both classes).
  • The hard-proof report lists ANM’s exactness, a decline counted as a miss (0.934 / 0.931 / 0.856 in the official rerun); this page compares accuracy of calls made.
  • Experiment 4 trades coverage for accuracy; the rule’s own margin gates at least as well as ANM’s confidence at every coverage, and label-budget gains are small.
  • Preprocessing now follows official TEDDY-G (see the embedding); the earlier non-official preprocessing gave the same phase-1 Pearson. The v2 Mode A result rests on one site and on probes, not the head’s objective; the token probes are fit within site4, some intervals overlap, and the pairs are chosen for closeness in the embedding.
  • Phase 1 (official preprocessing, train-median factor): Pearson 0.603 / 0.582, but mean R² only 0.026 / −0.018, possibly a scale mismatch; not investigated.
  • Donor 15078 (32.6% of site4) is in training at other sites; the “out-of-site check” (donor 18303) was the validation set; panel proteins were chosen by test-set Pearson.

TEDDY’s embedding (z_512): TEDDY-G’s official preprocessing (counts ÷ total × 10⁴, ÷ gene medians, top-2,048 rank tokens, no CLS), last-layer mean over gene tokens, L2-normalized; full definition in the term, scope in MODE_B_SCOPE.md.

05 — Reproduce

Every number has a script and a report

The experiment scripts retrain neither TEDDY nor our head (best.pt, the head’s checkpoint); ANM goes on PYTHONPATH. scripts/rerun_official.sh runs the chain behind this page’s numbers (TEDDY gene medians, embedding, the head trained once on it, export, Experiments 1, 3, 4, 5, Mode A layer probes; resumable) and writes to *_official folders. The embedding is scripts/03_embed_rna.py --preprocessing official, the default: 2,048 tokens, TEDDY gene medians from scripts/01b_fetch_teddy_medians.sh, gene-mean pooling; --preprocessing legacy reproduces the old 512-token embedding. The earlier rerun (fix/anm-bridge-corrections, bf76d00) wrote outputs/anm_cite_bridge_v2/ with --event-timing simultaneous --size-factor train-median; ANM_BRIDGE_SCORING=legacy with --event-timing panel-order --size-factor measured reproduces the first run. The registered v3 runners write to outputs/v3/; every v3 number on this page is in v3_numbers.json with its source file and key.

ExperimentScriptReport
Embed (official)scripts/03_embed_rna.py --preprocessing official --length-buckets --autocast fp16 --batch-size 32 (as used)z_rna_manifest.json
Phase 1 evalscripts/05_eval.py --processed data/processed/cite_official --ckpt outputs/cite_phase1_official/best.pt --size-factor train-median --out-dir outputs/cite_phase1_officialtest_per_protein.json
Phase 2scripts/06_train_bidirectional.py --processed data/processed/cite_official --out outputs/cite_phase2_official (--legacy: the legacy arm) → scripts/phase2_decode_check.pyoutputs/cite_phase2_official/decode_check.json
Export (once)bridge_anm/export_cite_events.py --processed data/processed/cite_official --ckpt outputs/cite_phase1_official/best.pt --out-dir outputs/anm_cite_bridge_officialSTAT_PROOF (first run)
1 · 3 · 5bridge_anm/run_hard_proof.py --bridge-dir outputs/anm_cite_bridge_officialHARD_PROOF_OFFICIAL · earlier: V2, first run
2 (withdrawn)export_missing_modality_events.py (--phase2-decode direct) → run_missing_modality_demo.pyOFFICIAL_FM · OFFICIAL_DIRECT · first run
4bridge_anm/run_scope_refine_proof.py --bridge-dir outputs/anm_cite_bridge_official --skip-adt-onlySCOPE_REFINE_PROOF_OFFICIAL · earlier: V2, first run
6 · Mode Ascripts/mode_a_layer_probes.py · mode_a_nonlinear_probes.py · mode_a_token_probes.pyMODE_A_LINEAR · MODE_A_NONLINEAR · MODE_A_TOKEN
6 (withdrawn)reverse_step1_must_separate.py → reverse_loop_small.pyREVERSE_LOOP_SMALL · ANM_HELPS_TEDDY_LOOP
v3 · registrationbridge_anm/v3_build_registration.py · v3_build_amendment.py, _A2, _A3 · v3_leakage_check.pyREGISTRATION_v3 ↗
v3 · E1bridge_anm/v3_e1_mode_b.pyV3_REGISTERED_RESULTS · v3_numbers.json (results in outputs/v3/, not committed)
v3 · E2scripts/e2_response_decomposition.py
v3 · E3scripts/v3_e3_nkt_repair.py
v3 · E4bridge_anm/v3_e4_fusion.py
v3 · E5 · E5-Mscripts/mode_a_layer_dynamics.py · scripts/mode_a_observer_sufficiency.py
v3 · E6scripts/prepare_external_cite.py → scripts/v3_e6_external.py
Earlierrun_bakeoff.py · run_stat_proof.py · run_cheap_probes.pyBAKEOFF · STAT_PROOF · CHEAP_PROBES
# from the teddy_mm repo root: the official chain (resumable; outputs in *_official folders) bash scripts/rerun_official.sh # its embed step as used: 2,048 tokens, TEDDY gene medians, gene-mean pooling bash scripts/01b_fetch_teddy_medians.sh .venv/bin/python scripts/03_embed_rna.py --preprocessing official --length-buckets --autocast fp16 --batch-size 32 --save-layer-means --out-dir data/processed/cite_official # Mode A beyond the layer probes: scripts/mode_a_nonlinear_probes.py · scripts/mode_a_token_probes.py # figures: scripts/make_story_infographics.py · scripts/make_anm_helps_teddy_loop_figures.py
All posters (first run, before the corrections)