Context
synaptic-mesh contains src/neuromod.rs which defines a NeuromodNeuron type (NIF — Neuromodulatory Integrative Fixed-threshold) with gain control. It is used only by ChannelRouter in src/router.rs.
The top-level pub mod neuromod is misleading — it implies synaptic-mesh owns general neuron models, when its scope is topology / wiring / delay / CSR / router.
Decision
synaptic-mesh will NOT add neuromod as a dependency. The two crates are kept independent so each can evolve without coupling. NeuromodNeuron stays in synaptic-mesh but is repositioned as a router-internal integration primitive, not a general neuron model.
See LIM-48 for the full decision record.
Goal
Internalize NeuromodNeuron as a router-internal type and document the crate boundary:
- Move
NeuromodNeuron from src/neuromod.rs → into src/router.rs (or src/router/ submodule).
- Remove
pub mod neuromod and pub use neuromod::NeuromodNeuron from src/lib.rs.
- If external consumers need the type, re-export from
router (pub use router::NeuromodNeuron); otherwise pub(crate).
- Document crate boundary in
src/lib.rs module docs and README.md.
Boundary
| Crate |
Owns |
| neuromod |
Canonical neuron models — LIF, Izhikevich, Hodgkin-Huxley, GIF, FitzHugh-Nagumo, Lapicque |
| synaptic-mesh |
Topology, wiring, delay, CSR sparse maps, ChannelRouter, router-internal NIF primitive |
Non-goals
- Do NOT add
neuromod as a dependency to synaptic-mesh.
- Do not change
ChannelRouter routing logic or SynapticMesh propagation semantics.
- Do not merge
synaptic-mesh and neuromod.
- No changes to SAAQ math, heartbeat, plasticity, fatigue, or STDP.
Acceptance criteria
Related
Suggested branch
refactor/synaptic-mesh-neuromod-boundary
Context
synaptic-meshcontainssrc/neuromod.rswhich defines aNeuromodNeurontype (NIF — Neuromodulatory Integrative Fixed-threshold) with gain control. It is used only byChannelRouterinsrc/router.rs.The top-level
pub mod neuromodis misleading — it impliessynaptic-meshowns general neuron models, when its scope is topology / wiring / delay / CSR / router.Decision
synaptic-meshwill NOT addneuromodas a dependency. The two crates are kept independent so each can evolve without coupling.NeuromodNeuronstays insynaptic-meshbut is repositioned as a router-internal integration primitive, not a general neuron model.See LIM-48 for the full decision record.
Goal
Internalize
NeuromodNeuronas a router-internal type and document the crate boundary:NeuromodNeuronfromsrc/neuromod.rs→ intosrc/router.rs(orsrc/router/submodule).pub mod neuromodandpub use neuromod::NeuromodNeuronfromsrc/lib.rs.router(pub use router::NeuromodNeuron); otherwisepub(crate).src/lib.rsmodule docs andREADME.md.Boundary
ChannelRouter, router-internal NIF primitiveNon-goals
neuromodas a dependency tosynaptic-mesh.ChannelRouterrouting logic orSynapticMeshpropagation semantics.synaptic-meshandneuromod.Acceptance criteria
src/neuromod.rsis removed;NeuromodNeuronlives inside theroutermodule.pub mod neuromodis removed fromsrc/lib.rs.synaptic-meshdoes not depend onneuromodinCargo.toml.src/lib.rsmodule-level docs andREADME.md.cargo buildandcargo testpass.Related
AhlRouter→ChannelRouter+ neuromodulatory adaptation)layered_mesh_feed_forwardtest (blocks CI in #10) #9 — was a duplicate of this issue; repurposed to fix the failinglayered_mesh_feed_forwardtestSuggested branch
refactor/synaptic-mesh-neuromod-boundary