Repository navigation
Conversation
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configuration
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Decoded notes now share one copy of each instrument and sample name, cutting a 7,500-note project from about 1.1 MB to 0.2 MB of heap. Saves check the legacy single-project layout once per owner instead of parsing the selected file on every save and checkpoint. The sample-name pattern is compiled once, and publishing checks audibility without building a full timeline. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cached projects already match their files except for a final take that is still saving or whose write failed. Disconnects and shutdown now retry only those, instead of rewriting every cached project and risking the shutdown timeout. A disconnect evicts a current project from memory. "Take saved" is announced only for finished takes, not for these saves. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The library, /music projects, the 36-project limit and deletion now use project summaries (title, tracks, length, pending slot) instead of decoding every project on the server thread. Summaries are cached in a per-owner library.index file keyed by each project file's size and modification time. save() updates it, and listing rebuilds missing, stale or damaged entries, so files changed outside the studio stay correct. With 36 projects of 7,500 notes, listing drops from about 1.9 s and 40 MB to under 5 ms. The first listing after upgrading builds the index once. The delete confirmation keeps a summary rather than the whole project, and rejects the deletion if the summary changed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Published editions are kept forever because discs reference them, and republishing over a recorded disc added a new file every two clicks. Edition IDs are now derived from their content, so republishing unchanged music reuses the earlier edition. A configurable publish-cooldown-seconds (default 30, 0 disables) limits how often a player can publish. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Jukebox playback reads the cheap block type every tick and the record, which copies the block state and item, once a second. Ejecting or breaking the jukebox still stops playback immediately. - The jukebox click handler checks the block type before getState(), so right-clicking chests no longer copies their inventories. - ItemsAdder station lookups resolve their reflective methods once instead of on every right-click and menu refresh. - Saving serializes the project once for both copies. - Startup removes studio-*.tmp files left by an interrupted write. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes bugs and performance problems found while reviewing the multitrack studio released in v3.3.0, focused on server-thread stalls, memory use and disk growth. One commit per topic.
Correctness
Memory and server-thread time
Measured with 36 projects of 7,500 notes (TF Main limits):
/music projects, the 36-project limit and deletion read a per-ownerlibrary.indexof project summaries instead of decoding every project. Listing goes from about 1.9 s and 40 MB to under 5 ms. The index is keyed by file size and modification time and rebuilds itself when missing, stale or damaged. The first listing after upgrading builds it once.getState(), and ItemsAdder station lookups cache their reflective methods.Disk
publish-cooldown-secondsinstudio.yml(default 30, 0 disables).studio-*.tmpfiles left by an interrupted write.Behaviour changes
Validation
mvn clean verify: 298 tests passed; 100% instruction and branch coverage, with no production exclusions.🤖 Generated with Claude Code