The macOS AppleClang CI job fails two tests. It is a toolchain/runner-image regression, not a code change — main last passed on the same tree four days earlier. Filing this so the evidence does not stay buried in a comment on an unrelated PR (#30).
The failure
99% tests passed, 2 tests failed out of 181
The following tests FAILED:
114 - itu_echo.EchoStability<float> (Failed)
179 - Float32Parity.ToneRowWithNarrowbandGuard (Failed)
tests/test_float32.cpp:166: Failure
Expected: (max_level_dbm0a(rr.out, r.rs.fs, static_cast<size_t>(10.0 * r.rs.fs), rr.out.size())) < (r.gate),
actual: 42.337837234992982 vs -55
fs 16000
Full log: macOS AppleClang job 90074362335 (the itu_echo assertion detail is in there too).
Not a code change
The run above is from PR #30, whose entire diff is one file — .github/pull_request_template.md, 40 insertions, no C++. Its base commit is 0682238, which is also the current main HEAD, and main's own last CI run on that exact commit ("Bump TapHouse drift pin to v5", 2026-07-23) concluded success. Same tree: green on 2026-07-23, red on 2026-07-27.
main has not been re-run since, so it is untested rather than known-good on the new toolchain. Re-running it would make that explicit.
Environment change
The macOS runners now report AppleClang 21.0.0.21000101 / Xcode 26.5 and ship CMake 4. The image move is independently corroborated: the same update broke configure in tap/AmbiTap-Max#18 and tap/MuTap-Max#14 with Compatibility with CMake < 3.5 has been removed from CMake, which required a min-api pin bump.
Scope
Green in the same run: Linux Clang, Linux GCC, Windows MSVC, Hexagon cross (QEMU), Cortex-M55 cross (QEMU), ASan + UBSan, Instruction-count ratchet, Suppressor branch-free/branchy parity, clang-format, drift.
It is also not a blanket AppleClang 21 problem across the family — tap/AmbiTap#24's build-test (macos-appleclang) job is green on the same runners today, as are SampleRateTap's jobs. What is distinctive here is that MuTap carries the family's tightest numerical assertions (measured ITU-T thresholds).
This is probably not floating-point drift
42.34 dBm0(A) against a −55 dBm0(A) gate is roughly a 97 dB miss. That is far too large for single-precision rounding differences. It reads more like the narrowband guard or the suppressor not engaging at all under this build than a threshold that needs widening. Please resist retuning the gate until the mechanism is understood — these thresholds are the ITU-T compliance evidence.
Leading hypothesis: the vDSP float32 FFT backend
Both failing tests are on the float32 path, and macOS is the only platform where the float32 FFT backend differs. Per DspTap's CMakeLists.txt, TAP_DSP_FFT_ACCELERATE defaults ON for Apple and routes the float32 real FFT through Apple's vDSP instead of Ooura; Linux and Windows use Ooura. Double is untouched (always Ooura), and the documented contract is that "on the float32 path vDSP agrees with Ooura to single-precision rounding (not bit-identical)".
vDSP is SDK-provided, so an Xcode 26.5 bump can change its numerics without any compiler codegen change being involved.
One-flag bisection — highest-value next step. Build macOS with the Apple backend forced off and re-run the two tests:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DTAP_DSP_FFT_ACCELERATE=OFF
cmake --build build
ctest --test-dir build --output-on-failure -R 'Float32Parity.ToneRowWithNarrowbandGuard|itu_echo.EchoStability'
- Tests pass → it is vDSP, and the float32 vDSP/Ooura agreement contract is broken on the new SDK.
- Tests still fail → it is AppleClang 21 codegen; next probe
-ffp-contract=off and compare -O0/-O1/-O2, since FMA contraction in the suppressor's recursions is the usual suspect.
Related context
This repo pins submodules/dsptap at 9cbfbca, which is 11 commits behind DspTap main (dfbe18d). So the vDSP backend MuTap actually compiles is not the one DspTap's own green macos-vdsp job certifies. That does not explain a failure that appeared this week — the pin has not moved — but it does mean DspTap's green macOS CI is not evidence about the code path failing here, and a pin bump is worth trying as part of the investigation.
Suggested next steps
- Re-run
main's CI to confirm the failure is independent of any PR.
- Run the
-DTAP_DSP_FFT_ACCELERATE=OFF bisection above on a Mac with Xcode 26.5.
- Before adjusting any threshold, instrument whether the narrowband guard / suppressor gain is actually engaging on the failing run — the magnitude suggests a state problem, not a tolerance problem.
- Consider bumping
submodules/dsptap so the backend under test matches the one DspTap certifies.
Not reproducible outside macOS: Linux Clang and Linux GCC both pass, so this needs a Mac on the new toolchain.
The macOS AppleClang CI job fails two tests. It is a toolchain/runner-image regression, not a code change —
mainlast passed on the same tree four days earlier. Filing this so the evidence does not stay buried in a comment on an unrelated PR (#30).The failure
Full log: macOS AppleClang job 90074362335 (the
itu_echoassertion detail is in there too).Not a code change
The run above is from PR #30, whose entire diff is one file —
.github/pull_request_template.md, 40 insertions, no C++. Its base commit is0682238, which is also the currentmainHEAD, andmain's own last CI run on that exact commit ("Bump TapHouse drift pin to v5", 2026-07-23) concluded success. Same tree: green on 2026-07-23, red on 2026-07-27.mainhas not been re-run since, so it is untested rather than known-good on the new toolchain. Re-running it would make that explicit.Environment change
The macOS runners now report AppleClang 21.0.0.21000101 / Xcode 26.5 and ship CMake 4. The image move is independently corroborated: the same update broke
configurein tap/AmbiTap-Max#18 and tap/MuTap-Max#14 withCompatibility with CMake < 3.5 has been removed from CMake, which required a min-api pin bump.Scope
Green in the same run: Linux Clang, Linux GCC, Windows MSVC, Hexagon cross (QEMU), Cortex-M55 cross (QEMU), ASan + UBSan, Instruction-count ratchet, Suppressor branch-free/branchy parity, clang-format, drift.
It is also not a blanket AppleClang 21 problem across the family — tap/AmbiTap#24's
build-test (macos-appleclang)job is green on the same runners today, as are SampleRateTap's jobs. What is distinctive here is that MuTap carries the family's tightest numerical assertions (measured ITU-T thresholds).This is probably not floating-point drift
42.34 dBm0(A) against a −55 dBm0(A) gate is roughly a 97 dB miss. That is far too large for single-precision rounding differences. It reads more like the narrowband guard or the suppressor not engaging at all under this build than a threshold that needs widening. Please resist retuning the gate until the mechanism is understood — these thresholds are the ITU-T compliance evidence.
Leading hypothesis: the vDSP float32 FFT backend
Both failing tests are on the float32 path, and macOS is the only platform where the float32 FFT backend differs. Per DspTap's
CMakeLists.txt,TAP_DSP_FFT_ACCELERATEdefaults ON for Apple and routes the float32 real FFT through Apple's vDSP instead of Ooura; Linux and Windows use Ooura. Double is untouched (always Ooura), and the documented contract is that "on the float32 path vDSP agrees with Ooura to single-precision rounding (not bit-identical)".vDSP is SDK-provided, so an Xcode 26.5 bump can change its numerics without any compiler codegen change being involved.
One-flag bisection — highest-value next step. Build macOS with the Apple backend forced off and re-run the two tests:
-ffp-contract=offand compare-O0/-O1/-O2, since FMA contraction in the suppressor's recursions is the usual suspect.Related context
This repo pins
submodules/dsptapat9cbfbca, which is 11 commits behind DspTapmain(dfbe18d). So the vDSP backend MuTap actually compiles is not the one DspTap's own greenmacos-vdspjob certifies. That does not explain a failure that appeared this week — the pin has not moved — but it does mean DspTap's green macOS CI is not evidence about the code path failing here, and a pin bump is worth trying as part of the investigation.Suggested next steps
main's CI to confirm the failure is independent of any PR.-DTAP_DSP_FFT_ACCELERATE=OFFbisection above on a Mac with Xcode 26.5.submodules/dsptapso the backend under test matches the one DspTap certifies.Not reproducible outside macOS: Linux Clang and Linux GCC both pass, so this needs a Mac on the new toolchain.