|
|
|
|
@@ -8,7 +8,7 @@ Phase 1 named the subsystems. Phase 2 added the typed event substrate. Phase 3 m
|
|
|
|
|
|
|
|
|
|
- Phase 5 design package: proposed.
|
|
|
|
|
- Phase 5 implementation: Step 5 complete.
|
|
|
|
|
- Current alignment: Phase 3 introduced the first pure composition boundary and transient OSC overlay owner. Phase 5 now has a small `RuntimeStateLayerModel` inventory that names the current state categories, `RenderStateComposer` consumes a `LayeredRenderStateInput` whose fields make base persisted, committed live, and transient automation inputs explicit, `RuntimeLiveState` owns transient-overlay invalidation against current layer/parameter compatibility, settled OSC commits have an explicit session-only persistence policy, and snapshot publication consumes a named `CommittedLiveStateReadModel`. Committed runtime values are still physically backed by `RuntimeStore`/`LayerStackStore` during this conservative migration step.
|
|
|
|
|
- Current alignment: Phase 3 introduced the first pure composition boundary and transient OSC overlay owner. Phase 5 now has a small `RuntimeStateLayerModel` inventory that names the current state categories, `RenderStateComposer` consumes a `LayeredRenderStateInput` whose fields make base persisted, committed live, and transient automation inputs explicit, `RuntimeLiveState` owns transient-overlay invalidation against current layer/parameter compatibility, settled OSC commits have an explicit session-only persistence policy, and `CommittedLiveState` physically owns current session layer state. `RuntimeStore` still owns file IO, config, package metadata, preset persistence, and persistence requests.
|
|
|
|
|
|
|
|
|
|
Current live-state footholds:
|
|
|
|
|
|
|
|
|
|
@@ -21,7 +21,7 @@ Current live-state footholds:
|
|
|
|
|
- `RuntimeStateLayerModel` names the Phase 5 state categories and classifies current fields as base persisted, committed live, transient automation, render-local, or health/config state.
|
|
|
|
|
- `RuntimeCoordinator` can request layer-scoped transient OSC invalidation, while `RuntimeLiveState` prunes overlays that no longer map to the current render-facing layer/parameter definitions.
|
|
|
|
|
- `RuntimeCoordinator::CommitOscParameterByControlKey(...)` commits settled OSC values into session state without requesting persistence by default.
|
|
|
|
|
- `CommittedLiveStateReadModel` names the current committed/session read boundary that feeds render snapshot publication while remaining physically backed by `RuntimeStore`.
|
|
|
|
|
- `CommittedLiveState` owns current committed/session layer state and exposes `CommittedLiveStateReadModel` for render snapshot publication.
|
|
|
|
|
|
|
|
|
|
## Why Phase 5 Exists
|
|
|
|
|
|
|
|
|
|
@@ -116,7 +116,7 @@ This may be a small set of structs rather than a large class. The value is in na
|
|
|
|
|
|
|
|
|
|
### `CommittedLiveState`
|
|
|
|
|
|
|
|
|
|
Optional runtime/session collaborator if committed session state needs to move out of `RuntimeStore`.
|
|
|
|
|
Runtime/session collaborator for committed current-session state that has moved out of `RuntimeStore` physical ownership.
|
|
|
|
|
|
|
|
|
|
Responsibilities:
|
|
|
|
|
|
|
|
|
|
@@ -131,7 +131,7 @@ Non-responsibilities:
|
|
|
|
|
- disk writes
|
|
|
|
|
- GL resources
|
|
|
|
|
|
|
|
|
|
Phase 5 can defer this physical split if the policy is documented and covered by tests. The key is that committed-live state becomes a distinct concept even if it still lives inside existing storage temporarily.
|
|
|
|
|
Phase 5 now uses this physical split. `RuntimeStore` still wraps it for compatibility and persistence IO, but committed values no longer live directly as store fields.
|
|
|
|
|
|
|
|
|
|
### `AutomationOverlayState`
|
|
|
|
|
|
|
|
|
|
@@ -309,26 +309,26 @@ Current policy:
|
|
|
|
|
|
|
|
|
|
Decide whether to physically split committed-live state now or introduce a read/model boundary first.
|
|
|
|
|
|
|
|
|
|
Conservative option:
|
|
|
|
|
Earlier conservative option:
|
|
|
|
|
|
|
|
|
|
- [x] leave storage physically in `RuntimeStore`
|
|
|
|
|
- [x] add a named committed-live read model
|
|
|
|
|
- [x] keep persistence decisions in `RuntimeCoordinator`
|
|
|
|
|
|
|
|
|
|
Stronger option:
|
|
|
|
|
|
|
|
|
|
- introduce `CommittedLiveState`
|
|
|
|
|
- make `RuntimeSnapshotProvider` consume committed live state through a read model
|
|
|
|
|
- leave durable writes in `RuntimeStore`
|
|
|
|
|
- [x] introduce `CommittedLiveState`
|
|
|
|
|
- [x] make `RuntimeSnapshotProvider` consume committed live state through a read model
|
|
|
|
|
- [x] leave durable writes in `RuntimeStore`
|
|
|
|
|
|
|
|
|
|
Phase 5 does not need a flag-day split. It needs the concept to stop being implicit.
|
|
|
|
|
|
|
|
|
|
Current implementation:
|
|
|
|
|
|
|
|
|
|
- `CommittedLiveState` physically owns the current committed/session layer stack.
|
|
|
|
|
- `CommittedLiveStateReadModel` carries the current committed/session layer stack and shader package metadata used by snapshot publication.
|
|
|
|
|
- `RenderSnapshotReadModel` contains `committedLiveState` rather than exposing layer-stack fields directly.
|
|
|
|
|
- `RenderSnapshotBuilder` builds render snapshots and parameter refreshes from committed-live read APIs.
|
|
|
|
|
- `RuntimeStore` still provides the physical backing during this phase, but session-only committed changes can be observed through the committed-live read model without requiring durable persistence.
|
|
|
|
|
- `RuntimeStore` still owns config, package metadata, disk IO, preset files, and persistent-state serialization, but delegates current-session layer mutations to `CommittedLiveState`.
|
|
|
|
|
|
|
|
|
|
### Step 6. Update Docs And Exit Criteria
|
|
|
|
|
|
|
|
|
|
|