Releases: anulum/scpn-control
Releases · anulum/scpn-control
v0.7.0
What's Changed
Added
tests/test_nengo_snn_wrapper.py— 14 mocked tests for the only untested module (389 LOC)tests/test_e2e_compile_to_control.py— 5 E2E integration tests (compile → artifact → controller → step)require_rangevalidator incore/_validators.py///doc comments on 11 public Rust functions (mpi_domain.rs,vmec_interface.rs)keywordsandcategoriesin all 5 RustCargo.tomlfiles- Paper 27 Reviewer Integration page in mkdocs nav
Fixed
- Public API typo:
TokamakTopoloy→TokamakTopology(deprecated alias retained) print()→loggingin 13 control modules (58 call sites total)- Remaining
Union[str, Path]→str | Pathin 3 files (eqdsk.py,realtime_monitor.py,artifact.py) - CLI hardcoded module/test counts → dynamic
Path.rglobcomputation - Magic number
b0=5.3→ named constantITER_B0_VACUUM_Twith citation - Stale doc counts across README, architecture, pitch, use_cases, CONTRIBUTING (53 modules, 115 files, 1969 tests, 15 CI)
- Dead
grid_index()function removed from Rustgmres.rs
Changed
- Coverage gate ratcheted:
fail_under = 62→85 from __future__ import annotationsadded tocore/__init__.pyandscpn/__init__.py- 4 duplicate validators in
halo_re_physics.pyreplaced withcore._validatorsimports - ROADMAP.md rewritten: v0.6.0 moved to Shipped, unshipped items to v0.7.0+
- 12 additional tests across 5 thin test files
Full Changelog: v0.6.0...v0.7.0
v0.6.0
What's Changed
Added
.editorconfigand.github/CODEOWNERS- Copyright headers on all 3 CI workflow files
repositoryfield in all 5 Rust Cargo.toml filestests/test_validators.py— 49 parametrized tests forcore/_validators.pytests/test_phase_properties_extended.py— 14 Hypothesis property tests (knm, upde, adaptive_knm)- Paper 27 citations on
OMEGA_N_16andbuild_knm_paper27constants
Fixed
.zenodo.jsonlicense"MIT"→"MIT OR Apache-2.0"(matches pyproject.toml)docs/api.mdversion stuck at"0.5.0"→"0.6.0"print()→logger.info()inspi_mitigation.py(3 sites)- Anti-slop: renamed unused param
proposed_action→_proposed_action, deleted 4 narration comments incli.py - Flaky timing test: absolute 5s threshold → relative warmup baseline
- Dead
DEFAULT_GAINconstant removed from Rustoptimal.rs - E402 import ordering in
spi_mitigation.py
Changed
- Typing modernization:
from __future__ import annotations+Optional[X]→X | Nonein 21 files - Shared test fixtures extracted to
conftest.py(3 controller test files deduplicated) pyproject.tomlkeywords + author email added
Full Changelog: v0.5.2...v0.6.0
v0.4.0 — Real-Time Adaptive Knm
v0.4.0 — Real-Time Adaptive Knm
First Kuramoto phase dynamics engine with online-adaptive coupling from plasma state.
Added
AdaptiveKnmEngine,DiagnosticSnapshot,AdaptiveKnmConfig- Five adaptation channels: beta scaling, MHD risk amplification, coherence PI control, per-element rate limiting, Lyapunov guard veto
K_overrideparameter onUPDESystem.step(),.run(),.run_lyapunov()RealtimeMonitor.from_plasma()constructor with adaptive engine support- Diagnostic kwargs (
beta_n,q95,disruption_risk,mirnov_rms) ontick() - 46 new tests (1888 total), all 17 CI jobs green
Fixed
- mypy type-shadow in adaptive rate-limit block
- torch-absent test skips for
load_or_train_predictorandpredict_disruption_risk_safe
Metadata
- Complete
.zenodo.json(related identifiers, communities, notes) CITATION.cffversion bump + DOI
v0.3.3 — MIT/Apache-2.0 Dual License
License change: AGPL-3.0 → MIT OR Apache-2.0
This is the first PyPI release with permissive license metadata.
Every fusion lab, SPARC team, private integrator, and startup can now
use scpn-control without copyleft restrictions.
Changed
- License switched from AGPL-3.0-or-later to MIT OR Apache-2.0 dual
- 137 files updated (LICENSE, LICENSE-MIT, LICENSE-APACHE, all source headers,
pyproject.toml, CITATION.cff, .zenodo.json, 6 Cargo.toml, README, CONTRIBUTING, docs) - Zero AGPL references remain in project files
- README quickstart:
pip install -e "."→pip install scpn-control
Install
pip install "scpn-control[neuro,dashboard,ws]"
scpn-control demo --steps 1000Full changelog: https://github.com/anulum/scpn-control/blob/main/CHANGELOG.md
v0.3.2 — VectorizedSCLayer + Perfection Sprint
What's New
sc-neurocore v3.8.0+ Integration
VectorizedSCLayer+ Rust backend path in SNN compiler (512x real-time whenpip install "scpn-control[neuro]")- Two-tier import: v3.8.0+ preferred → legacy bit-ops → numpy float fallback
- Detection test + forward-path benchmark
v0.3.0 Perfection Sprint (14 items)
- Docker: Multi-stage Dockerfile +
.devcontainer/devcontainer.json - pre-commit: ruff, mypy, check-yaml, trailing-whitespace, cargo fmt/clippy (manual stage)
- MkDocs: Theory page (SPN math, Kuramoto, UPDE, Lyapunov, H-inf), Architecture page (Mermaid diagrams, Rust/Python boundary), mkdocstrings autodoc for key classes, MathJax + Mermaid rendering
- CI: 13 → 17 jobs (pre-commit, notebook-smoke, e2e-diiid, python-benchmark, rmse-gate)
- GitHub: Issue templates (bug report, feature request), PR template
- Zenodo:
.zenodo.jsonmetadata +tools/export_zenodo_dataset.py - README: Codecov + Zenodo badges, Limitations section, sc-neurocore engine callout
- ROADMAP.md: v0.3.x → v0.4.0 → v0.5.0 → Future
- CITATION.cff: Version + date updated
- CONTRIBUTING.md: pre-commit setup, job count
CI Fixes
- Replaced
sys.path.inserthacks withpythonpath = ["src", "tests", "."]in pytest config - Fixed
requirements.txtfor Streamlit Cloud (.instead ofscpn-control>=0.2.0) - Created
validation/__init__.pyfor proper package resolution
Stats
- 17/17 CI jobs green
- 701+ tests (50 test files)
- 61% coverage (threshold: 55%)
- 48 Python source modules, 5 Rust crates
Install
pip install scpn-control
scpn-control demo --steps 1000With SNN acceleration:
pip install "scpn-control[neuro]"Full stack:
pip install "scpn-control[dashboard,ws,neuro]"
scpn-control live --port 8765 --zeta 0.5