Skip to content

Musical checkpoint analysis and a history you can trust - #2

Merged
Mergemat merged 5 commits into
mainfrom
refactor/trustworthy-ui
Oct 5, 2026
Merged

Mergemat merged 5 commits into
mainfrom
refactor/trustworthy-ui

Conversation

@Mergemat

@Mergemat Mergemat commented Oct 5, 2026

Copy link
Copy Markdown
Owner

Why

Echoform's history didn't tell the truth about the song. The old diff never read audio clips at all (on audio tracks they live under MainSequencer/Sample), only counted things ("+3 clips"), and read Live's own bookkeeping as edits. The UI added misleading copy on top (a wrong "saved" badge, "No file changes" on saves that exist because the file changed, an always-on "Live" badge).

What changed

Analysis (server)

  • New Live Set reader (live-set.ts): arrangement clips on MIDI and audio tracks, notes, samples, device chains with parameter values, mixer in dB, automation, tempo, locators.
  • New comparison (set-compare.ts): clips added / removed / moved / edited with bar ranges, note-level diffs, named device, mixer, automation and tempo changes, all in plain words.
  • Ignores Live's bookkeeping: renumbered object ids, warp timings re-derived on tempo changes, auto-renumbered track names, opaque plugin state.
  • Every checkpoint gets a stored summary, computed in the background (existing history included) and recomputed when its previous checkpoint changes. Full comparison is served on demand from GET /api/projects/:id/saves/:saveId/analysis and cached on disk.
  • Removes als-parser, als-diff, smart-naming, the manual "Analyze" flow, and unused cheerio / xml2js. Older state drops setDiff / trackSummary on load.

Interface (desktop)

  • History: one line per save in words, a timeline spine whose nodes show how much changed and on which track (Ableton track colours), larger rows for named saves and saves with audio.
  • Search: find the saves where something changed ("bass", "tempo", "louder").
  • Checkpoint detail: arrangement diff map, piano-roll note diff, every change listed by track, "Continue from here" as the primary action.
  • Honest status and copy throughout; automatic cleanup is now explained per checkpoint ("Safe from automatic cleanup: named, has a note").
  • Fixes: the detail panel could save one checkpoint's name/note onto the next selected one; toasts followed the OS theme; the preload test hung on fresh installs (it required electron, which downloads its binary).
  • Graphite dark theme, Instrument Sans + Geist Mono; 10 unused desktop dependencies removed.

Testing

  • Server: 96 tests pass (new tests for the reader, comparison, background summaries and the state migration).
  • Desktop: 51 tests pass; typecheck, lint and production build clean.
  • The analysis was checked against 20 consecutive real Ableton backups (Live 12.3) to tune out false changes.
  • Not run inside the Electron app; UI was checked as screenshots of the production build fed real analysis data.

Known

  • bun run audit fails on main too: newly published high-severity advisories (sharp, undici, svgo, smol-toml) not in the reviewed baseline. CI will fail on that step until it's addressed.

🤖 Generated with Claude Code

Mergemat and others added 5 commits October 5, 2026 23:49
Requiring "electron" from plain Node resolves the binary path and can
trigger a binary download, which made the preload unit test hang on a
fresh install.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Drop recharts, embla-carousel-react, input-otp, react-day-picker, vaul,
react-resizable-panels, next-themes, date-fns, @tanstack/react-virtual
and @base-ui/react; none were imported.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Flow and copy
- Timeline grouped by day; runs of small-edit saves collapse and can be
  collapsed again. Latest, first, pinned, named, noted and previewed
  checkpoints are never hidden in a group.
- Checkpoint panel leads with "Continue from here" and says the current
  project is not changed; shows whether a checkpoint is safe from
  automatic cleanup and why.
- Header shows the project path, an honest status, and pause/resume/
  retry inline; branches show what they were continued from, and the
  app switches to a new branch once it is created.
- Two-step onboarding that can't get stuck, with a not-a-backup note;
  removes mockups of UI that doesn't exist.
- Watched folders confirm before removal and explain that found
  projects keep recording; storage panel uses plain language.
- Remove misleading copy: "saved" badge, "No file changes", always-on
  "Live" badge, "Protected projects" count, updatedAt as last activity.

Fixes
- Detail panel is keyed by checkpoint, so a name/note being edited can
  no longer be saved onto the next selected checkpoint.
- Toasts no longer follow the OS theme; drop the theme provider and its
  stray "d" hotkey.
- "Analyze changes" surfaces failures.

Cleanup
- One dark token palette with readable text tiers instead of ad-hoc
  white/alpha classes and hex backgrounds.
- Shared project status, path and relative-time helpers replace three
  copies of each; unused store state, UI components and assets removed.
- Rename checkpoint components to match the domain language.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Analysis (server)
- New Live Set reader: arrangement clips on MIDI and audio tracks (audio
  clips were previously never read), notes, samples, device chains with
  parameter values, mixer in dB, automation lanes, tempo, locators.
- New comparison against the previous checkpoint of the same set: clips
  added / removed / moved / edited with bar ranges, note-level diffs,
  named device, mixer, automation and tempo changes, and a one-line
  headline per save.
- Ignore Live's bookkeeping: renumbered object ids, warp timings and
  clip lengths re-derived on tempo changes, auto-renumbered track names,
  opaque plugin state (reported separately, never in the headline).
- Every checkpoint gets a stored summary (headline, song silhouette,
  changed regions) computed in the background, existing history
  included; summaries recompute when the previous checkpoint changes.
- GET /api/projects/:id/saves/:saveId/analysis serves the full
  comparison, cached on disk and removed with its checkpoint.
- Remove als-parser, als-diff, smart-naming, the manual "Analyze" flow,
  and unused cheerio / xml2js; older state drops setDiff/trackSummary.

Interface (desktop)
- History rows draw each checkpoint's song shape on a shared bar scale,
  lit in Ableton track colours where it changed.
- Checkpoint detail shows an arrangement diff map, a piano-roll note
  diff, and every change in plain words, grouped by track.
- Graphite palette where saturated colour comes only from the music;
  Instrument Sans and Geist Mono.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
History list
- Each save is a time and one short line; your own names lead.
- Search box finds the saves where something changed ("bass", "tempo",
  "louder") across every change, names and notes, and shows the change
  that matched.
- Timeline spine: node size shows how much changed, colour shows which
  track (Ableton's track colours); track names in the line use the same
  colour.
- Named saves and saves with audio get a larger row and play button.
- Drop the song-shape strips, bar ruler and sidebar shapes.

Analysis
- Summaries keep every change in words (`changes`) and a short headline.
- Track names drop Live's auto-number ("4-Serum 2" → "Serum 2").
- Volume changes read as louder / quieter.
- ANALYSIS_VERSION 2: stored summaries recompute in the background.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 5, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
echoform Building Building Preview Oct 5, 2026 5:01pm UTC

@Mergemat
Mergemat merged commit 73c0970 into main Oct 5, 2026
2 of 3 checks passed
@Mergemat
Mergemat deleted the refactor/trustworthy-ui branch October 5, 2026 17:02

This branch was successfully deployed

1 active deployment
Preview — 25e532f8 Deployed Oct 5, 2026 by vercel[bot]
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