Skip to content

Runaway-tool watchdog + cycle-3 sound-library docs sync - #15

Merged
jamiesun merged 1 commit into
mainfrom
feat/tool-watchdog-and-cycle3-docs
Jul 24, 2026
Merged

Runaway-tool watchdog + cycle-3 sound-library docs sync#15
jamiesun merged 1 commit into
mainfrom
feat/tool-watchdog-and-cycle3-docs

Conversation

@jamiesun

Copy link
Copy Markdown
Contributor

What

Runaway-tool watchdog — defence in depth born from the cycle-3 VPO hang diagnosis (an undecaying patch made sfizz_render write an unbounded WAV, 44+ GB observed):

  • tools::ToolLimits: every external tool run is bounded by a wall-clock timeout and an output-size cap. A breach kills the tool, removes the partial temp file, and reports a structured render_failed. Overrides: SCOREKIT_TOOL_TIMEOUT_SECS / SCOREKIT_TOOL_MAX_OUTPUT_MB.
  • Limits derived from expected audio duration where known; build pushes the MIDI EndOfTrack past the musical end (midi_bytes_padded) so --use-eot renders keep release tails and loop-seal material.
  • profile check probe MIDIs get a bounded EOT; scratch root honors SCOREKIT_TMPDIR.

Cycle-3 docs sync: roadmap baseline (4 certified profiles: open/chamber/symphonic/synth — 235 mappings / 173 unique patches, 0 failed), VPO cumulative-voice hang documented as unrepairable upstream defect, T3 marked realized, docs-site sound-library + profiles pages updated.

Verification

  • cargo test: 97 CLI E2E + unit tests green, incl. new profile_check_kills_runaway_render_at_size_cap_without_residue and profile_check_kills_stuck_render_at_timeout_without_residue (no-residue assertions).
  • cargo fmt --check + cargo clippy --all-targets clean.
  • Acceptance matrix updated in the same change (rule 5).

Watchdog (defence born from the cycle-3 VPO hang diagnosis, where an
undecaying patch wrote an unbounded WAV):
- tools::ToolLimits bounds every external tool run by wall-clock timeout
  and output-size cap; breach kills the tool, removes the partial temp
  file, and surfaces a structured tool failure (render_failed in
  profile check reports). Env overrides: SCOREKIT_TOOL_TIMEOUT_SECS,
  SCOREKIT_TOOL_MAX_OUTPUT_MB.
- Limits derived from expected audio duration where known: probe MIDIs
  get bounded EOT (16 probe notes + release pad), build scenes get
  midi_bytes_padded EOT past the musical end so --use-eot renders still
  contain release tails / loop-seal material.
- profile check scratch root honors SCOREKIT_TMPDIR (relocate large
  probe renders to another disk without global TMPDIR).
- E2E: runaway render killed at size cap, stuck render killed at
  timeout, both without residue; acceptance matrix updated (rule 5).

Docs sync for sound-library cycle 3:
- roadmap baseline: 4 certified profiles (open/chamber/symphonic/synth),
  235 mappings / 173 unique patches, 0 failed; VPO cumulative-voice hang
  documented as unrepairable upstream defect; T3 realized via the
  chamber/symphonic pair.
- docs-site: profile list, muldjord GM-remap repair, VPO defect notes,
  watchdog + SCOREKIT_TMPDIR documentation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@jamiesun
jamiesun merged commit b9a8201 into main Jul 24, 2026
1 check 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