Repository navigation
The MuTap-Max half of production-readiness M0: watchdog n on both externals' right outlets, MuTap re-pinned to main - #28
Merged
Conversation
The production-readiness M0 tree (tap/MuTap#91): the NaN watchdog in every hot path, the README namespace fix and snippet test, PROTOCOL.md, v0.1.0, the claims table and the IP notices, plus everything between 449cf6c and main (tap/MuTap#83-#90: the reverb stages, the spectral reverb, the guard's lost_in_probation_strikes default, the detector's __restrict bank, TapHouse v7). Moved with scripts/repin.sh. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DDhgJqxUsdmWPKh6pKrV5A
…he right outlet The MuTap-Max half of production-readiness M0 (tap/MuTap#91, plan §3 rule 3). Each external keeps, per built engine, the last count it reported — mutap.afc~ the canceller's pem_afc::watchdog_trips() plus the guard's howl_guard::watchdog_trips(0), mutap.aec~ every engine's watchdog_trips() (a chain counts a stage's trip once) — and sends `watchdog n` on its rightmost outlet whenever the count moves, from a pre-allocated atoms member on the audio thread; a healthy patch never hears it, and a rebuild starts a fresh count. The affected block is one block of silence, as the library guarantees. Tests (Min-level, the mock kernel): a NaN in the microphone after 32 blocks yields exactly one `watchdog 1` and a cleaned output with no non-finite sample, for the default afc engine, for the guarded one (the guard goes back to ARMING; the trip counts once) and for the aec engine; a healthy run sends none. The afc test's room gained a `poison` flag; the aec test gained the room driver and the fifo-outlet wait the afc test already had. The @ceiling scenario's expectation is re-recorded under the new pin: at the default ceiling the guard still opens (report 47) and the detector never trips, but the lost-verdict duck at report 143 is now ONE strike, since MuTap's lost_in_probation_strikes defaulted on (tap/MuTap#88, after the previous pin), and the doubled re-arm timer keeps it ducked for the rest of the 12 s; the assertion is now "at most one strike, and the guard opened before it". README (both objects), both maxrefs and both help patchers (a comment beside the right outlet's existing notes) describe the message. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DDhgJqxUsdmWPKh6pKrV5A
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The MuTap-Max half of production-readiness M0 (tap/MuTap#91; plan §3, rule 3: every library feature the external exposes lands with its attribute or message, maxref and help text, test row, and the submodule re-pin).
submodules/MuTap449cf6c → 9a27f2e (main: the watchdog, the namespace fix, PROTOCOL.md, v0.1.0, and Reverb behind the canceller: reverb_mix stage, Dattorro ASG vs wet/decay, dry-only-shift variant, dattorro_paper cost table (phase 2 item 7, part 1) MuTap#83–#90 in between), moved with the newscripts/repin.sh.watchdog non the rightmost outlet ofmutap.afc~(the canceller's trips plus the guard's) andmutap.aec~(every engine's; a chain counts a stage's trip once), sent only when the count moves, from a pre-allocatedatomsmember on the audio thread. A healthy patch never hears it; a rebuild starts a fresh count. The affected block comes out as silence, as the library guarantees.watchdog 1, no non-finite output sample, for the default afc engine, the guarded one (back to ARMING, counted once) and the aec engine; a healthy run sends none.lost_in_probation_strikesdefaults on (howl_guard: a LOST in probation is a strike, default on (cabin's duck cycle); TwoMicSmoke honours MUTAP_SLOW_THREADS MuTap#88), so that duck at report 143 is one strike and the doubled re-arm timer keeps the guard ducked for the rest of the 12 s. The assertion is now "the detector never trips: at most one strike, and the guard opened (report 47) before it"; the comment records both pins' readings.Local: both Catch2 suites pass (20 cases; the afc suite 12.3 s on the Intel Mac); clang-tidy clean on the four TUs; universal build. Nothing has been exercised in a running Max, as before.
🤖 Generated with Claude Code
https://claude.ai/code/session_01DDhgJqxUsdmWPKh6pKrV5A