Commit Graph

223 Commits

Author SHA1 Message Date
daniel c9f6cbc34d fix(bank_panel): arm drag from unselected cell in one gesture
Plain press on an unselected grid cell now commits the single-cell
selection immediately and arms the drag, so moving past the threshold
begins a drag without a prior selecting click. Already-selected and
ctrl/shift paths are unchanged.
2026-07-26 22:05:43 -04:00
daniel 6fece8d571 docs(product): DS-2 revised — three-accent pastel palette + REAPER-grey neutrals
Replace the single electric-cyan accent with a pastel lime/teal/purple three-accent system; shift neutral surfaces + text from near-black to REAPER's mid-grey theme family. Font upgrade declined (no bundling). L3 conformed to the new look; gate intact.
2026-07-26 21:48:26 -04:00
daniel d33e25751c docs: archive Phase L L2 to COMPLETED; reconcile CLAUDE.md + PLAN.md 2026-07-26 21:10:20 -04:00
daniel 19f1ec56dd Merge pL-w2-dock-panel-layout: L2 dock-panel layout redesign (task-grouped action bar + kit-drawn panel) 2026-07-26 21:04:00 -04:00
daniel 47223dfb3e fix(bank_panel): add CAPTURE_BATCH_RAZOR button, unify toLice conversion, use palette role for action-bar divider 2026-07-26 21:02:37 -04:00
daniel 54f37be0bb L2: task-grouped action bar + kit-drawn dock panel
New pure action_bar module (clusters, keybinding sub-labels, overflow, hit-test) supersedes the flat M11 strip; bank_panel chrome/buttons/tabs/grid now draw through the L1 kit by role with hover. Expose draw_kit::toLice in header to fix drawThumbnail forward-refs. CTest 27/27.
2026-07-26 21:02:37 -04:00
daniel a20cb46d65 docs: spec Phase Q (Quality) — structural reorganization pillar
Product framing (docs/product/code-organization.md), PLAN.md $Phase Q
(Q-W1..Q-W6), CONTEXT.md $Phase Q. Gated on tree quiescence; zero-hot-path-cost
acceptance bar. Namespace Q settled; Q-2..Q-6 carry recommendations.
2026-07-26 20:56:31 -04:00
daniel f3834fed95 CLion files 2026-07-26 20:51:20 -04:00
daniel 2755c143d7 docs: archive Phase L L1 to COMPLETED; reconcile CLAUDE.md + PLAN.md 2026-07-26 20:31:19 -04:00
daniel 42435c989b Merge pL-w1-drawing-kit: L1 shared LICE drawing kit (theme/palette + component geometry + draw kit; retire panel GDI text) 2026-07-26 20:20:44 -04:00
daniel 261dab880c docs: defer M9 slots indefinitely (Daniel, 2026-07-26)
Explicit deferral note on the PLAN M9 section; CLAUDE.md repo-state
phrase aligned. An extra for when wanted, not scheduled work.
2026-07-26 20:19:29 -04:00
daniel beca6487c7 L1: shared LICE drawing kit — theme/palette + component geometry + draw kit; retire GDI text in bank_panel 2026-07-26 20:19:10 -04:00
daniel ec05af35ef docs: archive M11 completion (drag-out) to COMPLETED; reconcile CLAUDE.md
Native OS drag-out landed (copy-only, prune stays sole deleter).
Milestone 11 complete; M9 slots is the last M-numbered milestone.
2026-07-26 20:11:51 -04:00
daniel 1b9e65d583 Merge m11-drag-out: native OS drag-out of bank samples (copy-only) 2026-07-26 20:08:20 -04:00
daniel 4f51758ad6 fix(drag_out): return E_OUTOFMEMORY on GlobalLock failure in HDropDataObject::GetData 2026-07-26 20:06:55 -04:00
daniel 34df2563e4 feat(m11): native OS drag-out of bank samples (copy-only)
Pure drag_out (gesture boundary + path-list assembly) + Windows OLE
CF_HDROP / SWELL file-list shell; bank_panel hands off when a dragged
selection leaves the client area. COPY-ONLY mask; internal drag intact.
2026-07-26 20:02:46 -04:00
daniel 73f81ffbb7 docs: archive M11 wave 1 to COMPLETED; reconcile CLAUDE.md
Batch capture + panel action buttons/labels landed; conform-on-insert
verified already shipped; resample-and-mute-source cut by Daniel
(Design View park/hide supersedes it). Drag-out remains in PLAN.
2026-07-26 19:41:23 -04:00
daniel e8300869df Merge m11-w1-t2-panel-triggers: panel action buttons + keybinding labels 2026-07-26 19:36:29 -04:00
daniel 22f91ac1d1 docs(product): split look-and-feel into Phase L (L1 kit / L2 panel / L3 VST-restyle)
Port visual-design-language.md to dev with DS-1/2/3 settled (B + spectral
strip; LICE + WDL free game; thorough M11-aware panel layout). L1 shared
kit; L2 panel redesign after M11 merges; L3 VST restyle gated on Phase S
landing. Phase S adopts the kit when it lands — not gated.
2026-07-26 19:36:00 -04:00
daniel 36bdef742a M11: action-trigger buttons + keybinding labels in bank_panel
New pure action_buttons module (strip layout/hit-test + label format,
CTest-covered). Panel strip fires capture/insert/provenance actions via
NamedCommandLookup + Main_OnCommand; labels from kbd_getTextFromCmd.
2026-07-26 19:33:04 -04:00
daniel 813c9f5cc6 docs: archive Phase R (R1-R3) to COMPLETED; reconcile CLAUDE.md + CONTEXT.md 2026-07-26 19:27:03 -04:00
daniel daa4338218 Merge m11-w1-t1-capture-polish: batch capture per item / razor area 2026-07-26 19:25:40 -04:00
daniel d23a3f9bb8 feat(capture): M11 batch capture - one bank sample per selected item / razor area
Pure batch_capture module (plan + mixed-result aggregation, unit-tested);
CAPTURE_BATCH_ITEMS/RAZOR actions with transient per-unit selection restored
on all paths, per-unit invariants + provenance, single persist.
Conform-on-insert already shipped.
2026-07-26 19:24:33 -04:00
daniel 83cd040f26 Merge Phase R (Reclaim): prune path — pure core, dry-run shell, guarded deletion 2026-07-26 19:21:15 -04:00
daniel e44bb7e2e7 Merge R3: guarded prune deletion — confirm-to-delete + panel button 2026-07-26 19:15:54 -04:00
daniel ef2d3fa846 fix(prune): honest reclaim/skip counts; cross-ref layout coupling
Already-absent files no longer inflate reclaimedCount (outAlreadyAbsent
distinguishes vanished-at-delete from real failures). Stale skip count
de-dups confirmed before subtraction so duplicates aren't tallied as
stale. prune_button.h rightInset and drawTailFooter vrc.right now
cross-reference each other by name.
2026-07-26 19:15:54 -04:00
daniel 7b53ba16f6 feat(prune): R3 guarded deletion — confirm-to-delete + panel button
Extend BANK_PRUNE_FOLDER from report-only to dry-run→confirm-with-manifest→
delete exactly the pure-core orphan set (fresh recompute, stale entries skipped).
Windows routes to Recycle Bin (SHFileOperation+FOF_ALLOWUNDO), else unlink.
New pure prune_button module + footer button dispatching the action id. No
ext-state write, no undo point (deletion is not REAPER-undoable).
2026-07-26 19:15:54 -04:00
daniel 105a4421a8 Merge R2: dry-run prune shell + persist wiring, report-only 2026-07-26 19:12:07 -04:00
daniel 1f0efe6db6 fix(persist): use non-throwing directory_iterator increment in pruneDryRun
Replace range-based for over fs::directory_iterator with manual
it.increment(ec) form. Mid-iteration failures now break to a
best-effort partial list instead of throwing filesystem_error
across REAPER's C ABI. Split shared fec into reg_ec/sz_ec.
2026-07-26 19:12:07 -04:00
daniel c1473c42e1 feat(prune): R2 dry-run prune shell + persist wiring, report-only
Add ReaSamplerSession::pruneDryRun enumerating the resolved current bank
folder, feeding the R1 core, and returning a PruneReport (count/bytes/list).
New pure bankRelativeForName + buildPruneReport keep spelling and tally
testable. Register forever-stable BANK_PRUNE_FOLDER action, report-only. No deletion.
2026-07-26 19:12:07 -04:00
daniel 46176f3f04 Merge R1: prune-reconcile pure core 2026-07-26 19:09:39 -04:00
daniel 3cfa9239d2 feat(prune): R1 prune-reconcile pure core — (owned ∩ present) − referenced
Add REAPER-free/filesystem-free prune orphan-set core + additive
BankBook::referencedPaths() union query, with full unit coverage.
2026-07-26 19:09:39 -04:00
daniel b6464f78c8 Merge gitignore-idea: ignore IDE ctest runner state 2026-07-26 18:16:42 -04:00
daniel a75174f3d5 docs: archive M10 provenance to COMPLETED; reconcile CLAUDE.md + CONTEXT.md
M10 landed. CLAUDE.md gains provenance/provenance_shell entries, test
target, and a current-state refresh; CONTEXT.md null-test line annotated
(verification action cut, manual only).
2026-07-26 18:16:36 -04:00
daniel 455012a973 gitignore: ignore .idea/ctestState.xml 2026-07-26 18:16:17 -04:00
daniel c81e125241 Merge m10-provenance: provenance + re-capture from source (bank-only) 2026-07-26 18:11:54 -04:00
daniel 7d0fcc49ac fix(m10): item-scope take-FX fingerprint; Windows path case-fold; comments
Item scope now reads the active take's FX chain via TakeFX_* (new
fxChainIdentityForItems helper), not the owning track's chain.
normalizeSlashes lowercases on _WIN32 for detectParent. Stale
comments corrected; case-fold tests added.
2026-07-26 18:08:44 -04:00
daniel 20018c1df2 M10: provenance populate + re-capture from source (bank-only)
Pure provenance core (recipe fingerprint, FX-chain identity, parent
detection) + shell reads; capture stamps provenance on resample-from-sample;
re-capture regenerates a provenanced sample from its source, never touching
the timeline. Adds BankIndex/BankBook in-place update. CTest-covered.
2026-07-26 18:08:44 -04:00
daniel 399dafa859 Merge ux: silent sample remove — undo is the safety net 2026-07-26 17:28:48 -04:00
daniel ff4eb26eab ux: drop last-reference confirm from sample remove; silent remove via undo (R-B) 2026-07-26 17:27:05 -04:00
daniel 6199a4868d Merge fix: WAV-aware content hash — identical captures now collapse despite bext timestamps 2026-07-26 17:13:26 -04:00
daniel 78fc5bad94 fix(dedup): hash WAV fmt+data only, skipping render-varying metadata chunks
hashWavContent walks RIFF chunks and feeds only fmt body + data payload
through FNV-1a ('W' domain-separation prefix), skipping bext/iXML/LIST that
REAPER embeds with per-render origination timestamps. Fallback to whole-file
hashBytes for non-WAV. Wired into both capture commit paths.

Legacy entries keep their stored whole-file hash; a re-capture will not
collapse onto a pre-fix entry -- a one-time clean capture resolves it.
2026-07-26 17:09:58 -04:00
daniel 6a6d305cf2 docs: archive Phase V (V1-V4) to COMPLETED; reconcile CLAUDE.md
Phase V landed: app_version module, ext-state version stamp, show-version
action, beta-in-isolation channel build. CLAUDE.md gains the module entry,
version key, test target, and beta-build note.
2026-07-26 16:56:04 -04:00
daniel 88e10c18c7 Merge fix: populate contentHash at capture — last-reference confirm now accurate; dedup-by-hash live 2026-07-26 16:46:29 -04:00
daniel eb5195edd4 Merge phase-v-versioning: Phase V versioning + beta-in-isolation channel 2026-07-26 16:46:06 -04:00
daniel b950926969 chore: ignore /build-beta/ directory 2026-07-26 16:43:23 -04:00
daniel 5c0e3a8ccf feat(version): V4 beta-in-isolation channel via -DREASAMPLER_CHANNEL
Compile-time channel flag forks a fully isolated reaper_reasampler_beta
(namespace, command-id prefix, action names, dock ident, -beta render) from
one auditable app_version definition. Stable identity byte-unchanged.
2026-07-26 16:43:23 -04:00
daniel 5fabade90c fix(capture): populate contentHash on captured samples to fix always-prompting remove
contentHash was left empty on every capture; hashReferencedElsewhere returns
false for empty hashes, so every remove looked like a last reference. Add
FNV-1a hashBytes to capture_paths, wire into both commit paths. NOTE: this
activates index dedup-by-hash in production — a bit-identical re-capture now
collapses onto the existing entry instead of adding a duplicate (spec-intended).
2026-07-26 16:37:46 -04:00
daniel 0a9d8200c7 fix(cmake): remove duplicate app_version.cpp from module sources
src/app_version.cpp was listed in the reaper_reasampler target_sources
block and also compiled into the app_version static lib that the module
links. One compile via the lib is correct; the duplicate TU in the module
was an ODR/duplicate-symbol hazard on ld.
2026-07-26 16:37:27 -04:00
daniel f6dddbf5a3 feat(version): single-source semver, ext-state stamp, show-version action
Version "0.9.01" sourced once from CMake via configure_file'd header; pure
app_version module (parse/compare/classify) with CTest. Stamp rides the persist
save seam under "reasampler"/"version"; absent stamp reads as pre-versioning.
On-demand "show version" action, no startup print.
2026-07-26 16:35:10 -04:00