development log
I killed the worker and Waveform kept playing
FF00 Studio reached its first real host-lifecycle checkpoint: independent workers, clean project closure, state restoration, and a crash that did not take Waveform with it.
Today’s FF00 Studio work was not glamorous. It was the kind of test that decides whether the more exciting parts are worth building on top of the architecture at all.
The development Rack now sends audio and MIDI through a separate worker process. The bridge uses fixed shared-memory slots for the realtime path and a named pipe for lifecycle control. The Rack reports a conservative two-block pipeline delay, and its audio callback does not wait for the worker. When a result misses its deadline, the effect path can return latency-aligned dry audio instead.
That is the contract on paper. Today I started proving how it behaves in the real host.
The deliberately boring test
I loaded the Rack in Waveform 14.0.49, duplicated it, removed the duplicate, closed the edit, reopened it, and resumed playback. Each retained Rack created its own worker with an independent shared-memory mapping, generation, and control pipe. Closing the edit cleaned its workers up. Reopening the saved edit created a fresh worker rather than trying to inherit stale process state.
Then I terminated the live worker on purpose.
Waveform stayed open. The Rack moved to its delayed dry fallback, and the project continued running. Closing and reopening the edit restored a new worker and playback resumed. I was not doing a critical listening test, but nothing sounded obviously wrong during the lifecycle pass.
That is a useful result, but it is deliberately narrower than saying crash isolation is solved. A fault inside the Waveform-loaded Rack can still affect the host. Automatic worker restart is not implemented yet. A hung worker, malformed shared memory, variable block sizes, offline rendering, and exact plugin-delay compensation still need dedicated tests.
What passed and what did not
The checkpoint confirms the basic process boundary:
- one worker can belong to one Rack instance
- duplicated Racks do not accidentally share worker identity
- edit closure cleans workers up
- reopening reconstructs the worker from saved Rack state
- terminating the external worker does not terminate Waveform in this test
- the Rack has a bounded fallback instead of waiting on the audio thread
It does not yet confirm sample-accurate host compensation, automatic recovery, allocation-free callbacks, arbitrary buffer handling, offline rendering, or child-plugin hosting. Surge XT is still ahead of this gate, as are semantic sound design, transcription, drums, one-shots, mix analysis, and mastering.
Next checkpoint
The next work is measurement and recovery: verify Waveform’s plugin-delay compensation from 64 through 1024 samples, instrument the callback for forbidden allocations, and add bounded automatic worker restart without putting process or pipe work onto the realtime thread.
This is slow foundation work, but it kept the project moving today. FF00 Studio is still pre-alpha; it simply has one fewer architectural assumption left to trust on faith.
Read the FF00 Studio project record or open the architecture appendix.