v3.15.35
·
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-inintegrator="baseline_euler"
regression path. Replaced the decorativeaccel/go/servicesand 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: explicitm·m·m/n·n·n·n
conductance powers, and theI_KNaHill exponent3.5evaluated as
b·b·b·sqrt(b)(an IEEE-754 exact decomposition) instead of a per-platform
pow. Added a_safe_expguard so the saturating gates stay finite under an
out-of-range stimulus (Pythonmath.expwould 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/servicesand Mojo placeholders with real RK4 backends and harmonised
the cross-language arithmetic (explicitm·m·m/n·n·n·nconductance powers,
themg / 3.57 · expMg²⁺-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
EnergyLIFNeuronfrom 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
MATNeuronfrom 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
SFANeuronfrom 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
ExpIFNeuronraw 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
simulateplus PyO3py_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/servicesstub 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
simulateplus PyO3py_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/servicesstub 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 tov*v*v(from
v**3) so it is bit-identical to the engine'sv.powi(3)and removed the now
unreachableOverflowErrorbranch; 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 enginesimulateplus 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 decorativeaccel/go/servicesstub
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 tov*v*v(from
v**3) so it matches the engine'sv.powi(3)and removed the now-unreachable
OverflowErrorbranch. The right-hand side mixes the exact cubic with atanh
gating term: the Rust engine resolvestanhto the same glibc symbol as Python
and is bit-identical, while Julia/Go/Mojo use their own libmtanhand are
ULP-bounded (the 2D relaxation oscillator is non-chaotic, so it does not
amplify). Added the Rust enginesimulateplus PyO3py_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 decorativeaccel/go/servicesandaccel/mojo/kernelsstubs 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
enginesimulateplus PyO3py_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
decorativeaccel/go/servicesandaccel/mojo/kernelsstubs 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 enginesimulateplus 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 decorativeaccel/go/servicesand
accel/mojo/kernelsstubs with real backends.
Studio
- Documented the optional
sc_neurocore.federationHub-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/liveendpoint
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 strictload_state_dictthat records a
studio.training.weight-restore-attach.v1(mode: live) evidence artifact. An
incompatible or malformed attach is rejected with anattach_rejectedmetric
event and never interrupts the running job. Added the control channel
(StudioJobManager.send_control_commandwith atomic command publication +
StudioJobContext.poll_control_command/read_control_seed, reserved
.studio_controland.studio_control_seeddirectories), the epoch-boundary
poll in the training loop, an architecture-fingerprint pre-check, the route
policy, thestudio.training.weight_restore.attach_liveaudit 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/attachendpoint 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 boundedstudio-training-restoreworker
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_dictfails 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.v1evidence contract, the route policy,
thestudio.training.weight_restore.attachaudit action, the preflight
required-route entry, aweight_restore_attach_resultsevidence-bundle field
stored underevidence/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-restoreendpoint. 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-restoreworker job using aweights_only=Truetrusted
state-dictionary loader. The worker writes a path-free
studio.training.weight-restore.v1evidence 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.materializeaudit action, the preflight
required-route entry, aweight_restore_resultsevidence-bundle field stored
underevidence/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.