Skip to content

ci: add Logic AU input regression smoke and clean vendor-fork workflows - #4

Merged
unohee merged 5 commits into
masterfrom
aud-834-au-midi
Aug 15, 2026
Merged

ci: add Logic AU input regression smoke and clean vendor-fork workflows#4
unohee merged 5 commits into
masterfrom
aud-834-au-midi

Conversation

@unohee

@unohee unohee commented Aug 15, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • add a macOS headless AU effect smoke host that reproduces the Logic input-pull contract
  • fail on invalid render status or silent output, covering timestamp forwarding and AudioBufferList.mData replacement
  • run the regression gate in the macOS PR test job
  • align integration, docs, and package workflows with the Intrect NIH vendor-fork policy
  • correct the stale AU connection comment that attributed the Logic silence to MakeConnection

Root cause covered

The historical Logic silence regression could return noErr while producing silence when the wrapper dropped the valid AudioTimeStamp or read its scratch buffers after the host replaced mData pointers with zero-copy source buffers. The new host reproduces both behaviors against the bundled Gain AU and requires non-silent output.

Validation

  • scripts/au_logic_input_smoke.sh (macOS): passed with callback_status=0, render_status=0, rendered_samples=16384, silent=false
  • swiftc -O scripts/au_logic_input_smoke/LogicPullHost.swift
  • bash -n scripts/au_logic_input_smoke.sh
  • workflow YAML parse for test/build/docs/CodeQL
  • git diff --check
  • OpenSwarm review: APPROVE

The branch still contains no changes to the pre-existing untracked .DS_Store, .openswarm/, or openswarm.json artifacts.

@unohee
unohee marked this pull request as ready for review August 15, 2026 13:12
@unohee
unohee merged commit d0a0386 into master Aug 15, 2026
8 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3cd1306fa2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/wrapper/au/midi.rs
voice_id,
channel: group as u8,
note,
velocity: params.velocity / 127.0,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Treat StartNote velocity as normalized

When a host uses the extended MusicDeviceStartNote API, MusicDeviceNoteParams::mVelocity is already normalized to [0, 1]; dividing it by 127 makes a full-velocity note arrive at the plugin as approximately 0.0079, producing nearly silent instruments. The validation above likewise accepts the wrong [0, 127] range, and the smoke host masks this by sending the nonstandard value 96.0; validate against 1.0 and forward the value directly.

Useful? React with 👍 / 👎.

Comment thread src/wrapper/au/wrapper.rs
Comment on lines +1227 to +1231
.map(|layout| {
u32::from(layout.main_input_channels.is_some())
+ layout.aux_input_ports.len() as u32
})
.unwrap_or(0),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Initialize bus topology from the plugin's default layout

For a mono-only, surround-only, or otherwise non-stereo plugin, the wrapper still constructs n_channels as 2, so this lookup finds no layout and reports zero input elements before the host has had a chance to negotiate a format. Hosts commonly query the element count and current stream format before setting either one; such units therefore appear to have no input bus (and StreamFormat property info is also rejected) despite advertising a valid layout. Seed the initial channel count/topology from the first AUDIO_IO_LAYOUTS entry rather than assuming stereo.

Useful? React with 👍 / 👎.

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