Substrate Package Requirements
This document defines the expected package shape for substrate implementations.
Required package components
Section titled “Required package components”Every concrete substrate package must provide:
- A launch function with signature:
def launch(domain: SubstrateDomain) -> Substrate- One concrete runtime type compatible with
Substratecontracts. - One or more synthesizers capable of producing the modulators required by that runtime.
- A
Neuromodulatorsboundary that fans out modulation requests to synthesizers and stores produced artifacts. - A package-level orchestration path that lets
RASrequest modulators throughNeuromodulatorsand inject the resulting cocktail into the runtime.
Required behavioral rules
Section titled “Required behavioral rules”- Build identity once and propagate it through the runtime and cocktail unchanged.
- Keep launcher and adapter free of substrate-specific modulation logic.
- Keep launch wrapper thin and deterministic.
- Let
Neuromodulatorsfan out requests and let synthesizers self-select what they can satisfy.
Recommended layer order for a CliSensoryCortex-style runtime
Section titled “Recommended layer order for a CliSensoryCortex-style runtime”- BaseLamina
- AgenticLamina
- CortexLamina
- SensoryMotorCortexLamina
- SensoryCortexLamina
These laminae define inheritance structure. They do not imply a generic synthesizer chain.
Runtime compatibility requirements
Section titled “Runtime compatibility requirements”Runtime object returned by launch must:
- expose definition_id and instance_id
- provide handle() returning SubstrateHandle
- support health(), readiness(), and shutdown()
Modulator terminology and behavior
Section titled “Modulator terminology and behavior”When a layer injects cross-cutting behavior (for example agent/context/gain signals), use the term Modulator for that dependency.
Normative guidance:
- Prefer Modulator over Artifact for injected behavioral dependencies.
- Treat Modulators as additive behavior, not substrate identity.
- Keep Modulator production and injection explicit in synthesizer and layer contracts.
- Cover Modulator effects with tests at layer boundaries.
Orchestration flow
Section titled “Orchestration flow”flowchart TD
L[launch(domain)] --> R[RAS]
R --> M[Neuromodulators]
M --> Q[Fanout ModulatorRequest]
Q --> N1[Cortex synthesizer]
Q --> N2[Comms synthesizer]
Q --> N3[Other synthesizer]
N1 --> M
N2 --> M
N3 --> M
M --> C[ModulatorCocktail]
C --> S[Substrate Runtime]
Adapter boundary requirements
Section titled “Adapter boundary requirements”Adapters may:
- import modules
- resolve symbols
- invoke callables
Adapters must not:
- mutate or reinterpret lamina or modulation semantics
- compose runtime layers directly