Skip to content

Releases: gianlucamazza/flymsg

v0.8.48

Choose a tag to compare

@gianlucamazza gianlucamazza released this 15 Oct 22:42
v0.8.48
aafbc60

Result

  • Simple baselines v1 (#148, SF2): every positive response of the battery is specific. Against 199 degree-preserving shuffles, no shuffle reaches the measured rate in any of the seven positive responses (p = 0.005, Holm 0.04), and the shuffles' 95th percentile is 0 Hz everywhere. The bitter negative stays silent in both, as named in the lock. The measured wiring also recruits several times more neurons. results/baselines/v1.executions/f89ed1c3…/output/.

  • Pulse vs sine song v1 (#36): uninformative, the no-go.

    • The no-go. At 100 Hz only 14 of 32 neuropils resolve a sign over the seeds (0.44, below 0.5), so the run stopped before the Pacheco et al. 2021 data were opened.
    • The model. It barely tells the songs apart: the median |index| is 0.046, and the resolved neuropils split 7 and 7. This is consistent with the no-go's stated reason (LIF neurons without a band-pass may smooth the 27.8 Hz envelope), which the run does not test.
    • The run. 1,045 simulations, including 99 shuffles. results/song/v1.
    • Archive guard. results/ now allows 450 kB for its per-cell table.
  • Exact float32 on the console GPU, and a dashboard (#40, #203).

    • The divergence. A 20,000-step full-connectome run differed from the CPU oracle in g alone, in 4,329 subnormal conductances that the console flushed to zero, even with -denorm preserve.
    • The fix. The shader now does every float32 operation on state through double and rounds once, which is correct since 53 ≥ 2·24 + 2. It handles subnormals as bits. 600,000 random operations, subnormals included, match numpy float32 bit for bit offline.
    • Qualification. The run is bit for bit at about 2,320 steps/s, and parity, cancel, suspension and resume pass.
    • The dashboard. The worker shows a TV dashboard: job state, progress, steps per second, ETA, memory, recent jobs, and the last job's spikes per bin. The gamepad's B cancels through the cancel file.
  • Full connectome on the Series S (#40, #202): the MaleCNS default model (165,122 neurons,
    24.5 million synapses) runs on the console bit for bit with the CPU oracle
    (docs/evidence/series-s-full-connectome-2026-10-15.json, scripts/console_bench.py).

    • Event-driven delivery raises its throughput from 28 to about 1,630 steps/s. Inputs move to
      a default heap, spiking neurons set delivery bits, and targets sum their set bits in the
      pull loop's order.
    • The 2,048-neuron fixture rises from about 44,000 to about 70,000 steps/s.
    • Parity holds on the 12 version-1 fixtures, and cancel, suspension and resume pass.
    • native_acceptance.check now compares only the traced neurons, not the runtime's
      placeholder column.
  • APL claw contrast v1 (#85): uninformative, the no-go.

    • APL intact. The KCs' mean potential sits below rest for both odors (−0.69 and −0.97
      mV), with 30–37% of KCs spiking, so the claws have no positive depolarization to contrast.
    • APL output removed. Every KC spikes, and the contrast is clipped to about zero.
    • Outside the verdict. The relations hold in 5/5 seeds. They mean little, because
      c_on contrasts two potentials below rest
      (results/apl-claws/v1.executions/b914035a…/output/).
  • Series S worker lifecycle (#40): on a 2,048-neuron synthetic version-1 fixture of
    1,000,000 steps, the worker's lifecycle behaves on the console
    (docs/evidence/series-s-lifecycle-2026-10-15.json, scripts/console_lifecycle.py):

    • it advances about 44,000 steps/s, timed by the worker, at about 133 MB of app memory;
    • a cancel ends the job in cancelled;
    • a Device Portal stop suspends the app with a checkpoint, and after a restart and a resume
      the job completes bit for bit with the CPU oracle.

    Two worker races were found and fixed on the way:

    • a Device Portal read of status.json made the atomic status replacement fail, so the
      worker now retries for up to a second and writes progress at most four times a second;
    • a control file still uploading was parsed empty, so it is now read on a later pass.

    result.json now records the advance's wall time and steps.

  • Series S GPU parity (#39, #40): on a Series S in Dev Mode the DX12 lane matches the CPU
    oracle bit for bit on all 12 version-1 acceptance fixtures (adapter SraKmd_arden,
    docs/evidence/series-s-gpu-parity-2026-10-15.json, scripts/console_gpu_parity.py). The
    worker had refused to launch (0x80070002): it is now a minimal XAML application whose
    declared Flymsg.App ships Flymsg.winmd. Version-2 fixtures on the GPU, the console
    lifecycle, memory and throughput remain.

  • T4/T5 v4 (#140): robust neither. The dark anchor settles, and a 16-fold lamina → medulla
    gain at an LMC rate of 200 Hz brings the graded medulla to about ±10 mV, the order of the
    measured swings, but where T4 fires in thousands it lacks the preferred polarity and
    direction (indices −0.15 to 0.18) and T5 is neither
    in all 12 configurations (results/t4t5/v4.executions/7a550844…/output/).

  • Looming → giant fiber timing v1 (#34, G3): uninformative, the no-go. In all 15 gain cells
    and 300 runs the model's giant fiber fires, so no cell stays graded like the recordings and
    none is scored; the recordings were not opened. One disc through LC4 or LPLC2 at the lowest
    gains fires it, early in the expansion (results/gf_looming/v1).

  • Looming → giant fiber timing v2 (#34, G3): uninformative.

    • Model. With passive giant fibers, all 15 cells respond, stay graded and are scored. α
      is 1.39 to 2.13; ten cells lie inside the stimulus-follower band (1.73 to 2.01), so the
      passive giant fiber peaks as its drive does.
    • Data. The ten control flies give a median α of 3.32. Three flies sit at the onset slope,
      so the flies' interval (2.95 to 12.58) holds the onset slope 11.43, and the timing cannot
      separate the circuit from a stimulus-locked peak.
    • Outside the verdict. The model's α lies below the flies' interval in every cell
      (results/gf_looming/v2).

Validation

  • APL claw contrast lock (#85): validation/apl_claws.yaml v1, flymsg apl-claws [--run],
    evidence record apl_claw_odor_contrast.

    • Design. Arms on (default) and off (every APL synapse removed), driven by the KC
      sparseness locks' DoOR odors, seeds 420–424. Per seed, the OCT/MCH contrast of the KCs'
      mean depolarization in each arm against the ALPNs' spike contrast in arm on; scored on the
      seed medians: pass if blocking APL raises the claw contrast and brings it nearer the
      boutons', partial if it only raises it, fail if it does not raise it, uninformative if
      the PNs carry no positive contrast.
    • Status. Scored, locked before any run. No run yet.
  • Simple baselines lock (#148, SF2): validation/baselines.yaml v1, flymsg baselines [--run].

    • Design. The battery's eight responses run on the measured connectome and on 199
      degree-preserving shuffles (seeds 4000–4198), seeds 0–4. Per response, an empirical p in
      the locked tail, Holm-corrected, decides whether the response needs the measured
      partners.
    • Status. A report, not a score. No run yet.
    • Fix. The timestep convergence entry of 0.8.47 and docs/validation.md counted ten
      battery responses; the battery has eight.
  • Looming → giant fiber timing v2 lock (#34, G3): validation/gf_looming.yaml v2. Version
    1's model fired the giant fiber in every cell, and a model-only probe found it firing at gains
    4 to 32 times lower; v2 makes the two giant fibers passive (threshold out of reach) so their
    potential integrates the drive as a graded recording. Everything else is v1's; seeds 350–354.
    No run.

  • Pulse vs sine song lock (#36, first held-out benchmark of M4): validation/song.yaml v1,
    flymsg song [--run].

    • Johnston's organ JO-A, JO-B and JO-D get the same number of kicks in a pulse train
      (16/20 ms, Pacheco et al. 2021), a sine and an aperiodic train. Per neuropil, the
      synapse-weighted activity gives a pulse/sine preference sign.
    • Scored against the paper's per-fly response magnitudes in 16 male flies, with balanced
      accuracy against permuted signs and 99 degree-preserving shuffles. A model-only no-go runs
      before the data are read.
    • Secondary weighting by Yamakoshi et al. 2025's JO-A/JO-B ratio, reported only.
    • Four evidence records. Locked before any response value was read. No run.
  • Looming → giant fiber timing lock (#34, G3): validation/gf_looming.yaml v1,
    flymsg gf-looming [--run].

    • LC4 driven by the disc's angular velocity and LPLC2 by its size (engineered forms, gains
      scanned on a 4 × 4 grid). The model's DNp01 peak time before collision is fitted as
      α · r/v − δ, against the same fit of Dombrovski et al. 2025's giant-fiber recordings
      (Zenodo, CC BY 4.0) at r/v 10–80 ms.
    • Timing only, never amplitude; only cells where both model giant fibers stay graded are
      scored, and a fly interval overlapping the slopes of stimulus followers makes the run uninformative. A
      model-only no-go runs first. Two evidence records. Locked before the files are downloaded,
      except what an agent had opened during the search (recorded). No run.

Engineering

  • Batch jobs and the console as a backend (#40).
    • Batch format. Several runs of one network travel as one base fixture and exact per-run patches (native.export_batch), so the network is uploaded once.
    • Worker. It runs them in order, keeps each run's output and resumes after the last completed one.
    • Library. flymsg.console turns sim.run calls into such a batch on the Series S, and the decoded results are sim.run's, bit for bit.
    • Baselines. flymsg baselines --backend console runs each graph's battery that way, and --backend hybrid adds the console to the CPU workers on one queue (parallel.imap_shared). sensitivity.measure accepts ...
Read more

v0.8.47

Choose a tag to compare

@gianlucamazza gianlucamazza released this 14 Oct 13:37
v0.8.47
4432b66

Result

  • Timestep convergence v1: converged (SF2, #148). All ten battery responses converge at the
    default 0.1 ms against 0.025 ms: same holds verdicts, seed-median rates within the finest
    seed range (giant fiber → TTMn exactly at it). First-spike latencies and recruitment of weak
    pathways move with the step (TTMn under giant fiber output 35 → 82 ms, sugar-recruited
    neurons 439 → 155) and do not decide. Run from the lock commit 7c4d34d in one attempt.

Also in this release

  • Validation: T4/T5 v4 locked (dark-anchored medulla, lamina → medulla gain scan, Behnia et al. 2014's delays; run in progress); timestep convergence lock.
  • Engineering: faster per-neuron membranes, bit-identical.
  • Viewer: graded potentials in the 3D replay and the eye-on scene; an optional, experimental WebXR observer (?xr=1, unqualified on any headset).
  • Docs: replication package (SF5) with the claims audit; the sensorimotor environment plan; provenance and docs aligned.

Full note: https://github.com/gianlucamazza/flymsg/blob/v0.8.47/CHANGELOG.md

v0.8.46

Choose a tag to compare

@gianlucamazza gianlucamazza released this 14 Oct 08:25
v0.8.46
12b2dda

Result

  • Kenyon cell sparseness v8: within, only with the variant set; v7 replicates (#85, #95,
    #155). Under the exact continuous clamp (Taylor action) with seeds 95–97, 8 of 10
    lLN2T+lLN1_bc arms are within (2.0–2.3% / 1.4–1.7% of Kenyon cells); the two E arms out miss
    the 64.6% overlap bound at 65–66%, where v7 lost one. lLN2T alone is not within (16–23% of
    Kenyon cells, 80–96% shared). Every arm is within 19 cells of its v7 count and coupling moves
    none by more than 21. Run from the lock commit ad7b71e in one attempt (35 min).

  • T4/T5 v3: robust: neither (#140, #84). With Mi1, Tm3, Mi4, Mi9 and C3 graded over the in
    vivo voltages of Groschner et al. 2022, no T4 neuron spikes in any of 25 configurations. The
    edge reaches the medulla at ≤1.4 mV (at most about 5% of the measured swings), with the
    measured sign only in Tm3, C3 and Mi9; tonic lamina release holds Mi1 below its release
    threshold from an LMC rate of 100 Hz. Run from the lock commit 406f622 in one attempt. The
    archive guard rises to 250 kB for its 202 kB of required tables.

  • Kenyon cell sparseness v7: within, only with the variant set (#95, #85). With
    lLN2T+lLN1_bc (43 neurons) as eLNs, 9 of 10 arms are sparse and distinct: 2.0–2.2% /
    1.5–1.7% of Kenyon cells, 43–65% shared (one arm misses by 0.5 points of overlap). With
    lLN2T alone, the set Eckstein et al. 2024 liken to the eLNs, Kenyon cells stay dense
    (16–23% / 14–19%, 79–96% shared). Coupled arms match their uncoupled bases within 17
    cells: removing the chemical cholinergic contacts onto PNs separates the sets, not the
    electrical coupling. Run from the lock commit 45c0641; the unread v6 step store was lost
    with its worktree.

  • Synapse weight rule v1: undecided (#139). On Liu et al. 2022's 57 PN → LHN pairs of
    six matched LHN types, density (count over mesh area) ranks the measured amplitudes
    barely better than count (Spearman 0.581 against 0.567; Δρ interval −0.011 to +0.054);
    count stays the rule. MaleCNS counts rank the female amplitudes at ρ 0.81 on the 13 nonzero
    pairs.

Also in this release

  • Engine: Taylor solver for the continuous refractory clamp (Gap(solver="taylor"), flymsg.gap/continuous-clamp-taylor-v1), exact to rounding without a dense map per mask; ADR accepted.
  • Validation: evidence records for sourced parameters (validation/evidence.yaml, SF1); lock parser subset 2 (quote-aware comments, quoted list items, no duplicate keys); locks for KC v6–v8, T4/T5 v3 and the synapse weight rule.
  • Body: neuron-level MANC matches recorded, not used.
  • Viewer: a committed baseline of the live scenes with scripts/bench_check.py.
  • Docs: a drift audit of every page; the runtime ADR is accepted.

Full note: https://github.com/gianlucamazza/flymsg/blob/v0.8.46/CHANGELOG.md

v0.8.45

Choose a tag to compare

@gianlucamazza gianlucamazza released this 13 Oct 13:41
v0.8.45
6d4fa46

Result

  • T4/T5 through the eye v2: robust: neither (#84, #97). With graded photoreceptors and
    L1–L3 over 17 configurations of the measured voltage ranges, no T4 or T5 neuron spikes.
    Contrast crosses the lamina (L1–L3 hyperpolarize by 14–33 mV under light) and stops in the
    medulla: Mi1, Tm3 and Mi4 never fire, the OFF inputs only at LMC release rates of
    200–400 Hz. Run from the lock commit 17173c2, resumed once from saved configurations.

  • Kenyon cell sparseness v5: none (#95, #85). With the measured asymmetric eLN ↔ PN
    coupling, sister PNs at 0.013 and eLN spikes crossing as 40 mV spikelets of 0–2 ms, every
    coupled arm stays silent (0.22–0.30% of Kenyon cells, floor 1%), as without coupling, and
    the spikelet duration does not change it. At the measured coefficients the coupling is not
    the missing excitation. Run from the lock commit 00aff9c, resumed once from saved arms.

  • Kenyon cell sparseness v4: none (#95, #85). With the cholinergic local neuron → PN
    contacts as electrical synapses (coupling 0–1, sister PNs at Kazama & Wilson's 0.013), no
    arm is sparse: Kenyon cells stay at ≤ 0.3% and fall silent as coupling grows. Coupling
    that passes only subthreshold potentials drains active PNs. The fly's lateral excitation
    rides on eLN spikes (spikelets). This run carried none: its lock set no spike term, and a
    LIF reset draws no waveform.

Also in this release

  • Engine: per-neuron membranes (sim.Membrane), a postsynaptic weight scale (post_scale, density rule), spikelets and asymmetric junctions, graded neurons, native fixture v2, continuous refractory clamps and immutable runs. All optional; the default model is unchanged.
  • Body: MANC's muscle cited for 406 of 708 MaleCNS motor neurons (flymsg muscles); closed loop cutting input at takeoff.
  • Viewer: phones and tablets; a scene caption and a legend that names each group's contents.
  • Docs: docs/approximations.md and docs/leads.md.
  • Engineering: the command line is a package (flymsg.cli).

Full note: https://github.com/gianlucamazza/flymsg/blob/v0.8.45/CHANGELOG.md

v0.8.44

Choose a tag to compare

@gianlucamazza gianlucamazza released this 13 Oct 02:59
v0.8.44
52e06c2

Result

  • NeuroMechFly jump v1: short (#90, #94). LC4 on both sides drives TTMn_R before
    TTMn_L; the body takes off at 28–32 ms but at 0.05 m/s, a range of 0.3–0.5 mm against
    Zumstein et al.'s 28.6–37.75 mm. One leg, one twitch and no TLM are not a jump.

Body

  • TTM actuator and a NeuroMechFly jump (#90, #94): flymsg.ttm (measured twitch: 101 µN,
    8.2 ms, 0.85 ms delay) and flymsg.jump3d (FlyGym v2.1.0, now a dependency: TTM torque on
    the mesothoracic coxa-trochanter hinges, posture held, 0.1 ms steps). Lock
    validation/jump3d.yaml: LC4 on both sides → TTMn spikes → jump range against Zumstein et
    al.'s wingless 28.6–37.75 mm; flymsg jump3d.

Full note: https://github.com/gianlucamazza/flymsg/blob/v0.8.44/CHANGELOG.md

v0.8.43

Choose a tag to compare

@gianlucamazza gianlucamazza released this 13 Oct 02:35
v0.8.43
b26a037

Result

  • T4/T5 v1: neither (#84). Photoreceptors fire through the measured eye, but L1–L3 and
    everything downstream stay silent: inhibitory photoreceptor synapses cannot move silent
    spiking lamina neurons, where the fly's are graded with a resting tone. The concrete case
    for graded neurons (#97).

  • Kenyon cell sparseness v3: none (#95, #96). With Hige et al. 2015's odors as DoOR
    vectors the model is either dense (default 36% / 30% of Kenyon cells, 82–99% shared, against
    30–33% measured) or silent (0.2% without the chemical local neuron → PN contacts). The
    sparse regime needs the measured electrical coupling the model lacks (#85).

Pre-registration

  • T4/T5 direction selectivity v1 (#84): moving ON/OFF edges in four directions through
    the measured eye (eye.edge_coverage), 30°/s, acceptance 8.23°; decides polarity and
    preferred direction against Maisak et al. 2013, prior from Lappalainen et al. 2024 stated.
    Locked before its run; flymsg t4t5.

  • Kenyon cell sparseness diagnostic v3 (#95, #96): Hige et al. 2015's odors (3-octanol,
    4-methylcyclohexanol) as DoOR receptor vectors, the same four arms, seeds 80–82, and a
    lower bound (1%) next to the upper ones; the shared share is reported against the 30% and
    33% measured for these odors. Locked before its run.

Odors

  • flymsg odor (#96): DoOR consensus responses (fetched at run time, CC BY-SA 4.0, not
    redistributed) as one response per MaleCNS ORN type, and per-neuron Poisson input
    (odors.kicks). 3-octanol drives 31 ORN types, 4-methylcyclohexanol 22.

Full note: https://github.com/gianlucamazza/flymsg/blob/v0.8.43/CHANGELOG.md

v0.8.42

Choose a tag to compare

@gianlucamazza gianlucamazza released this 13 Oct 01:37
v0.8.42
0510027

Result

  • Partner follow-up v1 (#76): the left mirror replicates (DNp02 p 0.001, DNp06 p 0.003),
    and the direct drive gives single_sufficient: DNp06_R: at 200 Hz DNp06_R alone brings
    TTMn_R to the jump bit (3–6 spikes), DNp02_R alone does not (0), the pair gives 8–11
    against a matched null mean of 0.013 (p 0.001). Conjunction rejected; figure
    partner-followup.svg; outputs with every null draw in results/partner-followup/v1/.
  • Kenyon cell sparseness v2: within E, F, by undershoot (#95). Without the cholinergic
    local neuron → PN chemical contacts (electrical in the fly) one ORN type drives 4.5% of the
    PNs instead of 73%, and the Kenyon cells fall to 0.2% (measured 6 ± 5%): the overlap was an
    antennal-lobe artefact, and single-receptor stimuli no longer reach the Kenyon cells. The
    lock had no lower bound; stated. Next: odors as receptor vectors (#96).
  • Kenyon cell sparseness v1: not_recurrence (#95). KC → KC without fast effect lowers
    the responding Kenyon cells from 25% to 17.4% (bound 17%), but the two odors still share
    95%; APL removal recruits all. The overlap is upstream of the Kenyon cells.
  • KC → MBON11 depression v1: inconsistent (#85). The measured rule silences MBON11 for
    both odors (272–286 → 0 spikes, seeds 50–52): each odor recruits about 1,000 Kenyon cells
    and the two share 95%, against 30–33% in the fly. The model's Kenyon cell code is not
    sparse, the same limit as the held-out ORN_DM1 failure. Nothing is retuned.

Documentation

  • Realism plan in docs/roadmap.md: five steps (eye, Kenyon cell sparseness, odors as
    receptor vectors, body and TTM actuator, non-spiking neurons), each with its evidence and an
    independent test; tracked in #84, #95, #96, #90, #94, #97.
  • docs/roadmap.md (on the site as Roadmap): what of the brain the model uses and leaves
    out, in numbers from scripts/brain_coverage.py (signs, the FlyWire cross-check of the
    unsigned neurons, somata, photoreceptor columns), and every open item with what blocks it
    and what would unblock it. New issues #84 (eye encoder) and #85 (electrical synapses and
    neuromodulation, evidence audit).

Eye

  • Graded photoreceptor input: eye.photoreceptor_kicks (gain × light left per column, in
    units of the Poisson kick). sim.run already accepted real-valued kicks; it is now
    documented and tested (integer values as floats reproduce the Poisson run spike for spike).
    CpuRuntime and the native executor still take integer counts only.
  • Looming per column: eye.looming_radius_deg (constant-speed approach, von Reyn et al. 2014) and eye.disk_coverage (share of each column's Gaussian acceptance profile covered
    by a dark disk, exact in the small-angle limit). The acceptance angle is an argument for
    the lock to source, not a default.
  • flymsg eye (#84): every MaleCNS optic-lobe column gets a measured viewing direction
    from the Zhao et al. 2025 eye map (fetched at run time, GPL-3.0, not redistributed) through
    the published hex convention; nothing is fitted. 843 of 892 right and 835 of 875 left
    columns have one. Photoreceptors are assigned to columns by their strongest output; the
    dorsal-rim R7d/R8d land at a median elevation of 67.7° against 3.7° for the other R7/R8.
    New dependency rdata (MIT) to read the R files.

3D view

  • Whole-CNS layer: every soma in the volume (140,024 of 165,122 neurons) drawn as a point
    coloured by region around the scene's neurons, from somaLocation in the MaleCNS
    annotations (scripts/build_somata.py, docs/live/cns/). Context only; ?somata=0 hides
    it. Sensory neurons, whose somata are in the periphery, are counted, not drawn.

Tooling

  • GitHub templates: a pre-registered experiment issue form (question, sources,
    protocol and verdicts, what was seen before the lock, compensations), a bug form, and a PR
    checklist with the project's rules. Labels preregistration, result, architecture,
    embodiment.
  • scripts/bench_viewer.py (#24): builds the site, opens each scene with ?bench= in a
    fresh browser profile and appends the summary, the GL backend and the load average to
    runs/viewer-bench/. It refuses to start above a 1-minute load of 1.0, so a baseline is
    taken only on an idle machine, and a timed-out page no longer leaves its browser running.

Live scenes

  • Every scene re-exported from main (8f2a076): the manifests of the scenes made before
    the rule pointed at branch commits that squash merges dropped; now all record a commit on
    main. Activity is unchanged byte for byte.
  • Left eye and both eyes on the site: looming-left (LC4_L), looming-bilateral
    (LC4) and the right-vs-left comparison, exported from main. Seed 0: TTMn_R 22
    spikes with the right eye, TTMn_L 12 with the left, 24 and 12 with both. docs/viz.md
    states the side convention. build_live_scenes.py NAME ... rebuilds only those scenes.

Pre-registration

  • Kenyon cell sparseness diagnostic v2 (#95): after v1, an antennal-lobe arm. Cholinergic
    local neuron → PN contacts are electrical in the fly (Yaksi & Wilson 2010) and fast chemical
    in the model; v2 removes them (arm E), alone and with KC → KC (arm F), on fresh seeds 70–72,
    same measured bounds. Locked before its run.
  • Kenyon cell sparseness diagnostic v1 (#95): four weight matrices (default; KC → KC
    without fast effect, since these synapses act through the metabotropic mAChR-B, Manoim et
    al. 2022; APL → KC removed; both) compared on the share of Kenyon cells responding to an
    odor (measured 6 ± 5%, ≤ 17%) and the share shared between two odors (≤ 64.6%). Locked
    before any run; flymsg kc-sparseness.
  • Dopamine-gated depression at KC → MBON11, v1 (#85): the one plasticity measured on an
    identified synapse (Hige et al. 2015: −90% charge, forward pairing only, ≥ 40 min) as an
    optional rule applied between trials to the weight matrix; the kernel and the defaults are
    unchanged. Seven compensations named; the test asks whether the paired odor's MBON11
    response drops ≥ 49.8% and the unpaired ≤ 64.6%. flymsg mb-plasticity.
  • Residual partner follow-up v1 (#76): two model-side tests of the scan v3 naming,
    locked before any run on fresh seeds 40–42. Left: the scan arm mirrored (LC4_L →
    TTMn_L), testing only DNp02 and DNp06 with the scan's null. Drive: DNp02_R, DNp06_R
    and the pair driven directly at 200 Hz without LC4, against matched descending-neuron
    pairs, with the verdicts single_sufficient, conjunction, pair_sufficient,
    not_specific and insufficient. Every null draw is kept. flymsg partner-followup.

Exploratory

  • Mirrored scan arms (scripts/silence_mirror.py, seeds 0–2, disclosed in the lock):
    the left side follows the right (DNp02 or DNp06 with DNp01 silenced: 0 TTMn_L spikes),
    the effect follows the pair on the side of the stimulus, and the left residual is weak
    (2, 1, 3 spikes).

Full note: https://github.com/gianlucamazza/flymsg/blob/v0.8.42/CHANGELOG.md

v0.8.41

Choose a tag to compare

@gianlucamazza gianlucamazza released this 12 Oct 21:15
v0.8.41
0fde4ed

Result

  • Residual partner scan v3 replicates v2 (#20): names_partner: DNp02, DNp06 again, on
    fresh confirm seeds 30–32 (0 TTMn_R spikes on every seed, p 0.001 each against 0.025).
    The run started from 1bbf60e on main and took 2 h 23 min. The descriptive output shows
    the other pass still firing (DNp06 45–50 spikes with DNp02 silenced, DNp02 58–59 with DNp06
    silenced) while TTMn_R stays at 0: in this model TTMn_R needs both. Figure
    silence-scan-v3.svg; outputs in results/silence-scan/v3/. Model-side;
    gf_required_for_the_jump_bit stays unverified.

Pre-registration

  • Residual partner scan v3, a replication of v2 (#20). Every rule of v2 unchanged,
    confirm seeds 30–32 (the runner refuses the spent 10–12 and 20–22), a failure rule fixed
    before the run, and one descriptive output: the other screen pass's spikes in each confirm
    arm. Committed before the run.
  • Runs start from main. A run a doc cites starts from a merged commit in a clean
    worktree, since squash merges drop branch commits (architecture).

Reproducibility

  • results/ holds the small outputs the docs cite (123 KB), copied from runs/ with
    their manifests by scripts/archive_results.py, which drops local paths and refuses to
    overwrite a differing directory. scripts/build_figures.py now reads from it, so a clone
    can redraw every figure; only the Kenyon cell figure still needs the MaleCNS tables.
    Its CSV files were caught by the *.csv ignore rule when #74 merged; they are now
    tracked, and a test fails if git ignores any archived file.
  • looming-jump.svg replaces the hand-made looming-jump.png: the same TTMn_R raster of
    the behavior v1 run, now drawn by the script from results/behavior/replay.npz.

Full note: https://github.com/gianlucamazza/flymsg/blob/v0.8.41/CHANGELOG.md

v0.8.40

Choose a tag to compare

@gianlucamazza gianlucamazza released this 12 Oct 18:01
v0.8.40
515df99

Figures and live scenes

  • Every result of 2026-10-12 has a figure. scripts/build_figures.py draws SVG from the
    run outputs with flymsg.figures (standard library only, deterministic): the scan v2
    screen and confirmation (silence-scan-v2.svg), M1/M2 embodiment (embodiment.svg), the
    Kenyon cell persistence of the held-out ORN_DM1 case (kc-persistence.svg, one
    exploratory rerun of the scored corner) and the homology pilot (homology-pilot.svg).
    Nothing is recomputed into a result.
  • Sensitivity figure redrawn with y ticks, the v4 floor (10 Hz) and a legend that no
    longer covers a curve.
  • Two new comparisons on the site: DNp01 silenced against DNp01 + DNp02 and against
    DNp01 + DNp06 (seed 0 replays of the scan arms). TTMn_R goes from 7 spikes to 0; DNp06
    and DNp02 still fire when the other is silenced, so in the model TTMn_R needs both.
  • viz --keep NAMES exports chosen neurons even when silent (group kept), so a
    comparison shows them at zero instead of "not exported". All scenes were re-exported.

Full note: https://github.com/gianlucamazza/flymsg/blob/v0.8.40/CHANGELOG.md

v0.8.39

Choose a tag to compare

@gianlucamazza gianlucamazza released this 12 Oct 17:29
v0.8.39
ffac718

Results

  • Sensitivity grid v1 (#28; a report, not a score). Over w_syn × 0.8–1.2 and th_jump
    0/2, looming, giant fiber, P1 and pIP10 hold in every cell but one corner, and bitter →
    MN9 stays at a median of 0 Hz. Sugar → MN9 holds only from the default w_syn up
    (th_jump 0) or from × 1.1 (th_jump 2): its v4 pass sits at the edge. Persistent activity
    appears only at the grid's edges. Nothing is chosen from it; sim.Params is unchanged.
    Report in docs/validation.md, figure docs/img/sensitivity-rate.svg.

Fixes

  • The holds table of flymsg sensitivity --run printed 1.0/0.0 instead of yes/no; the
    v1 report.txt reads that way, holds.csv is unaffected.

Full note: https://github.com/gianlucamazza/flymsg/blob/v0.8.39/CHANGELOG.md