Skip to content

docs: wake-word plan rev 3 — the M4 review, the two decisions, and the M4 section rewritten - #47

Merged
tap merged 3 commits into
mainfrom
docs/wake-word-m4-review
Sep 9, 2026
Merged

docs: wake-word plan rev 3 — the M4 review, the two decisions, and the M4 section rewritten#47
tap merged 3 commits into
mainfrom
docs/wake-word-m4-review

Conversation

@tap

@tap tap commented Sep 9, 2026

Copy link
Copy Markdown
Owner

What this changes

Documentation only. Adds the adversarial review of the wake-word plan's M4 section (docs/wake-word-m4-review.md), records in HANDOFF the two decisions it needed, and rewrites the plan's M4 section as rev 3 (docs/wake-word-plan.md) — staged M4a → M4b → M4c — with the collateral one-line edits elsewhere in the plan that keep it consistent.

Why

Rev 2's M4 could not be built without the builder deciding roughly a dozen things the plan was silent on, one of them irreversible: consented human voice data was heading into a public MIT repository with consent scope, licence, storage form and size undecided. The review (93 findings, 15 root issues) settled what must be decided before recording or building; the two decisions taken on 8 September 2026 — hold-out audio stays out of git with only holdout.json committed; training features come from the shipping front end through dsptap_py.LogMel with the numpy reference as the oracle — shape several of rev 3's paragraphs. Two external facts also moved under the plan: the maintained Piper is GPL-3 (espeak-ng embedded) and Common Voice is account-gated on Mozilla Data Collective with a no-re-hosting clause.

Verification

  • Review: every finding re-checked by a skeptic against the working checkouts of MuTap (96b4572) and DspTap (58210ae); the two external facts with the largest consequences re-fetched by hand (Mozilla Data Collective Data Consumer terms; the rhasspy/piper archive notice).
  • Rev 3: three independent drafts, a judge panel, synthesis, six verification lenses with a skeptic per finding, a fixer and a completeness critic (54 findings raised, 52 confirmed and applied); every number in the section recomputed by hand — arithmetic on stated inputs or a labelled target, no measurement claimed.
  • No code, tests or notebooks change. CI is not a gate for this PR.

Notes for the reviewer

  • No submodule pin moves in this PR.
  • The plan's formatted artifact still renders rev 2; it predates the M1–M3 done records and is refreshed separately.
  • The choices rev 3 fixes where the review left options (one resampler, a train music share, the eval floors, the hold-out capture protocol, the eval-tts share, the ids in the lock) are listed in the M4 section's paragraphs and can be flipped one paragraph at a time.

🤖 Generated with Claude Code

https://claude.ai/code/session_016ZkpA4PWuaan5ek2CL2DDm

Timothy Place and others added 3 commits September 8, 2026 19:00
…pointer

docs/wake-word-m4-review.md reviews rev 2's "M4 — Corpus, splits and dataset
builder" section before it is built, in the rev-1 audit's format: eight
adversarial lenses plus an external-facts checker, a skeptic per finding
refuting against the checkouts, a completeness critic and a cross-lens judge
(104 agents; 93 findings raised, 0 refuted, 15 discounted by the judge).

Verdict: the skeleton is right — speaker-disjoint splits keyed across MSWC and
Common Voice, one named never-trained-on eval negative set as the FA/hour
denominator, manifest plus out-of-git store, dataset card, consented hold-out —
but fifteen root issues must be settled before building, one critical: the
recorded hold-out is human voice data going into a public MIT repository with
consent scope, audio licence, storage form and size undecided, and the RIR
fixture generator the plan cites stamps MIT on every fixture it emits
(make_rir_fixtures.py:108-109). Also: DspTap's numpy reference is hard-wired to
one geometry, so "import, don't restate" cannot serve a tuned parameter; the
rebuild pass has no comparison target and no builder fixture or CI job; the
Pico-microphone hold-out path has no capture path before M7; eval hours are
never sized (3.0/H bounds the rate at zero events); no TTS negatives; music
absent from training but targeted in M6; the endpoint undefined.

Two facts moved under the plan and were verified on the live pages: the
maintained Piper is GPL-3.0 (rhasspy/piper archived 2025-10-06, espeak-ng
embedded in OHF-Voice/piper1-gpl), and Common Voice is now account-gated on
Mozilla Data Collective with a no-re-hosting clause on top of CC0, so no
Common Voice audio may enter any committed fixture or toy corpus.

The review lists what survives, the discounted findings, nineteen ordered
amendments for a rev 3 of the section, and a staging M4a (builder, contracts,
Speech Commands, toy CI fixture) -> M4b (full corpus) -> M4c (hold-out, host
path only), with the >= 10-talker / >= 200-utterance target enforced at M6.
Formatted version linked from the document. HANDOFF's wake-word entry points
at the review and names the two decisions that precede rev 3.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016ZkpA4PWuaan5ek2CL2DDm
Taken 8 September 2026, ahead of rev 3 of the plan's M4 section:

1. The hold-out audio stays out of git. FLAC in the off-git store (or a
   private release asset); the repository commits only holdout.json — per
   utterance sha256, talker pseudonym, microphone path, distance, SNR, phrase
   and endpoint sample; per talker pseudonym, consent-form version and
   permitted uses. The M5 harness refuses a hold-out whose hashes do not
   match the committed rows. Consent covers evaluation by the project,
   retention, loudspeaker replay at M7, aggregate numbers, pseudonymous
   handling and a withdrawal path, never public-repo permanence, plus an
   optional per-talker opt-in for later CC BY 4.0 release attributed to the
   collection. The M4c pilot is n = 1.

2. Training features are generated through the DspTap C ABI bridge
   (dsptap_py.LogMel), which takes every log_mel_geometry value and agrees
   with the numpy reference to 1.5e-14 at the reference geometry. The numpy
   script stays M1's oracle; parameterizing it is a DspTap follow-up, not an
   M4a prerequisite.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016ZkpA4PWuaan5ek2CL2DDm
Replaces §6 M4 with the staged M4a (builder, contracts, Speech Commands, toy
fixture, kws-dataset CI job) → M4b (full corpus, phrase, splits, lock, card)
→ M4c (hold-out, host path only) design, carrying every amendment of
docs/wake-word-m4-review.md §6–§7 and the two decisions of 8 September 2026:
the hold-out audio stays out of git (FLAC in the store, holdout.json the only
committed record, hash mismatch refused) and training features come from the
shipping front end through dsptap_py.LogMel, the numpy reference staying the
oracle.

Collateral one-line edits keep the rest of the plan consistent: the header,
the §4 rows for Speech Commands, Common Voice, MUSAN, Piper and the hold-out,
the §5 kws list (provenance block; label form decided in M6), M0's compute
line, M1's as-built sentence, M5's hit window and report columns, M6's pass,
M7's bench protocol (the Pico path produced by replay), the documentation
table, a §8 access-drift paragraph, §9's shipped-hold-out qualifier and the
provenance bullets. Every number in the section is arithmetic on stated
inputs or a labelled target; nothing is a measurement.

HANDOFF's wake-word bullet now records rev 3 as landed and names M4a as next.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016ZkpA4PWuaan5ek2CL2DDm
@tap
tap merged commit c1353c0 into main Sep 9, 2026
32 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