Problem
VariableBarApp is shared by Dashboard and detached Data, but its activation port is named after Workbench persistence:
state.filterActive
params.saveFilterActive
That naming leaks one caller's storage model into a shared UI contract. Dashboard uses the same members for an in-memory draft map with no persistence, while detached Data uses the persisted Workbench map.
Current behaviour is correct, but the shared port is misleading and makes adapters easier to implement incorrectly.
Change
Rename only the shared VariableBarApp members to caller-neutral names, for example:
state.activeByName
params.saveActive
Keep all persisted Workbench names and storage unchanged:
AppState.filterActive
WorkbenchParameterSession.saveFilterActive
effectiveFilterActive
asb:filterActive
Both callers should construct explicit adapters. The activation map must be aliased, not copied, because the variable bar mutates it in place.
Acceptance criteria
VariableBarApp contains no filter-specific activation member names.
- Dashboard aliases its local draft activation map.
- Detached Data aliases
app.state.filterActive and routes saveActive to app.params.saveFilterActive().
- No persisted state or storage-key migration is introduced.
- A detached Data integration test proves that editing a variable updates the real
AppState.filterActive object and calls saveFilterActive().
- Existing variable-bar, Dashboard, architecture, and end-to-end tests remain green.
Problem
VariableBarAppis shared by Dashboard and detached Data, but its activation port is named after Workbench persistence:state.filterActiveparams.saveFilterActiveThat naming leaks one caller's storage model into a shared UI contract. Dashboard uses the same members for an in-memory draft map with no persistence, while detached Data uses the persisted Workbench map.
Current behaviour is correct, but the shared port is misleading and makes adapters easier to implement incorrectly.
Change
Rename only the shared
VariableBarAppmembers to caller-neutral names, for example:state.activeByNameparams.saveActiveKeep all persisted Workbench names and storage unchanged:
AppState.filterActiveWorkbenchParameterSession.saveFilterActiveeffectiveFilterActiveasb:filterActiveBoth callers should construct explicit adapters. The activation map must be aliased, not copied, because the variable bar mutates it in place.
Acceptance criteria
VariableBarAppcontains no filter-specific activation member names.app.state.filterActiveand routessaveActivetoapp.params.saveFilterActive().AppState.filterActiveobject and callssaveFilterActive().