Skip to content

v3.15.35

Choose a tag to compare

@github-actions github-actions released this 26 Jun 13:50
· 1177 commits to main since this release

[3.15.35] - 2026-06-26

Physics and mathematics hardening

  • Promoted HillTononiNeuron (Hill & Tononi 2005 thalamocortical sleep/wake
    cell) from a hard-coded forward-Euler step to candidate-first RK4 over the
    six-state (V, h_na, n_k, m_h, h_t, na_i) system — fast Na⁺, delayed-rectifier
    K⁺, Ih, T-type Ca²⁺, a sodium-dependent K⁺ current, and a saturating Na/K
    pump — with input validation and the opt-in integrator="baseline_euler"
    regression path. Replaced the decorative accel/go/services and Mojo
    placeholders (and corrected a wrong Go spike threshold) with real RK4 backends
    and harmonised the cross-language arithmetic so Python, Rust, Julia, Go, and
    Mojo reproduce the trajectory bit-for-bit: explicit m·m·m/n·n·n·n
    conductance powers, and the I_KNa Hill exponent 3.5 evaluated as
    b·b·b·sqrt(b) (an IEEE-754 exact decomposition) instead of a per-platform
    pow. Added a _safe_exp guard so the saturating gates stay finite under an
    out-of-range stimulus (Python math.exp would otherwise raise where the other
    backends return +inf), native Go RK4 parity/behaviour tests, a Go benchmark
    hook, a Rust benchmark example, Python RK4/fail-closed coverage, and a
    five-backend local non-isolated benchmark that fails closed unless every
    backend reports an identical spike count (694 at 200k steps / 10 nA).
  • Promoted DurstewitzDopamineNeuron (Durstewitz, Seamans & Sejnowski 2000
    D1-modulated PFC cell) from a hard-coded forward-Euler step — which advanced
    the gates from the old voltage and then the voltage from the freshly updated
    gates, mixing two inconsistent states — to candidate-first RK4 over the
    three-state (V, h_na, n_k) system, with input validation and the opt-in
    integrator="baseline_euler" regression path. Replaced the decorative
    accel/go/services and Mojo placeholders with real RK4 backends and harmonised
    the cross-language arithmetic (explicit m·m·m/n·n·n·n conductance powers,
    the mg / 3.57 · exp Mg²⁺-block operand order, math.exp) so Python, Rust,
    Julia, Go, and Mojo reproduce the trajectory bit-for-bit. Added native Go RK4
    parity/behaviour tests, a Go benchmark hook, a Rust benchmark example, the
    Python RK4/fail-closed test coverage, and a five-backend local non-isolated
    benchmark that fails closed unless every backend reports an identical spike
    count (925 at 200k steps / 10 nA).
  • Completed the UpperMotorNeuron (Pospischil 2008 corticospinal L5 pyramidal)
    polyglot backend coverage by adding the Mojo exponential-Euler kernel, raising
    it to a Python / Rust / Julia / Go / Mojo set. The membrane keeps its analytic
    frozen-conductance exponential-Euler step and the gates keep their closed-form
    steady/tau update — both unconditionally stable for the stiff sodium gate, so
    RK4 here would be a regression rather than a hardening. Added a Go benchmark
    hook, a Rust exponential-Euler benchmark example, and a five-backend local
    non-isolated benchmark that fails closed unless every backend reports an
    identical spike count.
  • Promoted EnergyLIFNeuron from raw Euler membrane and metabolic-reserve
    updates to the exact constant-current flow for the coupled (v, epsilon)
    state across Python, Go, Julia, Mojo, and Rust safety surfaces. Added
    module-specific Python/Go/Rust exact-flow and invalid-state coverage,
    refreshed the public model documentation with measured five-backend timing
    rows, and added a local non-isolated benchmark gate for exact spike-count
    parity.
  • Promoted MATNeuron from a split forward-Euler membrane update plus separate
    threshold decay to candidate-first RK4 over (v, theta1, theta2) across the
    Python reference, Go service, Julia mirror, Mojo helper, and Rust safety
    surface. Replaced the Go/Rust/Mojo placeholders with numeric parity surfaces,
    added Go/Rust tests and Python RK4/fail-closed coverage, refreshed the model
    documentation with measured five-backend timings, and added a local
    non-isolated benchmark gate for exact spike-count parity.
  • Promoted SFANeuron from forward-Euler voltage plus separate adaptation
    decay to candidate-first RK4 over the coupled (v, g_sfa) adaptation ODE
    across Python, Go, Julia, Mojo, and Rust safety surfaces. Added native Go/Rust
    RK4 tests, refreshed Python module tests, a five-backend local non-isolated
    benchmark artifact, a regression-gate row, and updated model documentation.
  • Replaced ExpIFNeuron raw Euler mutation with candidate-first RK4 across the
    maintained Python reference, Rust engine, Go service, Julia mirror, and Mojo
    mirror. The Fourcaud-Trocmé EIF ODE and hard reset are unchanged; all surfaces
    now reject non-finite RK4 derivatives/candidates before mutation. Added focused
    Python/Rust/Go RK4 tests, a Go benchmark hook, a local non-isolated Python RK4
    regression artifact, and refreshed the public model documentation.
  • Added the polyglot N-step simulate(n_steps, current, backend=...) chain for
    McKeanNeuron (McKean 1970 piecewise-linear FitzHugh-Nagumo caricature) across
    python / rust / julia / go / mojo. The piecewise-linear RK4 right-hand side is
    exact arithmetic, so Rust, Julia and Go reproduce the NumPy reference
    bit-for-bit; the Mojo backend is ULP-bounded and non-amplifying (a
    two-dimensional autonomous flow cannot be chaotic). Added the Rust engine
    simulate plus PyO3 py_mckean_simulate, the Julia/Go/Mojo backends,
    cross-backend parity tests, a multi-language benchmark with a committed results
    artefact, and a model-documentation upgrade; replaced the decorative
    accel/go/services stub with a real c-shared backend.
  • Added the polyglot N-step simulate(n_steps, current, backend=...) chain for
    WilsonHRNeuron (Wilson 1999 polynomial cortical model) across
    python / rust / julia / go / mojo. The polynomial RK4 right-hand side with a
    hard voltage reset is exact arithmetic, so Rust, Julia and Go reproduce the
    NumPy reference bit-for-bit; the Mojo backend is ULP-bounded and non-amplifying
    (the per-spike reset re-anchors the 2D autonomous flow). Added the Rust engine
    simulate plus PyO3 py_wilson_hr_simulate, the Julia/Go/Mojo backends,
    cross-backend parity tests, a multi-language benchmark with a committed results
    artefact, and a model-documentation upgrade; replaced the decorative
    accel/go/services stub with a real c-shared backend.
  • Added the polyglot N-step simulate(n_steps, current, backend=...) chain for
    PernarowskiNeuron (Pernarowski 1994 pancreatic beta-cell burster) across
    python / rust / julia / go / mojo. Aligned the Python cubic to v*v*v (from
    v**3) so it is bit-identical to the engine's v.powi(3) and removed the now
    unreachable OverflowError branch; Rust, Julia and Go then reproduce the NumPy
    RK4 reference bit-for-bit, and the Mojo backend is ULP-bounded and
    non-amplifying. Added the Rust engine simulate plus PyO3
    py_pernarowski_simulate, the Julia/Go/Mojo backends, cross-backend parity
    tests, a multi-language benchmark with a committed results artefact, and a
    model-documentation upgrade; replaced the decorative accel/go/services stub
    with a real c-shared backend.
  • Added the polyglot N-step simulate(n_steps, current, backend=...) chain for
    TermanWangOscillator (Terman-Wang 1995 LEGION relaxation oscillator) across
    python / rust / julia / go / mojo. Aligned the Python cubic to v*v*v (from
    v**3) so it matches the engine's v.powi(3) and removed the now-unreachable
    OverflowError branch. The right-hand side mixes the exact cubic with a tanh
    gating term: the Rust engine resolves tanh to the same glibc symbol as Python
    and is bit-identical, while Julia/Go/Mojo use their own libm tanh and are
    ULP-bounded (the 2D relaxation oscillator is non-chaotic, so it does not
    amplify). Added the Rust engine simulate plus PyO3 py_terman_wang_simulate,
    the Julia/Go/Mojo backends, cross-backend parity tests, a multi-language
    benchmark with a committed results artefact, and a model-documentation upgrade;
    replaced the decorative accel/go/services and accel/mojo/kernels stubs with
    real backends.
  • Added the polyglot N-step simulate(n_steps, current, backend=...) chain for
    MihalasNieburNeuron (Mihalas-Niebur 2009 generalised integrate-and-fire model)
    across python / rust / julia / go / mojo. The four-state (v, theta, i1, i2)
    right-hand side is purely linear — no transcendental functions — advanced by
    candidate-first RK4 with a discontinuous spike reset, so the Rust engine, Julia
    and Go backends reproduce the NumPy reference bit-for-bit (trace, spike count
    and final state); the Mojo backend fuses multiply-add and is validated as
    non-amplifying within a ULP band with identical spike counts. Added the Rust
    engine simulate plus PyO3 py_mihalas_niebur_simulate, the Julia/Go/Mojo
    backends, cross-backend parity tests, a multi-language benchmark with a
    committed results artefact, and a model-documentation upgrade; replaced the
    decorative accel/go/services and accel/mojo/kernels stubs with real
    backends.
  • Added the polyglot N-step simulate(n_steps, current, backend=...) chain for
    GLIFNeuron (Allen Institute GLIF5 generalised leaky integrate-and-fire model)
    across python / rust / julia / go / mojo. The four-state
    (v, theta, i_asc1, i_asc2) right-hand side is purely linear — no
    transcendental functions — advanced by candidate-first RK4 with an additive
    threshold spike reset, so the Rust engine, Julia and Go backends reproduce the
    NumPy reference bit-for-bit (trace, spike count and final state); the Mojo
    backend fuses multiply-add and is validated as non-amplifying within a ULP band
    with identical spike counts. Added the Rust engine simulate plus PyO3
    py_glif_simulate, the Julia/Go/Mojo backends, cross-backend parity tests, a
    multi-language benchmark with a committed results artefact, and a
    model-documentation upgrade; replaced the decorative accel/go/services and
    accel/mojo/kernels stubs with real backends.

Studio

  • Documented the optional sc_neurocore.federation Hub-facing Studio federation
    surface with a dedicated API page and navigation entry, covering schema-A
    manifest emission, evidence bundles, and verifiable-honesty envelopes.
  • Added the admin POST /api/studio/training/weight-restore/attach/live endpoint
    and the confined control channel that backs it. The endpoint delivers the
    verified weights of a completed source job to a running target training job;
    the worker polls a reserved control directory at each epoch boundary and applies
    the attach with a strict load_state_dict that records a
    studio.training.weight-restore-attach.v1 (mode: live) evidence artifact. An
    incompatible or malformed attach is rejected with an attach_rejected metric
    event and never interrupts the running job. Added the control channel
    (StudioJobManager.send_control_command with atomic command publication +
    StudioJobContext.poll_control_command/read_control_seed, reserved
    .studio_control and .studio_control_seed directories), the epoch-boundary
    poll in the training loop, an architecture-fingerprint pre-check, the route
    policy, the studio.training.weight_restore.attach_live audit action, the
    preflight required-route entry, a Training Monitor live-attach action with a
    path-free request strip, frontend client types, and full backend and frontend
    tests plus documentation.
  • Added the admin POST /api/studio/training/weight-restore/attach endpoint and
    the confined seed-input channel that backs it. The endpoint rebuilds the
    canonical restore plan from a completed training job's checkpoint, delivers the
    integrity-checked weight artifacts to a bounded studio-training-restore worker
    as confined seed inputs, and warm-starts a training job that loads the verified
    weights at the epoch-zero checkpoint boundary before training forward. A strict
    load_state_dict fails closed on an architecture mismatch before training
    begins. Added an architecture fingerprint that gates compatibility on the
    shape-determining config fields only, the
    studio.training.weight-restore-attach.v1 evidence contract, the route policy,
    the studio.training.weight_restore.attach audit action, the preflight
    required-route entry, a weight_restore_attach_results evidence-bundle field
    stored under evidence/training-weight-restore-attaches/, a Training Monitor
    warm-start action with a path-free evidence strip, frontend client types, and
    full backend and frontend tests plus documentation.
  • Added the admin POST /api/studio/training/weight-restore endpoint. It
    rebuilds the canonical restore plan from a completed training job's stored
    checkpoint metadata, fetches the integrity-checked weight and metadata
    artifacts, and materializes the weights inside a bounded
    studio-training-restore worker job using a weights_only=True trusted
    state-dictionary loader. The worker writes a path-free
    studio.training.weight-restore.v1 evidence artifact holding only verified
    digests, parameter count, and loaded-key total; the deserialized tensors never
    reach the API response. Added the route policy, the
    studio.training.weight_restore.materialize audit action, the preflight
    required-route entry, a weight_restore_results evidence-bundle field stored
    under evidence/training-weight-restores/, a Training Monitor materialize
    action with a path-free evidence strip, frontend client types, and full
    backend and frontend tests plus documentation.