Releases: anulum/scpn-phase-orchestrator
Releases · anulum/scpn-phase-orchestrator
v0.4.1 — Rust Stuart-Landau + PAC Parity, Amplitude Policy
Added
- Rust
StuartLandauStepper— phase-amplitude ODE integrator with Euler/RK4/RK45, zero-alloc scratch, 12 inline tests - Rust PAC —
modulation_indexandpac_matrix(Tort et al. 2010), 5 inline tests - FFI
PyStuartLandauStepper— PyO3 wrapper; Python auto-delegates whenspo_kernelavailable - FFI
pac_modulation_index/pac_matrix_compute— PAC functions exposed to Python - PAC-driven policy rules:
pac_max,mean_amplitude,subcritical_fraction,amplitude_spread,mean_amplitude_layer - Amplitude configs for 6 domainpacks: neuroscience_eeg, cardiac_rhythm, plasma_control, firefly_swarm, rotating_machinery, power_grid
CoherencePlotmatplotlib implementations: R timeline, regime timeline, action audit, amplitude timeline, PAC heatmap- 4 Rust benchmarks, ~67 new Python tests (940 total), 74 Rust tests
See CHANGELOG.md for full details.
v0.4.0 — Stuart-Landau Amplitude Engine, PAC Gating, Envelopes
Added
- Stuart-Landau amplitude engine —
StuartLandauEngineintegrates coupled phase-amplitude ODEs (Acebrón et al. 2005):dr_i/dt = (μ - r²)r + ε Σ K^r_ij r_j cos(θ_j - θ_i). Euler/RK4/RK45, pre-allocated scratch, amplitude clamping, weighted order parameter. - Phase-amplitude coupling (PAC) —
modulation_index()(Tort et al. 2010),pac_matrix(),pac_gate() - Modulation envelopes —
extract_envelope()(sliding-window RMS),envelope_modulation_depth(),EnvelopeState AmplitudeSpecin binding types;amplitude:YAML block activates Stuart-Landau modeCouplingState.knm_r,CouplingBuilder.build_with_amplitude(),ImprintModel.modulate_mu()LayerState.mean_amplitude,LayerState.amplitude_spread,UPDEState.mean_amplitude,UPDEState.pac_max,UPDEState.subcritical_fraction- CLI branches on amplitude mode, audit logger records
amplitude_mode - ~80 new tests (total ~860)
See CHANGELOG.md for full details.
v0.3.0 — Petri Net FSM, SNN Bridge, Event-Driven Transitions
Added
- Petri net regime FSM —
PetriNet,PetriNetAdapter,ProtocolNetSpecfor multi-phase protocol sequencing - Event-driven transitions —
EventBus+RegimeEventpub/sub with bounded history RegimeManager.force_transition()— bypasses cooldown and hysteresis holdhysteresis_hold_steps— consecutive-step requirement for soft downward transitions- SNN controller bridge (
SNNControllerBridge) — pure-numpy LIF rate model + Nengo/Lava optional backends - Rust
RegimeManager.force_transition()andtransition_logfor FFI parity - ~90 new tests across 5 new test files
Changed
SupervisorPolicyaccepts optionalpetri_adapterargumentBoundaryObserver.observe()accepts optionalstepkwargRegimeManagerconstructor acceptsevent_busandhysteresis_hold_stepsparams
See CHANGELOG.md for full details.
v0.2.0 — Compound Policy DSL, OTel Export, QueueWaves
Added
- Compound policy DSL —
CompoundConditionwith AND/OR logic over multiplePolicyConditiontriggers - Action chains —
PolicyRule.actionsaccepts a list ofPolicyActionitems fired on a single trigger - Rule rate-limiting — per-rule
cooldown_sandmax_firesfields stability_proxymetric in policy conditions (global mean R)- OpenTelemetry export —
OTelExporterwith span instrumentation, gauge metrics, step counter; no-op fallback - QueueWaves — real-time microservice cascade failure detector with Prometheus ingestion, WebSocket streaming, dashboard, webhook alerts (60 tests, >90% coverage)
- 12 new domainpacks (total: 21)
- 3 adapter bridges: FusionCoreBridge, PlasmaControlBridge, QuantumControlBridge
- Deterministic replay from audit.jsonl with chained phase-vector verification (
spo replay --verify)
Fixed
- [P0] Rust
ImprintModel.modulate_lagantisymmetry fix - [P0] CLI
runnow applies K and Psi supervisor actions - [P0]
stability_proxyuses mean R across all layers - [P1]
compute_plvraises on mismatched arrays - All domainpack binding specs use semver
See CHANGELOG.md for full details.
v0.1.1 — Hardening Sprints 1–5
What's Changed
16 commits of hardening since v0.1.0, across 5 focused sprints:
Changed
- Migrate remaining
try/except ImportErrorprobe-imports toimportlib.util.find_specwith lazy imports - Remove dead
_HAS_RUSTassignments and unused imports - Add
#[must_use]to all pure public Rust functions; enablemust_use_candidate = "warn"workspace lint - Add crate-level
//!doc comments to all 4 library crates - Refactor physical.rs Pass 1 from index loop to
iter_mut().zip()iterators - Make
LockSignature,LayerState,UPDEStatefrozen dataclasses
Fixed
- Kuramoto coupling correctness in Rust UPDE stepper
- Regime hysteresis banding (Rust + Python)
- FFI safety:
forbid(undocumented_unsafe_blocks) - CI: MSRV check, security job pins, module-linkage guard
- clippy:
eq_op,needless_range_loop, doc lints
Improved
- CI: pip + cargo caching,
rustsec/audit-checkaction, path-triggered docs workflow - Supply chain: Dependabot, publish.yml preflight gate + twine check
- Coverage: 94% → 98%, fail_under raised to 90%
- Tests: 188 Python + 124 Rust (312 total)
- Add
DocumentationandChangelogURLs to PyPI sidebar
Full Changelog: v0.1.0...v0.1.1
v0.1.0 — Initial Release
SCPN Phase Orchestrator v0.1.0
Domain-agnostic coherence control compiler built on Kuramoto/UPDE phase dynamics.
Highlights
- UPDE Kuramoto integrator — Euler + RK4 with pre-allocated scratch arrays
- 3-channel oscillator model — Physical / Informational / Symbolic extraction
- Coupling matrix management — exponential decay, template switching, geometry constraints
- Supervisor — regime FSM (Nominal/Degraded/Critical/Recovery) with policy DSL
- spo-kernel — Rust workspace (5 crates, 112 tests, PyO3 FFI bindings)
- 4 domainpacks — minimal_domain, queuewaves, geometry_walk, bio_stub
- MkDocs documentation — 20 pages (concepts, specs, tutorials)
- CI — lint, typecheck, test (3.10-3.12), security, Rust check
Install
pip install scpn-phase-orchestrator
spo --help