Skip to content

fix: restore boundary-B safety mechanism deleted by #213's merge - #220

Merged
thorwhalen merged 1 commit into
mainfrom
restore-boundary-b-timescale
Sep 22, 2026
Merged

thorwhalen merged 1 commit into
mainfrom
restore-boundary-b-timescale

Conversation

@thorwhalen

Copy link
Copy Markdown
Owner

What broke

PR #210 (074b88d, merged 2026-09-09T08:02) shipped the boundary-B mechanism (Clock.timeScale, realtimeOutputAllowed, the Applier publishing it, and all three synth-role nodes consulting it — "never silently pitch-shift" at a non-1x clock speed).

PR #213 (9150a02, merged two hours later the same day, "the score pipeline") is unrelated but its diff deletes every piece of it — src/dag/timescale.ts, test/timescale_boundary.test.ts, the timeScale property on Clock/BatchClock/RealtimeClock, the publish line in Applier, the re-export in dag/index.ts, and the realtimeOutputAllowed guard in webaudio-synth, midi-out, and lyria. Nothing in #213's own description touches any of this — it has the shape of a bad rebase/merge silently clobbering a sibling PR's content, same failure mode as i2mint/wads#97.

Full diagnosis in #219.

Fix

Restores the deleted code verbatim from 074b88d. It reverse-applies cleanly against current main, and nothing landed since (#213's own score node, #214 delayed edges, #215 source-node splits) touches these files — no reconciliation needed beyond re-adding what was removed.

Verification (local)

  • npm run typecheck — clean
  • npm test — 1696/1696 tests, 139/139 files, including the restored 9-test test/timescale_boundary.test.ts
  • npm run build — clean

Self-reviewed only (no independent refute-review sub-agent was available this pass — this is a low-risk pure restoration of previously-shipped, previously-reviewed code, not novel behavior). Flagging per the review rule so a post-merge review can be queued if wanted.

Closes #219

🤖 Generated with Claude Code

https://claude.ai/code/session_011HSBVhDjRU4apSLcRkavv9

PR #210 (074b88d, merged 2026-09-09T08:02) shipped `Clock.timeScale`,
`realtimeOutputAllowed` (src/dag/timescale.ts), the Applier publishing the
scale onto engine resources, and all three synth-role nodes
(webaudio-synth, midi-out, lyria) consulting it before producing real-time
output — the mechanism enforcing "never silently pitch-shift" at a
non-1x clock speed.

PR #213 (9150a02, merged two hours later the same day, "the score
pipeline") is unrelated to any of this but its diff deletes every piece
of it: timescale.ts, test/timescale_boundary.test.ts, the timeScale
property on Clock/BatchClock/RealtimeClock, the TIME_SCALE_KEY publish
in Applier, the re-export in dag/index.ts, and the realtimeOutputAllowed
guard in all three synth nodes. Nothing in #213's description mentions
touching any of this — it has the shape of a bad rebase/merge silently
clobbering a sibling PR's content (the same failure mode as
i2mint/wads#97).

Restored verbatim from 074b88d; reverse-applies cleanly against current
main and nothing landed since (#213's own score node, #214 delayed
edges, #215 source-node splits) touches these files, so there is no
reconciliation needed beyond re-adding what was removed.

Verified: typecheck, full test suite (1696 tests / 139 files, including
the restored 9-test timescale_boundary.test.ts), and build all green
locally.

Closes #219

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@thorwhalen
thorwhalen merged commit 02660c8 into main Sep 22, 2026
2 checks passed
@thorwhalen
thorwhalen deleted the restore-boundary-b-timescale branch September 22, 2026 16:35
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.

Boundary B (#210's realtimeOutputAllowed / Clock.timeScale) was silently deleted by #213's merge

1 participant