From 330a6983973dc2043bb1fa0f0ba67fa07ae50685 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sat, 10 Oct 2026 14:08:49 -0400 Subject: [PATCH] Progress docs: target-app parity, gaps, alpha gate, readiness by audience (#155) * Progress docs to the craftrules standard; full re-measure against Pro Tools 2026.4.1 Stage: alpha. Menu breadth 482/512 (94.1%, measured), feature breadth ~70%, ready for real work ~40%; ~350-570 agent-hours to beta, ~950-1,450 to full parity, calibrated on this repo's PR history. - ROADMAP.md rewritten: stage banner, two numbers, dimension/feature/language tables - docs/target-app-parity.md: authoritative assessment (area table moved from ROADMAP) - docs/gaps.md: 22 ranked gaps with evidence and estimates - docs/roadmap.md: milestones, current focus, beta plan - docs/ui-, file-format-, hardware-, plugin-, localization-parity.md: new checklists - docs/parity.md -> docs/parity-checklist.md (generated by cargo xtask parity) - architecture.md: video, vst3-host, au-host crates; device I/O limits Co-Authored-By: Claude Opus 5.5 * Stage: pre-alpha under the core-workflow gate Add the alpha gate to docs/roadmap.md: interface recording at a chosen buffer size, MIDI recording, and session interchange with Pro Tools fail, so the stage moves from alpha to pre-alpha (~5 points and ~110-180 agent-hours to alpha). Mark the alpha blockers in docs/gaps.md; update ROADMAP.md, target-app-parity.md and README. Co-Authored-By: Claude Opus 5.5 * Add mainstream-practitioner and essentials-user readiness numbers Mainstream practitioner ~36% (weekly-area depth 50.6% x 0.90 interaction x 0.92 stability x 0.85 file exchange) and essentials user ~57% (core-feature depth 72.4% x 0.90 launch/stability x 0.90 discoverability x 0.97 files), with written weights, discounts and GitHub user evidence. Full ready-for-real-work checked against its written dimension weights (40.6%); unchanged at ~40%, stage unchanged. Co-Authored-By: Claude Opus 5.5 * Readiness by audience: hours to ~95% for full, mainstream and essentials Full ~40% / 950-1,450 h, mainstream ~36% / 380-600 h, essentials ~57% / 110-200 h, calibrated on this repo's PR history. The full number is already an additive weighted sum over the written dimension table; method unchanged. Co-Authored-By: Claude Opus 5.5 --------- Co-authored-by: Claude Opus 5.5 --- AGENTS.md | 6 +- README.md | 13 +- ROADMAP.md | 182 +++++++++++------ apps/soundcraft-cli/src/main.rs | 2 +- docs/architecture.md | 24 ++- docs/file-format-parity.md | 83 ++++++++ docs/gaps.md | 200 +++++++++++++++++++ docs/hardware-parity.md | 75 +++++++ docs/localization-parity.md | 42 ++++ docs/{parity.md => parity-checklist.md} | 4 +- docs/plugin-parity.md | 61 ++++++ docs/roadmap.md | 90 +++++++++ docs/target-app-parity.md | 252 ++++++++++++++++++++++++ docs/ui-parity.md | 67 +++++++ xtask/src/main.rs | 2 +- 15 files changed, 1036 insertions(+), 67 deletions(-) create mode 100644 docs/file-format-parity.md create mode 100644 docs/gaps.md create mode 100644 docs/hardware-parity.md create mode 100644 docs/localization-parity.md rename docs/{parity.md => parity-checklist.md} (94%) create mode 100644 docs/plugin-parity.md create mode 100644 docs/roadmap.md create mode 100644 docs/target-app-parity.md create mode 100644 docs/ui-parity.md diff --git a/AGENTS.md b/AGENTS.md index 629b9fa..e0f7c70 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,7 +6,7 @@ Standards and learnings shared across the crafting apps live in `../../craftrule ## Start every session here 1. Read `plan/STATUS.md` (current milestone, next task) and `plan/execution-plan.md`. `plan/` is gitignored (local only). Behaviour reference: `plan/protools/` (observed menu tree `menus-clean.txt` and screenshots; never committed). -2. Read `ROADMAP.md` (committed) for status, milestones and the parity estimate. +2. Read `ROADMAP.md` (committed) for stage, status and the parity numbers; pick work from `docs/gaps.md`. The progress docs follow craftrules `standards/progress-docs.md`: `docs/target-app-parity.md` (assessment), `docs/gaps.md`, `docs/roadmap.md`, `docs/ui-parity.md`, `docs/file-format-parity.md`, `docs/hardware-parity.md`, `docs/plugin-parity.md`, `docs/localization-parity.md`; `docs/parity-checklist.md` is generated. Update their timestamps and revision history when you change them. 3. Work autonomously; don't stop to ask unless a decision is genuinely the user's. ## ⚠️ Assets: the absolute rule @@ -51,7 +51,7 @@ Nothing below L6 depends on egui/eframe/winit/rfd. The UI is thin: panels read e ## Everything is a command User-visible behaviour = a command in `crates/engine/src/cmd/*` (id, label, menu path, shortcut, params doc, `enabled`, `run`) + tests. UI-only commands (windows, dialogs) live in `crates/ui-egui/src/menus.rs` (`UI_COMMANDS`). Menus, shortcuts, the CLI, the control channel and MCP all dispatch the same ids. Programmatic calls never open dialogs; only menu-style invocation (`ui.menu.invoke`) does. New commands go in a new module with its own `specs()`, registered by one line in `cmd/mod.rs`. -Parity is measured, not guessed: `crates/engine/catalog/menus.txt` lists the incumbent's menu leaves (names only). `cargo xtask parity` writes `docs/parity.md`; a test enforces a floor that only rises. +Parity is measured, not guessed: `crates/engine/catalog/menus.txt` lists the incumbent's menu leaves (names only). `cargo xtask parity` writes `docs/parity-checklist.md` (generated; the hand-written assessment is `docs/target-app-parity.md`); a test enforces a floor that only rises. ## Running and looking at the app - `cargo run --release -p soundcraft -- --demo --control 0` (demo session + control channel on a free port; the port is printed). @@ -69,7 +69,7 @@ Parity is measured, not guessed: `crates/engine/catalog/menus.txt` lists the inc Push to the `release` branch to build signed installers for macOS (universal DMG), Windows (x64/x86 MSI + zip), Linux (AppImage, deb, rpm, tar.gz, Flatpak manifest), FreeBSD and Web (wasm zip). Version: `cargo xtask version [set X.Y.Z]`. See `docs/release-playbook.md` and craftrules `release/playbook.md`. ## Roadmap -`ROADMAP.md` (committed) tracks status, milestones and estimates. Update it whenever a milestone lands. +`ROADMAP.md` (committed) is the one-page summary (stage, numbers, dimensions, languages, progress log); milestones live in `docs/roadmap.md`. Update both whenever a milestone lands, and close or shrink the matching `docs/gaps.md` entry. ## Contributor credits (About window) diff --git a/README.md b/README.md index 89ec40e..add0398 100644 --- a/README.md +++ b/README.md @@ -236,10 +236,15 @@ and layering checks and the WebAssembly build. ## Status and roadmap -SoundCraft is **pre-alpha, and close to its first alpha**: it covers 94 % of the incumbent's menu -items and roughly two thirds of its features in depth. The core works and is fun to use, and plenty is still missing. The -honest status, what's next and our effort estimates are in [`ROADMAP.md`](ROADMAP.md); the -menu-by-menu comparison is in [`docs/parity.md`](docs/parity.md). Bug reports and wish lists are +SoundCraft is **pre-alpha**: it covers 94 % of the incumbent's menu items (measured), about 70 % of +its features by presence, and is roughly 40 % of the way to replacing it for real work: record, +edit, mix and bounce work end to end, but choosing an audio interface and buffer size, +recording MIDI from a controller and session interchange (AAF/OMF) are still missing, and those +are the alpha checklist. Translations are missing too. The status, the stage and our effort +estimates are in [`ROADMAP.md`](ROADMAP.md); the full assessment is in +[`docs/target-app-parity.md`](docs/target-app-parity.md), the ranked list of what's missing in +[`docs/gaps.md`](docs/gaps.md), and the menu-by-menu comparison in +[`docs/parity-checklist.md`](docs/parity-checklist.md). Bug reports and wish lists are very welcome, in the issues or on Discord. ## Downloads diff --git a/ROADMAP.md b/ROADMAP.md index a89da3f..7ace53f 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,54 +1,114 @@ # SoundCraft roadmap +**Stage: pre-alpha** · next: alpha, ~5% and ~110–180 h away (the alpha gate's three failing workflows) + +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (readiness by audience with hours to ~95 %) · **Target:** Avid Pro Tools Ultimate 2026.4.1 + SoundCraft is a clean-room, pure-Rust digital audio workstation that aims at full parity with -Avid Pro Tools, and then beyond it: faster, open, scriptable and agent-controllable. This file is -the honest status: what works today, what is missing, and how far we are. +Avid Pro Tools, and then beyond it: faster, open, scriptable and agent-controllable. This page is +the one-page summary; the detail is in [`docs/target-app-parity.md`](docs/target-app-parity.md) +(assessment), [`docs/gaps.md`](docs/gaps.md) (ranked work list), [`docs/roadmap.md`](docs/roadmap.md) +(milestones and beta plan) and [`docs/parity-checklist.md`](docs/parity-checklist.md) (generated +menu checklist). -## Where we are (2026-10-07) +## Headline numbers -| Measure | Value | How | +| Number | Value | Kind | |---|---|---| -| Menu-catalog parity (engine + UI) | **482 / 512 menu items (94 %)**; engine alone 397 / 512, see [`docs/parity.md`](docs/parity.md) | `cargo xtask parity` compares the incumbent's 512 menu leaves (names observed black-box) with our command registry. Most of what is left is Avid's online services (sign-in, cloud projects, collaboration, Splice, Learn), Dolby Atmos-specific items, HEAT and ARA | -| Estimated overall feature parity | **~65 %** | judgement across the areas below, weighted by how much working engineers rely on them. Menu items are only the surface; depth (editing feel, plugin catalogue, MIDI and score editing, video) is where the gap is | -| Distance to an **alpha** | **~85 % there, ~12–18 wall-clock hours** of Claude Opus 5.5 work | see [Alpha](#alpha) below | -| Distance to **100 % parity** | **~110–150 wall-clock hours** of Claude Opus 5.5 work with a single agent; roughly 40–55 hours with 3–4 agents in parallel (the last three features in this session were built in parallel this way) | sum of the per-area estimates below | +| Menu breadth | **482 / 512 Pro Tools menu leaves (94.1 %)**; engine alone 397 / 512 | measured (`cargo xtask parity` + UI-layer aliases) | +| Feature breadth | **~70 %** | estimated (menus plus plugins, hardware, formats, immersive, cloud) | +| **Ready for real work** | **~40 %** | estimated, weighted by dimension | +| Mainstream practitioner (tracking/mixing engineer) | **~36 %** | estimated: 50.6 % weekly-area depth × 0.90 interaction × 0.92 stability × 0.85 file exchange ([how](docs/target-app-parity.md#mainstream-practitioner-and-essentials-user)) | +| Essentials user (song or podcast, defaults) | **~57 %** | estimated: 72.4 % core-feature depth × 0.90 launch/stability × 0.90 discoverability × 0.97 files ([how](docs/target-app-parity.md#mainstream-practitioner-and-essentials-user)) | +| Remaining to alpha | **~110–180 Opus 5.5 agent-hours** (the failing gate rows) | estimated, calibrated on PR history | +| Remaining to beta | **~350–570 Opus 5.5 agent-hours** (includes the alpha work; ~60–70 % parallelizable) | estimated | +| Remaining to full parity | **~950–1,450 Opus 5.5 agent-hours** | estimated | -### Area by area +| Audience | Ready % | Agent-hours to ~95 % | Work that dominates | +|---|---:|---:|---| +| Full target (ready for real work) | ~40 % | ~950–1,450 h | Hardware, the stock plugin catalogue, AAF/OMF and immersive, localization, fidelity | +| Mainstream practitioner | ~36 % | ~380–600 h | Interface and MIDI recording, AAF/OMF, stock-plugin depth, core-path bugs | +| Essentials user | ~57 % | ~110–200 h | Launch and platform fixes, onboarding, effect panels and presets, MP3/AAC export | -| Area | Status | Parity | Remaining (h) | -|---|---|---:|---:| -| Session model, save/load, undo | Tracks, playlists, clips, fades, clip gain, automation, markers, groups, busses, video; JSON `.scraft` + Audio Files folder; plugin state; autosave; copy-on-write undo with gesture coalescing | 85 % | 8 | -| Audio file I/O | WAV/BWF/RF64, AIFF/AIFC, FLAC (read/write); MP3, OGG, AAC, ALAC, CAF (read); peaks. Whole files are decoded into memory: disk streaming for very long sessions is still to do | 70 % | 12 | -| Editing | Slip/Shuffle/Spot/Grid, cut/copy/paste/clear/duplicate/repeat/shift, Paste Special (merge MIDI, markers, clip gain/effects), separate/heal/trim/consolidate/strip silence, fades & crossfades, nudge, playlists with comping, every tool gesture, edit groups, clip groups (and `.scgrp` import/export) | 75 % | 20 | -| Mixer & routing | Faders, pan, mute/solo (SIP, implicit solo), sends pre/post, busses, aux inputs, master faders, VCAs, routing folders, 10 inserts, plugin delay compensation, clip effects, preamp/instrument/object views | 75 % | 15 | -| Automation | Breakpoint lanes for volume/pan/mute/sends/plugin params, trim automation; live Write/Touch/Latch passes; write/thin/glide/convert/coalesce. Surround-pan automation is still to do | 60 % | 15 | -| Plugins (built-in) | 26 original processors + 2 instruments, AudioSuite offline processing for the whole AudioSuite menu | 45 % | 30 | -| Third-party plugins | CLAP, VST3 and Audio Units (macOS): audio, parameters, latency, notes, state saved in sessions, instances created/destroyed off the audio thread, editors (floating CLAP GUIs, VST3 views on macOS, verified with Melodyne). Missing: AU editors, embedded CLAP GUIs, VST3 editors on Windows/Linux, ARA | 80 % | 10 | -| MIDI & notation | MIDI/instrument tracks, SMF import/export, MIDI editor (piano roll, velocity, rubber-band select, keyboard transpose/move), event list, step input, quantize/transpose/velocity/duration, real-time properties, Score Editor, MusicXML export (Sibelius) and printable SVG score | 55 % | 20 | -| Recording | Input capture, punch in/out (selection, on the fly, pre/post-roll), loop record into playlists, input monitoring through the channel strip, autosave and recovery | 60 % | 10 | -| Elastic Audio / TCE / Beat Detective | Pitch-preserving warp on Elastic tracks, TCE to timeline, conform to tempo, Beat Detective and Identify Beat windows; audio-to-MIDI pitch detection | 45 % | 15 | -| Surround | Main and bus formats from stereo to 9.1.6 and Ambisonics, surround panner with divergence/centre/LFE/height, ITU fold-down, multichannel bounce, Renderer window, object/bed routing | 60 % | 12 | -| Video | Picture track with thumbnails, Video and Video Universe windows, H.264 (Baseline/Main/High), ProRes (all flavours) and Motion JPEG decoders in pure Rust, sync offset, relinking. Missing: HEVC/AV1/DNx, timecode-track placement, video export | 55 % | 15 | -| UI fidelity | Edit + Mix windows, toolbar, rulers, track headers, menus for the whole catalog (macOS system menu bar), floating windows, dialogs (every file command has a path prompt), command palette | 70 % | 20 | -| Agent control | CLI, JSON control channel, MCP server (headless + bridged), offscreen UI renders | 90 % (ahead of the incumbent) | 3 | -| Release engineering | Signed macOS universal, Windows x64/x86, Linux AppImage/deb/rpm/tar/Flatpak, FreeBSD, Web/WASM on every push to `release` | 80 % | 3 | +Hours are Opus 5.5 agent wall-clock hours, calibrated on this repo's PRs; 60–70 % parallelizes. +Detail: [target-app-parity.md](docs/target-app-parity.md#readiness-by-audience). -## Alpha +**Why pre-alpha:** the core-workflow gate in [docs/roadmap.md](docs/roadmap.md#alpha-gate) fails. +Editing, mixing, bouncing, and saving and reopening work end to end. But a Pro Tools user can't +record from a chosen audio interface at a chosen buffer size (only the default devices, a fixed +512-sample block, and takes held in RAM). They can't record MIDI from a keyboard (there is no +MIDI device layer). And they can't bring a session in or hand one back (no AAF/OMF/`.ptx`). +Readiness (~40 %) sits right at the alpha bar, but a gate failure keeps the app pre-alpha. The +2026-10-07 estimate ("~65 % overall, 110–150 h to 100 %") counted feature presence. This one +measures readiness and adds hardware, localization and field bug reports. -An alpha is a build people can download, open the demo or their own audio in, record, edit, mix -and bounce without crashes or lost work. Feature-wise SoundCraft is past that bar; what is left is -shipping and hardening: +## By dimension -1. **Publish the repository and cut the first release** (needs a decision from the maintainers: - the GitHub repo, the release secrets, and a push to the `release` branch). The pipelines exist - but have never run end to end. ~2 h once unblocked, mostly fixing what the first run finds. -2. **Platform smoke tests** of the installers on Windows, Linux and FreeBSD (only macOS has been - exercised by hand). ~3–4 h. -3. **Disk streaming** of long sources, so an hour-long multitrack session does not need all of its - audio in RAM. ~5–6 h. -4. **A hands-on QA pass** in the live app: recording on real interfaces, long sessions, plugin-heavy - mixes, save/reopen loops. ~3–4 h. -5. **Docs**: a short user guide next to the existing agent/CLI docs. ~1 h. +| Dimension | Ready | Remaining (h) | Doc | +|---|---:|---:|---| +| Features | ~45 % | 520–810 | [target-app-parity.md](docs/target-app-parity.md#feature-areas) | +| UI/UX fidelity | ~55 % | 60–100 | [ui-parity.md](docs/ui-parity.md) | +| File formats | ~40 % | 70–120 | [file-format-parity.md](docs/file-format-parity.md) | +| Hardware (interfaces, MIDI, surfaces, sync) | ~12 % | 110–180 | [hardware-parity.md](docs/hardware-parity.md) | +| Localization | ~12 % (1 of Pro Tools' 8 languages) | 70–110 | [localization-parity.md](docs/localization-parity.md) | +| Performance | ~35 % (unmeasured) | 40–70 | [hardware-parity.md](docs/hardware-parity.md#performance) | +| Stability | ~45 % | 50–80 | [gaps.md](docs/gaps.md) | +| Platforms | ~65 % (5 platforms built, macOS exercised) | 20–40 | [gaps.md](docs/gaps.md) | +| Ecosystem / plugins | ~30 % | in Features + Hardware | [plugin-parity.md](docs/plugin-parity.md) | +| AI features | ~5 % | 30–50 | [gaps.md](docs/gaps.md) | +| Agent control | ahead of Pro Tools | 3 | [control-protocol.md](docs/control-protocol.md), [mcp.md](docs/mcp.md) | + +## Features + +| Area | Breadth | Ready | Remaining (h) | +|---|---:|---:|---:| +| Recording and monitoring | 75 % | 40 % | 40–60 | +| Editing | 92 % | 65 % | 40–60 | +| Mixing and routing | 85 % | 60 % | 35–50 | +| Automation | 80 % | 55 % | 20–30 | +| Built-in plugins and AudioSuite | 40 % | 35 % | 80–120 | +| Third-party plugin hosting | 70 % | 45 % | 40–60 | +| MIDI and instruments | 70 % | 30 % | 50–80 | +| Score and notation | 60 % | 35 % | 20–30 | +| Elastic Audio, TCE, Beat Detective | 70 % | 35 % | 40–60 | +| Surround and immersive | 55 % | 35 % | 50–80 | +| Video and post | 60 % | 40 % | 40–60 | +| Session, file management, interchange | 55 % | 35 % | 60–100 | +| Collaboration and cloud (Avid services) | 0 % | 0 % | owner decision | +| Agent control | 100 % | 100 % | 3 | + +Weights and evidence per row: [target-app-parity.md](docs/target-app-parity.md#feature-areas). + +## Languages + +| Language | Code | Status | Translated | +|---|---|---|---:| +| English | en | full | 100 % | +| Simplified Chinese | zh-Hans | none | 0 % | +| Spanish | es | none (PR #143 open) | 0 % | +| Hindi | hi | none | 0 % | +| Arabic | ar | none | 0 % | +| French | fr | none (PR #143 open) | 0 % | +| Portuguese | pt | none | 0 % | +| Indonesian | id | none | 0 % | +| Japanese | ja | none | 0 % | +| German | de | none | 0 % | +| Korean | ko | none | 0 % | +| Vietnamese | vi | none | 0 % | + +Other languages shipped: 0. Detail: [localization-parity.md](docs/localization-parity.md). + +## Upcoming + +Ranked; the alpha gate, the alpha checklist and the beta plan are in [docs/roadmap.md](docs/roadmap.md). + +1. **Alpha blocker:** audio interfaces: device and buffer-size choice, duplex stream, ASIO; record to disk (G-01, G-06). 35–55 h. +2. **Alpha blocker:** MIDI devices: record from keyboards, play instruments live, output (G-02). 20–35 h. +3. **Alpha blocker:** AAF/OMF import and export (G-03). 50–90 h. +4. macOS plugin entitlement (#153), then AU editors (G-05). 1 h for the entitlement (needed for the mix row), then 15–25 h. +5. Land the open bug-fix PRs and clear the correctness backlog (G-04). 15–25 h. +6. PR CI running `cargo xtask ci` on three OSes (G-14). 5–10 h. +7. Fidelity harness against Pro Tools (G-07). 20–30 h. ## Robustness @@ -57,22 +117,34 @@ command parameters through the engine and mixer; they have caught fade, overflow unbounded-allocation bugs. Every command also runs with empty parameters on empty and demo sessions. Hosted plugins live in isolated unsafe crates (`clap-host`, `vst3-host`, `au-host`) and are created, loaded and destroyed off the audio thread. The video decoders survive hundreds of -mutated and truncated movies. +mutated and truncated movies. Field reports from the first public week are tracked in +[gaps.md](docs/gaps.md) (G-04). -## Current focus +## Progress log -1. The alpha list above. -2. Surround-pan automation; AU editor views. -3. Built-in plugin depth (more processors, better UIs). -4. MIDI and score editing depth. +- **2026-10-10** — Stage re-normalized to **pre-alpha** by the core-workflow gate (interface recording, MIDI recording and session interchange fail). Full re-measure against Pro Tools Ultimate 2026.4.1 and the standard + progress-docs set (this page, target-app parity, gaps, roadmap, UI/format/hardware/plugin/ + localization parity). v0.4.0 released. Community fixes: Cut All Automation, snap to neighbours, + tempo stretch, I/O Setup, clip export names, menu-only dialogs, playback stop on new session. +- **2026-10-09** — Light theme and live system appearance, clip-gain fader and nudge, missing-media + warnings, session audio health, malformed-JSON and encoder-extension checks in the CLI, macOS + system menu bar, Windows DX12 default, Linux fontconfig, metronome click in playback. +- **2026-10-08** — v0.2.x–v0.3.0 released (Flatpak, AppImage zsync); VST3 quit crash fixed; + Ctrl-as-Cmd shortcuts on Windows/Linux; plugin menus by vendor, AU inserts, instrument picker; + rotating log file; branded DMG. +- **2026-10-07** — Repository published; About window credits; release CI on macOS runners. +- **2026-10-06** — Video track, Audio Unit hosting, plugin state and editors, Renderer; Mix + window views; score export and print; surround mixing; VST3 hosting; property tests. +- **2026-10-05** — Foundation crates, Edit and Mix windows, playback, CLI/MCP, parity report, + recording and punch, CLAP hosting, Elastic Audio, Beat Detective, release pipeline. -## Milestones +## Revision history -- **M0–M4 (done):** workspace, gates, model, IO, DSP, mix engine, command engine, Edit/Mix UI, realtime playback, metering, plugins, bounce. -- **M5 (done):** editing depth (tools, modes, playlists, fades, comping, clip groups). -- **M6 (done for the first cut):** recording, punch, loop record, monitoring. -- **M7 (in progress):** MIDI and notation editing. -- **M8 (done):** CLI, control channel, MCP, agent acceptance test. -- **M9 (in progress):** AudioSuite breadth (done), Elastic Audio, Beat Detective. -- **M10 (next):** alpha release on all platforms. -- **M11 (mostly done):** third-party plugin hosting (CLAP, VST3, AU), video, surround. +| Date | Change | Summary | +|---|---|---| +| 2026-10-10 | minor | Readiness-by-audience table with hours: full 950–1,450 h, mainstream 380–600 h, essentials 110–200 h | +| 2026-10-10 | minor | Added mainstream practitioner ~36 % and essentials user ~57 % to the headline numbers | +| 2026-10-10 | minor | Stage alpha → pre-alpha: the core-workflow gate fails on interface recording, MIDI recording and session interchange; alpha distance added | +| 2026-10-10 | major | Rewritten to the progress-docs standard: stage alpha (re-normalized the same day), two numbers (breadth ~70 %, ready ~40 %), dimension/feature/language tables, hours re-calibrated; area table moved to docs/target-app-parity.md, milestones to docs/roadmap.md | +| 2026-10-07 | major | Menu parity 94 %, ~65 % estimated feature parity, alpha list | +| 2026-10-06 | minor | Alpha and parity estimates | diff --git a/apps/soundcraft-cli/src/main.rs b/apps/soundcraft-cli/src/main.rs index 2ba9112..69acb9c 100644 --- a/apps/soundcraft-cli/src/main.rs +++ b/apps/soundcraft-cli/src/main.rs @@ -351,7 +351,7 @@ fn mcp(args: &[String]) -> ExitCode { fn parity(args: &[String]) -> ExitCode { let p = soundcraft_engine::catalog::parity_json(); let mut md = String::new(); - md.push_str("# Parity report\n\nGenerated by `soundcraft-cli parity --write docs/parity.md` (also `cargo xtask parity`).\n"); + md.push_str("# Parity report\n\nGenerated by `soundcraft-cli parity --write docs/parity-checklist.md` (also `cargo xtask parity`).\n"); md.push_str("It compares the incumbent's menu tree (feature names observed black-box, `crates/engine/catalog/menus.txt`) with SoundCraft's command registry.\n"); md.push_str("UI-layer commands (windows, AudioSuite) are counted by the app's own report (`engine.parity` over the control channel).\n\n"); md.push_str(&format!( diff --git a/docs/architecture.md b/docs/architecture.md index 3432699..02bc5a8 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -1,11 +1,14 @@ # Architecture +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (crate diagram brought up to date: video, vst3-host, au-host; device I/O limits) · **Target:** Avid Pro Tools Ultimate 2026.4.1 + SoundCraft is a Cargo workspace of small crates with enforced layering (`cargo xtask layers`). Nothing below the UI knows about egui, so the interface can be replaced. ``` -L0 time audio-io midi (standalone: no workspace deps) -L1 dsp clap-host (plugins; clap-host is the only unsafe crate) +L0 time audio-io midi video (standalone: no workspace deps) +L1 dsp clap-host vst3-host au-host (plugins; the three hosts are the only crates + allowed `unsafe`, confined to their FFI modules) L2 model (the session document) L3 mix (the mix engine) L4 engine playback (commands, undo, I/O · audio devices) @@ -41,6 +44,16 @@ process in parallel; plugin delay compensation aligns every path. The same engin bounces offline (`render_range`) and realtime playback (`soundcraft_playback::Player`, which owns it on the audio thread and receives new session snapshots through a channel). +Device I/O today is the system's *default* output and *default* input device, opened as two +separate cpal streams; the mix renders 512-sample blocks and resamples to the device rate when +they differ. There is no device or buffer-size selection, no ASIO, and no MIDI device layer yet +(see [`hardware-parity.md`](hardware-parity.md)). Sources are decoded whole into the `SourcePool` +and recordings are captured in memory until stop. + +`soundcraft-video` holds our own H.264, ProRes and Motion JPEG decoders and the ISO-BMFF demuxer +for the video track. Hosted plugins (`clap-host`, `vst3-host`, `au-host`) are scanned, created and +destroyed off the audio thread; only `process` runs on it. + The cpal callbacks mark their thread (`soundcraft_playback::mark_audio_thread`). Code that may run there can ask `on_audio_thread()` before doing anything that blocks; the desktop app's logger does, so a `log::` record from the audio thread (a stream error, a full synth event queue, a hosted @@ -52,3 +65,10 @@ by the UI thread (see README › Logs). The desktop app's control channel (JSON lines over TCP) exposes engine commands, inspection, synthetic input and screenshots; `soundcraft-cli mcp` wraps either a headless engine or a running app as an MCP server. See `control-protocol.md` and `mcp.md`. + +## Revision history + +| Date | Change | Summary | +|---|---|---| +| 2026-10-10 | minor | Added video, vst3-host and au-host to the layer diagram; documented device I/O limits and in-memory media | +| 2026-10-05 | major | First architecture overview | diff --git a/docs/file-format-parity.md b/docs/file-format-parity.md new file mode 100644 index 0000000..5149502 --- /dev/null +++ b/docs/file-format-parity.md @@ -0,0 +1,83 @@ +# File-format parity + +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first format inventory against Pro Tools 2026.4.1) · **Target:** Avid Pro Tools Ultimate 2026.4.1 + +Every format Pro Tools reads or writes, and ours. The Pro Tools list comes from the document types +its bundle declares (`CFBundleDocumentTypes` in Info.plist: names only, nothing else read) and its +documented import/bounce options. Ours comes from `crates/audio-io` (`detect_format`, `decode`, +`ENCODE_EXTENSIONS`), `crates/engine/src/cmd/file.rs`, `crates/engine/src/score.rs`, +`crates/engine/src/clip_group_file.rs` and `crates/video`. + +**File formats: ~40 % ready** (estimated: weighted by how often a Pro Tools user hits each row; +session interchange carries a third of the weight and is at 0 %). Remaining ≈ 70–120 h. + +Legend: ✅ supported and tested · 🟡 partial · ❌ missing · — not applicable. + +## Sessions and interchange + +| Format | Pro Tools | Read | Write | Tests / notes | +|---|---|---|---|---| +| Pro Tools session `.ptx` (and `.ptf` from 7–9) | native | ❌ | ❌ | Proprietary, undocumented. Owner decision needed on black-box format study (G-03) | +| Session templates `.ptxt` | read/write | ❌ | ❌ | We have no templates at all (G-16) | +| AAF (Advanced Authoring Format) | import/export | ❌ | ❌ | #40. The post-production handoff from picture editors (G-03) | +| OMF | import/export | ❌ | ❌ | Legacy, still delivered by some editors | +| Media Composer–compatible session | export | ❌ | ❌ | AAF variant | +| ADM BWF (Dolby Atmos master) | import/export | ❌ | ❌ | G-12 | +| SoundCraft session `.scraft` + `Audio Files/` | — | ✅ | ✅ | JSON (serde); mutated-file property test loads or fails cleanly; plugin state embedded | +| Import Session Data (from another session) | Pro Tools sessions | 🟡 | — | From `.scraft` only | +| Session info as text | export | — | ✅ | `file.export_session_text` | +| Clip groups `.rgrp` / ours `.scgrp` | read/write | 🟡 | 🟡 | Our own `.scgrp` format; Pro Tools' clip-group files not read | +| Track presets, fade presets, I/O settings, workspace, sync settings | read/write | ❌ | ❌ | Their equivalents don't exist yet (G-16) | + +## Audio + +| Format | Pro Tools | Read | Write | Tests / notes | +|---|---|---|---|---| +| WAV / BWF (PCM 16/24/32, float 32), `bext` | native | ✅ | ✅ | Native reader/writer, TPDF dither option; also 8-bit and float 64 read | +| RF64 / BW64 (> 4 GiB) | read/write | ✅ | ✅ | `encode_wav_rf64` | +| WAV `WAVE_FORMAT_EXTENSIBLE` multichannel with channel mask | read/write | ✅ | ✅ | `encode_with_channel_mask`; default 5.1 import creates a stereo track (#89, PR #128) | +| AIFF / AIFF-C | native | ✅ | ✅ (`fl32`) | Native | +| FLAC | import | ✅ | ✅ | Own encoder | +| MP3 | import, bounce | ✅ (symphonia) | ❌ | G-21 | +| AAC / M4A / MP4 audio | import, bounce | ✅ (symphonia) | ❌ | G-21 | +| ALAC | import | ✅ | ❌ | | +| Ogg Vorbis | — | ✅ | ❌ | Beyond Pro Tools | +| CAF | — | ✅ | ❌ | | +| Sound Designer / SD II | import (legacy) | ❌ | — | Rare today | +| ReCycle / REX | import | ❌ | — | Loops | +| MXF audio (OP-Atom, OP1a) | import | ❌ | ❌ | Avid media; FilmCraft has an MXF reader to learn from | +| iXML / polyphonic field-recorder metadata | read | ❌ | ❌ | G-17 | +| Peak overviews | `.wfm` cache | ✅ (own, in memory) | — | `audio-io::peaks`; not cached on disk | + +## MIDI and notation + +| Format | Pro Tools | Read | Write | Tests / notes | +|---|---|---|---|---| +| Standard MIDI File (type 0/1) | import/export | ✅ | 🟡 | Exported MIDI omits imported controllers and ignores the tracks filter (#87, #98; PR #125) | +| MusicXML (to Sibelius) | export | — | ✅ | `file.export_sibelius`, `score.rs` | +| Printable score | print | — | ✅ (SVG) | | + +## Video + +| Format | Pro Tools | Read | Write | Tests / notes | +|---|---|---|---|---| +| QuickTime / MP4, H.264 | import, bounce | ✅ | ❌ | Own pure-Rust decoder (Baseline/Main/High); mutated-movie fuzzing | +| ProRes (all flavours) | import | ✅ | ❌ | Own decoder | +| Motion JPEG | import | ✅ | ❌ | | +| HEVC, AV1 | import | ❌ | ❌ | G-17 | +| DNxHD / DNxHR, MXF video | import | ❌ | ❌ | G-17 | +| Bounce with video | export | — | ❌ | G-17 | + +## Plugin and preset files + +| Format | Pro Tools | Ours | +|---|---|---| +| AAX plug-ins | the only format it hosts | ❌ (cannot: Avid SDK licence, PACE signing) | +| VST3 / Audio Units / CLAP | — (AAX only) | ✅ hosted (ahead of Pro Tools) | +| Plug-in settings `.tfx` | read/write | ❌ (our own JSON presets per plugin) | + +## Revision history + +| Date | Change | Summary | +|---|---|---| +| 2026-10-10 | major | Created: format inventory against Pro Tools 2026.4.1's declared document types and import/bounce options | diff --git a/docs/gaps.md b/docs/gaps.md new file mode 100644 index 0000000..cf3ea5b --- /dev/null +++ b/docs/gaps.md @@ -0,0 +1,200 @@ +# Where SoundCraft falls short of Pro Tools + +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (alpha blockers marked after the core-workflow gate) · **Target:** Avid Pro Tools Ultimate 2026.4.1 + +Every known shortfall, one entry each, ranked by how much it stops a Pro Tools user from doing +real work in SoundCraft. This is the work list: pick from the top. Rows marked **alpha blocker** +fail the core-workflow gate in [`roadmap.md`](roadmap.md#alpha-gate) and keep SoundCraft pre-alpha. Numbers and weights live in +[`target-app-parity.md`](target-app-parity.md); the plan that orders these into milestones is +[`roadmap.md`](roadmap.md). Hours are Opus 5.5 agent-hours (calibration in target-app-parity.md). +Estimates marked "≈" are judgements; issue numbers are `storytold/soundcraft` GitHub issues. + +When you close a gap, delete its entry (or shrink it) in the same PR, and bump the timestamp. + +## Ranked gaps + +| # | Gap | Dimension | Doc | Est. (h) | +|---|---|---|---|---:| +| G-01 | **Alpha blocker.** No audio device, channel or buffer-size selection; no duplex low-latency path | Hardware | [hardware-parity.md](hardware-parity.md) | 25–40 | +| G-02 | **Alpha blocker.** No MIDI device input or output | Hardware / MIDI | [hardware-parity.md](hardware-parity.md) | 20–35 | +| G-03 | **Alpha blocker.** Cannot exchange sessions with Pro Tools (no AAF/OMF, no `.ptx`) | File formats | [file-format-parity.md](file-format-parity.md) | 50–90 | +| G-04 | Open correctness bugs in features counted as done (~25 issues) | Stability | this file | 25–40 | +| G-05 | (Entitlement part: alpha blocker for the mix row) Third-party VST3s blocked in the signed macOS build; AU editors missing | Ecosystem | [plugin-parity.md](plugin-parity.md) | 15–25 | +| G-06 | (Record-to-disk part: alpha blocker for the tracking row) Sources decoded whole into RAM; recording into RAM | Performance | [hardware-parity.md](hardware-parity.md) | 15–25 | +| G-07 | Nothing is compared against Pro Tools' output (no fidelity harness) | Features | this file | 20–30 | +| G-08 | Built-in plugin catalogue thin and unverified | Features | [plugin-parity.md](plugin-parity.md) | 80–120 | +| G-09 | English only, no string catalog, no CJK/RTL rendering | Localization | [localization-parity.md](localization-parity.md) | 70–110 | +| G-10 | No control surfaces (HUI/MCU, EUCON) | Hardware | [hardware-parity.md](hardware-parity.md) | 40–70 | +| G-11 | No external sync (MTC, LTC, MIDI clock, video reference) | Hardware | [hardware-parity.md](hardware-parity.md) | 15–25 | +| G-12 | Immersive delivery: no Dolby Atmos/ADM BWF, MPEG-H, binaural | Features | [file-format-parity.md](file-format-parity.md) | 50–80 | +| G-13 | Sidechain inputs, ARA, out-of-process plugin sandboxing | Ecosystem | [plugin-parity.md](plugin-parity.md) | 30–50 | +| G-14 | Windows/Linux/Web exercised only lightly at runtime; no PR CI running the tests | Platforms / Stability | this file | 20–40 | +| G-15 | Elastic Audio depth: one algorithm, no Elastic Pitch | Features | [target-app-parity.md](target-app-parity.md) | 30–45 | +| G-16 | Session templates, track presets, workspace browser, batch rename | Features | [target-app-parity.md](target-app-parity.md) | 25–40 | +| G-17 | Video: HEVC/DNx decode, video export, external timecode | Features / Formats | [file-format-parity.md](file-format-parity.md) | 30–50 | +| G-18 | Speech-to-text transcription | AI | this file | 30–50 | +| G-19 | UI feel: generic plugin windows, shortcut collisions, pro-grade meters and scaling | UI/UX | [ui-parity.md](ui-parity.md) | 60–100 | +| G-20 | MIDI/instrument depth: MIDI learn, sampler, notation editing | Features | [target-app-parity.md](target-app-parity.md) | 40–60 | +| G-21 | Compressed export (MP3, AAC/M4A, Ogg/Opus) | File formats | [file-format-parity.md](file-format-parity.md) | 10–20 | +| G-22 | Avid cloud services (collaboration, Sketch, Splice, sign-in) | Ecosystem | — | not estimated (owner decision) | + +## Details + +### G-01. Audio interface support + +- **Missing:** choosing the output or input device, the device's channel count and routing to + physical channels, the buffer size, and the sample rate from the hardware side. Input and + output are separate cpal streams on the *default* devices (`crates/playback/src/lib.rs` + `open_device`, `record.rs`); the mix runs in fixed 512-sample blocks and resamples when rates + differ. `setup.playback_engine` stores `device`/`buffer_size` params, but playback ignores them. + No ASIO on Windows (WASAPI shared only), so latency there is high. +- **Evidence:** code above; Playback Engine window says "Mix block size: 512 samples"; issue #42 + (no input device selection, forced monitoring feedback with virtual routing). +- **Impact:** blocks tracking with any multichannel interface; latency makes overdubs hard. +- **Estimate:** ≈ 25–40 h (device enumeration and selection, buffer size, duplex stream with one + clock, ASIO feature build, per-channel I/O mapping into I/O Setup, latency reporting and + record-offset compensation). Needs hands-on hardware testing. + +### G-02. MIDI devices + +- **Missing:** all MIDI hardware I/O. No `midir`/CoreMIDI/WinMM/ALSA sequencer code exists; + `setup.midi_input_devices` and `setup.midi_studio` only store names. You cannot record from a + keyboard, play a hosted instrument live, drive external synths, or send MIDI clock/MTC. + `midi_editor.rs:288` notes audition "needs a live MIDI input path". +- **Impact:** MIDI production is limited to drawing notes and importing SMF. +- **Estimate:** ≈ 20–35 h (device layer, realtime input to armed tracks and instruments with + timestamps, MIDI record/merge/loop, thru, output tracks, clock out). + +### G-03. Session interchange with Pro Tools + +- **Missing:** opening or saving `.ptx`/`.ptf`, AAF and OMF import and export (#40), Media + Composer–compatible sessions. Our session format is `.scraft` JSON. +- **Impact:** the standard's main-format bar for beta. A Pro Tools user cannot bring a project in + or hand one back; post-production (picture editors deliver AAF) is blocked. +- **Estimate:** AAF/OMF import + export ≈ 50–90 h (FilmCraft already writes AAF/OMF; we can learn + from it but not share code). `.ptx` is proprietary and undocumented: owner decision on whether + black-box format study is in the clean-room rules; not included in the estimate. + +### G-04. Correctness bugs in "done" features + +Open on 2026-10-10 (several have PRs open): +editing #3, #5, #140, #144; clip/session #86 (PR #123), #88 (PR #130), #91 (PR #124), #92 (PR #132); +automation #104 (PR #134); mix/bounce #59 (PR #131), #103 (PR #133), #152; playback #101 (PR #129); +MIDI #87, #98 (PR #125); import #89 (PR #128); CLI #95, #96 (PR #126, #127); MCP #145 (PR #146); +web #63, #64, #136; Clip List #4 (PR #75); plugin view #6; shortcuts #7, #41; +launch #142; Linux #45, #107. +- **Impact:** each one is small, but together they say "presence is not parity": an outside + contributor found seven in one sitting (#116–#122). +- **Estimate:** ≈ 25–40 h at 0.5–1.5 h each, plus review of the open PRs. + +### G-05. Plugin hosting on macOS + +- **Missing:** the `com.apple.security.cs.disable-library-validation` entitlement in the signed + build, so hardened runtime refuses third-party VST3 bundles (#153, #149). AU editor views + (`crates/au-host/src/lib.rs` header: "Not hosted yet: Audio Unit editor views"). Embedded CLAP + GUIs; VST3 editors on Windows/Linux. +- **Estimate:** ≈ 15–25 h (entitlement ≈ 1 h; AU Cocoa views and VST3 HWND/X11 views most of it). + +### G-06. Memory-bound media + +- **Missing:** streaming sources from disk; recording to disk. Every source is decoded whole into + the `SourcePool`; takes accumulate in RAM until stop (PR #84 open). +- **Impact:** hour-long multitrack sessions and long takes exhaust memory; a crash during a long + take loses it. +- **Estimate:** ≈ 15–25 h. + +### G-07. Fidelity harness against Pro Tools + +- **Missing:** any measured comparison: null tests of bounces of the same material, fade curve + and pan-law checks, plugin frequency/dynamics responses, elastic-audio quality, automation + timing. Pro Tools is installed; it can be driven black-box with synthetic sessions (outputs kept + under `plan/`, never committed). +- **Estimate:** ≈ 20–30 h for the harness and the first 20 scored cases; turns many "≈" in + target-app-parity.md into measurements. + +### G-08. Built-in plugins + +See [`plugin-parity.md`](plugin-parity.md): 26 processors + 2 instruments against Pro Tools' +roughly 80 bundled processors and instruments; no fidelity checks; generic parameter UIs; EQ +parametric request #139. ≈ 80–120 h. + +### G-09. Localization + +See [`localization-parity.md`](localization-parity.md): no catalog, every string literal in code; +egui has no complex-script shaping or RTL; no CJK font fallback (PR #141 open). ≈ 70–110 h plus +native-speaker review. + +### G-10. Control surfaces + +None: no HUI or Mackie Control, no EUCON (Avid-proprietary, needs Avid's SDK: owner decision), +no generic MIDI controller mapping. Pro Tools users on S1/S3/S4/S6/Dock or HUI devices can't +switch. ≈ 40–70 h for HUI/MCU plus a mapping layer; hardware needed to verify. + +### G-11. Sync + +No MTC/LTC chase or generation, no MIDI Beat Clock (`setup.midi_beat_clock` stores a flag only), +no video reference or word clock awareness, no Satellite-style linking. ≈ 15–25 h after G-01/G-02. + +### G-12. Immersive delivery + +No Dolby Atmos renderer integration, ADM BWF import/export, re-renders, binaural monitoring, +MPEG-H (new in Pro Tools 2026.4), surround/object automation. ≈ 50–80 h; Dolby's renderer and +SDKs are licensed, so we'd write our own ADM and object renderer. + +### G-13. Plugin ecosystem depth + +No sidechain (key input) buses for any host; no ARA (Melodyne-style editing is a menu in Pro +Tools); plugins run in-process, so a crashing plugin can take the session down. ≈ 30–50 h. AAX +cannot be hosted (#109): Avid's AAX SDK licence and PACE signing; owner decision, likely never. + +### G-14. Platforms and CI + +Only `freebsd.yml` and `windows-arm64.yml` run on pull requests, and only for manifest paths; +nothing runs `cargo xtask ci` on PRs. Windows and Linux have startup and rendering reports +(#41, #45, #107, #142). ≈ 20–40 h (a PR CI matrix plus runtime smoke tests on three OSes). + +### G-15. Elastic Audio depth + +One warp algorithm; Pro Tools offers several per track (polyphonic, rhythmic, monophonic, +varispeed, high-quality offline) plus Elastic Pitch and warp-marker editing depth. ≈ 30–45 h. + +### G-16. Session management + +No session templates, track presets, workspace/sound browser with previews, batch rename (new in +2026.4), disk-usage and relink depth. ≈ 25–40 h. + +### G-17. Video and post + +No HEVC, DNxHD/HR or AV1 decode; no bounce with video; no external timecode/9-pin; no iXML +field-recorder conform. ≈ 30–50 h. + +### G-18. Speech-to-text + +Pro Tools transcribes dialogue to a searchable transcript (upgraded in 2026.4). We have a +settings command only. Needs an openly licensed local speech model. ≈ 30–50 h. + +### G-19. UI feel + +See [`ui-parity.md`](ui-parity.md). ≈ 60–100 h. + +### G-20. MIDI and instrument depth + +MIDI learn, a sampler (PR #108), drum machine depth, notation editing (tuplets, lyrics, +articulations, parts). ≈ 40–60 h. + +### G-21. Compressed export + +Bounce writes WAV/BWF/RF64, AIFF and FLAC; Pro Tools also writes MP3 and AAC/M4A in Bounce Mix. +≈ 10–20 h (pure-Rust encoders). + +### G-22. Avid cloud services + +Collaboration, cloud projects, Sketch, Splice, Learn, sign-in: 11 of the 30 menu leaves still +missing. Out of scope unless the owner decides otherwise. + +## Revision history + +| Date | Change | Summary | +|---|---|---| +| 2026-10-10 | minor | Marked the alpha blockers (G-01, G-02, G-03; parts of G-05 and G-06) from the core-workflow gate | +| 2026-10-10 | major | Created from the full re-measure against Pro Tools Ultimate 2026.4.1: 22 ranked gaps with evidence and estimates | diff --git a/docs/hardware-parity.md b/docs/hardware-parity.md new file mode 100644 index 0000000..2b3eadc --- /dev/null +++ b/docs/hardware-parity.md @@ -0,0 +1,75 @@ +# Hardware parity + +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first hardware audit against Pro Tools 2026.4.1) · **Target:** Avid Pro Tools Ultimate 2026.4.1 + +A DAW is judged by how it drives audio interfaces, MIDI gear, control surfaces and sync. This is +SoundCraft's weakest dimension. Ours is measured from `crates/playback` (cpal) and the absence of +any MIDI-device or control-surface code; Pro Tools' from its documentation and Setup menus. + +**Hardware: ~12 % ready** (estimated). **Performance: ~35 %** (estimated; nothing benchmarked +against Pro Tools). Remaining ≈ 110–180 h for hardware, 40–70 h for performance. + +Legend: ✅ works · 🟡 partial · ❌ missing. + +## Audio interfaces + +| Feature | Pro Tools (macOS / Windows) | SoundCraft macOS | Windows | Linux | FreeBSD | Web | +|---|---|---|---|---|---|---| +| Driver API | Core Audio / ASIO | 🟡 Core Audio via cpal | 🟡 WASAPI shared via cpal; no ASIO | 🟡 ALSA/Pulse via cpal; no JACK | 🟡 cpal (ALSA layer) | 🟡 Web Audio | +| Choose playback device | ✅ Playback Engine | ❌ default output only | ❌ | ❌ | ❌ | ❌ | +| Choose input device | ✅ | ❌ default input only (#42) | ❌ | ❌ | ❌ | ❌ | +| Buffer size (32–2048) | ✅ | ❌ fixed 512-sample mix block | ❌ | ❌ | ❌ | ❌ | +| Duplex stream on one clock | ✅ | ❌ separate input/output streams | ❌ | ❌ | ❌ | ❌ | +| Hardware I/O mapping (I/O Setup to physical channels) | ✅ | 🟡 multichannel output in order; no per-channel map | 🟡 | 🟡 | 🟡 | ❌ | +| Low-latency monitoring | ✅ | ❌ (`options.low_latency_monitoring` is a stored flag) | ❌ | ❌ | ❌ | ❌ | +| Latency reporting and record offset compensation | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| Sample rate follows the session; resample when it can't | ✅ (switches device) | 🟡 resamples (input pitch bug fixed, #28) | 🟡 | 🟡 | 🟡 | 🟡 | +| Avid HDX / HD Native DSP, Hybrid Engine DSP mode | ✅ | ❌ (out of reach: Avid hardware) | ❌ | ❌ | ❌ | ❌ | +| Disk allocation / record to disk | ✅ | ❌ recording into RAM (PR #84) | ❌ | ❌ | ❌ | ❌ | + +## MIDI + +| Feature | Pro Tools | SoundCraft (all platforms) | +|---|---|---| +| MIDI input devices (keyboards, pads) | ✅ | ❌ no MIDI device layer at all (`setup.midi_input_devices` stores names) | +| MIDI output to external gear | ✅ | ❌ | +| MIDI Thru, input filter | ✅ | ❌ (stored flags only) | +| MIDI Beat Clock out, MTC generate/chase | ✅ | ❌ | +| MIDI learn / controller mapping | ✅ (via surfaces and plug-in maps) | ❌ | +| Virtual MIDI keyboard | ✅ (MIDI Keyboard window) | 🟡 window exists, no live audition path | + +## Control surfaces + +| Feature | Pro Tools | SoundCraft | +|---|---|---| +| EUCON (S1/S3/S4/S6, Dock, Control app) | ✅ | ❌ Avid-proprietary SDK; owner decision | +| HUI | ✅ | ❌ | +| Mackie Control Universal | ✅ (via HUI emulation and personalities) | ❌ | +| Generic MIDI controller personalities | ✅ | ❌ | + +## Sync and video hardware + +| Feature | Pro Tools | SoundCraft | +|---|---|---| +| LTC / MTC chase, 9-pin machine control | ✅ (Ultimate) | ❌ | +| Word clock / video reference awareness | ✅ via interface | ❌ | +| Video output to a second display or video card | ✅ | ❌ (video window only) | +| Satellite linking of systems | ✅ | ❌ | + +## Performance + +| Feature | Pro Tools | SoundCraft | Evidence | +|---|---|---|---| +| Parallel mixing across cores | ✅ | ✅ | `soundcraft-mix` renders independent strips in parallel (rayon) | +| Plugin delay compensation | ✅ | ✅ | | +| Disk streaming of long sources | ✅ | ❌ | Whole files decoded into the `SourcePool` | +| Track count (Ultimate: 2,048 voices) | ✅ | unmeasured | No benchmark exists; add `cargo xtask bench` | +| Real-time audio thread discipline | ✅ | ✅ | No blocking/allocation in steady state, audio-thread-aware logger | +| Freeze / commit to save CPU | ✅ | 🟡 | `track.commit` renders; `track.freeze` only sets a flag (no CPU saved) | +| GPU-accelerated UI | — | ✅ (wgpu/glow via eframe) | llvmpipe X11 issue #107 | + +## Revision history + +| Date | Change | Summary | +|---|---|---| +| 2026-10-10 | major | Created: audit of audio interface, MIDI, control-surface, sync and performance support against Pro Tools 2026.4.1 | diff --git a/docs/localization-parity.md b/docs/localization-parity.md new file mode 100644 index 0000000..fe832d4 --- /dev/null +++ b/docs/localization-parity.md @@ -0,0 +1,42 @@ +# Localization parity + +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first per-language status) · **Target:** Avid Pro Tools Ultimate 2026.4.1 + +SoundCraft is English only. There is no string catalog: every menu label, dialog and tooltip is a +literal in Rust (`crates/engine/src/cmd/*`, `crates/ui-egui/src/*`). Pro Tools ships its UI in +**8 languages** (bundle `.lproj` folders: English, German, Spanish, French, Japanese, Korean, +Simplified Chinese, Traditional Chinese). + +**Localization: ~12 %** (measured: 1 of the target's 8 UI languages, and English is the only one +complete). Remaining ≈ 70–110 h: a catalog and extraction pass (≈ 15–25 h), a font fallback for +CJK/Devanagari/Arabic (PR #141 open), RTL layout and complex-script shaping (egui has neither: +≈ 25–40 h, or ship Arabic/Hindi menus-only), then ≈ 3–5 h of agent translation per language, plus +native-speaker review (human). + +Open work: PR #143 (French and Spanish, a Language setting), PR #141 (bundled multilingual font +fallbacks), issue #67 (Ukrainian). + +| Language | Code | UI strings translated | Dialogs / tooltips / help | Script support | Native review | Status | Est. to full (h) | In Pro Tools | +|---|---|---|---|---|---|---|---:|---| +| English | en | all (source) | ✅ | Latin ✅ | — | **full** | 0 | ✅ | +| Simplified Chinese | zh-Hans | 0 (0 %) | ❌ | ❌ no CJK font fallback, no IME testing | no | none | 6–10 | ✅ | +| Spanish | es | 0 (0 %) — PR #143 pending | ❌ | Latin ✅ | no | none | 3–5 | ✅ | +| Hindi | hi | 0 (0 %) | ❌ | ❌ no Devanagari font or shaping | no | none | 8–15 | ❌ | +| Arabic | ar | 0 (0 %) | ❌ | ❌ no RTL layout, no shaping | no | none | 15–25 | ❌ | +| French | fr | 0 (0 %) — PR #143 pending | ❌ | Latin ✅ | no | none | 3–5 | ✅ | +| Portuguese | pt | 0 (0 %) | ❌ | Latin ✅ | no | none | 3–5 | ❌ | +| Indonesian | id | 0 (0 %) | ❌ | Latin ✅ | no | none | 3–5 | ❌ | +| Japanese | ja | 0 (0 %) | ❌ | ❌ no CJK font fallback, no IME testing | no | none | 6–10 | ✅ | +| German | de | 0 (0 %) | ❌ | Latin ✅ | no | none | 3–5 | ✅ | +| Korean | ko | 0 (0 %) | ❌ | ❌ no Hangul font fallback | no | none | 6–10 | ✅ | +| Vietnamese | vi | 0 (0 %) | ❌ | 🟡 Latin with stacked diacritics, untested | no | none | 3–5 | ❌ | + +Other languages shipped: **0**. (Pro Tools also ships Traditional Chinese, zh-Hant.) + +Per-language hours exclude the shared catalog and script work above. + +## Revision history + +| Date | Change | Summary | +|---|---|---| +| 2026-10-10 | major | Created: English only, no catalog; the twelve key languages at 0 %; Pro Tools' 8 languages listed from its bundle | diff --git a/docs/parity.md b/docs/parity-checklist.md similarity index 94% rename from docs/parity.md rename to docs/parity-checklist.md index 5572f35..229b783 100644 --- a/docs/parity.md +++ b/docs/parity-checklist.md @@ -1,6 +1,8 @@ # Parity report -Generated by `soundcraft-cli parity --write docs/parity.md` (also `cargo xtask parity`). +> **Generated:** 2026-10-06 (last run of `cargo xtask parity`; the catalog and aliases are unchanged since) · **Target:** Avid Pro Tools Ultimate 2026.4.1 menu tree + +Generated by `soundcraft-cli parity --write docs/parity-checklist.md` (also `cargo xtask parity`). It compares the incumbent's menu tree (feature names observed black-box, `crates/engine/catalog/menus.txt`) with SoundCraft's command registry. UI-layer commands (windows, AudioSuite) are counted by the app's own report (`engine.parity` over the control channel). diff --git a/docs/plugin-parity.md b/docs/plugin-parity.md new file mode 100644 index 0000000..f59b598 --- /dev/null +++ b/docs/plugin-parity.md @@ -0,0 +1,61 @@ +# Plugin parity: built-in processors and plugin hosting + +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first plugin checklist against Pro Tools 2026.4.1) · **Target:** Avid Pro Tools Ultimate 2026.4.1 + +Pro Tools users live in plugins: the bundled set covers everyday mixing, and third-party plugins +cover the rest. This doc tracks both. Our plugins have our own names and are written from +scratch (clean-room rule): Avid plugin names are not used here, only categories. + +**Built-in plugins and AudioSuite: breadth ~40 %, ready ~35 %** (80–120 h). +**Third-party hosting: breadth ~70 %, ready ~45 %** (40–60 h). Both estimated. + +## Built-in processors (measured from `crates/dsp/src/plugins`) + +| Category | Pro Tools bundles (approx., by category) | SoundCraft (ids) | Gap | +|---|---|---|---| +| EQ | 1-band and 7-band EQ, channel strip, vintage EQ models | `eq_1band`, `eq_7band`, `channel_strip` | Vintage models, linear phase, dynamic EQ; parametric UI (#139) | +| Dynamics | compressor/limiter, expander/gate, de-esser, maximizer, vintage compressors, multiband | `compressor`, `expander_gate`, `de_esser`, `maximizer` | Vintage/opto models, multiband, sidechain input (no key input anywhere) | +| Reverb | algorithmic room/plate/hall; convolution (paid tier) | `room_reverb`, `plate_reverb` | Hall/chamber, convolution, early-reflection editor | +| Delay | modulated delay, tape/analog delays | `mod_delay` | Tape, ping-pong, multi-tap, tempo-sync depth | +| Modulation | chorus, flanger, phaser, tremolo, ring/frequency shift | `chorus`, `flanger`, `phaser` | Tremolo, auto-pan, ring modulation | +| Harmonic | lo-fi, rectifier, amp simulation, saturation, tape | `lofi`, `rectifier`, `saturator` | Amp and cabinet models, tape | +| Pitch and time | pitch shift, varispeed effects, time shift | `pitch_shifter`, `time_shift` | Formant control, varispeed effect, pitch correction | +| Utility | trim, gain, invert, DC offset, signal generator, dither, time adjuster | `trim`, `gain`, `invert`, `dc_offset_removal`, `signal_generator`, `dither` | Time adjuster, meter/analyzer plugins, noise shaping options | +| Instruments | several virtual instruments (multi-sampler, piano, drum machine, organ, synths, sample player; Massive X Player added in 2026.4) | `subtractive_synth`, `drum_synth` | Sampler (PR #108 open), piano, organ, wavetable, content library | +| **Total** | **≈ 80 processors and instruments** (estimate from Avid's bundle documentation) | **26 processors + 2 instruments** | | + +AudioSuite: every catalog AudioSuite leaf maps to one of our processes (`AUDIOSUITE` in +`crates/ui-egui/src/menus.rs`), so the AudioSuite menu is 100 % present. Depth: no preview, +handles, "clip by clip / entire selection" and multi-input modes beyond the basics; hosted +plugins can't be used offline as AudioSuite yet. + +Fidelity: **unmeasured.** Nothing compares a SoundCraft processor's frequency response, gain +reduction curve or reverb tail with the Pro Tools equivalent (G-07 in [`gaps.md`](gaps.md)). +User report #152: a saved instrument level does not reach the bounce. + +## Third-party plugin hosting + +| Feature | Pro Tools | SoundCraft | Notes | +|---|---|---|---| +| Plugin format | AAX only (Native and DSP) | CLAP, VST3, Audio Units (macOS) | Users' libraries mostly ship VST3/AU too. AAX (#109) needs Avid's SDK licence and PACE signing: owner decision, likely never | +| VST2, LV2, LADSPA | — | ❌ (#30) | Beyond Pro Tools; VST2 SDK is no longer licensable | +| Scan, vendor menus, instrument picker | ✅ | ✅ | #23 | +| Audio, parameters, automation, latency (PDC) | ✅ | ✅ | | +| Notes / MIDI to instruments | ✅ | ✅ | But no live MIDI input (G-02) | +| State saved in sessions, presets | ✅ | ✅ | | +| Create/destroy off the audio thread | ✅ | ✅ | | +| Editors: CLAP | — | 🟡 floating windows; no embedded GUI | | +| Editors: VST3 | — | 🟡 macOS only (verified with a commercial pitch editor) | Windows/Linux views missing | +| Editors: AU | — | ❌ | Cocoa view hosting missing | +| Multiple editor pages | ✅ | 🟡 | #6 | +| macOS hardened-runtime entitlement for third-party code | ✅ | ❌ | #153, #149 — signed builds refuse third-party VST3 | +| Sidechain / key input | ✅ | ❌ | All three hosts | +| ARA 2 (pitch/time editors in the timeline) | ✅ | ❌ | Menu leaves Track/Clip/Window ▸ ARA still missing | +| Crash isolation | in-process (DSP on HDX) | in-process | Out-of-process hosting would beat Pro Tools | +| Plugin delay reporting changes on the fly | ✅ | 🟡 | Aux insert latency bug #103 (PR #133) | + +## Revision history + +| Date | Change | Summary | +|---|---|---| +| 2026-10-10 | major | Created: built-in processor inventory by category and third-party hosting checklist | diff --git a/docs/roadmap.md b/docs/roadmap.md new file mode 100644 index 0000000..d8ea3f8 --- /dev/null +++ b/docs/roadmap.md @@ -0,0 +1,90 @@ +# SoundCraft roadmap: milestones and what's next + +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (alpha gate added; stage re-normalized to pre-alpha) · **Target:** Avid Pro Tools Ultimate 2026.4.1 + +Forward-looking plan. Status and numbers: [`../ROADMAP.md`](../ROADMAP.md) and +[`target-app-parity.md`](target-app-parity.md); the ranked work list: [`gaps.md`](gaps.md). +Hours are Opus 5.5 agent-hours. + +## Current focus + +1. **Merge or close the open bug-fix PRs** (#123–#134, #146, #148, #75) and fix the rest of the + correctness backlog (G-04). ≈ 15–25 h. +2. **Audio interface basics** (G-01): device selection, buffer size, duplex stream, ASIO. ≈ 25–40 h. +3. **MIDI devices** (G-02): input to armed tracks and instruments, output, thru, clock. ≈ 20–35 h. +4. **macOS plugin hosting** (G-05): library-validation entitlement now (#153), then AU editors. ≈ 15–25 h. +5. **A PR CI that runs `cargo xtask ci`** on Linux, macOS and Windows (G-14). ≈ 5–10 h. + +## Alpha gate + +The core workflows a Pro Tools professional does every day, checked end to end on macOS (the +main platform). Any **no** keeps SoundCraft **pre-alpha**, and those rows are the alpha checklist +(craftrules `standards/progress-docs.md`, Stages). + +| Workflow | Works end to end? | Evidence | Hours to pass | +|---|---|---|---:| +| Record audio from a chosen interface at a chosen buffer size, monitor, punch, keep the takes | **no** | Default output and input devices only. Fixed 512-sample block. Separate input and output streams. `setup.playback_engine` params ignored by playback. Takes held in RAM until stop (PR #84). No input device choice (#42). | 35–55 | +| Record MIDI from a controller and play it back through an instrument | **no** | Playback of drawn and imported MIDI works. No MIDI device layer at all, so nothing can be recorded and instruments can't be played live (G-02). | 20–35 | +| Edit: select, trim, fade, comp playlists, Slip/Shuffle/Grid | yes (rough) | Every Edit menu command; property-tested with undo; open bugs #3, #5, #140 don't block the workflow | — | +| Mix with built-in and third-party plugins, sends, busses, automation | partial (passes on CLAP/AU) | 26 built-in processors; CLAP and AU host on the signed macOS build, but its missing entitlement blocks third-party VST3 (#153). No AU plugin windows yet; VST3 windows on macOS only | 1–2 (entitlement) | +| Bounce mix and stems; save and reopen the session | yes (rough) | WAV/BWF/AIFF/FLAC bounce, stems, `.scraft` save/reopen with plugin state; bugs #59, #103 in bus bounce and aux latency (PRs open) | — | +| Exchange a session with Pro Tools or a picture editor | **no** | No `.ptx`, AAF or OMF import or export (#40, G-03) | 50–90 | + +**Result: pre-alpha.** Three workflows fail. Passing them is ~110–180 h, about 70 % of it +parallelizable (interfaces, MIDI and AAF are independent crates). + +## Milestones + +Status: ✅ done · 🟡 in progress · ⬜ not started. + +| # | Milestone | Status | Remaining (h) | +|---|---|---|---:| +| M0–M4 | Workspace, gates, model, I/O, DSP, mix engine, command engine, Edit/Mix UI, playback, metering, plugins, bounce | ✅ | — | +| M5 | Editing depth (tools, modes, playlists, fades, comping, clip groups) | ✅ (bugs open, G-04) | in G-04 | +| M6 | Recording, punch, loop record, monitoring | 🟡 first cut; device choice and record-to-disk missing | 40–60 | +| M7 | MIDI and notation editing | 🟡 | 50–80 | +| M8 | CLI, control channel, MCP, agent acceptance test | ✅ | 3 | +| M9 | AudioSuite breadth ✅, Elastic Audio 🟡, Beat Detective 🟡 | 🟡 | 40–60 | +| M10 | Public releases on all platforms | ✅ v0.3.0 (2026-10-08) and v0.4.0 (2026-10-10) released for every platform | — | +| M11 | Third-party plugin hosting (CLAP, VST3, AU), video, surround | 🟡 mostly done | 40–60 | +| M12 | **Hardware**: audio interfaces, MIDI devices, sync, control surfaces | ⬜ | 110–180 | +| M13 | **Interchange**: AAF/OMF import/export, disk streaming, record to disk | ⬜ | 65–115 | +| M14 | **Fidelity harness** against Pro Tools (null tests, plugin responses) | ⬜ | 20–30 | +| M15 | **Localization**: catalog, fonts/RTL, the 8 Pro Tools languages first | ⬜ (PRs #141, #143 open) | 70–110 | +| M16 | Built-in plugin depth, sidechain, ARA | ⬜ | 110–170 | +| M17 | Immersive delivery (ADM BWF, object renderer, binaural) and video depth | ⬜ | 80–130 | + +## To beta (~350–570 h, about 60–70 % parallelizable) + +Beta needs ~75 % ready for real work and no blocking gap in session interchange. + +| Step | Gaps | Est. (h) | +|---|---|---:| +| Correctness backlog and a PR CI | G-04, G-14 | 40–65 | +| Audio interfaces, MIDI devices, sync | G-01, G-02, G-11 | 60–100 | +| AAF/OMF interchange, disk streaming, record to disk | G-03, G-06 | 65–115 | +| Plugin hosting completeness on every OS, sidechain | G-05, G-13 | 35–60 | +| Fidelity harness and the fixes it finds | G-07 | 40–60 | +| Built-in plugin essentials (EQ/dynamics/reverb/delay depth, sampler) | G-08 (half) | 40–60 | +| UI feel pass: shortcuts, plugin windows, meters | G-19 (half) | 30–50 | +| Localization of the 8 Pro Tools languages (catalog, CJK fonts) | G-09 (part) | 40–60 | + +Needs a human: hardware for G-01/G-02/G-10/G-11, native-speaker review, and owner decisions on +AAX, `.ptx` and Avid cloud features. + +## After beta (to full parity, a further ~600–900 h) + +Control surfaces (G-10), immersive delivery (G-12), the rest of the built-in plugin catalogue +(G-08), Elastic Audio depth (G-15), session templates and browser (G-16), video depth (G-17), +speech-to-text (G-18), notation and instrument depth (G-20), compressed export (G-21), and the +remaining languages. + +There is no `cargo xtask scorecard` in this repo; the measured number is `cargo xtask parity` +([`parity-checklist.md`](parity-checklist.md)). + +## Revision history + +| Date | Change | Summary | +|---|---|---| +| 2026-10-10 | minor | Added the alpha gate (3 of 6 core workflows fail → pre-alpha) | +| 2026-10-10 | major | Created from ROADMAP.md's milestones and alpha list; added M12–M17 and the beta plan with estimates | diff --git a/docs/target-app-parity.md b/docs/target-app-parity.md new file mode 100644 index 0000000..77d7be9 --- /dev/null +++ b/docs/target-app-parity.md @@ -0,0 +1,252 @@ +# Target-app parity: SoundCraft vs Avid Pro Tools + +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (hours to ~95 % for each audience; full number confirmed as an additive weighted sum) · **Target:** Avid Pro Tools Ultimate 2026.4.1 (bundle 26.4.1.179, macOS) + +The authoritative assessment of how close SoundCraft is to Pro Tools. [`ROADMAP.md`](../ROADMAP.md) +summarizes it, [`gaps.md`](gaps.md) itemizes every shortfall, and the per-dimension docs go deeper: +[`ui-parity.md`](ui-parity.md), [`file-format-parity.md`](file-format-parity.md), +[`hardware-parity.md`](hardware-parity.md), [`plugin-parity.md`](plugin-parity.md), +[`localization-parity.md`](localization-parity.md). The generated menu checklist is +[`parity-checklist.md`](parity-checklist.md). + +## Headline + +| Number | Value | Kind | +|---|---|---| +| Menu breadth (engine + UI layer) | **482 / 512 menu leaves (94.1 %)** | **measured**: the 512-leaf catalog `crates/engine/catalog/menus.txt` against the command registry; engine alone 397 / 512 (77.5 %) from `cargo xtask parity` ([`parity-checklist.md`](parity-checklist.md)); the 85 UI-layer matches re-counted on 2026-10-10 from `crates/ui-egui/src/menus.rs` (`UI_COMMANDS`, `AUDIOSUITE`, `MENU_WINDOWS`, Mix Window Views) by script | +| Feature breadth (menus plus everything not in a menu: plugins, hardware, formats, immersive, cloud) | **~70 %** | estimated (area table below, presence only) | +| **Ready for real work** (whole of Pro Tools) | **~40 %** | estimated: written dimension weights × values = 40.6 % ([By dimension](#by-dimension)) | +| **Mainstream practitioner** (a working tracking/mixing engineer) | **~36 %** | estimated: written area weights and discounts ([below](#mainstream-practitioner-and-essentials-user)) | +| **Essentials user** (making a song or podcast with the core features) | **~57 %** | estimated: written feature weights and discounts ([below](#mainstream-practitioner-and-essentials-user)) | +| Stage | **pre-alpha** (core-workflow gate fails) | see [Stage](#stage) | +| Remaining effort to alpha | **~110–180 Opus 5.5 agent-hours** | estimated: the failing gate rows | +| Remaining effort to beta | **~350–570 Opus 5.5 agent-hours** | estimated, calibrated (below) | +| Remaining effort to full parity | **~950–1,450 Opus 5.5 agent-hours** | estimated, calibrated (below) | + +### Readiness by audience + +| Audience | Ready % | Opus 5.5 agent wall-clock hours to ~95 % | Work that dominates | +|---|---:|---:|---| +| Full target (ready for real work) | ~40 % | ~950–1,450 h (~60–70 % parallelizable) | Hardware (interfaces, MIDI, surfaces, sync), the built-in plugin catalogue, AAF/OMF and immersive delivery, localization, fidelity against Pro Tools | +| Mainstream practitioner | ~36 % | ~380–600 h (~60 % parallelizable) | Interface recording and MIDI devices, AAF/OMF exchange, stock-plugin depth, the core-path bug backlog, interaction feel | +| Essentials user | ~57 % | ~110–200 h (~70 % parallelizable) | Launch and platform fixes, an onboarding and user guide, stock-effect panels and presets, MP3/AAC export, editing and transport bugs | + +Each audience's hours are for its own areas only, so essentials ⊂ mainstream ⊂ full. Calibration +is the same as for the full estimate ([Effort and calibration](#effort-and-calibration)): bug fixes +at 0.5–1.5 h each, features at about 200–300 tested lines per agent-hour, from the public-week PRs. +- **Mainstream sum:** recording 40–60, MIDI 50–80, editing 40–60, mixing 35–50, automation 20–30, + stock plugins 80–120, AAF/OMF 50–90, compressed export 10–20, bug backlog 25–40, interaction + feel 30–50. +- **Essentials sum:** default-device recording 10–15, transport 5–10, editing polish 15–25, effect + panels and presets 20–30, MP3/AAC export 10–20, built-in instrument 10–20, launch and platform + 15–25, onboarding and user guide 15–25, save fixes 5–10. + +The previous figure in ROADMAP.md (2026-10-07: "~65 % overall feature parity", "110–150 h to 100 %") +measured feature *presence*. This pass measures readiness, and found new evidence that pulls the +numbers down: 37 open GitHub issues from the first public week (about 25 of them correctness bugs +in features counted as done), no MIDI hardware input or output at all, no audio device or buffer +size selection, no localization, and a macOS release that cannot load signed third-party VST3s +(#153). The estimates did not drift up; the scope of what is measured widened. + +## How this was measured + +- **The target.** `/Applications/Pro Tools.app` on the owner's Mac: Info.plist reports version + 26.4.1.179 (Pro Tools Ultimate 2026.4.1). Only bundle metadata was read (version, + `CFBundleDocumentTypes` for the file types it opens, the `.lproj` folder names for its UI + languages: en, de, es, fr, ja, ko, zh-Hans, zh-Hant). Nothing inside the bundle's resources, + plug-ins or code was read or copied (clean-room rule, AGENTS.md). +- **The menu tree.** `plan/protools/menus-clean.txt` (observed black-box, local only) became the + committed 512-leaf catalog; `cargo xtask parity` and the UI layer's `engine.parity` score it. +- **Avid's own documentation.** *What's New in Pro Tools 2026.4* (Track Pin, MPEG-H renderer, + Dolby headphone personalization, speech-to-text upgrades, batch file rename) and earlier + release notes for features outside menus (Dolby Atmos renderer integration, ADM BWF, Sketch, + cloud collaboration, Splice, ARA, HEAT, control surfaces, I/O setup). +- **The code on origin/main (3bc2d92, 2026-10-10).** Read and counted with grep: ~70,900 lines of + Rust; 524 `#[test]` functions plus proptest suites; ~350 macro-registered engine command ids; + 26 built-in processors and 2 instruments in `crates/dsp/src/plugins`; audio I/O in + `crates/audio-io`; device I/O in `crates/playback` (cpal default output and default input only); + no MIDI device crate (no `midir`/CoreMIDI anywhere); no string catalog. +- **Users.** The 37 open and 21 closed GitHub issues, and the 42 merged and 29 open pull + requests up to 2026-10-10, are the only field evidence. Nothing has been benchmarked against + Pro Tools. +- **Not done:** running Pro Tools side by side on the same material (null tests of mixes, plugin + responses, fades, elastic audio). That is gap G-01 in [`gaps.md`](gaps.md). + +## By dimension + +Weights are how much each dimension decides whether a Pro Tools user (music production, +post-production, tracking) can switch. "Ready" is depth, correctness and fidelity, not presence. + +| Dimension | Weight | Ready | Kind | Remaining (h) | Doc | Evidence | +|---|---:|---:|---|---:|---|---| +| Features | 45 % | **~45 %** | estimated | 520–810 | [area table](#feature-areas) | Menu breadth 94 % measured, but depth is thin: see the area table | +| UI/UX fidelity | 10 % | **~55 %** | estimated | 60–100 | [ui-parity.md](ui-parity.md) | Edit/Mix windows, every menu, floating windows; open UX bugs #3 #5 #6 #7 #140 #144; shortcuts only recently right on Windows/Linux (#15, #41); generic plugin UIs | +| File formats | 10 % | **~40 %** | estimated | 70–120 | [file-format-parity.md](file-format-parity.md) | WAV/BWF/RF64/AIFF/FLAC read+write, compressed formats read; no `.ptx`, AAF, OMF, ADM BWF, MP3/AAC export, video export | +| Hardware | 10 % | **~12 %** | estimated | 110–180 | [hardware-parity.md](hardware-parity.md) | Default output and default input device only, fixed 512-sample block, no ASIO, no MIDI devices, no control surfaces, no sync | +| Stability | 10 % | **~45 %** | estimated | 50–80 | [gaps.md](gaps.md) | Never-crash rules and proptests (random edits, mutated sessions, hostile params); but ~25 open correctness bugs, a launch failure (#142), X11 llvmpipe failure (#107) | +| Performance | 5 % | **~35 %** | estimated (unmeasured) | 40–70 | [hardware-parity.md](hardware-parity.md) | Parallel strip rendering and PDC exist; whole files decoded into RAM, recording into RAM (#84 open), no track-count or latency benchmarks | +| Ecosystem / plugins | 4 % | **~30 %** | estimated | in Features + Hardware | [plugin-parity.md](plugin-parity.md) | CLAP/VST3/AU hosting; no AAX (Pro Tools' only format), no ARA, no sidechain, no control-surface ecosystem, no content library | +| Platforms | 3 % | **~65 %** | estimated | 20–40 | [ROADMAP.md](../ROADMAP.md) | Builds for macOS, Windows x64/x86/arm64, Linux, FreeBSD, Web (Pro Tools: macOS, Windows), but only macOS is exercised at runtime; Web lacks file pickers (#63, #64) | +| Localization | 2 % | **~12 %** | measured (catalog count) | 70–110 | [localization-parity.md](localization-parity.md) | English only, no string catalog; Pro Tools ships 8 UI languages; FR/ES PR #143 open | +| AI features | 1 % | **~5 %** | estimated | 30–50 | [gaps.md](gaps.md) | Pro Tools has speech-to-text transcription (upgraded in 2026.4); we have only an audio-to-MIDI pitch tracker | +| **Weighted** | 100 % | **~40 %** | | **~950–1,450** (overlaps removed) | | | + +Agent control is not weighted (Pro Tools has only its scripting SDK); SoundCraft is ahead there: +every command is reachable from the CLI, the JSON control channel and MCP. + +## Mainstream practitioner and essentials user + +Both use the method in craftrules `standards/progress-docs.md`. Each multiplies a weighted depth +average by written-down discounts. Depths come from the [Feature areas](#feature-areas) table and +the evidence there; issue numbers are `storytold/soundcraft` GitHub issues. + +### Mainstream practitioner: ~36 % + +The typical Pro Tools professional is a music or post engineer who tracks through an audio +interface, overdubs MIDI, edits, mixes with the stock plugins and bounces every week. This number +leaves out third-party plugin hosting, Avid cloud services and AI, control surfaces and sync, +immersive delivery, video, notation, and languages other than English. + +| Area (weekly use) | Weight | Depth | +|---|---:|---:| +| Recording and monitoring through an interface | 20 % | 40 % | +| Editing (trim, fades, comping, Slip/Grid, nudge) | 22 % | 65 % | +| Mixing and routing (faders, sends, busses, inserts, PDC) | 18 % | 60 % | +| Automation | 10 % | 55 % | +| Built-in plugins and AudioSuite | 12 % | 35 % | +| MIDI recording, editing, instruments | 10 % | 30 % | +| Bounce, save and reopen | 8 % | 60 % | +| **Weighted depth** | 100 % | **50.6 %** | + +| Discount | Factor | Evidence | +|---|---:|---| +| Interaction fidelity | ×0.90 | Shortcut collisions and dead shortcuts (#140 Heal, #144 Mix/Edit vs zoom, #7 Export); Multitool handles don't adjust audio (#5); generic plugin parameter panels (#138, #139); clip deletion inconsistencies (#3, #4) | +| Stability on real machines | ×0.92 | 26 open core-path bugs, e.g. bounce and latency (#59, #103), playback speed (#101), session saves (#86, #91), plus a launch failure (#142). Never-crash rules and property tests hold up: no crash reports on macOS since #16 | +| File exchange with Pro Tools users | ×0.85 | Engineers trade sessions, not stems. No `.ptx`, AAF or OMF (#40); WAV/BWF stems and MIDI files do work, so the factor isn't lower | +| **Result** | 50.6 × 0.90 × 0.92 × 0.85 = **35.6 % ≈ 36 %** | | + +This comes out *below* the full number (~40 %), which the standard says is unusual. The +mainstream engineer's weekly core is interface recording and MIDI overdubs, exactly the +alpha-gate failures. The full number gets partial credit from areas this user doesn't weight: +editing breadth, five platforms built, agent control. + +**User evidence** (GitHub, 2026-10-10; all 69 issues are from 28 outside reporters, none from +maintainers): +- **Praise:** 0 threads, and no "switched from Pro Tools" reports. +- **Open issues:** of 48 open, 26 are core-path bugs (editing, bounce, playback, sessions, + shortcuts, plugin loading, recording monitoring), 7 are niche-path bugs (web build, CLI/MCP, + Linux fonts and llvmpipe), and 15 are requests. +- **Requests:** several ask for other DAWs' feel: Ableton shortcuts and layout (#71, #72), an + FL/Ableton port (#38), Audition-style file editing (#81, #82). AAX (#109), VST2/LV2 (#30), + Ukrainian (#67). +- **Closed:** 21. +- **Contributions:** 12 outside contributors have merged PRs in the first week. That's + engagement, not yet use on real projects. + +### Essentials user: ~57 % + +A user who needs only the essentials: makes a song, demo or podcast, records through the computer's default +microphone or interface, uses default settings, and exports a file to share. + +| Core feature | Weight | Depth | Notes | +|---|---:|---:|---| +| New session, open a session, demo | 10 % | 80 % | | +| Import audio (drag and drop, WAV/MP3/AAC/FLAC) | 10 % | 80 % | Reads every common format | +| Record from the default device | 12 % | 65 % | Works on the default input; forced monitoring can feed back (#42) | +| Play, stop, loop, scroll, zoom | 10 % | 75 % | Half-speed after Stop (#101) | +| Basic editing: select, cut/copy/paste, split, trim, move, fades | 18 % | 70 % | #3, #5 | +| Undo/redo | 5 % | 90 % | Every command undoable | +| Volume, pan, mute, solo | 10 % | 85 % | | +| Add a stock effect (EQ, compressor, reverb) and pick a preset | 10 % | 60 % | Generic panels, few presets | +| Draw MIDI notes for a built-in synth | 5 % | 50 % | Two built-in instruments | +| Save and reopen | 5 % | 80 % | Web build can drop unsaved edits (#136) | +| Export / bounce a file to share | 5 % | 60 % | WAV/AIFF/FLAC only, no MP3/AAC | +| **Weighted depth** | 100 % | **72.4 %** | | + +| Discount | Factor | Evidence | +|---|---:|---| +| Launch and stability | ×0.90 | Doesn't launch for one user (#142), X11 llvmpipe failure (#107), Linux symbols as boxes (#45), Windows shortcuts (#41); macOS is solid | +| Discoverability and UI clarity | ×0.90 | Pro Tools' dense layout with no onboarding or user guide; shortcut collisions; plugin windows are bare sliders | +| Opening files people send them | ×0.97 | These users get WAV/MP3, which work; only Pro Tools sessions fail | +| **Result** | 72.4 × 0.90 × 0.90 × 0.97 = **56.9 % ≈ 57 %** | | + +## Feature areas + +Weights by what Pro Tools users actually spend time on. **Breadth** = the feature exists; +**Ready** = it works deeply and correctly enough for paid work. + +| Area | Weight | Breadth | Ready | Remaining (h) | What's there / what's missing | +|---|---:|---:|---:|---:|---| +| Recording and monitoring | 12 % | 75 % | **40 %** | 40–60 | Punch in/out, QuickPunch-style punch on the fly, pre/post-roll, loop record into playlists, input monitoring through the strip, autosave/recovery. Missing: input/output device choice, buffer size, duplex low-latency path, record straight to disk (#84 open), per-channel hardware input routing, TrackPunch/destructive punch beyond flags, monitoring opt-out (#42) | +| Editing | 15 % | 92 % | **65 %** | 40–60 | Slip/Shuffle/Spot/Grid, every Edit menu command, fades/crossfades, playlists and comping, clip groups, nudge, Tab to transient, separate/heal/consolidate/strip silence. Open bugs: #3, #5 (Multitool handles), #140 (Heal shortcut), #86, #91, #92; no batch fade presets, no field-recorder workflows | +| Mixing and routing | 12 % | 85 % | **60 %** | 35–50 | Faders, pan, sends, busses, aux, masters, VCAs, folders, 10 inserts, PDC, solo modes, I/O Setup. Missing: sidechain inputs, hardware-channel I/O mapping, bus/AFL/PFL paths verified, HEAT; bugs #59, #103 | +| Automation | 7 % | 80 % | **55 %** | 20–30 | Lanes for volume/pan/mute/sends/plugin params, trim, Write/Touch/Latch, glide/thin/coalesce. Missing: surround-pan and object automation, Touch/Latch prime and preview modes, automation on control surfaces; bug #104 | +| Built-in plugins and AudioSuite | 8 % | 40 % | **35 %** | 80–120 | 26 processors + 2 instruments covering every AudioSuite category; Pro Tools bundles roughly three times as many plugins plus virtual instruments. No fidelity comparison, generic parameter UIs (#139). See [plugin-parity.md](plugin-parity.md) | +| Third-party plugin hosting | 8 % | 70 % | **45 %** | 40–60 | CLAP, VST3, AU: audio, params, latency, notes, state, presets, off-thread lifecycle, CLAP floating GUIs, VST3 editors on macOS. Missing: AU editors, VST3 editors on Windows/Linux, sidechain buses, ARA, out-of-process sandboxing, macOS library-validation entitlement (#153, #149). AAX cannot be hosted (Avid SDK licence, PACE signing) | +| MIDI and instruments | 8 % | 70 % | **30 %** | 50–80 | Piano roll, event list, step input, quantize/transpose, real-time properties, SMF import/export. Missing: **any MIDI device input/output** (no keyboard recording, no external synths, no MIDI clock/MTC out), MIDI learn, instrument depth (Sampler PR #108 open), bug #98 | +| Score and notation | 2 % | 60 % | **35 %** | 20–30 | Grand-staff Score Editor, MusicXML export, printable SVG. Missing: notation editing depth (tuplets, articulations, lyrics, parts layout) | +| Elastic Audio, TCE, Beat Detective, pitch | 5 % | 70 % | **35 %** | 40–60 | Pitch-preserving warp on Elastic tracks, TCE, conform to tempo, Beat Detective and Identify Beat, audio-to-MIDI. Missing: per-algorithm choice (polyphonic/rhythmic/monophonic/varispeed/X-Form), warp markers UI depth, Elastic Pitch, quality vs Pro Tools unmeasured | +| Surround and immersive | 5 % | 55 % | **35 %** | 50–80 | Formats stereo → 9.1.6 and Ambisonics, surround panner, fold-down, multichannel bounce, object/bed routing. Missing: Dolby Atmos renderer integration and ADM BWF, MPEG-H (new in 2026.4), binaural/headphone monitoring, surround automation; bug #89 | +| Video and post | 5 % | 60 % | **40 %** | 40–60 | Video track, H.264/ProRes/MJPEG decoders, sync offset, relinking, timecode rulers. Missing: HEVC/DNx/AV1, video bounce/export, timecode sync to external machines, speech-to-text transcript, field-recorder/iXML conform | +| Session, file management, interchange | 10 % | 55 % | **35 %** | 60–100 | `.scraft` + Audio Files, Save Copy In, Import Session Data, clip groups, session text export, audio-health report. Missing: `.ptx` read/write, AAF/OMF (#40), session templates, track presets, workspace/Soundbase browser, disk streaming of long sources, batch rename; bugs #86, #91, #136 | +| Collaboration, cloud, Sketch, Splice | 2 % | 0 % | **0 %** | not estimated | Avid services; out of scope unless the owner decides otherwise | +| Agent control (CLI, control channel, MCP) | 1 % | 100 % | **100 %** | 3 | Ahead of Pro Tools' scripting SDK; one open bug (#145) | +| **Weighted** | 100 % | **~70 %** | **~45 %** | **~520–810** | | + +## Stage + +**Pre-alpha.** Readiness (~40 %) is at the alpha bar, but the core-workflow gate +([`roadmap.md`](roadmap.md#alpha-gate)) fails three of six Pro Tools workflows on macOS, the main +platform: + +- Tracking from a chosen interface at a chosen buffer size: **no**. Only the default devices are + used, the mix runs in fixed 512-sample blocks, input and output are separate streams, and + takes are held in RAM. +- MIDI recording: **no**. There is no MIDI device layer. +- Session interchange with Pro Tools or picture editors: **no**. No AAF/OMF/`.ptx`. + +Editing, mixing with plugins, bouncing, and saving and reopening pass (with known bugs). + +**Distance to alpha: ~5 points of readiness and ~110–180 agent-hours** (G-01, G-02, G-03, part +of G-06, and the #153 entitlement). **Distance to beta: ~35 points and ~350–570 agent-hours** +(beta also needs ~75 % ready). The beta plan is in [`roadmap.md`](roadmap.md). + +## Effort and calibration + +Hours are **Opus 5.5 agent wall-clock hours**: one agent session working sequentially, including +tests and verification. + +**Calibrated against this repo's history** (`git log`, `gh pr list`): + +- The 10-05 bulk commits (`first commit` through `Video track, Audio Unit hosting…`, ~70k lines) + carry batch-commit times, not authoring times, so they don't calibrate. +- The public week (2026-10-07 → 10-10, 42 merged PRs) does. Focused bug fixes with a regression + test, +20 to +120 lines (#116–#122, #25, #28, #37, #61), took **~0.5–1.5 h** each. Small + features of +200 to +1,000 lines (#32 light theme +516, #11 log file +981, #8 credits +666, #23 + plugin menus +259, #76 clip-gain fader +198) took **~2–5 h**: about **200–300 tested lines per + agent-hour**. +- Areas were sized by the code they need at that rate (for example, MIDI device I/O plus MIDI + recording ≈ 3–5k lines ≈ 12–25 h), plus a 1.3–1.5× tail factor for verification against Pro + Tools behaviour, as FilmCraft observed for its long tail. + +**Parallelism.** About 60–70 % of the work parallelizes across 4–5 agents by crate (dsp plugins, +hardware/playback, file interchange, UI, localization). The audio-thread and hardware work +serializes more, because it needs hands-on testing. + +**Needs a human:** +- Owner decisions: AAX (requires Avid's SDK licence and PACE signing; probably never), `.ptx` + reverse engineering (clean-room implications), Avid cloud features (out of scope by default). +- Hardware we don't have in CI: multichannel interfaces, ASIO drivers, control surfaces (HUI/MCU, + EUCON is Avid-proprietary), MIDI keyboards, sync generators. +- Native-speaker review for every language beyond English. +- Ears: a mix engineer's A/B of plugins, fades and elastic audio. + +## Revision history + +| Date | Change | Summary | +|---|---|---| +| 2026-10-10 | minor | Readiness-by-audience table: hours to ~95 % for full (950–1,450 h), mainstream (380–600 h) and essentials (110–200 h). The full number is already the additive weighted sum over the written dimension table (40.6 %); method unchanged | +| 2026-10-10 | minor | Added the mainstream-practitioner (~36 %) and essentials-user (~57 %) numbers with written weights, discounts and user evidence. Checked the full ~40 %: it is the written dimension weights × values (40.6 %), so it doesn't move | +| 2026-10-10 | minor | Stage alpha → pre-alpha under the core-workflow gate; alpha distance ~110–180 h | +| 2026-10-10 | major | Full re-measure against Pro Tools Ultimate 2026.4.1: two numbers (breadth ~70 %, ready ~40 %), dimension and area tables with hours, stage alpha; hours re-calibrated from PR history (110–150 h → 950–1,450 h to full parity: the old figure counted presence only) | +| 2026-10-07 | major | Area table and "~65 % overall, 110–150 h" estimate (then in ROADMAP.md) | diff --git a/docs/ui-parity.md b/docs/ui-parity.md new file mode 100644 index 0000000..80ff25b --- /dev/null +++ b/docs/ui-parity.md @@ -0,0 +1,67 @@ +# UI parity + +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first interaction checklist against Pro Tools 2026.4.1) · **Target:** Avid Pro Tools Ultimate 2026.4.1 + +How SoundCraft feels in the hands of a Pro Tools user: tools, modes, modifiers, shortcuts, +windows, meters. Measured from `crates/model/src/session.rs` (tools, modes), the command +registry (shortcuts), `crates/ui-egui/src` (windows, gestures) and user issues; compared with +reference screenshots kept locally under `plan/protools/screenshots/` (16, never committed). + +**UI/UX fidelity: ~55 % ready** (estimated). Remaining ≈ 60–100 h. + +Legend: ✅ matches · 🟡 partial · ❌ missing. + +## Tools and modes + +| Feature | Status | Notes | +|---|---|---| +| Tools: Zoom, Trim, Selector, Grabber, Scrubber, Pencil, Smart (7) | ✅ present | Trim variants (TCE, loop, scrub trim) and Grabber variants (separation, object) partial; Multitool fade/trim handles don't adjust audio (#5) | +| Edit modes: Shuffle, Slip, Spot, Grid (absolute/relative) | ✅ | Spot dialog present | +| Grid and nudge values, all timebases | ✅ | Bars/Beats, Min:Secs, Timecode, Feet+Frames, Samples | +| Keyboard focus modes (Commands, Clip List, Groups) | 🟡 | Commands focus single-key editing ✅; list focus partial | +| Link timeline/edit, link track/edit, Tab to transient, insertion follows playback | ✅ | | +| Mirrored MIDI, MIDI merge, layered editing | 🟡 | Stored and partly honoured | + +## Keyboard and mouse + +| Feature | Status | Notes | +|---|---|---| +| Default shortcuts | 🟡 146 bound (measured: distinct `Some("…")` shortcuts in the registry) | Pro Tools' default set is several hundred incl. numeric keypad and focus keys. Collisions: Mix/Edit toggle vs zoom (#144), Heal (#140), Export (#7) | +| Ctrl as Cmd on Windows/Linux | ✅ since #15, #41 still open in some builds | #62 shows Ctrl in labels | +| Numeric keypad transport and memory-location recall | 🟡 | Classic / Transport / Shuttle modes not all present | +| Modifier gestures (Alt for all tracks, Shift-Alt for selected, Cmd-click fine faders, Ctrl-click defaults) | 🟡 | Main ones on faders and pan; not across every control | +| Scroll/zoom: wheel, trackpad pinch | 🟡 | Anchored trackpad zoom in open PRs #112, #137 | +| Drag and drop: Clip List → tracks, files → tracks | ✅ macOS/Windows; 🟡 Wayland (PR #150) | | +| Context menus (clip, track name, ruler, Clip List) | 🟡 | Clip and track menus exist; depth lower than Pro Tools'; Clip List delete (#4) | + +## Windows and panels + +| Window | Status | Notes | +|---|---|---| +| Edit window: rulers, track headers, view columns, Clip List, Groups, Tracks list | ✅ | Track Pin (new in 2026.4) ✅ (`track.pin`) | +| Mix window: strips, views (inserts, sends, I/O, comments, EQ curve, preamps, instruments, object) | ✅ | Narrow Mix ✅; Delay Compensation view and HEAT missing | +| MIDI Editor, Score Editor, Event List | 🟡 | Dock height bug fixed (#113); notation editing shallow | +| Transport, Big Counter, Memory Locations, Automation, Video, Universe, Renderer, UI Customization | ✅ present | | +| Workspace / sound browser with previews | ❌ | G-16 | +| I/O Setup | 🟡 | Busses and paths; no hardware channel matrix (G-01) | +| Preferences | 🟡 | Many settings stored, fewer honoured | +| Window configurations, Tile/Cascade | 🟡 | Configurations ✅; Tile/Cascade in PR #151 | +| Plugin windows | 🟡 | Generic parameter sliders; Pro Tools plugins have bespoke GUIs (#138 asks for skeuomorphic design); multi-page plugin views (#6) | +| Command palette (Search) | ✅ | Over every command | + +## Look and meters + +| Feature | Status | Notes | +|---|---|---| +| Dark theme close to Pro Tools' | ✅ | Light theme (#32) and live system appearance (#85) beyond Pro Tools | +| Interface scaling | 🟡 | Slider in PR #147 | +| Meter types and ballistics (peak, RMS, VU, K-scales, gain reduction) | 🟡 | Peak/RMS; meter type choice and GR meters partial | +| Clip indicators, track colours, waveform views (peak/power/rectified/outlines) | ✅ | | +| Fader resolution, fine adjust, numeric entry | 🟡 | | +| macOS system menu bar | ✅ | #10 | + +## Revision history + +| Date | Change | Summary | +|---|---|---| +| 2026-10-10 | major | Created: tools, modes, shortcuts, windows and meters checklist against Pro Tools 2026.4.1 | diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 9ccb8fe..6aaaca0 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -113,7 +113,7 @@ fn assets() -> Result<(), String> { } fn parity() -> Result<(), String> { - cargo(&["run", "-q", "-p", "soundcraft-cli", "--", "parity", "--write", "docs/parity.md"]) + cargo(&["run", "-q", "-p", "soundcraft-cli", "--", "parity", "--write", "docs/parity-checklist.md"]) } /// Crates that must compile for the web.