Context
Found in the BMS spec-compliance audit (finding C-5; also listed as an open TODO in docs/bms-spec.md).
Current behavior
Negative or zero #BPMxx values referenced through channel 08 are dropped by the timing resolver (packages/audio-renderer/src/core/triggers.ts accepts only bpm > 0), so playback continues forward at the previous tempo as if the event did not exist.
Expected behavior
This project's baseline is LR2 behavior: LR2 scrolls backwards on a negative BPM (the chart effectively becomes unplayable past that point), which is the basis of several well-known gimmick charts. beatoraja treats it differently (stop-like), so the policy needs an explicit decision and documentation either way.
Suggested scope
- Decide the policy (LR2 reverse-scroll reproduction vs. documented non-support).
- Implement it consistently in the timing resolver and the renderers (TUI / web), or document the deviation in
docs/bms-spec.md / docs/player-spec.md.
- Add regression coverage with a negative-BPM fixture.
Notes
Time-resolution for reverse scroll is non-trivial (event times become non-monotonic), which is why the audit deferred it. Low priority — affects gimmick charts only.
Context
Found in the BMS spec-compliance audit (finding C-5; also listed as an open TODO in
docs/bms-spec.md).Current behavior
Negative or zero
#BPMxxvalues referenced through channel08are dropped by the timing resolver (packages/audio-renderer/src/core/triggers.tsaccepts onlybpm > 0), so playback continues forward at the previous tempo as if the event did not exist.Expected behavior
This project's baseline is LR2 behavior: LR2 scrolls backwards on a negative BPM (the chart effectively becomes unplayable past that point), which is the basis of several well-known gimmick charts. beatoraja treats it differently (stop-like), so the policy needs an explicit decision and documentation either way.
Suggested scope
docs/bms-spec.md/docs/player-spec.md.Notes
Time-resolution for reverse scroll is non-trivial (event times become non-monotonic), which is why the audit deferred it. Low priority — affects gimmick charts only.