Skip to content

R0-1: introduce protocol-neutral ProcessBlockView without changing Single behavior - #65

Merged
masarray merged 24 commits into
mainfrom
r0-1-process-block-view
Aug 28, 2026
Merged

R0-1: introduce protocol-neutral ProcessBlockView without changing Single behavior#65
masarray merged 24 commits into
mainfrom
r0-1-process-block-view

Conversation

@masarray

@masarray masarray commented Aug 27, 2026

Copy link
Copy Markdown
Owner

Refs #63

Base fixed point: 060197707a372adce55db63434e7ab709a3d8262.

Mandatory pre-mutation proof

Before any production process mutation, the real-VST3 characterization harness exercised the unchanged Single Vst3Engine::process(AudioSlot&) seam using deterministic fixed-mono and fixed-stereo VST3 fixtures built from the repository's pinned Steinberg SDK.

That gate passed on source head 819e394949184ed64d86901b0cf3e13a3306c6ea in R0-1 Process Seam Characterization #8, run 33135381993.

The proof locks:

  • direct mono and stereo processing;
  • stereo-host -> mono-plugin and mono-host -> stereo-plugin adaptation;
  • invalid block rejection;
  • real IAudioProcessor::process() failure propagation;
  • projectTimeSamples continuity;
  • failed blocks do not advance sample position.

R0-1 implementation

Only after that gate passed:

  • added protocol-neutral, non-owning ProcessBlockView;
  • added Vst3Engine::process(const ProcessBlockView&) as the deep processing entry;
  • kept process(AudioSlot&) as a stack-only Single transport adapter;
  • added deterministic parity coverage comparing independent AudioSlot and ProcessBlockView engine instances;
  • preserved the existing process-context source contract by following block.frames at the neutral seam;
  • extended Compatibility Test Build path filters so this host seam cannot bypass the mandatory OBS compatibility/package gate.

Single AudioSlot/shared-memory layout and protocol version are unchanged. No Rack protocol/helper, HostedPlugin extraction, multi-plugin runtime, Rack OBS filter, production Rack editor, scanner redesign, or Single protocol redesign is included.

Real-machine P0 found and fixed before merge

The first exact-candidate smoke on OBS Studio 32.1.2 exposed an OBS source-registration ABI mismatch: the module built against a newer SDK forwarded sizeof(obs_source_info)=424 while that runtime supported 408 bytes, so the DLL loaded but obs_safe_vst3_filter failed to register.

The narrow compatibility fix is commit dc3a52bdb8b6a15026f39c46130b42f0acee5c6a: obs_register_source() is redirected to obs_register_source_s() with the ABI prefix ending at obs_source_info::save, the last source-info field this module actually populates. No DSP/process behavior, transport layout, Rack code, or installer behavior changed.

The repaired candidate was then reinstalled on the same real OBS 32.1.2 machine and VST 3.x Plug-in is visible again in Add Filter. Source registration visibility is therefore PASS on the repaired exact candidate.

Frozen exact candidate

dc3a52bdb8b6a15026f39c46130b42f0acee5c6a

Git tree: 956e8b3a5720e8242ea2993263521a2bca7d9c51.

main remains at 060197707a372adce55db63434e7ab709a3d8262, so there is no base drift.

The PR merge ref 95734c03691c2d368e59c714c357d91faedb88aa resolves to the same Git tree 956e8b3a5720e8242ea2993263521a2bca7d9c51.

Automated exact-head qualification — PASS

  • CI #375 / run 33161584578: SUCCESS on dc3a52bdb8b6a15026f39c46130b42f0acee5c6a;
    • protocol-linux SUCCESS;
    • helper-windows SUCCESS;
    • obs-module-windows SUCCESS against current OBS SDK;
    • installer-windows SUCCESS.
  • R0-1 Process Seam Characterization S2.4 final merge checklist #17 / run 33161584526: SUCCESS.
  • Compatibility Test Build #162 / run 33161584519: SUCCESS;
    • Windows regression tests + scanner smoke;
    • official OBS 29.1.3 loader/ABI-floor probe;
    • package build + PE dependency inspection;
    • portable validation;
    • canonical OBS-root installer smoke;
    • artifact upload.

Compatibility #162 artifact:

  • artifact ID 9682202575;
  • artifact name OBS-Safe-VST3-Host-v0.4.1-stabilize-test5-windows-x64;
  • artifact digest sha256:ee5802f1d18ee61eabb88057973a30830bffb0214c46e03b944e1eb89ddd72e5;
  • exact workflow head dc3a52bdb8b6a15026f39c46130b42f0acee5c6a.

Remaining merge gate

Per ADR-0004 item 11 / issue #63, merge remains gated on completing the representative exact-candidate real-machine Single smoke on dc3a52bdb8b6a15026f39c46130b42f0acee5c6a:

  1. normal commercial-VST3 audio;
  2. helper-owned vendor editor open/hide/reopen;
  3. exact-state continuity through helper recreation;
  4. dry fail-open behavior.

Filter registration visibility on OBS 32.1.2 is already PASS after the ABI fix, but that alone does not satisfy the four-point smoke above.

Until those four observations are recorded, this PR remains open, issue #63 remains open, and R0-2 must not start.

@masarray masarray changed the title R0-1: characterize real VST3 process seam before migration R0-1: introduce protocol-neutral ProcessBlockView without changing Single behavior Aug 28, 2026
@masarray
masarray merged commit bcddeb7 into main Aug 28, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant