Symptom. Two real-build fallbacks leave a stub in place with nothing shown to the operator.
- If
MFStartup fails, the core keeps StubRecordingEncoderSink ("software-counting"): Record reports recording, a program path and a growing byte count, and writes no file.
- If
D3D11CreateDevice fails, the core keeps CpuNoopCompositor: frames report live with advancing numbers and nothing is composed. (This is the 2026-09-10 "software Stub core looked healthy" incident.)
Cause (read, not run). The core records failed-to-construct and marks program-recording/iso-recording unavailable, but NativeMediaCoreProfileValidator (13 required capabilities) has no non-test caller and the handshake checks nothing. No post-Stop check that the recording file exists was found.
Done when. The shell validates the profile at handshake and refuses to go on air, with a named reason, on a software compositor or the counting encoder; the core rejects start-recording-session when its encoder is the stub. See also #741 (fake Zoom session when the engine path is unset).
Found by the 2026-10-02 half-wired-feature audit, by reading code on main (8b84a8f). Not yet reproduced in the running app unless stated.
Symptom. Two real-build fallbacks leave a stub in place with nothing shown to the operator.
MFStartupfails, the core keepsStubRecordingEncoderSink("software-counting"): Record reportsrecording, a program path and a growing byte count, and writes no file.D3D11CreateDevicefails, the core keepsCpuNoopCompositor: frames reportlivewith advancing numbers and nothing is composed. (This is the 2026-09-10 "software Stub core looked healthy" incident.)Cause (read, not run). The core records
failed-to-constructand marksprogram-recording/iso-recordingunavailable, butNativeMediaCoreProfileValidator(13 required capabilities) has no non-test caller and the handshake checks nothing. No post-Stop check that the recording file exists was found.Done when. The shell validates the profile at handshake and refuses to go on air, with a named reason, on a software compositor or the counting encoder; the core rejects
start-recording-sessionwhen its encoder is the stub. See also #741 (fake Zoom session when the engine path is unset).Found by the 2026-10-02 half-wired-feature audit, by reading code on main (8b84a8f). Not yet reproduced in the running app unless stated.