Skip to content

[epic] Seams before records before views: the BESS platform #10

Description

@dim-sous

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:

  1. 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).
  2. 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.

The phases

Phase 0 — the net, then the fold

Phase 1 — every component behind a port, chosen at the edge

Phase 2 — records are the currency

Phase 3 — experiments have names

Alongside

Phase 4 — views

  • The Lab. Its own epic, opened when phase 3 lands.

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-ff on its proof; full suite once per phase.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    engineseams, run schema, data modelepictracking issue

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions