Paste a set list, get your week's bench back - #55
Open
Dandiggas wants to merge 7 commits into
Open
Conversation
The weekly front door for set-list musicians: paste the MD's WhatsApp/email text, The Shed parses song+key pairs (regex only — numbered/bulleted lines, -/–/—/parens/'in G' formats, headers skipped), fuzzy-matches against your own track history (exact -> whole-word prefix -> difflib), and previews the week: carry-overs vs new songs, editable, badge-toggleable. Confirm creates the session in set order; matched YouTube tracks carry source, BPM, note, last-used speed and named loop points forward; file-backed matches carry metadata only (files are never shared — the delete signal would orphan them). Foundations added: Track.called_key (the key a song is *called* in, distinct from the recording) and a 'none' source type for songs awaiting a source. Tests: 31 new backend (parser formats, matching, cross-user isolation, ownership rejection, key validation) — 107 backend total; 6 new jest — 75 total; tsc clean (7 pre-existing test-file errors untouched). Verified live: real paste -> preview -> create -> carried loop points and notes in the workbench, metronome pre-loaded at the carried BPM. Claude-Session: https://claude.ai/code/session_01MrccodQu6ry7Hw1aL9BPcu
Imported songs arrive without a source; AddSourceCard now renders in the track pane for source-less tracks — paste the YouTube version (the hint names the called key so you grab the right one), it normalizes the URL and PATCHes the same track, so the song keeps its key, notes, and set position while the player, loops, and takes unlock in place. YouTube URL helpers moved to lib/youtube.ts (deduplicated from AddTrackForm). 4 new jest tests (79 total green), tsc clean. Verified live: none -> youtube transition with the full bench mounting. Claude-Session: https://claude.ai/code/session_01MrccodQu6ry7Hw1aL9BPcu
Dandiggas
added a commit
that referenced
this pull request
Jul 12, 2026
Co-Authored-By: WOZCODE <contact@withwoz.com> Claude-Session: https://claude.ai/code/session_01MrccodQu6ry7Hw1aL9BPcu
Dandiggas
force-pushed
the
paste-set-import
branch
from
July 16, 2026 08:58
4e2462a to
b915eb7
Compare
Dandiggas
added a commit
that referenced
this pull request
Jul 16, 2026
Dandiggas
force-pushed
the
paste-set-import
branch
from
July 16, 2026 09:18
b915eb7 to
babf063
Compare
Dandiggas
force-pushed
the
main
branch
2 times, most recently
from
July 16, 2026 09:51
e864522 to
fb9b7c8
Compare
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.
What
The weekly front door for set-list musicians — the #1 survivor of the adversarial feature review:
–/-/—/parens/in Gformats, minor keys, headers skipped — no AI, no network).Track.called_key— the key a song is called in, separate from the recording (the schema previously had no key concept).nonesource type + AddSourceCard — imported songs without a source hold name/key/position; paste a YouTube link in the track pane to unlock the player/loops/takes in place.Files are never shared between tracks (post_delete would orphan the copy) — file-backed matches carry metadata only.
Test plan
session/0012(two additive fields) — run migrations on deploy; local Docker dev needs an image rebuild🧙 Built with WOZCODE
https://claude.ai/code/session_01MrccodQu6ry7Hw1aL9BPcu