Skip to content

Publish the book to Pages; compile the C ABI in CI; export tap::mu - #32

Merged
tap merged 2 commits into
mainfrom
claude/repository-inconsistencies-nkocvd
Jul 28, 2026
Merged

Publish the book to Pages; compile the C ABI in CI; export tap::mu#32
tap merged 2 commits into
mainfrom
claude/repository-inconsistencies-nkocvd

Conversation

@tap

@tap tap commented Jul 28, 2026

Copy link
Copy Markdown
Owner

What this changes

Two commits:

  1. docs.yml — builds the mdBook ("Quieting the Loop") on every push and PR, deploys to GitHub Pages from main; fixes book.toml's site-url to match where the book is actually served.
  2. CI compiles the C ABI, and the library exports the tap::mu alias.

Why

The book had no workflow at allci.yml does not build it, so a broken SUMMARY.md entry or a missing chapter file could land unnoticed, and the book was never published. It now builds on PRs (catching breakage in review) and deploys only from main.

MUTAP_BUILD_CAPI defaults to OFF and CI never turned it on, so nothing in the pipeline compiled the C ABI that the notebook generators drive via ctypes. A kernel signature change could break the ABI and the notebooks with CI staying green. AmbiTap and DspTap already build theirs.

tap::mu is the alias taphouse's namespace convention documented but this repo never created (see tap/TapHouse#6).

Verification

  • Book builds clean with the pinned mdBook v0.4.40 (URL + SHA256 in the workflow), producing a 22-file artifact with index.html; 404.html's home link is now /MuTap/. book/book/ is gitignored.
  • docs.yml parses as YAML; configure-pages@v5 with enablement: true creates the Pages site on first run.
  • C ABI: configure and build succeed with MUTAP_WERROR=ON; libmutap_capi.so links and exports its 34 mutap_* entry points (nm -D).
  • Full suite passes 181/181 on Linux (548 s — the ITU compliance legs are slow).

Notes for the reviewer

  • capi is enabled on the Linux and macOS legs only. tools/capi carries no __declspec(dllexport) (unlike DspTap's), so an MSVC build would link a DLL exporting nothing — it would pass without gating anything. That is stated in the matrix comment and in taphouse's known-divergences list, to be flipped on in the same change that gives the C ABI an export decoration.
  • The book is published at the site root (path: book/book), not under /book/. If a Doxygen site is ever added under /api/, assemble a site/ directory the way AmbiTap's docs.yml does rather than moving the book into a subdirectory — otherwise site-url goes wrong again. There is a comment in the workflow saying so.
  • Submodule pin not moved. submodules/dsptap stays at 9cbfbca, 11 commits behind its siblings, on account of macOS: two float32 tests fail under AppleClang 21 / Xcode 26.5 (Float32Parity.ToneRowWithNarrowbandGuard, itu_echo.EchoStability<float>) #31 — though see below: the suspected cause is probably not in the FFT backend, so that hold may be buying nothing.
  • MuTap::MuTap stays alongside tap::mu, so no consumer changes.
  • Header path untouched: include/mutap/ does not yet match the convention's tap/mu/; renaming breaks every consumer #include.

Why this PR shows a red check, and a finding for #31

Nothing in this PR is failing. ci.yml triggers on both push and pull_request, so commit e989c569 got two runs, and GitHub shows the union of their check runs on the PR. One of them went red on macOS; the other went green:

Run Head SHA Trigger Result
30374907771 e989c569 push failed on macOS
30380046998 e989c569 pull_request passed all 181

Same commit, same tree, same workflow, opposite outcomes. I have re-run the failed job so the PR reflects reality.

The two macOS failures were:

itu_echo.EchoStability<float>            4.5505849575754098 vs 4.5    (1.1% miss)
Float32Parity.ToneRowWithNarrowbandGuard 42.337837234992982 vs -55    (~97 dB miss)

This corrects what an earlier version of this description said. It claimed the Linux pass was "consistent with the vDSP-backend hypothesis" in #31. That is wrong: a fixed backend difference cannot produce pass-and-fail on an identical commit. main's own macOS job shows the same pattern historically — red at d2a3abc and 2e024739, green at 0682238 and others.

What fits is nondeterministic state, most likely an uninitialized read: one root cause that explains a marginal 1.1% miss and a catastrophic 97 dB miss coexisting, explains why it is macOS-mostly (allocator fill behaviour, not different arithmetic), and explains why Linux ASan+UBSan stays green — ASan does not detect uninitialized reads. MSan or Valgrind on those two tests is the cheap next probe; the -DTAP_DSP_FFT_ACCELERATE=OFF bisection is now the second step, since if the cause is uninitialized state, toggling vDSP may move the failure rate without being the cause. Written up in #31.

I could not reproduce either failure directly — no macOS here, and both tests pass on Linux where I ran the full 181 clean.

claude added 2 commits July 28, 2026 13:04
MuTap was the only repo in the family that ships a book/ with no way to build
or publish it: ci.yml never invoked mdbook, so "Quieting the Loop" was neither
deployed nor gated -- a SUMMARY.md entry pointing at a missing file would have
gone unnoticed until someone built the book by hand.

Adds docs.yml on TapTools' pattern (itself AmbiTap's), minus the Doxygen site
since this repo has no Doxyfile: build on every push and pull request, deploy to
Pages only from main. The pull-request path is build-only, which makes this the
repo's book gate as well as its publisher -- book.toml sets create-missing =
false, so a SUMMARY entry without a matching file fails the build rather than
silently generating a stub. mdBook is pinned by URL and SHA256, matching the
sibling workflows.

Also corrects site-url, which was "/MuTap/book/" while the book is published at
the site root. mdBook only uses site-url for the absolute links in the generated
404 page; with the mismatch, that page's home link pointed at /MuTap/book/ and
would itself have 404'd. Asset paths are relative and were never affected, so
the impact was narrow -- but the value was simply wrong. It is now "/MuTap/", so
the 404 page's home link resolves to where the book actually lives. The
workflow's header records that a future Doxygen site should be assembled into a
site/ directory the way AmbiTap does, rather than moving the book into a
subdirectory, so site-url stays correct.

Verified with the pinned mdBook v0.4.40 (checksum confirmed): the book builds
clean with no warnings, all three SUMMARY targets exist, the artifact directory
the workflow uploads (book/book) contains index.html, and the regenerated 404
page's home link is /MuTap/. The workflow YAML parses, with the expected build
and deploy jobs and push/pull_request triggers. book/book/ is already
gitignored, so the build output stays out of the tree.

Note the same site-url mismatch exists in AmbiTap and TapTools -- both declare
".../book/" while publishing the book at the root (AmbiTap assembles site/ with
the book at root and Doxygen under api/; TapTools uploads book/book directly).
SampleRateTap is the consistent one. Not touched here.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JhhQ93r2E1QTnCx46YfX8j
This repo ships a C ABI under tools/capi that the notebook generators drive via
ctypes, but MUTAP_BUILD_CAPI defaults to OFF and CI never turned it on -- so
nothing in the pipeline compiled it, and a kernel signature change could break the
ABI with CI staying green. AmbiTap and DspTap already build theirs; this brings
MuTap in line.

Enabled on the Linux and macOS legs only. tools/capi carries no
__declspec(dllexport) (unlike DspTap's), so an MSVC build would link a DLL that
exports nothing -- it would pass without gating anything. Recorded in the matrix
comment and in taphouse's known-divergences list, to be flipped on in the same
change that gives the C ABI an export decoration.

Also exports `tap::mu`, the alias taphouse's namespace convention has documented
all along but that this repo never created. `MuTap::MuTap` stays, so existing
consumers are unaffected.

Verified locally: configure and build succeed with MUTAP_WERROR=ON, the shared
library links and exports its 34 mutap_* entry points, and the full suite passes
181/181. Worth noting for issue #31: itu_echo.EchoStability<float> and the float32
parity tests -- the two that fail on macOS -- pass here on Linux, which is
consistent with the vDSP-backend hypothesis in that issue rather than a
platform-independent regression.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JhhQ93r2E1QTnCx46YfX8j
@tap
tap merged commit 41b9ef7 into main Jul 28, 2026
37 of 39 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.

2 participants