flymsg

source

Held-out benchmarks

Issue #7 asks for circuits that were not used to choose the model, and for a sensitivity check that is not a retune. This note freezes that partition on 2026-10-11, before any held-out simulation. The lock is validation/benchmarks.yaml (version 1). Changing a held-out case, a check, or a sensitivity corner requires a new version. Criterion v4 stays the baseline: flymsg validate is unchanged, and N1 is not redrawn.

flymsg benchmarks prints the frozen confirmatory case. flymsg benchmarks --run scores that case and the reported case at the scored corner. It does not edit the manifest, criterion v4, or N1.

Result (2026-10-11)

The scored run fails. w_syn stayed 0.192 and th_jump stayed 0. Seeds 0–2, control seed 0. The manifest was not edited after the numbers. Both sensitivity corners fail the same two checks. Neither replaces this result.

Case Check Result
ORN_DM1 → DM1_lPN positive pass. 284.4 Hz, 3/3 seeds, median first spike 3.4 ms
ORN_DM1 → DM1_lPN specific fail. Target 284.4 Hz, control 185.6 Hz. Intervals [283.3, 286.7] and [173.3, 193.3]
ORN_DM1 → DM1_lPN stability fail. 4894 neurons still fire from 400 ms to 600 ms; the limit is 100
ORN_V → V_ilPN positive pass. 264.4 Hz, first spike 4.4 ms. Does not decide
ORN_V → V_ilPN specific fail. Control 225.6 Hz, interval [223.3, 230.0] against [260.0, 266.7]
ORN_V → V_l2PN positive pass. 116.7 Hz, first spike 9.2 ms. Does not decide
ORN_V → V_l2PN specific fail. Control 95.6 Hz, interval [90.0, 100.0] against [116.7, 116.7]
ORN_V → V PNs stability fail. 4833 neurons still fire. Does not decide

The specific check needs the class-matched control at or below 94.1 Hz for DM1_lPN. The control is other olfactory neurons, the same count, excluding the targets and their strong inputs. DM1_lPN does fire. A same-sized olfactory drive fires it too, and the activity does not die out. That is the finding.

ORN_V is the same pattern on the reported case. It does not rescue DM1, and it does not score CO2 avoidance.

These rates are the model under a 100 Hz Poisson input for 300 ms. They are not a match to an odor recording. The first-spike times are the model's medians, not a claim about the odor puffs in Kazama and Wilson.

The numbers are from one run on 2026-10-11. The scorer was not committed yet, so runs/benchmarks/manifest.json records git 51b5305 with a dirty tree. The result itself is commit b3e1859. The csv and the manifest stay in runs/, outside git. Dataset file hashes are in that manifest.

Sensitivity (2026-10-11)

flymsg benchmarks --corners ran the two frozen rows and did not rerun the scored corner. Seeds 0–2, control seed 0, same two cases. The manifest hash is unchanged.

Corner w_syn th_jump DM1_lPN Control Still firing
scored 0.192 0 284.4 Hz, pass 185.6 4894
Shiu weight 0.275 0 301.1 Hz, pass 200.0 7797
adaptation A 0.192 2 185.6 Hz, pass 105.6 2669

Specific fails in every row: the control stays above the bar (99.7 Hz at the Shiu weight, 61.2 Hz with adaptation). Stability fails in every row. Confirmatory verdict at both corners: FAIL. The scored failure survives both perturbations.

ORN_V stays reported. At the Shiu weight, V_ilPN is 287.8 Hz against 252.2 Hz and V_l2PN is 131.1 Hz against 104.4 Hz, with 7883 neurons still firing. With adaptation, V_ilPN is 165.6 Hz against 125.6 Hz and V_l2PN is 75.6 Hz against 51.1 Hz, with 2685 neurons still firing. Positive passes. Specific and stability fail. It does not decide.

The corner run started from commit 490c32b with this command still uncommitted, so its manifest records a dirty tree. The csv is runs/benchmarks/corners/report.csv.

Why activity outlasts the stimulus (exploratory, 2026-10-12)

Not a scored result and not a retune; scripts/orn_persistence.py reproduces it with flymsg.tracing. The scored corner (w_syn 0.192, th_jump 0, 100 Hz for 300 ms, seed 0) leaves 4,907 neurons firing from 400 to 600 ms. Most are Kenyon cells of the mushroom body: 495 KCg-m, 213 KCab-m, 152 KCab-c and 69 KCab-s (28–32 Hz late), with PAM dopaminergic neurons, the local neuron lLN1_bc (303 Hz), HRN_VP1d and VM5d_adPN among the rest.

Recording one neuron of each leading type shows the drive does not decay after the stimulus: the synaptic drive g of a KCg-m neuron is 13.0 mV during the stimulus and 13.5 mV from 400 to 600 ms, and 67–79% of the excitatory synapses onto the recorded Kenyon cells come from neurons that are themselves still firing. Across all 4,064 Kenyon cells, 73.4% of the excitatory synapses they receive come from other Kenyon cells. In a point neuron every one of those synapses reaches the soma, so the Kenyon cells excite each other into a loop that outlasts the input. The two APL neurons send 196,200 inhibitory synapses onto Kenyon cells, but here APL is a spiking point neuron.

Mean rate per neuron over time for the Kenyon cells, all other non-stimulus neurons and DM1_lPN (divided by 10), with the stimulus window shaded. Kenyon cells and DM1_lPN keep firing after 300 ms.

This points at a model limit, not a fitted fix. In the fly, Kenyon cell–Kenyon cell synapses are mostly axo-axonal in the lobes, and APL gives graded, non-spiking feedback inhibition that keeps Kenyon cell activity sparse (Lin et al., Nat. Neurosci. 17, 559–568, 2014, doi:10.1038/nn.3660). Neither has a parameter in this LIF. A model change would need its own pre-registered test on cases it was not chosen on.

Pulse vs sine song across neuropils (lock, 2026-10-14, #36)

The first held-out benchmark of M4 (#36): per central-brain neuropil of male flies, does the connectome predict the sign of the preference for pulse over sine song that Pacheco et al. 2021 imaged (doi:10.1038/s41593-020-00743-y; data doi:10.34770/gv6w-5351, CC BY 4.0)? validation/song.yaml v1, locked before any run and before any response value of the data was read.

flymsg song prints the lock; --run runs the model, its no-go, then the data.

Result (2026-10-15, run at 2c86f71, the lock commit, seeds 360–364): uninformative, the no-go.

results/song/v1.

Looming to giant fiber timing (lock, 2026-10-15, #34)

The first scored test of the looming transducer (gate G3 of the sensorimotor plan, #34): does the connectome's giant fiber (DNp01) peak at the right time before a looming disc's collision? Dombrovski et al. 2025 (doi:10.1038/s41586-025-09037-4) deposited the giant fiber's whole-cell potential to discs at r/v 10, 20, 40 and 80 ms (Zenodo 10.5281/zenodo.14983850, CC BY 4.0). validation/gf_looming.yaml v1 is locked before the files are downloaded, except one trace and the spreadsheet an agent had opened during the search, and the structure of the Fig. 1 file (recorded in the lock).

flymsg gf-looming prints the lock; --run runs the model, its no-go, then the data.

Result (2026-10-15, run at 0579ad8, seeds 340–344): uninformative, the no-go. Every one of the 15 cells moves both giant fibers by more than one synapse's jump, and in every one of the 300 runs at least one giant fiber fires inside the window, so no cell stays graded and none is scored; the recordings were not opened. The model's giant fiber is reached at the lowest gains already: LC4 alone at 2 Hz per rad/s (a peak rate of about 110 Hz at r/v 10 ms) or LPLC2 alone at 50 Hz per rad. Its peaks come early, a fifth to a quarter of the way through the expansion (median 18 ms after onset at r/v 10, 186 ms at r/v 80), so the unscored slopes (α 5.2 to 10.5, angles 11° to 22°) sit near the onset slope 11.43 rather than the follower band. The recordings are scored as graded potentials (Jang et al. 2023 and Dombrovski et al. 2025 report peak depolarizations); in this model one looming disc through LC4 or LPLC2 is enough to fire the giant fiber. A timing test of the transducer needs either gains low enough to keep the model's giant fiber graded, which the grid does not reach, or a readout of the drive into it; either is a new version. results/gf_looming/v1.

Version 2 (locked 2026-10-15). A model-only probe at seed 9000 found the giant fiber firing even at gains 4 to 32 times below the grid (except LC4 alone at r/v 80 ms), so lower gains do not reach the graded regime. Version 2 makes the two giant fibers passive: a threshold of 10 V (sim.Membrane, every other value the default) that no potential of the run reaches, so their potential integrates the drive as a recorded potential below threshold; a spike refuses the run. Everything else is version 1's (grid, filter, peak rule, follower band, data rule), with seeds 350–354. The compensation is named in the lock: the giant fibers' own spikes no longer reach their targets, which the readout does not use. A passive integrator follows its drive, so the stimulus-follower band is the direct path's own prediction: only a cell's distance from it is the circuit's. The rate cap and dead time compress the drive late in the expansion and can shift α; this is a named limit.

Result (2026-10-15, run at 21ce984, seeds 350–354): uninformative.

results/gf_looming/v2.

What a version 3 needs (entry protocol 3, 2026-10-16; not a lock). The onset slope above is computed analytically (gf_looming.stimulus_locked); the drive offers only the angular velocity and size forms (gf_looming.rates), so no arm feeds the model an input that follows only the onset. A version 3 needs that arm as an input next to the transducer, a measured LC4 or LPLC2 spike rate with trial variability on MaleCNS bodyIds in place of the engineered forms, and a holdout partition written before any data. The ten control flies were opened by versions 1 and 2, so they cannot be that holdout.

Inventory

Counts are bodies with that cell type in MaleCNS v1.0 (165,122 traced neurons, CC-BY 4.0). No new recording dataset is downloaded. A recording claim is about spikes or synaptic drive. A behavioral proxy is about what the fly does, and is not turned into a firing rate.

Candidate Primary source Observable Kind Role
ORN_DM1 → DM1_lPN Couto et al. 2005; Kazama & Wilson 2008 this glomerulus's ORNs recruit its PN (74 → 2) recording held-out, confirmatory
ORN_V → V PNs Suh et al. 2004; Jones et al. 2007 V ORNs recruit V_ilPN and V_l2PN (55 → 2 and 2) recording held-out, reported
v4 battery validation the six cases that chose w_syn mixed calibration
LPLC2 → DNp01 von Reyn et al. 2014; Ache et al. 2019 LPLC2 also drives the giant fiber recording exploratory
LB3a → MN9 Tastekin et al. 2025 water GRNs and proboscis extension behavior exploratory
LB3d → MN9 Tastekin et al. 2025 high salt, sign depends on concentration behavior exploratory, not scored
LC4 via DNp02, DNp11 path --alt already lists these routes other chemical routes from LC4 to TTMn graph exploratory
GF → DLMn Blagburn et al. 1999; Allen & Murphey 2007 DLM spike; the chemical path reached 4.4 Hz recording exploratory, excluded
vPR6, vMS11 validation stay silent under pIP10 model observation exploratory
pCd persistence findings log, after P1 P1/pCd activity that outlasts the stimulus literature state exploratory
MDN Bidaye et al. 2014 backward walking; MDN is 4 neurons behavioral proxy not scored
T4 / T5 Maisak et al. 2013 direction selectivity to a moving bar recording not scored
DN1pA type is present (8 neurons) circadian phase hours not scored

The v4 cases, the silencing tests T1–T4, N1 and the null families are calibration or already-reported results. They are not held-out. LPLC2 is named in the looming case's own evidence sentence. LB3a and LB3d were compared by connectivity when the sugar set was chosen, and MN9 is the calibration readout. The alternate LC4 routes were enumerated by path. GF → DLMn, vPR6, vMS11 and pCd were already inspected. MDN has no single recorded motor target in the manifest. T4/T5 needed a moving bar, and on 2026-10-11 this simulator's stimulus was a Poisson rate on a whole type (column stimuli came later, eye). DN1pA acts over hours, outside a 600 ms run.

In the lock, every row this table marks exploratory, excluded or not scored sits in partition.exploratory. DN1pA is the entry clock neurons. DNp02 and DNp11 are the entries LC4 via DNp02 and LC4 via DNp11. Those role words say why a row is outside the scored held-out case. They do not add a second partition.

No row in this inventory is promoted to a held-out behavior. The promotion would choose the test after the olfactory failure and the silence failure. A later case still needs a new version and a source that did not select the model. This note does not add that source.

The M4 v2 proposal is the prospective path for a new source. Its Baker identity audit extends anatomical coverage without opening responses or creating a new partition. Remaining scientific eligibility and publication conditions are recorded there. Neither document changes this frozen v1 manifest, promotes an exploratory row, or supplies a scored result.

Confirmatory test

One case: stimulate ORN_DM1 and score DM1_lPN. Couto, Alenius and Dickson (2005) place Or42b ORNs in DM1. Kazama and Wilson (2008) show that ORNs of a glomerulus drive that glomerulus's PN through an identified excitatory synapse. The claim is that recruitment, not an odor preference and not a published firing rate. Kazama and Wilson used odor puffs. This stimulus is 100 Hz Poisson for 300 ms, so a rate in hertz is reported and is not matched to those papers.

The case passes only when all three hold, at seeds 0–2, control seed 0, w_syn 0.192, th_jump 0. The numbers are criterion v4:

  1. positive. The best DM1_lPN fires at least 3 spikes in the 300 ms window in at least 2 of 3 seeds.
  2. specific. Its rate is at least 3 times the class-matched control plus 2 Hz.
  3. stability. At most 100 neurons still fire from 400 ms to 600 ms.

Order and dose are not endpoints. There is one confirmatory case, so the three checks are simply all required. Adding a case later is a new version.

ORN_V → V_ilPN and V_l2PN is the same kind of claim for the CO2 receptor population (Suh et al. 2004; Jones et al. 2007). Both targets are reported. The case does not decide, and it does not score CO2 avoidance.

Sensitivity

Parameter uncertainty and stimulus-seed variation are separate. The seeds above are the stimulus variation. The parameter corners are three published points, not a search:

Corner w_syn th_jump Role
default 0.192 0 the scored case
Shiu weight 0.275 0 FAFB weight, adaptation off
adaptation A 0.192 2 the weight chosen in 2026-09-22

The scored claim uses only the default. Another corner that flips a pass into a failure, or a failure into a pass, is reported. No corner replaces the default.

Edge confidence is not varied: the build uses one table, synapses at confidence ≥ 0.5. The sign shuffle is the null-family protocol, not this one. Transmitter labels stay the release's consensus_nt.

What a result may say

A pass says that, under this stimulus and these three checks, DM1_lPN is recruited by ORN_DM1 beyond a class-matched control, and the network does not run away. It does not say that the model smells, that the rate matches an odor recording, or that w_syn should move. A failure is a finding. The scored run is that failure: positive passes, and specific and stability do not. Both sensitivity corners fail the same way, and the scored failure survives them. The record is above. w_syn did not move. The v4 battery remains the baseline comparison.

References