diff --git a/.dockerignore b/.dockerignore index b2c379f..0d6d6ab 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,4 @@ -# Root-level .dockerignore — applied to the build context for the frontend +# Root-level .dockerignore - applied to the build context for the frontend # (which uses the repo root as context). Keep this list aggressive so the # build context stays small. diff --git a/.env.example b/.env.example index b49214f..08189d2 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,6 @@ -# ─── Bach to Basics — environment configuration ───────────────────────────── +# ─── Bach to Basics - environment configuration ───────────────────────────── # Copy this file to .env and customize for your deployment. -# .env is gitignored — never commit secrets. +# .env is gitignored - never commit secrets. # ── Authentication ─────────────────────────────────────────────────────────── diff --git a/.gitignore b/.gitignore index c0dc272..db0d440 100644 --- a/.gitignore +++ b/.gitignore @@ -26,7 +26,7 @@ __pycache__/ *.key secrets.* -# ── Audiveris (large binary — download separately per README) ──────────────── +# ── Audiveris (large binary - download separately per README) ──────────────── backend/bin/*.jar # ── OS metadata ─────────────────────────────────────────────────────────────── diff --git a/NOTICE b/NOTICE index 5a4240a..8bc088e 100644 --- a/NOTICE +++ b/NOTICE @@ -14,45 +14,45 @@ frontend/public/soundfont/sonivox.sf3 Used here as the AlphaTab playback soundfont. ──────────────────────────────────────────────────────────────────────────── -Frontend dependencies (selected — full list in frontend/package.json) +Frontend dependencies (selected - full list in frontend/package.json) ──────────────────────────────────────────────────────────────────────────── - AlphaTab — MPL-2.0 (sheet music renderer) - PixiJS — MIT (WebGL renderer) - Tone.js — MIT (audio scheduling) - smplr — MIT (sample-based instruments) - WebMidi.js — Apache-2.0 (MIDI input) - React — MIT - Zustand — MIT - Vite — MIT - Tailwind CSS — MIT + AlphaTab - MPL-2.0 (sheet music renderer) + PixiJS - MIT (WebGL renderer) + Tone.js - MIT (audio scheduling) + smplr - MIT (sample-based instruments) + WebMidi.js - Apache-2.0 (MIDI input) + React - MIT + Zustand - MIT + Vite - MIT + Tailwind CSS - MIT MPL-2.0 note: AlphaTab is consumed unmodified as an npm dependency. MPL-2.0 -is per-file copyleft — if you modify AlphaTab's own source files you must +is per-file copyleft - if you modify AlphaTab's own source files you must share those changes under MPL-2.0, but the rest of this codebase remains under MIT. ──────────────────────────────────────────────────────────────────────────── -Backend dependencies (selected — full list in backend/requirements.txt) +Backend dependencies (selected - full list in backend/requirements.txt) ──────────────────────────────────────────────────────────────────────────── - music21 — LGPL-3.0 (music theory + MusicXML) - FastAPI — MIT - defusedxml — PSF-2.0 - pianoplayer — MIT (Parncutt fingering algorithm) - yt-dlp — Unlicense (YouTube audio extraction) - pdf2image — MIT - Basic Pitch (optional) — Apache-2.0 (audio → MIDI transcription) + music21 - LGPL-3.0 (music theory + MusicXML) + FastAPI - MIT + defusedxml - PSF-2.0 + pianoplayer - MIT (Parncutt fingering algorithm) + yt-dlp - Unlicense (YouTube audio extraction) + pdf2image - MIT + Basic Pitch (optional) - Apache-2.0 (audio → MIDI transcription) LGPL note (music21): used as a pure Python library import, unmodified. ──────────────────────────────────────────────────────────────────────────── -Optional external tools (NOT bundled — user installs separately) +Optional external tools (NOT bundled - user installs separately) ──────────────────────────────────────────────────────────────────────────── - Audiveris 5.x — AGPL-3.0 (PDF → MusicXML OMR) + Audiveris 5.x - AGPL-3.0 (PDF → MusicXML OMR) Audiveris is invoked as a subprocess if the user places audiveris.jar at backend/bin/. Because it's distributed separately by the user (and is optional), the AGPL obligations apply only to anyone redistributing the -JAR or hosting Audiveris itself — not to this codebase. +JAR or hosting Audiveris itself - not to this codebase. diff --git a/frontend/src/__tests__/AccuracyTracker.test.ts b/frontend/src/__tests__/AccuracyTracker.test.ts index d9823c0..b794e54 100644 --- a/frontend/src/__tests__/AccuracyTracker.test.ts +++ b/frontend/src/__tests__/AccuracyTracker.test.ts @@ -94,7 +94,7 @@ describe("AccuracyTracker", () => { bus.emit("note:on", note); bus.emit("input:note:on", { midi: 60, velocity: 80 }); // correct hit const countBefore = updates.length; - bus.emit("note:off", note); // already hit — should not emit again + bus.emit("note:off", note); // already hit - should not emit again // No new accuracy:update should have been emitted for the note:off expect(updates.length).toBe(countBefore); @@ -247,7 +247,7 @@ describe("AccuracyTracker", () => { bus.emit("transport:seek", { seconds: 5 }); // clears pending const countBefore = updates.length; - bus.emit("note:off", note); // pending was cleared — should be a no-op + bus.emit("note:off", note); // pending was cleared - should be a no-op // No new accuracy:update should have fired expect(updates.length).toBe(countBefore); diff --git a/frontend/src/__tests__/MidiClock.test.ts b/frontend/src/__tests__/MidiClock.test.ts index f48a15f..2e16c42 100644 --- a/frontend/src/__tests__/MidiClock.test.ts +++ b/frontend/src/__tests__/MidiClock.test.ts @@ -116,7 +116,7 @@ describe("MidiClock", () => { mockTransport.seconds = 2; expect(clock.currentSeconds).toBe(5); - // Change multiplier — currentSeconds must remain 5 + // Change multiplier - currentSeconds must remain 5 clock.tempoMultiplier = 0.5; expect(clock.currentSeconds).toBeCloseTo(5); }); diff --git a/frontend/src/__tests__/colorUtils.test.ts b/frontend/src/__tests__/colorUtils.test.ts index 454a467..a84b6fb 100644 --- a/frontend/src/__tests__/colorUtils.test.ts +++ b/frontend/src/__tests__/colorUtils.test.ts @@ -36,7 +36,7 @@ describe("lighten", () => { }); it("handles zero channel values", () => { - // Red only — green and blue stay 0 + // Red only - green and blue stay 0 // Math.round(255 * 0.5) = Math.round(127.5) = 128 = 0x80 expect(lighten(0xff0000, 0.5)).toBe(0x800000); });