daniel
b7b93a7ac3
One undo-block opener for the whole tree: fourteen sites route through it, and the reclaim span can no longer swallow a user's act
...
The drain refuses a tick inside a foreign block; applyMode wakes the reclaimer
before it opens the span.
2026-08-07 16:38:11 -04:00
daniel
67d9ec3da9
Put the FX reclaimer to sleep on a project-state load instead of waking it
...
abandon() clears the wakeup where invalidate() raises it, so File > Revert
cannot converge FX or spend park records against a model nothing re-read.
2026-08-07 14:23:56 -04:00
daniel
9b6f725747
Close the FX reclaimer's undo span at the state-load hook, and expose the drain's direction
...
A Ctrl-Z mid-span used to close the pre-undo block over post-undo state; it now
terminates at BeginLoadProjectState and stops the drain where it stands.
fxReclaimActivity reports Online/Offline/Idle; fxReclaimPending is unchanged.
2026-08-07 13:45:58 -04:00
daniel
86aa8dabba
Collapse a Design View mode switch and its background FX parking to ONE undo point
...
applyMode now returns with its undo block open; the reclaimer closes it when the drain
settles. A transport deferral or a tab switch ends it early -- two points, never a leak.
2026-08-07 12:53:42 -04:00
daniel
4f6cf60740
Narrow the FX reclaimer's transport gate to defer offline work only; let online drain through, and always run the park clock's observe
2026-08-06 23:04:02 -04:00
daniel
c95203718a
fx_reclaim: use GetCurrentProjectInLoadSave for the save hook, stop disarming ReleaseFlush on one write, validate project before cached-track lookup
2026-08-06 22:52:57 -04:00
daniel
02790f1270
Gate the FX reclaimer on the transport, both directions; move the release's persist off the drain and onto the project save
...
The drain no longer dirties a project on its own initiative — a spent park record rides the user's next save via OnSaveExtensionConfig.
2026-08-06 22:31:47 -04:00
daniel
224dcf84df
Fix the reclaimer stranding a tab-switched-into project: lift the pin and wakeup into FxReclaimQueue, retarget instead of going idle
...
Also validate the cached track in its project, and stop a drop-free tick resetting the report memo.
2026-08-06 22:16:41 -04:00
daniel
7687ea76fc
Persist the reclaimer's FX release so a reload cannot re-drive a spent record, and report the FX-restore drops it was swallowing
2026-08-06 21:26:55 -04:00
daniel
5dcfd3a53f
Reclaim drain owns its work: invalidation only bumps a generation, and a generation that moved aborts the tick's commit and its release.
2026-08-06 21:08:34 -04:00
daniel
f04c704353
Make an FX reclaim step one whole track's chain: drop the resume cursor, yield only between tracks
2026-08-06 20:48:17 -04:00
daniel
5a35b71dc0
Add the FX reclaimer: a debounced, time-boxed convergence loop that offlines parked chains and restores returning ones off the switch path
2026-08-06 19:07:17 -04:00