Commit Graph

104 Commits

Author SHA1 Message Date
daniel c7005807a6 docs(design-view): correct reversed untagged-track invariant to "every leaf is managed"
Untagged = Arrange member, fully parked in non-Arrange modes like a tagged
leaf; show-both opts out. Master/parents/mute-solo caveats preserved.
2026-07-23 05:13:54 -04:00
daniel 9df24f7a77 Merge fix: park untagged leaves in non-Arrange modes + immediate TCP/MCP refresh 2026-07-23 05:03:57 -04:00
daniel cf871e195f Archive Milestone 5; correct M4 identity note to GUID-primary
Move completed M5 (bank_panel: thumbnails, audition, multi-select, keyboard)
to COMPLETED.md and close the thumbnail-cache open question; reword the M4
Save-As identity note to the final GUID-primary/pointer-secondary design.
2026-07-23 05:03:40 -04:00
daniel 4bf394b89c fix(view): park untagged leaves in non-Arrange modes; refresh TCP/MCP on apply
planToggle now enumerates all leaves in the FolderTree instead of only tagged
membership entries, so untagged (Arrange-member) tracks park in Design and
restore in Arrange. applyMode calls TrackList_AdjustWindows + UpdateArrange so
changes render immediately. Correct the stale "tagged-only" invariant comments.
2026-07-23 04:59:50 -04:00
daniel 60add4afc7 Merge fix: GUID-primary project identity restores bank reload on reopen/new 2026-07-23 04:51:23 -04:00
daniel affde0ef53 fix: layer GUID-primary project identity so reopened/new projects reload the bank
classifyProjectTransition now checks the stored GUID first, then the pointer,
fixing the w10 regression where a recycled ReaProject* address stopped the bank
reloading. poll()'s fork re-GUID gate is bound to !sameProjectObject. Full
transition matrix pinned in tests.
2026-07-23 04:46:36 -04:00
daniel 39baf28c93 Docs: reflect Phase D4 landing
Archive D4 (actions + integration) to COMPLETED.md; add track_guid and
Design View action family to CLAUDE.md architecture.
2026-07-22 22:08:38 -04:00
daniel e03728bdf7 Merge Phase D4: Design View action family + reapply-on-open wiring 2026-07-22 22:06:06 -04:00
daniel 0dce66a771 Merge M5 Wave B: audition, multi-select, and keyboard nav 2026-07-22 22:03:18 -04:00
daniel fc54472d3e feat(bank_panel): audition, multi-select, and keyboard nav (M5 Wave B)
Pure bank_grid gains hit-test, selection-update, and arrow-nav math with
tests; the panel wires mouse multi-select, keyboard nav via an accelerator
hook, and stock PlayPreview/StopPreview audition with a leak-free preview
lifecycle. Read-only: no arrange insertion, no project/bank mutation.
2026-07-22 21:55:16 -04:00
daniel b5332e0415 Docs: mark M4 Save-As identity collision as fixed
Update the M4 known-limitation note to reflect the object-identity
classifier fix (forked projects no longer cross-contaminate).
2026-07-22 21:51:14 -04:00
daniel ae41cad4f5 feat(view): D4 Design View action family + reapply-on-open wiring
Register toggle/activate/tag/untag/show-both actions driving the D2
shell and D3 model; reapply saved active mode on project load via a
persist load-signal seam. Shared guidString helper; pure nextModeId
unit-tested.
2026-07-22 21:46:58 -04:00
daniel 322581227c Docs: reflect Phase D2/D3 landing
Archive D2 (view shell) and D3 (persist slice) to COMPLETED.md;
add view/view_tree to CLAUDE.md architecture + view_tree_tests target.
2026-07-22 21:36:11 -04:00
daniel 5ff029ba1d Merge fix: project-object identity stops forked-bank cross-contamination 2026-07-22 21:29:50 -04:00
daniel 36270e2064 fix(persist): use project-object identity to stop forked-bank cross-contamination
M4's GUID-only classifier read a tab-switch between two Save-As forks (shared
copied GUID, different paths) as a Save-As and clobbered a bank. Thread
sameProjectObject into classifyProjectTransition: a different object always
Loads, never relocates; a forked sibling gets re-GUID'd to diverge.
2026-07-22 21:28:54 -04:00
daniel c6fdc12557 Merge Phase D2: view shell — apply mode toggle to live project 2026-07-22 21:26:21 -04:00
daniel 36dd5fd0f6 Merge dev (M5 bank_panel) into view-shell branch
# Conflicts:
#	CMakeLists.txt
2026-07-22 21:26:11 -04:00
daniel aacf8b49e8 Merge Phase D3: persist ViewModeModel in project ext state 2026-07-22 21:19:38 -04:00
daniel 27d887671c fix(view): derive parent/folder visibility on mode toggle
applyMode now drives B_SHOWINTCP/B_SHOWINMIXER for every parent node
from visibleTracks(tree, targetMode); parents are never parked. Adds
restoreFxOffline by-index remap hazard note.
2026-07-22 21:08:31 -04:00
daniel 62c26ac781 Merge M5 Wave A: docked bank panel with LICE waveform thumbnails 2026-07-22 21:08:26 -04:00
daniel aa8b963fb3 Merge dev (Phase D1) into p1-w9-bank-panel
# Conflicts:
#	CMakeLists.txt
2026-07-22 21:07:59 -04:00
daniel 71a3b26a47 feat(bank_panel): docked bank grid with LICE waveform thumbnails (M5 Wave A)
Docked SWELL window toggled by a new action, drawing the current bank as
per-sample min/max thumbnails (PCM_source + peaks) with an in-memory cache.
Pure grid-layout/cache-key math in bank_grid (tested). Renames peaks::Sample
-> AudioSample to avoid colliding with bank_model::Sample.
2026-07-22 21:02:22 -04:00
daniel ae76653628 D3: persist ViewModeModel in project ext state alongside bank
Add forever-stable "view_state" key under the "reasampler" namespace.
saveToActiveProject additionally serializes the ViewModeModel;
loadFromProject restores it on every load path, defaulting on an
absent/malformed key. Model state only — no visibility apply (D4).
2026-07-22 20:56:04 -04:00
daniel c068279aac feat(view): D2 view shell — apply mode toggle plan to live project
Reads I_FOLDERDEPTH into a FolderTree (pure view_tree helper, unit-tested),
snapshots to-be-parked tracks before parking, runs the D1 planner, and applies
park/restore flag + per-FX-offline writes under an undo block. Master and
mute/solo untouched; acts only on tagged tracks.
2026-07-22 20:55:50 -04:00
daniel 2d040d6896 Docs: reflect Phase D1 landing
Rename view_model -> view_mode_model across Design View spec docs;
archive D1 to COMPLETED.md; add view_mode_model_tests to CLAUDE.md
targets table and pure-core list.
2026-07-22 20:45:06 -04:00
daniel c534c91181 Merge Phase D1: pure view_mode_model core 2026-07-22 20:41:07 -04:00
daniel 25cfb62d46 rename view_model -> view_mode_model; add shell-expands-FX test and parse-site comments 2026-07-22 20:37:17 -04:00
daniel ec211a5620 Archive Milestone 4 in docs
Move completed M4 (persist) from PLAN.md to COMPLETED.md with a decisions
note (GUID identity, Save-As copy, MarkProjectDirty, known limitation);
update CLAUDE.md repo-identity to M0-M4 complete.
2026-07-22 20:21:36 -04:00
daniel 33ffb45a45 Add pure view_model core (Phase D1): N-mode registry, GUID-keyed membership, folder-tree visibility derivation, snapshot-based park/restore planner, JSON round-trip; new view_model_tests CTest target 2026-07-22 20:21:14 -04:00
daniel fdd5bd158b Merge M4 fix: MarkProjectDirty so captures flush to the .rpp 2026-07-22 20:15:37 -04:00
daniel f310913da5 fix(persist): call MarkProjectDirty after every SetProjExtState write
After capture, saveToActiveProject wrote ext state but left the project
clean, so Ctrl+S was a no-op and the bank was silently lost on close.
Also flushes the Save-As re-GUID on the normal save flow.
2026-07-22 20:15:10 -04:00
daniel 6a09e1d48d Merge M4: bank persistence to project ext state + Save-As relocation 2026-07-22 19:57:25 -04:00
daniel 06256f05e9 Add Design View phase spec (Phase D), parallel to capture roadmap
CONTEXT.md: additive Design View technical spec section.
PLAN.md: additive Phase D (D1-D5) milestone breakdown.
docs/product/design-view.md: product framing, N-mode reasoning,
screenset differentiation, design-direction calls.
2026-07-22 19:55:23 -04:00
daniel 53da916917 feat(persist): M4 bank persistence + Save-As relocation
Serialize BankIndex to project ext state ('reasampler'), reload on project
load, resolve paths project-relative. Save-As copies the bank to the new .rpp;
identity keyed off a minted GUID (not the recycled ReaProject*) so project
switches don't clobber banks. Pure classifyProjectTransition tested.
2026-07-22 19:55:09 -04:00
daniel a9ba532f07 Archive Milestone 3 in docs
Move completed M3 (offline capture spike) from PLAN.md to COMPLETED.md; close
the render-command and bank-format open questions; add capture_paths_tests to
the CLAUDE.md targets table and note M8 is dialog-free.
2026-07-22 18:54:43 -04:00
daniel 60379c06b6 Merge M3 fix: unsaved-project detection via .rpp filename 2026-07-22 18:47:39 -04:00
daniel 09a85737a8 fix(capture): detect unsaved project via EnumProjects .rpp filename
GetProjectPathEx returns REAPER's recording path (never empty); EnumProjects
returns the .rpp path (empty when unsaved) — the correct signal. Bank now
derives from the .rpp parent so it sits alongside the project file. Render
progress window documented as inherent to REAPER offline render.
2026-07-22 18:45:07 -04:00
daniel c7a8c75ef2 Merge M3 fixes: render format, project rate, unsaved-project handling 2026-07-22 17:03:14 -04:00
daniel a14d33aa75 Fix M3 capture: render format, project rate, unsaved-project handling
RENDER_FORMAT now uses the base64 float-WAV config (raw bytes were rejected
into a 16-bit/44.1 fallback); RENDER_SRATE pinned to the project rate.
Unsaved projects prompt Save then refuse if cancelled — no default-location
fallback. Harden deriveBankPaths against empty projectDir.
2026-07-22 17:02:15 -04:00
daniel d60fe9ace3 Merge M3: offline-render capture spike (master-mix / time-selection) 2026-07-22 13:08:37 -04:00
daniel d9ad8e4adf M3: offline-render capture spike (master-mix / time-selection)
ICaptureBackend/CaptureRequest seam + OfflineRenderBackend driving snapshotted
RENDER_* with dither/normalize forced off for bit-identical output, RenderFailed
via filesystem check, and a pure capture_paths lib with tests. Spike action registered.
2026-07-22 13:07:31 -04:00
daniel 93e2783098 Archive Milestone 2 in docs
Move completed M2 (peaks module) from PLAN.md to COMPLETED.md; add peaks_tests
to the CLAUDE.md targets table and update the pure-core status to M0-M2 done.
2026-07-22 10:00:32 -04:00
daniel 995e790ac0 Merge M2: pure peaks module (per-channel min/max envelope from PCM) 2026-07-22 09:58:18 -04:00
daniel 4cb40f6e34 peaks: pure per-channel min/max envelope from interleaved PCM
New STATIC lib + peaks_tests (CTest), mirroring bank_model. Float samples,
per-channel (no fold); exact integer bin spans handle remainder, short
buffers, and degenerate inputs with no OOB. Bin-span math guarded against
size_t overflow for pathological binCount.
2026-07-22 09:23:03 -04:00
daniel 57a137199e Archive Milestone 1 in docs
Move completed M1 (bank_model core) from PLAN.md to COMPLETED.md; record
the parseInt int64-to-int narrowing as a future-hardening note.
2026-07-22 07:23:24 -04:00
daniel 5ba2bd4dde Merge M1: pure bank_model core (Sample + BankIndex, dedup, tiers, JSON) 2026-07-21 22:59:24 -04:00
daniel 2862e1c865 Implement M1 bank_model: Sample + BankIndex, hash-dedup, tiers, JSON round-trip
Pure dependency-free core with self-contained JSON writer/parser. Absolute
paths (incl. drive-relative) rejected at the add boundary; \uXXXX decoded to
UTF-8 with surrogate pairs; malformed input returns nullopt.
2026-07-21 22:54:21 -04:00
daniel 82858fa484 CLion files 2026-07-21 21:45:36 -04:00
daniel 6fcb811668 Track CONTEXT.md spec and ignore worktrees dir
Commit the authoritative build spec that the docs reference, and add
/.claude/worktrees/ to .gitignore ahead of milestone worktrees.
2026-07-21 21:34:27 -04:00
daniel c60b3acc2b Reflect M0 landing in docs
Retarget README to ReaSampler and current build targets; reconcile
CLAUDE.md repo-identity + targets table to reaper_reasampler; archive
Milestone 0 from PLAN.md into new COMPLETED.md.
2026-07-21 21:27:31 -04:00