docs: drop-onto-panel is bank-fill only

Correct ingest surface (3) in CLAUDE.md (only surface (1) assigns now) and
the drag-and-drop bullet in CONTEXT.md to bank-fill-only behavior.
This commit is contained in:
2026-07-27 14:06:18 -04:00
parent b924e82f63
commit 8576832c84
2 changed files with 9 additions and 6 deletions
+1 -1
View File
@@ -141,7 +141,7 @@ There is no hot-reload. Copy the built binary into REAPER's `UserPlugins/` folde
- `track_guid` — shared `MediaTrack*` → canonical GUID-string formatter; single source of truth for membership keys used by both the view shell and the actions layer.
- `provenance_shell` — FX-chain identity queries via `TrackFX_*` / `TakeFX_*` APIs; collects source-item paths and parent-detection inputs to feed the pure `provenance` fingerprint builder. Stamps `Sample.provenance` on capture when every resolving source item maps by exact normalized path (case-folded on Windows) to exactly one bank sample; ambiguous/mixed cases record nothing conservatively.
- `drag_out_win` — M11 OS drag-out shell: Windows OLE `DoDragDrop` / `CF_HDROP`, copy-only structurally (`DROPEFFECT_MOVE` not offered, no source-deletion path); macOS/Linux via `SWELL_InitiateDragDropOfFileList` (copy-semantics caveat documented — SWELL does not expose a drop-effect query). Driven by the `drag_out` pure module.
- `ingest` — Phase S ingest-through-the-bank shell (S8) on the EXTENSION side: three surfaces — (1) arrange capture→bank→assign (bindable action), (2) Media-Explorer import→bank→new instrument on a new track (bindable action, single-file via `MediaExplorerGetLastPlayedFileInfo`; RS5k "load into a new sampler" parity — no `assignment_request` written; calls `createTrackWithInstrument`), (3) file drop onto the bank panel→bank→assign (multi-file, assigns the first). Surfaces (1) and (3) write the `assignment_request` ext-state wire via `ingestAssignActiveInstance`; surface (2) does not. ingest NEVER inserts a timeline item.
- `ingest` — Phase S ingest-through-the-bank shell (S8) on the EXTENSION side: three surfaces — (1) arrange capture→bank→assign (bindable action), (2) Media-Explorer import→bank→new instrument on a new track (bindable action, single-file via `MediaExplorerGetLastPlayedFileInfo`; RS5k "load into a new sampler" parity — no `assignment_request` written; calls `createTrackWithInstrument`), (3) file drop onto the bank panel→bank only (multi-file, bank-fill; no `assignment_request` written, no effect on any live instance's selection — the bank-generation bump is retained so open instances' browsers refresh). Only surface (1) writes the `assignment_request` ext-state wire via `ingestAssignActiveInstance`. ingest NEVER inserts a timeline item.
- `instrument_drop_win` — Phase S FX-button drop shell (S17): (a) resolves a screen point to a track + its TCP FX-button hotspot via REAPER's hit-test API (`GetThingFromPoint`, `TrackFX_*`), and (b) on release adds a ReaSampler 9000 instance to that track and injects the dragged capture as its component state via `TrackFX_SetNamedConfigParm` "vst_chunk". Exposes three entry points: `loadInstrumentOntoTrack` (FX add+inject, no own undo block — the shared inner half used by callers that own the undo grouping), `performInstrumentDrop` (wraps `loadInstrumentOntoTrack` in its own undo block — the S17 drag-drop gesture path), and `createTrackWithInstrument` (appends a new track, names it, then calls `loadInstrumentOntoTrack`; rolls back via `DeleteTrack` on failure — the ME-import new-instrument path). Never captures, never writes the bank, never inserts a timeline item.
- `draw_kit` — Phase L shared LICE draw shell (L1): `fillSurface` (micro-gradient + inner highlight/shadow), `drawButton`/`drawSlider`/`drawListRow`/`drawWaveform`, cached-font `text()` over four `LICE_CachedFont`s (kit-owned lifecycle), full interaction-state model, double-buffer preserved. Consumes `theme` + `component_geometry`. First consumer: `bank_panel` (GDI `DrawText` path retired in L1).
- `actions` — registers the capture/placement/slot action family, the Design View action family (toggle active mode, activate Arrange/Design, tag/untag selected tracks, show-both), the multi-bank action family (create/rename/reorder/delete bank, evacuate, activate, move/copy/remove selected samples), and the Phase R prune action (`BANK_PRUNE_FOLDER` — dry-run-first, confirm-with-manifest, then `pruneDeletePlan`-guarded deletion; **the ONLY file-deletion authority in the system**); routes each to the modules above via the `command_id`/`gaccel`/`hookcommand` contract. Every bank index verb wraps its mutation in a batched REAPER undo point (`Undo_BeginBlock2`/`EndBlock2`, `UNDO_STATE_MISCCFG`) so one bank operation is one Ctrl-Z. The prune action writes no ext state and opens no undo point (file deletion is not REAPER-undoable).
+8 -5
View File
@@ -1600,11 +1600,14 @@ headers):**
- **Drag-and-drop onto ReaSampler surfaces.** REAPER exposes **no** drag-drop registration
API. Drop handling is on ReaSampler's *own* HWNDs via SWELL/Win32 (`WM_DROPFILES` /
`IDropTarget` on the docked `bank_panel` HWND — the surface the panel already owns) → ingest
→ assign. **Assess-and-flag (spike, not promised):** a drop *onto the VST3 editor window* —
whether the `IPlugView` HWND can accept an OS file drop and **relay it to the extension as
a bank-ingest request** (the instrument does not ingest; it forwards a request over an
agreed seam). This crosses the two-artifact boundary and the relay is unproven; if gnarly,
drop-onto-panel is the shipped path and drop-onto-editor is deferred.
(bank-fill only). Dropped files are imported into the active bank; no `assignment_request` is
written and no live instance's selection is affected. The bank-generation bump is retained so
open instances' browsers refresh to show newly available sounds. **Assess-and-flag (spike,
not promised):** a drop *onto the VST3 editor window* — whether the `IPlugView` HWND can
accept an OS file drop and **relay it to the extension as a bank-ingest request** (the
instrument does not ingest; it forwards a request over an agreed seam). This crosses the
two-artifact boundary and the relay is unproven; if gnarly, drop-onto-panel is the shipped
path and drop-onto-editor is deferred.
**The assign seam.** The ingest action names the target instance (lean: the active/
last-focused instance, discovered via the host context the bridge already resolves) and hands