The library

Rendered from docs/reports/2026-09-26_m3-spectra-aasist-plan-review.md; the markdown file is the record.

  1. Critical — Resume does not fingerprint the crop recipe completely. The hash omits --train-manifest, whose row order determines crop lengths and offset seeds. Reordering it would allow old scores and newly cropped scores into one export. Hash the training manifest, scoring script, and loaded Spectra model implementation/configuration; test that changing manifest order rejects resume.

  2. Critical — Non-finite model outputs bypass the failure gate. Only RuntimeError produces model_error; a successful forward returning NaN or infinity remains “ok.” The direction check then excludes those rows, potentially allowing an invalid stream through. Validate output shape and finiteness, including the derived margin, count invalid outputs as failures, and test NaN/inf-returning models.

  3. Critical — Accepted decode failures can crash metric generation. The plan allows up to 5% NaN scores, but existing metrics.report, by_group, and roc_auc_score do not filter them. Specify a shared finite-row mask applied consistently to scores, labels, and metadata before every readout, with explicit empty/one-class results and coverage counts. Exercise failures in inner, holdout, and stress rows.

  4. Critical — Final publication is neither atomic nor protected from stale exports. Only checkpoints use atomic replacement. Writing the fusion file before metadata completes lets another chat consume a partial or incompletely validated run; a failed rerun can also leave an older same-name fusion file appearing current. Write immutable run artifacts, finish validation and metadata first, then atomically publish the completed stream with its run identity.

  5. Critical — The provisional stress readout cannot be produced by the listed commands. The pilot runs before the stress scores exist, while manifest mode has no input for saved pilot thresholds. Step 7 therefore cannot report In-the-Wild P_FA at the pilot threshold before launching the full export. Add a postprocessing command that combines the saved selected-mode pilot scores and stress scores, and test that exact workflow without rerunning inference.

  6. Critical — The submission handoff lacks a completion condition. The handoff assigns TSV ownership to the main chat, so M3 should respect that boundary. However, the plan ends without a new TSV/log row or a named blocker. Add an explicit handoff to that owner and require either the resulting immutable TSV plus submissions/log.csv entry, or a recorded blocker before declaring the rung complete.

  7. Suggestion — The global failure threshold hides concentrated failures. Five percent of 21,671 rows permits 1,083 failures—nearly 65% of the test set. Report and gate failure rates separately for inner, holdout, and test splits, and report class/generator coverage so selectively missing difficult examples cannot make validation look better.

  8. Suggestion — Two verification checks conflict with the proposed lifecycle. C14 tries to truncate a checkpoint after successful completion has deleted it; create an interrupted-run checkpoint explicitly. C10 snapshots real output-tree mtimes while another chat may legitimately write there; verify this scorer’s write destinations without asserting that the shared workspace stayed idle.

  9. Suggestion — The standing laundering checks remain untested. Band matching and In-the-Wild evaluation do not establish robustness to codec laundering, telephony, or simulated replay. Add a small paired clean/transformed diagnostic with separate clean-only metrics, or explicitly record these checks as deferred limitations alongside physical replay.