Commit Graph

304 Commits

Author SHA1 Message Date
daniel 6659c2dbdf docs(product): fold the REAPER VST-host bridge into MIDI-playback framing
A VST hosted in REAPER can call back into REAPER's own API (name-resolved
via audioMaster), so a native ReaSampler instrument reads live project
ext-state directly. Re-frames the seam, D6, and the D1/D2 calculus.
2026-07-26 05:49:47 -04:00
daniel 6d372794f5 feat(actions): batch bank index verbs into single REAPER undo points (R-B)
Wrap each bank verb's persist in Undo_BeginBlock2/EndBlock2 with UNDO_STATE_MISCCFG so one bank op is one Ctrl-Z; ext-state participates in undo per SDK. Rejected/no-op ops open no block.
2026-07-26 05:49:38 -04:00
daniel cce9016279 docs: frame versioning scheme + beta side-channel (Phase V)
Add docs/product/versioning-and-release.md and a PLAN.md Phase V pointer
laying out release versioning and the beta side-channel as decidable
options (V1-V4, unsettled - awaiting Daniel).
2026-07-26 05:48:45 -04:00
daniel 2ee2b37532 chore: remove routine console chatter, keep error reporting
Strip ShowConsoleMsg from all normal-success paths (loaded, captured, bank
create/rename/delete/evacuate/activate, realtime started, insert ok, transfer
summary). Remove dead REAPERAPI_WANT_ShowConsoleMsg in capture.cpp.
Error/failure/malformed-data paths and modal confirms untouched.
2026-07-26 05:48:41 -04:00
daniel 6c6a275234 Add MIDI-playback opportunity & design-space framing note
Frame the option space for a MIDI-triggered sampler consuming ReaSampler
banks: the extension-format ceiling (verified vs. vendored SDK headers),
the bank-as-shared-artifact seam, scope tiers, and the forks for Daniel.
2026-07-26 05:38:06 -04:00
daniel d086294f15 Merge Phase B: multi-bank system (pool + named banks) — B1 bank_book, B2 persist, B3 actions, B4 panel 2026-07-26 05:26:51 -04:00
daniel c33cb50632 Merge dev into phase-b-multibank (integrate parallel M7/8 + Phase D work before dev promotion)
# Conflicts:
#	CLAUDE.md
#	CMakeLists.txt
#	src/actions.cpp
#	src/bank_panel.cpp
#	src/persist.h
2026-07-25 23:30:44 -04:00
daniel cdd572c116 Merge: redraw arrange when inserted item lands on already-split lane 2026-07-25 17:21:12 -04:00
daniel 47721a40c4 fix(view): redraw arrange when inserted item lands on already-split lane
An item inserted onto an already-split folder in Design mode sat on the
correct lane but stayed invisible until a manual toggle: mintManagedLanes
returned on the idempotent no-op path before its UpdateArrange call. Force
the redraw there so the item appears immediately.
2026-07-25 17:16:58 -04:00
daniel bdd4ddc0cf Merge B4 review cleanup — null-guards, focus nudge, dragArmed capture-loss, comment fixes 2026-07-25 17:11:02 -04:00
daniel cca7380777 fix(bank_panel): null-guard uniformity, stale comment/focus nudge on delete, dragArmed on capture-loss, menuAppend comment 2026-07-25 17:10:46 -04:00
daniel 960a649238 Merge B4: vertical-split bank_panel — LICE tab strip, id-keyed bank ops, move/copy drag 2026-07-25 16:55:49 -04:00
daniel a67a2f9479 feat(bank_panel): B4 vertical-split UI — LICE tab strip, id-keyed bank ops, move/copy drag
Pool grid on top, LICE-drawn named-banks tab strip below with overflow-scroll
(new pure tab_strip seam, unit-tested). Full-height toggles, unmistakable
active-bank readout distinct from the shown tab, tab context menu
(activate/rename/delete/evacuate/create) with rich confirm-on-non-empty-delete,
and move/copy via menu + drag with drop-highlighting. Fold-in: deserialize
auto-disambiguates duplicate folded bank names instead of rejecting the book.
2026-07-25 14:37:57 -04:00
daniel a786915451 docs: record D2-W3-B landing; mark Phase D2 complete; preserve deferred panel indicator
Move D2-W3-B (item-level mode actions + W3-A polish) from PLAN.md to COMPLETED.md.
Phase D2 two-canvas sub-phase functionally complete; panel UI indicator explicitly
deferred, not dropped.
2026-07-25 14:12:12 -04:00
daniel 7885d5cf48 Merge: D2 W3-B — item-level Design/Arrange move + untag actions; W3-A polish 2026-07-25 13:53:48 -04:00
daniel 261efe5452 feat(actions): item-level Design/Arrange move + untag actions; W3-A polish
Add three MIDI-bindable item actions mirroring the track tag family, routed
through the shared hookcommand: retag selected items' membership then re-drive
mint/apply so each lands on its mode's managed lane (manual-lane items exempt),
all in one undo block. Extract shared item_read seam, simplify applyMintPlan's
lane-count pass, and guard reconcile against unregistered-mode lanes.
2026-07-25 13:30:07 -04:00
daniel 88af39e036 Merge B3: bindable multi-bank action family + unique bank names 2026-07-25 13:17:57 -04:00
daniel ccf65415c9 fix(banks): enforce unique bank display names in-model + B3 review minors 2026-07-25 01:29:47 -04:00
daniel 22012861c5 Merge: make tool-managed lane splits visually transparent (collapse display + lazy-mint) 2026-07-25 01:22:15 -04:00
daniel 314cd7bf36 Make tool-managed lane splits visually transparent: collapse display + lazy-mint
Drive C_LANESCOLLAPSED=2 and hide lane buttons only on tracks the tool itself splits
(gated on the pre-write I_FREEMODE read, so user comp-lane display prefs are never
stomped). Lazy-mint managed lanes only for modes with own content, never an empty
reserved lane; confinement holds via C_LANEPLAYS on the lone lane.
2026-07-24 05:44:19 -04:00
daniel cbfc13c4e0 feat(banks): bindable multi-bank action family — create/rename/delete/evacuate/activate/move/copy + full-height toggles (B3) 2026-07-24 05:35:16 -04:00
daniel 288c1e44e4 Merge B2: persist BankBook under banks key, retire legacy bank_index, route capture to active bank 2026-07-24 05:17:52 -04:00
daniel ff2c3ebce5 Merge: lane-separate content-bearing folder's own media when derived-visible in >1 mode 2026-07-24 05:14:33 -04:00
daniel 78a31ff215 fix(view): lane-separate a content-bearing folder's own media when it's derived-visible in >1 mode
planLaneMinting now takes the model + folder tree and splits a track visible in
2+ modes that carries own media (own-item span OR folder derived-visibility),
fixing an item dropped on a cross-mode folder leaking into every mode. Show-both
tracks are never force-split.
2026-07-24 05:08:18 -04:00
daniel 878d807b12 docs: settle removal/prune forks R-A..R-E; add owned-file manifest seam
R-A this-bank; R-B batched REAPER undo points (Phase-B-wide, SDK must-verify);
R-C trash-preferred w/ unlink fallback; R-D owned-file manifest, landed early as
new B-cap capture point; R-E manual action + bank_panel button.
2026-07-24 04:59:28 -04:00
daniel 85993ebc3e feat(persist): persist BankBook under banks key, retire legacy bank_index, route capture to active bank (B2) 2026-07-23 20:26:15 -04:00
daniel 960c5166ee docs: record D2-W3-A landed in COMPLETED.md
planLaneMinting pure decision, applyMintPlan shell, reconcileManagedLanes
on load, persist via ViewModeModel view_state. CTest 14/14; DAW verify
pending. (PLAN.md D2-W3-B narrowing already landed via a concurrent commit.)
2026-07-23 20:24:31 -04:00
daniel 8d2a4ac872 Merge peaks display fix: dB-compressed waveform thumbnails 2026-07-23 20:23:48 -04:00
daniel b3be9799e0 fix: apply dB compression to waveform thumbnail display
Linear amplitude-to-pixel mapping made -20 dBFS content reach only
10% of cell height and -40 dBFS round to zero. Replace with a dB
scale (floor kDisplayFloorDb = -60 dB, in bank_grid.h) so quiet
content is visible. Pure helper compressAmplitudeForDisplay() lives
in bank_grid; drawThumbnail() calls it. Five new unit tests cover
full-scale, zero, mid-levels, floor clamping, and sign preservation.
2026-07-23 20:21:55 -04:00
daniel b931dada0a Scope sample-remove (B5) and prune (Phase R) into the plan
Adds the two missing removal capabilities: sample-level remove (Phase B
point B5, index-only) and the prune file-lifecycle path (new Phase R, the
sole file-deleting op), resolving the dangling capture/prune reference.
Adds CONTEXT.md spec, PLAN.md points, and a product note; surfaces forks
R-A..R-E for decision.
2026-07-23 20:21:50 -04:00
daniel b9046b2842 Add M11 polish points: keybinding help labels + action trigger buttons
Bank_panel labels surface each capture action's current key binding
(kbd_getTextFromCmd, unbound-safe); clickable buttons fire the actions
through the existing command-id contract. Pure/shell split noted per point.
2026-07-23 20:18:01 -04:00
daniel ce2998c3c7 Merge: D2 W3-A — mint managed lanes to separate cross-mode content per stance 2026-07-23 20:17:27 -04:00
daniel 92827c59be Lock M10 provenance spec to Daniel's fork picks (P1=a, P2=a)
Settle the reshaped Milestone 10: thin capture-recipe fingerprint and
bank-only re-capture; P3/P4 closed as moot. Remove the pending-picks
banner in PLAN.md and stamp the provenance product note as settled.
2026-07-23 20:10:54 -04:00
daniel b182146f9a feat(view): mint managed lanes to separate cross-mode content per stance (D2 W3-A)
Pure planLaneMinting decides which tracks hold >1 mode's content and which managed
lane each item lands on; view.cpp applies it (I_FREEMODE/I_NUMFIXEDLANES/P_LANENAME/
I_FIXEDLANE) under one undo block, driven off the auto-tag detection tick. Manual lanes
and their items are never touched. Load-time reconcile rebuilds ownership from durable
lane names before reapplying active-mode visibility.
2026-07-23 20:08:38 -04:00
daniel 1743df135b Reshape M10 to provenance-only, reconciled with dual-canvas
Cut the null-test verify action and pre-FX-dry mechanism (Daniel's
call); keep provenance + re-capture-from-source. Sample.provenance
already exists/round-trips (M1), so M10 populates and consumes it. Add
docs/product/provenance.md with dual-canvas forks P1-P4 and the leaned
bank-only path; rewrite PLAN.md M10 as a proposal pending fork picks.
2026-07-23 20:04:54 -04:00
daniel 5b19525ec0 Merge B1: pure bank_book registry (pool + named banks, move/copy, JSON round-trip) 2026-07-23 19:37:47 -04:00
daniel fed70c0a80 Merge: fix reload-in-Design mis-tagging Arrange tracks into Design 2026-07-23 19:31:29 -04:00
daniel 02b6350dc9 fix(bank_panel): drive new-content baseline re-arm from persist's load signal
The detector re-armed its GuidBaseline on a pointer compare (proj != lastProject),
a weaker signal than persist's GUID-primary identity. On a load onto a recycled
ReaProject* the baseline never reset, so the just-loaded project's pre-existing
tracks diffed against the previous project and were mass-tagged into the active
mode — opening a Design-saved project mis-tagged its Arrange tracks. Re-arm now
rides persist's authoritative load signal via bankPanelNotifyProjectLoaded().
2026-07-23 19:26:06 -04:00
daniel 54d3ce3958 docs: archive tail follow-ons; add tail_setting key to persist doc
Record the Manual scroll fine-adjust + per-project tail persistence in
COMPLETED.md; name all three reasampler ext-state keys in CLAUDE.md.
2026-07-23 19:23:44 -04:00
daniel 0114559bdb Merge tail follow-ons: Manual fine-adjust (scroll) + per-project persistence 2026-07-23 19:20:28 -04:00
daniel beaec8642a fix: tail toggle/scroll now commits to ext-state immediately
markTailDirty() called MarkProjectDirty() but never called
saveToActiveProject(), so the new tail value was never written
to SetProjExtState. On unsaved projects saveToActiveProject()
no-ops cleanly, resolving the companion Major at the same time.
2026-07-23 19:19:10 -04:00
daniel 37affc6a70 Add tail manual fine-adjust (scroll) + per-project tail persistence
Relocate TailSetting into ReaSamplerSession; persist serializes it to
a new forever-stable "tail_setting" ext-state key (load-per-project,
save-on-save). Footer scroll-wheel adjusts Manual length in 250ms
steps; label now shows "Tail: Manual X.Xs". Pure step/label/JSON
round-trip covered by tests.
2026-07-23 19:12:12 -04:00
daniel 938c85a223 docs: add wav_trim to CLAUDE.md targets/architecture; fix stale M8 note in PLAN
Reflect the T2 wav_trim pure module and its test target. Correct the M10
null-test note: M8 realtime landed as a post-fader track tap, not pre-FX.
2026-07-23 18:33:12 -04:00
daniel d8725210e7 feat(banks): pure bank_book registry — pool + named banks, move/copy, JSON round-trip (B1) 2026-07-23 18:32:57 -04:00
daniel 4241ef4408 docs: reflect D2-W2 landing in PLAN.md / COMPLETED.md
Remove D2-W2 from PLAN.md; append completed entry to COMPLETED.md.
Track-level auto-tag/park live; item-lane DAW verify deferred to
post-D2-W3 (lane minting). D2-W3 left open.
2026-07-23 18:30:43 -04:00
daniel ae0e76bff7 Merge T2: realtime capture tail trimming 2026-07-23 18:27:27 -04:00
daniel f2bfe466ec T2: realtime capture tail trimming
Auto/Manual/Off tail handling for realtime track-tap capture. Auto scans
recorded PCM backward for last frame above -72 dB and truncates the wav
header-aware (8 s cap); Manual pads a fixed tail; Off is byte-identical.
wav_trim rejects WAVE_FORMAT_EXTENSIBLE with non-float SubFormat GUID.
2026-07-23 18:25:45 -04:00
daniel 138c37fc81 Merge: D2 Wave 2 — shell lane application + timer-diff auto-tag detection 2026-07-23 18:25:41 -04:00
daniel 85a03fbd13 Merge dev (tail-toggle panel refactor) into D2 Wave 2
# Conflicts:
#	src/bank_panel.cpp
2026-07-23 18:13:18 -04:00
daniel 81fa37fe94 Archive Milestone 8 and Milestone T1 in docs
Move completed M8 (async realtime backend — landed as selected-track post-fader
tap, not master) and T1 (offline capture tail + panel toggle) from PLAN.md to
COMPLETED.md; resolved open questions removed. T2 realtime tail remains.
2026-07-23 17:52:03 -04:00