daniel
de34fbafdb
Close two defeatable ReleaseProof guards and fix the static-lane skip's dead comparison
...
ReleaseProof{} and copy-reuse both compiled under this project's C++17;
user-provided ctor, deleted copy ctor and friend close them. The skip now
compares stored values, not norms, so it actually fires. Abort downgraded
to a debug assert.
2026-08-02 20:20:48 -04:00
daniel
056c60c8e1
Make the automation release's publish-ordering rule a compile-time guard, not an assert
...
The assert compiled out under Release's NDEBUG and ran in no test target.
AutomationChannel::release now requires a ReleaseProof that only
publishLiveParams() or noRepublishNeeded() can mint.
2026-08-02 19:36:32 -04:00
daniel
9b5393098b
Close pass four: undetented host curve read, LiveValues guard, ordering assert, static-lane fix, docs
...
Points toPlain's exponent arm at the undetented curve map so host reads
match the editor; adds a sizeof guard plus field-poison test for
LiveValues::operator==; skips the model write when an automation value
hasn't moved; corrects five stale doc citations.
2026-08-02 18:22:21 -04:00
daniel
1fd38bbd57
Bound the automation hold to the window the model has not caught up on, and make that authority model stated, enforced and tested
2026-08-02 17:16:02 -04:00
daniel
de5654fb6f
Service both VST3 parameter channels, and promote pitch key-track and Trigger length so all 44 ids issue
...
The SDK's own single-component sample drains inputParameterChanges in
process() and implements setParamNormalized; automation was reading the
GUI channel alone. The audio thread now patches a block it solely owns.
2026-08-02 16:22:17 -04:00
daniel
bfaa0f2614
Report the instrument's automatable parameters to the host under a frozen id table, in signal-flow order, with real units
...
42 of 44 ids issued: pitch key-track and Trigger length stay reserved
pending a live path. Master gain reclassified Live — it never reloaded.
2026-08-02 15:14:16 -04:00
daniel
c7afa3a80f
docs: collapse Phase Gamma Wave 3 to its landed record, open bake-prints-limiter
2026-08-02 14:06:38 -04:00
daniel
e87d044042
docs: record Phase Gamma Wave 3's two landed tracks in COMPLETED
2026-08-02 14:06:38 -04:00
daniel
5236c58838
Merge Γ-W3-T1: two categorical deck rows and a double-height MASTER bus deck, an exact filter tie-line at a 1028 row block, and the instrument reload decoupled from VST3 activation
2026-08-02 14:06:38 -04:00
daniel
7c473bce73
Merge Γ-W3-T2: the bake's reset list verified complete by construction, and the limiter's exclusion from the printed master stage recorded
2026-08-02 14:06:38 -04:00
daniel
da14509ab5
Restore the bank fold and usage publish to the resume path, guard setActive against repeats, and make the meter fold's bound literal
...
The resume also hands back to a full reload when the fold moves the loaded capture's decode source, so the refs table and the audio cannot skew.
2026-08-02 14:06:37 -04:00
daniel
5c6525fb91
Decouple the instrument reload from VST3 activation, and make the master meter's accumulate exact
2026-08-02 14:02:26 -04:00
daniel
4b0b03d8d5
Fix stale post-widen deck-reflow figures (90/144/1190px) across docs and tests, and split test_deck_groups.cpp's width-budget fixtures into a new file.
2026-08-02 13:59:35 -04:00
daniel
b956fe0d5a
Commit the limiter's audible state on the click and defer only the host's latency restart
...
setInstrumentParams now arms a sticky pending restart that flushLatencyRestart drains from the sync tick; setState and the bake's adopt flush at their own tails.
2026-08-02 13:59:34 -04:00
daniel
41876674e4
Fix deck-UI review findings: right-anchor MASTER's meter column, correct stale/overclaiming comments, split test_deck_groups.cpp on its commit-tier/overlay seam, and pin two width-ceiling assertions.
2026-08-02 13:56:16 -04:00
daniel
df10ddacc2
Widen the deck row block to 1028 so the filter tie-line is exact, and accumulate the meter's block peaks instead of sampling one in 47
2026-08-02 13:56:15 -04:00
daniel
0627398bbb
Reflow the deck into two categorical rows plus a double-height MASTER bus deck
...
Row membership is now the group's own property, not a wrap outcome. FILTER's Band|Notch moves to its caption slack, which is what makes the sound row fit. MASTER gains the limiter toggle, the output meter and the GR lamp.
2026-08-02 13:52:33 -04:00
daniel
f60c05c042
docs: collapse Phase Gamma Wave 2 to its landed record, and correct five spec claims the implementation disproved
2026-08-02 13:52:32 -04:00
daniel
1490c25250
Close Γ-W3-T2 review remediation: widen the bake-reset test's per-parameter coverage, correct four overclaiming comments, state the stage-time ceiling's disposition, and fix a missing include
...
Dials and asserts pitch-env/filter-env/trigEnv fields the sweep previously skipped in both fixtures; no reset behavior changed.
2026-08-02 13:52:32 -04:00
daniel
bf7840020e
docs: record Phase Gamma Wave 2's two landed tracks in COMPLETED
2026-08-02 13:52:32 -04:00
daniel
e2981e83ee
Bake reset: assert the limiter and bake Hold land neutral, prove the loop returns parked, and baseline the render's identity path
...
resetAfterBake is unchanged — every value already resets by construction. The render prints master gain but not the limiter, so §3.4's rationale is wrong; the invariant is corrected.
2026-08-02 13:52:32 -04:00
daniel
782f50c859
Merge Γ-W2-T2: an explicit loop enable, four named marks with grabbable caps, and the crossfade painted where it is heard
2026-08-02 13:52:32 -04:00
daniel
d4acb3feb5
Merge Γ-W2-T1: Rate and Pitch compound into one read increment, on a three-state commit predicate and payload v16
2026-08-02 13:52:32 -04:00
daniel
1b4d0e67b7
Loop-crossfade-ux review fixes: parked-drag no longer fakes LOOP OFF, waveform label contrast fixed, hover memoizes its bank read
...
Also corrects the cap-area, em-dash, glyph-overhang and heuristic-comment findings noted in review.
2026-08-02 13:52:32 -04:00
daniel
56bf26d8b6
docs: collapse Phase Gamma Wave 1 to its landed record, and correct T7's superseded status
2026-08-02 13:52:32 -04:00
daniel
a7c3c7a828
Loop: an explicit enable, four named marks with grabbable caps, and the crossfade painted where it is actually heard
...
hasLoop becomes user-owned with the gestures as shortcuts onto it; no format change. START uses overlay/trace, not accent/primary, which is the waveform's own fill.
2026-08-02 13:52:32 -04:00
daniel
35ab59d7f9
docs: record Phase Gamma Wave 1's seven landed tracks in COMPLETED, including T6 which never had a plan entry
2026-08-02 13:52:32 -04:00
daniel
fefd169d5b
Merge Γ-W1-T7 re-review closeout: the cadence math follows the splice jump, and the collapse band is measured rather than assumed
2026-08-02 13:52:32 -04:00
daniel
cbe2369037
Bake window: derive it from the rate the voice actually reads at, so a dialled Rate or downward Pitch no longer truncates the file
2026-08-02 13:52:31 -04:00
daniel
ef59265e7a
Merge Γ-W1-T7 detect findings: the agreement denominator counts probes that carried signal, so an overlapping straddle can no longer turn a two-and-two split into an accept
2026-08-02 13:52:31 -04:00
daniel
f1168e16eb
Close Γ-W1-T7 re-review: pitch-sync cadence math, floor-model regression check, evidence-count fix, one-home comments
...
New cadence-collapse-band test at P=1470 shows PSOLA eliminates the corner rather than regressing it (18.52% -> 0.00%).
2026-08-02 13:52:31 -04:00
daniel
248f2f3842
PITCH/RATE deck: Rate and Pitch knobs compounded into one read increment, on a three-state commit predicate and payload v16
2026-08-02 13:52:31 -04:00
daniel
d35a55ec8e
docs: correct the Gamma-W1 track count and table, and name T7 as a Rate prerequisite
2026-08-02 13:52:31 -04:00
daniel
91bd6f51a2
Period detection: silence is not dissent but an absent period is — the agreement denominator is the probes that carried signal
2026-08-02 13:52:31 -04:00
daniel
cc4967d21d
docs: drop the findings count from T7's open-questions bullet, it drifts as remediation lands
2026-08-02 13:52:31 -04:00
daniel
3e4ba628c3
docs: record Gamma-W1-T7 in PLAN.md, the track that landed without an entry
2026-08-02 13:52:31 -04:00
daniel
048673eb75
Merge Γ-W1-T7: Preserve's splices go pitch-synchronous — the period is detected once at load, over the loop the voice actually plays
2026-08-02 13:52:31 -04:00
daniel
e7d7e70201
docs: fix stale Gamma payload-rung numbers in instrument-control-surface (v14/v15 -> v15/v16)
2026-08-02 13:52:31 -04:00
daniel
79189bd316
docs: fix stale v14 limiter rung in shell/instrument/CLAUDE.md to v15
2026-08-02 13:52:31 -04:00
daniel
9228e93750
Preserve's period detection: probes are placed by position, and a sustain loop is the span analysed
2026-08-02 13:50:14 -04:00
daniel
163ab11e05
Handle Psi's ReaperSurface::Count sentinel in decideDropClass — Gamma's exhaustive-switch gate turns it into a hard error on contact
...
The sentinel is not a surface, so it breaks to the existing unclassifiable-surface refusal rather than joining a real case label.
2026-08-02 13:50:14 -04:00
daniel
334022c0f1
Gamma-W1-T7: gate PSOLA's two untested wires, fix the cadence test's contradictory rationale, add a vacuity guard
2026-08-02 13:50:14 -04:00
daniel
38337229d4
docs: correct Γ's payload rungs to v15/v16/v17 after Ξ took v14
...
States rung one as spent rather than derivable, so following the instruction
no longer contradicts the stated number — the trap that caused the collision.
2026-08-02 13:50:14 -04:00
daniel
93230208ff
Γ-W1-T7: make Preserve's splices pitch-synchronous — the jump is a whole number of the source's own period, detected once at load
...
30 Hz out-of-band energy 15.45% -> 0.00%; the 29 Hz rate-2.0 detune -133 -> +0 cents.
An unknown period keeps the fixed-window geometry bit for bit. The detector cannot
reach process(): sampler_core does not link it.
2026-08-02 13:50:14 -04:00
daniel
f8e57a3cbd
Merge Γ-W1-T2: the master bus — limiter, meter publication, and the plugin's first PDC report
2026-08-02 13:50:13 -04:00
daniel
91c1b78d5e
Γ-W1-T2: the published GR meter reads the limiter, not the mute
...
Retire the effectiveGain blend so the meter's minimum tracks smoothGain's own
reduction against real input, unscaled by the transition mute — a toggle over
quiet material now reads no reduction instead of pinning to 0.
2026-08-02 13:50:13 -04:00
daniel
6232851c6b
Γ-W1-T2: the limiter toggle is a mute, not a crossfade — the ceiling holds across both transitions
...
The equal-gain dry/wet blend let a peak through at (1-m) of its level. Now the
fade rides only the limited path and the hard edge lands on silence.
2026-08-02 13:50:13 -04:00
daniel
0612abbddb
Γ-W1-T2 review: one restart funnel, tighter ceiling proof, effective-gain meter
...
Fold setLimiterEnabled's restart request into setInstrumentParams so every writer
keeps the host's latency report in sync. Pin the window-sizing identity, drop the
per-sample modulo, tighten the ceiling tolerance, publish the blended gain.
2026-08-02 13:50:13 -04:00
daniel
3baf4ee50b
Γ-W1-T2: the master bus — a true-peak limiter whose ceiling is a theorem, the meter's published half, and the plugin's first PDC report
2026-08-02 13:50:13 -04:00
daniel
4fa021edae
Merge Γ-W1-T5: a real Preserve time-stretcher — write rate is duration, tap rate is pitch
2026-08-02 13:47:19 -04:00