Skip to content

Paste a set list, get your week's bench back - #55

Open
Dandiggas wants to merge 7 commits into
mainfrom
paste-set-import
Open

Paste a set list, get your week's bench back#55
Dandiggas wants to merge 7 commits into
mainfrom
paste-set-import

Conversation

@Dandiggas

Copy link
Copy Markdown
Owner

What

The weekly front door for set-list musicians — the #1 survivor of the adversarial feature review:

  • Paste the MD's raw text (WhatsApp/email/PCO export) → deterministic regex parser (numbered/bulleted lines, /-//parens/in G formats, minor keys, headers skipped — no AI, no network).
  • Fuzzy match against your own track history (exact → whole-word prefix → difflib, min-6-char guard) — repeats carry forward YouTube source, BPM, notes, last speed, and named loop points.
  • Editable preview with carry-over badges (toggleable per song), then one click creates the week's session in set order.
  • Track.called_key — the key a song is called in, separate from the recording (the schema previously had no key concept).
  • none source 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.
  • README documents the feature and the two new endpoints.

Files are never shared between tracks (post_delete would orphan the copy) — file-backed matches carry metadata only.

Test plan

  • 31 new backend tests (parser formats, matching, cross-user isolation, source-track ownership rejection, key validation) — 107 backend green
  • 10 new jest (ImportSetCard flow incl. badge toggle/row removal/error paths; AddSourceCard normalize/attach/reject) — 79 frontend green
  • tsc clean (7 pre-existing test-file errors untouched)
  • Verified live on a real stack: paste → preview matched last week's "Way Maker" → created session carried its loop points + note, metronome pre-loaded at the carried BPM; none→youtube attach mounts the full bench
  • Ships migration 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

Dandiggas and others added 7 commits July 9, 2026 23:53
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
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