docs: move Θ-W1-T1 and Θ-W1-T2 into COMPLETED with recorded deviations
This commit is contained in:
@@ -18,3 +18,69 @@ intentional exception (Daniel-approved) is two user-facing error strings in
|
||||
findings — all content cut that should have survived — and all ten were
|
||||
remediated and re-gated before merge. Driver: Daniel's instruction — *"Brief
|
||||
concise engineering comments. A little why, and maybe context, never WHAT."*
|
||||
|
||||
### Θ-W1-T1 — zone-retirement
|
||||
|
||||
ReaSampler 9000's zone-mapping system is retired: one loaded capture, one parameter
|
||||
set, playing across the full keyboard repitched from root with key-tracking — no zones,
|
||||
no per-zone divergence, no keymap of captures. The dedicated zone-editing face and its
|
||||
authoring affordances (add/delete zone, per-zone parameter panel, Low/High/Root zone
|
||||
legend) are gone; the root note survives as a first-class parameter. `sampler_core`
|
||||
split along the note-routing/per-voice-render responsibility seam (no virtual `tick()`
|
||||
on the per-voice path), and the Sample face split into chrome/waveform/decks bands with
|
||||
a shared band-stack allocator, discharging the wave's two structural deliverables.
|
||||
Migration adopts a saved multi-zone instance's first zone; single-zone instances lift
|
||||
losslessly.
|
||||
|
||||
**Deviations from spec:**
|
||||
- The key-range open question (**[propose]**) is answered outright rather than left
|
||||
open: no key-range concept survives at all — `KeyZone`/`lowNote`/`highNote` are gone
|
||||
from the engine, the write format, and the strip. A low/high pair remains re-addable
|
||||
later as two ordinary parameters. Θ-W2-T3 consumes this decision.
|
||||
- **"Which zone is first" (**[verify]**) confirmed:** `PerformanceMap::zones` was an
|
||||
ordered vector and `Keymap::resolve` was first-match-in-order, so index 0 was the
|
||||
audible zone. Migration adopts index 0, and that zone's `sampleId` supersedes the
|
||||
envelope's stored `selectionId`.
|
||||
- The control row (root strip, preview, velocity knob, curve button, Mono|Stereo) moved
|
||||
into the chrome band, directly under the title rather than above the deck —
|
||||
user-visible and deliberate; it's what makes Θ-W2's band-disjointness real.
|
||||
- Loading a capture now clears the three capture-anchored overrides (root, loop span,
|
||||
start frame) while keeping the shaping parameters — strictly less destructive than the
|
||||
previous whole-zone drop.
|
||||
- The embed strip became a read-only readout; it lost its click handler since with no
|
||||
zones there is nothing to select.
|
||||
- **Migration side-effect:** a previously-zoned instance with implicit channel mode and
|
||||
a stereo capture persisted as Mono will reopen as **Stereo**. It converges on the
|
||||
documented rule and is reachable only for old blobs, but "sounds identical" was an
|
||||
acceptance bar, so it's a real deviation.
|
||||
- `sampler_core.{h,cpp}`'s 956-line documented hot-path exception is retired, not
|
||||
relocated — the tree now carries no over-ceiling exception at all.
|
||||
- `note_entry` was deleted as dead code (its only consumer was the removed zone editor).
|
||||
- **Still unverified:** a real pre-change project reopening through REAPER's `setState`
|
||||
has not been exercised in the DAW; migration is proven only in the pure domain against
|
||||
hand-laid legacy bytes.
|
||||
|
||||
### Θ-W1-T2 — capture-handoff-bugs
|
||||
|
||||
Fixed both extension-side capture-handoff defects: drag-out now delivers the capture's
|
||||
audio at the drop target every time (previously intermittent, retry-fixable); dropping a
|
||||
capture onto an FX container now loads the instrument with the capture, matching the
|
||||
FX-button drop path.
|
||||
|
||||
**Deviations from spec:**
|
||||
- Item 5's root cause was three defects, not one: non-atomic COM refcounts racing a drop
|
||||
target's background copy; an unverified assumption that REAPER had already called
|
||||
`OleInitialize` on the calling thread; and a teardown-before-payload-check ordering bug
|
||||
that let an unresolvable payload consume the gesture.
|
||||
- Item 6's fix rests on an unconfirmed hypothesis — that a bare `instantiate = -1` left
|
||||
placement to REAPER's ambient FX-chain insert point, which a container-focused chain
|
||||
window moves. It is now pinned to an explicit top-level position; nobody could confirm
|
||||
the mechanism without the DAW.
|
||||
- The opportunistic rider was partly taken: `src/ingest.{h,cpp}` re-homed to
|
||||
`src/shell/actions/`. `ext_keys.h` was declined (most consumers sit in another track's
|
||||
exclusive surface); `resource.h` was declined (it's a build input paired with
|
||||
`src/resource.rc` and the SWELL resgen step).
|
||||
- **Neither acceptance criterion has actually been met yet.** Item 5's gate is
|
||||
explicitly a soak ("a single pass is not a gate") and item 6 needs a live container
|
||||
drop; both require REAPER and are outstanding. The code is merged; the acceptance
|
||||
gates are not closed.
|
||||
|
||||
Reference in New Issue
Block a user