You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The one current plan. Every other planning-shaped thing (backlog.md, prose roadmaps) either feeds this or is retired against it.
Why this exists
The developer's brief, in their words: "The repository has grown so massive that I lost track. I cannot run experiments freely, I am forgetting commands and capabilities, it is hard to investigate, analyze and compare stuff." And: "If I want to swap out EKF for UKF that should be an easy and fast transaction."
Two facts from the assessment (2026-08-15, read-only) shape everything below:
The Lab is the last step, not the first. The RCWS Lab works because a record layer, an experiment registry and a small set of verbs already existed under it — so it could be 1,300 lines of stdlib holding no logic of its own. BESS has none of those layers. Built today, a Lab would have nothing to show and would have to compute what the layers below do not provide, which is the failure that killed RCWS's first Lab (Test coverage inverts the risk: 6 of 8 test files cover v5b markets; plant, EKF, EMS, MPC and ledger share one smoke test #9 there).
Half the components already plug in; the other half are hardcoded.Strategy (core/simulator/strategy.py) is a real seam — planner, MPC and bidding tier are Protocols, and v5b was added with zero core edits and a bit-identity test to prove it. Estimator, plant, activation signal and ledger are constructed by hand inside the loop. The estimator swap the developer named touches 6–10 files today.
The one test
A change in A must not require a change in B. When a change forces an edit somewhere it has no business reaching, the coupling is the defect, not the edit. (RCWS #60.) Every issue below is that test on a different surface.
The shape
The layering every scientific platform surveyed converges on, and the one RCWS walked into:
layer
meaning
BESS today
1 components
models / laws / solvers as named plug-ins with provenance
planner, MPC, bidding: yes · estimator, plant, activation, ledger: no
2 engine
the loop, generic over components — never names one
names four of them
3 experiments = config
an experiment is settings, not code; vary one thing = one override
15 positional params, three runner scripts
4 records
every slow-or-random run saves config + code version + results; figures read records
results/ named by version, no provenance
5 views
CLI verbs and the Lab — windows over records + registries, never computing
none
Decisions taken (with the developer, 2026-08-15)
Ledger → devkit, at least for now: it is the referee, not a player. Settlement math may later split out as a shared pure function — split, not moved wholesale.
archive/ → out of the import root, at least for now; tag-and-delete is the later option if it still costs attention.
The physics roadmap (v6 UKF onward) waits on phase 1. v6 is then the first proof that the estimator seam works: one new file.
Proof-carrying branches: every structural change ships with bit-identical traces before/after. A refactor proves itself by not changing the numbers.
The Lab gets its own epic when phase 3 lands, as RCWS #70 did. Not before.
0 → 1 → 2 → 3, with 8 alongside and landing before 3. Phase 0's net goes up before any seam is cut. Each phase: one branch per issue, merged --no-ff on its proof; full suite once per phase.
The one current plan. Every other planning-shaped thing (
backlog.md, prose roadmaps) either feeds this or is retired against it.Why this exists
The developer's brief, in their words: "The repository has grown so massive that I lost track. I cannot run experiments freely, I am forgetting commands and capabilities, it is hard to investigate, analyze and compare stuff." And: "If I want to swap out EKF for UKF that should be an easy and fast transaction."
Two facts from the assessment (2026-08-15, read-only) shape everything below:
Strategy(core/simulator/strategy.py) is a real seam — planner, MPC and bidding tier are Protocols, and v5b was added with zero core edits and a bit-identity test to prove it. Estimator, plant, activation signal and ledger are constructed by hand inside the loop. The estimator swap the developer named touches 6–10 files today.The one test
A change in A must not require a change in B. When a change forces an edit somewhere it has no business reaching, the coupling is the defect, not the edit. (RCWS #60.) Every issue below is that test on a different surface.
The shape
The layering every scientific platform surveyed converges on, and the one RCWS walked into:
results/named by version, no provenanceDecisions taken (with the developer, 2026-08-15)
archive/→ out of the import root, at least for now; tag-and-delete is the later option if it still costs attention.The phases
Phase 0 — the net, then the fold
src/bess/+devkit/;archive/out of the import root; entry points declared; one-way rule and frozen inventory held by tests. Proof: traces bit-identical.Phase 1 — every component behind a port, chosen at the edge
run_simulation(strategy, config); the strayStrategyenum goneEstimatorLike, chosen at composition, traces named for the quantity not the algorithmPlantLike, no type switch in the loopPhase 2 — records are the currency
recordsviewPhase 3 — experiments have names
list run show compare+--setoverrides + runtime guard; the three runner scripts become entriesAlongside
backlog.mdretired into issues; drift fixed (MHE,ems_tracking_mpc, orphaned adapter)Phase 4 — views
Order and gates
0 → 1 → 2 → 3, with 8 alongside and landing before 3. Phase 0's net goes up before any seam is cut. Each phase: one branch per issue, merged
--no-ffon its proof; full suite once per phase.