2026-07-19 - Owner Surface Checklist Rows Are Structured
2026-07-30 - Lane-Owned Instruments Stop Rewriting Shared Music
- Supersedes the July bridge work that retargeted private pattern note/chord source fields and forked shared patterns during lane Instrument changes.
- Arrangement playback already resolves melodic notes and Chord Engine events through each owning lane's Instrument and Mixer route.
- Instrument reassignment and duplicate backing-slot repair now leave private and shared pattern payloads unchanged.
SPACEAGE_ARRANGER_EDIT_CONTRACT_ONLYprovespatternPortable=1andsharedPortable=1.
2026-07-30 - Representative Project Persistence Gate
- Added
SPACEAGE_PROJECT_PERSISTENCE_ONLYand release-convergence gateP04-A. - The fixture round-trips tempo, Arrangement loop, Section form markers, lane identity/Instrument/Mixer/MIDI route, Mixer gain/pan, clip placement, explicit 128-step pattern length, Chord Engine strum/arp state, note release velocity/probability/ratchets, and automation without creating Undo history.
- The gate exposed and fixed missing loop serialization, missing release velocity, and explicit pattern lengths collapsing to the final note/chord endpoint.
2026-07-29 - Recording Takes Get A Trust Badge
- Added
MidiProjectHealthSummary::recordingTakeTrustBadgeLabel()andrecordingTakeTrustBadgeSummary()so MIDI Health can answer the post-recording question directly:TAKE CLEAN,TIMING SUSPECT, orRETAKE. - The recording take review copy block and serialized health snapshot now include the badge summary, keeping copied QA/debug packets self-contained.
- MIDI Health now shows a compact
TAKE BADGErow before the longer take-trust/action/proof rows. - AudioSelfTest protects dropped-event and timing-suspect badge labels, serialized fields, and copy-card wording.
2026-07-28 - Automation Proof Summary Names The Focused MIDI Health Proof Door
MidiExpressionProjectSummary::automationProofCopySurfaceSummary()now includesMIDI Health COPY PROOFas the next launch-proof review-card copy surface.- The Automation report no longer points testers only to
COPY LAUNCH; it distinguishes run-order planning from the focused next-proof card plus current handoff. - AudioSelfTest now protects the direct and serialized Automation proof-surface summary wording.
2026-07-28 - Copy Claim Carries The Proof Compass
hardwareProofReviewCopyBlock()now includes the current finish-line proof handoff and fast MIDI closeout runner summary.COPY CLAIMtherefore carries safe public-claim wording, launch/hardware blockers, the current next proof doorway, and the verification command in one packet.- AudioSelfTest now asserts the handoff, fast-gate summary, and
run-midi-closeout-fast.ps1appear in both direct and serialized hardware/public-claim proof copy blocks.
2026-07-28 - Proof Copy Surfaces Are Named By Doorway
- The MIDI proof-copy surface summary now distinguishes
MIDI Health COPY PROOFfromAutomation COPY PROOF. MIDI Health COPY PROOFis the focused launch-proof review card plus current handoff;Automation COPY PROOFremains the Automation-blocker proof sheet.- The MIDI Health tooltip/receipt wording now says the focused proof copy includes the current handoff, and AudioSelfTest asserts that the distinction remains visible.
2026-07-28 - Copy Proof Carries The Current Handoff
- The MIDI Health
COPY PROOF/ focused next-proof review card now includescurrentFinishLineProofHandoffSummary()before the launch run-order, next-receipt, and action-queue details. - This keeps the smallest launch-proof packet self-contained: current blocker, action doorway, proof boundary, QA receipt, and the fast closeout command now travel together.
- AudioSelfTest now asserts the handoff appears in the focused proof copy block through both direct health access and serialized health data.
2026-07-28 - QA Receipt Dialog Keeps The Proof Handoff
The MIDI QA receipt workflow now carries the current proof handoff into both review-ledger dialogs and active receipt-entry instructions. This keeps the QA form connected to the same next-action context shown by MIDI Health and FIX NEXT, without changing routing, validation, playback, or hardware behavior.
- Verification:
tools/run-midi-closeout-fast.ps1 -ReportTag codex-recording-take-trust-badge-20260729-rerunpassedMIDI_HEALTH,MIDI_CLOSEOUT,MIDI_PROTOCOL,AUTOMATION_OWNERSHIP, andAUTOMATION_RESTORE.
2026-07-28 - MIDI Cockpit Action Carries The Handoff
The MIDI Health cockpit next-action object now includes the proof handoff summary, and the FIX NEXT tooltip includes that same context. This keeps the open-next-surface button honest: it explains where it goes, why, the proof boundary, and the fast-gate ritual without forcing the user to cross-read multiple diagnostic rows.
2026-07-28 - MIDI Health Shows The Proof Handoff
Added a compact MIDI proof handoff summary to the protocol model, structured health report, clipboard reports, and MIDI Health UI. The row turns the scattered next-focus, route, receipt, and fast-gate information into one human-readable handoff line so the next validation action is visible at a glance.
2026-07-28 - Last Recorded Event Source Proof
- Carried
MidiInputSourceSessionthrough the note, drum-step, and expression recording queues so the committed last-recorded proof can identify whether the event came from host/plugin MIDI or a physical direct input slot. buildMidiLastRecordedEventProofLabel()now appends source proof to note, drum, and expression receipts, including direct input slot and generation for physical-device captures.- This gives the MIDI Health panel a more useful receipt when USB and 5-pin DIN controllers behave differently in the same session.
- Safety boundary: diagnostic metadata only; no MIDI routing, note timing, sound generation, automation playback, SysEx, mixer, synth, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_RECORD_TIMING,MIDI_HEALTH,MIDI_CLOSEOUT, andMIDI_PROTOCOLpassed with reportsmidi-record-timing-source-visible-20260728.out,midi-health-source-visible-20260728.out,midi-closeout-source-visible-20260728.out, andmidi-protocol-source-visible-20260728.out.
2026-07-28 - Recording Proof Front-Loaded In MIDI Health
- Moved live MIDI input, recording ownership, destination proof, target proof, last-recorded event proof, recording boundary, queue trust, and take trust rows into the first visible cluster of the MIDI Health popup.
- This fixes a diagnostic UX problem where
LAST RECexisted in the model/report but could be buried below the fixed visible summary budget. - Safety boundary: visible Health ordering only; no MIDI routing, recording capture, automation playback, SysEx, hardware send, synth, mixer, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_RECORD_TIMINGandMIDI_HEALTHpassed with reportsmidi-record-timing-health-frontload-20260728.outandmidi-health-recording-frontload-20260728.out.
2026-07-28 - Last Recorded Event Proof
- Added a processor-owned
buildMidiLastRecordedEventProofLabel()and MIDI Health fieldliveMidiLastRecordedEventProofLabel. - MIDI Health can now report the latest captured note, drum hit, or expression event with pattern, lane context, pitch/CC, start/tick, length, velocity/value, MIDI channel, and pattern length when available.
- Cleared stale last-recorded note/drum/expression atomics together when recording starts and when a new captured event type commits, so Health does not mix an old note with a newer CC or drum hit.
- Safety boundary: diagnostic/report/status data only; recording timing math and MIDI routing were not changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_RECORD_TIMING,MIDI_HEALTH,MIDI_CLOSEOUT, andMIDI_PROTOCOLpassed with reportsmidi-record-timing-last-recorded-proof-20260728.out,midi-health-last-recorded-proof-20260728.out,midi-closeout-last-recorded-proof-20260728.out, andmidi-protocol-last-recorded-proof-20260728.out.
2026-07-28 - MIDI 1.0 Completion Boundary
- Added a model-owned
midiOneCompletionBoundarySummary()to separate three truths that were getting blurry: software/backend closeout, human hardware/launch proof, and future roadmap protocol families. - The summary is now included in MIDI Health next steps, full MIDI Health reports, serialized health data, and the focused hardware/public-claim copy block.
- This deliberately says that no single percentage is launch permission unless the software gate, human proof, and roadmap boundary are understood.
- Safety boundary: report/copy/status data only; no MIDI routing, recording capture, automation playback, SysEx, hardware send, synth, mixer, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTH,MIDI_CLOSEOUT, andMIDI_PROTOCOLpassed with reportsmidi-health-completion-boundary-20260728.out,midi-closeout-completion-boundary-20260728.out, andmidi-protocol-completion-boundary-20260728.out.
2026-07-28 - Recording Take Fix-Next UI Fallback
- Added a defensive MIDI Health UI fallback so
source=recordingTakeopens the Automation/Retake surface even if a future action surface forgets to serializedoorwayId=midiExpression. - This keeps the
RETAKEbutton useful from both the model-owned doorway path and the source-only fallback path. - Safety boundary: navigation-only UI fallback; no MIDI routing, recording capture, automation playback, SysEx, hardware send, synth, mixer, or project mutation behavior changed.
- Verification: rebuilt state was current;
MIDI_HEALTHandMIDI_CLOSEOUTpassed with reportsmidi-health-recording-take-ui-route-20260728.outandmidi-closeout-recording-take-ui-route-20260728.out.
2026-07-28 - Recording Take Cockpit Priority
- Promoted dropped recording events into the MIDI Health cockpit priority path: if note/drum or expression recording events are dropped, the cockpit severity now becomes
RECORDING. - The
FIX NEXT/action surface now routes to the recording retake doorway with aRETAKEbutton label and the full recording take review copy block, instead of letting latency, launch proof, or generic warnings take visual priority. - Safety boundary: diagnostics/action-surface text only; no MIDI routing, recording capture, automation playback, SysEx, hardware send, synth, mixer, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTH,MIDI_CLOSEOUT, andMIDI_PROTOCOLpassed with reportsmidi-health-recording-cockpit-priority-20260728.out,midi-closeout-recording-cockpit-priority-20260728.out, andmidi-protocol-recording-cockpit-priority-20260728.out.
2026-07-28 - Recording Take Card In Health Reports
- Added the full
recordingTakeReviewCopyBlock()to MIDI Health next steps and the full MIDI Health report. - This means
COPY STEPSandCOPY REPORTnow carry the same recording-trust card without adding another crowded title-row button. - Safety boundary: report/copy data only; no MIDI routing, recording, automation playback, SysEx, hardware send, synth, mixer, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTH,MIDI_CLOSEOUT, andMIDI_PROTOCOLpassed with reportsmidi-health-recording-card-reports-20260728.out,midi-closeout-recording-card-reports-20260728.out, andmidi-protocol-recording-card-reports-20260728.out.
2026-07-28 - Recording Take Review Copy Block
- Added
recordingTakeReviewCopyBlock()to MIDI Health so recording ownership, capture policy, target boundary, queue trust, take reliability, next action, proof evidence, troubleshooting, and live-timing boundary can be copied as one model-owned review block. - The block is designed for the exact cases that caused distrust during testing: dropped note/expression events, suspicious timing, multiple input ambiguity, high buffer latency, direct queue lag, and source-pinning proof.
- Safety boundary: report/copy data only; no MIDI routing, recording, automation playback, SysEx, hardware send, synth, mixer, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTH,MIDI_CLOSEOUT, andMIDI_PROTOCOLpassed with reportsmidi-health-recording-take-copyblock-20260728.out,midi-closeout-recording-take-copyblock-20260728.out, andmidi-protocol-recording-take-copyblock-20260728.out.
2026-07-28 - MIDI Health Copy Claim Door
- Added a focused
COPY CLAIMbutton to the MIDI Health panel. - The button copies the model-owned hardware/public-claim proof block: safe public MIDI claim, MIDI 1.0 ship state, hardware proof gaps, checklist status, next action, run order, action checks, and no-send safety boundary.
- Safety boundary: clipboard-only UI doorway; it sends no MIDI, changes no routing, changes no project data, and touches no external hardware.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTHandMIDI_CLOSEOUTpassed with reportsmidi-health-copy-claim-button-20260728.outandmidi-closeout-copy-claim-button-20260728.out.
2026-07-28 - Hardware Public-Claim Proof Copy Block
- Added
hardwareProofReviewCopyBlock()to MIDI Health so hardware proof and safe public MIDI wording can be copied as one model-owned review block. - The block includes the safe public claim, MIDI 1.0 ship-state summary, hardware gap summary, proof badge, checklist summary, first needed hardware proof, next action, run order, action checks, and no-send safety boundary.
- Safety boundary: report/copy data only; no MIDI routing, recording, automation playback, SysEx, hardware send, synth, mixer, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTH,MIDI_CLOSEOUT, andMIDI_PROTOCOLpassed with reportsmidi-health-hardware-proof-copyblock-20260728.out,midi-closeout-hardware-proof-copyblock-20260728.out, andmidi-protocol-hardware-proof-copyblock-20260728.out.
2026-07-28 - Model-Owned Launch Proof Copy Block
- Added
midiLaunchValidationNextProofReviewCardCopyBlock()to MIDI Health so the next-proof copy text is generated by the backend model, not hand-assembled in the MIDI Health panel. - The copy block includes the readable review card, run-order summary, next receipt summary, and action queue summary.
- The MIDI Health
COPY PROOFbutton now consumes the model-owned block directly. - Safety boundary: report/copy data only; no MIDI routing, recording, automation playback, SysEx, hardware send, synth, mixer, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTH,MIDI_CLOSEOUT, andMIDI_PROTOCOLpassed with reportsmidi-health-proof-copyblock-fixed-20260728.out,midi-closeout-proof-copyblock-fixed-20260728.out, andmidi-protocol-proof-copyblock-fixed-20260728.out.
2026-07-28 - MIDI Health Copy Proof Door
- Added a focused
COPY PROOFbutton to the MIDI Health panel. - The button copies only the next MIDI launch-proof review card, with a copy receipt stating that no MIDI was sent, no routing changed, no project data changed, and no external hardware changed.
- The
FIX NEXTtooltip now includes the same review-card text, so the current proof action is readable before opening the deeper QA/Launch Proof doorway. - Safety boundary: clipboard/tooltip UI only; no MIDI routing, recording, automation playback, SysEx, hardware send, synth, mixer, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTHandMIDI_CLOSEOUTpassed with reportsmidi-health-copy-proof-button-20260728.outandmidi-closeout-copy-proof-button-20260728.out.
2026-07-28 - Launch Proof Action Review Card
- Added a readable multiline
reviewCardTextto MIDI QA/launch receipt action states. - The next launch proof action now serializes a plain-English card with button, state, receipt key, proof bucket, proof artifact, minimum PASS evidence, proof needs, test script, backend proof gate, and safe/no-MIDI boundary.
- The MIDI Health cockpit action surface and embedded proof card now carry the same review text, so the launch proof doorway does not silently lose the human-readable card.
- MIDI Health next steps and the full health report now print a labeled
MIDI launch proof review cardblock, keeping copied support text human-readable without requiring a JSON inspector. - Safety boundary: report/action-surface text only; no MIDI routing, recording, automation playback, SysEx, hardware send, synth, mixer, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTH,MIDI_PROTOCOL,MIDI_QA_RECEIPT, andMIDI_CLOSEOUTpassed with reportsmidi-health-review-card-report-20260728.out,midi-protocol-review-card-report-20260728.out,midi-qa-receipt-review-card-report-20260728.out, andmidi-closeout-review-card-report-20260728.out.
2026-07-28 - MIDI Health Copy Launch Door
- Added a dedicated
COPY LAUNCHbutton to the MIDI Health panel. - The button copies only the launch-validation run-order handoff block: ordered proof rows, receipt keys, proof requirements, test script cues, remaining queue, action queue, and next receipt summary.
- Safety boundary: clipboard-only UI doorway; it sends no MIDI, changes no routing, changes no project data, and touches no external hardware.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTH,MIDI_CLOSEOUT, andMIDI_PROTOCOLpassed with reportsmidi-health-copy-launch-button-20260728.out,midi-closeout-copy-launch-button-20260728.out, andmidi-protocol-copy-launch-button-20260728.out.
2026-07-28 - Launch Run Order Copy Block
- Added a dedicated MIDI launch-validation run-order copy block to MIDI Health data and the launch cockpit card.
- The block combines the ordered proof sequence, receipt keys, proof requirements, test script cues, remaining queue, action queue, and next receipt summary into one handoff surface.
- Safety boundary: report/export/copy data only; no MIDI routing, recording, automation playback, SysEx, hardware send, synth, mixer, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTH,MIDI_CLOSEOUT,MIDI_PROTOCOL, andMIDI_QA_RECEIPTpassed with reportsmidi-health-run-order-copyblock-20260728.out,midi-closeout-run-order-copyblock-20260728.out,midi-protocol-run-order-copyblock-20260728.out, andmidi-qa-receipt-run-order-copyblock-20260728.out.
2026-07-28 - Launch Run Order Enforced In Next Steps
- Tightened MIDI Health regression coverage so
toPlainTextNextSteps()must include the launch-validation run order, first proof bucket, receipt key, and test script cue before the older queue/action summary. - This keeps the human-facing next-steps report oriented around a practical ordered test session, while preserving the receipt queue as supporting detail.
- Safety boundary: test/report contract only; no MIDI routing, recording, automation playback, SysEx, hardware send, synth, mixer, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest; focused health/closeout gates rerun for this contract.
2026-07-28 - Launch Validation Run Order
- Added an explicit MIDI launch-validation run order so the remaining proof buckets are presented as an ordered test sequence, not just a queue of receipt rows.
- The run order is now available in protocol coverage, MIDI Health
toVar(), the MIDI Health cockpit card, copied/plain-text reports, and the visible MIDI Health summary row asLAUNCH RUN. - Safety boundary: report/UI readiness clarity only; no MIDI routing, recording, automation playback, SysEx, hardware send, synth, mixer, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_QA_RECEIPT,MIDI_HEALTH,MIDI_PROTOCOL, andMIDI_CLOSEOUTpassed with reportsmidi-qa-receipt-run-order-20260728.out,midi-health-run-order-20260728.out,midi-protocol-run-order-20260728.out, andmidi-closeout-run-order-20260728.out.
2026-07-28 - Launch Proof Dialog Names The Test Ritual
- The
Save MIDI Launch Proofdialog now includes the model-owned proof artifact, proof-needs summary, test script cue, and minimum PASS evidence in its instructions. - This keeps the actual evidence-entry moment aligned with MIDI Health, proof cards, next-action summaries, action surfaces, and copied reports.
- Safety boundary: UI instruction text only; no MIDI routing, recording, automation playback, SysEx, hardware send, synth, mixer, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_QA_RECEIPT,MIDI_HEALTH, andMIDI_CLOSEOUTpassed with reportsmidi-qa-receipt-dialog-proof-script-20260728.out,midi-health-dialog-proof-script-20260728.out, andmidi-closeout-dialog-proof-script-20260728.out.
2026-07-28 - MIDI Health Proof Card Shows Script
- The visible MIDI Health
PROOF CARDrow now includes the launch-proof test script cue alongside bucket, action, proof needs, and receipt key. - The
FIX NEXT/Launch Proof tooltip also carries the same test script so the human tester can see the practical action before opening the deeper proof dialog. - Safety boundary: UI/report clarity only; no MIDI routing, recording, automation playback, SysEx, hardware send, synth, or project mutation behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTH,MIDI_CLOSEOUT, andMIDI_PROTOCOLpassed with reportsmidi-health-visible-proof-script-20260728.out,midi-closeout-visible-proof-script-20260728.out, andmidi-protocol-visible-proof-script-20260728.out.
2026-07-28 - Launch Next Action Shows Test Script
- Added the launch-proof
proofScriptCueto the compact MIDI launch validation next-action summary. - The most copied/read health line now includes the concrete test script, not just the proof bucket, evidence type, requirement summary, and Launch Proof doorway.
- Safety boundary: no MIDI routing, recording, playback, automation, SysEx, hardware output, synth, or project mutation behavior changed; this is a report/readiness clarity pass.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTH,MIDI_PROTOCOL,MIDI_CLOSEOUT, andMIDI_QA_RECEIPTpassed with reportsmidi-health-next-proof-script-20260728.out,midi-protocol-next-proof-script-20260728.out,midi-closeout-next-proof-script-20260728.out, andmidi-qa-receipt-next-proof-script-20260728.out.
2026-07-28 - Launch Receipts Carry Test Script Cues
- Added
proofScriptCueto MIDI launch validation matrix rows, mirrored closeout checklist rows, next-receipt objects, action queues, action surfaces, cockpit proof cards, and copied/plain-text report surfaces. - Each launch proof bucket now gives the tester a concrete script cue, such as how to verify Automation ownership, controller latency, Hardware Passport bend response, RPN/NRPN setup, SysEx restore, MIDI file round trips, live timing, project reopen/export, or public wording.
- Safety boundary: no MIDI routing, playback, automation, SysEx, hardware send, synth, or project mutation behavior changed; this only makes the launch-proof evidence path more explicit.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_QA_RECEIPT,MIDI_HEALTH,MIDI_PROTOCOL, andMIDI_CLOSEOUTpassed with reportsmidi-qa-receipt-proof-script-20260728.out,midi-health-proof-script-20260728.out,midi-protocol-proof-script-20260728.out, andmidi-closeout-proof-script-20260728.out.
2026-07-28 - Lane Local Label Cleanup
- Tightened active MIDI Automation copy so user-facing/report strings say
Lane Localinstead of shortening the owner toLaneorLane data. - Updated the Automation release wording checklist, selected-row scope report, doorway checklist label, and popup helper text so the three owners are consistently
Shared PTN,Clip Local, andLane Local. - Safety boundary: language-only; no MIDI routing, playback, automation ownership, export, or hardware behavior changed.
- Verification: rebuilt
SampleSquadAudioTest;AUTOMATION_OWNERSHIP,MIDI_HEALTH,MIDI_PROTOCOL, andMIDI_CLOSEOUTpassed with reportsautomation-ownership-lane-local-labels-20260728.out,midi-health-lane-local-labels-20260728.out,midi-protocol-lane-local-labels-20260728.out, andmidi-closeout-lane-local-labels-20260728.out.
2026-07-28 - Launch Validation Receipts Name Proof Needs
- Added a first-class
proofNeedsSummaryto MIDI launch validation matrix rows, remaining checklist rows, next-receipt objects, action queues, action surfaces, cockpit cards, and plain-text reports. - The proof UI now says whether a launch bucket needs hardware/device proof, real files/projects, live-performance feel/timing, or software/customer review only, instead of forcing a human to infer that from raw booleans.
- Safety boundary: no MIDI routing, recording, SysEx, automation playback, or hardware behavior changed; this is a launch-readiness clarity layer.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_QA_RECEIPT,MIDI_HEALTH,MIDI_PROTOCOL, andMIDI_CLOSEOUTpassed with reportsmidi-qa-receipt-proof-needs-20260728.out,midi-health-proof-needs-20260728.out,midi-protocol-proof-needs-20260728.out, andmidi-closeout-proof-needs-20260728.out.
2026-07-28 - Automation Ownership Uses Visible UI Names
- Standardized the active MIDI closeout/report language around the same owner names the user sees:
Shared PTN,Clip Local, andLane Local. - Removed stale
Shared PTN Data,Clip Data, andLane Datawording from active MIDI model/test surfaces so documentation, health reports, and automation receipts do not teach different concepts. - Safety boundary: ownership behavior is unchanged; this pass only tightens vocabulary and regression proof before the customer-facing Automation lanes become more visible.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTH,MIDI_PROTOCOL,AUTOMATION_OWNERSHIP, andMIDI_CLOSEOUTpassed with reportsmidi-health-owner-labels-v2-20260728.out,midi-protocol-owner-labels-v2-20260728.out,automation-ownership-owner-labels-v2-20260728.out, andmidi-closeout-owner-labels-v2-20260728.out.
2026-07-28 - Record Timing Gate Uses Fresh Build Output
- Added flushed checkpoints inside
SPACEAGE_MIDI_RECORD_TIMING_ONLYso a timing-gate timeout now names the last completed scenario instead of leaving onlyentering focused gate. - Fixed a jammed test-log line in the direct slot reuse/timestamp section, keeping MIDI timing output readable.
- Confirmed the current build wrapper outputs
SampleSquadAudioTestunderoutputs/build-local-midi-closeout, not the stalebuild-codextree; the stale executable was from 2026-07-26 and caused false timeout noise. - Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_RECORD_TIMING_ONLYpassed withmidi-record-timing-fresh-20260728.out;SPACEAGE_MIDI_HEALTH_ONLYpassed withmidi-health-fresh-timing-path-20260728.out;SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLYpassed withmidi-record-capture-fresh-timing-path-20260728.out;SPACEAGE_MIDI_CLOSEOUT_PLAYBACK_AUTOMATION_SLICE_ONLYpassed withmidi-closeout-playback-auto-fresh-timing-path-20260728.out. - Shared-runner verification:
tools/run_tests.ps1 -NoBuildpassedMIDI_RECORD_TIMING,MIDI_PROTOCOL,MIDI_READINESS, andMIDI_LIVE_INPUT_HEALTH, with reportsmidi-record-timing-runner-20260728.out,midi-protocol-runner-20260728.out,midi-readiness-runner-20260728.out, andmidi-live-input-health-runner-20260728.out.
2026-07-28 - Automation Door Labels Match Help
- Updated the shortcut cheat sheet and in-app shortcut text so Arrangement
AUTOand Piano RollAUTOMATIONare described as two visible doorways into the same Automation editor. - Added the parity rule to the MIDI UI workflow spec so future UI work does not accidentally reintroduce stale automation labels.
- Updated the generated Automation workflow helper so the MIDI preflight report names
Piano Roll Automation,AUTOMATION, ArrangementAUTO, and Arrangement Automation badges consistently. - Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_HEALTH_ONLYpassed withmidi-health-automation-label-parity-20260728.out;SPACEAGE_MIDI_CLOSEOUT_PLAYBACK_AUTOMATION_SLICE_ONLYpassed withmidi-closeout-automation-label-parity-20260728.out.
2026-07-28 - Piano Roll Automation Door Uses Plain Label
- The Piano Roll Automation doorway now says
AUTOMATIONinstead ofAUTO. - Existing row counts are preserved as
AUTOMATION +N, matching the Arrangement page's more explicit Automation language. - This is a customer-facing clarity pass: the feature was already present, but the short label could make it feel hidden or secondary.
- Safety boundary: UI label only; MIDI routing, recording, Automation ownership, playback, export, and hardware behavior are unchanged.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTHpassed withmidi-health-piano-roll-automation-door-label-20260728.out.
2026-07-28 - Partial MIDI Import Refreshes Automation State
- Audited MIDI recording/monitoring ownership and confirmed the live path continues to resolve through the armed Arrangement lane before monitoring, recording notes, or recording expression.
- Patched partial MIDI import clearing so erased expression ranges refresh the live audible state for every affected automation lane instead of mutating the raw expression vector silently.
- This keeps import-as-overwrite behavior aligned with the broader Automation contract: visible/project-data removal must reconcile live controller state immediately.
- Safety boundary: recording commits and state serialization were left alone; this pass only changed the user-facing partial MIDI import clear path.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-import-expression-refresh-20260728.out;MIDI_RECORD_CAPTURE_COREpassed withmidi-record-capture-armed-lane-audit-20260728.out.
2026-07-28 - Automation UI Uses Live-State Refresh
- The Automation popup's transform/apply path now refreshes the live audible state after rewriting an automation lane.
- Delete/clear status copy now says
live output refreshedinstead of always claimingreset to neutral, because deleting one point from a lane with remaining events should reassert the remaining data rather than imply silence or neutral state. - This aligns visible UI feedback with the backend automation-delete refresh contract from the prior pass.
- Safety boundary: this does not add new Automation surfaces or change Automation ownership; it prevents a visible edit path from bypassing live-state reconciliation.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_CLOSEOUTplayback/automation slice passed withmidi-closeout-automation-ui-refresh-20260728.out;MIDI_HEALTHpassed withmidi-health-automation-ui-refresh-20260728.out.
2026-07-28 - Automation Delete Refreshes Live State
- Automation edit/delete operations now refresh the audible live state from the remaining lane data instead of leaving stale controller values behind.
- Single-point deletes, multi-point deletes, range deletes, and empty lane replacement all share the same contract: if an automation lane still has matching events, the latest remaining value becomes live; if the lane is empty, SpaceAge resets that MIDI lane to neutral and resets the matching hardware output route.
- This directly targets the reported "pan automation appears gone but still sounds active" failure class.
- Safety boundary: this does not add new Automation lanes or change Automation UI ownership; it tightens the live-state cleanup after existing edit/delete operations.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_CLOSEOUTplayback/automation slice passed withmidi-closeout-playback-automation-delete-refresh-20260728.out.
2026-07-28 - Live Recording Target Boundary
- MIDI Health now exposes a dedicated
Live recording target boundaryline. - The new line states that the armed Arrangement lane owns incoming MIDI, while selected clips/lanes are edit focus and must not steal live input.
- The summary also states that the playhead or explicit clip resolves which clip receives the take, and that recording is blocked when no Arrangement lane is armed.
- Drum lanes are described as Drum Composer/pad-mapping targets; Instrument lanes are described as lane-owned Instrument/Piano Roll targets.
- The MIDI Health panel now draws this as a visible
REC BOUNDARYrow nearREC PROOF,REC DATA, and take-trust diagnostics. - Safety boundary is unchanged: this pass does not change routing, recording, playback, monitoring, SysEx, hardware output, Automation, clips, or Instrument Bay behavior; it strengthens reporting and regression proof.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTHpassed withmidi-health-recording-target-boundary-20260728.outandmidi-health-recording-boundary-visible-20260728.out;MIDI_RECORD_CAPTURE_COREpassed withmidi-record-capture-target-boundary-20260728.out.
2026-07-28 - Live Timing Boundary Visible In MIDI Health
- The MIDI Health panel now displays the live timing trust boundary as
TIMING BOUNDARY. - This makes the live diagnostic surface explain that record-latency compensation can align captured notes, but cannot remove felt monitoring lag from buffers, drivers, interfaces, hardware, SoundFont starts, or duplicate routing.
- Safety boundary is unchanged: this is a visibility-only UI row; it does not change MIDI timing compensation, recording, playback, monitoring, routing, hardware output, SysEx, Automation, clips, or Instrument Bay behavior.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTHpassed withmidi-health-timing-boundary-visible-20260728.out.
2026-07-28 - Automation Door Proof Visible In MIDI Health
- The MIDI Health panel now displays the Automation doorway proof summary as
AUTOMATION DOOR PROOF. - This mirrors the backend/report
automationDoorwayProofSummary()so the visible cockpit shows how many Automation doors exist, how many are direct/safe/QA-ready, and whether any doorway sends MIDI. - Safety boundary is unchanged: this is a visibility-only UI row; it does not change Automation editing, playback, export, MIDI routing, hardware output, SysEx, clips, or Instrument Bay behavior.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTHpassed withmidi-health-automation-door-proof-visible-20260728.out.
2026-07-28 - Automation Doorway Proof Summary
- Automation summaries now expose a dedicated
Automation doorway proofline. - The proof counts enabled doorways, direct editor doors, safe doors, QA doors, and whether any doorway sends MIDI.
- Empty projects now say launch proof starts by creating/importing one row and proving that row is reachable from Piano Roll, Arrangement, MIDI TASKS, Settings, and MIDI Health.
- Active projects now say QA must prove the exact PTN/clip/lane owner, edit/undo, playback, export/import, and that setup rows stay in MIDI PATCH instead of becoming freehand Automation.
- Safety boundary is unchanged: this is reporting/model proof only and does not change Automation editing, MIDI routing, playback, export, SysEx, hardware output, or Instrument Bay behavior.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTHpassed withmidi-health-automation-doorway-proof-20260728.out;MIDI_PROTOCOLpassed withmidi-protocol-automation-doorway-proof-20260728.out;MIDI_CLOSEOUTautomation/protocol slice passed withmidi-closeout-automation-doorway-proof-20260728.out.
2026-07-28 - Live Timing Trust Boundary
- MIDI Health now exposes a dedicated
Live timing trust boundaryline so the app clearly separates recorded MIDI placement from felt live-monitoring latency. - The new line is serialized in the health object, included in copied Next Steps and full Health reports, and covered by the MIDI Health regression gate.
- This keeps us honest with users: record-latency compensation can move captured notes on the timeline, but it cannot remove the delay a player feels while monitoring through buffers, drivers, interfaces, DIN/USB paths, SoundFonts, external hardware, or duplicate routing.
- Safety boundary is unchanged: MIDI routing, recording, live monitoring, SysEx, hardware output, Automation, and Instrument Bay behavior were not changed; this is clearer diagnostic proof.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTHpassed withmidi-health-live-timing-boundary-20260728.out;MIDI_PROTOCOLpassed withmidi-protocol-live-timing-boundary-20260728.out.
2026-07-28 - Source-Pinned Two-Controller Health Proof
- MIDI Health now says when multiple physical MIDI inputs are open but the armed lane is source-pinned, so the user can distinguish a safe two-controller setup from an ambiguous one.
- The recording take proof line now includes
source-pinned despite multiple open inputswhen applicable. - Latency next-action lines now clarify that ignored controllers should not play, record, or affect timing for a source-pinned lane.
- Safety boundary is unchanged: MIDI routing, live monitoring, recording, SysEx, hardware output, Automation, and Instrument Bay behavior were not changed; this is clearer health/report evidence for a setup the backend already supports.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_RECORD_TIMINGpassed withmidi-record-timing-source-pinned-health-rebuilt-2-20260728.out.
2026-07-28 - Playhead Clip Wins Recording Target Summary
- Tightened the MIDI recording target summary so an armed Arrangement lane always reports the actual clip under the playhead, even if the caller hands it a stale selected/editor pattern.
- The visible
REC TARGETline now treats the playhead clip as the source of truth before it says which PTN will receive the take. - Fixed a closeout self-test harness shadowing issue so private Instrument-slot sample/layer boundary checks report their real result instead of being lost behind inner local variables.
- Safety boundary is unchanged: this pass only aligns visible proof/reporting and regression truthfulness; it does not change MIDI routing, monitoring, recording, playback, clips, Automation, or hardware output.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_CLOSEOUTpassed withmidi-closeout-slot-shadow-fix-20260728.out;MIDI_RECORD_CAPTURE_COREpassed withmidi-record-capture-playhead-summary-2-20260728.out;MIDI_HEALTHpassed withmidi-health-playhead-summary-2-20260728.out.
2026-07-28 - Recording Target Copy Uses Lane Language
- Tightened the visible MIDI recording target summary so it says
ARMED ARRANGEMENT LANEinstead of the olderARMED ARRANGER LANEwording. - Removed the no-armed-lane fallback that could still describe a selected clip in the record target summary. If no lane is armed, the UI now states plainly that recording is blocked until a lane is armed and selection is edit context only.
- Added regression coverage proving a non-drum recording target summary and backend recording proof do not leak
Padwording. - Safety boundary is unchanged: this is user-facing copy/proof alignment only and does not change MIDI routing, monitoring, recording, playback, clips, Automation, or hardware output.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_RECORD_CAPTURE_COREpassed withmidi-record-capture-lane-language-20260728.out;MIDI_HEALTHpassed withmidi-health-lane-language-20260728.out;MIDI_PROTOCOLpassed withmidi-protocol-lane-language-20260728.out.
2026-07-28 - Recording Target Proof Line
- MIDI Health now reports a
REC PROOFline that names the active recording target: armed Arrangement lane, lane type, Instrument, mixer channel, playhead step, pattern, and target clip/local step when available. - The proof distinguishes
REC TARGET,COUNT-IN TARGET, andREC TARGET PREVIEW, so the app can say what will happen before recording and what is happening during recording. - This keeps the backend recording rule visible: armed lane owns live MIDI, playhead/explicit clip chooses the target inside that lane, and selection remains editing context.
- Safety boundary is unchanged: this is read-only routing/target evidence and does not change MIDI routing, monitoring, recording, playback, clips, Automation, or hardware output.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_RECORD_CAPTURE_COREpassed withmidi-record-capture-target-proof-20260728.out;MIDI_HEALTHpassed withmidi-health-recording-target-proof-20260728.out;MIDI_PROTOCOLpassed withmidi-protocol-recording-target-proof-20260728.out.
2026-07-28 - Armed Lane Destination Proof
- MIDI lane routing summaries now carry lane type, lane-owned Instrument identity, mixer channel label, MIDI output channel, and route target in one compact destination proof.
- MIDI Input Readiness and MIDI Health now show that proof for the armed lane, making live MIDI ownership explicit instead of relying on selected clip/editor context.
- The proof is serialized into the MIDI health object and included in plain-text reports, so support/debug reports can answer, "What did my controller actually feed?"
- Safety boundary is unchanged: this only reports routing identity and does not change MIDI input, lane routing, monitoring, recording, playback, or hardware output.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_READINESSpassed withmidi-readiness-destination-proof-20260728.out;MIDI_HEALTHpassed withmidi-health-destination-proof-20260728.out;MIDI_PROTOCOLpassed withmidi-protocol-destination-proof-20260728.out.
2026-07-28 - Recording Take Proof Line
- MIDI Health now exposes a
TAKE PROOFrow besideTAKE TRUSTandTAKE ACTION. - The proof line prints concrete evidence for recording trust: dropped note/drum events, dropped expression events, buffer size/latency, direct MIDI queue age, hardware output queue age, SoundFont refused starts, sample-positioning status, and unpinned multi-controller risk.
- The same proof string is serialized into the health object and printed in MIDI health next-step/plain-text reports, so UI, copied reports, and future support diagnostics speak from the same source.
- Safety boundary is unchanged: this is read-only evidence and does not alter routing, monitoring, recording, Automation, or hardware output.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_RECORD_TIMINGpassed withmidi-record-take-proof-regression-20260728.out;MIDI_PROTOCOLpassed withmidi-protocol-recording-take-proof-regression-20260728.out.
2026-07-28 - Automation Action Door Strip
- The Automation popup's evidence strip now shows a visible
ACTION DOORbadge. - The strip reports the current automation owner, row count, selected target, and next safe action directly in the editor instead of hiding that context in copied reports.
- The next-action text changes with selection: no row selected, editable continuous row, switch row, or protected review-only setup data.
- Safety boundary is unchanged: the strip is read-only guidance and sends no MIDI, changes no routing, changes no project data, and changes no external hardware.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-automation-action-door-strip-20260728.out.
2026-07-28 - MIDI Setup Guide Door Labels
- The MIDI Hardware Setup Guide now names the destination door for the selected setup path.
NEXT ACTIONuses compact surface labels such asMIDI INPUT,MIDI OUT,HARDWARE,TIMING,SYSEX, orAUTOMATIONinstead of generic task prose.- The selected scenario panel now includes a visible
Door:line that states the guide button is navigation-only and sends no MIDI. - The guide's first actionable step now only resolves to safe navigation doors, avoiding misleading button/tooltip behavior for non-openable checklist steps.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-setup-guide-door-labels-20260728.out.
2026-07-28 - MIDI Health Action Door Row
- MIDI Health now shows an
ACTION DOORrow directly underDO NEXT. - The row exposes the cockpit action surface summary: destination surface, whether the action sends MIDI, whether it changes project state, proof bucket details, and backend gate hints when available.
- This makes the visible Health panel match the existing
FIX NEXTrouting logic instead of hiding that routing/safety context in the button tooltip. - Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-health-action-door-row-20260728.out.
2026-07-28 - Hardware Panel Safe MIDI Action Chip
- The selected Hardware Passport row now shows a compact Safe MIDI action chip directly in the MIDI Hardware panel.
- The chip leads with the dashboard action, such as
CONFIRM,QUEUE, orREVIEW, then shows ready/preview counts plus confirmation, warning, or message counts. - This keeps the visible panel aligned with copied Safe MIDI receipts, Hardware Editor Plan receipts, and the structured dashboard model.
- Safety boundary is unchanged: the panel still sends no MIDI and only describes preview/queue readiness.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-panel-safe-action-chip-20260728.out.
2026-07-28 - Hardware Plan Dialog Action
- The Hardware Editor Plan copied dialog now shows the Safe MIDI primary action and dashboard summary.
- This makes the
EDITOR PLANdialog match theSAFE MIDIcopy dialog, copied receipt, and dashboard model. - Safety boundary is unchanged: copying the plan sends no MIDI, changes no Hardware Passport/project data, and unlocks no deep controls.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-plan-dialog-action-20260728.out.
2026-07-28 - Safe MIDI Copy Dialog Action
- The Safe Common MIDI copy dialog now shows the dashboard primary action, such as
Confirm (confirmRequired), before the longer next-action guidance. - This makes the immediate user-facing popup match the structured dashboard and copied receipt state.
- Safety boundary is unchanged: this dialog still copies preview-only plans and sends no MIDI.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-safe-copy-dialog-action-20260728.out.
2026-07-28 - Locked Editor Receipt Actions
- Locked Hardware Editor Plan reports now copy Safe Common MIDI dashboard primary actions into the receipt.
- Section summaries in the locked plan report now include their action labels, such as
action: Queue. - This keeps the copied hardware-editor plan aligned with the structured dashboard state instead of hiding the primary action in a separate Safe MIDI report.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-locked-receipt-actions-20260728.out.
2026-07-28 - Safe MIDI Dashboard Primary Action
- Safe Common MIDI Dashboards now expose top-level
primaryActionLabelandprimaryActionKind. - A dashboard with valid preview plans plus confirmation-required controls reports
Confirm/confirmRequired. - A dashboard with warnings or invalid channel state reports
Review/reviewWarnings. - A fully guarded dashboard with no confirmation-required controls can report
Queue/queueGuarded. - Plain-text dashboard reports now include the primary action before the detailed next-action prose.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-safe-dashboard-primary-action-20260728.out.
2026-07-28 - Safe MIDI Section Actions
- Safe Common MIDI Dashboard sections now expose
primaryActionLabelandprimaryActionKind. - Sections with warnings show
Review/reviewWarnings. - Sections with ready messages that require confirmation show
Confirm/confirmRequired. - Sections with ready guarded controls that need no extra confirmation show
Queue/queueGuarded. - This gives the future Yamaha/XG and generic hardware editor UI stable button semantics without parsing report text.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-safe-dashboard-section-actions-20260728.out.
2026-07-28 - Safe MIDI Queue Labels
- Safe Common MIDI Dashboard rows now expose
queueSafetyLabel. - Normal safe common controls report
guarded queue, while Program Change/RPN-style actions reportconfirm before queue. - Row
nextActiontext now matches the actual safety class instead of telling every ready preview to require explicit confirmation. - Locked Hardware Editor Plan reports now include the confirmation-required preview count in the copied dashboard summary.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-safe-dashboard-queue-labels-20260728.out.
2026-07-28 - Safe MIDI Confirmation Counts
- Safe Common MIDI Dashboards now distinguish ready preview plans from preview plans that still require explicit confirmation before queueing.
- Dashboard rows expose
requiresConfirmation, sections exposeconfirmationRequiredCount, and the dashboard exposes the total confirmation-required preview count. - Plain-text reports now include
Confirmation-required previews: N, and row text says eitherconfirm before queueorno confirmation required. - This matters for hardware because Program Change and RPN actions can be valid MIDI while still deserving deliberate confirmation before a real device hears them.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-safe-dashboard-confirmation-20260728.out.
2026-07-28 - Safe MIDI Dashboard Preview Channel
- Safe Common MIDI Dashboards now expose
previewChannelat dashboard, section, and row level. - Plain-text reports now show
Preview channel: NN, and UI rows show their channel asch NN. EDITOR PLANstill passes the selected Hardware Passport channel into the locked plan, so copied hardware-editor plans can name the exact safe common MIDI preview channel.- This reduces a common hardware-MIDI failure mode: a correct-looking control sent to the wrong channel.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-safe-dashboard-channel-20260728.out.
2026-07-28 - Locked Editor Plans Carry Safe MIDI Dashboard
- Locked Hardware Editor Plans now include the Safe Common MIDI Dashboard directly.
EDITOR PLANcopies now include the selected Hardware Passport's safe common MIDI preview channel and the dashboard section summaries.- This keeps the future Yamaha/XG editor path unified: one locked plan can describe source requirements, disabled deep pages, safe common controls, and preview-only standard MIDI sections.
- Safety boundary is unchanged: this sends no MIDI, queues no messages, changes no Hardware Passport/project data, and unlocks no deep editor controls.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-locked-plan-safe-dashboard-20260728.out.
2026-07-28 - Safe MIDI Dashboard Sections
- Safe Common MIDI Dashboards now expose grouped
dashboardSectionsin addition to flatdashboardRows. - Sections preserve the registry page names, such as
Channel Mixer,Bank / Program, and pitch-bend oriented controls, so future hardware editor UI can draw understandable clusters instead of a flat technical list. - Each section reports row count, ready count, warning count, message count, all-ready state, serialized rows, and a plain-text report.
- This remains preview-only and sends no MIDI, queues no messages, changes no Passport/project data, and unlocks no deep hardware editor controls.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-safe-dashboard-sections-20260728.out.
2026-07-28 - Safe MIDI Dashboard Rows
- Safe Common MIDI Dashboards now expose UI-ready
dashboardRows. - Each row carries control id, display name, message family, value label, status, message count, warning count, safety label, next action, and preview/ready flags.
- The rows give the future hardware editor a clean data source for safe standard controls without parsing the copied report or enabling deep Yamaha/MU/QY SysEx controls.
- Program Change rows preserve the musician-facing distinction between wire value and display value.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-safe-dashboard-rows-20260728.out.
2026-07-28 - Safe MIDI Dashboard Next Action
- Safe Common MIDI Dashboards now expose a structured
nextActionfield. - The selected Hardware Passport row stays compact with the dashboard summary; the copied
SAFE MIDIreceipt and confirmation dialog now tell the user what to do next after reviewing the preview-only standard MIDI messages. - Invalid Passport/channel states report an actionable fix instead of only saying the dashboard needs review.
- Safety boundary is unchanged: this still sends no MIDI, queues no messages, changes no Hardware Passport/project data, and unlocks no deep hardware editor controls.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-safe-dashboard-next-action-20260728.out.
2026-07-28 - Safe MIDI Dashboard Row
- Selected Hardware Passport rows now draw a
SAFE MIDI:status chip with the Safe Common MIDI Dashboard summary. - This gives the user a visible read-only status before opening/copying the longer
SAFE MIDIreport. - The chip remains a preview surface only: it sends no MIDI, queues no messages, changes no Passport/project data, and unlocks no deep editor controls.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-safe-dashboard-row-20260728.out.
2026-07-28 - Safe Common MIDI Dashboard
- Added a machine-readable Safe Common MIDI Dashboard for future hardware editor UI.
- The dashboard reports available control count, preview plan count, ready count, warning count, total MIDI message count, status label, summary text, preview plans, and warnings.
- The
SAFE MIDIcold-copy button now uses this shared dashboard instead of duplicating plan-building logic in UI code. - Regression coverage verifies the default QY/XG dashboard reports 7/7 preview plans ready, 11 ordered MIDI messages, valid serialization, and invalid-channel warnings.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-safe-common-dashboard-20260728.out.
2026-07-28 - Safe MIDI Cold Copy Button
- Added a
SAFE MIDIcold-copy button to the MIDI Hardware Passports panel. - The button copies preview-only action plans for safe common controls on the selected Passport channel: volume, pan, expression, reverb send, chorus send, program change, and pitch-bend range.
- Safety boundary: this sends no MIDI, queues no messages, changes no Hardware Passport, changes no project data, unlocks no deep editor controls, and changes no external hardware.
- This gives the future hardware editor a visible bridge: standard MIDI can be inspected as exact ordered messages while Yamaha/MU/QY SysEx remains source-locked.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-safe-common-copy-button-20260728.out.
2026-07-28 - Safe Common MIDI Control Action Plans
- Added preview-only action plans for Safe Common MIDI Controls.
- The plan builder now turns a selected safe control, MIDI channel, and value into exact ordered MIDI messages without sending anything.
- Control Change plans produce one guarded CC message; Program Change plans preserve the 0-127 wire / 1-128 display distinction; RPN plans produce selector, Data Entry, and safety-null deselect messages.
- Regression coverage verifies Channel Volume CC7, Program Change, Pitch Bend Range RPN 0:0 with null deselect, clamped values, invalid channel blocking, and report text.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-safe-common-action-plan-20260728.out.
2026-07-28 - Safe Common MIDI Controls For Locked Editors
- Added a reusable Safe Common MIDI Control registry for hardware editor plans.
- Locked QY/MU/CBX/generic editor plans now list standard controls that can be staged through the guarded MIDI queue separately from deep vendor SysEx: Bank Select MSB/LSB, Program Change, Channel Volume, Pan, Expression, Reverb Send, Chorus Send, Variation/Effect Send, Sustain, and Pitch Bend Range RPN.
- Yamaha/XG-oriented plans also surface Harmonic Content and Brightness as reviewed common controls while still keeping deep device-specific SysEx locked.
- This improves the future XG editor path: SpaceAge can expose ordinary MIDI controls without pretending all Yamaha address tables are verified.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-safe-common-controls-20260728.out.
2026-07-28 - Locked Editor Source Checklist
- Locked Hardware Editor Page Plans now include a source/unlock checklist.
- The checklist names declared primary source URLs, required source artifacts, unlock requirements, parameter-table proof state, queue-safe row state, and real-hardware receipt state.
- This makes
EDITOR PLANmore useful before a table import: the copied plan can tell the user what evidence still needs to be gathered before deep Yamaha/XG editor controls can exist. - Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-locked-editor-checklist-20260728.out.
2026-07-28 - Editor Plan Cold Copy Button
- Added an
EDITOR PLANcold-copy button to the MIDI Hardware Passports panel. - The button infers the selected Passport's hardware editor family when possible and copies the matching locked editor page plan; otherwise it falls back to the generic GM/XG/GS locked plan.
- Safety boundary:
EDITOR PLANsends no MIDI, changes no Passport, changes no project data, and unlocks no deep editor controls. - Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-editor-plan-button-20260728.out.
2026-07-28 - Locked Hardware Editor Page Plan
- Added a read-only Locked Hardware Editor Page Plan model for future Yamaha/XG editor surfaces.
- The plan turns each registry profile's recommended first pages into explicit locked page cards with disabled control groups, lock reasons, and next actions.
- Parameter import reviews now include this locked page plan in copied reports whenever a matching editor registry entry exists, giving the user a useful editor preview without enabling sends.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-locked-editor-plan-20260728.out.
2026-07-28 - Parameter Import Review Contract
- Added a reusable Hardware Editor Parameter Import Review model that combines expected Passport family, imported table proof, matched editor registry entry, and unlock readiness into one machine-readable contract.
- The
IMPORT TABLEdialog now uses that contract for its headline and copied report instead of rebuilding the same facts in UI code. - This prepares the future locked Yamaha XG editor page to show the same truth as the import dialog: source proof, registry match, lock state, blockers, and next actions.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-import-review-contract-20260728.out.
2026-07-28 - Import Table Dialog Includes Unlock Readiness
- The
IMPORT TABLEdialog now appends a Hardware Editor Unlock Readiness report after the parameter table preview. - The headline now names whether unlock is still locked or ready and shows the first next action when one exists.
- Added profile-family lookup so imported QY/MU/CBX/GM-XG-GS table families can map back to their registry entry without duplicating UI logic.
- The copied report now contains both the row-level table proof and the profile-level unlock checklist.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-table-unlock-dialog-20260728.out.
2026-07-28 - Hardware Editor Unlock Readiness Cards
- Added a read-only Hardware Editor Unlock Readiness model that explains why a hardware editor profile remains locked.
- Readiness now checks for a selected registry entry, declared source artifacts, source-proofed parameter rows, queue-safe rows, profile mismatches, and remaining hardware receipt requirements.
- The
EDITOR PROFILEScopied report now includes an unlock-readiness summary and next actions for each profile. - Regression coverage proves locked QY readiness stays blocked and a synthetic fully proved profile can report ready for deep editor review.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-editor-unlock-readiness-20260728.out.
2026-07-28 - Hardware Table Imports Respect Selected Passport Family
- The
IMPORT TABLEpreview now infers an expected hardware-editor parameter family from the selected Hardware Passport when the device is clearly Yamaha QY, Yamaha CBX-K1XG, or Yamaha MU1000/MU2000. - The dialog headline now shows the expected family before the imported file's own profile, making wrong-device tables easier to spot at first glance.
- Regression coverage now proves QY, MU, CBX, and unknown-device family inference.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-table-passport-family-20260728.out.
2026-07-28 - Hardware Editor Profile Registry Added
- Added a first-class Hardware Editor Profile Registry for Yamaha QY-70/QY-100, Yamaha CBX-K1XG, Yamaha MU1000/MU2000, and generic GM/XG/GS module editor paths.
- The registry is intentionally locked/read-only: parameter sends remain disabled until source-proofed rows and real hardware receipts exist.
- Added an
EDITOR PROFILEScold-copy button to the MIDI Hardware Passport panel so the user can copy the registry status without sending MIDI, changing Passports, changing project data, or unlocking deep editor controls. - Added regression coverage that proves QY/MU profiles exist, remain locked, and report their source/unlock requirements.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-editor-profile-registry-20260728.out.
2026-07-28 - Hardware Editor Table Dialog Explains Lock State
- The
IMPORT TABLEdialog now starts with a short human-readable status block before the full report. - It names whether the table is ready or locked, shows the source-proof counter summary, profile family, and imported/verified/locked row counts.
- The full report is still shown and can still be copied, preserving the forensic trail while making the first glance useful.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-table-dialog-headline-20260728.out.
2026-07-28 - Hardware Editor Table Proof Counts
- Hardware editor parameter-table previews now report structured proof counters: source-ready rows, rows missing source proof, address issues, range/default issues, and profile mismatches.
- Plain-text reports now include a
Source proof:line so a locked Yamaha/QY/MU table can explain exactly why it is not ready to unlock deep editor controls. - Added regression coverage for both verified table rows and intentionally locked fixture-style rows.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-table-proof-counts-20260728.out.
2026-07-28 - Locked Yamaha QY Table Fixture Added
- Added
docs/Yamaha_XG_QY_Parameter_Table_Preview_Example.jsonas a safe manual-test fixture for theIMPORT TABLEworkflow. - The file is intentionally locked: rows name likely QY/XG-style controls, but
sourceVerifiedremains false andqueueSaferemains false until exact official Data List pages are checked. - This gives the UI a known file to preview without creating false confidence or accidentally treating unverified SysEx addresses as production-ready.
2026-07-28 - Hardware Editor Table Preview Button
- Added an
IMPORT TABLEbutton to the MIDI Hardware Passports panel. - The button previews a hardware editor parameter-table
.jsonfile through the new read-only import contract, reports verified/locked/queue-safe rows, and offers aCOPY REPORTaction. - Safety boundary: this UI path sends no MIDI, changes no Hardware Passport, changes no project data, and does not unlock a deep hardware editor by itself.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-hardware-editor-table-button-20260728.out.
2026-07-28 - Hardware Editor Parameter Files Preview Safely
- Added a read-only JSON text/file import preview for future Yamaha XG and other hardware-editor parameter tables.
- Profile JSON can now carry
profileFamilyat the file level, with individual rows inheriting that family so official source tables do not have to repeat the same device label on every row. - Invalid JSON, empty text, and missing files now produce warnings instead of creating project state, sending MIDI, or pretending a deep editor can unlock.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-xg-param-import-file-20260728.out.
2026-07-28 - XG Editor Templates Carry Source Proof
- Extended MIDI Hardware Setup device templates with structured hardware-editor source fields: legal note, primary source URLs, required source artifacts, and unlock requirements.
- Populated Yamaha QY-70/QY-100, CBX-K1XG, MU1000/MU2000, and generic GM/XG/GS templates so future Hardware Passport UI can show exactly why a deep editor page is locked and what evidence is needed to unlock it.
- Preserved the clean legal boundary: community editors can inspire workflow, but SpaceAge editor data must come from official manuals/data lists or explicitly compatible sources.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_PROTOCOLpassed withmidi-protocol-xg-source-proof-20260728.out.
2026-07-28 - Yamaha XG Editor Spec Started
- Added
docs/Yamaha_XG_Editor_Spec.mdas the first source-backed plan for QY-70/QY-100 and MU-series editor support. - Added a dedicated locked Yamaha MU1000/MU2000 Hardware Setup template so MU2000 work no longer hides inside the generic GM/XG/GS template.
- Kept the safety boundary intact: the QY, MU, CBX, and generic XG editor profiles can guide setup and source collection, but deep parameter sends remain locked until exact Data List / MIDI Data Format tables and physical proof receipts exist.
- Recorded the legal boundary: QXGEdit is GPL and WebXGMIDI has no obvious permissive license in checked GitHub metadata, so both are workflow references rather than source code.
- Verification:
SPACEAGE_MIDI_PROTOCOL_ONLYpassed.
2026-07-26 - Launch Proof Cards Now Carry Backend Gate Identity
- Propagated
automatedFocusedGateandautomatedFocusedGateLabelfrom Remaining MIDI rows into the launch validation matrix, remaining receipt action queue, next launch receipt, action surfaces, cockpit proof cards, and proof-card checklist lines. - This keeps the MIDI Health UI/reporting chain honest: a proof bucket can now show both the human PASS evidence needed and the automated gate that guards the underlying code path.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTH,MIDI_PROTOCOL,MIDI_READINESS, andSPACEAGE_MIDI_CLOSEOUT_AUTOMATION_SLICE_ONLYpassed.
2026-07-26 - Remaining MIDI Rows Now Name Their Backend Gates
- Added focused-gate metadata to every Remaining MIDI 1.0 closeout row, so the Health/reporting layer can show which automated backend gate protects each human launch-proof bucket.
- The first action summary now names both the receipt key and backend gate, e.g.
SPACEAGE_MIDI_CLOSEOUT_AUTOMATION_SLICE_ONLY, while still preserving the truth that launch readiness requires saved PASS evidence from real testing. - Verification: rebuilt
SampleSquadAudioTest;MIDI_HEALTH,MIDI_PROTOCOL,MIDI_READINESS,SPACEAGE_MIDI_CLOSEOUT_AUTOMATION_SLICE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_PLAYBACK_AUTOMATION_SLICE_ONLYpassed.
2026-07-26 - Focused Closeout Checkpoints Now Report Only Their Own Work
- Moved the
lane owned drawercheckpoint inside the instrument-UI closeout section so playback/live automation and route/status slices no longer claim to have run lane-drawer UI work. - This keeps focused slice output truthful: each gate now names only the rooms it actually walked through.
- Verification: rebuilt
SampleSquadAudioTest; instrument-UI, playback/live automation, and route/status focused slices all passed with clean checkpoint output.
2026-07-26 - MIDI Closeout Now Has Six Focused Passing Slices
- Finished splitting the remaining closeout coverage into focused gates for playback/live automation, lane workflow, and route/status messaging, in addition to the existing automation/protocol, instrument-slot, and instrument-UI slices.
- Repaired the closeout slice scope so each focused gate runs its own section without accidentally walking the entire deep regression or falling outside the checkpoint logger scope.
- Verification: rebuilt
SampleSquadAudioTest; all six focused closeout slices passed: automation/protocol (~38.7s), instrument-slot (~77.2s), instrument-UI (~8.5s), playback/live automation (~13.8s), lane workflow (~86.8s), and route/status (~7.6s).
2026-07-26 - MIDI Closeout Slices Now Skip Unrelated Setup
- Tightened the focused MIDI closeout gates so the instrument-slot and instrument-UI slices no longer run the automation/protocol proof before reaching their own checks.
- Runtime improved materially: instrument-slot slice now reaches
playback slot guardaround 71 seconds instead of about 116 seconds, and instrument-UI slice now reacheslane owned draweraround 80 seconds instead of about 123 seconds. - The full deep closeout regression still runs all sections; only the focused slice gates skip unrelated setup.
- Verification: rebuilt
SampleSquadAudioTest; optimized automation/protocol, instrument-slot, and instrument-UI slices all passed.
2026-07-26 - MIDI Closeout Split Into Focused Slices
- Split the giant MIDI closeout regression into focused gates for automation/protocol, instrument-slot boundaries, and instrument UI routing while keeping the full deep closeout gate available.
- The automation/protocol slice now proves automation owner isolation, curve transforms, expression moves, SysEx ownership, pitch-mark persistence, and capture-cancellation behavior in about 40 seconds.
- The instrument-slot slice now proves lane insertion, private instrument-slot state, visible-pad clamps, wrapper guards, sample/layer boundaries, retained-sample repair, and playback-slot guards in a focused run.
- The instrument-UI slice now proves the lane-owned drawer, Piano Roll instrument receipt, and native patch-list mixer-send exclusion without forcing the entire deep sweep every time.
- Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_CLOSEOUT_AUTOMATION_SLICE_ONLY,SPACEAGE_MIDI_CLOSEOUT_INSTRUMENT_SLOT_SLICE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_INSTRUMENT_UI_SLICE_ONLYpassed. The full closeout gate remains available for deep sweeps but should no longer be the only fast confidence gate.
2026-07-26 - MIDI Closeout Regression Timeout Diagnosed
- Added timed checkpoints to the
SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYgate so the long Instrument Bay / MIDI closeout regression no longer appears frozen while it is constructing processors, editors, and instrument-slot boundary fixtures. - Confirmed the gate was not failing: a controlled full run exited
0and printedMIDI closeout regression: passed, but it took about 229 seconds. The heaviest stretches are repeated processor construction, instrument-slot boundary checks, playback-slot guard setup, lane-owned drawer/editor coverage, and arrangement instrument workflow contracts. - Verification: rebuilt
SampleSquadAudioTest; controlled closeout run passed before the final label polish; rebuilt again after checkpoint label cleanup.
2026-07-26 - Remaining MIDI Checklist Exposes Its Next Action
- Added
remainingMidiOnePerfectionFirstChecklistRow()andremainingMidiOnePerfectionFirstActionSummary()so the MIDI closeout data can name the next remaining task, its action surface, receipt key, and PASS evidence without making the UI parse checklist prose. - Serialized the same first-row/action-summary data through protocol coverage and MIDI Health summary output, giving future cockpit UI one clean doorway into the remaining MIDI 1.0 closeout queue.
- Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_PROTOCOL_ONLY,SPACEAGE_MIDI_HEALTH_ONLY, andSPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLYpassed.SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYtimed out this pass; the leftover test process was stopped and should be investigated separately before relying on that gate again.
2026-07-26 - Remaining MIDI Checklist Rows Carry Proof Metadata
- Enriched
remainingMidiOnePerfectionChecklistRows()so each remaining MIDI 1.0 checklist row now carries stable IDs, action surface/label data, route/safety fields, and matching launch-proof receipt metadata. - This lets a future MIDI cockpit connect a remaining task directly to the proof bucket and saved receipt that will satisfy it, without parsing long checklist prose.
- Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_PROTOCOL_ONLY,SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYpassed.
2026-07-26 - MIDI Health Layout Uses One Row Budget
- Replaced the MIDI Health panel's mismatched hard-coded summary height and button-layout row skip with shared row-budget constants.
- This reduces the risk that future Health rows shove buttons or warnings into hidden/overlapping regions while the paint code and resize code silently disagree.
- Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_PROTOCOL_ONLY,SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY,SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYpassed.
2026-07-26 - MIDI Health Fix Next Tooltip Carries Proof Context
- Expanded the MIDI Health
FIX NEXTtooltip so launch-proof actions carry the same proof needs and minimum PASS evidence as the visible proof card. - This keeps the next-action button from being a vague doorway: hovering it now tells the tester why that action matters and what evidence must exist before the proof bucket can be trusted.
- Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_PROTOCOL_ONLY,SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY,SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYpassed.
2026-07-26 - MIDI Health Shows The First Launch Proof Card
- Wired the structured launch-proof card data into the visible MIDI Health panel as a compact
PROOF CARDrow. - The panel now shows the first open proof bucket, action, proof need, and receipt key without dumping all nine launch-proof rows into the already-dense Settings popup.
- Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_PROTOCOL_ONLY,SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY,SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYpassed.
2026-07-26 - MIDI Cockpit Shows Launch Proof Progress At A Glance
- Added launch-proof progress to the top-level MIDI cockpit status summary, using the same structured progress and remaining-proof labels already exposed by the launch-proof card deck.
- The cockpit now says the equivalent of
Launch proof: 0/9 receipts, 9 proof buckets remainingorLaunch proof: 9/9 receipts, 0 proof buckets remaining, so the main health line no longer hides the launch-proof gate behind deeper report text. - Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_PROTOCOL_ONLY,SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY,SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYpassed.
2026-07-26 - Launch Proof Checklist Is Human-Readable
- Added
midiLaunchValidationProofCardLines()so the UI/report layer can present the launch-proof deck as direct checklist text instead of only structured card objects. - The MIDI Next Steps report now prints a
MIDI launch proof cards:section with[ ]and[PASS]rows, proof needs, and the minimum PASS evidence for each bucket. - Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_PROTOCOL_ONLY,SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY,SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYpassed.
2026-07-26 - Launch Proof Cards Are Top-Level Health Data
- Lifted the MIDI launch-proof card deck out to top-level MIDI Health payload fields, so future UI code can read
midiLaunchValidationProofCardRows,midiLaunchValidationFirstOpenProofCard,midiLaunchValidationProgressLabel, andmidiLaunchValidationRemainingProofLabelwithout digging through the nested cockpit card. - Kept the nested
midiLaunchValidationCockpitCardintact for richer detail while making the common UI path simpler and less brittle. - Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_PROTOCOL_ONLY,SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY,SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYpassed.
2026-07-26 - Launch Proof Next Action Carries Its Card
- Added a compact
proofCardto the MIDI Health cockpit next-action surface whenever the next action is a launch-proof task. - The next-action card now carries the same human-useful fields as the launch proof deck: proof bucket, receipt key, action label, proof needs, proof artifact, and minimum PASS evidence.
- Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_PROTOCOL_ONLY,SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY,SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYpassed.
2026-07-26 - Launch Proof Rows Are Now UI-Ready Cards
- Added compact
proofCardRowsto the MIDI Health launch-proof cockpit card, derived from the validation matrix but shaped for direct UI rendering. - Each proof card now carries
bucket,receiptKey,status,done,actionLabel,proofNeedsLabel,minimumPassEvidence, and saved-result details, plus the cockpit exposesfirstOpenProofCard,progressLabel, andremainingProofLabel. - Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_PROTOCOL_ONLY,SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY,SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYpassed.
2026-07-26 - Launch Proof Cards Expose Minimum Evidence Directly
- Promoted
minimumPassEvidenceinto the MIDI Health launch-proof cockpit summary and next-action summary, so future UI cards can show the exact PASS requirement without parsing long proof-artifact paragraphs. - The cockpit next-action surface also carries the minimum evidence line, keeping the same proof floor visible in both structured data and plain-language summaries.
- Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_PROTOCOL_ONLY,SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY,SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYpassed.
2026-07-26 - Launch Validation Receipts Now Say What PASS Requires
- Added
minimumPassEvidenceto MIDI launch-validation rows and launch-proof action cards, so each proof bucket now tells the tester what a PASS must include instead of only naming a broad artifact category. - The minimum evidence text now flows through the validation matrix, remaining receipt action queue, next launch receipt, next action text, MIDI Health launch cockpit card, and cockpit next-action surface summary.
- Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_PROTOCOL_ONLY,SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY,SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYpassed.
2026-07-26 - Automation Closeout Now Names The Real Surface
- Tightened MIDI closeout wording so the Automation finish line no longer implies full expanded Arrangement timeline lanes are already present. The current launch-test surface is now explicitly the Piano Roll preview strip, Arrangement badges/counts, lane/toolbar Automation doorways, and owner-scoped Automation popup editor.
- Updated the remaining MIDI 1.0 checklist, launch validation matrix, customer-facing closeout plan, and QA run cue to point testers at popup editing, preview/badge checks, Shared PTN/Clip Local/Lane Local ownership proof, transforms, undo, playback, import/export, and pitch-bend trust.
- Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_PROTOCOL_ONLY,SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY,SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYpassed.
2026-07-26 - Automation Visibility Boundary Is Explicit
- Updated the MIDI coverage report so it no longer over-implies full expanded timeline Automation lanes. Current visibility is defined as Piano Roll preview strip, Arrangement clip badges/counts, lane/toolbar Automation doorways, and the owner-scoped popup editor.
- The same report now names full always-expanded timeline Automation lanes and non-MIDI Motion Clips as future surfaces, not current launch claims. This keeps the MIDI 1.0 completion story honest while the backend remains strong.
- Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY,SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_PROTOCOL_ONLY,SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY, andSPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLYpassed.
2026-07-26 - Automation Popup Row Readability Tightened
- Fixed a layout mismatch in the Automation popup: the list/graph geometry helpers were reserving 42 pixels for status/checklist strips that are actually painted as 30-pixel strips, which wasted vertical space and made the row area feel unnecessarily cramped.
- Raised the Automation row height from 52 to 60 pixels and increased the key row fonts slightly, improving legibility for row labels, gestures, event counts, tick ranges, and value ranges without changing the ownership model or MIDI behavior.
- Verification: rebuilt
SampleSquadAudioTest;SPACEAGE_AUTOMATION_HARDWARE_RESET_ONLYpassed;SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLYpassed.
2026-07-26 - Deleting Automation Now Sends Neutral Resets To Hardware
- Shared the neutral reset-message logic used for internal MIDI state with the hardware automation-deletion path, so deleted pan/CC/pitch/pressure lanes no longer leave an external instrument hearing the last value.
- Automation removals now reset affected Arrangement lanes only: lane-local automation resolves to its lane, clip-local automation resolves to clips with that ID, and shared PTN automation resolves to lanes containing that pattern.
- Verification: rebuilt
SampleSquadAudioTest;AUTOMATION_HARDWARE_RESETpassed with CC10 returning to center on a forced channel-5 external lane;MIDI_RECORD_CAPTURE_COREandMIDI_LIVE_INPUT_HEALTHstill passed. The broad closeout regression gate currently times out in this local run and needs separate suite-performance attention.
2026-07-26 - Arrangement Automation Doorway Is Explicit Again
- Changed the main Arrangement toolbar doorway from
AUTOback toAUTOMATION, while preserving compactAUTO/A#clip breadcrumbs where space is genuinely tight. - The Arrangement-launched automation popup now anchors to the visible Arrangement
AUTOMATIONbutton when invoked from the Arranger, instead of relying on the Piano Roll settings control as the popup anchor. - Verification: rebuilt
SampleSquadAudioTest;MIDI_RECORD_CAPTURE_COREpassed with long-clip, first-measure, four-measure, external-only, internal+external, and two-controller source-filter coverage;MIDI_LIVE_INPUT_HEALTHpassed.
2026-07-26 - Fast Live Input Health Gate Added
- Added a focused
MIDI_LIVE_INPUT_HEALTHtest gate for the two-controller live-input trouble zone: multiple physical inputs open, multiple active controllers, unpinned lanes, and recording-take trust warnings. - The new gate gives us a quick way to protect the USB-vs-DIN / multi-controller reliability work without rerunning the full slow MIDI closeout slice every time.
- Verification: rebuilt
SampleSquadAudioTest;MIDI_LIVE_INPUT_HEALTHpassed viamidi-live-input-health-fast.outin under 10 seconds;MIDI_HEALTHstill passed viamidi-health-after-live-input-fast-gate.out.
2026-07-26 - Open MIDI Inputs Are Not Quietly Treated As Harmless
- Added focused project-health coverage for the case where multiple physical MIDI inputs are open on an unpinned lane, even before more than one controller has actively played notes.
- The full health summary now has regression coverage proving the
directInputrow reports the open device IDs, marks the condition as caution/attention, points the first action to MIDI Hardware, and treats the recording take asTIMING SUSPECTinstead ofCLEAN. - Verification: rebuilt
SampleSquadAudioTestinbuild-codex;MIDI_HEALTHpassed viamidi-health-open-input-project-summary.out;MIDI_READINESSpassed viamidi-readiness-open-input-project-summary.out;MIDI_CLOSEOUT_REGRESSIONpassed viamidi-closeout-open-input-project-summary-fresh.out. Note: the closeout slice took roughly 4.4 minutes in this fresh build tree, so it is valid but too slow for every tiny MIDI pass.
2026-07-26 - Recording Reliability Treats Multi-Controller Input As Suspect
- Extended the recording take reliability summary so an unpinned lane with multiple active/open direct MIDI inputs is no longer reported as clean just because queue age is low.
- The next action now tells the user to pin the armed lane to the intended input, split controllers by MIDI channel, or deliberately keep layered input before judging a take.
- Verification:
MIDI_HEALTHpassed viamidi-health-multi-input-recording-suspect.out;MIDI_READINESSpassed viamidi-readiness-multi-input-recording-suspect.out;MIDI_CLOSEOUTpassed viamidi-closeout-multi-input-recording-suspect.out.
2026-07-26 - MIDI Health Flags Multi-Controller Ambiguity
- Promoted multi-controller direct-input state into
MidiProjectHealthSummary, including open physical inputs, active musical input sources, and whether the armed lane is pinned to a specific device. - The live MIDI diagnostic
directInputrow now flags two separate problems: true queue lag and unpinned multi-controller ambiguity. If two controllers are open or have both sent notes, the action card points safely to MIDI Hardware. - Added latency action guidance for USB/DIN/interface comparisons where the queue is clean but multiple physical sources are attached.
- Verification:
MIDI_HEALTHpassed viamidi-health-multi-input-diagnostic.out;MIDI_READINESSpassed viamidi-readiness-multi-input-diagnostic.out;MIDI_CLOSEOUTpassed viamidi-closeout-multi-input-diagnostic.out.
2026-07-26 - Lane AUTO Doorways Stay Stable
- Kept Arrangement lane-level Automation commands labeled
AUTO/AUTOMATIONregardless of row count, moving row counts into tooltips/status/editor context instead of changing the button label. - Preserved tiny in-clip evidence shorthand (
AUTO/A#) as a separate breadcrumb system, because those badges live inside cramped clips rather than acting as primary lane commands. - Updated the MIDI workflow spec to make this distinction explicit.
- Verification:
MIDI_HEALTHpassed viamidi-health-lane-auto-stable.out;MIDI_CLOSEOUTpassed viamidi-closeout-lane-auto-stable.out.
2026-07-26 - MIDI Closeout Cards Use The Visible AUTO Doorway
- Aligned the MIDI closeout action model with the current GUI: the next Automation closeout action now says
Open AUTO, and its button label isAUTO. - Kept the formal blocker/category name as
Automation Final Editor, so reports still describe the feature clearly while action cards point at the compact control the user actually sees. - Updated the closeout QA checklist and hardware-controller scenario labels so import validation and expressive-controller guidance no longer imply a separate
Automationbutton exists. - Verification:
MIDI_HEALTHpassed viamidi-health-auto-closeout-card.out;MIDI_CLOSEOUTpassed viamidi-closeout-auto-closeout-card.out.
2026-07-26 - MIDI Health Promotes Every Live-Feel Bottleneck
- MIDI Health now treats hardware-output queue lag and SoundFont prepared-voice refusal as first-class live-feel warnings in the cockpit, not only in deeper report text.
LIVE FEEL,LAG SOURCE,LIVE DIAG,FEEL ACTION, andLATENCYnow light up from one shared live-feel attention predicate: high audio buffer, direct-input queue lag, hardware-output queue lag, or SoundFont live-start refusal.- Verification:
MIDI_HEALTHpassed viamidi-health-live-feel-attention.out;MIDI_CLOSEOUTpassed viamidi-closeout-live-feel-attention.out.
2026-07-26 - Piano Roll Automation Doorway Uses AUTO
- Brought the Piano Roll Automation button into the same visible vocabulary as the Arrangement toolbar:
AUTOwhen empty andAUTO +Nwhen rows exist. - The full feature name remains
Automationin tooltips, reports, and editor title text; the compact button now saves horizontal space and matches the docs. - Verification:
MIDI_CLOSEOUTpassed viamidi-closeout-pianoroll-auto-label.out;MIDI_HEALTHpassed viamidi-health-pianoroll-auto-label.out.
2026-07-26 - Arrangement Automation Breadcrumbs
- Shortened the Arrangement toolbar Automation button to
AUTO, withAUTO +Nwhen existing Automation rows are present for the current target. - The Arrangement selected-item readout now appends
AUTO +Nwhen the selected clip/lane target already has visible Automation rows, and its tooltip names the resolved target. - Verification:
MIDI_CLOSEOUTpassed viamidi-closeout-auto-readout.out;MIDI_HEALTHpassed viamidi-health-auto-readout.out.
2026-07-26 - Settings MIDI Pages Get Breathing Room
- Reworked the main Settings popup from one tall column into a wider two-column toggle layout so the MIDI doorway buttons no longer sit at the fragile bottom edge of the panel.
- Shortened MIDI Hardware Passport explanation strips while preserving the important safety model: opening the page sends nothing; queue actions require confirmation; hardware truth still needs proof.
- Verification:
MIDI_HEALTHpassed viamidi-health-settings-layout.out;MIDI_CLOSEOUTpassed viamidi-closeout-settings-layout.out.
2026-07-26 - Automation Popup Readability Follow-Up
- Enlarged the MIDI Automation popup again, shortened the densest helper copy, and raised fitted-text minimums so safety/ownership guidance reads cleanly instead of fighting the available space.
- Replaced several hardcoded bottom-action and insert-panel measurements with shared geometry constants, keeping the popup's drawing, hit-testing, and control placement easier to maintain.
- Verification:
MIDI_CLOSEOUTpassed after the follow-up pass viamidi-closeout-automation-popup-readability-2.out.
2026-07-26 - Automation Popup Readability Pass
- Enlarged the MIDI Automation popup and increased the font sizes, row heights, evidence strip height, bottom action area, and insert-value text box so the editor reads less like a cramped debug panel and more like a real user-facing control surface.
- Unified automation list row sizing through a shared row-height constant so drawing, mouse hit-testing, and visible-row math stay aligned as the popup layout evolves.
- Matched the existing quick-dismiss convention:
Esc,x, andXnow dismiss the Automation popup. - Verification:
MIDI_CLOSEOUT,MIDI_RECORD_TIMING, andMIDI_PROTOCOLpassed after the readability pass.
2026-07-26 - Stale Direct Controller Messages Now Prove They Die Quietly
- Added focused MIDI timing coverage for the case where a direct hardware controller queues note-on/note-off messages, then its input slot is invalidated before the audio block drains the queue.
- The regression proves those stale-generation messages do not create live voices, do not write notes into the armed Arrangement clip, and do increment the readiness dropped-message counter.
- Verification: rebuilt
MIDI_RECORD_TIMINGpassed withstale direct device generation rejection: passed; no-buildMIDI_CLOSEOUT,MIDI_READINESS,MIDI_PROTOCOL, andMIDI_HEALTHpassed afterward.
2026-07-26 - TG-55 Joins Native Patch Save/Load
- Added TG-55 AWM2 to the native synth patch parameter list, so its preset, tone, envelope, level, character, brightness, and motion controls can be saved/loaded like the other internal engines.
- Expanded the MIDI closeout regression to prove all native patch lists exclude Mixer-owned shared-send parameters, and that TG-55 has a real patchable parameter set instead of falling through to "patch save unavailable."
- Verification: rebuilt
MIDI_CLOSEOUTpassed withnativePatchNoMixerSends=1; no-buildMIDI_RECORD_TIMING,MIDI_READINESS,MIDI_PROTOCOL, andMIDI_HEALTHpassed afterward.
2026-07-26 - Synth Pages Stop Teaching Mixer-Owned Sends
- Removed the lingering Redshift page copy that described a
spacesection as part of the patch identity after the shared-return sends were removed from synth preset/application paths. - Tightened the gotchas checklist so future generator work does not put Halostar/Reverb/EchoRay/Chorus/Flanger/Phaser/Tremolo/Octave return state back into synth patches.
- Added Creative Thinking context for the product boundary: Instruments own sound identity; Mixer/Lane routing owns ambience and shared effects.
- Verification: rebuilt
MIDI_CLOSEOUTpassed; no-buildMIDI_RECORD_TIMING,MIDI_READINESS,MIDI_PROTOCOL, andMIDI_HEALTHpassed afterward.
2026-07-26 - Instrument Variant Now Receives A Fresh Identity
- Updated the Arrangement lane
VARIANTpath so it can request a fresh Instrument identity when branching a lane to a copied private Instrument slot. - Copying another lane's sound into the current lane still preserves the lane's Instrument identity by design; Variant now differs correctly by creating a new Instrument ID while preserving the same lane role, mixer channel, and clip set.
- Expanded closeout coverage so Variant proves: new private slot, new Instrument ID, same mixer route, same clips, retargeted notes/chords, copied patch settings, and no visible Pad selection movement.
- Verification: rebuilt
MIDI_CLOSEOUTpassed withlaneInstrumentVariantWorkflow=1; no-buildMIDI_READINESS,MIDI_PROTOCOL, andMIDI_RECORD_TIMINGpassed afterward.
2026-07-26 - Fresh Lane Instrument Replacement Refreshes Armed MIDI Route
- Normalized the
NEW INSTRUMENTpath in the Arrangement lane instrument menu so it refreshes lane selection, Piano Roll instrument routing, and armed MIDI input routing the same way the main lane-owned instrument path does. - Fresh replacement now re-registers the lane's Instrument identity while preserving the lane's private slot, mixer channel, and existing clips.
- Expanded closeout coverage so an armed MIDI lane still points live input at the lane's private Instrument and mixer channel after a fresh engine replacement.
- Verification: rebuilt
MIDI_CLOSEOUTpassed withfreshLaneInstrumentReplacement=1; no-buildMIDI_READINESS,MIDI_PROTOCOL, andMIDI_RECORD_TIMINGpassed afterward.
2026-07-26 - Shared Pattern Retargeting Now Forks Before Rewiring
- Hardened non-drum lane instrument reassignment when the lane's clip pattern is also referenced by another instrument lane.
- The old behavior skipped retargeting shared patterns to avoid corrupting the other lane. The new behavior copies the full pattern payload into the next unused pattern, repoints only the changed lane's clips to that copy, then retargets notes/chords to the lane's private Instrument.
- Copied payload includes drum steps, Piano Roll notes, Chord Engine clips, MIDI expression/automation payloads, and pattern length.
- Verification: rebuilt
MIDI_CLOSEOUTpassed; no-buildMIDI_READINESS,MIDI_PROTOCOL, andMIDI_RECORD_TIMINGpassed. A full all-tests sweep was attempted but exceeded the 3-minute command cap before completion.
2026-07-26 - Instrument Records Now Explain Musical Ownership
- Updated Instrument Bay record wording so private non-drum Instrument records no longer say they are "stored in Instrument ##."
- Available private Instruments now read as presets available for Arrangement lanes.
- Lane-owned records now identify the owning lane, Instrument ID, mixer channel, MIDI channel, engine, and preset without exposing the transitional backing-slot language.
- Verification: rebuilt
MIDI_CLOSEOUTpassed withavailableInstrumentLabel=1;MIDI_READINESS,MIDI_PROTOCOL, andMIDI_RECORD_TIMINGpassed afterward.
2026-07-26 - Lane-Owned Instrument Headers Stay Out Of Pad Language
- Expanded the closeout regression so the Synth Editor title, target label, and source label are all checked when editing a non-drum Arrangement lane Instrument.
- The visible drawer context must say
INSTRUMENT, show the lane/mixer/MIDI-channel context, and avoidPadwording. - This protects the user-facing Instrument Bay migration: non-drum lanes own Instruments, while visible Pads remain the Drum Composer surface.
- The test launcher now serializes the CMake build phase with a named mutex, so parallel gate runs wait their turn instead of colliding on shared object files.
- Verification:
MIDI_CLOSEOUT,MIDI_READINESS,MIDI_PROTOCOL, andMIDI_RECORD_TIMINGpassed. A deliberate parallelMIDI_READINESS+MIDI_PROTOCOLrun also passed after the build-lock fix.
2026-07-26 - Automation Edits Now Latch Live Controller State
- Successful automation value updates, point moves, point drag/value moves, group moves, and pasted automation now apply the most recent edited MIDI expression event to the live internal controller state.
- This closes the stale-output class where automation could look edited or deleted while the audible pan/CC state kept acting like an older value was still present.
- Existing lane delete/reset behavior remains intact: deleting a pan lane resets pan to center, volume/expression reset to full, mod wheel/pressure/sustain reset to zero, and pitch bend resets to center.
- Verification: rebuilt
MIDI_CLOSEOUTpassed withautomationUpdateLivePan=1,automationPasteLivePan=1, andautomationDeleteResetsPan=1.
2026-07-25 - Native Preset Cleanup Uses Owner-Aware Resource Clearing
- Routed Redshift/Propulsion/Liftoff/Glass Moon/Moonshadow/Lunacy and Drum Lab preset cleanup through active-target resource helpers.
- Visible Drum Pads still clear sample/one-shot/SoundFont state through Pad APIs. Private lane-owned Instruments now clear through Instrument-slot APIs.
- The shared One-Shots clear buttons now use the same active-target route;
Clear All Padsremains Pad-specific by design. - This removes another hidden Pad assumption from shared Synth Engine preset loading without touching the actual Drum Composer pad-bank setup routines.
- Verification: rebuilt
MIDI_CLOSEOUTpassed after the One-Shot wrapper expansion.
2026-07-25 - SoundFont Display Uses Owner-Aware Source Paths
- Added an editor-side
getSoundFontPathForSlot()helper so shared SoundFont UI can ask for the active target's source path without speaking in Pad-only terms. - Routed the SoundFont editor's loaded-file readout through that helper.
- This is a small bridge cleanup, but it matters: a lane-owned Instrument should not depend on Pad-facing display code to explain what it has loaded.
- Verification: rebuilt
MIDI_CLOSEOUTpassed after this pass.
2026-07-25 - Shared Synth Loaders Use Active-Target Instrument Routing
- Added an editor helper for shared Synth Engine actions: visible Drum Pads still call the Pad helper, while private lane-owned Instruments call the Instrument-slot helper.
- Routed native preset application plus Lunacy/Liftoff source imports through this active-target doorway.
- This does not yet remove the internal 64-slot bridge, but it keeps new code from treating non-drum lane Instruments as customer-facing Pads.
- Verification: rebuilt
MIDI_CLOSEOUTpassed after this pass.
2026-07-25 - SoundFont Clear Respects Private Instrument Ownership
- Fixed the shared Synth Editor SoundFont clear button so it now uses the private Instrument-slot clearing path when the active target is a lane-owned Instrument.
- Visible Drum Pads still clear through the Pad path, preserving MPC-style Pad behavior while keeping non-drum lanes from being treated as user-facing Pads.
- This is part of the bridge cleanup toward the final Instrument Bay model: private lane Instruments can still reuse the existing engine storage internally, but visible actions should route through owner-aware doors.
- Verification: rebuilt
MIDI_CLOSEOUTpassed; no-buildMIDI_RECORD_TIMING,MIDI_HEALTH,MIDI_READINESS, andMIDI_PROTOCOLpassed.
2026-07-25 - Private Instrument Labels No Longer Fall Back To Pad Labels
- Removed the remaining fallback where a private lane-owned Instrument label could be read from the old visible Pad label array.
- Added regression coverage proving a custom Pad label on a private backing index does not become the Instrument name.
- This is another step toward the final Instrument Bay model: Pads can remain the drum/MPC surface while non-drum lanes own Instruments with separate identity.
- Verification: rebuilt
MIDI_CLOSEOUTpassed; no-buildMIDI_RECORD_TIMING,MIDI_HEALTH,MIDI_READINESS, andMIDI_PROTOCOLpassed.
2026-07-25 - Instrument Menus Stop Teaching The Pad Bridge
- Tightened the Arrangement lane instrument menu and status wording so non-drum lanes present their sound as a lane-owned Instrument, not as a hidden Pad-backed object.
- Live menu wording now says
AVAILABLE INSTRUMENT,NEW INSTRUMENT,COPY INSTRUMENT FROM LANE, andINSTRUMENT VARIANT, keeping the lane ownership rule without making "Lane Instrument" a customer-facing object class. - Split private Instrument labels from visible Pad labels so lane-owned Instruments can keep names without rewriting the Drum Composer Pad grid.
- Verification: rebuilt
MIDI_CLOSEOUTpassed; no-buildMIDI_RECORD_TIMING,MIDI_HEALTH, andMIDI_READINESSpassed.
2026-07-25 - Preset Loads Respect Lane Instrument Labels
- Replaced shared Synth Editor preset-label writes with the owner-aware label helper across the native synth/lab preset paths that can target either visible Pads or lane-owned Instruments.
- Patch display fallback now checks the private Instrument label before falling back to Pad labels, and Quasar package loads use the same active Instrument doorway.
- Verification: rebuilt
MIDI_CLOSEOUTpassed with expandedlaneOwnedDrawer=1; no-buildMIDI_RECORD_TIMING,MIDI_HEALTH, andMIDI_READINESSpassed.
2026-07-25 - Saved Patch Names Use Instrument Label Doorway
- Replaced a direct
setPadLabel()call in saved patch refresh withsetActiveSynthEditLabel()so visible Pads and private lane Instruments use the correct identity doorway. - The protected behavior: refreshing a saved patch name for a lane-owned Instrument updates the Instrument label, keeps the selected visible Pad/Pad bank unchanged, and avoids Pad wording in the active Synth Editor base name.
- Verification: rebuilt
MIDI_CLOSEOUTpassed with expandedlaneOwnedDrawer=1; no-buildMIDI_RECORD_TIMING,MIDI_HEALTH, andMIDI_READINESSpassed.
2026-07-25 - Lane-Owned Patch/Status Names Avoid Pad Fallbacks
- Tightened
activeSynthEditBaseName()so owned private Instrument slots resolve through their Arrangement lane even when a caller did not explicitly pass the drawer source lane. - Unowned private Instrument slots now use Instrument-slot labels or an engine-based Instrument fallback instead of default
Pad ##labels. - Verification: rebuilt
MIDI_CLOSEOUTpassed with expandedlaneOwnedDrawer=1; no-buildMIDI_RECORD_TIMING,MIDI_HEALTH, andMIDI_READINESSpassed.
2026-07-25 - Lane-Owned Drawer Copy/Paste Labels Stay Instrument-Facing
- Fixed a subtle Synth Editor context drift: copying a lane-owned Instrument no longer changes the paste button back to the longer pad-era
PASTE INSTRUMENT SETTINGSwording. - The protected behavior: lane-owned Synth Editor drawers use
COPY INSTRUMENTandPASTE INSTRUMENTbefore and after copy, with tooltips that avoid Pad language. - Verification: rebuilt
MIDI_CLOSEOUTpassed withlaneOwnedDrawer=1; no-buildMIDI_RECORD_TIMING,MIDI_HEALTH, andMIDI_READINESSalso passed.
2026-07-25 - Lane Variant Workflow Now Has Closeout Coverage
- Added MIDI closeout coverage for the editor-level
VARIANTworkflow on non-drum Arrangement lanes. - The protected behavior: making a lane variant copies the source instrument patch into a new private Instrument slot, retargets that lane's Piano Roll notes and Chord Engine markers to the new slot, preserves the lane's mixer channel and existing clips, keeps visible Pad selection unchanged, and does not copy mixer-owned gain/sends into the variant.
- Verification: rebuilt
MIDI_CLOSEOUTpassed withlaneInstrumentVariantWorkflow=1; no-buildMIDI_RECORD_TIMING,MIDI_HEALTH, andMIDI_READINESSalso passed.
2026-07-25 - Fresh Lane Instrument Replacement Is Protected
- Added MIDI closeout coverage for the lane menu's
NEW INSTRUMENTworkflow on an existing non-drum Arrangement lane. - The protected behavior: the lane keeps its private Instrument slot, keeps its mixer channel, does not create an extra clip when real clips already exist, does not disturb the visible Pad selection, and updates to the requested engine without leaking Pad/private-slot wording into the lane label.
- Verification: rebuilt
MIDI_CLOSEOUTpassed withfreshLaneInstrumentReplacement=1.
2026-07-25 - Live Two-Controller Same-Note Guard Added
- Added focused MIDI timing coverage for the unpinned live-monitoring case: two physical direct controllers can hold the same note at the same time without one controller's note-off stealing ownership from the other.
- The test now proves source-aware note ownership protects both recording and live monitoring. Release tails may remain active briefly, but no held-note ownership survives after both sources release.
- Verification: rebuilt
MIDI_RECORD_TIMINGpassed, then no-buildMIDI_HEALTH,MIDI_READINESS, andMIDI_CLOSEOUTpassed. This narrows the remaining reported lag risk toward real hardware/device/driver/buffer validation rather than controller-source identity.
2026-07-25 - Recording Monitor Voice Contract Added
- Audited the direct MIDI live-monitoring path after the recent lag reports. The recording helper already starts the monitored voice while recording, so recorded note events must not also fall through into the normal live-monitor path.
- Added focused MIDI recording coverage proving an armed Arrangement lane recording creates exactly one live monitored voice and keeps the record note active for the same direct input source.
- Verification:
MIDI_RECORD_TIMING,MIDI_CLOSEOUT,MIDI_READINESS, andMIDI_HEALTHpassed. Remaining proof is physical: Shane's USB controller versus mioXL DIN path, because interface/driver latency can still live outside SpaceAge.
2026-07-25 - Visible Pad Rejection Is Now A Closeout Contract
- Added MIDI closeout coverage proving the editor cannot create a non-drum Instrument lane from a visible Drum Pad slot.
- The protected behavior: visible Pad slot requests are rejected, no lane is added, and no starter clip is created. Private Instrument slots remain the only valid creation path for non-drum Arrangement lanes during the bridge phase.
- Cleaned stale docs so current workflow language says
NEW INSTRUMENT,LOAD SOUNDFONT INTO INSTRUMENT,COPY INSTRUMENT SETTINGS FROM LANE, andNO EMPTY INSTRUMENTS AVAILABLE.
2026-07-25 - MIDI Protocol Gate Is Fast Again
- Split the protocol proof surface in
tools/run_tests.ps1intoMIDI_PROTOCOL,MIDI_PROTOCOL_PREIMPORT,MIDI_PROTOCOL_INSPECTION,MIDI_PROTOCOL_MULTICHANNEL, andMIDI_PROTOCOL_FILE_LEARN. - Moved the
MIDI_PROTOCOLearly return to the actual protocol-foundation boundary instead of letting it run thousands of unrelated all-up self-test lines before exiting. - Improved sub-gate reporting so a targeted protocol group no longer prints a scary
foundation failedline when an unrelated group is intentionally not being used as the pass/fail target. - Verification:
MIDI_PROTOCOLnow passes in about a minute, all four sub-gates passed when run appropriately, andMIDI_CLOSEOUTplusMIDI_RECORD_TIMINGremained green. - Test harness note: run the protocol sub-gates sequentially, not in parallel.
MIDI_PROTOCOL_MULTICHANNELcan false-fail when another protocol gate is running at the same time.
2026-07-25 - Instrument Lane Actions Reject Visible Pad Slots
- Tightened the editor boundary for non-drum Arrangement lanes: Add Instrument Lane and lane instrument reassignment now reject visible Drum Pad slots before any clamping/normalization can silently translate them into private Instrument slots.
- Processor-side lane insertion was already assigning stable nonzero Instrument IDs, normalizing MIDI/mixer routes, and keeping Drum lanes special; this pass closes the UI/action loophole that could preserve old Pad-proxy assumptions.
- Verification:
MIDI_CLOSEOUT,MIDI_RECORD_TIMING,MIDI_HEALTH, andMIDI_READINESSpassed.MIDI_PROTOCOLdid not fail assertions, but the expanded focused gate exceeded the current 180-second command timeout and should be split or given a longer CI timeout.
2026-07-25 - MIDI Import Hints Say Instrument, Not Lane Instrument
- Cleaned the MIDI split-import planner so melodic channel candidates now say
Choose an Instrument preset or SoundFont patchinstead ofChoose a lane Instrument preset.... - Cleaned the split-import destination tooltip so it says
Instrument destinationwithout teaching the bridge-phaselane-ownedstorage concept. - Cleaned the live MIDI ownership explanation so melodic lanes use
their Instrumentfor monitoring and recording. - Verification:
MIDI_PROTOCOLpassed, andMIDI_CLOSEOUTpassed after rerunning it solo. The first closeout attempt hit a Windows linker lock because a parallel test process had the test executable open, not because of a code failure.
2026-07-25 - Available Instrument Wording Tightened Again
- Replaced the remaining Add Instrument Lane failure text with
NO EMPTY INSTRUMENTS AVAILABLEso the UI no longer describes user-facing choices asLane Instrumentswhen simpleInstrumentlanguage is enough. - Rechecked the unused-instrument dropdown path: it now reports
AVAILABLE INSTRUMENT ##, and the closeout guard rejects the oldLANE-READYphrase. - Verification: passed
MIDI_CLOSEOUT,MIDI_HEALTH,MIDI_READINESS,MIDI_RECORD_TIMING, andMIDI_PROTOCOL.
2026-07-25 - Lane-Owned Synth Drawer Labels Stay Pad-Free
- Strengthened the Synth Editor lane-owned context path so the side readout shows the actual lane Instrument label instead of a vague
[Instrument]. - Tightened the MIDI closeout regression so opening a non-drum lane Instrument editor must preserve Pad selection, identify the lane Instrument, include mixer routing context, and avoid
Pad NNwording. - Verification: rebuilt and passed
MIDI_CLOSEOUT.
2026-07-25 - Shared Synth Editor Labels Use Target-Aware Helper
- Added
setActiveSynthEditLabel()so shared Synth Editor load paths can label visible Drum Pads and private lane Instruments correctly. - Routed Redshift patch loading, generic native patch loading, Quasar build/load, SoundFont loading, and MIDI Patch Mapper SoundFont assignment through that helper where the active target may be a lane Instrument.
- This reduces one-off
setPadLabel()calls in non-drum workflows while preserving Pad labels for visible Drum Pad targets.
2026-07-25 - Quasar Load Path Labels Lane Instruments As Instruments
- Renamed the editor Quasar loader from
loadQuasarIntoActivePad()toloadQuasarIntoActiveInstrument(). - When the active Synth Editor target is a private lane Instrument, Quasar package names now flow through
setInstrumentSlotLabel()instead ofsetPadLabel(). - Visible Drum Pad Quasar loading still uses the normal Pad label path, preserving MPC-style Pad behavior.
2026-07-25 - Editor Clipboard Test Uses Instrument Wording
- Updated the editor clipboard regression to look for
COPY INSTRUMENT SETTINGSandPASTE INSTRUMENT SETTINGS. - The visible Synth Editor controls had already moved away from Pad wording; the regression now matches the user-facing Instrument language.
- A scan of Source, Tests, and docs found no remaining
COPY PAD SETTINGS,PASTE SETTINGS, orPAD SETTINGSvisible-label strings.
2026-07-25 - Piano Roll Readiness Uses Instrument Source Wrapper
- Replaced the remaining Piano Roll readiness source check that asked
getSampleName(selectedPianoInstrumentSlot)directly. - The editor now asks
getInstrumentSlotSourceName()so the Piano Roll stays on the private lane-Instrument wrapper surface. - MIDI closeout coverage now proves visible Pad source names remain blocked through that wrapper while private lane-Instrument sample source names are readable.
2026-07-25 - Fresh Lane Instruments Use Guarded Sample Clearing
- Routed fresh lane-Instrument initialization through
clearSampleForInstrumentSlot()instead of the raw Pad-facingclearSample()call. - This keeps new non-drum lanes from accidentally mutating visible Drum Pads if a stale or visible slot index ever reaches the initializer.
- Quasar and SoundFont clearing were already guarded in this path; sample clearing now matches the same boundary.
2026-07-25 - Piano Roll Preset Paths Use InstrumentSlot Wrappers
- Replaced remaining Piano Roll preset calls that labeled or cleared private lane-Instrument slots through Pad-facing APIs.
- Added
clearSampleForInstrumentSlot()and routed the Physical Model preset branch through it. - SoundFont preset selection, default Notes Synth setup, Physical Model presets, and Redshift-style Piano Roll presets now set private labels through
setInstrumentSlotLabel(). - MIDI closeout now proves
clearSampleForInstrumentSlot()rejects visible Drum Pads while still clearing private lane-Instrument sample payloads.
2026-07-25 - Source Lane Instrument Menu Naming Cleanup
- Renamed the internal
InstrumentBayChoicepath behind theCOPY INSTRUMENT SETTINGS FROM LANEmenu toSourceLaneInstrumentChoice. - The visible menu already behaved correctly; this removes another code-level nudge toward treating lane Instruments as Bay slots.
- Cleaned the lane-owned identity regression wording so the test names describe lane Instrument records instead of Bay records where the context is a specific Arrangement lane.
- MIDI protocol verification remains green.
2026-07-25 - Lane Instrument Slot Availability Moved To Processor
- Added processor-owned
isArrangementInstrumentSlotAvailableForNewLane()so lane creation asks the model whether a private lane-instrument slot is legal, free, and empty. - Simplified editor lane creation to use that processor API instead of duplicating private-slot, label, source, SoundFont, Quasar, piano-note, chord, and drum-step checks in UI code.
- Aligned the payload rule so a bare
Internal enginesource label is treated as empty, matching the existing UI behavior for unused lane-instrument slots. - MIDI closeout now proves that an empty internal private slot is available, while labelled, already lane-owned, and visible Pad slots are unavailable.
2026-07-25 - MIDI Import Hints Stop Calling Instruments Bay Presets
- Changed melodic MIDI import lane hints from
Choose an Instrument Bay preset or SoundFont patchtoChoose an Instrument preset or SoundFont patch. - Added protocol-gate coverage proving the melodic import hint uses Instrument wording and does not regress to
Instrument Bay presetorlane Instrument. - This keeps MIDI import aligned with Option B: the import wizard can source sounds from the Instrument Bay, but the resulting Arrangement lane owns an Instrument.
2026-07-25 - Lane Instrument Choice Formatter Renamed
- Renamed the editor helper from
formatInstrumentBayLabel()toformatLaneInstrumentChoiceLabel(). - Piano Roll instrument choices and Synth Drawer fallback labels now call the lane-choice formatter.
- Behavior is intentionally unchanged; this removes a code-level invitation to reintroduce Instrument Bay or Pad-slot thinking into non-drum lane UI.
2026-07-25 - Available Instrument Wording No Longer Exposes The Pool
- Changed unowned private instrument display labels from storage-style/internal wording to
AVAILABLE INSTRUMENT ##. - Changed Add Instrument Lane exhaustion feedback from old pool-style wording to
NO EMPTY INSTRUMENTS AVAILABLE. - Added MIDI closeout coverage proving the available-instrument label does not leak Pad, Instrument Bay slot, or private-slot wording.
2026-07-25 - Lane SoundFont Labels Use Instrument-Slot Wrappers
- Added SoundFont preset name/count/index/set wrappers for private lane instrument slots.
- Arrangement lane labels now read SoundFont preset information through lane-instrument language instead of calling Pad-facing SoundFont APIs directly.
- Piano Roll preset selection, SoundFont editor preset browsing, SoundFont patch-name tracking, and MIDI Patch Mapper lane mapping now use slot-aware SoundFont helpers where a slot can be either a true Drum Pad or a private lane Instrument.
- MIDI closeout now proves visible Pad indices are rejected by those SoundFont instrument-slot wrappers, keeping Drum Pad and lane Instrument vocabulary separated.
2026-07-25 - Lane Instrument Copy Workflow Is Now Regression-Protected
- Added a closeout regression for the editor workflow behind
COPY INSTRUMENT SETTINGS FROM LANE. - The test proves copying another lane's instrument changes the destination lane's patch/settings while preserving the destination lane's own instrument slot and Pad selection.
- This protects the user-facing Instrument Bay principle: borrowing a sound from another lane means "copy this sound here," not "bind these two lanes to one hidden source."
2026-07-25 - Lane-Owned Backing Slots Are Now Collision-Protected
- Hardened lane instrument assignment so a non-drum lane cannot quietly point at another non-drum lane's private backing slot.
- If a lane is reassigned to an already-owned instrument slot, SpaceAge now copies that instrument into the lane's own private slot instead of creating hidden shared-patch behavior.
- Added restore-time repair after instrument payloads load, plus MIDI closeout coverage proving duplicated backing slots split into unique lane-owned slots while preserving the copied patch label.
2026-07-25 - Lane-Owned Instrument IDs Are Duplicate-Protected
- Hardened
setArrangementLane()so non-drum instrument lanes cannot share the same internal instrument identity after reassignment, insertion, copied lane state, or damaged project restore. - Added MIDI closeout regression coverage proving duplicate instrument IDs are repaired both when a lane is set and when duplicated IDs appear in serialized project state.
- This moves Option B closer to a real Instrument Bay model: backing slots may still exist internally, but lane-owned instruments now have protected identity separate from visible pads, lane order, and mixer channels.
2026-07-25 - Instrument Lane Creation Contract Is Now Protected
- Added editor regression coverage proving a fresh Instrument lane is inserted at the top of the Arrangement stack, creates a starter 16-step non-drum clip, and assigns that clip to a 16-step pattern.
- The same regression proves creating that lane does not change the selected Drum Pad or Pad bank.
- This protects the intended split: Instrument lanes are lane-owned musical tracks; Drum lanes remain the pad-bank/Drum Composer workflow.
2026-07-25 - Lane-Owned Synth Drawer No Longer Hijacks Pad Selection
- Added editor regression coverage proving that opening the Synth Editor from a non-drum Arrangement lane edits that lane's private instrument slot without changing the selected Drum Pad or Pad bank.
- The drawer must now identify the context as
INSTRUMENT, keep the active edit slot on the lane instrument, and include the lane name in the title. - This protects the Instrument Bay migration while the backend still has hidden pad-slot storage: non-drum lane editing should feel lane-owned, not pad-owned.
2026-07-25 - Explicit Record Targets Clamp Tiny Pre-Roll At Clip Start
- Fixed an Arrangement recording edge case where direct MIDI arriving just before the audio block could map slightly before the explicit target clip and be treated as invalid.
- Explicit target clips now tolerate a small left-edge pre-roll window and clamp it to the clip start, so the first beat of a take is not lost.
- The wrong-target guard remains intact: events far outside the selected/created clip are still dropped and reported instead of being written into the wrong musical place.
2026-07-25 - Direct MIDI Queue Lag Is Now Health-Protected
- Added focused timing coverage proving stale/late direct physical MIDI input is flagged by MIDI Health as direct-input queue lag.
- The same regression still protects the fast live path: once SpaceAge receives a direct MIDI note, live playback is dispatched immediately while recording keeps the timestamp evidence.
- This gives us a cleaner way to diagnose DIN-vs-USB feel: if Health shows queue lag, compare HOST ONLY vs DIRECT ONLY and USB vs DIN/interface paths before changing musical timing code.
2026-07-25 - Arrangement Recording Rejects Bad Explicit Targets
- When the app starts Arrangement MIDI recording through the normal REC path, the processor now treats the selected/created clip id as a hard target.
- If an incoming note or expression event cannot be mapped into that explicit target clip, SpaceAge does not write a misleading note into the pattern. It marks the take with dropped recording events so MIDI Health can warn the user that the take is not trustworthy.
- Added focused timing coverage proving valid 256-step Arrangement recording still lands correctly while out-of-clip explicit-target events produce zero bogus notes.
2026-07-25 - New Instrument Lanes Prefer Unused MIDI Channels
- New non-drum Arrangement lanes now choose the first unused MIDI channel instead of deriving the channel from
laneCount + 1. - This keeps fresh Instrument lanes closer to the hardware/export mental model: each lane starts with an intentional channel unless the user changes it.
- Drum lanes still default to channel 10, so the MIDI convention remains clear while melodic/harmonic lanes avoid accidental channel collisions when possible.
2026-07-25 - Private Instrument Slots Stop Saying Pad
- Tightened Synth Editor context so every private lane-instrument slot is treated as an Instrument in visible labels, even when temporarily unowned.
- Free/private instrument labels now say
MIXER CHANNEL ##instead ofMIXER ##, matching the lane badge language. - This removes another visible transitional leak from the hidden pad-backed implementation while Option B is still being completed under the hood.
2026-07-25 - Lane Mixer Route Refresh Uses The Same Publication Path
- Tightened
setArrangementLaneMixerChannel()so a lane mixer reassignment refreshes external MIDI input route demand, requests an input-device refresh, and publishes the playback snapshot like other lane route edits. - Added regression coverage proving a reassigned lane mixer channel survives an instrument-slot change and state restore through public lane state.
- This protects Option B lane ownership: instrument choice, MIDI route, and mixer destination stay separate but immediately visible to the engine.
2026-07-25 - Lane Routing Labels Use Full Channel Language
- Expanded the Arrangement lane instrument readout/menu copy from
MIXER ##toMIXER CHANNEL ##while keepingMIDI CHANNEL ##. - This makes the lane itself teach exactly where its audio and MIDI are going, without requiring the old top inspector.
- The change is customer-facing text only; routing behavior is unchanged.
2026-07-25 - Automation Doorway Wording Stays Singular
- Updated the remaining live setup action and current workflow spec language so the user-facing doorway is simply
Automation. - Ownership remains explicit inside the editor as
Shared PTN,Clip Local, orLane Local; compactAUTObadges remain acceptable only where space is physically constrained. - This keeps the feature findable without resurrecting older
AUTO LANES / Shared PTN Datawording in current guidance.
2026-07-25 - Cockpit Source Labels Expanded Beyond Launch Proof
- Expanded MIDI Health cockpit action summaries so hardware proof, timing, pitch bend, SysEx, Automation, MIDI patch, control mapping, input trust, and output trust sources get readable labels instead of camelCase source ids.
- Updated hardware-proof regression coverage to expect
Source: Hardware proof,Doorway: Hardware Passport, andSends MIDI: no. - This keeps the cockpit summary useful for testers while preserving structured
sourceand doorway ids in the serialized action surface.
2026-07-25 - Cockpit Action Summary Hides Raw Doorway IDs
- The MIDI Health cockpit action summary now says
Source,Doorway,Proof bucket, andSends MIDIinstead of leaking raw fields such assource=launchProofanddoorway=qaReceipt. - The structured payload still preserves the exact source and doorway ids for the app, tests, and future UI routing.
- Added regression coverage so launch-proof cockpit summaries remain readable while machine keys stay available through
toVar().
2026-07-25 - Automation QA Evidence Summary Humanized
- The Automation QA evidence summary now reads as prose labels (
Doorway,Owner,Workflow proof,Ownership proof) instead of debug-styledoorway=,owner=, andworkflow=fields. - Serialized receipt fields and validation keys remain stable; only the visible summary changed.
- Added regression coverage so the summary keeps human-readable proof language while preserving the structured validation contract underneath.
2026-07-25 - Automation Badge Wording In Reports
- Updated active Automation visibility prose so report-style text says
Arrangement lane Automation badgesinstead ofArrangement lane AUTO badges. - Compact
AUTOcan still exist where the UI is physically badge-sized, but explanatory Health/report language now teaches the full concept. - Added regression coverage so the prose does not drift back to the compact badge label.
2026-07-25 - Automation QA Missing Fields Use Human Labels
- QA receipt validation still stores stable internal keys such as
autoLanes.doorway, but visible next-action/readiness text now translates those into human labels likeAutomation doorway proofandall required Automation doorway coverage. - Added regression coverage proving the machine keys remain intact while the user-facing hint no longer leaks
autoLanes.*.
2026-07-25 - Public Wording Audit Row No Longer Asks For Saved Evidence
- Fixed the Remaining MIDI 1.0 perfection checklist rows so the
Public wording auditrow reportsneeds wording reviewinstead ofneeds saved evidence. - The row still flags the future-protocol boundary because true MPE and MIDI 2.0 must stay out of MIDI 1.0 launch claims, but it no longer pretends a QA receipt is the right artifact for release-copy review.
- Added regression coverage so this distinction survives future closeout-dashboard edits.
2026-07-25 - Automation Visibility Trust Boundary Wording
- Tightened the MIDI closeout trust-boundary language so it says Automation rows are discoverable/openable/editable, instead of the clumsy phrase "Automation are discoverable."
- This is small, but it protects the customer-facing MIDI Health proof path from sounding unfinished while still keeping the claim conservative: backend storage is not enough unless the musician can see, edit, undo, play, and export the data.
2026-07-24 - Split MIDI Import Defaults Prefer Available Lane Instruments
- The MIDI channel-split import review panel now caches a lane-instrument destination per importable source channel instead of recomputing the old
47 + channelbacking-slot shortcut in several places. - Defaults now prefer available Instrument destinations and avoid duplicate defaults across checked melodic channels, while still letting the user choose a different Instrument from the combo box.
- Drum split rows remain explicit long-form Drum lanes and do not become Instrument lanes.
2026-07-24 - Lane Instrument Copy Wording States Independence
- The Arrangement lane instrument menu now says
COPY INSTRUMENT SETTINGS FROM LANEinstead of implying a linked lane-instrument copy. - Copying from another lane now reports
COPIED INDEPENDENT LANE INSTRUMENTand the confirmation explains that the current lane keeps its own independent instrument slot while the source lane stays unchanged. - Backend behavior is unchanged here: this pass tightens user-facing semantics around the existing copy-into-lane-instance path so the Instrument Bay transition does not teach accidental shared-instrument thinking.
- The MIDI import drum-row tooltip now says drum imports become long-form drum notes, not lane instruments, removing another small transitional slot-language leak.
- A nearby allocation comment now says lane-owned instruments instead of lane-owned Instrument Bay slots, so future code follows the same mental model as the UI.
2026-07-24 - Automation Promoted In Arrangement Toolbar
- Moved the Arrangement
Automationbutton out of the lower clip-management row and into the main Arrangement editing toolbar beside cut/render controls. The lane Signal menu remains an alternate doorway, but the primary path is now visible without digging through lane menus. - Tightened the
Automationtooltip so it names the Arrangement toolbar entry point and the target order: selected clip, clip under playhead, first real clip in lane. This is UI/discoverability only; MIDI automation ownership and playback/export behavior are unchanged.
2026-07-24 - Add Lane Failure Wording Aligned With Lane Instruments
The Add Instrument Lane failure message now says the Lane Instrument Pool is full instead of exposing the temporary private-slot implementation. The Add Lane path still creates a 16-step starter clip on a fresh lane-owned instrument and keeps Drum lanes separate from Instrument lanes.
2026-07-24 - Instrument Bay User-Facing Wording Tightened
The remaining lane-owned instrument fallback text now describes hidden melodic/harmonic destinations as Lane Instruments instead of private slots or Instrument Bay slots. This keeps the transitional backing-store reality from leaking into the user-facing model: Drum Composer still owns the visible Pad grid, while non-drum lanes own instruments chosen from the Instrument Bay.
2026-07-24 - Arrangement First-Measure Clamp And Direct Source Cleanup
- Arrangement MIDI recording now clamps first-measure note starts instead of wrapping latency-compensated input to the end of the clip/pattern, protecting live takes from the old "first bar fell away" failure mode.
- Direct source generation cleanup now closes held notes at the current Arrangement boundary, and synthetic cleanup note-offs bypass human-performance latency compensation so stale-controller retirement records a real note length instead of a 0.05-step stub.
- Verified the focused MIDI_RECORD_TIMING gate: first-measure capture, long Arrangement clips, long drum capture, direct two-controller ownership, stale generation rejection, disconnect retirement, and direct slot reuse generation handoff all pass.
2026-07-22 - Late Direct MIDI Live Drain Plays Immediately
- The second, late direct-device input drain now treats note/controller/pitch/pressure performance messages as immediate for live monitoring, instead of adding intra-block wall-clock offset to the audible note start.
- Recording still preserves the original record sample position, so captured notes keep timestamp-aware musical placement while the player hears the response as soon as the block can render it.
- Added focused regression coverage: late direct live drain is immediate now proves sample-zero live dispatch with timestamped note capture still landing at the expected step position.
2026-07-22 - Playback Snapshot Note-Step Indexing
- Arrangement and isolated playback now publish a note-start index inside each PatternPlaybackSnapshot, so the audio thread can jump directly to notes that begin on the current source step instead of scanning every Piano Roll note in every active clip.
- This is aimed at the intermittent measure-start stutter: same musical output, less hot-path work when long clips, chord clips, and multiple lanes are active.
- Verified Release build plus MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_CLOSEOUT focused gates.
2026-07-22 - Direct Slot Reuse Closes Recorded Notes At Current Step
- Direct MIDI source preparation now passes the current recording step into slot-generation retirement instead of always retiring old direct sources at step 0.
- Added regression coverage for a controller slot handoff during recording: the old held note closes at the timestamped handoff step, including wrap-safe end-of-loop starts, while the new controller owns its new note and voice.
- Updated architecture notes so same-channel/same-note source ownership is no longer listed as missing; the remaining frontier is real-controller timing/proof and live-onset performance cleanup.
2026-07-22 - MIDI Cockpit Public Claim Flag Requires Hardware Proof
- Tightened the MIDI launch-validation cockpit card so publicClaimsAllowed now requires both saved PASS launch receipts and clear hardware-proof release checks.
- Launch progress can still show PASS/100%, but public-facing MIDI claims remain blocked when Hardware Passport/timing/real-device proof is pending.
- Regression coverage now rejects the old misleading publicClaimsAllowed=yes state for launch-proof-complete but hardware-proof-pending projects.
2026-07-22 - MIDI Ship-State Separates Launch Proof From Hardware Proof
- midiOneShipStateSummary() no longer calls the app shippable just because launch-proof receipts are complete. It now reports launch-proof gate PASS / hardware proof pending until Hardware Passport/timing/round-trip/restoration proof checks are also clear, keeping public MIDI wording conservative and honest.
2026-07-22 - MIDI Launch Proof Review Summary Wording
- Completed MIDI launch validation summaries now say MIDI launch validation proof review instead of Next MIDI launch validation receipt/template, so plain-text reports, exported health fields, and the Health button all agree that all-PASS proof is review-only.
2026-07-22 - MIDI Launch Proof Complete State Becomes Review-Only
- The midi.validation.complete pseudo-receipt is now converted as a saved/reviewable PASS state, so the backend action surface, cockpit card, and Health button agree on REVIEW LAUNCH PROOF instead of offering another completion form after all launch-proof buckets are already satisfied.
2026-07-22 - MIDI Health Launch Proof Review State
- MIDI Health now preserves launch-proof wording after all launch validation buckets have saved PASS receipts: the action button reads REVIEW LAUNCH PROOF, and the review dialog/report title use launch-proof language instead of generic QA wording.
2026-07-22 - MIDI Health Launch Proof Doorway Label
- Changed launch-validation cockpit actions so their doorway label is Launch Proof instead of generic QA Receipt while keeping generic closeout QA receipts labeled QA Receipt.
- Regression assertions now protect the distinction, reducing proof-gathering ambiguity in MIDI Health.
2026-07-22 - MIDI Health Launch Proof Button Width
- Widened the MIDI Health receipt action button so COMPLETE LAUNCH PROOF / SAVE LAUNCH PROOF can be read instead of being clipped by the older QA-sized button slot.
- This keeps the launch-proof cockpit action explicit without requiring the user to infer meaning from a shortened label.
2026-07-22 - MIDI Launch Proof Button Wording Alignment
- Aligned the visible MIDI Health receipt button and modal save button with the model-owned launch-proof wording: SAVE LAUNCH PROOF / COMPLETE LAUNCH PROOF.
- This removes a small but meaningful mismatch between the cockpit action surface and the launch-validation proof model.
2026-07-22 - MIDI Health Ship State Layout Closeout
- Reserved the extra visible MIDI Health row added by SHIP STATE so the Health cockpit layout no longer undercounts itself.
- Updated the fixed summary card height and row count together; this keeps the launch-proof/public-claim status visible without crowding lower rows.
2026-07-22 - Launch Proof Receipt Dialog Wording
- The MIDI Health receipt modal now follows launch-proof wording all the way through the flow: launch receipts open as
Save MIDI Launch Proof, save withSAVE LAUNCH PROOF, and warn with launch-proof-specific incomplete/not-saved titles. - Generic QA receipts still use the ordinary QA receipt wording. The workflow remains non-sending and append-only.
2026-07-22 - Launch Proof Button Wording In MIDI Health
- The MIDI Health receipt button now distinguishes launch-validation receipts from generic QA receipts.
- Pending launch receipts show
COMPLETE LAUNCH PROOForSAVE LAUNCH PROOF, while ordinary closeout receipts keepCOMPLETE QA/SAVE QA. - This keeps the launch-proof cockpit from slipping back into generic QA language after the model already knows the action is launch proof.
2026-07-22 - MIDI 1.0 Ship State Truth Line
- MIDI Health now has a dedicated
SHIP STATErow that says the backend is covered while public MIDI 1.0 completion remains blocked until launch-proof receipts are saved. MidiProjectHealthSummary::midiOneShipStateSummary()is serialized, included in plain-text Health reports/next steps, and regression-tested for both blocked and all-PASS launch-proof states.- No beta build was made for this pass; verification follows through Release self-test compile and focused MIDI Health gates.
2026-07-22 - MIDI Health And Hardware Panel Layout Guard
- MIDI Health now reserves one additional visible cockpit row so the new
LAUNCH NEEDSline does not push the lower cockpit/action area out of alignment. - The MIDI Hardware Passports page now uses shorter evidence/safety copy, smaller dense helper text, and matching paint/resized reservations for the sync role editor so labels and controls do not drift into each other.
- Verified Release self-test compile and
MIDI_HEALTHafter the layout pass.
2026-07-22 - MIDI Health Launch Proof Type Cue
- MIDI Health now shows a dedicated
LAUNCH NEEDSrow underLAUNCH NEXT, so testers can see whether the next MIDI launch-validation proof is cold, hardware/device, real-file/project, or live-performance evidence. - The cockpit card serializes this as
nextProofRequirementSummary, keeping the UI from parsing long proof artifacts or queue prose. - AudioSelfTest protects both the first cold AUTO LANES proof cue and the all-PASS complete cue.
2026-07-20 - MIDI Record Timing Gate Reconfirmed
- Ran the focused MIDI record timing gate after the launch-proof cockpit changes.
- Confirmed long Arrangement clip capture, repeated source-offset clips, four-measure note/expression recording, long drum recording, direct callback timestamp placement, selected direct-input suppression of host spill, pinned direct input with two open controllers, source-aware same-note ownership, sustain/channel-mode handling, direct disconnect retirement, slot generation handoff, and input/sync source policy matrices.
- Result: MIDI recording placement and direct-input timing are covered by automated regressions; remaining launch proof is hands-on hardware/DAW receipt evidence, not a newly discovered backend timing failure.
2026-07-20 - MIDI Health Cockpit Prioritizes Launch Proof
- MIDI Health cockpit severity now reports
LAUNCH PROOFwhen launch-validation receipts are incomplete and no urgent latency issue is present. - The cockpit
DO NEXTaction now points to the next launch-validation proof action before generic hardware proof work, with aLAUNCH PROOFbutton and a non-sendinglaunchProofaction surface. - Verified MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check after normalization.
2026-07-20 - Health Payload Public Claim Summary Is Gated
- Added a Health-level
safePublicMidiClaimSummary()so structured MIDI Health payloads and text reports use the same launch-verdict-gated wording as the status/helper pair. - The protocol-level evergreen claim boundary remains available, but live project health now reports launch-proof-pending or all-PASS launch evidence based on saved receipts.
- Verified MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check after normalization.
2026-07-20 - Public MIDI Claim Now Follows Launch Proof
- Gated the safe public MIDI claim label/helper on the saved launch-validation verdict. SpaceAge now keeps public MIDI wording in an internal launch-proof-pending state until every launch-validation proof bucket has a saved PASS receipt.
- Added MIDI Health regression coverage for the pending-proof state and the all-PASS launch-proof state, preserving the later hardware-proof-pending wording only after launch proof is actually complete.
- Verified MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - MIDI Launch Verdict PASS Coverage
- Added regression coverage proving the launch-validation verdict stays BLOCKED while proof buckets are incomplete and flips to PASS only after every launch-validation receipt has a saved PASS result.
- The test now walks the same next-receipt progression the UI uses, including AUTO LANES structured evidence, so the receipt ledger cannot claim public MIDI readiness from partial proof.
- Verified MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - MIDI Health Verdict Regression Coverage
- Added regression coverage proving the launch validation verdict is present in MIDI Health next steps and plain-text health reports.
- The tests now protect the visible Health cockpit data path indirectly through the same report fields the panel draws from.
- Verified MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - MIDI Health Launch Verdict Row
- Added the compact MIDI launch validation verdict as a visible MIDI Health cockpit row, directly between launch proof progress and the remaining launch queue.
- Fixed the cockpit launch progress counter to use the launch matrix row field receiptSatisfied instead of the nonexistent satisfied field.
- Verified MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - MIDI Launch Validation Verdict
- Added a compact MIDI launch validation verdict that says PASS or BLOCKED and names remaining proof counts for hardware, real-file, and live-performance validation.
- The verdict is now serialized through protocol coverage and health summaries, and appears in plain-text reports/next steps.
- Verified MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - Launch Proof Report Summaries
- Extended MIDI QA action queue summaries so launch proof context is visible in plain-text reports, not only serialized action objects.
- Queue summaries now include proofContext counts, proofNeeds counts, primaryProof, and primaryArtifact for the next required launch validation item.
- Verified MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - Launch Proof Actions Carry Proof Context
- MIDI launch validation action surfaces now expose proof bucket, proof artifact, and hardware / real-file / live-performance requirement flags directly as structured fields.
- The remaining launch proof queue now serializes those fields per action, so future cockpit UI can render proof chips without parsing helper prose.
- Verified MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - Launch Validation Actions Now Say Launch Proof
- MIDI launch-validation receipt action cards now use launch-specific labels:
COMPLETE LAUNCH PROOF,SAVE LAUNCH PROOF, andREVIEW LAUNCH PROOF. - Ordinary closeout QA receipts still use the generic QA receipt wording, keeping release QA and launch proof distinct in the customer-facing cockpit.
- Launch action helper text now explicitly says it is completing MIDI launch validation proof while preserving the safe
sendsMidi=falseaction contract. - Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - MIDI Health Shows Launch Remaining Queue
- The MIDI Health cockpit now renders a visible
LAUNCH QUEUErow between launch receipt progress and the next launch receipt action. - The row uses the same receipt-store-aware queue summary as the report/payload model, including remaining proof bucket count plus hardware, real-file, and live-performance proof counts.
- Regression coverage now protects the serialized remaining queue summary and proof-type counts from disappearing while the UI points at the same model.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Launch AUTO LANES Receipts Require Structured Proof
- The
midi.validation.auto_laneslaunch-validation receipt now uses the same structured proof rules as the closeout AUTO LANES receipt. - A PASS now requires doorway coverage, owner coverage, target evidence, edit/undo/playback/export proof, and ownership proof instead of allowing generic notes to certify the bucket.
- The MIDI Health receipt dialog shows the AUTO LANES proof fields for both
midi_auto_final_editorandauto_lanes, so the customer-facing QA path matches the backend contract. - Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - MIDI Health Shows AUTO LANES Doorway Count And First Action
- The MIDI Health panel now renders
AUTO DOOR COUNTandAUTO FIRSTrows beside the existing AUTO PATH / AUTO DOORS / AUTO STEP rows. - This makes the structured AUTO LANES doorway model visible in the cockpit: the user can see how many safe doors exist and which doorway action comes first without opening a copied report.
- The Health panel line budget was increased so the added rows do not crowd the existing MIDI closeout, live-diagnostic, hardware, and sync rows.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - AUTO LANES Doorways Get Cockpit Summaries
- MIDI expression summaries now expose
automationDoorwayRowsSummaryandautomationDoorwayFirstActionSummarybeside the structured doorway rows. - MIDI Health next steps, full Health report, expression report, and structured Health payload now surface the doorway summary/action line directly, so the future cockpit can show the AUTO LANES doors without parsing row arrays.
- Regression coverage protects the expression-level summaries, Health payload fields, and visible next-step/report copy.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - AUTO LANES Doorways Become Structured Rows
- MIDI expression summaries now expose
automationDoorwayRows, a structured list of AUTO LANES entry surfaces: Piano Roll, Arrangement, MIDI TASKS, Settings MIDI, MIDI Health, and MIDI PATCH Review. - Each doorway row carries label, surface id, route type, safety class, purpose, contextual/create-data flags, enabled state, and
sendsMidi=false, giving the future UI direct action-card data instead of prose parsing. - The AUTO LANES plain-text report now prints the doorway rows, and regression coverage protects the model.
- Fixed a
juce::vartemporary-array lifetime hazard while printing doorway rows. - Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Protocol Coverage Also Exposes Launch Action Queue
- MIDI Protocol Coverage now exposes the remaining launch-validation receipt rows, proof-type counts, queue summary, structured action queue, and action queue summary even before a project has saved QA receipts.
- The full protocol report now prints the remaining launch-validation queue and action queue before the single next receipt, so Protocol Coverage and MIDI Health no longer disagree about the proof surface model.
- Regression coverage now protects the default no-receipt queue/action fields and report text.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Launch Validation Remaining Queue Gets Action Cards
- MIDI Health now exposes a structured action queue for every remaining launch-validation proof bucket.
- Each remaining proof bucket can become a safe
COMPLETE QA RECEIPTaction card, aligned with the existing QA receipt action model. - COPY STEPS and the full Health report now include the action queue summary so the future MIDI cockpit can show a clear do-this-next / these-remain surface.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Launch Validation Queue Shows Proof-Type Counts
- MIDI Health now reports how many remaining launch-validation proof buckets require hardware, real files, and live-performance checks.
- The proof-type counts are exposed both in the queue summary sentence and as structured Health payload fields for the future MIDI cockpit UI.
- Regression coverage now protects the saved-PASS queue advancement plus the remaining hardware/real-file/live-performance count fields.
- Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - Launch Validation Remaining Queue Added
- MIDI Health now exposes a receipt-aware remaining launch-validation queue in COPY STEPS, the full Health report, and the structured payload.
- The queue removes already-satisfied saved PASS buckets and previews the next remaining proof buckets in order, so the app can explain what is left instead of only naming one next item.
- Regression coverage now protects the remaining queue rows, summary, saved-PASS advancement, and report visibility.
- Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - Full MIDI Health Report Shows Launch Validation Progress
- The full MIDI Health report now prints
MIDI launch validation receipts: x/y saved PASSnear the safe public-claim status. - The full report also uses the receipt-aware next launch validation receipt summary, so saved project QA evidence changes what the report tells the user to do next.
- Regression coverage now protects the progress line in the full Health report as well as COPY STEPS and the structured payload.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Launch Validation Progress Added To Copy Steps
- MIDI Health
COPY STEPSnow includesMIDI launch validation receipts: x/y saved PASSbefore the next validation receipt summary. - This makes the launch-proof finish line visible in the user/support report instead of requiring a JSON consumer to discover progress.
- Added MIDI Health regression coverage for both the serialized progress field and copied next-steps line.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Launch Validation Receipts Advance From Saved Evidence
- MIDI Health launch-validation rows now read
project.midi.qaReceiptsbefore deciding which MIDI launch bucket needs proof next. - A saved PASS receipt marks that validation row as
saved PASS, exposes the latest saved result/fingerprint, and advances the next receipt/action surface to the next unsatisfied bucket instead of looping on AUTO LANES. - MIDI Health now exposes
midiLaunchValidationReceiptSatisfiedCount,midiLaunchValidationReceiptTotalCount, andmidiLaunchValidationReceiptProgressSummaryfor a cockpit-friendly launch-validation progress readout. - Added regression coverage proving a saved AUTO LANES PASS advances the next launch validation receipt to
midi.validation.controller_latencyand keeps the action surface a non-MIDI, non-mutating QA receipt action. - Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Remaining Checklist Surfaced In MIDI Health
- MIDI Health
COPY STEPSnow prints the model-owned Remaining MIDI 1.0 perfection checklist. - MIDI Health payload now exposes
remainingMidiOnePerfectionChecklistLinesandremainingMidiOnePerfectionChecklistRowsfrom MIDI Protocol Coverage. - Regression coverage now protects the checklist in direct Next Steps text, serialized
plainTextNextSteps, and the Health payload arrays. - Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Structured Remaining MIDI 1.0 Perfection Checklist
- Added
remainingMidiOnePerfectionChecklistLines()andremainingMidiOnePerfectionChecklistRows()to MIDI Protocol Coverage. - Serialized the checklist into the MIDI coverage payload and printed it in the full protocol report.
- The checklist fixes the current MIDI 1.0 evidence buckets: AUTO LANES hands-on QA, real-controller latency, external-synth bend/pressure response, RPN/NRPN setup, guarded SysEx batch/restore proof, DAW/GM/XG file round trips, live timing, complete project reopen/export, and public wording audit.
- Added regression coverage for the checklist line array, row array, and report text.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Real File Round-Trip Acceptance Checklist
- Added
realFileRoundTripAcceptanceChecklistSummary()to MIDI Protocol Coverage. - The checklist requires PASS evidence to name the source DAW/file generator, exported path/package, import target, preserved tempo/meter/key, notes, lengths, velocities, controllers, pitch bend, pressure, program/bank/setup review rows, SysEx quarantine/Vault receipt when present, re-export or re-import comparison result, and saved PASS/FAIL/BLOCKED receipt before public DAW/file interchange claims.
- Serialized the checklist into the full protocol coverage payload and the compact MIDI status payload.
- Added regression coverage for the checklist and payload.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Real Hardware Acceptance Checklist
- Added
realHardwareValidationAcceptanceChecklistSummary()to MIDI Protocol Coverage. - The checklist now requires PASS evidence to name the device and connection path, confirm intended input/output ports, record audio-buffer and measured/observed latency context, prove notes/controllers/bend/pressure on the intended lane/channel, capture SysEx or setup response/manual verification, include DAW/file round-trip evidence when claiming interchange, and save a PASS/FAIL/BLOCKED receipt with a stable audit fingerprint.
- Serialized the checklist into the protocol coverage payload and copied report.
- Added regression coverage for the checklist and payload.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Live Recording Capture QA Checklist
- Added
liveRecordingCaptureQaChecklistSummary()to MIDI Protocol Coverage. - The checklist now requires testing Arrangement-lane arming, recording in context, note start timing, note length, velocity, pitch bend, pressure, sustain, mod wheel, ordinary CC capture, clip-selection non-ownership, setup-message exclusion, undo, and project reopen persistence.
- Serialized the checklist into the protocol coverage payload and copied report.
- Added regression coverage for the checklist text and payload.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Future Protocol QA Ritual Contract
- Added a specific Future Protocol evidence prompt that requires visible roadmap wording, no true MPE/MIDI 2.0 claim, MPE-like expression described as MIDI 1.0 preservation, and the exact future evidence needed before those claims become product language.
- Added a closeout self-test assertion requiring the Future Protocol row to remain a COLD, status-only roadmap action through
Show Roadmap Note. - Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - MIDI Learn QA Ritual Contract
- Added a specific MIDI Learn evidence prompt for learned source, target parameter, channel/device scope, pickup rule, range, curve, conflict choice, delete/undo result, and whether the mapped control felt correct in context.
- Added a closeout self-test assertion requiring Open MIDI Maps, high-resolution controller-pair wording, WARM safety, and direct route proof.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Hardware Setup QA Ritual Contracts
- Added focused self-test assertions for Hardware Setup Wizard and Hardware Setup Safety closeout categories.
- The Hardware Setup Wizard contract now requires Open MIDI Setup, Hardware Passport creation, HOT safety, direct route proof, and external trust wording tied to test phrase/manual verification.
- The Hardware Setup Safety contract now requires Open MIDI PATCH, protected channel-mode/reset wording, HOT safety, direct route proof, copy/review-only protection, and separate-confirmed-policy wording.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Import/Export QA Ritual Contracts
- Added focused self-test assertions for the Import Wizard and Export Workflow closeout categories.
- Import now has a regression contract for source file, import target, preserved tempo/meter/key/program/controller/SysEx data, undo result, review-only timeline-map limits, cold safety, and menu-path route proof.
- Export now has a regression contract for export scope, output files, progress/receipt/checksum evidence, re-import confidence, explicit no-hardware-send wording, cold safety, and ARRANGER > RENDER route proof.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - SysEx Librarian QA Ritual Contract
- Added a focused self-test assertion that the SysEx Librarian closeout category keeps the hardware-trust evidence path visible.
- The test now requires capture/restore direction, device identity, byte count/checksum, Vault receipt, device-response wording, Open SysEx Vault, HOT safety, and direct-panel route proof.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-20 - Hardware Bend Range QA Ritual Contract
- Added a focused self-test assertion that the Hardware Bend Range closeout category keeps the critical user-facing verification path intact.
- The test now requires evidence wording for declared bend range, queued test phrase, audible bend result, Hardware Passport, TEST BEND, HOT safety, and direct route proof.
- Verified with
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andgit diff --check.
2026-07-19 - MIDI Health Cockpit Shows First Live Issue
- The MIDI Health cockpit now shows a visible
LIVE FIRSTrow sourced fromlivePerformanceTroubleshootingFirstAttentionSummary. - This brings the on-screen MIDI Health panel into alignment with copied MIDI Next Steps and the full MIDI Health report: the first actionable live MIDI issue is visible without scanning the full row list.
- UI/report architecture only; no MIDI routing, scheduling, recording, SysEx, hardware output, synth behavior, or project mutation changed.
- Verified:
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild.
2026-07-19 - First Live MIDI Issue Summary Added
- MIDI Health now exposes
livePerformanceTroubleshootingFirstAttentionSummary, generated from the first structured live diagnostic row marked as needing attention. - The summary appears in both copied MIDI Next Steps and the full MIDI Health report, giving users/support the first actionable row without scanning the full diagnostic list.
- The helper is serialized into the health payload and covered in focused MIDI Health regression tests.
- Removed duplicate live cockpit/first-issue lines from the full report so the report now has one headline near live feel and detailed row evidence later.
- Diagnostic/report architecture only; no MIDI routing, scheduling, recording, SysEx, hardware output, synth behavior, or project mutation changed.
- Verified:
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild.
2026-07-19 - MIDI Next Steps Includes Live Cockpit Line
- The copied
SpaceAge MIDI Next Stepsreport now includeslivePerformanceTroubleshootingCockpitLinenear the top, immediately after the live-feel verdict/action. - This makes the short support/user checklist carry the same live MIDI status, check count, attention count, and first action as the full MIDI Health report.
- Regression coverage now protects the line in both direct Next Steps text and the serialized
plainTextNextStepspayload. - Diagnostic/report architecture only; no MIDI routing, scheduling, recording, SysEx, hardware output, synth behavior, or project mutation changed.
- Verified:
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild.
2026-07-19 - Live MIDI Cockpit Line Added
- MIDI Health now exposes
livePerformanceTroubleshootingCockpitLine, a single copy-friendly live-performance line combining status, check count, attention count, and next action. - The full MIDI Health report now includes this one-line summary before the detailed diagnostic rows, giving support/debug workflows a fast headline before the evidence list.
- The cockpit line is serialized into the health payload and covered in focused MIDI Health tests.
- Diagnostic/report architecture only; no MIDI routing, scheduling, recording, SysEx, hardware output, synth behavior, or project mutation changed.
- Verified:
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild.
2026-07-19 - Live MIDI Status Detail Added
- MIDI Health now exposes
livePerformanceTroubleshootingStatusDetail, a short cockpit-ready explanation paired with the compactlivePerformanceTroubleshootingStatusLabel. - The visible MIDI Health cockpit now shows
LIVE WHYafterLIVE STATUS, so an attention state immediately says what to address first instead of merely flagging a problem. - The detail is serialized into the health payload and covered in focused MIDI Health tests.
- Diagnostic/report/UI architecture only; no MIDI routing, scheduling, recording, SysEx, hardware output, synth behavior, or project mutation changed.
- Verified:
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild.
2026-07-19 - Live MIDI Diagnostic Status Label Added
- MIDI Health now exposes
livePerformanceTroubleshootingStatusLabel, derived from the structured live diagnostic row count and attention count. - The MIDI Health cockpit now shows a
LIVE STATUSrow (OK,ATTENTION, orUNKNOWN) before the detailedLIVE ROWSsummary, so the UI has a clear severity signal without inferring from scattered booleans. - The status label is serialized into the health payload and covered in focused MIDI Health tests.
- Diagnostic/report/UI architecture only; no MIDI routing, scheduling, recording, SysEx, hardware output, synth behavior, or project mutation changed.
- Verified:
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild.
2026-07-19 - Live MIDI Diagnostic Counts Added
- MIDI Health now exposes
livePerformanceTroubleshootingRowCountandlivePerformanceTroubleshootingAttentionCountbeside the row array, row summary, and copied row-detail report. - Future UI/support bundles can read check counts directly instead of parsing prose.
- Fixed the helper implementation to keep the source
juce::varalive before reading its array pointer; this avoids invalid temporary-array lifetime behavior. - Diagnostic/report architecture only; no MIDI routing, scheduling, recording, SysEx, hardware output, synth behavior, or project mutation changed.
- Verified:
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild.
2026-07-19 09:00 - LIVE DIAG row-detail report added
- Added a full Live MIDI Diagnostic Rows section to the MIDI Health plain-text report and structured health payload.
- Regression coverage now checks row-detail report text, attention flags, and copied-report parity.
- Verified: MIDI_HEALTH, MIDI_READINESS -NoBuild, and MIDI_CLOSEOUT -NoBuild.
2026-07-19 08:48 - LIVE ROWS visible in MIDI Health
- Added the compact LIVE ROWS cockpit line so live MIDI lag diagnostics are visible without copying a report.
- Regression coverage now proves the same row-summary headline appears in structured health data and copied plain-text report output.
- Verified: MIDI_HEALTH, MIDI_READINESS -NoBuild, and MIDI_CLOSEOUT -NoBuild.
2026-07-19 08:36 - LIVE DIAG row summary added
- Added a compact row summary for LIVE DIAG so future MIDI Health UI can show checks needing attention without parsing the row list or long prose report.
- Regression coverage now asserts the compact summary, row array, serialized property, and high-buffer first-focus wording.
- Verified: MIDI_HEALTH, MIDI_READINESS -NoBuild, and MIDI_CLOSEOUT -NoBuild.
2026-07-19 08:22 - Live MIDI troubleshooting rows added
- Added structured LIVE DIAG rows so future UI/support bundles can show buffer/input/output/sample-position/SoundFont status as separate checks instead of one dense sentence.
- Regression coverage now asserts row order, labels, attention state, and serialization through the health payload.
- Verified: MIDI_HEALTH, MIDI_READINESS -NoBuild, and MIDI_CLOSEOUT -NoBuild.
2026-07-19 08:09 - Live MIDI troubleshooting summary added
- Added a compact LIVE DIAG health line and serialized report field that summarizes buffer cost, direct-input queue age, hardware-output queue age, SoundFont prepared-pool state, and sample-position proof.
- This is designed for real-world controller testing, especially comparing USB versus DIN/interface paths such as mioXL-connected hardware.
2026-07-19 08:00 - COPY QA safety summary unified
- Added the same model-owned safety summary pattern to COPY QA that COPY CLOSEOUT now uses.
- Both cold copy actions now expose explicit no-MIDI, no-routing, no-project-mutation, no-external-hardware safety summaries through their action surfaces and serialized health/report data.
2026-07-19 07:52 - COPY CLOSEOUT safety summary unified
- Added a single model-owned COPY CLOSEOUT safety summary and mirrored it through the action surface, protocol report var, health summary var, clipboard text, and tests.
- This keeps the customer-facing closeout button honest: copy-only, sends no MIDI, changes no routing, changes no project data, and changes no external hardware.
2026-07-19 - Visible Closeout UI Uses Row Summary
- MIDI Health now shows a ROWS line sourced from currentFinishLineCloseoutChecklistRowSummary, so the visible panel reflects the structured closeout row model.
- The MIDI Protocol Coverage closeout card now prefixes the multiline closeout list with the same row summary, keeping the visible checklist aligned with the structured report data.
2026-07-19 - Closeout Checklist Row Summary Added
- Added currentFinishLineCloseoutChecklistRowSummary so UI and report surfaces can show closeout row count, direct/safe-door availability, safety-class counts, and first focus without parsing the multiline checklist.
- Pinned the summary through Protocol Coverage and MIDI Health assertions alongside the structured closeout row array.
2026-07-19 - Closeout Checklist Rows Are Structured
- Added machine-readable currentFinishLineCloseoutChecklistRows data so the plain numbered MIDI 1.0 closeout checklist is now available to UI/reporting without parsing prose.
- Mirrored the rows into MIDI Health and pinned protocol + health assertions around category name, route proof status, safety class, and QA-state summary text.
2026-07-19 - Owner Surface Checklist Rows Are Structured
- Added currentFinishLineSurfaceChecklistRows so the closeout-by-owner-surface report can render as UI cards instead of grouped prose only.
- Each row carries surfaceName, categoryName, actionLabel, actionSurfaceId, routeKind, routeProofStatus, safetyClass, qaSessionId, directOpenable, safeDoorOpenable, releaseRole, recommendedFocus, and summaryLine.
- Mirrored the rows into Protocol Coverage and MIDI Health payloads and pinned direct + serialized tests for the AUTO LANES owner surface path.
2026-07-19 - Release Wording Checklist Rows Are Structured
- Added releaseWordingAuditChecklistRows so public MIDI wording guardrails can render as UI cards instead of parsed checklist prose.
- Each row carries index, topic, severity, requirement, text, customerFacing, and needsReceiptBeforeBroadClaim. The Completion language row is marked release-blocking.
- Mirrored the structured rows into Protocol Coverage and MIDI Health payloads and pinned direct + serialized tests.
2026-07-19 - QA Run Order Rows Are Structured
- Added currentFinishLineQaRunOrderRows so the MIDI cockpit can render QA run-order cards without parsing the plain-text run-order summary.
- Each row now carries index, categoryName, actionLabel, actionSurfaceId, routeKind, routeProofStatus, safetyClass, qaSessionId, firstTest, runCue, proofCue, directOpenable, safeDoorOpenable, and summaryLine.
- Mirrored the structured rows into Protocol Coverage and MIDI Health serialized payloads and pinned direct + health tests for the AUTO LANES route/safety/run-cue contract.
2026-07-19 - Closeout Action Card Safety Contract
- Added explicit navigation-only safety fields to nextCloseoutActionCard: surfaceActionKind=navigation, sendsMidi=no, mutatesProjectState=no, changesRouting=no, changesExternalHardware=no, and requiresConfirmation=no.
- Extended the closeout action summary with sendsMidi=no and projectMutation=no so UI cards do not need to infer safety from route/safety wording alone.
- Pinned the contract in direct Protocol Coverage tests and the mirrored MIDI Health serialized payload tests.
2026-07-19 - COPY QA / COPY CLOSEOUT Action Surfaces
- Added structured clipboard action surfaces for COPY QA and COPY CLOSEOUT so the finish-line UI can render copy-only actions without inferring safety from prose.
- Each surface declares label, button label, action id, target clipboard text field, sendsMidi=no, mutatesProjectState=no, routing/external-hardware safety, and cold safety class.
- Mirrored the surfaces into both MIDI Protocol Coverage and MIDI Health serialized payloads and pinned direct + serialized tests.
2026-07-19 - Cockpit Action Summary Contract
- Added cockpitNextActionSurfaceSummary so MIDI Health reports can show the structured cockpit action source/button/safety state without re-parsing labels.
- The cockpit status summary now includes the structured action summary, keeping the visible next action tied to the serialized health payload.
- Added direct and serialized tests for the current Hardware Passport path: source=hardwareProof, uttonLabel=PASSPORT, and sendsMidi=no.
2026-07-19 - Cockpit Next Action Surface Exposed
- Added a structured cockpitNextActionSurface to MIDI Health so the cockpit UI can render the next-action label/button/source without parsing prose.
- Mirrored the surface into the serialized health ar payload and pinned direct + serialized tests for the current Hardware Passport priority path.
- Verified the QA receipt action remains a structured non-MIDI project-state action when it becomes the cockpit priority.
2026-07-19 - MIDI Health QA Action Text Canonicalized
- Updated MIDI Health cockpit and next-steps reporting to use extCloseoutQaReceiptActionSurfaceSummary() instead of hand-built utton + canSave + hint wording.
- Pinned the corrected enabled=yes and canComplete=yes receipt action wording in direct and payload tests so the Health UI cannot drift back to save-only semantics.
- Verified: MIDI_HEALTH, MIDI_READINESS -NoBuild, and MIDI_CLOSEOUT -NoBuild all passed.
2026-07-19 - Next QA Receipt Action Summary Corrected
- Added extCloseoutQaReceiptActionSurfaceSummary() as the canonical report/clipboard wording for the next QA receipt action.
- Fixed the misleading enabled=no wording for incomplete receipts by deriving enabled state from the active action surface (canComplete || canSave || canReview) instead of save-readiness only.
- Verified: MIDI_HEALTH, MIDI_READINESS -NoBuild, and MIDI_CLOSEOUT -NoBuild all passed.
2026-07-19 - Next QA Receipt Action Surface Exposed
- Added extCloseoutQaReceiptActionSurface() so the next MIDI closeout QA receipt action is available as a unified structured object instead of scattered scalar fields only.
- Mirrored the action surface into Protocol Coverage and MIDI Health payloads with button label, action id, completion state, mutation flag, and MIDI-send safety flag.
- Verified: MIDI_HEALTH, MIDI_READINESS -NoBuild, and MIDI_CLOSEOUT -NoBuild all passed.
2026-07-19 - QA Receipt Action Surface Exposed
- Added currentFinishLineQaReceiptActionSurface() so the current MIDI closeout receipt action can be rendered from structured fields instead of parsed from currentFinishLineQaReceiptActionSurfaceSummary.
- Mirrored the action surface object into Protocol Coverage and MIDI Health payloads with button label, action id, project mutation flag, and MIDI-send safety flag.
- Verified: MIDI_HEALTH, MIDI_READINESS -NoBuild, and MIDI_CLOSEOUT -NoBuild all passed.
2026-07-19 - QA Run Order Rows Exposed
- Added currentFinishLineQaRunOrderLines() so the MIDI closeout cockpit can render the active finish-line QA run order as rows instead of a semicolon-delimited sentence.
- Mirrored the rows into Protocol Coverage and MIDI Health payloads while preserving currentFinishLineQaRunOrderSummary for plain-text reports.
- Verified: MIDI_HEALTH, MIDI_READINESS -NoBuild, and MIDI_CLOSEOUT -NoBuild all passed.
2026-07-19 - Next Closeout QA Checklist Rows Exposed
- Added
nextCloseoutQaChecklistLines()so the next active MIDI closeout blocker can expose its QA checklist as rows. - Mirrored the checklist rows into Protocol Coverage and MIDI Health payloads next to
nextCloseoutQaSummary. - This lets the future MIDI cockpit show the exact AUTO LANES proof steps without scraping report text. Verified with rebuilt
MIDI_HEALTH, thenMIDI_READINESS -NoBuildandMIDI_CLOSEOUT -NoBuild; all passed.
2026-07-19 - Next Closeout Action Card Structured
- Added a structured
nextCloseoutActionCardpayload beside the existing next-action summary sentence. - The card carries category, action surface, button label, route, proof status, safety, QA session id, recommended focus, openability flags, first hardware evidence cue, and summary.
- This keeps the MIDI cockpit/UI from parsing prose when it needs to show the next actionable closeout step. Verified with rebuilt
MIDI_HEALTH, thenMIDI_READINESS -NoBuildandMIDI_CLOSEOUT -NoBuild; all passed.
2026-07-19 - Release Wording Checklist Rows Exposed
- Added
releaseWordingAuditChecklistLines()so the release wording audit can be consumed as UI rows instead of only as a newline-delimited string. - Mirrored the checklist rows into Protocol Coverage and MIDI Health payloads, keeping the single-string report output intact.
- Verified with rebuilt
MIDI_HEALTH, thenMIDI_READINESS -NoBuildandMIDI_CLOSEOUT -NoBuild; all passed.
2026-07-19 - Release Wording Fields Mirrored Into MIDI Health Payload
- Mirrored
safePublicMidiClaimSummaryandreleaseWordingAuditChecklistintoMidiProjectHealthSummary::toVar()so MIDI Health has a single UI-friendly front door for release wording boundaries. - Pinned the Health payload fields in focused MIDI Health tests, including the safe public claim summary and completion-language checklist item.
- Verified with rebuilt
MIDI_HEALTH, thenMIDI_READINESS -NoBuildandMIDI_CLOSEOUT -NoBuild; all passed.
2026-07-19 - Full MIDI Health Report Carries Public Claim Boundary
- Added the same safe-public-claim status/helper line to
MidiProjectHealthSummary::toPlainTextReport()that already exists in the next-steps report. - Pinned the full-report wording in focused MIDI Health tests so exported diagnostics cannot omit the hardware-proof-pending boundary.
- Verified with rebuilt
MIDI_HEALTH, thenMIDI_READINESS -NoBuildandMIDI_CLOSEOUT -NoBuild; all passed.
2026-07-19 - Public Claim Boundary Added To MIDI Health Report
- Added the public MIDI claim status/helper line to
MidiProjectHealthSummary::toPlainTextNextSteps()so text reports carry the same proof boundary as the Health payload. - Pinned the report wording in the focused MIDI Health tests, including the hardware-proof-pending label and real-device/file/host receipt language.
- Verified with rebuilt
MIDI_HEALTH, thenMIDI_READINESS -NoBuildandMIDI_CLOSEOUT -NoBuild; all passed.
2026-07-18 - Safe Public MIDI Claim Helper Added
- Added
safePublicMidiClaimHelperText()to MIDI Health so the future cockpit can show both a compact claim badge and the plain-English reason behind it. - Mirrored the helper into the Health payload and pinned the hardware-proof-pending wording in
MIDI_HEALTHtests. - Verified with rebuilt
MIDI_HEALTH, thenMIDI_READINESS -NoBuildandMIDI_CLOSEOUT -NoBuild; all passed.
2026-07-18 - Safe Public MIDI Claim Status Is Health-Visible
- Added
safePublicMidiClaimStatusLabel()to MIDI Health so the app can expose a compact public-claim boundary beside the richer release wording. - Mirrored the label into the Health payload and pinned it in tests, keeping "backend works" separate from public "MIDI complete" claims.
- This currently reports software-ready snapshots with missing real-device receipts as hardware-proof-pending, and still preserves an internal/beta-only label for blocked closeout states.
- Verified with rebuilt
MIDI_HEALTH, thenMIDI_READINESS -NoBuildandMIDI_CLOSEOUT -NoBuild; all passed.
2026-07-18 - Hardware Proof Release Readiness Is Explicit
- Added
hardwareProofChecklistPercent()andhardwareProofReleaseReady()to MIDI Health so the UI can distinguish coded/ready proof steps from actual release-proof evidence. - Extended the hardware proof checklist summary with a
% release-proofvalue and mirrored the percent/ready boolean into the Health payload. - Pinned the fields in the MIDI Health tests, including the important honesty rule that ready-to-collect evidence is not release-ready.
- Verified with rebuilt
MIDI_HEALTH, thenMIDI_READINESS -NoBuildandMIDI_CLOSEOUT -NoBuild; all passed.
2026-07-18 - MIDI Next Action Card Is UI Ready
- Added
nextCloseoutActionCardSummary()to Protocol Coverage so the MIDI cockpit can show one compact next-action card without reconstructing category/action/route/safety/QA fields itself. - Mirrored the card into MIDI Health alongside the existing next-closeout structured fields.
- Pinned the card in Protocol Coverage and MIDI Health tests, including next category, action surface, safety, and QA id.
- Verified with rebuilt
MIDI_READINESS, thenMIDI_HEALTH -NoBuildandMIDI_CLOSEOUT -NoBuild; all passed.
2026-07-18 - Remaining MIDI Focus Names Next Priority Route Safety And QA
- Tightened
remainingMidiOnePerfectionSummary()so it reports active closeout category count plus the next priority category, route proof, safety class, and QA session id. - Pinned the improved summary through Protocol Coverage and MIDI Health structured payload tests.
- Verified with rebuilt
MIDI_READINESS, thenMIDI_HEALTH -NoBuildandMIDI_CLOSEOUT -NoBuild; all passed.
2026-07-18 - MIDI Health Mirrors Release-Gate Counts For UI Badges
- Added structured MIDI Health payload fields for current finish-line family count, blocker count, readiness percent, deferred future families, real-hardware pending rows, and backend-ready/UI-pending rows.
- Pinned those Health fields against Protocol Coverage so the customer-facing cockpit can render release-gate badges without drilling into nested protocol payloads or parsing prose.
- Verified with rebuilt
MIDI_HEALTH, thenMIDI_READINESS -NoBuildandMIDI_CLOSEOUT -NoBuild; all passed.
2026-07-18 - MIDI QA Receipt Persistence Counts Are Structured Payload Fields
- Added structured protocol-coverage and MIDI Health payload fields for QA receipt persistence counts: templates, valid saved, invalid saved, unsaved templates, save-ready forms, and missing-field rows.
- Refactored the closeout summary to use the same count helper as the structured fields, preventing future string/report drift.
- Added readiness regressions proving both Protocol Coverage and MIDI Health expose the same count values without requiring UI code to parse prose.
- Verified with rebuilt
MIDI_READINESS, thenMIDI_CLOSEOUT -NoBuildandMIDI_HEALTH -NoBuild; all passed.
2026-07-18 - MIDI Receipt Count Naming Cleanup Prefers Explicit Proof Counts
- Renamed the finish-line closeout local receipt counter to
validSavedReceiptCountso the summary code matches the evidence rule it reports. - Updated receipt-store persistence tests to prefer
validSavedReceiptCount()andinvalidSavedReceiptCount(); the oldsavedReceiptCountpayload key remains tested only as a compatibility alias. - Verified with rebuilt
MIDI_READINESS, thenMIDI_CLOSEOUT -NoBuildandMIDI_HEALTH -NoBuild; all passed.
2026-07-18 - MIDI QA Receipt Store Publishes Valid And Invalid Saved Counts
- Added explicit
validSavedReceiptCountandinvalidSavedReceiptCountstore API/payload fields while keepingsavedReceiptCountas the valid-saved compatibility alias. - Store summaries now report invalid saved rows separately, so UI/reporting code can show imported or corrupted history without overstating proof.
- Added regressions proving malformed saved blobs count as visible history only, not valid saved proof.
- Verified with rebuilt
MIDI_READINESS, thenMIDI_CLOSEOUT -NoBuildandMIDI_HEALTH -NoBuild; all passed.
2026-07-18 - MIDI QA Closeout Summary Separates Valid Saved Receipts From Invalid Rows
- Updated the current finish-line QA receipt persistence summary to report
durable valid saved PASS/FAIL/BLOCKED receiptsinstead of plain saved receipts. - Added
invalid saved receipt rowsto the same summary so corrupted/imported saved blobs remain visible without inflating launch-proof confidence. - Updated readiness regressions to pin both phrases across direct coverage, health payload, and structured protocol payload surfaces.
- Verified with rebuilt
MIDI_READINESS, thenMIDI_CLOSEOUT -NoBuildandMIDI_HEALTH -NoBuild; all passed.
2026-07-18 - MIDI QA Receipt Ledger Counts Only Valid Saved Proof
- Tightened
MidiProtocolQaReceiptStore::savedReceiptCount()so malformedsaved=truereceipts do not inflate valid proof counts. - The append-only history can still preserve malformed/corrupt imported blobs for audit visibility, but latest PASS/FAIL lookup, audit fingerprints, and saved proof counts now agree on the same rule: only saved receipts with complete required fields count as evidence.
- Added a store-model regression that manually injects a malformed saved receipt and proves
validSaved=2, latest PASS lookup, and summary wording remain correct. - Verified with rebuilt
MIDI_READINESS, thenMIDI_CLOSEOUT -NoBuildandMIDI_HEALTH -NoBuild; all passed.
2026-07-18 - MIDI QA Receipt Helper Names Missing Route And Safety Fields
- Added action-surface regressions proving malformed QA receipts stay on
COMPLETE QA RECEIPTwhenrouteProofStatus,safetyClass, oractionSurfaceIdare missing. - Verified the user-facing helper text names the exact missing field, so the receipt workflow tells the tester what to complete instead of merely blocking save.
- This complements the save-readiness guardrail: the project cannot save an unexplained PASS/FAIL/BLOCKED receipt, and the UI action state tells the user how to repair it.
- Verified with rebuilt
MIDI_READINESS, thenMIDI_CLOSEOUT -NoBuildandMIDI_HEALTH -NoBuild; all passed.
2026-07-18 - MIDI QA Receipt Save Readiness Requires Route And Safety Fields
- Hardened
MidiProtocolQaReceiptSnapshot::missingSaveFields()so a MIDI QA receipt cannot become save-ready withoutsafetyClass,routeProofStatus, andactionSurfaceId. - Added processor persistence and lower-level receipt-store regressions that reject receipts missing safety class, route proof, or action surface identity.
- This protects the closeout evidence chain: PASS/FAIL/BLOCKED is only useful when the receipt says what was tested, where it was opened, what safety domain applied, and whether the route was direct/breadcrumb/status-only/unwired.
- Verified with rebuilt
MIDI_READINESS, thenMIDI_CLOSEOUT -NoBuildandMIDI_HEALTH -NoBuild; all passed.
2026-07-17 - Launch-Proof Wording Separates Software-Green From Launch-Green
- Tightened the MIDI launch-proof summary so software-green cannot be mistaken for launch-green.
- The report now states that coded MIDI capability is separate from saved launch evidence, and that public launch wording must follow saved receipts rather than the optimistic backend percentage.
- Added regression coverage for
software-green is not launch-green,PASS/FAIL/BLOCKED receipt history, andPublic launch wording must follow the saved receipts. - Verified with rebuilt
MIDI_READINESS, thenMIDI_CLOSEOUT -NoBuildandMIDI_HEALTH -NoBuild; all passed.
2026-07-17 - MIDI QA Manual Run Step Requires Evidence Before PASS
- Tightened the MIDI QA manual run-step wording so testers are told to capture the evidence artifact before marking PASS/FAIL/BLOCKED.
- The run step now says to save the receipt only after the observed result matches the claim, and it explicitly includes real-hardware proof cues when the blocker category requires them.
- Added regression coverage so the AUTO LANES next run step cannot lose the evidence-before-PASS rule.
- Verified with rebuilt
MIDI_READINESS, thenMIDI_CLOSEOUT -NoBuildandMIDI_HEALTH -NoBuild; all passed.
2026-07-17 - MIDI QA Evidence Artifact Wording Tightened
- Tightened MIDI QA evidence capture wording so closeout rows name the artifact bundle testers should preserve, not just the receipt destination.
- Evidence rows now ask for evidence notes, hardware proof, screenshot/log/copy receipt, receiptRefs, and relevant artifacts such as project state, DAW file round-trip, audio/render check, device response, or timing observation.
- Added regression coverage so AUTO LANES closeout rows cannot lose the concrete capture/artifact wording.
- Verified with rebuilt
MIDI_READINESS, thenMIDI_CLOSEOUT -NoBuildandMIDI_HEALTH -NoBuild; all passed.
2026-07-17 - Next Closeout Route Now Names Its Receipt Target
- Updated the MIDI next-route summary so it tells testers where to go and which persistent QA receipt target should receive the evidence.
- The active closeout route now reports
Receipt target: midi.closeout.qa.midi_auto_final_editorand includes a hardware cue count when the category needs real-device proof. - Added regression coverage so the structured Protocol Coverage payload and plain report must preserve the route receipt target.
- Verified with rebuilt
MIDI_READINESS, thenMIDI_CLOSEOUT -NoBuildandMIDI_HEALTH -NoBuild; all passed.
2026-07-17 - Remaining MIDI 1.0 Proof List Made Concrete
- Tightened the remaining MIDI 1.0 perfection summary so it names specific saved-receipt categories instead of sounding like an almost-done banner.
- The report now calls out AUTO LANES hands-on editing QA, real-controller input/latency, external-synth pitch-bend/pressure response, RPN/NRPN hardware setup, guarded SysEx batch/restore attempts, MIDI import/export DAW file round trips, live timing checks, and complete project reopen/export scenarios.
- Added regression coverage so future MIDI reports cannot drop those concrete proof categories while still claiming the same readiness boundary.
- Verified with rebuilt
MIDI_READINESS, thenMIDI_CLOSEOUT -NoBuildandMIDI_HEALTH -NoBuild; all passed.
2026-07-17 - Release Gate Now Separates Internal Implementation From Field Proof
- Updated the MIDI release-gate summary so a clear or blocked gate cannot be misread as public proof. The gate now explicitly says internal implementation review is different from saved field-validation evidence.
- Added regression coverage for the structured release-gate payload: status label, summary presence, customer-facing closeout language, the internal-not-field-proof warning, and the next-blocker pointer.
- This keeps SpaceAge honest while MIDI work is close: code and self-tests can prove intent, but real-controller latency, SysEx restore, DAW round-trip, and hardware sync claims still need saved receipts before public wording can use them as proven facts.
- Verified with rebuilt
MIDI_READINESS, thenMIDI_CLOSEOUT -NoBuildandMIDI_HEALTH -NoBuild; all passed.
2026-07-17 - Safe Public MIDI Claim Boundary Is Regression-Protected
- Hardened MIDI Protocol Coverage regression tests for safe public MIDI claim wording.
- The tests now preserve the distinction between an advanced MIDI 1.0 foundation and claims that require saved release evidence: complete MIDI 1.0, true MPE, MIDI 2.0, effortless hardware tightness, device-accepted SysEx restore, and universal DAW interchange.
- SpaceAge may describe guarded import/export, lane routing, recording/playback, controller capture, SysEx vaulting, hardware setup scaffolding, and visible closeout reports only as the supported foundation until the validation ladder has saved receipts for exact public promises.
- Verified with rebuilt
MIDI_CLOSEOUT, thenMIDI_HEALTH -NoBuildandMIDI_READINESS -NoBuild; all passed.
2026-07-17 - Release-Candidate Validation Ladder Is Regression-Protected
- Hardened MIDI Protocol Coverage regression tests for the release-candidate validation ladder.
- The tests now pin all six public-trust rungs: release self-tests/fixtures, open UI closeout routes and visible workflow, saved PASS/FAIL/BLOCKED receipts with audit fingerprints, real MIDI file round trips through another DAW, real controller/interface/external-synth/SysEx/bend/sync/live-monitoring evidence, and public release notes that describe only evidence-backed rungs.
- SpaceAge must keep unproven MIDI behavior labeled internally prepared or beta-ready rather than publicly proven until the relevant evidence exists.
- Verified with rebuilt
MIDI_CLOSEOUT, thenMIDI_HEALTH -NoBuildandMIDI_READINESS -NoBuild; all passed.
2026-07-17 - Real-Hardware Validation Boundary Is Regression-Protected
- Hardened MIDI Protocol Coverage regression tests for the real-hardware validation trust boundary.
- The tests now preserve the difference between SpaceAge-side reports/fixtures/templates/queue plans/self-tests and real evidence from controllers, MIDI interfaces, DAW hosts, imported/exported files, external synths, SysEx restore attempts, bend-range tests, clock/transport sync, and live monitoring/timing observations.
- Hardware behavior remains described as prepared or queued until saved PASS/FAIL/BLOCKED receipts prove what happened with real devices, files, hosts, or manual verification.
- Verified with rebuilt
MIDI_CLOSEOUT, thenMIDI_HEALTH -NoBuildandMIDI_READINESS -NoBuild; all passed.
2026-07-17 - QA Receipt Persistence Trust Boundary Is Regression-Protected
- Hardened MIDI Protocol Coverage regression tests for the QA receipt persistence trust boundary.
- The tests now preserve the difference between proof scaffolding and proof: session ids, state keys, unsaved templates, missing-field lists, save-readiness labels, and PASS/FAIL/BLOCKED vocabulary prove only that the receipt form exists.
- A QA pass is not considered real until result, checker/timestamp, evidence notes, receipt refs, and blocking/follow-up decisions are saved with the project or exported QA record.
- Verified with rebuilt
MIDI_CLOSEOUT, thenMIDI_HEALTH -NoBuildandMIDI_READINESS -NoBuild; all passed.
2026-07-17 - Timing And Live-Lag Trust Boundary Is Regression-Protected
- Hardened MIDI Protocol Coverage regression tests for the timing/live-lag trust boundary.
- The tests now preserve the difference between SpaceAge's internal timing intent and the user's felt latency at the controller, interface, speakers, and monitoring path.
- Sample offsets, hardware lane scheduling, live-input draining, and recorded-event compensation are treated as internal timing proof only; real-rig trust still requires buffer-size review, wired/controller/interface checks, MIDI Timing measurement or manual alignment, and live monitoring tests.
- Verified with rebuilt
MIDI_CLOSEOUT, thenMIDI_HEALTH -NoBuildandMIDI_READINESS -NoBuild; all passed.
2026-07-17 - Import Conductor-Map Trust Boundary Is Regression-Protected
- Hardened MIDI Protocol Coverage regression tests for imported tempo, meter, and key map trust boundaries.
- The tests now preserve the difference between inspecting/receipting source conductor data, deliberately adopting first source tempo/key by user policy, and full tempo/meter/key map adoption.
- Full conductor-map adoption remains review-only until there is an undo-safe conductor timeline; MIDI import must not silently reshape an existing Arrangement's meter, tempo, or key structure.
- Verified with rebuilt
MIDI_CLOSEOUT, thenMIDI_HEALTH -NoBuildandMIDI_READINESS -NoBuild; all passed.
2026-07-17 - MIDI Learn Trust Boundary Is Regression-Protected
- Hardened MIDI Protocol Coverage regression tests for MIDI Learn and control-map conflict trust boundaries.
- The tests now keep learned source capture separate from proof that the physical control feels good, has the right pickup/range/curve behavior, avoids conflicts, or has been confirmed against the target in context.
- Conflict reporting remains a warning/review layer around source/target scope, duplicate source/target conflicts, destructive ranges, missing pickup, and 7-bit vs 14-bit companion behavior. It is not treated as an automatic musical decision.
- Verified with rebuilt
MIDI_CLOSEOUT, thenMIDI_HEALTH -NoBuildandMIDI_READINESS -NoBuild; all passed.
2026-07-17 - SysEx Restore Trust Boundary Is Regression-Protected
- Hardened MIDI Protocol Coverage regression tests for
sysExRestoreTrustBoundarySummary(). - The test now requires the report to preserve matching device identity, ACK/NAK/WAIT/CANCEL response evidence, explicit manual confirmation, and the warning that stored snapshots plus queued bytes are not proof external hardware accepted the restore.
- Verified with rebuilt
MIDI_CLOSEOUT, thenMIDI_HEALTH -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check. - Practical meaning: SpaceAge can safely describe SysEx capture/vault/queue readiness, but cannot imply a hardware synth accepted or applied a dump without response/manual evidence.
2026-07-17 - Real-File Round-Trip Boundary Is Regression-Protected
- Hardened the MIDI Protocol Coverage regression for
realFileRoundTripTrustBoundarySummary(). - The test now requires the report to say fixtures/self-tests prove known cases only, while release trust still requires real DAW files, General MIDI/XG files, dense controller files, warning-heavy setup files, and exported stems opened in another DAW.
- Verified with rebuilt
MIDI_CLOSEOUT, thenMIDI_HEALTH -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check. - Practical meaning: SpaceAge cannot accidentally turn internal MIDI fixture success into a public claim of broad MIDI interchange confidence.
2026-07-17 - Live-Lag Diagnostics Stay Anchored To The Real Signal Chain
- Hardened MIDI Health regression coverage so high-buffer live-lag reporting must mention the audio-device buffer, driver/interface/controller latency, duplicate host/direct routing, wired monitoring, and the difference between recorded-note alignment and live monitoring feel.
- This protects the user-facing MIDI Health advice from becoming a misleading single-number compensation story.
- Verified with rebuilt
MIDI_HEALTH, thenMIDI_CLOSEOUT -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check. - Practical meaning: if a controller feels late, SpaceAge keeps guiding the user through the actual chain: buffer size, direct/host routing, USB/DIN/interface path, wired monitoring, SoundFont pool risk, and only then MIDI Timing compensation.
2026-07-17 - Hardware Proof Checklist Locks In DAW/Host Round Trip
- Added regression coverage requiring the MIDI Health hardware-proof checklist to keep the
roundtriprow visible. - The test now verifies the row label, the done-when evidence language, and the run-order summary phrase
DAW/host round-trip. - Verified with rebuilt
MIDI_HEALTH, thenMIDI_CLOSEOUT -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check. - Practical meaning: SpaceAge cannot quietly call MIDI hardware/import/export proof complete without preserving the real-file DAW/host round-trip ritual.
2026-07-17 - MIDI Export Write Receipts Must Carry Musical Trust Boundary
- Hardened the export write receipt regression so the copied/plain-text receipt must say musical trust still requires opening or re-importing the file.
- Kept the existing code wording: a non-empty
.midproves SpaceAge wrote bytes, not that another DAW, collaborator, plugin, or hardware synth will interpret it musically. - Verified with rebuilt
MIDI_CLOSEOUT, thenMIDI_HEALTH -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check. - Practical meaning: the handoff receipt itself now carries the post-export verification ritual instead of relying only on preview/report copy.
2026-07-17 - AUTO LANES Editor Readiness No Longer Implies Product-Ready
- Tightened AUTO LANES editor-readiness wording so visible editor tools are not confused with launch-finished proof.
- Editor summaries now say rows still need final hands-on QA before product-ready claims, and even clean project snapshots still require saved QA receipts.
- Full AUTO LANES reports now state that product-ready proof requires owner isolation, undo, playback, export/import, and hardware bend trust evidence.
- Hardened MIDI Health tests so the product-ready boundary appears in object summaries, serialized summaries, and plain-text reports.
- Verified with rebuilt
MIDI_HEALTH, thenMIDI_CLOSEOUT -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check.
2026-07-17 - MIDI Import Readiness Is A Mutation Plan, Not Musical Proof
- Tightened MIDI import preview/result validation text so
readyToImportand applied receipts cannot be mistaken for musical correctness proof. - Import preview now says readiness is a safe mutation plan until playback plus re-export or re-open verification passes.
- Import apply receipts now say SpaceAge changed the project model, but musical correctness still needs playback and round-trip verification.
- Hardened import closeout coverage so the new safe-plan and not-proof wording stays serialized through the validation summaries.
- Verified with rebuilt
MIDI_CLOSEOUT, thenMIDI_HEALTH -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check. - Practical meaning: import can be safe to apply without being trusted as musically correct until the user checks what came in.
2026-07-17 - Hardware Proof Badge Says Ready For Evidence
- Updated the MIDI Health hardware proof badge so rows with no visible blocker say
ready for evidenceinstead of simplyready. - Hardened the focused Health test so the badge keeps the evidence-first wording alongside the no-blocking-proof fallback text.
- Verified with rebuilt
MIDI_HEALTH, thenMIDI_CLOSEOUT -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check. - Practical meaning: the visible badge now teaches the same rule as the proof checklist: readiness is a prompt to capture receipts, not a public release claim.
2026-07-17 - Hardware Proof Ready State Still Requires Real Receipts
- Tightened the MIDI Health fallback wording for the no-blocking-proof state so it cannot be read as release proof by itself.
- The ready-state label now says no blocking hardware proof item/action is visible in the snapshot, but release trust still requires saved real device, file, host, or manual verification evidence.
- Added a focused
MIDI_HEALTHsynthetic ready-state check so this honesty boundary is protected in tests. - Verified with rebuilt
MIDI_HEALTH, thenMIDI_CLOSEOUT -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check. - Practical meaning: "ready" means ready to collect evidence, not ready to claim the hardware path is proven.
2026-07-17 - Hardware Proof Checklist No Longer Overclaims Readiness
- Corrected the MIDI Health hardware proof checklist receipt row so it no longer implies the checklist itself has enough evidence to call a path release-proven.
- The proof definition now says the MIDI path is release-proven only after saved evidence names the real device, file, host, or manual verification result.
- Hardened
MIDI_HEALTHso the corrected release-proof definition stays serialized in the checklist payload. - Verified with rebuilt
MIDI_HEALTH, thenMIDI_CLOSEOUT -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check. - Practical meaning: SpaceAge can guide proof work, but only real saved receipts make hardware behavior trustworthy.
2026-07-17 - MIDI Health Separates Live Lag From Recorded Alignment
- Clarified the MIDI Health latency action text so MIDI Timing recorded alignment is described only as a way to fix where recorded notes land on the timeline.
- The report now explicitly says recorded alignment does not remove live monitoring lag, and sends the user toward audio buffer, driver/interface, controller route, direct queue age, duplicate host/direct routing, and wired monitoring checks for felt delay.
- Hardened
MIDI_HEALTHso this distinction must stay visible in the latency guidance. - Verified with rebuilt
MIDI_HEALTH, thenMIDI_CLOSEOUT -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check. - Practical meaning: SpaceAge should no longer imply that timing compensation is a magic cure for the real DIN/USB controller lag experience.
2026-07-17 - MIDI Export Checklist Separates Musical Handoff From Hardware Proof
- Added a standing export validation reminder that MIDI PATCH and SysEx Vault state must be reviewed separately when setup, bank/program, RPN/NRPN, or SysEx hardware state matters.
- Hardened the closeout regression so export readiness must keep saying that a musical MIDI export is not hardware-restore proof.
- Verified with rebuilt
MIDI_CLOSEOUT, thenMIDI_HEALTH -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check. - Practical meaning: exported MIDI can prove musical handoff only after re-open/re-import checks; it must not be mistaken for proof that an external synth accepted setup or SysEx recall data.
2026-07-17 - AUTO LANES Next-Step Doorways Aligned
- Updated the empty-project AUTO LANES next-test wording so it names all required visible routes: Piano Roll AUTO, Arrangement AUTO LANES, MIDI TASKS, and Settings.
- Hardened
MIDI_HEALTHso the focused AUTO LANES doorway contract must keep all four doorways visible in the next-step script. - Verified with rebuilt
MIDI_HEALTH, thenMIDI_CLOSEOUT -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check. - Practical meaning: AUTO LANES should feel like a discoverable workflow, not a hidden editor that only one page knows how to reach.
2026-07-17 - No-Armed-Lane Recording Block Is Now Gate-Protected
- Added focused
MIDI_HEALTHregression coverage for the no-armed-lane Arrangement recording case. - The test now proves both sides of the rule: an armed Arrangement lane is the performance owner, and with no armed lane, Arrangement recording is intentionally blocked while monitoring remains preview only.
- Verified with rebuilt
MIDI_HEALTH, thenMIDI_CLOSEOUT -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check. - Practical meaning: SpaceAge should not quietly record into a selected clip, visible pattern, or stale edit context. The user must explicitly arm the lane they mean to perform into.
2026-07-17 - MIDI Health Recording Ownership Copy Corrected
- Removed obsolete MIDI Health wording that implied recording could fall back to the visible/edit target when no Arrangement lane is armed.
- The Health model now says the current lane-owned rule plainly: arm an Arrangement lane; that lane owns live MIDI recording and monitoring. If no lane is armed, Arrangement recording is intentionally blocked, and any monitoring is preview only.
- Hardened
MIDI_HEALTHcoverage so the report must keep saying that the armed Arrangement lane is the performance owner. - Verified with rebuilt
MIDI_HEALTH, thenMIDI_CLOSEOUT -NoBuild,MIDI_READINESS -NoBuild, and scopedgit diff --check. - Practical meaning: this removes one more confusing remnant from the old pattern/edit-target workflow and keeps SpaceAge aligned with the Instrument Bay / lane-owned architecture.
2026-07-17 - MIDI AUTO Source Policy Diagnostics Hardened
- Clarified the MIDI input source-policy report so AUTO explicitly says when it chooses a lane-pinned direct controller, suppresses host/plugin duplicates, or falls back to host MIDI while suppressing direct inputs.
- Clarified the multi-controller warning so a user with two physical controllers can tell that the armed lane's input assignment decides which direct controller is allowed through in AUTO.
- Hardened
MIDI_READINESSregression coverage so those customer-facing diagnostics must remain present in the structured report and plain-text report. - Verified with a rebuilt
MIDI_READINESSgate,MIDI_CLOSEOUT -NoBuild, and scopedgit diff --check. - Practical meaning: the next time a USB controller and DIN controller are both connected, the Health/Readiness surface should explain the routing decision instead of making the user guess why one controller is or is not heard.
2026-07-17 - MIDI Health Protects Dropped Recording Warnings
- Added focused
MIDI_HEALTHregression coverage for dropped note/drum recording events and dropped expression automation events. - The Health gate now asserts that dropped recording data produces visible
Recording queue checks, marks the take as untrusted, tells the user to retake or review AUTO LANES, and exposes the dropped counts in the structured Health payload. - Rebuilt and passed
MIDI_HEALTH; re-ranMIDI_CLOSEOUTwith-NoBuild, which remained green. - Practical meaning: if live recording capture ever drops notes, CC, bend, pressure, sustain, or switch gestures, the user-facing health surface should say so plainly instead of letting a bad take look trustworthy.
2026-07-17 - MIDI Health Now Guards Two-Controller Trust
- Added focused
MIDI_HEALTHregression coverage for the case that burned real testing time: multiple direct physical MIDI inputs connected at once. - The fast health gate now distinguishes two controllers merely being open from two controllers actually sending recent musical data, and preserves the user-facing caution text that tells the musician to pin the intended controller, split channels, or deliberately layer controllers.
- Rebuilt and passed
MIDI_HEALTH; re-ranMIDI_RECORD_TIMINGwith-NoBuild, which remained green across callback timestamp placement, pinned direct input, two-controller evidence, source policy, and long Arrangement capture. - Practical meaning: the Settings / MIDI Health story is better aligned with the real-world mioXL + USB controller situation instead of hiding the ambiguity inside a broad backend test.
2026-07-17 - MIDI Health Protects Hardware Proof Ritual
- Added focused
MIDI_HEALTHself-test coverage for the Hardware Passport proof checklist, including Passport, Timing, TEST BEND/test phrase, SysEx restore, round-trip, and PASS/FAIL/BLOCKED receipt items. - The Health gate now asserts the first-needed action, proof badge, run-order summary, visible checklist items,
toVar()payload, and TEST BEND guidance so the hardware-proof workflow cannot quietly regress into vague prose. - Rebuilt and passed
MIDI_HEALTH; re-ranMIDI_PROJECT_READINESSwith-NoBuild, which remained green. - Practical meaning: the remaining hardware-facing MIDI work is now better guarded as a user-visible proof ritual rather than an internal engineering checklist.
2026-07-17 - MIDI Health Protects AUTO LANES Discovery
- Added focused
MIDI_HEALTHself-test coverage for the AUTO LANES doorway contract, including the empty-project case where no automation exists yet and the populated case where Shared PTN ownership, MIDI PATCH review-only setup rows, and VARIANT guidance must remain visible. - Rebuilt
SampleSquadAudioTestthroughtools/run_tests.ps1 -Gate MIDI_HEALTHand verified the newMIDI health only - AUTO LANES doorway contractrow passes. - Re-ran
MIDI_CLOSEOUTandMIDI_PROJECT_READINESSwith-NoBuildafter the change; both remained green. - Practical meaning: the automation feature is less likely to regress into a hidden expert-only surface while the MIDI backend keeps maturing.
2026-07-17 - Focused MIDI Gate Set Green
- Verified the full named focused MIDI gate set through
tools/run_tests.ps1 -NoBuild -Gate ... -ReportPath .... - Passed gates this checkpoint:
MIDI_LATENCY_WRAP,MIDI_HEALTH,MIDI_PROJECT_READINESS,MIDI_RECORD_TIMING, andMIDI_CLOSEOUT. - The record-timing gate now covers four-measure Arrangement capture, long drum Arrangement capture, source-aware same-note ownership, pinned direct input with two controllers connected, direct disconnect retirement, direct slot reuse, callback timestamp placement, input source policy, sync source policy, and open-vs-active direct evidence.
- Practical meaning: the MIDI backend is no longer just broad-feature-complete; the fragile areas that caused Shane-facing confidence loss now have named repeatable regression coverage.
2026-07-17 - Named Gate Report Artifacts Verified
tools/run_tests.ps1now supports named MIDI gates plus-ReportPath, so focused MIDI checks can leave readable evidence files instead of relying on terminal scrollback.- Verified
MIDI_LATENCY_WRAP,MIDI_HEALTH, andMIDI_PROJECT_READINESSthrough the shared runner againstoutputs/build-local-midi-closeout/SampleSquadAudioTest_artefacts/Release/SampleSquadAudioTest.exe. - Confirmed the generated report files are UTF-8-readable and do not contain the earlier null-byte output problem.
- Current interpretation: software-side MIDI 1.0 coverage remains in closeout territory; remaining confidence work is real hardware/host testing, especially DIN timing behavior, multi-controller monitoring, and visible automation-lane workflow.
2026-07-16 - MIDI Readiness Gate De-Brittled
- Replaced the over-brittle project-readiness health assertion chain with a structural contract gate: counts, AUTO LANES routing, hardware warning state, sync policy state, dropped-recording warnings, SysEx Vault reporting, and QA receipt surface are still checked.
- Preserved the honest MIDI closeout wording: backend/software remains high, while release-proof customer-facing closeout still waits on real hardware, import/export, SysEx, AUTO LANES, and live timing evidence.
- Verified gates: build passed, MIDI project readiness passed, MIDI health passed, MIDI closeout regression passed, and MIDI record timing passed.
- No distributable build was packaged.
2026-07-16 - MIDI Progress Headline Split Into Software vs Proof
- Clarified MIDI Protocol Coverage headline language so it no longer compresses backend readiness, UI workflow readiness, and release-proof external evidence into one ambiguous percentage.
- summary() now reports software/model rows, UI/workflow rows, current MIDI 1.0 release-proof closeout, software-ready/UI-pending rows, real-hardware proof rows, confirmation-required rows, and remaining customer-facing blockers.
- Updated tests and report labels from older Tracked model rows / model-ready/UI-pending wording to Tracked software/model rows / software-ready/UI-pending.
- Verified gates: build passed, MIDI readiness passed, MIDI health passed, and MIDI closeout regression passed.
- No distributable build was packaged.
2026-07-16 - AUTO LANES Doorway Label Stabilized
- Locked the Arrangement automation doorway label to AUTO LANES instead of morphing between CLIP AUTO and LANE AUTO based on selection state.
- Cleaned source/report copy so users are pointed toward one stable door: Piano Roll AUTO, Arrangement AUTO LANES, MIDI TASKS, or Settings.
- Corrected the implementation-status note that still described the deprecated CLIP AUTO / LANE AUTO wording as current.
- Verified gates: build passed, MIDI health passed, MIDI closeout regression passed, and MIDI record timing passed.
- No distributable build was packaged.
2026-07-16 - MIDI Export Evidence Boundary Tightened
- Added an export-plan evidence boundary so the report distinguishes three separate truths: SpaceAge prepared export rows, SpaceAge wrote a file, and a collaborator/customer opened or re-imported the result successfully.
- The export plan now exposes
evidenceBoundarySummaryin structured data and includes the same wording in the plain-text report. - Added regression coverage proving the export plan report and object data carry the evidence-boundary warning.
- Corrected an over-broad insertion during implementation before shipping the pass; final source compiles and focused MIDI gates are green.
- Verified gates: build passed, MIDI health passed, and MIDI closeout regression passed.
- No distributable build was packaged.
2026-07-16 - MIDI Export Validation Checklist Added
- Added a structured export validation checklist to MIDI export readiness summaries so real-file handoff proof is explicit instead of implied.
- The checklist changes by export scope: full Arrangement checks tempo/timeline/lane separation/channels, selected clips check source offset and clip-local data, and patterns check pattern-local AUTO LANES without Arrangement assumptions.
- The checklist is included in both the plain-text readiness report and the structured export-readiness object.
- Added regression coverage proving the checklist appears for Arrangement, selected clip, and pattern export readiness.
- Verified gates: build passed, MIDI health passed, and MIDI closeout regression passed.
- No distributable build was packaged.
2026-07-16 - MIDI QA Button Now Names The Real State
- Changed the MIDI Health pending QA evidence button from always saying
SAVE QAto sayingCOMPLETE QAuntil the receipt template is actually save-ready. - The tooltip now carries the next missing-evidence hint, so the panel is clearer about whether the user is opening the form, completing evidence, or reviewing saved evidence.
- This is customer-facing closeout polish: it reduces the chance that a user thinks MIDI proof has been saved before the required PASS/FAIL/BLOCKED fields exist.
- Verified gates: build passed, MIDI health passed, and MIDI closeout regression passed.
- No distributable build was packaged.
2026-07-16 - MIDI Health AUTO TOOLS Row Added
- Added a separate MIDI Health cockpit line for
AUTO TOOLSso operation coverage is visible without copying the full report. AUTO OPSnow remains about launch/readiness, whileAUTO TOOLSreports the documented edit families: points, grouped edits, drawing/block tools, transforms, review-only boundaries, and remaining launch polish.- Adjusted the MIDI Health layout row count so the new line participates in panel sizing instead of overlapping lower content.
- Verified gates: build passed, MIDI health passed, and MIDI closeout regression passed.
- No distributable build was packaged.
2026-07-16 - AUTO LANES Doorway Language Aligned
- Updated Arrangement automation doorway language so the app and reports now point users to the actual
CLIP AUTO/LANE AUTOcontrols instead of older badge/AUTO+ wording. - Clarified the no-selection state: select a clip or lane first, then open clip- or lane-scoped automation.
- Verified gates: build passed, MIDI record timing passed, MIDI closeout regression passed, and MIDI health passed.
- MIDI project readiness still reports customer-facing blockers by design: AUTO LANES hands-on QA, hardware passports/bend evidence, SysEx/import/export receipts, and live-device proof remain before MIDI can be called launch-complete.
- No distributable build was packaged.
2026-07-16 - Arrangement Expression Snapshot Boundary Closed
- Added lane-local and clip-local MIDI expression payload copies to the published sequencer playback snapshot.
- Moved Arrangement expression playback for Shared PTN, Lane Local, and Clip Local owners away from live locked payload helpers and onto published playback snapshots.
- The audio path now reads prepared Arrangement lane/clip state, pattern notes/chords, shared expression data, lane-local expression data, and clip-local expression data without entering
patternMutexfor playback decisions. - Verified gates: build passed, MIDI record timing passed, MIDI closeout regression passed, MIDI project readiness passed, and MIDI health passed.
- No distributable build was packaged.
2026-07-16 - Arrangement Playback Snapshot Boundary Advanced
- Moved non-isolated Arrangement note/chord playback onto immutable sequencer and pattern playback snapshots instead of reading live Arrangement clip/lane and pattern note/chord storage on the audio thread.
- Added the locked sequencer snapshot publisher so Arrangement mutations that already hold
patternMutexcan refresh the published playback state without taking a second lock. - Arrangement expression playback still intentionally uses the guarded expression payload helpers for Shared PTN, Lane Local, and Clip Local events; that is now the remaining realtime cleanup island instead of all Arrangement playback.
- Verified gates: build passed, MIDI record timing passed, MIDI closeout regression passed, MIDI project readiness passed, and MIDI health passed.
- No distributable build was packaged.
2026-07-16 - Pattern Playback Snapshot Helpers Landed
- Added immutable pattern playback snapshots for drum steps, Piano Roll notes, Chord Engine markers, MIDI expression events, and inferred pattern length.
- Published snapshots during startup and after direct pattern edits, Piano Roll edits, Chord Engine edits, expression edits, and queued MIDI recording commits.
- Moved isolated sequencer playback away from taking
patternMutexduring audio rendering; it now reads the already-published pattern snapshot. - Verified that SoundFont live note-start still uses prepared voice checkout rather than per-note
tsf_copy()allocation/copy work. - Verified gates: build passed, MIDI health passed, MIDI closeout regression passed, MIDI record timing passed, and MIDI project readiness passed.
- Remaining realtime closeout: Arrangement playback still needs the same snapshot treatment for lane/clip-local playback paths before the audio-thread cleanup item is fully closed.
- No distributable build was packaged.
2026-07-16 - MIDI Expression Sample-Offset Closeout Verified
- Audited sequencer-generated MIDI expression playback and confirmed it already preserves emitted sample offsets by adding each event's local tick position to the current audio-block delay.
- Confirmed existing regression coverage expects CC11 at exact sample positions 0 and 1200 for both live plugin MIDI and internal synth-state dispatch.
- Corrected the release checklist so expression sample-offset playback and queued hardware cancellation epochs are marked complete instead of remaining open.
- Verified gates: MIDI health passed, MIDI closeout regression passed, MIDI record timing passed, and MIDI project readiness passed.
- Remaining MIDI launch work is now more accurately narrowed to audio-thread cleanup plus real simultaneous mioXL DIN/USB human QA.
- No distributable build was packaged.
2026-07-16 - MIDI Recording Mode Switch Held-Note Closeout
- Fixed a sibling recording edge case where enabling MIDI Step Input while live MIDI recording was active could clear held-note state without committing the note.
- Step Input now uses the same close-before-clear rule as record disarm: active recorded notes are closed at the current compensated step before the mode switch completes.
- Added focused regression coverage:
MIDI record timing only - step input switch closes held notesproves a note started at step 6 and Step Input enabled at step 10 commits as one 4-step note. - Verified gates: focused MIDI record timing passed, MIDI closeout regression passed, MIDI project readiness passed, and MIDI health passed.
- No distributable build was packaged.
2026-07-16 - MIDI Recording Disarm Held-Note Closeout
- Fixed a recording edge case where turning MIDI record off while a key was still held could clear the live note tracker without committing the note to the Piano Roll.
- Disarming record now closes every active recorded note against the current compensated recording step before clearing transient note state.
- Added focused regression coverage:
MIDI record timing only - disarm closes held notesproves a note started at step 4 and disarmed at step 9 commits as one 5-step note. - Verified gates: focused MIDI record timing passed, MIDI closeout regression passed, MIDI project readiness passed, and MIDI health passed.
- No distributable build was packaged.
2026-07-16 - MIDI Loop-Edge Recording Split Closed
- Fixed a recording edge case where a melodic note held across the end of a loop/pattern could be shortened to the first segment only, losing the wrapped continuation.
- Notes that cross the pattern edge are now committed as two MIDI-safe notes: one ending at the pattern boundary and one starting at step 0 for the carried-over duration.
- Added focused regression coverage to the MIDI record timing gate:
MIDI record timing only - loop-edge splitnow proves a note from step 63 to step 0.5 becomes two notes with lengths 1.0 and 0.5. - Verified gates: focused MIDI record timing passed, MIDI closeout regression returned green, MIDI project readiness returned green, and MIDI health returned green.
- No distributable build was packaged.
2026-07-15 - AUTO LANES Ownership Closeout Verified
- The live Controllers coverage row, AUTO LANES editor report, QA prompts, and structured MIDI documentation now describe the same three-owner model: Shared PTN Data, Clip Local, and Lane Local.
- Runtime and export layering is explicitly Shared PTN -> Lane Local -> Clip Local.
- Focused automation-ownership, MIDI project-readiness, and QA-receipt persistence gates pass.
- The broad functional self-test assertions pass. Its process result can still be red when the fixed 8-second
Performance stress 200 blockswall-clock watchdog runs under machine load; recent measured failures were 8.998 and 10.272 seconds versus historical passes around 5.3-6.9 seconds. Do not silently weaken that threshold. - Remaining launch work is hands-on isolation/layering QA for all three owners, curve-handle refinement, and real-device pitch-bend gate proof. Motion Clips and general Arrangement automation remain future layers.
2026-07-15 - AUTO LANES Ownership Reporting Converged
- Corrected the live Controllers coverage row and active AUTO LANES helper copy so Shared PTN, Clip Local, and Lane Local are all reported as implemented owners.
- Made copied/preflight reports owner-aware instead of hardcoding Shared PTN scope; the report now names the current owner and the
Shared PTN -> Lane -> Clipplayback/export layering order. - Added regression checks against the actual Controllers customer-facing coverage item and against Shared PTN and Clip Local report output.
- Older progress entries that describe clip/lane ownership as future work are retained as historical development notes and are superseded by this entry.
- Remaining launch work is hands-on owner isolation/layering, doorway, Undo/Redo, playback/export, curve-handle, and real-device bend-gate evidence.
2026-07-15 - AUTO LANES closeout evidence hardened
- Replaced the prose target with structured Pattern, Clip, and Lane coordinates.
- Bound the AUTO LANES session id and persistent-state key as one canonical identity.
- Prevented a single-owner PASS from closing the full category; PASS now requires every required doorway and Shared PTN, Clip Local, and Lane ownership proof.
- Corrected stale runtime reports that still described Clip Local and Lane Data as future architecture.
- Focused receipt regression passed.
- Full Release self-test passed in 181.5 seconds; log: midi-broad-current-8.log.
- No distributable build was packaged.
2026-07-15 - Structured AUTO LANES closeout receipts
- Extended the existing append-only QA receipt instead of creating a second evidence system.
- PASS now requires a recognized doorway, owner, exact target, full edit/undo/playback/export verification, and a matching ownership outcome.
- Shared PTN, Clip Local, and Lane Local each have explicit ownership proof.
- FAIL/BLOCKED can document an early stop without pretending the full workflow passed.
- Focused persistence coverage and the full Release suite pass; the broad run completed in 140.6 seconds.
- No distributable build was packaged.
- Remaining boundary: hands-on doorway/UI review and real USB/DIN hardware receipts.
2026-07-15 - Multi-controller timing calibration closeout
- Timing sessions are pinned to the selected Hardware Passport input device.
- Returns from another controller are rejected even when note and channel match, and the report exposes the rejection count.
- Direct-input queue-age timing is preserved instead of being clamped to the start of the audio buffer.
- The full Release self-test passed in 148.3 seconds; midi-broad-current-6.log contains the green evidence.
- No distributable build was packaged.
- Remaining boundary: save real USB and DIN timing receipts, then complete structured customer-facing AUTO LANES workflow evidence.
2026-07-15 - Verified SysEx policy registry
- Added an immutable compiled policy registry; projects persist normalized identifiers, not executable checksum/correlation logic.
- Automatic response handling is currently limited to standard MIDI SDS data packets (
midi-sds.data-packet). - Removed generic vendor device-ID and Roland checksum inference. Manufacturer-specific behavior remains manual unless an exact registry entry exists.
- Snapshot reports and JSON now include the exact message-family ID used by correlation policy.
- Chandrasekhar completed an independent read-only trust-boundary audit; its principal findings were integrated.
- Release compile and all 11 focused MIDI/Arranger gates passed. No distributable build was packaged.
2026-07-15 - SysEx response provenance closeout
- Repaired SysEx snapshot-summary projection so decoded dialect, manufacturer/device identity, checksum, warnings, and transfer estimates reach restore-response logic and reports.
- Tightened Sample Dump ACK/NAK/WAIT/CANCEL handling to exact SDS data-packet, device-id, packet-number, source, and single-attempt correlation.
- Wrong-device, wrong-packet, vendor-specific/non-SDS, unrelated, and ambiguous responses no longer consume pending restores or create success receipts.
- Release compile and all 11 focused MIDI release gates passed.
- Remaining hardware layer: declarative per-passport dialect/checksum correlation and saved receipts from real supported devices.
2026-07-14 - Simultaneous-controller RPN/NRPN isolation
- Live RPN/NRPN selection, Data Entry, pitch-bend range, and pitch-wheel scaling are isolated by direct-input source generation plus MIDI channel.
- Setup/import review cards are isolated by source device id plus channel and retain same-tick input order.
- RPN Null, CC121, and NRPN-switch behavior now have focused regression coverage.
- Automation restore/ownership, MIDI readiness, MIDI health, and MIDI record/source-policy gates all pass.
- Mixed CC96/CC97 operations retain exact wire order in evidence and replay plans. No distributable build was packaged; remaining setup closeout is confirmed hardware queue execution plus real-device receipts.
2026-07-14 - Physical MIDI ingress and timing closure
- SpaceAge now owns real
juce::MidiInputhandles for direct physical inputs and starts their callbacks instead of treating saved device IDs as proof that hardware is open. - Device refresh is differential: unchanged controllers remain open, removed controllers are closed, and only newly requested controllers are opened. This avoids needless controller teardown during routine refreshes.
- Direct callback events retain source-device identity and a plausible JUCE driver timestamp. Recording placement uses callback age to recover the intended in-block musical time while live monitoring still reaches the earliest available audio block.
- Direct-input producers are serialized before entering the FIFO, and each queued event carries a device-slot generation. Events left behind by disconnect/reconnect are rejected rather than leaking into the replacement controller session.
- Host Only, Direct Only, Auto, and Host+Direct policies now govern notes, expression, and MIDI sync consistently. Count-in activation also gates expression recording in the same way as note recording.
- Exact same-position note-on/note-off chatter creates a minimum short note instead of being misread as a full-pattern wraparound note.
- Focused Release gates pass for recording timing, MIDI readiness, and MIDI health. Coverage includes four-measure capture, long drum capture, two-controller pinning, stale-device rejection, callback timestamp placement, source-policy matrices, sync-policy matrices, and open-versus-active hardware evidence.
- The broad compatibility suite still contains failures in unfinished compatibility-bridge/stub areas. This focused closure must not be described as a fully green monolithic MIDI suite.
2026-07-14 - Ownership closeout and focused regression proof
- Promoted Shared PTN, Clip Local, and Lane Local from storage scaffolding to explicit AUTO LANES editing owners.
- Playback, Arrangement MIDI export, selected-clip readiness, save/load, VARIANT copying, and clip deletion now use the same ownership model.
- Deterministic effective order is Shared PTN -> Lane Local -> Clip Local.
- Release compile passed. Focused ownership, readiness, health, and record-timing gates passed. The broad legacy self-test exceeded its five-minute timeout and remains unclaimed.
2026-07-14 - Clip/Lane-local automation persistence guard
- Added project-state serialization and restoration for
clipLocalMidiExpressionPayloadsandlaneLocalMidiExpressionPayloadsbeside the existing sharedmidiExpressionPayloadsarray. - Arrangement clip deletion now removes clip-local automation for the removed clip id, preventing orphaned local expression data after edit operations.
- Verification: Release compile passed. Focused MIDI readiness, MIDI health, and MIDI record timing gates all passed after the persistence pass.
2026-07-14 - Effective AUTO LANES automation helpers restored
- Replaced the empty
buildEffectiveMidiExpressionEventsForArrangementClip()compatibility stub with a real effective-automation merge: shared pattern expression, lane-local expression, and clip-local expression now resolve through one helper. - Added the missing clip-local/lane-local helper definitions and made clip-local copy/remove guarded by
patternMutexso future VARIANT/clone behavior has a sane ownership path instead of implicit empty map entries. - Added a focused readiness regression proving an Arrangement clip with shared CC and pitch-bend automation reports effective expression rows through the direct helper and the clip-aware summaries.
- Verification: Release compile passed. Focused MIDI readiness, MIDI health, and MIDI record timing gates all passed.
2026-07-14 - MIDI runtime queue and SysEx front-door repair
- Restored real behavior for the compatibility-layer MIDI runtime queues that had been returning success without doing work after the source restore: MIDI learn/control mapping messages now queue and drain, SysEx restore responses now queue and classify against active restore attempts, and MIDI expression recording queue events now commit into editable expression data.
- Moved incoming SysEx handling ahead of normal channel filtering in the live MIDI input path. SysEx capture and SysEx restore acknowledgements/rejections now have a channel-independent doorway, which matches the MIDI 1.0 protocol reality that SysEx is not a lane/channel note message.
- Verification: Release compile passed. Focused MIDI readiness, MIDI health/latency, and MIDI record timing gates all passed after the change. Record timing still proves long Arrangement clips, repeated/source-offset clips, four-measure captures, long drum captures, count-in boundary protection, selected direct-input host suppression, expression receipt clearing, and pinned-controller isolation.
- Remaining trust boundary: real hardware validation is still needed on Shane's physical controllers, especially the DIN-through-mioXL path versus direct USB, but the internal backend path is no longer hiding no-op queue behavior in these restored MIDI components.
2026-07-14 02:35 - Arrangement MIDI Recording / Direct Input Gate Restored
- Restored the direct MIDI input router drain inside
processBlock(), so queued physical-controller messages now reach live monitoring, recording, readiness counters, and active-device reporting again. - Reworked Arrangement MIDI recording step math so recording into long clips, source-offset clips, repeated clips, and active playhead clips writes notes into the correct clip-local pattern position instead of collapsing notes into measure one.
- Hardened count-in boundaries so release events before recording activation do not accidentally create tiny notes.
- Kept selected direct-input routing strict: a pinned controller suppresses host spill and ignores other controllers while still reporting multiple open devices.
- Tightened timeline-expression recording so performance data such as mod wheel, expression, pitch bend, pressure, pan, volume, and sustain can record, while setup chatter such as Bank Select, Program Change, RPN/NRPN/Data Entry, active sensing, and transport/setup plumbing does not become editable automation.
- Verified focused gates after the pass:
SPACEAGE_MIDI_READINESS_ONLY,SPACEAGE_MIDI_HEALTH_ONLY, andSPACEAGE_MIDI_RECORD_TIMING_ONLYall pass. The record timing gate now proves long Arrangement clips, count-in safety, repeated/source-offset clips, processBlock playhead recording, four-measure capture, long drum capture, direct-input host-spill suppression, drum receipt, expression receipt, same-block direct queue drain, and two-controller pinning.
2026-07-14 01:40 - MIDI Panel Readability Pass
- Shortened the lane MIDI arm/disarm button text to ARM MIDI HERE / DISARM MIDI so it no longer collides with nearby routing text.
- Increased the MIDI Hardware Setup Guide callout height so the bottom instructional copy has breathing room instead of risking cutoff.
- No beta package was created for this pass; this is a compile-checked customer-facing polish pass before the next deeper MIDI sweep.
2026-07-14 01:20 - Live Internal Monitoring Sample Offsets
- Fixed the internal live-monitoring branches so host/plugin MIDI note-on and note-off events preserve their JUCE in-block sample offsets when starting or releasing internal voices.
- Kept direct physical MIDI on the earliest-drain live path so a 5-pin/USB controller path does not get an extra intentional delay inside SpaceAge.
- Verified focused MIDI gates after the change: record timing, readiness, and health all pass. The timing gate also proves long drum Arrangement capture, two-controller pinned direct input, direct queue chatter filtering, and four-measure recording alignment.
- Remaining real-world latency work: compare the MIDI Health audio block latency and direct queue age while playing the USB controller vs the mioXL DIN controller, then decide whether the issue is SpaceAge scheduling, audio buffer size, driver/interface path, or external hardware response.
2026-07-14 00:45 - Live MIDI Sample-Offset Split
- Preserved host/plugin MIDI sample offsets when SpaceAge forwards live lane MIDI to plugin/hardware outputs.
- Kept direct physical MIDI monitoring on the earliest drain-block sample so the direct hardware path does not add avoidable live feel latency.
- Verified the correct build-local MIDI gates after catching a stale-executable test path: record timing, readiness, and health all pass.
- Current closeout focus remains real-controller latency validation, Arrangement REC/live monitoring feel, and visible AUTO LANES QA.
2026-07-14 00:22 - AUTO LANES Primary Arrangement Door
- Moved the Arrangement AUTO LANES button into the primary transport/MIDI toolbar beside record/transport controls.
- Reason: AUTO LANES is the visible home for recorded CC, pitch bend, pressure, sustain, and performance automation; burying it among lower arrangement edit actions made MIDI automation harder to discover.
- Compile check passed after the UI move. No beta package was created.
2026-07-14 00:17 - MIDI No-Scan Preflight Refresh
- Routed the Settings MIDI preflight refresh through buildKnownMidiDeviceInventoryReport() instead of the full physical buildMidiDeviceInventoryReport() scan.
- Kept full hardware enumeration available on explicit MIDI Input/Output/Hardware panels, where the user expects device discovery.
- Verified focused gates: record timing, readiness, and health all pass after the change.
- Remaining MIDI closeout emphasis: hands-on latency confirmation with real controllers, AUTO LANES visibility/QA, and explicit hardware-editor workflows.
2026-07-13 - MIDI No-Scan Report Path
- Removed live physical MIDI device enumeration from MIDI readiness/health/report paths that run during timing tests or normal workflow diagnostics.
- Added a cached/project-known MIDI inventory path built from open direct inputs, open outputs, lane routes, and Hardware Passport references. Explicit hardware discovery remains available through the full inventory/refresh path.
- Focused gates passed cleanly: SPACEAGE_MIDI_RECORD_TIMING_ONLY, SPACEAGE_MIDI_READINESS_ONLY, and SPACEAGE_MIDI_HEALTH_ONLY. The record timing gate now completes quickly and proves four-measure capture, direct-input source pinning, drum receipt, expression receipt, direct queue chatter filtering, and second-controller suppression.
2026-07-13 16:25 - MIDI Settings Layout Polish
- Compacted MIDI Health rows so the dashboard can show the closeout/status cockpit without bottom clipping. The long diagnostic ledger remains available through COPY REPORT.
- Reduced MIDI Hardware Setup Guide cards to the first three visible checklist steps, added a '+ more' cue, and matched click hit-tests to the new card row height so text no longer piles up.
- Re-ran the focused MIDI recording timing test: long clips, repeated source offsets, Arrangement processBlock recording, four-measure capture, direct-input host spill suppression, drum receipt, and expression stale-note clearing all passed.
2026-07-13 - Piano Roll and Arranger REC tooltip language now matches the lane/playhead recording model: existing clip under playhead wins, otherwise a fresh lane-owned clip is created.
2026-07-13 - Arrangement REC now refuses to reuse a stale selected clip when the playhead is targeting blank space; recording creates a fresh clip at the playhead unless the playhead is actually inside an existing clip.
2026-07-13 Arrangement REC fresh-clip length pass: Arrangement REC no longer creates fresh recording clips with a hard-coded 16-step pattern. When recording must create a new lane-owned clip, it now uses the visible Arrangement LENGTH target, materializes the pattern to that length, and keeps the clip length aligned with the pattern length. Release self-test target rebuilt; SPACEAGE_MIDI_RECORD_TIMING_ONLY=1 passed all seven focused timing/source-policy checks. No user-facing beta build was packaged. 2026-07-13 four-measure Arrangement MIDI recording guard: added a focused regression that records four melodic notes across a 64-step Arrangement clip and verifies they land at 0.25, 16.25, 32.25, and 48.25 steps instead of collapsing into measure one. Release self-test target rebuilt; SPACEAGE_MIDI_RECORD_TIMING_ONLY=1 passed all seven focused timing/source-policy checks. 2026-07-13 AUTO LANES closeout-report truth pass: MIDI Protocol Coverage now describes AUTO LANES as an existing shared-PTN editor that needs evidence, handle polish, and real-device bend proof rather than implying the entire editor still needs to be built. The QA checklist now explicitly tests every AUTO LANES doorway: Piano Roll, clip badge, lane badge, and main Arrangement button. 2026-07-13 Arrangement AUTO LANES tooltip-contract pass: the main Arrangement AUTO LANES button and inspector-state tooltip now teach the same deterministic target order as the code: selected clip in lane, clip under Arrangement playhead, then first real clip in lane. This prevents the UI from implying the old selected-clip-or-highlighted-lane behavior. 2026-07-13 AUTO LANES targeting copy-alignment pass: lane AUTO badge hover copy, Answers for Shane, and Project Gotchas now state the same target order as the code: selected clip in lane, clip under Arrangement playhead, then first real clip in lane. Release compile passed; SPACEAGE_MIDI_RECORD_TIMING_ONLY=1 passed all six focused MIDI checks. 2026-07-13 Arrangement lane AUTO LANES target-order pass: lane-level AUTO LANES opening now chooses its target deterministically: selected clip in that lane first, clip under the Arrangement playhead second, and first playable clip in the lane only as a fallback. The editor synchronizes selected clip state and reports the targeting reason in the status text before opening AUTO LANES. Release compile passed; SPACEAGE_MIDI_RECORD_TIMING_ONLY=1 passed all six focused MIDI checks. 2026-07-13 Piano Roll AUTO button context-alignment pass: the Piano Roll top-row AUTO button now counts the same effective automation rows as the AUTO LANES preview strip when editing a selected Arrangement clip. Clip-local, lane-local, and shared PTN automation evidence now agree between the button label, button color, and the visible preview strip. Release compile passed; SPACEAGE_MIDI_RECORD_TIMING_ONLY=1 passed all six focused MIDI checks. 2026-07-13 MIDI recording target-length stabilization pass: MIDI recording now pins the intended record length at record-start/count-in-start instead of re-deriving the answer only from mutable Arrangement clip state during the audio block. This closes the transient class where an Arrangement recording could occasionally commit against the wrong effective clip length. Release compile passed; SPACEAGE_MIDI_RECORD_TIMING_ONLY=1 passed five consecutive focused timing passes with long clips, repeated source-offset clips, processBlock playhead recording, selected direct-input suppression, drum receipt, and expression receipt checks. 2026-07-13 Arrangement AUTO LANES badge pass: Arrangement lane AUTO badges now count effective automation rows by scanning clip-aware expression summaries and de-duplicating by lane key per lane, so lane badges can reveal pattern, lane-local, and clip-local automation evidence instead of pattern-owned rows only. Release compile passed. Focused MIDI timing/source-policy regression showed one transient pattern-length mismatch on the first run after compile, then passed two consecutive reruns; the transient is documented as a timing-state watch item rather than hidden. 2026-07-13 Piano Roll AUTO LANES context pass: the compact Piano Roll automation preview now uses effective Arrangement-clip summaries when editing a selected non-drum Arrangement clip, so clip-local and lane-local CC/pitch-bend/pressure/sustain motion is visible instead of only raw pattern automation. Release compile passed via tools/codex-build-selftest.ps1; SPACEAGE_MIDI_RECORD_TIMING_ONLY=1 passed all six focused MIDI checks.
MIDI Progress Report
2026-07-13 expression recording receipt hardening pass: MIDI expression/automation recording now follows the same committed-state receipt rule as note and drum recording. Successful CC/expression captures no longer raise the UI recording-change flag immediately after enqueue; the commit path owns that signal. Expression commits also clear stale note/drum receipt fields so an automation capture cannot accidentally display the previous note or drum hit. Focused MIDI timing tests passed, including the new expression receipt stale-note regression. 2026-07-13 drum recording receipt race-hardening pass: Arrangement drum recording now reports the committed drum pad, step, and velocity instead of falling back to a vague automation/drum event summary. The live recording changed flag is now raised by the committed queue path for successful drum and melodic captures, reducing UI receipt races where the editor could consume a "recording changed" signal before the recorded event had actually landed. Focused MIDI timing tests passed, including long clips, repeated source-offset clips, processBlock playhead recording, selected direct-input host-spill suppression, and drum receipt after commit. 2026-07-12 MIDI Settings/live-lag diagnostic cleanup pass: MIDI Input/Hardware diagnostics now use compact single-line rows and shorter direct-timing language so SOURCE POLICY, DIRECT TIMING, DIRECT QUEUE, and routing facts do not draw on top of each other. MIDI Health now uses a shorter panel and compact cockpit rows to reduce bottom-edge cutoff risk. Live MIDI audit confirmed note-on/off monitoring is still rendered at sample 0 once SpaceAge receives the event; remaining DIN-vs-USB lag should be checked against AUDIO BLOCK latency and DIRECT QUEUE avg/max so hardware/interface delay is separated from SpaceAge queue delay.
2026-07-12 armed-lane recording rule pass: MIDI recording now refuses to start unless an Arrangement lane is explicitly armed. The editor no longer falls back to the selected destination lane or loose selected pattern, and the Piano Roll record tooltip now says selected clips and the visible Piano Roll are editing context only. The existing target resolver still selects an overlapped clip in the armed lane or creates a new clip/pattern in that lane when needed. Release compile of SampleSquadAudioTest succeeded after the change; no beta build was packaged.
2026-07-12 MIDI Health receipt-store visibility pass: the Settings MIDI Health cockpit now renders a QA STORE row from the processor-owned MidiProtocolQaReceiptStore. This gives the user a visible in-app summary of persisted append-only MIDI QA evidence instead of hiding the receipt ledger behind copied reports or project state. A Release compile of SampleSquadAudioTest succeeded after launching the Visual Studio developer environment; the compiled self-test executable did not complete within the two-minute timeout, so runtime self-test status for this pass is inconclusive rather than passed.
2026-07-12 read-only MIDI audit pass: a read-only subagent audit checked the current MIDI closeout story against the code/docs. The honest release posture is still "advanced MIDI 1.0 foundation" rather than "complete MIDI 1.0" until real-device receipts prove the hardware edge cases. Backend protocol plumbing is high-confidence for ordinary channel MIDI, expression preservation, guarded SysEx capture/restore, RPN/NRPN review, MIDI Learn storage, and import/export planning. Remaining product risk is customer-facing and hardware-facing: arrangement-first recording must feel obvious, AUTO LANES must stay visibly shared-PTN until clip/lane-local ownership exists, SysEx remains a guarded librarian rather than a universal editor, and output timing/import-export claims need evidence from real rigs.
Last updated: 2026-07-13
Executive Status
Backend MIDI 1.0 message recognition, preservation, and guarded routing are advanced, but the live Settings report is now the source of truth for tracked MIDI model status and current MIDI 1.0 closeout progress. It is not a substitute for QA pass/fail receipts or real-hardware validation.
2026-07-12 MIDI QA receipt project-ledger bridge pass: the processor now owns a durable MidiProtocolQaReceiptStore, serializes it to midiQaReceipts, restores it with project state, and exposes append/clear/read accessors for the future Settings receipt buttons. MIDI Health also renders the action queue as a visible QA ACTIONS row. The self-test now proves receipt append, incomplete receipt rejection, project-state round trip, saved-receipt status, and clear behavior without sending MIDI.
2026-07-12 MIDI QA receipt action-queue pass: added MidiProtocolQaReceiptActionQueue, a tested UI contract that turns all active closeout receipt templates into a renderable action list. The queue reports COMPLETE/SAVE/REVIEW counts, project-mutation count, MIDI-send count, all-MIDI-safe status, primary button label, structured payload, and plain-text report. COPY QA, COPY CLOSEOUT, full MIDI Protocol Coverage, MIDI Health reports, and structured payloads now expose the queue so the future Settings panel can render receipt actions without inventing state locally.
2026-07-12 MIDI QA receipt action-surface pass: added MidiProtocolQaReceiptActionState, a cold UI contract that maps receipt state to COMPLETE QA RECEIPT, SAVE QA RECEIPT, or REVIEW QA RECEIPT. Reports now expose whether the action can complete, save, or review, whether it mutates project state, and whether it sends MIDI. The contract is explicit: incomplete templates open missing-field capture, save-ready receipts append cold project evidence, and saved receipts are review-only.
2026-07-12 MIDI QA receipt store model pass: added a serializable MidiProtocolQaReceiptStore ledger model for project.midi.qaReceipts. It appends only save-ready PASS/FAIL/BLOCKED receipts, marks appended receipts as saved, derives latest-per-key counts without deleting older evidence, serializes/restores through toVar() / fromVar(), and rejects incomplete receipts. The MIDI Protocol Coverage and MIDI Health reports now distinguish the receipt store contract from the concrete store model and from actual saved QA proof.
2026-07-12 MIDI QA receipt store contract pass: MIDI Protocol Coverage and MIDI Health now export a QA receipt store contract summary. The contract names project.midi.qaReceipts as the durable path, persistentStateKey as the stable key, the required evidence fields, the append-only/latest-per-key history rule, the COMPLETE QA RECEIPT / SAVE QA RECEIPT / REVIEW QA RECEIPT actions, export inclusion, and the cold-safety boundary. This turns the next receipt-persistence implementation from a vague idea into a test-protected data contract.
2026-07-12 MIDI QA receipt persistence closeout pass: MIDI Protocol Coverage now exports a QA receipt persistence closeout summary. COPY QA, COPY CLOSEOUT, the full Protocol report, MIDI Health next steps, the full Health report, and structured payloads now report how many closeout templates exist, how many durable saved PASS/FAIL/BLOCKED receipts exist, how many templates remain unsaved, and what store/action is still missing. This keeps the reports honest: receipt templates are not saved QA proof until COMPLETE QA RECEIPT / SAVE QA RECEIPT writes a result, evidence, checker, timestamp, and references to durable project or exported QA state.
2026-07-12 MIDI QA run-order handoff pass: MIDI Protocol Coverage now owns a QA run order summary sorted by active closeout priority. The run order appears in COPY QA, COPY CLOSEOUT, the full Protocol report, MIDI Health next steps, the full Health report, and structured payloads. It names each closeout category, where to test it, route proof, safety class, first test, and proof cue so a tester can work the remaining MIDI closeout like an ordered checklist instead of reverse-engineering priority from diagnostics.
2026-07-12 MIDI Health critical-path handoff pass: MIDI Health COPY STEPS, the full Health report, and the structured Health payload now include the model-owned Critical path sentence. The compact next-steps report now names the current blocker category, owner surface, route-openability, QA state/evidence target, first action, and why it matters without forcing testers to open the deeper Protocol Coverage report.
2026-07-12 MIDI COPY CLOSEOUT receipt-readiness alignment pass: COPY CLOSEOUT now includes the same QA receipt readiness rollup as COPY QA, MIDI Protocol Coverage, and MIDI Health. The closeout copy remains the shorter release-audit/worklist packet, while still telling the tester whether the active closeout categories have receipt templates, save-ready receipts, missing fields, and hardware evidence gaps.
2026-07-12 MIDI Health receipt-readiness visibility pass: the cockpit-level MIDI Health next-steps report, full report, and structured payload now expose the same QA receipt readiness rollup as MIDI Protocol Coverage. A tester no longer has to dig into the deeper protocol object to see whether the remaining closeout categories have templates, save-ready receipts, missing evidence fields, or real-hardware proof gaps.
2026-07-12 MIDI QA receipt-readiness rollup pass: MIDI Protocol Coverage now exports a QA receipt readiness summary across all active closeout categories. It reports how many categories have templates, how many are save-ready, which missing fields still block proof, and how many real-hardware evidence rows remain. The report and COPY QA packet now state plainly that templates are scaffolding, not validation; saved PASS/FAIL/BLOCKED receipts are the proof layer.
2026-07-12 customer-facing MIDI closeout plan pass: MIDI Protocol Coverage now owns the concise remaining-work plan. Copied reports and structured payloads now describe the launch path as visible musician workflow: AUTO LANES hands-on editing QA, Hardware Passport bend/setup receipts, MIDI Learn conflict/feel review, guarded SysEx capture/restore proof, real-file import/export round trips, timing/live-lag validation, and evidence-backed release wording. True MPE, MIDI 2.0, clip-local/lane-local automation, and universal hardware editors stay future layers.
2026-07-12 closeout plan visibility pass: MIDI Health now shows the same customer-facing closeout plan as a visible CLOSEOUT PLAN row, and the Release self-test protects the copied MIDI Protocol Coverage report so the plan stays present in support/debug output.
2026-07-12 MIDI next-steps receipt handoff pass: COPY STEPS now includes the same QA receipt action language as the deeper MIDI Protocol reports. The copied handoff now carries route contract, safety boundary, receipt readiness/workflow, COMPLETE QA RECEIPT, the next action hint, and the next MIDI mission so a tester can move from copied instructions to the right closeout surface without hunting through the app.
2026-07-12 MIDI QA claim-boundary pass: COPY QA now includes both the customer-facing closeout plan and the safe public MIDI claim boundary. A pasted QA packet now reminds testers and release-note writers that SpaceAge can claim an advanced MIDI 1.0 foundation, but must not claim complete MIDI 1.0, true MPE, MIDI 2.0, effortless hardware tightness, device-accepted SysEx restore, or universal DAW interchange without saved receipts.
2026-07-12 MIDI QA evidence-prompt pass: COPY QA session templates now include an evidence-notes prompt for each closeout category. The prompt names the exact first test or recommended focus, so a tester filling PASS/FAIL/BLOCKED receipts has a concrete sentence to answer instead of a blank evidence field with no context.
2026-07-12 safe public MIDI claim pass: MIDI Protocol Coverage now owns a concise public-claim boundary. The copied report and structured payload allow "advanced MIDI 1.0 foundation" wording while blocking complete MIDI 1.0, true MPE, MIDI 2.0, effortless hardware tightness, device-accepted SysEx restore, and universal DAW interchange claims until saved receipts prove those exact promises.
2026-07-12 release-candidate validation ladder pass: MIDI Protocol Coverage now owns a single ordered proof ladder. Copied reports and structured payloads now distinguish Release self-tests/fixtures, visible UI closeout workflow, saved PASS/FAIL/BLOCKED receipts, real-file DAW round trips, real controller/interface/external synth/SysEx/bend/clock/live-timing checks, and public release-note claims based only on saved evidence.
2026-07-12 real-hardware validation trust boundary pass: MIDI Protocol Coverage now owns a dedicated real-hardware validation boundary. Copied reports and structured payloads now say SpaceAge-side MIDI reports, fixtures, receipts, queue plans, and self-tests prove internal intent only; launch trust requires saved PASS/FAIL/BLOCKED checks with real controllers, MIDI interfaces, DAW hosts, files, external synths, SysEx restore attempts, bend-range tests, clock/transport sync, and live timing observations.
2026-07-12 future protocol trust boundary pass: MIDI Protocol Coverage now owns a dedicated future-protocol boundary. Copied reports and structured payloads now say MPE-like multi-channel expression, preserved poly aftertouch, per-channel pitch bend, and timbre-style CC data are not true MPE or MIDI 2.0 support. True MPE requires zone policy, master/member channel ownership, per-note channel allocation/editing, synth response, import/export, and hardware validation; MIDI 2.0 requires UMP, profile/property exchange, device negotiation, and compatibility tests.
2026-07-12 live recording capture trust boundary pass: MIDI Protocol Coverage now owns the same record-time policy that MIDI Health has been reporting. Armed Arrangement lanes own live input; selected clips are editing focus; record-time MIDI captures notes plus editable expression, while setup payloads such as Bank/Program, RPN/NRPN, Data Entry, SysEx, clock/transport, and protected reset/channel-mode messages stay in review/setup flows.
2026-07-12 automation lane visibility trust boundary pass: MIDI Protocol Coverage now owns a visibility/discoverability boundary for AUTO LANES. Copied reports and structured payloads now say backend automation storage/playback is not enough; users must be able to discover, open, label, undo-edit, and understand shared PTN-owned automation separately from future clip-local or lane-local automation.
2026-07-12 MIDI control-map conflict trust boundary pass: MIDI Protocol Coverage now owns the map-collision side of MIDI Learn. Copied reports and structured payloads now say that mappings are product-trusted only when source, target, channel/device scope, pickup, curve/range, 7-bit vs 14-bit companion pairing, conflict status, duplicate source/target behavior, destructive ranges, and hardware/controller feel are visible and reviewed.
2026-07-12 QA receipt persistence trust boundary pass: MIDI Protocol Coverage now owns an explicit QA receipt persistence summary. Copied reports and structured payloads distinguish having session ids, state keys, receipt templates, and PASS/FAIL/BLOCKED vocabulary from having a saved QA pass with result, checker/timestamp, evidence notes, receipt refs, and blocking/follow-up decisions.
2026-07-12 real-file import/export trust boundary pass: MIDI Protocol Coverage now owns an explicit real-file round-trip summary. Copied reports and structured payloads distinguish fixture/self-test proof from release confidence with real DAW files, General MIDI/XG files, dense controller files, warning-heavy setup files, and exported stems opened in another DAW.
2026-07-12 timing/live-lag trust boundary pass: MIDI Protocol Coverage now owns an explicit timing/live-lag trust summary. Copied reports and structured payloads say that internal sample-offset preservation, scheduled hardware output, early live-input draining, and recorded compensation prove SpaceAge timing intent, but real felt-latency trust still needs buffer, interface/controller, MIDI Timing, and live-monitoring evidence.
2026-07-12 hardware setup wizard trust boundary pass: MIDI Protocol Coverage now owns the first-run external-hardware setup boundary. Copied reports and structured payloads now say a rig is product-trusted only through a visible Hardware Passport path: choose input/output, lane role, channel policy, confirmed test notes/setup cards, and saved receipts. Device visibility and templates are not enough, and no setup surface should silently send Program/Bank, RPN/NRPN, SysEx, clock, transport, or reset data.
2026-07-12 sync/transport trust boundary pass: MIDI Protocol Coverage now owns a dedicated sync/transport boundary. Copied reports and structured payloads now say MIDI Clock, Start, Stop, Continue, Song Position, and host/internal sync are trusted only when time authority, receive/send role, tempo source, chase behavior, loop/start policy, output device, and Hardware Passport consequences are visible. External devices following the clock still need loopback, listening, or manual evidence.
2026-07-12 setup-controller trust boundary pass: MIDI Protocol Coverage now owns a dedicated setup-controller boundary. Copied reports and structured payloads now say RPN, NRPN, Data Entry, Bank Select, Program Change, and protected channel-mode/reset messages are setup intent, not ordinary performance. These messages are trusted only in a visible MIDI PATCH or Hardware Passport context with confirmation, device/channel identity, undo-safe metadata, and hardware evidence; they should not become hidden AUTO LANES data, live-through traffic, or record-time performance edits.
Practical DAW-grade MIDI behavior has a broad first-pass implementation across recording, playback, import/export, expression, SysEx, and hardware recall.
Customer-facing MIDI workflow is no longer represented by a hand-written percentage. The MIDI PROTOCOL COVERAGE panel reports current MIDI 1.0 closeout progress from the tracked protocol-family blockers.
The remaining distance is mostly not "can SpaceAge understand the MIDI message?" It is "can SpaceAge make the message obvious, editable, safe, and confidence-building for the user?"
Scorecard Clarification
There are now two separate MIDI scorecards plus one human validation boundary:
- Backend protocol foundation: about 98-99% for MIDI 1.0 message recognition, preservation, guarded routing, import/export handling, SysEx storage/recall scaffolding, timing, and safety boundaries.
- Current MIDI 1.0 closeout progress: lower, and intentionally reported by the live
MIDI PROTOCOL COVERAGEpanel/report instead of hardcoded here, because this includes the visible setup flows, polish, validation, and confidence-building UI around the backend. - Real-hardware validation: separate from both percentages. A clean dashboard still does not prove a specific external synth accepted SysEx, timing, bend range, MPE-like expression, or setup data until the user sees device ACK evidence or records manual verification.
If a report says "MIDI backend," it should mean the first scorecard. If it says "MIDI 1.0 closeout progress" or "customer-facing MIDI workflow," it should mean the second scorecard. If it says "hardware accepted this," it needs a receipt, explicit ACK, or manual verification. Mixing those ideas made the completion estimate appear to move backward even though the backend did not regress.
Historical entries before the 2026-07-05 rename used the older MIDI EXPR label, and later entries used AUTO LANES / Shared PTN Data while ownership was still being built. The current customer-facing entry point is AUTO LANES; its owner selector and Source View explicitly name Shared PTN, Clip Local, or Lane Local.
The source-owned protocol coverage model now exports this distinction directly through midiOneCompletionStatusSummary and remainingMidiOnePerfectionSummary. Any visible status surface, copied report, or future Settings card should use those fields instead of inventing fresh percentages in prose.
Remaining MIDI 1.0 Perfection Items
These are the current MIDI 1.0 finish-line families still marked as product blockers or perfection work in the source-owned protocol coverage model. This list excludes true MPE and MIDI 2.0, which remain future protocol layers.
- AUTO LANES final editor polish and owner proof: Validate Shared PTN linking, Clip Local isolation, Lane Local ownership/layering, every doorway, Undo/Redo, playback, import/export preservation, direct drawing, ramps, smoothing/thinning, Light/Medium/Strong curve tools, and first-pass FAST/SLOW handles. The three MIDI owners are implemented; Motion Clips and general non-MIDI automation remain future architecture.
- Pitch bend and pressure trust: Validate pitch bend, channel pressure, poly aftertouch, and bend-range trust gates against real external synths, then promote untrusted destination/range states into hard playback/export warnings where needed.
- RPN/NRPN and channel-mode setup: Build a grouped RPN/NRPN review editor and hardware setup-template mapper. Keep channel-mode/reset messages protected until there is a deliberate confirmed policy.
- MIDI Learn completion: Finish direct control-click learn coverage, broader conflict browsing, richer high-resolution CC detail displays, and deeper curve editing beyond Slow/Linear/Fast.
- MIDI file import polish: Finish undo-safe full tempo/meter/key map adoption, setup-data decisions, per-channel mapping polish, and broader real-file validation.
- MIDI package and repair polish: Finish package import receipts, cancel edge cases, zip/package repair UI, visible import/repair flow, and broader real-project validation.
- Tempo, meter, and key conductor timeline: Add an undo-safe conductor timeline for meter and tempo/key map changes, then connect the existing full-map adoption policy to explicit reviewed mutation.
- Hardware setup wizard: Finish Hardware Passport creation, role selection, channel templates, controller/guitar/wind-controller recipes, device-specific repair flows, and polished test-note/timing receipts.
- SysEx device-specific librarian polish: Add live multi-dump batch capture/save, deeper checksum/device-id helpers, device-specific ACK/NAK dialects, restore-history filtering/export, and guided per-device restore scripts.
- Real-hardware validation: Test with real controllers, hosts, imported/exported files, external synths, SysEx restores, bend ranges, clock/transport, and timing alignment. This is separate from source-code completeness.
Latest Completed Work
2026-07-12 import conductor-map trust boundary pass: MIDI Protocol Coverage now owns an explicit import conductor-map trust summary. Copied reports and structured payloads say source tempo/meter/key maps can be inspected and receipted, first source tempo/key adoption is deliberate and narrow, and full tempo/meter/key map adoption remains review-only until an undo-safe conductor timeline exists.
2026-07-12 MIDI Learn mapping trust boundary pass: MIDI Protocol Coverage now owns an explicit MIDI Learn trust summary. Copied reports and structured payloads say that source capture, target binding, persistence, 14-bit companion CC merge, pickup, range, and curve rules prove a mapping exists, but the user still needs conflict review and in-context feel/range confirmation.
2026-07-12 SysEx restore trust boundary pass: MIDI Protocol Coverage now owns an explicit SysEx restore trust summary. Copied reports and structured payloads say that capture/vault/queue/receipt behavior is SpaceAge-side evidence only; external hardware acceptance still needs matching device identity plus ACK/NAK/WAIT/CANCEL response evidence, successful restore verification, or explicit manual confirmation.
2026-07-12 hardware bend-range trust boundary pass: MIDI Protocol Coverage now owns an explicit hardware bend-range trust summary. Copied reports and structured payloads say that raw MIDI 1.0 pitch bend is preserved as 14-bit center-based data, while external semitone-width trust requires a target lane, Hardware Passport, declared +/- bend range, and TEST BEND/manual evidence.
2026-07-12 automation ownership boundary pass: MIDI Protocol Coverage now owns an explicit automation ownership boundary summary. Copied reports and structured payloads say that
AUTO LANES / Shared PTN Dataedits shared pattern-owned rows, linked clips share those rows untilVARIANT, and clip-local/lane-local/Motion Clip/full Arrangement automation remains future architecture.2026-07-11 clean validation pass:
SampleSquadAudioTestnow exits cleanly after the latest MIDI backend closeout work. The run verifies the MIDI project readiness report, lane MIDI input channel note filtering, overlapping same-pitch MIDI import pairing for direct Piano Roll and split-lane import, Arrangement MIDI export/readiness paths, live lane MIDI output, channel-aware recording, expression recording, and the broader audio/export smoke tests. The remaining MIDI work is now back to product-facing polish and real-hardware proof rather than an active test-suite regression.MIDI file import now disables JUCE's automatic note-off pairing where SpaceAge needs source-faithful note ownership. SpaceAge pairs overlapping same-pitch notes with its own FIFO note stack so imported legato, repeated notes, and same-pitch overlaps do not get shortened or misassigned by
updateMatchedPairs.Armed-lane MIDI recording now applies the lane's MIDI input channel filter before committing note-on/note-off data. This closes the bug where a fixed-input lane could ignore the live channel policy during recording even though reports and readiness surfaces described the filter.
MIDI Health now measures SpaceAge's hardware MIDI output router queue age in addition to direct physical MIDI input queue age. Live external MIDI still uses the fast hardware-thru route, but copied Health/status reports can now show average/max output queue delay so testers can separate input-controller lag, SpaceAge output-router pressure, driver/device stalls, and ordinary audio-buffer latency instead of lumping them together as "MIDI feels late."
MIDI Health now reports the live recording capture boundary directly. The visible cockpit and copyable Health/Next Steps reports distinguish note recording plus editable performance expression from setup-review material, so Bank/Program, RPN/NRPN, Data Entry, SysEx, clock/transport, and protected reset/channel-mode data cannot be implied as ordinary record-time AUTO LANES capture.
Live MIDI expression recording now accepts only editable performance expression rows. Pitch bend, pressure, sustain, volume, pan, expression, mod wheel, and ordinary editable CC data can still be recorded into AUTO LANES; setup-review payload such as Bank Select, Program Change, RPN/NRPN selectors, Data Entry, and protected reset/channel-mode commands is preserved through import/review flows instead of quietly becoming record-time editable automation.
Live external MIDI forwarding now matches the protected-message policy. Incoming notes, bend, pressure, sustain, and ordinary performance CCs can still pass through an armed external lane, but Reset All Controllers, All Notes Off, All Sound Off, Local Control, Omni, Mono, Poly, Bank/Program, RPN/NRPN, and Data Entry stay out of automatic live-through. All Notes Off / All Sound Off can still clean up SpaceAge's internal voices when received; deliberate hardware reset/silence remains a confirmed Panic/setup action, not a hidden pass-through.
Protected channel-mode/reset rows now expose the same kind of structured safety metadata as RPN/NRPN setup cards. All Sound Off, Reset Controllers, Local Control, Omni, Mono, Poly, and related rows report
Cold copy/review, a no-clip/no-AUTO/no-live-through queue policy, and a separate-confirmed-hardware-policy requirement so future UI cannot accidentally treat them like ordinary performance automation.MIDI PATCH RPN/NRPN setup-card summaries now expose explicit safety, queue-policy, and Hardware Passport requirement fields. RPN cards can say they are hot only after explicit confirmation and a selected Passport/output; NRPN cards can say they remain warm review/Passport-knowledge until that exact device-specific selector is defined as queue-safe. This reduces scattered UI condition guessing and helps the future setup wizard speak from the same model.
AUTO LANES project/readiness reports now include an explicit expression-response confidence line. Pitch bend, pressure/aftertouch, and CC74/timbre rows are no longer reported as merely "present"; reports distinguish preserved/exportable MIDI data from proven target-instrument response, so hardware and synth testing can focus on the musical result instead of pretending storage alone proves behavior.
AUTO LANES selected-lane scope now has a first-pass draggable curve-handle workflow for continuous rows. FAST and SLOW handles appear in the selected-lane preview when curve shaping is valid; dragging a handle chooses Light/Medium/Strong shaping and releasing arms the existing preview-confirm
APPLY CURVEpath. This preserves the shared-PTN ownership warning, undo/safety model, and no-MIDI/no-routing/no-hardware boundary instead of creating a second hidden mutation path. A standalone Release compile passed after this change.MIDI Protocol Coverage row footers no longer inline long hardware evidence cues. Rows that need real-hardware proof now say
HW proof needed - see EVIDENCE / COPY QA, while the full cue remains in the evidence card and copyable QA/protocol reports.The MIDI Protocol Coverage
RELEASE GATEcard now uses a short visible status instead of the full forensic release-gate summary. Blocked states show progress percentage, blocker count, next category, route proof, and QA receipt state; clear states show blocker clearance plus remaining hardware-proof and future-family counts. The full release-gate wording remains in copyable reports.The MIDI Protocol Coverage
QA CHECKScard now shows only the next QA action, evidence target, manual run cue, and copyable-checklist reminder. The full QA checklist still exists inCOPY QA, but route-openability, schema, and receipt detail no longer leak into the fixed-height visible card.The MIDI Protocol Coverage
EVIDENCEcard now uses two concise lines: a plain warning that SpaceAge-side MIDI 1.0 closeout is not real controller/host/file/hardware proof, plus the next hardware evidence cue. Full real-hardware validation summaries remain in copyable reports instead of being squeezed into the fixed-height visible card.The visible MIDI Protocol Coverage
NEXT CLOSEOUTcard was simplified so it reads like an actionable QA cockpit instead of a compressed internal receipt dump. It now shows the next focus, next test, route/proof status, hardware-evidence cue, and a reminder that full receipt details remain in the copyable MIDI Protocol reports. Manual run steps and verbose critical-path receipt/schema details remain available in copyable reports rather than being drawn directly in the panel.The MIDI Health panel now mirrors that same visible-depth rule: its live row says
NEXT FOCUSand uses the concise closeout focus summary, whileCOPY CLOSEOUTstill preserves the verbose critical-path audit text for QA.The MIDI Health
NEXT MISSIONrow was shortened to action, evidence target, safety boundary, and hardware proof. Receipt schema/persistence detail remains in the copyable reports instead of being squeezed into the live row.The visible MIDI Health panel now collapses the receipt-schema block into one practical
QA RECEIPTline. Full persistent-state, receipt-schema, snapshot, save-readiness, and workflow details remain inCOPY QA/COPY CLOSEOUT.The visible MIDI Health panel now keeps route contracts, safety maps, and route audits out of the cockpit. Those forensic details still exist in copied reports, while the live panel focuses on next focus, next test, route, proof, hardware evidence, safety, QA, receipt, and mission.
The visible MIDI Health panel also removes separate
NEXT EVIDENCEandQA RUN STEProws because that guidance is already summarized byNEXT MISSIONand preserved in copied QA/closeout reports.The visible MIDI Health panel now keeps only the compact
AUTO OPSrow for AUTO LANES operational readiness. AUTO doorway instructions and full AUTO closeout prose remain in copied Health/AUTO reports instead of being repeated in the live cockpit.The visible MIDI Health panel now shows the raw
LATENCYrow only when high audio-block latency or direct physical MIDI queue lag needs attention.LIVE FEELremains visible as the main musician-facing latency summary, and full latency details stay in copied reports.The visible MIDI Health panel now keeps
LIVE FEELvisible as the performance-confidence headline but showsFEEL ACTIONonly when high block latency or direct physical MIDI queue lag needs attention.The visible MIDI Health panel now shows
MIDI IN WHYonly when MIDI input has an active warning. Healthy routing detail remains in copied reports instead of consuming live cockpit space.The visible MIDI Health panel now keeps
SYNC INas the always-visible sync heartbeat, showsSYNC TRUSTonly when sync traffic exists or is blocked, and reservesSYNC NEXT/SYNC POLICYfor actual sync warnings or action states.The visible MIDI Health panel now keeps SysEx snapshot counts in the
HARDWAREsummary and showsSYSEX RESTOREonly after restore activity has a receipt or needs attention.MIDI Health layout now reserves vertical space from the same conditional-row rules used by the visible cockpit. Warning-only rows no longer leave dead space when calm, and repair buttons stay aligned when warning rows appear.
MIDI Health layout now counts always-visible rows first, then adds optional rows by the same conditions used when drawing them. This removes a fragile old magic-total/subtraction pattern from the panel layout.
The MIDI Health
FIX NEXTtooltip now uses action/test/route/safety/hardware cue wording instead of embedding the full QA receipt schema. Full receipt and persistence detail remain in copied MIDI Protocol/Health reports.The MIDI Protocol Coverage
OPEN NEXTtooltip now includes the same model-owned next-test sentence as MIDI HealthFIX NEXT, so both safe-door buttons preview the same practical check before opening a setup surface.The MIDI Protocol Coverage
NEXT CLOSEOUTcard now shows the next focus, next test, route proof, hardware cue, and copyable-report reminder. Longer route/manual-run details remain in copied MIDI Protocol reports instead of being squeezed into the fixed card.The MIDI Protocol Coverage closeout checklist now keeps visible rows to blocker, reason, owner surface, first action, and copyable-report reminder. Route-openability flags and receipt schema details remain in COPY QA / COPY REPORT.
The MIDI Protocol Coverage
PRIORITY QA MAPnow keeps visible rows to owner surface, recommended focus, first action, and copyable-report reminder. Route-openability flags and receipt schema details remain in copied reports.AUTO LANES launch-closeout wording now treats shared PTN automation as the current launch contract instead of implying future clip/lane ownership is a present blocker. Empty projects ask the tester to create one shared PTN row from Piano Roll AUTO, an Arrangement
AUTO+badge, MIDI TASKS, or Settings; populated projects define launch proof as edit, undo, playback, import/export, and VARIANT-warning behavior.AUTO LANES project summaries now use more musician/tester-facing language. Visible reports say rows have
visible editor tools, needfinal hands-on QA, or need pitch-benddestination/range checks, instead of exposing developer shorthand such as first-pass, launch-polish, or trust gaps in the live cockpit.The visible MIDI Protocol Coverage score labels now say
TRACKED MODEL ROWSandMODEL READY / UI PENDINGinstead of implying the lower-level MIDI backend itself is the same thing as the dashboard denominator. The copyable reports still preserve the detailed model/backend language where it is useful for QA.MIDI Protocol Coverage generated reports now use the same
tracked model rows/model-ready UI-pendinglanguage as the visible panel. The lower-level MIDI 1.0 backend foundation remains described separately as the high-90s recognition/routing/preservation/safety layer.AUTO LANES row/lane vocabulary was tightened inside the editor panel and model-owned copied reports. The visible controls now say
CREATE ROW,DELETE ROW,FIT ROW,ROW VIEW, andSELECT ROW; copied MIDI closeout reports now describe selected rows and switch rows instead of selected lanes and switch lanes. Arrangement lane language remains intact where it truly refers to compositional lanes, instruments, mixer routing, or future Arrangement-lane-local automation.AUTO LANES preflight reports now finish the row/lane cleanup in their empty state and detail section: selected automation now reports as
Selected row, and the detailed list is headedROWS, notLANES. Internal C++ type names can still say expression lane, but the musician-facing report no longer collides with Arrangement lanes.AUTO LANES insert-value tooltip now says
selected AUTO LANES rowinstead ofselected lane, while Hardware Passport and external-route copy still says lane where it truly means an Arrangement lane/instrument route.AUTO LANES project summaries now say
AUTO LANES rows,visible editor rows,final QA rows, andshortened previewsinstead of the olderlane(s),first-pass editor,launch-polish, andtruncated previewshorthand. The same counts remain available, but the live report now reads like user-facing QA.AUTO LANES selected-pattern preflight text now uses the same visible-editor/final-QA row language instead of preserving the old first-pass/launch-polish shorthand.
AUTO LANES row/lane vocabulary was tightened at the visible doorway layer. Runtime tooltips, Piano Roll empty-state copy, Arrangement lane signal menu text, shortcut help, and
Answers_for_Shane.mdnow distinguish Arrangement lanes from AUTO LANES rows, so the user-facing editor no longer teaches that pattern-owned controller/bend/pressure rows are the same thing as compositional lanes.AUTO LANES model/report language was tightened one layer below the GUI. Current source-generated protocol reports, blocker labels, project summaries, copied receipts, and workflow docs now use
AUTO LANES/AUTO LANES rowsfor the visible workbench, while preservingMIDI expressionas the lower-level stored performance-data concept. Historical changelog entries may still mention the olderMIDI AUTOname when describing past work.AUTO LANES doorway wording was tightened so the UI teaches ownership before the user edits. Piano Roll strip copy, MIDI TASKS/Settings tooltips, MIDI closeout navigation messages, MIDI Setup safe-door report text,
Answers_for_Shane.md, and the glossary now sayAUTO LANES / Shared PTN Datawhere ambiguity could imply clip-local or lane-local automation. The compactAUTObutton label remains for space, but its tooltip names the shared-pattern boundary.Arrangement lane
AUTO/AUTO+badge tooltips and MIDI Health automation visibility text now state the same ownership rule: AUTO LANES are pattern-owned MIDI automation today. The badges are convenient doorways into the selected clip's PTN/source context, not true clip-local or Arrangement-lane-owned automation yet.AUTO LANES editor copy was cleaned so the user-facing panel no longer mixes the older
MIDI AUTOname with the current doorway. Lane badge tooltips, editor statuses, tooltips, copy-report text, and shared-pattern warnings now describeAUTO LANESrows/items while still preserving the lower-levelMidiExpressionimplementation name where it belongs in code.AUTO LANES header language now leads with
SHARED PTN DATAinstead of generic pattern automation. The panel badge, instruction line, and focused-row label all reinforce that the editor changes the underlying PTN until the user intentionally creates aVARIANT.MIDI imports now keep a latest import receipt after the popup closes. Selected-pattern imports, review-wizard commits, split-to-lanes imports, inspect-only reviews, and MIDI stem-package imports update the editor's latest import receipt slot.
MIDI TASKSnow exposesCopy Latest MIDI Import Receiptafter one exists, and also exposesCopy Latest MIDI Export Receiptbeside its selected-pattern export action. Copying either receipt remains cold and sends no MIDI, changes no routing, changes no project data, writes no file, and touches no external hardware.MIDI stem package exports now update the same latest export receipt slot as ordinary
.midexports. After a package export, the ArrangerRENDERpopup can copy a completion receipt that names the package folder, manifest, README, checksums file, warning-review state, progress-window receipt text, and the model-owned export plan. Copying that receipt remains cold: it sends no MIDI, changes no routing, changes no project data, writes no file, and touches no external hardware.The Arranger
RENDERpopup now exposesCopy Latest MIDI Export Receiptafter a MIDI export has happened. The menu item stays disabled until SpaceAge has a stored MIDI export receipt, then copies the latest completion evidence without sending MIDI, changing routing, changing project data, writing a file, or touching external hardware.Single-file MIDI exports now store a latest completion receipt in the editor after pattern, clip, or Arrangement MIDI writes. The receipt records the action, success/failure, full file path, file existence, file size when available, review requirement, and the model-owned export plan. Stem packages already had a progress-window receipt path; this gives ordinary
.midexports the same evidence foundation for a future visibleCOPY LAST EXPORTaffordance.MIDI export previews now expose a cold
COPY REPORTaction. The report is generated byMidiExportJobPlan, includes readiness, recommended filenames/folders, export rows, lane warnings, plan warnings, and a safety line proving that copy-report does not send MIDI, change routing, change project data, write a file, or touch external hardware. This gives support/QA/collaborators a durable export receipt before any warm file write.Warning-bearing MIDI exports now require an explicit second gesture before writing files. The first click arms the selected export path and changes the button to
CONFIRM EXPORTorCONFIRM STEM EXPORT; clean exports still go directly to the file/folder picker. This keeps warnings from being merely visual and gives pitch-bend trust, hardware-route, and lane-level cautions a real acknowledgement step.MIDI export preview rows now make warnings more visible. Warning-bearing rows draw an explicit
REVIEWbadge, and the main export buttons switch toREVIEW & EXPORT/REVIEW & EXPORT STEMSwhen the job plan has warnings. This keeps pitch-bend trust, hardware-route, and lane-level export cautions from hiding in the long detail text.MIDI export job plans now propagate lane-level warnings back into the main single-file export row. If an Arrangement lane has pitch-bend trust warnings, external hardware route warnings, or similar lane-specific MIDI concerns, the whole-file export choice now carries that caution instead of relying only on the stem/lane rows or preview text.
MIDI AUTO curve shaping now exposes a user-facing curve amount selector.
APPLY CURVEstill uses the preview-confirm safe path, anchors endpoints, changes shared PTN automation only, and sends no MIDI, but users can now choose Light, Medium, or Strong shaping instead of accepting a hidden fixed intensity. First-pass FAST/SLOW graph handles now select the same safe curve-shaping path from the selected-row scope.MIDI Protocol Coverage and MIDI AUTO per-lane reports now separate the current launch surface from the future ownership model more cleanly.
AUTO LANES / Shared PTN Datais the current shared-pattern automation editor; remaining launch polish is first-pass curve-handle QA/refinement and real-device bend-gate QA. True clip-local and lane-local automation remain a future architecture layer, not a hidden blocker for MIDI 1.0 shared-PTN closeout.MIDI closeout wording now uses the current customer-facing automation doorway consistently:
AUTO LANES / Shared PTN Data. Lower-level code and reports may still refer to MIDI expression when they mean stored performance data, but menus, action labels, the release wording checklist, andAnswers_for_Shane.mdnow teach the same ownership boundary: current automation edits are shared PTN data unless the user makes aVARIANTfirst.Remaining live UI safe-door tooltips and copied receipt titles now say
AUTO LANES / Shared PTN Data. This keeps Settings, MIDI Setup, Piano Roll, and copied reports aligned with the shared-pattern ownership model.Live MIDI feel reporting now says the quiet part clearly: host/plugin MIDI keeps native in-block offsets, direct physical MIDI enters at the earliest drain-block sample, and direct physical MIDI can still wait until the next audio callback because it arrives off the audio thread. That means the first real fix for felt live lag is still buffer/driver/interface/controller diagnosis, not fake musical compensation.
MIDI AUTO pitch-bend trust now has a structured
MidiPitchBendTrustGatemodel instead of only prose badges. The gate reports whether raw 14-bit bend is preserved, whether the destination is internal or external, whether a Hardware Passport exists, whether a declared range exists, whether TEST BEND/manual verification has happened, and whether playback/export should be treated as trusted or cautionary. Selected-lane reports, per-lane copied reports, structured lane payloads, and MIDI export readiness now include that gate summary; remaining launch work is real-device QA and hard playback/export warning integration.MIDI AUTO switch-edge drags and nudges now preflight the musical block boundary before mutating data. A switch edge can be trimmed within its current neighboring interval, but the editor refuses moves that would land on another edge or cross over an adjacent edge; group edge moves get the same protection. The visible refusal copy now explains the switch-block problem instead of falling back to a generic point collision.
MIDI Health live-input wording now follows the Arrangement lane model explicitly. When a lane is armed, the report distinguishes Drums-lane pad mapping from melodic-lane instrument monitoring, says recording commits into that armed lane's target clip/PTN, and repeats that selected clips/lanes are edit context rather than a hidden live-performance destination.
MIDI Health now exposes a separate model-owned
liveRecordingOwnershipSummaryfield. Reports and future UI can state the live performance owner without re-parsing destination/mode strings: armed Arrangement lane wins, Drums lanes use pad mapping, melodic lanes use the lane Instrument, and clip selection remains editing focus rather than a live-input override.MIDI Health now shows that ownership rule as a visible
REC OWNERrow, so users can confirm where live MIDI monitoring/recording belongs without copying a report.MIDI recording status and transport hover copy now lead with the armed Arrangement lane when one exists. The UI no longer describes recording as primarily targeting the visible Piano Roll or selected pattern, then appending the armed lane afterward; selected clips are called out as edit context only.
MIDI AUTO now says
CURRENT MODE: SHARED PTN AUTOMATION ONLYin the visible editor and copied report. This keeps the dormant clip-local/lane-local scaffolding from being mistaken for a customer-facing feature before that ownership layer is actually promoted and routed.MIDI AUTO visibility summaries now explicitly say Arrangement lane AUTO badges focus the selected clip's pattern/source context; they do not make MIDI AUTO lane-owned. This keeps the useful lane doorway from teaching the wrong ownership model.
MIDI AUTO now exposes a launch closeout summary. Reports, MIDI Health, and structured expression payloads can distinguish no automation to judge, first-pass editable lanes, launch-polish lane count, highest test focus, shared-PTN VARIANT warnings, and the future clip/lane-local automation boundary.
Arrangement lane AUTO badge tooltips now use the same real-clip pattern/source-context wording as the runtime guard. Empty lanes do not show the door; lanes with clips can show
AUTO+; lanes with existing shared PTN automation showAUTO/AUTO N.Armed-lane live MIDI thru to external hardware now uses an immediate router path instead of the sequenced-playback scheduling lead time. Sequenced Arrangement/clip playback still uses sample-offset scheduling for timing stability; live controller performance avoids the extra lead-time delay where possible.
Live host/plugin MIDI output was audited beside the hardware-thru fix. Live controller messages are queued before
flushPendingMidiOutputEvents()runs in the same audio block, lane-1prevents accidental hardware leakage, and internal synth voices start at the incoming sample offset. Remaining perceived live latency should now be chased through audio-device buffer size, direct-device queue age, and heavy instrument start cost rather than an obvious extra SpaceAge routing delay.MIDI Health now exposes a model-owned
livePerformanceNextActionfield beside the live-feel verdict. The visible Health panel, copied Next Steps report, full Health report, and structured payload can say whether to lower the audio buffer, compare HOST ONLY vs DIRECT ONLY, fix SoundFont prepared-voice pool issues, or investigate driver/interface/controller monitoring before touching musical timing.MIDI Timing now reuses the same model-owned live-feel next action in both the visible Timing panel and copied Timing preflight report. Recorded-timing alignment no longer quietly implies every feel problem should be solved by loopback compensation; it first points the user toward audio buffer, direct-route comparison, SoundFont voice pool, or driver/interface checks when those are the better next move.
MIDI Timing evidence wording now says recorded-timing alignment is a recording-alignment/compensation estimate, not a live-monitoring latency cure. The app can still use alignment for recorded-event timing, but live playing feel must be separated from audio-buffer, driver/interface, controller, direct-route, and instrument-startup latency first.
Hardware Setup and Hardware Passport guidance now use the same distinction: test notes prove the routed hardware can be heard, live monitoring must feel right first, and MIDI Timing is framed as recorded-event alignment rather than a blanket cure for controller lag.
MIDI Timing panel labels, confirmations, warnings, and copied reports now use
recorded-timing alignmentwording wherever the user is making or reviewing compensation. Internal record/class names can still say calibration, but the musician-facing workflow teaches: first make live monitoring feel right, then align recorded events.MIDI Protocol Coverage status now separates the high-90s lower-level MIDI 1.0 backend foundation from the broader dashboard meter that includes UI, reporting, safety, receipts, and hardware-evidence work. This prevents the progress report from looking like MIDI regressed when the denominator expands.
MIDI Protocol Coverage's Hardware Output Timing family now says
recorded-timing alignmentinstead ofcalibration, including readiness, Passport records, and apply/realign polish. This keeps copied protocol reports aligned with the musician-facing MIDI Timing page.MIDI Timing's clear action now says
CLEAR ALIGNinstead ofCLEAR CAL, including confirmation copy and copied reports, so the page no longer mixes old calibration wording with the recorded-alignment workflow.Answers_for_Shane.mdnow explains the current MIDI AUTO visibility path accurately: Piano Roll AUTO, MIDI TASKS, Settings, and ArrangementAUTO/AUTO+lane badges. It also states thatAUTO+requires a real clip/pattern context and still edits shared PTN data, not lane-owned automation.The compact MIDI Protocol Coverage status line now appends the current blocker-family summary, not just the next focus. Copied status reports therefore name all remaining customer-facing MIDI 1.0 closeout blockers in one place.
MIDI automation now has a shared code vocabulary for ownership modes.
MidiAutomationOwnershipandMidiAutomationIdentityname the three intended storage promises: shared pattern data, future clip-local data, and future lane-local data. The current editor still edits shared PTN data only, but the codebase now has a clean landing zone for the next automation ownership layer instead of relying on scattered strings.MIDI AUTO now has a model-owned visibility and ownership summary. Copied MIDI AUTO reports, MIDI Health next steps, full Health reports, and structured payloads can all say where automation is visible today, which entry points open it, and that current edits are shared PTN data until clip-local or lane-local automation is explicitly promoted.
Dormant clip-local and lane-local MIDI expression containers now exist beside the current shared PTN expression array. They have read helpers, project reset cleanup, removed-clip cleanup, and separate project save/load property names, but they are not yet routed into playback or the editor. This is intentional scaffolding for the next automation layer, not a customer-facing feature claim.
Arrangement-context automation now has effective-event read helpers that can compose shared PTN automation with future lane-local and clip-local overlays. The existing editor/playback behavior remains shared PTN data today because the overlay containers are not yet user-editable or playback-routed, but the code now has a single seam for the eventual "what automation does this clip/lane actually hear?" question.
Piano Roll automation is now deliberately visible as an
AUTO LANESstrip below the chord lane. Empty-state copy says where automation lives and how to create the first lane, while the top-row button now readsAUTOorAUTO Nto show whether the selected pattern already contains shared PTN MIDI automation. MIDI TASKS, Settings safe-door navigation, the Arranger lane signal menu, copied reports, and the full editor title now use alignedAUTO LANES / Shared PTN Datadoorway language.Arrangement lane badges now show a separate compact
AUTOindicator when a lane contains placed material whose pattern owns MIDI automation. The indicator no longer steals theSlane-command button, so L/S/V keep their meanings while automation becomes discoverable from the Arrangement Canvas.Arrangement lane
AUTObadges are now direct MIDI AUTO doorways. Clicking the badge selects the lane, focuses an existing real clip on that lane when possible, and opens AUTO LANES through the same shared PTN warning path as the Signal menu.Direct physical MIDI queue-age diagnostics now reset whenever the direct input device set changes or is cleared. The MIDI Health report therefore describes the current controller/setup instead of preserving stale worst-case latency spikes from an older hardware session.
VARIANT now tells the user when AUTO LANES are copied into the new independent pattern. The backend already copied MIDI expression payloads; this pass makes the safety contract visible so the current independence workflow is not mistaken for true clip-local automation.
AUTO LANES editor copy now uses consequence-first ownership language. The header badge says
SHARED PTN DATA, the instruction line tells the user to useVARIANTbefore editing when one clip should change without changing linked clones, and the evidence strip explicitly says AUTO LANES does not prove clip-local automation or external hardware acceptance.AUTO LANES doorway labels now use the same ownership warning before the user reaches the editor. MIDI TASKS, the Arrangement lane signal menu, Settings safe-door tooltip, and Piano Roll AUTO tooltip now point to
AUTO Lanes / Shared PTN Data...instead of the vaguer generic MIDI automation wording.MIDI closeout QA now exposes paste-ready receipt templates alongside unsaved receipt snapshots, save-readiness checks, persistence state labels, save-enable booleans, button labels, and next-action hints. Protocol Coverage and MIDI Health now both expose
nextCloseoutQaReceiptStateLabel,nextCloseoutQaReceiptCanSave,nextCloseoutQaReceiptActionButtonLabel, andnextCloseoutQaReceiptNextActionHint, so copied QA/session reports and future UI badges can show the exact fields a future saved PASS/FAIL/BLOCKED receipt needs without pretending the test has already passed.MIDI Health and MIDI Protocol Coverage now display/copy the same QA receipt action contract: label, enabled yes/no, and next-action hint. This is still a model-owned closeout aid, not saved QA persistence yet.
MIDI Protocol Coverage now exposes a model-owned release-gate summary. MIDI Health can state whether MIDI 1.0 customer-facing closeout is blocked, which category blocks it next, whether the action is cold/warm/hot, whether a route is proven, whether a QA receipt is still unsaved, and whether real hardware proof is required.
MIDI Health action and copy surfaces now reuse the same release-gate summary.
FIX NEXT,COPY QA,COPY CLOSEOUT, full Health reports, and structured Health payloads no longer require the reader to infer release readiness from scattered route, safety, QA, and hardware-proof rows.MIDI Protocol Coverage now shows the same model-owned release-gate summary as a visible dashboard card. The on-screen panel, copied QA text, copied closeout text, MIDI Health, and structured payloads now agree on the current release gate instead of scattering the answer across separate counters.
MIDI Protocol Coverage and MIDI Health now expose
releaseGateBlockedandreleaseGateStatusLabelin their model payloads. UI code and support exports can ask the MIDI model whether the gate is blocked instead of re-deriving release readiness from blocker counters in each panel.MIDI Protocol Coverage blocker categories now expose a persistent QA state key and schema summary beside their QA evidence line. The next closeout cockpit, copied QA text, copied closeout text, Health reports, Protocol reports, and structured payloads can now point to the same state target, such as
midi.closeout.qa.midi_auto_final_editor, with result valuesPASS/FAIL/BLOCKEDand fields for notes, checker, time, receipt references, and blocked reason.MIDI Protocol Coverage compact status paths now carry the same persistent QA state target as the longer QA templates.
MIDI status, critical path, closeout checklist, and owner-surface checklist summaries now keep the proof target and storage target together, so the shortest reports remain actionable.MIDI Protocol Coverage and MIDI Health payloads now expose
nextCloseoutRouteProofStatusandnextCloseoutActionIsDirectOpenable. The future MIDI cockpit can distinguish direct buttons from breadcrumb/manual routes, status-only rows, and unwired gaps without parsing the route-proof sentence.MIDI Protocol Coverage and MIDI Health structured payloads now expose top-level next-closeout cockpit fields: category name, action surface id, action label, route kind, safety class, and first hardware evidence cue. Future Settings buttons and QA/support cards can wire directly from model data instead of walking blocker-category arrays.
MIDI Protocol Coverage and MIDI Health structured payloads now expose
nextCloseoutFirstHardwareEvidenceCueas its own model field. Future Settings cards, support exports, QA checklists, or assistant-style helpers no longer need to parseMIDI status:prose just to find the first hardware-proof cue.MIDI Health plain-text reports now surface
Next MIDI missionin the top closeout block, before the long nested Protocol Coverage section. A tester reading only the first screen of the Health report can still see the next action, the route/safety/QA context, and whether hardware proof is required.MIDI Protocol Coverage status summaries now include the first concrete hardware evidence cue when the next closeout category needs real-world proof. The short
MIDI status:line no longer stops at "hardware proof rows exist"; it can name the first useful evidence type, such as TEST BEND listening, device response, loopback, test phrase, or manual verification.MIDI Health structured payloads now expose
nextCloseoutMissionSummaryalongside the existing next test/route/safety/QA fields. Future Settings cards, support exports, or QA tooling that read the health model can get the same hardware-proof mission line as the visible Protocol Coverage panel and copied reports.MIDI Protocol Coverage
COPY QAandCOPY CLOSEOUTnow include the same model-ownedNext MIDI missionline as the full protocol report. Short copied reports no longer lose the hardware-proof instruction when the next closeout category requires evidence from TEST BEND listening, device response, loopback, test phrase, or manual verification.MIDI Protocol Coverage
Next MIDI missionnow carries hardware-proof cues when the next closeout category requires real-world validation. The mission line no longer says only where to click and what QA step to run; it also says when hardware evidence such as TEST BEND listening, device response, loopback, test-phrase, or manual verification is required.MIDI AUTO pitch-bend lane summaries now expose a structured
pitchBendTrustLabelin their model payload. Reports no longer have to infer trust state from prose: they can read whether raw 14-bit bend is preserved, whether a destination is missing/ambiguous, whether a Hardware Passport/range exists, and whether external bend trust still needs TEST BEND/manual verification.MIDI AUTO closeout wording now distinguishes existing direct hand-shaped selected-lane scope drawing from first-pass FAST/SLOW curve handles and future deeper curve work. The protocol coverage report, per-lane editor plans, copied MIDI AUTO reports, and self-test guard now stop treating basic hand-shaped drawing as missing; the remaining launch-polish item is curve-handle QA/refinement and durable playback/export bend-range gates beyond first-pass cues. Clip-local and lane-local automation are future ownership architecture, not the current shared-PTN MIDI 1.0 closeout target.
MIDI Import Wizard Preview
COPY REPORTnow copiesMidiImportApplyPreview::toPlainTextReport()through the shared cold-copy helper instead of copying rendered review text. The preview report is now model-owned, includes the next import test, and explicitly says the copy action sent no MIDI, changed no routing, changed no project data, and changed no external hardware.MIDI import receipt popups now include a
COPY RECEIPTbutton that copies the model-owned receipt through the shared cold-copy helper. The copied text says it sent no MIDI, changed no routing, changed no project data, and changed no external hardware while preserving the same summary/next-check/action/warning report shown in the popup.MIDI import apply results now expose a reusable
plainTextReportthat includes summary, next receipt check, counts, reviewed source maps, action lines, and warnings. The styled receipt popup now renders that model-owned report instead of rebuilding its own partial text.MIDI import receipts now include a model-owned
Next MIDI import receipt check:line and the styled receipt popup shows it directly under the summary. Applied imports tell the user whether to verify lanes/channels/timing, MIDI AUTO expression, MIDI PATCH/SysEx Vault setup rows, or warning cleanup before saving.MIDI Import Apply Preview reports now include a model-owned
Next MIDI import test:line. Warning-heavy imports point toward disposable-target verification, setup/SysEx imports point toward receipt plus MIDI PATCH/SysEx Vault review, split-to-lanes imports ask for lane/channel/clip timing checks, and expression imports point the tester to MIDI AUTO verification.MIDI export readiness summaries now include a model-owned
Next MIDI export test:line. Empty exports point the user toward adding/selecting MIDI material, pitch-bend exports prioritize bend-trust review, warning exports ask for warning review plus re-open validation, full Arrangement exports ask for whole-song plus lane-stem handoff testing, and clip/pattern exports ask for focused re-open checks.MIDI AUTO/AUTO LANES project summaries now include a model-owned
Next AUTO LANES test:line. The line is derived from the current project's actual rows, prioritizing hardware bend verification/range gaps, switch-block rows, pressure rows, preview-transform rows, controller rows, and review-only setup rows instead of giving a vague "automation polish remains" instruction.MIDI AUTO lane/editor plans now carry explicit
usableNowLabel,remainingPolishLabel, andownershipBoundaryLabelfields. Selected-lane reports and lane rows can now say what works immediately for that lane, what still belongs to launch polish/future automation architecture, and whether the data is PTN-owned, review-only setup evidence, or destination-trust-sensitive pitch bend.MIDI Protocol Coverage blocker categories now carry explicit
Usable nowandRemaining polishsummaries. The AUTO LANES Final Editor category can now credit selected-pattern MIDI AUTO lane creation, point/ramp drawing, direct hand-shaped selected-lane scope drawing, first-pass FAST/SLOW curve handles, visible point and switch-block editing, guarded switch-edge crossing/collision validation, copy/cut/paste/delete, nudge, undo, preview-confirm smoothing/thinning/curve transforms, PTN ownership cues, and first-pass bend/switch trust cues while still naming the honest remaining launch work: curve-handle QA/refinement and durable playback/export bend-range gates. Clip-local and lane-local automation are future ownership architecture.MIDI Protocol Coverage now has a model-owned
Route proof:summary for the next closeout action. The visible Protocol Coverage card, MIDI Health cockpit, copied closeout report, plain-text report, and structured payload can now say whether the next route is a true direct opener, a breadcrumb/manual path, a status-only row, or an unwired gap.MIDI Protocol Coverage row rendering now surfaces per-family route proof and hardware-proof-needed status in the visible rows. The panel's paint, hover, click, and scroll row math now share the same row height and Evidence-card spacing, so the visual row and the actionable hit target stay aligned.
MIDI Protocol Coverage blocker categories now aggregate real-hardware proof counts. Copied QA session templates and blocker category summaries can now show when a closeout category includes rows needing listening, device-response, test-phrase, or manual-verification evidence, and when any of those rows are hot hardware-affecting actions.
MIDI status summaries now include the next closeout route-proof state plus real-hardware validation row counts. This keeps future progress reports anchored to actual release gates instead of only dashboard percentages.
The short finish-line QA checklist now mirrors the session template by showing route-proof status and real-hardware proof counts directly under each active blocker category.
Finish-line blocker categories now carry row-level hardware evidence cues up into the checklist/session template and structured report. A tester can see whether a category needs TEST BEND listening, ACK/NAK-style device response, loopback timing, test phrases, or manual verification instead of only seeing a proof count.
Current MIDI architecture/spec docs now use
closeout readiness,launch-closeout, andcurrent MIDI 1.0 closeout reportlanguage instead of broaderproduct-ready/release-readywording. Historical log entries remain intact, but the current source-of-truth docs now match the trust ladder used by the in-app MIDI Health and Protocol Coverage surfaces.Erdos audit pass tightened remaining overconfident MIDI wording: QA copies now include hardware evidence and future-protocol boundaries, empty QA states no longer imply real-hardware completion, pitch-bend verification is labeled as manual checking rather than a device ACK, and bank/program recall language says recipe completion instead of hardware readiness.
MIDI Protocol Coverage route metadata now distinguishes direct panels, menu paths, page breadcrumbs, and status-only notes. The route audit also separates direct route proof from breadcrumb/manual paths, so copied QA sessions can tell a tester whether a next action opens a real panel or needs manual menu navigation.
MIDI Protocol Coverage route contracts now print both
directOpenableandsafeDoorOpenable. Copied/plain reports can distinguish an exact direct panel from a safe breadcrumb opener without asking the UI to reinterpret route-proof text.MIDI Protocol Coverage protocol-family rows now expose row-level
actionIsDirectOpenableandactionIsSafeDoorOpenable, and the plain report printsRoute openable: direct=... | safeDoor=.... This keeps per-row QA, support copies, and future cockpit tables aligned with the same model-owned route verdict.MIDI Protocol Coverage blocker categories now expose the same direct/safe-door openability verdict as their child rows. Category summaries, QA checklists, QA session templates, and structured category payloads now agree on whether the tester has an exact opener, a safe breadcrumb opener, or only a status/report row.
MIDI Protocol Coverage route audits and critical-path summaries now include direct/safe-door/non-openable counts and next-action openability. The shortest closeout summaries now flag whether the next MIDI route is actually clickable, guided, or only informational.
MIDI Protocol Coverage owner-surface closeout maps now include each category's route-openability verdict. The
Test/fix in ...sections no longer point testers to a surface without also saying whether that route is direct, safely guided, or non-openable.MIDI Protocol Coverage now reports a dedicated real-hardware validation summary and per-row hardware-proof evidence. Backend readiness, customer-facing closeout progress, and external-device trust are kept separate: hardware trust still requires listening, device-response, test-phrase, or manual-verification evidence.
Compact MPE status now repeats the boundary even for clean projects: no detected MPE-like data does not mean true MPE zones are implemented.
MIDI Health now surfaces a compact
AUTO OPSrow backed by the same MIDI AUTO editor-readiness model used in copied reports. The dashboard can say how many rows have visible editor tools, how many still need final hands-on QA, and where pitch-bend destination/range checks remain instead of hiding that behind a vague progress percentage.MIDI AUTO project reports now include a model-owned editor operation coverage checklist. The report names the guarded single-point edits, guarded group edits, drawing/block workflows, preview-confirm transforms, review-only setup boundaries, and remaining launch-polish items from one shared source instead of leaving those facts buried in editor code.
MIDI Health now breaks pitch-bend trust into destination categories: internal destination, verified hardware destination, hardware needs TEST BEND, hardware missing declared range, hardware missing Passport, ambiguous multi-lane destination, and unplaced pattern. This attacks the Hardware Bend Range closeout blocker directly while preserving the rule that raw 14-bit bend data is not the same thing as trusted external semitone width.
MIDI AUTO pattern/preflight reports now mirror the Health report's lane-type and editor-readiness vocabulary. Copied MIDI AUTO reports can identify controller lanes, setup rows, first-pass editor lanes, launch-polish lanes, curve lanes, and preview-transform lanes for the selected pattern.
MIDI Health/MIDI AUTO project summaries now report editor-readiness counts: first-pass editor lanes, launch-polish lanes, curve-capable lanes, and preview-transform-ready lanes. This makes the MIDI AUTO blocker testable against real lane rows instead of a vague "automation editor still needs polish" label.
MIDI Health/MIDI AUTO project summaries now split performance controller lanes from setup review lanes. The report can distinguish drawable CC/mod/expression/pan/volume/sustain automation from Program/Bank/RPN/NRPN/Data Entry recall evidence, making the remaining MIDI AUTO closeout easier to test without confusing musical automation with hardware setup data.
MIDI Protocol Coverage now owns a compact
statusReportSummary()string used by protocol reports and MIDI Health next-steps output. It explicitly separates the high-90% MIDI 1.0 backend foundation from the tracked dashboard model-row meter, current customer-facing MIDI 1.0 closeout progress, active blocker count, next focus, and deferred MPE/MIDI 2.0 family count.MIDI Sync Preflight runtime diagnostics now surface Tune Request and System Reset alongside Active Sense/status chatter. These bytes are counted, copied into reports, and reset with the monitor, so older hardware can be recognized without pretending these messages are ordinary musical clip data.
MIDI 1.0 system-common/system-real-time classification now names Tune Request and System Reset explicitly instead of letting them fall into
Unknown. Tune Request is counted with transport/sync data so clip import can ignore it safely, while System Reset is counted as protected setup data requiring explicit review before any hardware workflow could send it.SysEx restore reports now use
launch-trust evidencein user-facing text instead of the fuzzierproduct-readywording. Serialized fields remain stable internally, but copied reports now make the meaning clearer: trust requires device ACK/NAK-style evidence or manual verification, not just a SpaceAge-side progress estimate.MIDI Protocol Coverage wording now says
customer-facing MIDI 1.0 closeout blockerwhere the old shorterblockerwording could imply the MIDI backend itself had regressed. This keeps the live report honest: the remaining blocker rows are about launch-grade surfaces, validation, and confidence-building workflows around an advanced MIDI 1.0 backend foundation.Lane-owned MIDI routing was audited across record, live playback, and export paths. Arrangement playback queues notes, chords, drum hits, and MIDI AUTO/expression through the lane route target and lane play/export channel; Arrangement clip/lane/song MIDI export also forces expression data through the lane channel instead of trusting raw controller channels.
Host/plugin live incoming notes and performance expression are scheduled at their native in-block sample positions. SpaceAge-opened direct physical MIDI now preserves sync/transport timing separately, but schedules live notes/controllers at sample 0 of the drain block for the lowest practical monitoring latency.
MIDI Input now reports the direct-physical-input timing boundary explicitly. Host/plugin MIDI arrives with native JUCE in-block sample offsets; SpaceAge-opened direct physical inputs preserve device identity and use an earliest-drain-block live path for performance data. The UI now points remaining live feel toward audio buffer, driver, interface, hardware path, source-policy comparison, and recorded-timing alignment rather than treating perceived lag as a MIDI-protocol failure.
MIDI Health now carries that same direct-physical-input timing boundary into the top-level latency checklist, plain-text health report, next-steps report, and structured support payload. This keeps "my keyboard feels late" troubleshooting from hiding the direct-input queue boundary deep inside the MIDI Input panel only.
Direct physical MIDI input now records lightweight queue-age diagnostics while draining SpaceAge-opened controller messages into the audio block. MIDI Input and MIDI Health can report observed average/max direct queue age, giving future latency testing evidence instead of only advice.
MIDI AUTO pitch-bend trust is now represented as a shared expression-plan field instead of one-off panel copy. The visible selected-lane strip, copied reports, and structured plan payloads can now agree that external bend is trustworthy only after the lane, Hardware Passport, declared +/- range, and TEST BEND/manual verification agree.
MIDI AUTO lane-list rows now use the same launch-confidence vocabulary as the selected-lane strip:
BEND TRUST,SWITCH BLOCK,PRESSURE, orREVIEW ONLY. This is a readability pass only; it changes no MIDI storage, playback, export, routing, or hardware behavior.MIDI AUTO now has a clip-contextual expression-summary path. Pattern-only MIDI AUTO views still report that pitch-bend destination width is unproven, but when MIDI AUTO is opened from a real Arrangement clip, the selected lane's route target, Hardware Passport, declared bend range, and manual TEST BEND verification state are carried into the shared editor plan and copied reports.
MIDI AUTO pitch-bend destination, trust badge, and raw-curve span cues now read the same contextual expression-summary fields instead of re-querying the Arrangement lane and Hardware Passport separately. This keeps the selected strip, row detail, and copied report aligned on the same lane context.
Armed-lane MIDI recording now treats the lane as owner for recorded expression data as well as notes. CC, pitch bend, pressure, sustain, and similar MIDI AUTO events are normalized through the armed lane's play/export channel before they become project data.
Replace-record now clears old MIDI AUTO/expression data for the target pattern, so old sustain, bend, pressure, or controller moves cannot leak into a fresh take. Drum-lane replace-record clears drum steps plus long-form note payloads; melodic-lane replace-record clears Piano Roll notes.
Drum-lane recording no longer calls the Piano Roll instrument readiness helper when recording starts. This prevents a drum take from silently initializing or altering an unrelated melodic synth/pad state.
MIDI Hardware Setup Guide now shows a visible evidence-boundary row. It says setup guidance proves SpaceAge prepared project-side lane, channel, Passport, timing, and test-note intent only; external hardware truth still needs a queued-message receipt, device response, test phrase, or manual verification.
MIDI Hardware Passports now show a visible evidence-boundary row above the no-autosend strip. It says a Passport proves SpaceAge has routing, recall, bend, sync, and setup intent only; external hardware truth still needs queue receipts, device response, test phrases, or manual verification.
MIDI Hardware Setup Guide test-note receipts now explicitly tell the user to verify queued notes by listening or manual check. This keeps the receipt useful without pretending queued hardware MIDI equals accepted or audible hardware response.
SysEx Vault visible safety copy now states the evidence boundary directly: Vault/capture proves stored or staged bytes only; restore trust needs device response or manual verification. The same strip still says linking a snapshot only adds it to a Hardware Passport recall checklist.
MIDI AUTO discoverability was tightened. The MIDI TASKS menu now says
AUTO Lanes / Shared PTN Data..., the Piano Roll AUTO tooltip explains that this is where users view or create shared PTN automation lanes, and the empty-state copy now gives the first-lane recipe: choose a type/controller in the CREATE strip, then ADD POINT or DRAW RAMP.Arrangement lane signal commands and the MIDI UI workflow spec now use the same
AUTO Lanes / Shared PTN Data...doorway language, reducing the old split between MIDI expression, MIDI AUTO, and generic automation wording while making the shared-pattern ownership boundary explicit.MIDI AUTO's create strip now has enough vertical space for its own instruction row and controls. It says
CREATE LANE / ADD POINT AT PLAYHEAD, explains that selected lanes win untilCLEAR TARGET, and keeps the PTN-data-only/no-MIDI-send boundary beside the creation workflow.MIDI Import Wizard Preview now shows a visible evidence-boundary row before any commit buttons. It says preview proves SpaceAge inspected the file and planned safe actions only; project changes happen after IMPORT, while setup/SysEx data stays review-only until later explicit confirmation.
MIDI Stem Package Check now shows a visible evidence-boundary row. It says package check proves files and lane stems were inspected only; editable lanes/clips appear after IMPORT STEMS, while repair/reveal/recheck remain read-only helpers.
MIDI Export Preview now shows a visible evidence-boundary row. It says export preview proves SpaceAge can gather project MIDI for files/packages only; musical trust still requires opening, inspecting, and auditioning the exported result.
MIDI AUTO now shows a visible evidence-boundary row in the pattern automation panel. It says MIDI AUTO proves PTN performance automation exists and is editable, while hardware truth still needs playback, export/import review, destination bend-range trust, or manual verification.
MIDI MAPS now shows a compact evidence-boundary row directly in the visible MIDI Control Maps panel. It says a captured mapping proves SpaceAge heard and stored a controller route, while the physical feel still needs the user to move hardware and check pickup, range, curve, and target response.
MIDI Protocol Coverage now shows a compact evidence-boundary row onscreen, directly under the scorecard clarification. The panel now says it tracks SpaceAge-side MIDI 1.0 closeout and that real controllers, hosts, files, and hardware paths still need project testing or manual verification.
MIDI Protocol Coverage now labels its release-priority owner-surface block as
PRIORITY QA MAP, draws it more prominently, and numbers each owner surface in priority order. The dashboard now tells a tester where to go next by surface, not just which MIDI family remains unfinished.MIDI Protocol Coverage category focus copy is now more test-driven. MIDI AUTO, Hardware Bend Range, Import Wizard, Export Workflow, package repair, SysEx, Hardware Setup, MIDI Learn, and Timeline Map now name concrete verification paths first, while explicitly keeping future architecture such as true clip/lane-local automation, draggable tangent handles, and full conductor timeline adoption out of the current launch-grade proof path.
MIDI Protocol Coverage now shows an explicit
Next test:line inside the visibleNEXT CLOSEOUTblock. The first prioritized blocker category now surfaces its first concrete action directly onscreen, so a tester does not have to infer the next hand-on-keyboard move from the longer critical-path text.MIDI Protocol Coverage now owns
Next test:as a report-model method instead of one-off panel text. The visible panel, copied closeout checklist, plain-text report, and structured report payload now sharenextCloseoutTestSummary(), keeping the current top-priority test action aligned across UI, support reports, and future guided QA work.MIDI Health now mirrors the same model-owned
Next test:guidance. The cockpit panel shows aNEXT TESTrow, the copied Health next-steps report includes the same first MIDI closeout test, and the Health structured payload exposesnextCloseoutTestSummaryfor future guided-QA or support workflows.MIDI Health
FIX NEXTand MIDI Protocol CoverageOPEN NEXTtooltips now quote the same model-ownedNext test:sentence. The safe-door buttons still only navigate, but the hover copy now matches the visible cockpit/report guidance before the user clicks.The full MIDI Health report now prints the same model-owned
Next test:line near the top, before the long diagnostic sections, so support/debug copies preserve the immediate human action without making the reader dig into the embedded Protocol Coverage report.MIDI Protocol Coverage now owns a companion
Next route:summary besideNext test:. The Health cockpit, Health copied reports, Protocol visible closeout block, Protocol copied closeout text, and structured payloads now agree on both the next human test and the safe-door surface to open.MIDI Protocol Coverage now exposes structured closeout safety metadata:
safetyClass,domainBoundary, and a model-ownedNext safety:summary. MIDI Health, Protocol Coverage, copied closeout reports, and structured payloads can now agree on whether the next closeout route is cold, warm, or hot and what boundary applies.MIDI Protocol Coverage now also emits a compact closeout safety map. MIDI Health, Protocol Coverage, copied closeout text, Health reports, and structured payloads can summarize active blocker categories as
COLD / WARM / HOT, keeping navigation-only, SpaceAge-mutating, and hardware-affecting closeout work visually and textually distinct.MIDI Protocol Coverage now exposes a route contract for the next closeout action. MIDI Health, Protocol Coverage, copied reports, and structured payloads can now show the human button label, internal
actionSurfaceId, safety class, blocker category, and domain boundary for the next route, making safe-door navigation easier to audit and debug.MIDI Protocol Coverage now includes a closeout route audit. Active blocker categories are scanned for label, surface, safety, and boundary metadata so copied reports and MIDI Health can flag any mystery-door routing gaps before release.
MIDI Protocol Coverage blocker categories now carry structured QA checks. Copied reports list concrete category-specific validation steps, and MIDI Health/Protocol Coverage surface the first next-QA step directly beside the next route, safety, and audit summaries.
MIDI Protocol Coverage now exposes a standalone
Current MIDI 1.0 closeout QA checklistin text reports, copied closeout notes, and structured payloads. This keeps route/safety/readiness summaries separate from the exact manual checks needed to prove each blocker category.MIDI Protocol Coverage now shows a compact visible
QA CHECKScard in the protocol popup, fed by the same structured QA checklist used by copied closeout text. The protocol row hit-test/scroll math was aligned with the painted layout so click/hover behavior matches the visible rows.Generic MIDI safe-door refresh/repair tooltips now reuse the shared navigation-only helper instead of one-off safety wording. Package and SysEx strings remain custom where they must mention import/repair/restore/recall boundaries explicitly.
MIDI INPUT and MIDI OUTPUT visible preflight panels now show compact evidence-boundary rows directly in the UI. The input panel says readiness means the lane/source/filter path is prepared, not that the take is musically correct until recorded notes/expression, diagnostics, or playback are checked. The output panel says an open route and visible device mean SpaceAge is ready to send allowed live MIDI, not that external hardware accepted or audibly applied it until listening, device response, a test phrase, or manual verification exists.
MIDI PATCH default guidance now reinforces the cold/warm/hot safety model after refresh and explains that an empty MIDI PATCH panel simply means no imported setup rows were found. The empty-state copy now points ordinary notes and performance automation back to the sequencer/MIDI AUTO, keeping setup data and musical performance data mentally separated.
MIDI AUTO customer-facing guidance now teaches the automation boundary more clearly. The panel identifies itself as a warm project-data editor, says no MIDI is sent from that surface, points protected Bank/Program/RPN/NRPN/Data Entry events back to MIDI PATCH, and the Shortcuts popup now lists MIDI AUTO select/copy/cut/paste/delete/nudge/value behaviors plus pitch-bend trust requirements.
Hardware Passports now have a persistent manual pitch-bend range verification field plus a TEST BEND follow-up dialog that can deliberately record manual verification after the user hears the expected bend amount. Passport serialization preserves whether the declared bend range has been manually verified, export readiness rows can report "external range declared and manually verified" instead of always demanding TEST BEND evidence, MIDI AUTO bend-trust badges can show verified range state, and imported RPN bend-range changes clear stale verification.
Hardware Bend Range Protocol Coverage wording now credits the first-pass Hardware Passport +/- range setup, semitone-span readouts, and confirmed TEST BEND path. The remaining work is framed as persistent lane/export/playback trust checks plus real external-synth validation, instead of implying the bend-test path is completely absent.
Hardware Sync Policy Preview reports now expose a top-level evidence boundary in plain text and structured payloads, while keeping the separate sync and transport boundaries for chase/send cases. The preview now clearly means "SpaceAge has prepared or saved sync-role intent," not "external hardware followed Clock, transport, SPP, or chase behavior."
MIDI AUTO project summaries and hardware pitch-bend test plans/receipts now expose explicit expression and bend evidence boundaries. MIDI AUTO reports prove stored/inspected/planned expression lanes only; pitch-bend test plans prove only that SpaceAge can prepare or queue a guarded test phrase, not that hardware bend width is correct until it is heard, device-verified, or manually confirmed.
MIDI Project Readiness and MIDI Stem Package Inspection reports now expose their evidence boundaries in plain text and structured payloads. Project readiness is diagnostic project-state evidence, not proof that external hardware accepted or played anything; package inspection is collaboration handoff evidence, not an import/repair/mutation until a later confirmed action.
RPN/NRPN setup-card summaries, protected channel-mode summaries, guarded setup action plans, and setup queue receipts now share a setup-controller evidence boundary. These reports now explicitly prove only that SpaceAge interpreted, previewed, or queued controller setup data; they do not prove receiving hardware accepted the parameter, changed state, preserved the value, or sounds correct without queue/device/test/manual evidence.
Stored SysEx snapshot and Vault summary reports now expose their own archive evidence boundary in plain text and structured payloads. The Vault now distinguishes "SpaceAge has archived bytes/labels/timing estimates/warnings" from "this dump is identified, complete, non-duplicated, and safe to restore."
MIDI Protocol Coverage copied reports and structured payloads now expose an explicit evidence boundary. The dashboard is framed as a SpaceAge-side closeout tracker for MIDI 1.0 families, customer-facing polish, and deferred future protocol work; it is not proof that every controller, interface, host, external synth, SysEx dialect, timing chain, bend range, or MPE-like performance behaves correctly without real testing.
Hardware Setup device templates, setup previews, test-note plans, apply transaction plans, apply receipts, apply diffs, and assistant plans now expose one shared setup evidence boundary in plain text and structured payloads. Hardware Setup now explicitly proves only that SpaceAge prepared, previewed, applied, or guided project-side Hardware Passport/lane/channel/expression/timing/test-note setup data; external hardware truth still requires a queued-message receipt, device-response evidence, a successful test phrase, or manual verification.
SysEx Capture Readiness, Batch Capture Dry Run, Capture Receipt, and Capture Progress reports now share one capture evidence boundary in plain text and structured payloads. Capture proves only that SpaceAge observed, framed, and staged incoming bytes for review; it does not prove the dump belongs to the intended device, is complete, is non-duplicated, or is safe to restore until device identity, warnings, byte evidence, and later device-response/manual verification are reviewed.
MIDI Learn capture preview/receipt payloads and the MIDI Learn Dashboard copied report/structured payload now expose a control-mapping evidence boundary. MIDI Learn now explicitly proves only that SpaceAge captured, stored, resolved, or warned about controller mappings; physical-controller feel still requires the user to move it, listen, check pickup/range/curve behavior, and verify the target response.
MIDI Import Apply Preview, MIDI Export Readiness, and MIDI stem/package import preview/plan reports now expose explicit collaboration evidence boundaries in plain text and structured payloads. Import preview proves only what SpaceAge inspected and plans to create/preserve/review/ignore; export readiness proves only what SpaceAge can gather from the current project; package inspection/repair reports remain diagnostics until a later confirmed import/repair action mutates the project.
MPE-like Readiness and Future MIDI Protocol reports now expose explicit evidence boundaries in plain text and structured payloads. MPE-like readiness now means SpaceAge preserved/exposed MIDI 1.0 pitch bend, pressure, poly pressure, and timbre-style controller data across channels; it is not a true-MPE-zone, master/member-channel, per-note allocation, MIDI 2.0, UMP, Profile Exchange, or Property Exchange support claim.
MIDI Timing recorded-alignment summaries and copied timing preflight reports now expose an explicit evidence boundary. Timing data is framed as a SpaceAge-side timing and compensation estimate, not proof that a controller, interface, audio driver, external synth, or monitoring chain feels correct until the user records, listens, compares loopback evidence, or manually verifies the hardware path.
MIDI Project Health reports now expose the same evidence boundary in plain text and structured payloads. The Health dashboard is explicitly framed as a SpaceAge-side diagnostic snapshot of readiness, visible devices, live input/output gates, sync state, and repair guidance; it does not prove external hardware accepted, stored, followed, or audibly applied messages without test phrases, device-response evidence, recorded-note inspection, or manual verification.
MIDI Device Inventory and MIDI Repair Recommendations now expose explicit safe-door boundaries. Inventory reports now say they prove only what the operating system exposes to SpaceAge plus missing saved project references, not that external devices are connected correctly or responding musically. Repair recommendation reports now say copying guidance sends no MIDI, changes no routing/project data, and changes no external hardware unless a later confirmed action does so.
MIDI Input Readiness, MIDI Input Trust Gate, and copied MIDI IN Preflight reports now share one evidence boundary in plain text and structured payloads. Input readiness proves SpaceAge has an armed lane, allowed/visible input path, source policy, and channel filter prepared for live capture; it does not prove a performance was captured exactly as intended without inspecting recorded notes/expression, suppressed/dropped-message diagnostics, or listening back.
MIDI External Output Readiness, Runtime, Trust Gate, and copied MIDI OUT Preflight reports now share one evidence boundary in plain text and structured payloads. Readiness proves SpaceAge has lane routing, visible output devices, and runtime state prepared for allowed live messages; it does not prove the destination hardware accepted, stored, or audibly applied anything without listening, device-response evidence, a successful test phrase, or manual verification.
MIDI Sync Preflight copied reports now start with a compact preflight boundary before the runtime/policy/transport sections. The report states that it summarizes SpaceAge-side observation, chase policy, and outbound transport intent only; external hardware truth still requires Hardware Passport routing plus device-response evidence, a successful test phrase, or manual verification.
MIDI Sync Runtime, Sync Policy, Hardware Sync Policy Preview, and Transport Plan reports now expose explicit evidence boundaries in both plain-text reports and structured payloads. Observed/chased sync counters prove only what SpaceAge saw or applied internally; queued Clock/Start/Continue/Stop/SPP messages prove only that SpaceAge attempted an allowed transport send. External hardware trust still requires Hardware Passport routing plus device-response evidence, a successful test phrase, or manual verification.
SysEx Vault/restore structured payloads, including restore-response classification, now expose the shared restore evidence boundary wherever the corresponding plain-text report already taught it. This keeps future UI badges, support exports, and JSON-style reports aligned with the rule that queue/wire timing is pacing evidence, not hardware acceptance.
MIDI setup-card receipts, Hardware Setup template-apply receipts, hardware test-note receipts, pitch-bend test receipts, hardware recall plans/logs, and Hardware MIDI Queue Progress reports now share one queue-evidence boundary sentence in both plain-text reports and structured payloads. The shared wording says SpaceAge queue/log receipts prove only that hardware MIDI was queued or attempted; they do not prove the external device accepted, stored, or audibly applied messages without device-response evidence, a successful test phrase, or manual verification.
SysEx restore progress, restore-verification receipts, and SysEx Librarian readiness reports now share one evidence-boundary sentence. The shared wording says SpaceAge queue/wire timing is only a pacing estimate; hardware trust requires a device ACK/NAK/WAIT/CANCEL-style response receipt or a MANUAL VERIFY receipt after checking the external hardware.
MIDI export pitch-bend trust wording now comes from one shared helper instead of separate pattern/clip/arrangement branches. This keeps pattern-local, internal, external-unknown, Passport-range-missing, and TEST-BEND-required language aligned across export readiness, lane/stem rows, and reports.
MIDI export readiness now carries pitch-bend trust summaries for pattern, selected-clip, legacy-chain, and full-arrangement exports. Reports and lane/stem job rows say whether raw 14-bit bend data is preserved for internal playback, whether external bend width is unknown because a Hardware Passport/range is missing, or whether a declared external range still needs TEST BEND evidence before trusting slides.
MIDI AUTO selected pitch-bend lanes now report a compact bend-trust badge in status text and copied reports: raw bend preserved, internal/RPN range visible, and external hardware either not applicable, unknown, range-declared but awaiting TEST BEND evidence, or blocked by missing Passport/range context.
Pitch Bend / Pressure Protocol Coverage now separates the three bend-range layers more explicitly: raw 14-bit bend data is preserved, internal/RPN range can be displayed for SpaceAge playback, and external Hardware Passport bend range is a destination trust contract that needs lane + Passport + declared +/- range + TEST BEND evidence.
MIDI Protocol Coverage wording now treats switch/block editing as implemented first-pass work instead of a vague missing feature. The remaining MIDI AUTO blocker now says final switch-edge validation/UX polish sits on top of the existing block editor, alongside curve/tangent drawing and durable bend-range contracts. Clip-local and lane-local automation are future ownership architecture.
MIDI AUTO copied reports now state the current switch/block lane tools directly: paint step-snapped ON/OFF blocks, drag switch-edge handles to trim timing, drag up/down to toggle state, right-drag to erase snapped steps, and use Ctrl+A/C/X/V on selected switch edges.
MIDI AUTO copied reports now state the current curve-tool boundary directly. Direct selected-lane scope drawing exists;
APPLY CURVEis preview-confirm only; Smooth rounds existing points, Fast Start and Slow Start reshape contours between anchored endpoints; first-pass FAST/SLOW graph handles choose the same preview-confirm curve shaping from the graph.SysEx restore progress and selected-snapshot UI wording now use the broader evidence ladder instead of shorthand ACK/NAK language. Reports now say proof needs a device ACK-style receipt or manual verification after checking hardware, and batch restore says trust depends on target-device response receipts or user verification.
SysEx Vault copied reports now put the restore-trust boundary at the top: estimated queue/wire progress is not device acceptance; ACK/NAK/WAIT/CANCEL receipts describe hardware response state; MANUAL VERIFY is user-confirmed evidence after checking the hardware, not a device ACK.
MIDI AUTO copied reports now add an explicit pitch-bend trust boundary when a pitch-bend lane is selected. The report says SpaceAge preserves raw 14-bit curve data, but external musical bend depth is only trusted after one destination lane, an attached Hardware Passport, a declared +/- bend range, and TEST BEND evidence agree.
MIDI Protocol Coverage, MIDI AUTO per-lane plans, and copied MIDI AUTO reports now credit raw bend-span reporting, bend-trust badges, switch block-context readouts, existing direct scope drawing, first-pass FAST/SLOW curve handles, and existing preview-confirm curve tools. The remaining MIDI AUTO closeout language is now narrower: curve-handle QA/refinement, switch-edge validation polish beyond the first-pass handles/guidance/context readouts, and durable destination bend-range contracts beyond first-pass cues/spans/badges. Clip-local and lane-local automation are future ownership architecture.
Hardware Passport bend-test plans now say the selected Arranger lane owns the external bend-range context. The checklist starts with choosing the lane whose external instrument should own the bend range, and the safety copy says the test runs from that lane's Hardware Passport before any hot note/pitch-bend messages are queued.
MIDI Input destination copy now states that the MIDI-armed lane is the live controller destination and that selected clips/lanes are only editing context. This makes the Instrument Bay/lane ownership model clearer when a controller is connected.
Arrangement lane MIDI arm badges now read
LIVE INwhen armed, and their tooltips explain that controller input goes to the armed lane while clip/lane selection remains editing context. The older genericMIDI INlabel was functional but less explicit.MIDI Health now uses one shared
LIVE INPUTsummary for the visible panel, copied next steps, copied full report, and structured report payload. This keeps the lane badge, Health panel, and support/debug reports aligned on the same rule: live controller input belongs to the armed lane, while selected clips/lanes are editing context.MIDI AUTO pitch-bend lane plans now spell out the hardware trust ritual instead of hiding behind abstract "bend contract" wording: one destination lane, attached Hardware Passport, declared +/- bend range, and TEST BEND evidence before trusting external synth slides.
MIDI AUTO pitch-bend lanes now report their actual raw curve span. Selected pitch-bend lanes show raw min/max, spread below/above center 8192, and, when a Hardware Passport range is declared, an approximate semitone span for that destination. Copied MIDI AUTO reports include the same curve-span cue.
MIDI AUTO switch-edge hover/selection readouts now describe the actual block context. A selected edge reports whether it starts an ON or OFF block, where the next edge begins, and where the previous edge lives, making switch lanes feel less like isolated dots and more like editable sustain-style regions.
MIDI AUTO curve-shape selection now explains itself immediately. Changing the curve mode clears stale preview confirmation, reports the armed shape, and reminds the user that
APPLY CURVEpreviews first, keeps endpoints anchored, edits PTN data only, and sends no MIDI.MIDI Protocol Coverage and MIDI AUTO copied-plan wording now credit first-pass switch-edge handles, selection-time guidance, trimming, and block-model report language. The remaining blocker is now framed as switch-edge validation polish beyond those first-pass affordances, not as if the switch-editing workflow is still absent.
MIDI AUTO copied preflight reports now include explicit lane-model boundaries. Editable lanes are described as PTN-data-only/no-hardware edit surfaces, switch/block lanes are described as ON/OFF blocks with switch edges, and review-only setup/device lanes are pointed toward MIDI PATCH, Hardware Passport, or confirmed recall workflows.
MIDI AUTO point/switch drag and nudge success messages now repeat the same safety boundary as transform previews: edits change PTN data only, undo is available, and no MIDI is sent. This makes direct expression editing feel less like a hidden hardware action.
MIDI AUTO transform previews now state their safety boundary in the status line. Curve smoothing/easing previews say endpoints stay anchored and only interior values are reshaped; thinning previews say redundant same-lane events are only marked for removal. Applying the preview now also states that project data changed with undo available and no MIDI was sent.
MIDI AUTO switch-style lanes now teach their edit model at selection time. Sustain/Hold-style lanes report that they are ON/OFF block lanes with draggable switch-edge timing, Up/Down state toggling, and right-drag erase behavior, instead of waiting until the user happens to hover the graph.
MIDI Health and MIDI Protocol Coverage visible panels now surface the same compact
Critical pathsummary used by the copied/structured report.COPY CLOSEOUTalso includes it, so the onscreen triage cue and copied closeout text stay aligned.MIDI Protocol Coverage copied/structured reports now include a compact
Critical pathsummary. It names the next blocker category, release role, owner surface, first action, and why that focus matters before the longer checklist, making the report more useful as a working closeout queue.Timeline Map closeout wording now names the missing architecture as an undo-safe conductor timeline for tempo/meter/key maps. This keeps full source-map adoption framed as an explicit reviewed mutation, not a silent import side effect.
Hardware Output Timing Protocol Coverage wording now separates the usable timing foundation from validation polish. Direct-output sample-positioning, Passport recorded-timing alignment records, manual/loopback measurements, and timing reports remain non-blocking foundation work; apply/realign controls, deeper driver diagnostics, and real-device receipt polish are framed as validation polish rather than a new closeout blocker.
Pitch Bend / Pressure Protocol Coverage next-action text now matches reality. It no longer implies compact scope drawing still needs promotion into basic bend/pressure/aftertouch lanes; the row now points at the true remaining confidence work: durable destination bend-range contracts beyond the first-pass cue, curve-handle QA/refinement, and real-hardware validation of the confirmed Hardware Passport bend-test workflow.
MIDI Protocol Coverage safety rows now use the same external-hardware vocabulary as the rest of the MIDI UI. RPN/NRPN, Program/Bank, SysEx Core Safety, and Clock/Transport rows distinguish cold import/navigation from deliberately queued hot actions that may change external hardware setup, patch state, bend range, transport, or sync behavior.
MIDI Health / MIDI Protocol Coverage
Open Nextroutes for import/export closeout now state their cold navigation boundary in the status line. Opening Sequencers for MIDI Tasks or Arranger for Render choices sends no MIDI, changes no routing, changes no project data, and changes no external hardware by itself.MIDI Protocol Coverage and MIDI AUTO copied-plan wording now describe the current MIDI AUTO blocker as a broader launch-grade confidence layer: curve-handle QA/refinement beyond existing direct scope drawing and preview-confirm transforms, switch-edge feedback, durable destination bend-range contracts beyond the existing first-pass selected-lane cue, and the documented future path for true clip/lane-local automation. The source-of-truth dashboard no longer over-focuses on one widget as if that were the whole release gate.
MIDI AUTO bend-range wording now credits the selected-lane
BEND RANGEcue that already appears in the graph and copied report, while still marking the larger per-lane/per-destination contract as unfinished. This prevents the release report from acting like no bend-range visibility exists yet.MIDI AUTO copied preflight reports now use the same closeout language as Protocol Coverage: curve/tangent shaping, switch-edge confidence polish, and durable bend-range contracts beyond the first-pass cue. Clip-local and lane-local automation are future ownership architecture.
MIDI AUTO pitch-bend lane selection now echoes the selected-lane
BEND RANGEdestination cue in the main panel status line, not only inside the graph/readout and copied report. Unknown, missing, multi-lane, or missing-+/-Passport bend-range cases now mark the selected-lane status as a warning so the user sees the trust issue immediately.Hardware Passport hot-action helper copy now uses
queueandmay change external hardware patch/setup state after confirmationinstead of looser send/change language. The setup shortcut strip also uses customer-facingPassport rolesterminology.Hardware Passport sync-role helper copy now says saving changes Passport metadata only and sends no MIDI, while send/chase roles still require confirmation. This keeps capability/role editing distinct from confirmed clock/transport behavior.
SysEx Vault entry and evidence-card wording now uses the full cold/navigation boundary. Opening the Vault says no SysEx is sent, no restore or recall is queued, no routing/project data changes happen, and no external hardware changes; evidence-only cards now say they send no MIDI, queue no restore/recall, and change no external hardware.
MIDI PATCH
QUEUE CARDhot-action wording now names the external-hardware boundary precisely. The card says it requires confirmation and may change external hardware setup, while receipts prove SpaceAge attempted the queue, not that the device accepted it.MIDI package review/reveal/recheck wording now uses the current cold navigation/diagnostic contract.
REVEAL PACKAGEandRECHECKsay they do not import stems, repair files, change routing, change project data, send MIDI, queue SysEx, or change external hardware, and the package review banner now separates review/reveal/recheck safety from confirmedIMPORT STEMS.MIDI Setup device-template draft apply/undo text, blocked test-note receipts, Hardware sync-policy failure dialogs, and SoundFont mapping status now use clearer mutation boundaries. Apply draft is now described as a warm project-data edit that can change Passport/lane MIDI metadata after confirmation; undo and blocked test-note paths send no MIDI and change no external hardware; sync-policy save failures and SoundFont mapping status now include no routing/no hardware boundaries.
MIDI PATCH setup-card attachment and NRPN definition receipts now use Hardware Passport knowledge boundaries. Attaching setup cards says SpaceAge Passport data changed only, while DEFINE NRPN says no project data outside the selected Passport changed; both say no MIDI was sent and no external hardware changed.
Hardware Passport recipe-save statuses, Vault capture-save receipts, and blocked hardware bend-test messages now use fuller no-send/no-hardware boundaries. Recipe saves now say they change Passport data, lane routing metadata only where applicable, and no external hardware; Vault saves say project Vault data changed only; BEND INFO now includes no external hardware change.
MIDI package repair handoff safety text now matches the cold text-only contract. It now says the handoff does not import stems, repair files automatically, change routing, change project data, send MIDI, queue SysEx, or change external hardware.
MIDI import action tooltips now name their mutation scope. Package import is a warm project-data edit that can add editable lanes/clips and receipts after confirmation, selected MIDI import is a warm pattern-data edit, and split-to-lanes is a warm project-data edit that may create lane MIDI routing metadata; all say they send no MIDI and change no external hardware.
MIDI recorded-alignment confirmations and SysEx Vault evidence buttons now name the data they mutate. Timing alignment actions say they change SpaceAge recorded-timing/live record compensation data only,
MANUAL VERIFYsays it changes Vault evidence only, andCLEAR RESPONSESsays it changes session evidence only; all now state no MIDI, no routing changes, and no external hardware changes.SysEx selected-snapshot closeout reports now use the full copy-only evidence boundary. Whether no snapshot is selected or a snapshot closeout is copied, the report now says it sends no MIDI, queues no restore or recall, changes no routing, changes no project data, and changes no external hardware.
MIDI stem package import progress receipts now use the same external-hardware wording as the rest of the safe-action language. The import receipt still clearly says confirmed imports may add editable lanes/clips, but do not send MIDI, queue SysEx, recall hardware, or change external hardware.
MIDI input and sync monitor reset tooltips now distinguish session monitor edits from project, routing, policy, and hardware changes.
RESET OBSERVEDandRESET MONITORnow say they change SpaceAge session monitor data only, while their refresh companions explicitly preserve observed evidence and change no external hardware.MIDI Maps row-control tooltips now use the same warm mapping-data boundary as MIDI Learn commit actions. Enable, invert, pickup, CC resolution, range, curve, source cleanup, delete, and duplicate-repair actions now say they change SpaceAge mapping data only and send no MIDI, change no routing, and change no external hardware.
Warm MIDI input-policy and MIDI Learn commit tooltips now name the SpaceAge data they change. Input policy says it changes SpaceAge input routing policy only, while Learn
REPLACEandMACROsay they change SpaceAge mapping data only and send no MIDI, change no routing, and change no external hardware.MIDI repair safe-door tooltips now state the full navigation boundary. Input, Health/device, and Output repair buttons now say they only open or refresh setup surfaces and do not send MIDI, change routing, change project data, or change external hardware by themselves.
MIDI Health and MIDI Setup copied receipts now use the same final no-hardware grammar as the other cold-copy receipts. This keeps
COPY REPORT,COPY STEPS,COPY SESSION, andCOPY PREVIEWaligned with the shared no-MIDI/no-routing/no-project/no-hardware contract.MIDI stem-package copy/repair receipts now match their cold-copy tooltips more closely. Copying a package report or repair checklist now explicitly says it changes no routing, while still saying it sends no MIDI, imports no stems, changes no project data, repairs no files, and changes no external hardware.
MIDI import preview copy actions now use the full cold-copy boundary.
COPY REPORTin the import preview now says it is text-only and changes no routing, no project data, and no external hardware while sending no MIDI.SysEx batch dry-run copied receipts now match the cold-copy tooltip boundary more closely.
COPY BATCH DRY RUNnow explicitly says it changes no routing, in addition to sending no SysEx, starting no live capture, saving no dumps, changing no project data, and changing no external hardware.Hardware Passport copied receipts now match the tooltip safety contract more closely.
COPY PLAN,COPY CLOSEOUT,COPY LOG, andCOPY QUEUEnow explicitly say they change no routing in addition to sending no MIDI, queueing/restoring nothing, changing no project data, and changing no external hardware.SysEx Vault listen-only actions now use a dedicated helper instead of hand-written one-off wording.
ARM CAPTUREandCANCELnow share the same listen-only boundary: no project save, no SysEx send, no restore/recall queueing, no routing change, and no external hardware change, while still explaining when capture evidence is reviewed, saved, or discarded.SysEx Vault copy tooltips now use a SysEx-specific cold-copy helper instead of generic MIDI wording.
COPY REPORT,COPY CAPTURE, andCOPY BATCH DRY RUNnow share one no-SysEx/no-restore/no-recall/no-routing/no-project/no-hardware boundary, while still preserving capture/batch-specific guards such as saving no capture and not starting live multi-dump capture.More MIDI copy/report tooltips now use the shared cold-copy helper. MIDI stem-package report/repair copies, MIDI Setup session/template copies, MIDI AUTO report copies, and MIDI PATCH dynamic
COPY ROW/COPY CARDtooltips now share the same no-send/no-routing/no-project/no-hardware boundary, with extra package guards for no stem import and no file repair.Hardware Passport recall copy tooltips now use the shared cold-copy helper, with extra guard text for no recall queueing and no queue cancellation. MIDI PATCH setup-card copy tooltip also uses the helper. This reduces hand-written wording drift while preserving the important "copying reports does not queue or cancel hardware actions" boundary.
Sequencer MIDI drag/export wording is now safer. The compact
MIDIbutton separates click-to-open import/export options from drag-to-write behavior, so the no-project-mutation safety sentence applies only to the drag-export action and does not accidentally promise that imports are non-mutating. Stem-package preview text now saysfull-arrangement MIDI fileinstead of the more ambiguousfull arrangement file.MIDI export preview header copy now says SpaceAge will write MIDI files, not the vaguer "writes anything." This keeps export language aligned with the warm file-write boundary and avoids implying project mutation, routing changes, MIDI sends, or hardware changes.
MIDI export preview reports now share the warm file-write safety language used by the export buttons. The report says when SpaceAge is writing MIDI artifacts and also states the boundary: no MIDI is sent, routing is unchanged, project data is unchanged, and external hardware is untouched.
Later MIDI/SysEx report surfaces now carry their own safety receipts and warm labels. MIDI Output preflight, Hardware Passport recall plan/log/queue, SysEx batch dry-run, and MIDI AUTO copied reports now state that they are text-only and do not send MIDI, queue recall, change routing, change project data, or change external hardware as appropriate. SysEx Vault metadata/capture/verification actions now use warm wording, Hardware Passport
SAVE SYNC POLICYnow states it is a warm SpaceAge Passport-data edit, and MIDI AUTO edit/shared/Variant tooltips now explicitly label PTN automation edits as warm no-send actions.MIDI import, MIDI input preflight, MIDI sync preflight, and MIDI Maps row-edit controls now use the action-temperature language more consistently. Import actions are labeled warm project-data imports that send no MIDI or hardware changes; import/input/sync copied reports now prepend text-only safety receipts; incoming sync navigation now says it is navigation-only; and MIDI Maps enable/invert/pickup/resolution/range/curve controls now state that they change SpaceAge mapping behavior only, with no MIDI sent and no hardware changed.
MIDI Learn and MIDI Maps now use the cold/warm/no-send language more consistently. Context menus say
Replace Same Hardware Sourceinstead of the ambiguous older replace wording, clear-and-learn states that old mappings are cleared from the selected control, Learn/Replace/Macro/Only/Delete tooltips describe warm SpaceAge mapping-data edits that send no MIDI and change no hardware, and the MIDI Learn dashboard copy now includes a text-only safety receipt. The MIDI Protocol CoverageCOPY REPORTaction now uses the same cold receipt pattern.MIDI PATCH now uses the stricter cold/warm/hot action taxonomy. Copying protected rows or setup cards is cold text-only and now wraps clipboard payloads with a safety receipt. Saving Hardware Passport recipes, attaching lane Passport metadata, attaching setup-card notes, defining queue-safe NRPNs, and mapping SoundFont presets are labeled warm SpaceAge project/passport/lane metadata changes that send no MIDI. QUEUE CARD and TEST BEND remain hot confirmed hardware actions, and post-queue status now reminds the user that a queue receipt is not device acceptance.
MIDI AUTO tooltips now use explicit action-temperature language. Opening the panel and copying reports are cold/no-mutation actions; edit buttons such as Quantize, Lower/Raise Value, Thin, Apply Curve, Clear Step, Delete Lane, Add Point, and Draw Ramp now say they change PTN automation data only, send no MIDI, and do not change routing. Shared-pattern ACK and Variant wording now explain whether the user is editing linked PTN automation or first creating independent project pattern data.
MIDI Input Trust Gate now carries the live-routing detail sentence, not just the headline. MIDI Input Destination, MIDI Health, copied reports, structured reports, and the compact Settings detail cue can now preserve or point toward the practical why, such as host/direct source behavior, missing physical input, or duplicate-route context.
MIDI repair recommendations now call out dropped direct physical MIDI input messages as their own high-severity input repair item. If a controller stream overloads or destabilizes the direct-input path, the next-steps list points the user toward routing/device-load review instead of leaving the drop count buried in diagnostics.
MIDI runtime dropped-output wording now frames lost external MIDI as a playback-trust problem, not only a recording problem. The repair card now points at disappeared devices, driver stalls, or overloaded output streams before the user trusts hardware playback.
MIDI repair actions now report clearer status after lane-targeted safe-door navigation. Clicking a lane repair card still only opens the relevant lane routing surface, but the status line now echoes the intended action label plus the lane/device target instead of only reporting a bare lane reference.
MIDI Maps macro-cleanup wording is now clearer. Rows where one hardware source controls multiple targets still report
MACRO SOURCE, but the per-row cleanup button now saysONLY, meaning "make this source control only this target," which better matches the destructive cleanup behavior than the olderKEEPlabel.MIDI Maps now explains its source-filter safety directly in the Learn strip. The visible text says at least one capture source remains active, CC is restored if all source toggles are switched off, and unsafe/control-plane messages such as SysEx, clock, transport, panic, and reset are ignored.
MIDI Learn pending-capture review now carries high-resolution CC context before the user commits the mapping. If the learned control is an MSB-capable CC, the REPLACE/MACRO/CANCEL review text includes the companion fine-controller note, so users see the 7-bit/14-bit implication while deciding whether the hardware source should replace an old target or become a macro.
SysEx selected-snapshot closeout now exposes device/checksum evidence in the user's eyeline. The visible Vault card and selected-snapshot copied report include manufacturer id, decoded device label, and checksum evidence when available, so identity/checksum review is not buried only in the full snapshot descriptor. This is read-only/copy-only evidence and does not queue restore, send SysEx, or mutate hardware.
SysEx batch dry-run now warns about likely duplicate stored evidence. Linked Vault snapshots with the same byte count and SysEx preview are counted as possible duplicates, shown in the visible dry-run strip, included in structured payloads, and printed in copied reports. This is a conservative review prompt only; it does not block capture, delete duplicates, send SysEx, auto-save dumps, or mutate hardware.
SysEx batch dry-run evidence now has one model-owned summary string shared by structured reports and the visible Vault strip. The UI now says
accountedinstead of implying active batch capture, and copied reports use the same stored Vault / live unsaved / total accounted wording. This is still planning/status only; it does not enable live multi-dump capture, save dumps automatically, send SysEx, or mutate hardware.MIDI AUTO now has a first-pass curve-shape transform beyond smoothing. The selected-lane editor adds a Curve Shape dropdown (
Smooth,Fast Start,Slow Start) plus a preview-confirmAPPLY CURVEaction; Fast/Slow Start reshape intermediate points between anchored endpoints without changing the first and last event. First-pass FAST/SLOW graph handles now choose the same preview-confirm shaping. This is still PTN-owned MIDI AUTO editing and does not add clip/lane-local automation, playback changes, export changes, or hardware routing changes.MIDI AUTO switch-edge editing now has larger human hit targets without changing the underlying MIDI model. Switch lanes get wider click/hover targets, easier lasso capture, a left/right trim cursor over edges, and clearer selection/drag status text that explains left/right timing edits and up/down ON/OFF toggling. This is editor-confidence polish only; it does not change MIDI storage, PTN ownership, playback, export, hardware routing, or the future clip/lane-local automation ownership plan.
Hardware pitch-bend cues now use customer-facing
BEND RANGE/ bend-range contract language instead of the olderBEND POLICYwording. The live MIDI coverage category isHardware Bend Range, and the next-safe-action copy makes the user path explicit: declare the hardware +/- range, then useTEST BENDbefore trusting slides.SysEx batch dry-run reports now separate stored Vault evidence from the current live unsaved capture. Copied reports say
Accounted forplusstored Vault snapshotsandlive unsaved capture, which keeps batch progress honest without implying active multi-dump capture exists. This is report/model metadata only; no SysEx is sent, restored, auto-saved, or captured in a hidden batch inbox.SysEx batch dry-run progress now counts valid Vault snapshots already linked to the selected Hardware Passport, plus the current unsaved live capture when present. The visible strip reports stored + live evidence so a multi-dump hardware backup assembled over time does not look empty. This remains dry-run/planning behavior only; it does not enable live multi-dump capture, auto-save dumps, send SysEx, or mutate hardware.
MIDI Protocol Coverage source strings now match the newer MIDI AUTO closeout model. The live Settings report credits visible switch-edge trimming and first-pass selected-lane pitch-bend destination cues, and frames the remaining MIDI AUTO work as curve/tangent shaping, switch-edge confidence polish, and durable destination bend-range contracts beyond the first-pass cue. This is wording/model-truth polish only; it does not change MIDI storage, PTN ownership, playback, export, hardware routing, or future clip/lane-local ownership architecture.
MIDI AUTO switch-block closeout wording now credits the existing visible switch-edge handles and grouped edge edits instead of implying the whole trim workflow is missing. The remaining launch work is framed as edge-confidence polish and collision messaging. This is wording/model-truth polish only; it does not change MIDI storage, PTN ownership, playback, export, hardware routing, or future clip/lane-local ownership architecture.
MIDI AUTO curve closeout wording is now more exact. The editor and reports credit existing point/ramp drawing, graph value feedback, preview-confirm smoothing, and preview-confirm thinning, while naming the remaining curve work as interactive curve-shape/tangent handles beyond point/ramp editing. This is wording/model-truth polish only; it does not change MIDI storage, playback, export, or automation ownership.
Hardware bend-range wording now distinguishes internal synth/RPN graph trust from external hardware trust. Internal targets say the graph range is enough and external TEST BEND is unnecessary; hardware targets now tell the user to attach a Hardware Passport with output plus a declared +/- bend range before trusting slides, TEST BEND, or slide playback. This is wording/trust polish only; it does not change MIDI storage, playback, export, routing, or hardware sends.
MIDI AUTO selected-lane graphs now keep value feedback visible at graph level, not only in the status strip or tiny per-point badges. Hovered events show a larger
HOVER Sx | valuebadge, singly selected events showSELECTED Sx | value, and selected groups show count, step span, and value range. This is a visibility-only editor polish pass; it does not change MIDI storage, PTN ownership, playback, export, or hardware routing.MIDI AUTO switch lanes now explain their block workflow directly in the selected-lane graph. The hint text says switch lanes paint ON/OFF blocks, visible switch-edge handles trim timing, right-drag erases snapped steps, and grouped edge edits use the same Ctrl/C/X/V workflow as continuous points. This is wording/affordance polish only; it does not change MIDI storage, PTN ownership, playback, export, or hardware routing.
MIDI AUTO pitch-bend insertion now labels the compact value control honestly: 64 is only the center of the 0-127 editor slider, and it maps to raw 14-bit MIDI pitch-bend center 8192. This is wording/trust polish only; it does not change stored bend values, playback, export, or hardware routing.
MIDI AUTO source-view wording is now stricter in the live editor.
FIT SOURCEsays it is viewport-only,SOURCE VIEWsays edits still write the PTN,VARIANTsays it creates an independent pattern before MIDI AUTO editing, and shared-pattern guards now useMIDI AUTO editsrather than older expression wording. This is a trust/ownership pass only; it does not change storage, clip-local ownership, export, or hardware routing.MIDI AUTO copied/preflight/project-health reports now use musician-facing
MIDI AUTOwording for stored lanes, events, patterns, closeout items, and destructive-edit cautions. Lower-level code can still use expression terminology internally, but copied/customer-facing summaries now teach one workbench name.MIDI AUTO closeout/blocker text was recalibrated after a read-only audit. Reports now credit the existing first-pass editor, focused handles, switch/block handles, guarded selected/group edits, graph-level selected/hover value feedback, explicit switch-edge trimming, selected-lane bend-range cues, and PTN-owned Source View truth, while keeping the real remaining launch work visible: curve/tangent shaping, switch-edge confidence polish, and durable destination bend-range contracts beyond the first-pass cue. Clip-local and lane-local automation are future ownership architecture.
SysEx batch-capture dry-run reports now expose a stage label and remaining-dump count. This is report/model metadata only: it helps future progress UI say
Setup Needed,Ready To Arm One Dump,Partial Evidence, orReview And Savewithout enabling live multi-dump capture, sending SysEx, or silently storing data.MIDI Learn wording now leans more musician-facing. Right-click learn menus say
Replace Existing Use/Use as Macro, the Maps panel says Slow/Linear/Fast curves already work while graphical curve drawing is future polish, and the learn strip explicitly says SysEx, clock, transport, panic, and reset messages are ignored.MIDI Protocol Coverage copied reports now group current MIDI 1.0 closeout blockers by owner surface. The report separates the checklist from the actual workbench destination, so remaining work now points at surfaces such as MIDI AUTO, SysEx Vault, Import Flow, Package Repair, Hardware Passport, MIDI PATCH, and MIDI Maps instead of reading like one flat pile.
The MIDI Protocol Coverage popup now shows that owner-surface closeout list directly in the visible panel, and
COPY CLOSEOUTincludes it too. This makes the Settings protocol screen more actionable without adding any MIDI send behavior or routing mutation.MIDI Protocol Coverage closeout language is now more precise for the two biggest active polish areas. MIDI AUTO's blocker credits first-pass graph value feedback, selected-lane bend-range cues, and visible switch-edge trimming, and now points at curve/tangent tools, switch-edge confidence polish, durable destination bend-range contracts beyond the first-pass cue, and the documented future path for true clip/lane-local automation. SysEx Librarian's blocker points at live multi-dump batch capture/save UI, checksum/device-id helpers, device-specific ACK/NAK dialects, deeper restore-history filtering/export, and guarded per-device restore guidance.
SysEx and MIDI AUTO visible labels now avoid implying hidden hardware action.
OPEN SYSEX VAULT,SAVE METADATA,REMOVE FROM PROJECT,LINK TO PASSPORT, andMANUAL VERIFYmake the no-send/project-metadata boundary clearer, and the compact MIDI AUTO preview now says opening the editor sends no MIDI.MIDI TIMING recorded-alignment writes now use explicit warm-action confirmations and matching copied report language.
APPLY COMP,ACCEPT RETURNED, andCLEAR ALIGNall say they send no MIDI and do not change external hardware, while still making clear that they store/remove Hardware Passport recorded-timing alignment and may apply live MIDI recording compensation in SpaceAge.MIDI Protocol Coverage now uses
current MIDI 1.0 closeoutlanguage where reports previously saidrelease-readinessorproduct-readiness. The math is unchanged; the wording now better separates backend protocol maturity, customer-facing closeout, and real-world hardware validation.MIDI status wording is now stricter. The protocol dashboard says
TRACKED MODEL ROWS,CUSTOMER ROWS CLEAR, andMIDI 1.0 CLOSEOUT PROGRESS; copied reports use the same closeout language; MIDI Health saysPreflight cleaninstead ofready; and MPE reports sayMPE-like preservation, not true MPE.Copied MIDI Health reports now include the same trust boundary as the visible panel: MIDI Health is diagnostic preflight evidence, not proof that external hardware accepted setup, SysEx, timing, or MPE behavior.
SysEx Vault now shows a visible
BATCH DRY RUNstrip, not just a copied report. The strip is driven by the sameSysExBatchCapturePlanmodel asCOPY BATCH DRY RUN, and shows captured/expected dumps, remaining dumps, per-dump timeout, next action, and explicit dry-run/no-autosend/no-batch-save language. This remains a non-mutating safety surface; it does not arm live multi-dump capture or store a batch automatically.Hardware bend-range contract visibility is now more visible without adding any new send behavior. MIDI AUTO pitch-bend readouts now say
BEND RANGEinstead of the looser earlier trust wording, and selected Hardware Passport rows show a dedicatedBEND RANGEstrip that is calm/blue when a destination range is declared and amber when the Passport still needs one.MIDI AUTO selected-lane graphs now make real automation points and switch/block lanes easier to read. Focused points have larger visible and clickable targets, selected/hovered points get stronger halos, and switch lanes now draw active blocks plus vertical edge handles so sustain-style automation looks like something the user can grab. This is an editor-affordance pass only; it does not change MIDI storage, pattern ownership, export behavior, or hardware routing.
MIDI Protocol Coverage wording now credits those focused MIDI AUTO affordances without closing the blocker prematurely. The remaining MIDI AUTO finish-line text now points at curve/tangent shaping, switch-edge confidence polish, and durable destination bend-range contracts beyond the first-pass cue rather than stale "larger handle" or "value badge" work that has partly landed. Clip-local and lane-local automation are future ownership architecture.
SysEx Vault
COPY BATCH DRY RUNnow has an optionalEXPECTED DUMPScount field. The copied dry-run plan uses that user-entered target plus the current one-dump capture evidence to describe whether a future multi-dump session is bounded, incomplete, or ready to plan through, without adding a hidden live inbox, sending MIDI, saving a dump, or mutating the project.Hardware Passport setup now has visible next-step guidance in two places. The selected Passport row shows a compact
NEXT SAFE STEPline using the same safety order as the copied closeout report, and MIDI SETUP device templates now show aCONNECT THIS SYNTH/CONNECT FIRST LANE / PARTstrip explaining thatAPPLY DRAFTcreates/attaches project-side Passport data without sending MIDI, whileTEST NOTEremains a separate confirmed note-on/off action.Hardware Passports now have a copy-only
COPY CLOSEOUTaction beside the recall plan/log/queue reports. It copies one selected Passport's output device, MIDI channel, bank/program plan, SysEx/setup/NRPN counts, bend-range contract, recorded-timing alignment, sync role, warnings, queue readiness, next safe action, and an explicit no-send/no-mutation safety line.MIDI AUTO now has graph-level cursor and hover-hint affordances. Editable lanes use a pointing cursor over drawable graph space and a drag hand over existing points, while a small in-graph hint explains draw, right-drag erase, Shift-lasso/group selection, point drag, and review-only setup lanes without overwriting durable status or shared-pattern warnings.
SysEx Vault now has a clipboard-only
COPY BATCH DRY RUNaction in the capture row. It uses the existingSysExBatchCapturePlanmodel to describe the future multi-dump workflow, current blockers, warnings, and safety contract without sending MIDI, queueing restore, saving a dump, or changing the project.MIDI AUTO
LANE VIEWnow uses larger visible expression-point handles and a wider click/hover target. This directly improves one launch-polish blocker, "larger full-lane point/value targets," without changing MIDI storage, clip-local ownership, export behavior, or hardware routing.MIDI AUTO's
OPEN MIDI PATCHdoorway is now always available. It still becomes visually strongest when a review-only setup lane is selected, but users no longer have to select protected setup data before jumping to the safe bank/program/RPN/NRPN review surface. The action is navigation-only and sends no MIDI.MIDI AUTO now has a dedicated selected-lane check strip under the status bar. It labels the selected lane as editable or review-only, points protected setup data back to MIDI PATCH, and surfaces the first few model-owned final-editor finish-line items directly in the panel instead of burying them only in status prose or copied reports.
MIDI AUTO discoverability now has visible doorways without changing automation ownership. The Piano Roll menu row has a direct
MIDI AUTObutton that lights when the selected pattern already has automation lanes, MIDI TASKS and Settings expose safe doors, and Arrangement lane badges now showAUTO/AUTO+when a real clip/pattern context exists. The lane badge targets the selected real clip on that lane when possible, otherwise the first real clip on that lane, then opens the same PTN-owned MIDI AUTO editor. This is still PTN-owned automation, not full Arrangement lane/clip automation.MIDI Protocol Coverage no longer labels the dashboard-family backend percentage as
BACKEND FOUNDATION. The UI now saysFAMILY BACKEND READY, copied reports sayTracked-family backend-ready, and the scorecard note explains that this denominator includes tracked polish/roadmap rows. This keeps the high-90s MIDI 1.0 backend-foundation estimate separate from the lower visible release-readiness and dashboard-family scores.SysEx Vault now has selected-snapshot restore closeout evidence beside the session restore history. The selected card follows the snapshot dropdown and shows whether that exact dump has manual/device/timeout evidence, confirmation policy, archive state, Hardware Passport link, and identity warnings.
COPY REPORTnow includes the selected snapshot closeout section. This is deliberately read-only/copy-only: it does not queue recall, restore hardware, or send SysEx.MIDI SETUP scenario cards now expose row-level safe-door actions. Actionable checklist rows show an
OPENpill and hover highlight, then route to the same guarded MIDI Input, MIDI Out, Hardware Passport, Timing, or Health surfaces used byNEXT ACTION. These row clicks are navigation-only: they do not arm lanes, apply drafts, queue test notes, send SysEx, recall programs, or mutate project routing.Piano Roll now has a read-only
MIDI AUTOpreview lane between the Chord Engine lane and the velocity lane. It shows compact traces for CC, pitch bend, pressure, sustain, and other selected-pattern MIDI automation/expression data without forcing the user to open the full MIDI AUTO editor just to discover that expression exists in the clip.MIDI Protocol Coverage now uses the current doorway names in report-facing blocker data. The former expression-editor blocker label is now
AUTO LANES Final Editor, the Hardware Setup Safety action now saysOpen MIDI PATCH, and the report copy prefersrelease-ready/release-readinesswhen describing the visible MIDI 1.0 finish line.Hardware Passport recall now uses queue language consistently. The visible recall buttons and confirmation titles now say
QUEUE PROGRAM RECALL/QUEUE RECALL + SYSEX, reinforcing that recall remains staged, explicit, and confirmation-gated rather than an instant hidden send.MIDI Protocol Coverage wording now mirrors the current MIDI PATCH surface. The scorecard clarification separates backend foundation from visible release readiness without the confusing "two meters" phrasing, and the RPN/NRPN plus Program/Bank rows now mention the selected-item readouts and no-send mapping/recipe actions directly.
MIDI PATCH now has a selected-item decision strip. Clicking a Bank/Program row, RPN/NRPN setup card, or protected channel-mode/reset row shows
TYPE,SAFETY,NEXT ACTION, andWHY, so users no longer have to infer safety rules only from dimmed buttons. Bank/Program rows explain that save/attach/map actions are no-send, RPN cards can report ready-to-queue after confirmation, NRPN cards can say whether they need a queue-safe Hardware Passport definition, and protected reset/channel-mode rows say copy-only directly.MIDI PATCH selected-item decisions now use the same cold/warm/hot safety language as the rest of the hardware workflow. The strip column is labeled
SAFETY, the policy banner defines cold/warm/hot in plain language, bank/program recipe and SoundFont mapping rows sayCOLD / READY, NRPN definitions sayWARM / DEFINE, queueable RPN/NRPN cards sayHOT / READY, and protected channel-mode/reset rows sayCOLD / COPY ONLY. Related tooltips now use the same temperature language, andBEND INFOstays cold/blue while readyTEST BENDbecomes a hot/dark confirmed hardware action. This is UI wording only; no setup card, Passport recipe, SoundFont map, pitch-bend test, or hardware recall is sent without its existing explicit action.Hardware Passport recall now shares that same button-temperature contract.
COPY PLAN,COPY CLOSEOUT,COPY LOG, andCOPY QUEUEare cold text-only support actions;QUEUE PROGRAM RECALLandQUEUE RECALL + SYSEXare hot confirmation-gated hardware actions whose darker button colors and receipts make clear that SpaceAge attempted the queue, not that an external device accepted or applied the patch/setup state.SysEx Vault batch wording now tells the truth at the point of use. The expected-dump field, visible batch strip, and copied Vault report call the feature a batch dry run, while the next action says to use one-dump
ARM CAPTURErepeatedly until live multi-dump capture exists. This preserves the useful planning/status layer without implying a hidden batch recorder is already active.MIDI import/apply receipts now count protected setup-only rows separately from general preserved MIDI payload. The structured result exposes
reviewedProtectedSetupOnlyEventCount, summaries can say "protected setup rows," and action lines state that those channel-mode/reset events remain copy-only and excluded from playback/export. A focused self-test covers protected-only setup rows.Protected channel-mode/reset messages now survive review/store paths without becoming performance expression. Local Control, Omni, Mono/Poly, All Notes Off, All Sound Off, and Reset All Controllers can be preserved in pattern MIDI setup payload for MIDI PATCH/Hardware Passport review and project round-trip, but playback/export still use the editable-expression predicate and continue to exclude those messages unless a future explicit confirmed hardware command sends them. A focused self-test now guards that boundary.
Direct physical MIDI sync/chase is now source-aware. Host/plugin MIDI keeps the existing source-less behavior, but MIDI Clock, Start/Continue/Stop, Song Position Pointer, MTC, and MMC coming from SpaceAge-opened hardware inputs must match a ready Hardware Passport for that input device before they can move tempo or transport. The readiness rules mirror the MIDI Sync policy summary and use a non-blocking profile check to avoid timing stalls while Settings edits are in progress.
Visible MIDI hardware surfaces now use
Hardware Passportlanguage consistently in the lane MIDI routing panel, Hardware Passport cards, MIDI PATCH status messages, save/attach actions, and chooser placeholders. Internal C++ names still use profile terminology for stability, but the customer-facing concept now has one name.MIDI playback, MIDI export, and export/readiness reports now keep review-only setup payload out of the normal song stream. Imported or recorded Bank Select, Program Change, RPN/NRPN, and Data Entry events can still be preserved for inspection/setup workflows, but live playback, exported MIDI, and exportable-expression counts now use only editable performance expression such as CCs, pitch bend, pressure, sustain, pan, volume, and similar gestures unless a future explicit setup/recall command says otherwise. Self-tests now guard against setup data sneaking back into ordinary playback/export.
MIDI TASKSnow has a directMIDI AUTO...doorway and a matching tooltip. It opens the existing Settings panel and immediately launches the selected-pattern MIDI automation/expression editor, so users do not have to remember that automation lives behind Settings. The underlying model is unchanged: current MIDI AUTO data remains selected-pattern expression data, not full Arrangement automation.MIDI OUT now has a model-owned trust gate layered above readiness, runtime, and visible device inventory. The Settings MIDI OUT popup and copied report show whether external hardware output is
IDLE,BLOCKED, orREADY, why, what the next action is, and which message families are live-performance-safe versus explicit setup/sync/recall actions. This is read-only and sends no MIDI.MIDI PATCH now exposes Hardware Passport pitch-bend testing as a visible
TEST BEND/BEND INFOaction. The button uses the selected Arranger lane's attached Hardware Passport, renders the processor-owned bend-test plan, refuses incomplete setup with a report, requires confirmation before sending, and then displays the structured receipt. It queues only the short C4 note plus center/up/center/down/center pitch-bend phrase; it does not send Program Change, Bank Select, SysEx, MIDI Clock, transport, or reset data.Hardware Passport pitch-bend testing now has a confirmed processor-owned queue receipt behind the model-owned plan. The confirmed action queues only a short C4 center/up/center/down/center note-and-bend phrase, logs each attempted message, refuses unconfirmed sends, and keeps Program Change, Bank Select, SysEx, MIDI Clock, transport, and reset traffic out of the gesture. The MIDI PATCH panel now exposes the action through the same explicit-confirmation safety style as setup-card queueing.
MIDI stem-package import receipts now distinguish planning from real project mutation. The model-level receipt can say lane stems are prepared/applied, but only the processor receipt after the confirmed lane-stem import path reports
Project changed: yesandUndo checkpoint: yes. The receipt, structured payload, summary, and self-tests now carryprojectMutated,undoCheckpointCreated, and undo-safety wording so package imports remain auditable and undo-trustworthy.Hardware Passport summaries now expose a pitch-bend test plan. It tells MIDI PATCH and future Hardware Passport UI whether a profile has an output device and declared bend range, describes a conservative C4 center/up/down/center phrase, publishes safety copy, and gives the next action. Visible actions must call the confirmed processor receipt path instead of constructing MIDI in the editor.
SysEx snapshot reports now include a conservative identity confidence line. The MIDI model preserves the raw SysEx device id, reports manufacturer/device identity beside the linked Hardware Passport, exposes
identityMatchesProfileandidentityNeedsReviewin structured payloads, and warns when a manufacturer-specific dump is linked to a mismatched Hardware Passport. This is deliberately framed as identity evidence, not proof that restoring the dump succeeded.MIDI Protocol Coverage now treats external pitch-bend trust as a Hardware Passport problem instead of hiding it inside the former generic MIDI expression bucket. The Pitch Bend and Pressure family still credits MIDI AUTO inspection/authoring and internal/RPN range visibility, but its closeout blocker is now
Hardware Bend Range: finish destination bend-range setup and a guided bend-test phrase before promising that slides will match a MiniNova, QY, SoundFont, or other external target.Hardware Passport bend-range contracts now surface in the places that decide whether MIDI is safe to trust externally. Project readiness, external-output readiness, and export lane summaries carry per-lane expression counts, pitch-bend expression counts, and the attached Hardware Passport bend-range contract. Hardware-routed lanes or clips with pitch-bend expression now warn when the destination bend range is undeclared, instead of silently assuming the internal/RPN-observed bend range matches the external synth.
MIDI Health source-policy repair guidance now uses the same persisted string ids as the processor and Settings panel.
AUTO,HOST ONLY, andDIRECT ONLYsuppression cards no longer fall through to generic wording because of stale integer-policy comparisons, and the self-test suite now checks the policy-specific repair text.MIDI import now keeps PPQ source files on their musical grid while still reviewing conductor metadata. Positive-PPQ MIDI files convert ticks directly to SpaceAge steps, so a variable-tempo source file can show its tempo map in the receipt without stretching later notes across the Arrangement. SMPTE/timecode files still use seconds conversion because their timestamps are already time-based.
Direct selected-pattern Piano Roll MIDI import now uses the long 4096-step pattern timeline instead of the old 64-step Drum Composer bank limit. Drum Composer MIDI import still intentionally targets the visible 64-step bank model, but melodic Piano Roll material and its preserved expression data can now survive beyond step 64 through both Import Wizard and direct selected-pattern import paths.
Current protocol reports and setup-guide action labels now consistently point users to
MIDI AUTOwhen they mean the selected-pattern MIDI automation/expression editor. The lower-level data is still called MIDI expression where appropriate, but the visible surface no longer falls back to the olderMIDI AUTOname in current model-owned code paths.MIDI Health repair recommendations now understand the MIDI Input source policy. If SpaceAge is accepting host/plugin MIDI and direct physical MIDI at the same time, Health raises a high-severity "Host and direct MIDI are both active" repair card that opens MIDI Input setup. If AUTO, HOST ONLY, or DIRECT ONLY is intentionally suppressing one source, Health reports the blocked host/direct counts with policy-specific wording instead of leaving the user to decode counters.
MIDI Input now has a visible source policy for host/plugin MIDI versus SpaceAge direct physical MIDI.
AUTOaccepts host MIDI normally and suppresses host-stream musical input after a lane-selected direct device starts sending, whileHOST ONLY,DIRECT ONLY, andBOTHgive deliberate alternatives. The policy persists with the project, copied reports include policy/suppression counts, and the Settings MIDI Input panel shows blocked host/direct message counts.MIDI Input readiness now reports observed host-stream versus direct physical-input traffic, open direct input device ids, dropped direct-input messages, and a duplicate-input risk when both routes are active for a device-specific lane. Settings MIDI Input, MIDI Health repair recommendations, copied reports, and the lane MIDI Routing footer now consume the same enriched processor-owned report instead of separate partial stories.
Arrangement lane MIDI Routing now exposes a physical input-device selector beside the live arm/channel controls. Choosing a device writes the lane's existing
midiRoute.inputDeviceId, refreshes the direct external input router through the normal lane mutation path, and shows currently opened direct inputs plus dropped-message count in the panel footer. This turns the new backend input router into a visible workflow without adding a second routing model.MIDI Protocol Coverage now scrolls through its full protocol-family list with the mouse wheel and shows a
Showing X-Y of Nfooter. The copied report is unchanged, but the in-app source-of-truth dashboard no longer hides lower rows behind a passive+N morelabel.MIDI PATCH now shows a queue-policy strip directly under the safe-by-default banner, and the MIDI Protocol Coverage RPN/NRPN row now uses the same language. The panel teaches the operational rules at the point of action: RPN setup cards can queue after confirmation, NRPN setup cards require a queue-safe Hardware Passport definition, and protected channel-mode/reset rows are copy-only and never queued from MIDI PATCH. This is customer-facing clarity only; it does not loosen the guarded hardware-send model.
MIDI PATCH and Protocol Coverage truth labels were tightened after the setup-card and restore-history passes. RPN/NRPN setup cards now read as review-first/confirm-before-queue, protected channel-mode rows keep the copy-only/no-send language, and SysEx librarian blockers now point to deeper filtering/export and device-specific polish instead of implying visible restore history is still missing.
SysEx Vault now shows a compact restore-history card directly in the panel. The newest restore-verification receipts are visible with receipt kind, snapshot name, trust label, and safety label, so device ACK/manual verification/timeout/rejection evidence is not hidden only in copied reports. This does not send MIDI and does not change the guarded recall model.
MIDI documentation was cleaned up to match the implemented state: SysEx Vault/live one-dump capture/confirmed recall/restore receipts are now described as first-pass implemented, Hardware Passport
APPLY DRAFT/UNDO DRAFTare described as confirmed project-only mutations with no hardware sends, and protected channel-mode/setup cards are credited as copy-only review coverage while grouped RPN/NRPN editing/sending remains unfinished.MIDI AUTO visible points can now be moved directly with the mouse instead of relying only on keyboard nudges. A single expression point drags left/right for timing and up/down for value through one guarded processor transaction, and a lasso-selected point group drags horizontally together through the existing collision-aware group move path. Shared-pattern locks, setup-lane review guards, stale-event checks, undo checkpoints, and point-collision refusals remain active.
SysEx Librarian readiness now consumes the same restore-verification receipts shown in the Vault and MIDI Health reports. Device ACK, manual verification, timeout, and device rejection receipts now affect the readiness receipt counts, restore-trust label, and next action, instead of the readiness plan being based only on stored snapshot byte estimates.
MIDI AUTO now disables mutating buttons when a pattern is shared by multiple Arrangement clips and the user has not chosen
MAKE VARIANTorACK SHARED. The command-level guards already existed; the UI now prevents the accidental click up front instead of relying only on a refusal message after the user tries to edit shared expression.SysEx restore-trust wording now distinguishes missing evidence from missing capability. Reports say no device ACK receipt is recorded, and manual verification is reported as "manual receipt recorded yes/no" instead of "manual receipt layer ready/not ready." Protocol coverage now credits
MANUAL VERIFY, timeout receipts, andCLEAR RESPONSESin the SysEx core row while leaving device-specific ACK/NAK dialects, batch capture, restore history, and deeper checksum/device-id helpers as the real remaining librarian blockers.SysEx Vault now exposes
MANUAL VERIFYfor the selected snapshot. This records a manual restore-verification receipt through the same trust ladder as hardware ACK/NAK/timeout receipts, clears any active waiting attempt for that snapshot, and sends no MIDI. It gives old or silent hardware a safe human-confirmed success path without pretending the device generated an ACK.SysEx Vault now exposes
CLEAR RESPONSESbeside the live capture controls. It clears this session's SysEx restore-response receipts and active waiting state without deleting stored snapshots, changing Hardware Passports, or sending MIDI. This gives users a clean way to reset restore trust/history after testing a hardware recall path.SysEx restore attempts now expire into real verification receipts instead of waiting forever when external hardware stays silent. SpaceAge bases the timeout on the snapshot's estimated completion time plus a grace window, with a minimum response window for small dumps. The existing SysEx Vault restore-response strip, MIDI Health row, and copied reports now receive a
Timed outreceipt through the same trust vocabulary used for device ACK/NAK/manual verification.MIDI Health now has a dedicated future-protocol boundary report for MIDI 2.0, UMP packets, Profile Exchange, Property Exchange, and higher-resolution controller domains. This mirrors the MPE truth-label work: the visible Health panel now shows a
FUTURE MIDIrow, copied reports state that SpaceAge is MIDI 1.0-centered for this release, and support text says plainly that MIDI 2.0 support must wait for transport/storage, device negotiation, resolution domains, downgrade behavior, UI labels, and validation tests end to end.MIDI AUTO now has a guarded
SMOOTH CURVEtransform for editable performance-expression lanes. The transform preserves lane endpoints, lightly averages interior points, refuses review-only/setup lanes through the existing editable-lane guard, disables itself for switch-style lanes such as sustain, and uses the same preview-confirm pattern asTHIN REDUNDANTbefore writing undoable changes.MIDI Output Preflight now reports the live external-lane setup-message policy. The visible panel and copied report explain that performance/safety messages can pass live to armed external lanes, while Bank/Program, RPN/NRPN/Data Entry, Local Control, Omni, Mono, and Poly mode remain preserved/reviewed setup data unless the user deliberately acts through MIDI PATCH, Hardware Passports, or a confirmed recall workflow.
MIDI TIMING calibration now saves and applies record compensation in the same gesture.
APPLY COMPandACCEPT RETURNEDstill store the timing record on the selected Hardware Passport, but they also push the suggested compensation into the liveREC LATENCY COMPvalue used by MIDI recording, and the timing panel status now reports that the compensation was saved and applied.MIDI PATCH
QUEUE CARDnow returns a structured RPN/NRPN setup-card receipt instead of a bare success/fail result. The receipt names the Hardware Passport, output device, selected card, queued/failed message counts, per-CC queue lines, plan snapshot, and the no-autosend safety rule. NRPN cards remain blocked unless the selected Hardware Passport explicitly defines that selector as queue-safe.SpaceAge-authored Piano Roll notes now preserve note-off release velocity in the note model. Live MIDI recording and MIDI import capture note-off velocity, project save/load carries it forward with old-project defaults intact, and MIDI export writes it back on Piano Roll note-offs instead of flattening every authored note release.
Direct control-click MIDI Learn now defaults to a safer
CC / Knobcapture path. The context menu still exposes explicitAny Sourcechoices for pitch bend, channel pressure, or poly aftertouch mapping, but the fastest right-click workflow is now less likely to learn the wrong expressive message when a controller sends several MIDI families during one physical gesture.Opening an Arrangement clip for editing now arms that clip's lane for MIDI input. The Piano Roll/Drum Composer editor also reports the MIDI record target in the record controls and status line, so the user sees whether incoming notes are going into a lane-owned clip or a standalone pattern and which lane is armed for live input.
MIDI Song Select is now recognized as a real MIDI 1.0 system-common message. SpaceAge can classify it, reconstruct it from saved MIDI event fields, describe it in logs, count it in the runtime Sync panel, and report the last observed song number. It remains deliberately outside clip/timeline expression playback and does not chase or switch the Arrangement, because external
F3 nntraffic is device song-selection status, not a safe command to mutate a SpaceAge project.Arrangement lane hardware
TEST NOTEnow uses the same preflight/confirmation/receipt flow as MIDI SETUP instead of directly queuing a note. The lane-local action builds a route-aware plan, blocks with a readable report if output routing is incomplete, asks before sending, and then shows a copyable-style receipt proving it queued only note-on/note-off and did not send patch, sync, SysEx, reset, or template data.Arrangement lane hardware
TEST NOTEnow also usesSEND TEST NOTEon the final confirmation, matching MIDI Setup. The receipt still reports queue evidence and reminds the user that audible hardware response must be checked physically.MIDI truth-label cleanup now aligns the readiness reports with the actual handler paths. MIDI Learn is described as capturing messages that pass live input filters, no-armed-lane warnings distinguish deterministic lane routing from legacy audition fallback, fixed-channel copy now says musical notes/controllers are filtered while reset-style safety messages can still be honored, and deferred MPE zone work is split from deferred MIDI 2.0 profile/property exchange work in the Protocol Coverage model. The shared broad payload predicate is now named
isTimelineMidiPayloadMessage(), with the olderisTimelineExpressionMessage()kept as a compatibility alias.Hardware Passport sync-role saves now use a model-owned preview before hardware-affecting roles are saved. If a change would arm future MIDI Clock, playback Start/Continue/Stop, incoming transport chase, or has setup warnings, the Hardware panel shows a confirmation report naming what will happen now, what may happen during future playback, what incoming messages may chase the timeline, and what hardware message families are deliberately not touched.
MIDI SETUP
TEST NOTEnow produces a structured, copyable receipt rather than only a preflight plan. Queued receipts name the output device, note-on/note-off messages, confirmation state, and the hardware-affecting families that were intentionally not sent; blocked receipts name the missing route facts and keep the user in the same guide context.Hardware Passport selection surfaces no longer auto-pick the first saved profile when the user has not selected one. The UI now leaves the picker at
CHOOSE HARDWARE PASSPORT, which is less magical and safer for users with more than one external device.MIDI PATCH now has selectable, copy-only protected setup cards for channel-mode/reset traffic. These rows sit beside RPN/NRPN setup cards but do not inherit attach/define/queue behavior, keeping Local Control, Omni, Mono/Poly, All Notes Off, All Sound Off, and Reset All Controllers clearly review-only.
MIDI import review now exposes protected channel-mode/reset messages as structured review cards, not just plain text rows. Local Control, Omni, Mono/Poly, All Notes Off, All Sound Off, and Reset All Controllers are named, serialized, counted, and marked as explicit-confirmation hardware setup data so future UI can present them safely without parsing prose.
Standard RPN Pitch Bend Range now has a narrow runtime bridge into internal synth playback. RPN 0,0 plus Data Entry MSB/LSB updates the per-channel internal pitch-bend semitone range, and current raw wheel position is re-scaled immediately. NRPN and device-specific setup data remain guarded in MIDI PATCH / Hardware Passport workflows.
MIDI Input readiness now distinguishes saved device choice from host-delivered MIDI and direct standalone hardware input. If a lane names a physical input, reports can check whether that device is visible; the host/plugin path still arrives as source-agnostic MIDI, while the direct external input router can preserve a source-device id for lane filtering.
MIDI Input reports now expose live source-identity status as its own fact. A saved physical controller name is useful for setup and missing-device warnings, first-pass direct device routing now provides source identity for lane-referenced inputs, and basic duplicate host/direct activity is reported. The remaining work is a deliberate preference/de-dupe policy plus real-controller validation.
The processor now has a source-aware live MIDI ingress path for direct external input devices. The host/plugin path still calls the source-agnostic handler, while the external input router can provide a physical source-device id and let SpaceAge reject normal notes/controllers that do not match the armed lane's saved input device while preserving reset-style safety messages.
Note-off release velocity is now preserved in the shared MIDI event/message path and in SpaceAge-authored Piano Roll notes. Imported/recorded raw MIDI note-offs keep their release velocity, ordinary Piano Roll notes carry it through record/import/save/load/export, and the remaining work is a musician-facing release-velocity editor.
Hardware setup device templates now own explicit suggested output channel, test note, velocity, and duration defaults. MiniNova/QY/GM-style devices default to channel 1 melodic test notes, wind/guitar controllers get safer expressive-register test notes, and MPC-style pad workflows default to channel 10 with a kick-range test note. Template reports and structured payloads expose these facts.
Hardware Passport attachment now behaves more like routing, not just metadata: if a lane has a Hardware Passport with input/output device IDs and the lane itself has not overridden those fields, lane normalization inherits the profile devices so live/test hardware routing can resolve the intended port.
MIDI Protocol Coverage now carries action-target metadata for active blocker families. The copied report and visible Protocol rows can now say which surface should own the closeout work, such as
Open MIDI AUTO,Open Import Wizard,Open SysEx Vault,Open MIDI Maps, orOpen MIDI Setup, instead of leaving blockers as passive prose.Count-in recording activation now advances before incoming live MIDI is handled for the block. If the count-in reaches zero partway through a block, notes at or after that sample can record against the activation point instead of being heard but skipped because activation happened later in
processSequencer().Live hardware MIDI output now anchors sequenced notes, controller messages, pitch bend, and MIDI clock to the shared audio-block timestamp before handing them to JUCE's scheduled hardware output path. The router no longer turns each event's sample offset into "a couple milliseconds after the router thread woke up," which reduces chord/clock smear for external gear.
Incoming MIDI Start/Continue and Stop/MMC Stop/Pause chase now respects the incoming event's in-block sample position. Mid-block Start/Continue delays the first sequencer step to the MIDI event sample, and mid-block Stop/Pause lets pre-stop sequencer material render before releasing voices at the stop sample.
MIDI Sync Preflight now reports the last SPP/MTC chase sample offset. The copied report and visible sync rows can show that running timeline jumps are being scheduled at the incoming MIDI event's in-block sample position instead of merely counting that a chase happened.
Live armed input now follows the armed lane's output route for external-capable lanes. Incoming notes, pitch bend, mod wheel, pressure, volume, pan, expression, sustain, Reset All Controllers, All Notes Off, and All Sound Off are mirrored to the lane's hardware/plugin MIDI route at the incoming sample position when the lane target is External or Internal+External. External-only armed lanes no longer start internal recording-monitor voices.
Live MIDI timing audit follow-up: incoming expression timing is currently the strongest path because expression is sample-drained before voice rendering. Incoming SPP and MTC full/assembled-quarter-frame chase now use the same sample-position mindset as transport edges by slicing the audio block around the in-block position jump. Remaining timing closeout items are broader real-hardware validation, richer jitter/offset diagnostics, and eventual user-facing monitoring meters for live external routes.
Generated clip/controller expression now lands on the internal synth state at the same sample offset used for plugin MIDI and hardware MIDI output. Clip playback no longer applies pitch bend, sustain, CC, pressure, volume, pan, or expression changes early for the whole audio block when the event belongs later inside the block.
Panic now clears stale hardware-router live/recall queues before enqueuing the emergency reset messages. Router pending counters are guarded against race-to-negative cases, so MIDI Health queue reports remain stable even if Panic happens while the router thread is draining old messages.
Hardware timing calibration pulses now use absolute due-time scheduling inside the hardware router. Test-note and SysEx/program-recall pacing remain deliberate and conservative, while calibration pulse trains no longer bunch note-offs/onsets together after the first pulse.
Live MIDI
All Sound Offnow respects the incoming event's sample offset inside the audio block. It still performs an emergency hard stop, but now schedules that stop through the voice renderer andretireVoice()instead of immediately wiping voices from the incoming MIDI handler, which keeps SoundFont/sample cleanup aligned with the rest of the live-note path.MIDI Health repair routing now treats the "no armed MIDI lane" state as an actionable MIDI Input setup problem, not a passive status message. The recommendation now teaches that selecting clips/lanes is editing context while an armed lane is the live-performance destination, and its action opens MIDI Input so the user can deliberately choose the lane that should receive controller notes.
MIDI Health now reports the live MIDI destination and input mode from the processor model. The visible Health panel, copied report, and structured payload can say which lane is armed, which input channel filter is active, which play/export channel/route target is used, and whether incoming note-on/off events are currently owned by recording, Step Input, Piano Roll monitoring, or drum-style pad fallback. This makes the rule explicit: selected clips/lanes are editing context; the armed lane is the live-performance destination unless an explicit mode takes over.
MIDI AUTO now has safer editor-keyboard affordances and a corrected selected-lane matcher. The panel takes keyboard focus while open;
Escclears the current target,Delete/Backspacedeletes the selected editable lane or selected point/group through the existing shared-pattern/setup-data guards,Ctrl/Cmd+Aselects the current editable lane's points,Ctrl/Cmd+Ccopies selected points when present or the expression report when nothing is selected,Ctrl/Cmd+Xcopies before deleting selected points, andCtrl/Cmd+Vpastes copied points at the playhead in the same expression lane. Graph drawing now uses the sharedMidiExpressionLaneSelectorsemantics when replacing existing points, so note-specific poly aftertouch lanes match their note number correctly instead of risking duplicate stacked events at the same tick.MIDI AUTO lane browsing now has paging behavior instead of a dead
+N morelabel. The lane list keeps an offset, mouse wheel scrolls hidden expression lanes, Up/Down and Page Up/Page Down move selection, and the selected lane stays in view after refreshes or deletes. Refreshes also preserve selection by the lane's stable MIDI expression key when possible, so selection does not jump merely because row order changed.MIDI AUTO selected-lane scope now has a first-pass viewport instead of being forced to show the whole pattern at once.
VIEW -,FIT LANE, andVIEW +control the visible step range, the scope readout reports the viewed step span, and graph drawing/right-drag erasing use the same visible tick range as the display. The selected scope now draws from full visible expression events rather than the capped lane-summary preview, while lightweight row previews remain intentionally summarized.MIDI AUTO selected-lane scope now builds a first-pass visible point model from real events. Each visible expression point carries its source event index, tick, editor value, duplicate/stack count, and hit box before it is painted. That model now drives hover/readout, exact-point selection, selected-point deletion, direct time/value mouse dragging, value nudging, time nudging, Shift-click/drag grouping, group drag timing, group time/value nudging, and lane-local cut/copy/paste. Deletes, value changes, and time moves now all validate expected old values in the processor before committing, while the larger Piano Roll-grade expression editor remains future work.
MIDI AUTO reports now include a model-owned safety line from
MidiExpressionEditorPlan, so copied expression reports can say whether the selected lane supports guarded point edits or is review-only setup data. This keeps customer-facing reporting aligned with the backend mutation contract instead of hiding safety details in code comments.MIDI Protocol Coverage now credits the compact MIDI AUTO selected-point/group workflow in the Controllers and Pitch Bend / Pressure rows while still leaving the AUTO LANES Final Editor blocker active for launch-grade curve/tangent shaping and durable destination bend-range contracts beyond the first-pass cue. Clip-local and lane-local automation are future ownership architecture.
MIDI AUTO selected-lane points now have hover, selection, and guarded one-point deletion. Hovering a real visible expression point shows a pointer cursor, warm ring, and scope readout; clicking selects it with a white ring and status detail.
Escclears point focus first.Delete/Backspaceremoves exactly the selected event through a processor helper that revalidates the event index, lane identity, tick, and expected old editor value before mutating, so stacked same-tick expression data is not blindly swept away.MIDI AUTO pitch-bend lanes now show an explicit center-reference cue in the selected-lane scope. Pitch bend is drawn as a bipolar 14-bit lane with a visible
PITCH CENTER 8192marker plus SpaceAge's internal default or RPN-learned range, and copied reports now state that SpaceAge preserves raw 14-bit bend data while external destinations may still use a different bend range until lane/instrument/hardware policy is explicit.MIDI AUTO thinning now uses a preview-first destructive workflow. The first
THIN REDUNDANTclick reports the exact model-owned matched/kept/removed counts and asks for a repeat click; the second click applies only if the same lane/request is still active. Lane selection, refresh, or data mutation clears the pending confirmation.MIDI Health now rolls up MIDI AUTO final-editor closeout work from the same per-lane
MidiExpressionEditorPlanmodel used by MIDI AUTO. Project expression summaries, structured payloads, and copied MIDI Next Steps now report concrete remaining editor items such as clip-local ownership, larger Piano Roll-grade lasso/multi-select, visible switch-block/curve handles, deeper smoothing tools, bend-range ownership, pressure badges, and note-row ownership instead of leaving the AUTO LANES Final Editor blocker as a vague future UI blob.MIDI Protocol Coverage now separates working core surfaces from launch-polish blockers for SysEx and MIDI export.
SysEx Core Safetycredits guarded import/vault/one-dump capture/confirmed recall work without claiming the device-specific librarian is finished, whileSysEx Device-Specific Librarian Polishremains the blocker for batch capture, checksum/device-id helpers, device ACK dialects, and restore-history polish.MIDI Export Corecredits pattern/clip/Arrangement/stem-package export readiness, whileMIDI Package And Repair Polishremains the blocker for progress bars, zip/package repair UI, import/repair polish, and broader validation.MIDI Protocol Coverage now emits a model-owned current MIDI 1.0 closeout checklist. The copied report orders blocker categories by release priority, lists the affected protocol families, and names the first action from the same data that drives the Settings dashboard, so the closeout plan no longer has to be hand-reconstructed from scattered rows.
MIDI Protocol Coverage now treats release readiness as the current MIDI 1.0 finish-line score instead of counting deferred future families such as MPE/MIDI 2.0 as silently ready. The Settings card now reports
MIDI 1.0 BLOCKERSbeside backend-ready/UI-pending work, copied summaries sayMIDI 1.0 release-ready, and MIDI AUTO reports now sayselected-pattern MIDI AUTO lanesinstead of implying clip-local automation exists.MIDI Health now has an explicit MPE Readiness Policy object. It reports whether a loaded project contains multi-channel expressive MIDI that may be MPE-like, states the current policy as "preserve as MIDI 1.0 expression," exposes true-MPE zone/member-channel readiness as false, and serializes review guidance plus a true-MPE remaining-work checklist so future UI/support reports do not confuse preserved expression data with real MPE implementation.
MIDI Maps now exposes explicit resolution modes for learned high-resolution CC sources. A learned MSB-capable CC can cycle between
AUTO,7BIT, and14BIT: Auto keeps the existing behavior of using the fine companion when it appears, 7-bit ignores the fine companion for old-school controllers, and 14-bit waits for both coarse and fine values before moving the target. The choice is saved in the mapping, reported in summaries, and validated if a user tries to force 14-bit on a non-MSB controller.MIDI Maps now exposes first-pass MIDI Learn source filters. Before arming Learn, a user can choose whether the next capture should listen for CC, pitch bend, channel pressure, and/or poly aftertouch, with CC automatically restored if every source type is turned off. This prevents the common "I moved the wrong kind of controller and SpaceAge learned it" problem without creating a separate Learn workflow.
MIDI Health now names MPE-like / multi-channel performance expression in the compact headline when it exists. The full report already lists the affected pattern/channel combinations and warns that SpaceAge preserves this as MIDI 1.0 expression until a true MPE zone/member-channel policy exists, but the top line now carries the same honesty.
SysEx Vault now has a visible
RESTORE RESPONSEstrip. It updates while the Vault is open, shows active restore attempts, reports the latest generic device-response receipt when one arrives, and no longer says hardware ACK is unavailable as an absolute truth.COPY REPORTnow stays available when restore receipts exist even if no Vault snapshots are stored.MIDI Health now has a visible live-refreshing
SYSEX RESTORErow. It reports active restore attempts, receipt count, latest device-response summary, and restore-response queue issues, with the full receipt history still available throughCOPY REPORT.MIDI Health now reports SysEx restore-response queue pressure and active verification state. Dropped/oversized restore replies, active restore attempts, and session restore receipts are exposed in the health summary/plain-text/structured payload, so hardware-recall confidence can become visible without blocking the live MIDI path.
Incoming SysEx restore responses now have a processor-owned runtime path. When a confirmed hardware recall queues a SysEx snapshot, SpaceAge registers an active restore attempt; incoming SysEx replies are copied into a bounded worker queue, classified off the live MIDI path, bridged into restore verification receipts, shown in the SysEx Vault restore-response strip, and cleared from the active attempt list on final ACK/NAK/CANCEL-style responses. WAIT responses remain active and visible as not-yet-verified.
SysEx restore response classification now has a conservative model-owned first pass. SpaceAge can classify standard MIDI Sample Dump-style ACK, NAK, CANCEL, and WAIT responses, bridge final ACK/NAK-style outcomes into restore verification receipts, and label valid-but-unrecognized SysEx as unrelated instead of pretending every response proves success. Device-specific Yamaha/Novation/etc. response scripts and deeper per-passport restore history polish are still upcoming.
SysEx restore progress now has a model-owned trust plan plus a restore verification receipt vocabulary. It can report stored dump count, byte totals, DIN wire time, paced completion estimates, confirmation requirements, and warning counts without sending anything, then separately record no verification, manual verification, generic device ACK, generic device NAK, or timeout outcomes. This keeps estimated progress, user-confirmed success, and true device acknowledgement from collapsing into one vague "done" state.
SysEx batch capture now has a model-owned preflight plan. The plan is deliberately preview-only: it can describe source device, Hardware Passport target, expected/captured dump count, per-dump timeout, required explicit start, per-dump review, no-hidden-send policy, duplicate/out-of-order risks, and remaining live batch UI gaps without storing or sending anything by itself.
SysEx capture readiness/progress reports now include source-guidance steps. The guidance tells the user to connect hardware MIDI OUT to the chosen SpaceAge input, find the hardware's patch/bulk dump command, arm capture only when ready, send one F0...F7 dump first, and review/name the result before restoring it later. Yamaha/QY/XG and Novation/MiniNova-style labels get slightly more specific language without pretending SpaceAge has full device scripts yet.
SysEx live-capture now has a 60-second model-owned listening window. Arming capture starts a countdown, captured dumps clear the timeout state, and missed dumps auto-disarm into a visible "capture timed out" phase with next-action guidance. The UI can copy/report the timed-out state instead of leaving the user wondering whether SpaceAge is still listening.
Sequencer playback pattern payloads now publish immutable per-pattern snapshots. Drum steps, Piano Roll notes, Chord Engine markers, expression events, and pattern length are copied at edit/restore/import/recording commit boundaries, then read by
processSequencer()without takingpatternMutex. This removes the biggest remaining playback-side lock from normal Arrangement and isolated sequencer playback.Sequencer playback topology now has an immutable published snapshot. Chain slots, Arrangement lanes, Arrangement clips, and Section markers are copied at mutation boundaries and read from the snapshot inside sequencer playback helpers/callback flow, so playback no longer has to chase live UI topology while the user edits lanes or sections.
MIDI Step Input now reuses the completed-note runtime queue instead of pushing directly into
pianoNotesfrom the live handler. Accepted step-input notes still audition immediately, but model mutation and snapshot publishing happen through the worker commit path.MIDI recording timing now reads pattern lengths from a lock-free realtime mirror. Pattern edits still update the normal model-owned
patternLengthsarray, but every write also publishes torealtimePatternLengths, so live record positioning no longer reads a mutable plain integer array while the editor is changing pattern data.Armed-lane MIDI note recording now uses the same playback snapshot for lane type, instrument pad, and output-channel routing that the input-channel acceptance gate uses. This removes a small race where a note could be accepted against one lane version and recorded/monitored against another if routing changed mid-block.
Quasar note starts now use a published note/velocity lookup table. Loading or refreshing a Quasar package precomputes the best zones for each MIDI note and velocity, so live notes no longer scan the full zone list twice before sounding.
Shared send buffers now reserve a large realtime runway during
prepareToPlay(). Normal host block sizes should no longer trigger send-buffer allocation insideprocessBlock(), reducing another small but real source of live-performance hiccups.Compact MIDI Settings and Output warning rows now show breadcrumbs instead of hiding complexity. Output lane rows show the first blocking reason plus a
+N more in COPY REPORTcue, and the Settings MIDI status cards append+N detail(s) in MIDI...with full tooltips so small surfaces stay readable without becoming silent.SoundFont live-note prepared-pool misses now fail fast when the prepared voice pool is exhausted or stale. SpaceAge increments the MIDI Health refused-start counter and drops the unsafe voice start instead of taking
soundFontMutexand cloning a huge SF2 on the live path.Incoming live MIDI is now handled before
processSequencer()does pattern reads. Sync/chase observation still happens first, and recording still uses the same block-start timing snapshot, but live controller notes no longer wait behind sequencer pattern-lock work before they can reach the sample-positioned monitor path.MIDI AUTO editor plans now expose a model-owned target summary. Copied MIDI AUTO reports can describe the selected lane's active surface, gesture, snap behavior, value language, preview density, release-ready state, remaining final-editor gap, and warnings from one MIDI-layer source instead of assembling separate editor-side fragments.
MIDI import review now sorts tempo, meter, and key map rows by tick before displaying or copying the report, with an AudioSelfTest regression covering out-of-order metadata across tracks. This fixes a subtle conductor-track problem where "First tempo row" could be wrong if the earliest source metadata lived in a later MIDI track.
Realtime MIDI audit completed for the current MIDI pass: live MIDI Learn controller mapping, armed SysEx capture, expression recording, and completed-note recording now enter dedicated runtime queues before non-audio work happens, and the legacy performance-CC/pitch-wheel-to-
perfcutoffpath now updates the raw realtime performance cutoff atomics instead of notifying APVTS/host parameters from incoming live MIDI handling. The remaining deeper realtime risk is note-trigger sample/SoundFont resource locking.Armed SysEx live-capture now copies incoming dump bytes into a bounded fixed-size queue and lets a worker build the review receipt. This keeps large SysEx
MemoryBlockallocation and Vault receipt construction out of the incoming live MIDI handler while preserving the explicit arm, one-dump capture, and no-hidden-send safety model.MIDI expression recording now uses a bounded runtime commit queue. Incoming recorded pitch bend, pressure, mod wheel, sustain, pan, volume, expression, and other safe timeline-expression events enqueue compact pattern/tick/message records; a worker appends and sorts the pattern expression list under
patternMutex.MIDI note recording now uses a bounded runtime commit queue for completed notes. The live path still handles note-on/note-off monitoring immediately, but finished
PianoNoteinsertion, pattern-length updates, and last-recorded-note feedback now happen on a worker underpatternMutex. That removes the biggest remaining recording vector mutation from the live MIDI handler.MIDI Health now reports queue pressure for every live-safe MIDI queue: controller mapping, SysEx capture, oversized SysEx capture attempts, expression recording, and completed note recording. If a dense controller stream or giant dump overwhelms a safe queue, the copied Health report says exactly what dropped instead of letting the failure hide behind "MIDI feels weird."
Live note start no longer calls the pad-state sanitizer. That sanitizer can notify host parameters when repairing invalid values, so it now stays on load/reset/paste/edit boundaries instead of running at the exact moment a musician triggers a note.
Live-note audit follow-up: ended voices now retire their SoundFont/sample attachments through one shared voice-retirement helper instead of leaving dead TSF/sample handles attached to inactive voice slots until the next note steals that slot. This reduces one note-on cleanup trap after long SoundFont tails or sample-only stops.
MIDI Health now reports how many SoundFont instruments are loaded and adds a live-latency checklist item for SoundFont-only lag. This gives users and testers a sane diagnostic path while the prepared SoundFont voice pool is validated against real projects.
MIDI Health now surfaces MPE-like / multi-channel performance expression after a project is loaded, not only during import. Project expression reports count CC74/timbre lanes, flag patterns that spread pitch/pressure/timbre expression across multiple channels, and repeat the honest boundary that this data is preserved as MIDI 1.0 until true MPE zone/member-channel policy exists.
SoundFont live-note path now has an atomically published prepared TSF voice rack per pad. Loading a SoundFont, changing a SoundFont preset, and audio-device preparation prewarm multiple TSF copies with fixed voice counts, and live notes borrow those prepared instances without taking
soundFontMutexon the normal path. MIDI Health reports loaded SoundFont count, prepared rack slots, active rack slots, and refused live voice starts, so large-SF2 live performance can be diagnosed instead of guessed.Remaining live-note audit risk: if the prepared SoundFont voice rack is exhausted or stale for the current sample rate, SpaceAge now refuses the unsafe start and reports the miss in MIDI Health. The next professional pass should tune the rack size against real projects before we call huge-SF2 live play fully solved.
Sample-path audit follow-up: classic sample/one-shot voice start no longer re-locks
sampleMutexfor each eligible layer just to check round-robin. Remaining risk: sample/one-shot voice start still consults layer settings and sample handles behindsampleMutex. A later pass should snapshot pad layer metadata into lock-free/read-mostly structures so live note start does not wait behind sample loading or layer editing.Customer-facing MIDI audit follow-up: the backend now recognizes, preserves, routes, imports, exports, and reports nearly all practical MIDI 1.0 data, but a few surfaces still need product polish before we call the experience finished. The biggest remaining user-facing gaps are launch-grade MIDI AUTO ownership/curve/value editing, clearer MIDI PATCH wording around review-only versus queue-safe setup cards, SysEx Librarian batch-capture/device-specific ACK/source/checksum affordances, restore-history polish, and continued polish for compact Health/Input/Output warning drilldowns.
SysEx Vault now exposes the first live-capture bridge:
ARM CAPTURE,CANCEL,SAVE CAPTURE, andCOPY CAPTURE. Incoming SysEx is still captured only after explicit arming, auto-disarms after one dump, shows the sharedSysExCaptureProgressstatus strip, and saves the reviewed bytes into the Vault as a confirmation-required snapshot.SysEx capture now has a model-owned progress report for idle, armed/listening, and captured/review states. The SysEx Vault capture strip and
COPY CAPTUREreport show capture status, byte counts, transfer class, trust text, safety text, and next action fromSysExCaptureProgressinstead of inventing separate editor wording.SysEx live-capture is now processor-wired behind an explicit arm/disarm boundary. The processor can report live-capture readiness, arm for one incoming dump, accept the next SysEx bytes, disarm automatically, produce a captured-only receipt, and commit the reviewed dump into the SysEx Vault with confirmation required. This keeps live capture out of ordinary MIDI note/channel filtering and preserves the no-hidden-sends rule.
SysEx live-capture now has model-owned readiness and receipt objects. The readiness plan says one-dump live capture is wired, explicit arming is required, and captured dumps remain listen/store only; the receipt classifies captured bytes, checks F0/F7 framing, estimates DIN wire time and recommended send delay, and repeats the safety promise that captured dumps are stored/reviewed only, never transmitted. Self-tests cover valid Yamaha-style captures and invalid framing.
MIDI AUTO editor plans now tell the truth about first-pass versus final. Every editable MIDI AUTO lane can report that the selected-lane scope exists, while also naming the remaining product gap: curve/tangent shaping, switch-edge confidence polish, and durable destination bend-range contracts beyond the first-pass cue. Copied MIDI AUTO reports now carry that same distinction, so the protocol closeout list no longer treats MIDI automation editing as a vague missing blob. Clip-local and lane-local automation are future ownership architecture.
MIDI SETUP now exposes a guarded
TEST NOTEbridge for the selected Device Template and target lane. The button builds the model-owned preflight receipt, refuses blocked routes, requires explicit confirmation, and queues only a note-on/note-off pair through the selected hardware output. It deliberately does not send Program Change, Bank Select, MIDI Clock, transport, SysEx, reset, template-apply data, or timing-calibration traffic.MIDI hardware setup now has a model-owned safe test-note plan and guarded
TEST NOTEbutton. A device template can report whether a hardware test note is blocked or ready to queue after confirmation, which output/profile facts are missing, which channel/note/velocity/duration would be used, and that report generation itself sends no MIDI.MIDI SETUP device templates now carry model-owned hookup checklists. MiniNova-style synths, Yamaha QY/GM/XG modules, EWI/wind controllers, MIDI guitar systems, and MPC-style pads can now report practical cabling, channel, test-note, SysEx Vault, and timing-calibration steps from the MIDI layer. Template search, template reports, structured payloads, and apply previews all quote the same checklist instead of relying on editor-only prose.
MIDI Health now owns a reusable live-latency checklist. Copied Health/Next Steps reports can tell the user whether the internal audio block is high, when the likely delay is outside SpaceAge, and what to check next: wired MIDI/audio, buffer size, recorded-timing alignment, and observed lane input-channel filters.
MPE-like import reporting now has a model-owned limitation checklist. MIDI inspection reports serialize what SpaceAge preserves today as MIDI 1.0 expression, what it does not yet interpret as true MPE, and the recommended review step before a user treats an imported clip as an MPE performance.
MIDI Import Wizard Preview now has a
COPY REPORTbutton. It copies the same preflight/import-action receipt shown in the panel, giving users and testers a way to share import facts, planned actions, warnings, channel-role decisions, SysEx quarantine intent, and setup-review notes without screenshots.The current MIDI import confirmation message now uses
MidiImportApplyPreview::toPlainTextReport()for its action preview instead of rebuilding planned-action prose inPluginEditor. This keeps the current import confirmation path aligned with the same model-owned receipt that the future import wizard, support copy, undo text, and progress meter should use.MIDI import apply previews now expose action counts and a plain-text confirmation receipt. The model can say how many lanes would be created, whether one clip would be imported, how many expression/setup/SysEx/sync actions are involved, and how many actions require confirmation before any project mutation occurs.
MIDI import plans now serialize as structured receipts via
MidiImportPlan::toVar()andMidiImportPlanChoice::toVar(). The raw plan can now expose recommended choices, confirmation requirements, channel-role hints, lane candidates, warnings, and the nested inspection report to future UI/support code without relying onMidiImportSummarystrings.MIDI import review dashboards now carry structured channel-role hints and lane candidates, including readable role/type labels. The future import panel can show why SpaceAge thinks a source channel is drums, melodic, expressive melodic, controller-only, or hardware setup, and can render suggested lanes without reconstructing the import decision tree in UI code.
MIDI import inspection now exposes a structured
MidiInspectionReport::toVar()payload and carries that same payload throughMidiImportReviewDashboard::inspection. Future import UI, MIDI Health, support reports, and hardware-safe import decisions can read timing format, tempo/meter/key rows, channel activity, MPE-like flags, setup-data counts, warnings, SysEx/transport flags, and summary text from one MIDI-model-owned object instead of re-counting raw MIDI events or parsing prose.SysEx Vault plain-text reports now include vault-level totals: total bytes, aggregate DIN wire time, paced completion estimate, transfer-class counts, confirmation count, archive count, warning count, and the largest snapshot. The future Vault UI can show a whole-project restore risk/readiness snapshot instead of making the user inspect one dump at a time.
SysEx Vault aggregate facts now exist as structured MIDI-model data via
SysExVaultSummary, not only report prose. Snapshot count, byte totals, timing estimates, transfer-class counts, confirmation/archive/warning counts, and largest-snapshot metadata are available to future UI cards without parsing text.MIDI Health now embeds the SysEx Vault dashboard in both its copied plain-text report and structured payload. Support bundles and future MIDI Health/Vault UI can show whole-project hardware dump risk without rebuilding Vault totals in
PluginEditor.SysEx Vault snapshot receipts now include transfer class, estimated DIN wire time, and total paced completion time. Stored hardware dumps can explain whether they look like a small SysEx, patch dump, or bulk dump before any future recall UI asks the user to send them to old hardware.
MIDI AUTO transforms now report untouched source-event counts in their model receipts. Quantize, scale, offset, and thinning actions can say how many events matched, changed, were removed, and were deliberately left alone, so selected-lane edits do not feel like they might have secretly rewritten the whole pattern.
MIDI AUTO editor plans now carry model-owned snap/value/preview-density labels, and the selected MIDI AUTO scope plus copied MIDI AUTO reports display them under the editing hint. Pitch Bend can say it is a 14-bit centered bend lane, Sustain can say it is an on/off block lane, pressure/CC lanes can report their real value language, and dense lanes can say whether the preview is complete, truncated, or ready for
THINwithoutPluginEditorguessing from raw message types.MIDI AUTO selected-scope drawing is now easier to understand while editing. The large selected expression scope draws a step/bar grid, a visible playhead marker, and uses the same model-owned preview renderer without repainting over that grid. Drawing feedback now reports the snapped step plus raw tick/value, so the user can tell where a CC, pressure, sustain, or pitch-bend point landed in musical time instead of reading only debugger-style ticks.
MIDI AUTO can now author arbitrary performance CC lanes directly. The create strip has a
Custom CCtarget with a controller-number selector, selected generic CC lanes sync that selector back to the actual controller number, and new points/ramps reselect the lane they just created so the target stays obvious. Protected setup controllers such as Bank Select and RPN/NRPN remain outside MIDI AUTO and stay in MIDI PATCH / Hardware Passport workflows.MIDI AUTO
ADD POINTandDRAW RAMPnow follow the selected expression lane when one is selected. Selecting Pitch Bend, Sustain, CC, Channel Pressure, or Poly Aftertouch now synchronizes the insert channel/note/value controls to that lane and uses the lane's MIDI-layer value range/event creation rules, instead of letting a separate dropdown quietly disagree with the selected row. Lane refreshes keep the current value control when the same selected lane remains active, so adding one point does not reset the next point back to the lane default. Ramps now start from the current/prior lane value instead of blindly rising from zero, replace old editable points inside the ramp span, and deliberately disable ramp drawing for sustain/switch-style lanes. A visibleCLEAR TARGETaction returns the create strip to dropdown-driven new-lane authoring.MIDI AUTO selected-scope drawing is now timeline-aware and model-owned. The big editable scope maps X across the whole selected pattern/clip timeline instead of only the existing event range, while pitch bend, sustain, CCs, channel pressure, and poly-aftertouch now share one MIDI-layer point-to-event conversion path. This closes the old split where the UI drew generic 0-127 values while pitch bend needed 14-bit centered semantics and sustain needed switch semantics.
MIDI AUTO now has a reusable
MidiExpressionEditorPlanmodel. Each expression lane can report whether it should behave as point drawing, continuous curve drawing, switch/block drawing, or protected review-only setup data. The copied expression report, self-tests, and selected-lane scope now use this same plan language, so pitch bend stays centered/14-bit-aware, sustain reads as block-style data, pressure reads as a curve, and setup rows do not masquerade as editable performance gestures.MIDI AUTO lane summaries now expose model-owned span, density, and ownership labels. Copyable expression reports can now say whether a lane is a single point, dense stream, truncated preview, pattern-owned pitch lane, switch/block lane, note-pressure lane, or review-only setup/device data without
PluginEditorguessing from raw MIDI messages. This is another step toward full Piano Roll-grade expression lanes.MIDI Health now aggregates those expression lane categories project-wide. The health summary can report drawable lanes, review-only setup/device lanes, switch/block lanes, bipolar lanes, pitch lanes, pressure lanes, and truncated previews, so dense expressive MIDI feels diagnosable before it becomes a confusing edit or performance problem.
MidiExpressionProjectSummarynow owns a copyable plain-text expression report. MIDI Health'sCOPY STEPSand fullCOPY REPORTpaths reuse that report, so advice about drawable lanes, review-only setup lanes, pitch bend, pressure, switch/block data, dense lanes, and shared-pattern cautions stays consistent across the app.The MIDI AUTO panel now shows the selected lane's editor plan in the scope/status area instead of only saying that a lane was selected. This is a small customer-facing step toward the full drawable MIDI automation editor: the user can see "what kind of thing am I editing?" before we expose deeper curve shaping and clip-local ownership choices.
SysEx Librarian readiness now explicitly distinguishes estimated paced restore progress from restore verification receipts. MIDI Health's full report, next-steps copy, and structured payload include the librarian readiness report, including whether restore progress is estimated-only, whether device ACK parsing is available, whether a manual verification receipt covers the dump, and whether manual verification remains required.
SysEx Vault now shows that same trust boundary in the visible safety strip and includes the SysEx Librarian readiness report in
COPY REPORT. The Vault no longer relies on the user opening MIDI Health to learn that paced restore progress is SpaceAge-side estimation, not hardware acknowledgement.MIDI AUTO now protects shared pattern expression edits with an
ACK SHAREDguard and a saferMAKE VARIANTescape hatch. If a pattern is used by multiple Arrangement clips, adding, drawing, clearing, deleting, or transforming expression is blocked until the user either makes the selected clip independent or explicitly acknowledges that pattern-scoped MIDI expression will affect every linked clip.MIDI PATCH now has a guarded
QUEUE CARDbridge for selected RPN setup cards and passport-defined queue-safe NRPN setup cards. It requires an attached Hardware Passport with an output device, shows an explicit confirmation, queues the exact model-owned CC sequence, records success/failure in the hardware recall log, and still blocks unknown/device-specific NRPN setup cards until the Hardware Passport defines the parameter.Hardware Passports now have a first NRPN dictionary model. A profile can remember named NRPN definitions with parameter MSB/LSB, value meaning, relative-data policy, and an explicit
queueSafeflag. Profile summaries report dictionary counts and previews, validation catches incomplete/duplicate definitions, and MIDI PATCH only queues an NRPN setup card when the selected lane's passport contains a matching queue-safe definition.MIDI Protocol Coverage now credits the completed MIDI Learn source-conflict confirmation path. The Learn row no longer says the visible replace/add-as-macro flow is future work; it now names the implemented
REPLACE,MACRO, andCANCELchoices while keeping the real remaining Learn polish visible.MIDI Learn assignment summaries now carry a model-owned
resolutionLabelsuch as7-bit CC,14-bit paired when CC 33 fine is present,14-bit fine companion, or14-bit pitch bend. MIDI Maps can display high-resolution clarity without rebuilding controller-pair logic inside the UI.The MIDI Learn dashboard now owns a plain-text report. It lists assignment counts, resolved/unresolved targets, duplicate rows, macro sources, source families, target groups, and warnings, and MIDI Health embeds that report instead of reducing Learn status to a single line.
MIDI Maps now has a direct
COPY REPORTaction for that MIDI Learn dashboard receipt. The panel copies the same model-owned report used by MIDI Health, giving controller assignments, macro status, duplicate warnings, and target groups a one-click support/troubleshooting path while the user is actually editing mappings.The MIDI Learn dashboard/report now also counts performance behaviors: pickup/soft takeover, inverted mappings, custom ranges, and curved responses. This makes copied reports explain why a learned knob might feel different from a plain full-range direct control.
MIDI Sync runtime reports now distinguish real sync/transport messages from MIDI status chatter. Active Sense still proves that a device is alive, but reports no longer imply Clock, transport, SPP, Song Select, MTC, or MMC activity when Active Sense is the only incoming traffic.
MIDI Sync policy reports now expose prepared realtime MIDI Clock output count. This distinguishes "a profile says send clock" from "SpaceAge has a prepared output slot ready for the realtime clock stream."
MIDI Protocol Coverage now states the MPE boundary more honestly: SpaceAge has MPE-adjacent MIDI 1.0 expression plumbing, but true MPE zones, member-channel allocation, per-note pitch/timbre ownership, and MIDI 2.0 profile/property exchange are future work.
MIDI import inspection now detects multi-channel expressive MIDI that may be MPE-like across multiple note channels and reports it honestly. SpaceAge preserves the bend, pressure, and CC74 data as MIDI 1.0 expression, but marks the Expression review section and the expression-preservation choice as review-required because true MPE zone/member-channel interpretation is not active yet.
MIDI expression ownership is now documented consistently across the architecture and UI workflow specs: expression payloads are pattern-owned today, shared Arrangement clips share expression data, and clip-local expression overlays are future architecture that must define split, paste, variant, export, and undo behavior before any UI implies clip-local automation.
MIDI Protocol Coverage now separates the current MIDI 1.0 finish line from deferred MPE/MIDI 2.0 expansion. The report still tracks MPE/MIDI 2.0 as a future family, but its new current-finish-line summary keeps the near-term readiness percentage and blocker count focused on MIDI 1.0 product work.
MIDI Protocol Coverage now also serializes the deferred future-protocol summary and deferred-family count explicitly. This prevents future MPE/MIDI 2.0 roadmap rows from distorting the current MIDI 1.0 finish-line score while still keeping those expressive-protocol ambitions visible in copied reports and support bundles.
MIDI Protocol Coverage now categorizes each active release-readiness blocker. The copied report can group remaining MIDI work into buckets such as AUTO LANES Final Editor, Hardware Setup Safety, SysEx Librarian, Import Wizard, Export Workflow, Timeline Map, MIDI Learn Completion, and Hardware Setup Wizard, so the next work queue is easier to prioritize than a flat protocol-family list.
MIDI Maps now pauses conflicting MIDI Learn captures and exposes
REPLACE,MACRO, andCANCELchoices before committing. If the moved hardware source already controls another target, SpaceAge keeps the candidate mapping pending, shows the existing targets, and waits for the user to choose whether this is a replacement, an intentional macro, or a mistake.MIDI Learn now has a reusable pre-capture preview model. While Learn is armed, SpaceAge can inspect an incoming learnable MIDI message, report the source, destination, intended
Replace SourceversusAdd Macroaction, and list existing targets already using that same hardware source before the assignment is committed. This is the backend/customer-facing contract for the future confirmation dialog.MIDI Maps now labels 14-bit capable MSB controller assignments more clearly by showing the coarse controller plus its fine companion, for example
CC 1 + CC 33 fine, while still warning when the user learns only the LSB/fine half directly.MIDI Maps now has a safe
REPAIRaction for exact duplicate source-target mappings. It removes accidental duplicate rows while preserving intentional one-controller-to-many-target mappings and unresolved diagnostic rows.The processor now has the backend primitive for future MIDI Learn
Replace Existing: remove all mappings that use the same hardware source while keeping the newly chosen mapping. This is intentionally not exposed as an automatic cleanup action yet because one controller driving multiple targets can be a creative macro.MIDI Maps rows now expose that replacement primitive as
KEEPwhen a MIDI source is driving more than one target. It keeps the chosen row and removes the other rows from the same hardware gesture, so cleanup is available without making macro-style mappings disappear automatically.RPN/NRPN setup cards now carry a read-only
interpretationLabel. Known RPNs such as pitch-bend range, fine tuning, coarse tuning, modulation depth range, and RPN null are translated into musician-facing explanations while device-specific NRPNs remain preserved for hardware review.RPN/NRPN setup cards now also produce guarded action-plan previews. A card can be translated into the exact ordered CC sequence SpaceAge would later queue, including RPN/NRPN selector messages, Data Entry MSB/LSB, relative increment/decrement messages, and an RPN safety deselect when appropriate. These plans are explicitly preview-only and send no MIDI.
APVTS-backed sliders, many supported dropdowns, and many supported toggles now have a first direct-control MIDI Learn bridge. Right-click, or Ctrl+Alt-click, a supported control and choose
MIDI Learn This Control; SpaceAge arms the existing MIDI Learn backend for that exact parameter target and reports the armed target in the status line. This is intentionally built on the sameparam:target model as MIDI Maps rather than a separate UI-only learn path.Direct-control MIDI Learn now reaches much more of the main playable surface: generic synth drawer selectors/toggles, Redshift/Propulsion/Liftoff/Glass Moon/Moonshadow/Lunacy selectors, SoundFont sync selectors, EQ enable, master compressor/limiter enable, shared effect enable buttons, and octave effect selectors. Transient effect-detail popup controls remain deliberately outside this pass until their lifetime can be made safe for listener cleanup.
Direct-control MIDI Learn now reports when the visible control already has mappings and offers
Replace This Control's Mapping. This clears only mappings aimed at that target, then arms Learn again. OrdinaryMIDI Learn This Control (Add)remains additive, so macro-style one-source-to-many-target mappings are not destroyed automatically.Direct-control MIDI Learn now distinguishes the two main source-conflict intentions before capture:
Replace Hardware Sourcefor ordinary "this knob belongs here now" remapping, andAdd as Macrofor intentionally driving more than one target from the same hardware source. The MIDI Maps panel still exposes the detailed row-level cleanup path.MIDI Maps now labels intentional one-hardware-source-to-many-target rows as
MACRO SOURCE, counts macro sources separately in the dashboard, and keeps those rows out of exact-duplicate warnings. This makes one knob controlling several destinations look deliberate instead of broken.MIDI Learn now keeps a model-owned post-capture receipt. After capture, MIDI Maps can report whether the learned source replaced older targets or became a macro source, how many older mappings were removed, which targets were involved, and how many targets the source now controls. This closes the "what just happened?" gap after moving a hardware control.
MIDI Maps rows now include a
PICKsoft-takeover toggle. When enabled, a hardware knob waits until it reaches or crosses the current SpaceAge parameter value before taking control, preventing abrupt jumps when external controls and saved project values do not match.Processor-level duplicate repair is covered by the audio self-test, and the MIDI Protocol Coverage report now describes exact-duplicate repair, source-conflict choices, and copyable MIDI Learn dashboard reports as present while still naming complete direct-control coverage, explicit paired/coarse mode controls, broader conflict browsing, and deeper curve editing as future work.
RPN/NRPN setup-controller cards now produce model-owned plain-text receipts. Each card can report channel, tick range, selector type, parameter label/number, Data Entry value, source count, readiness, warnings, and next action from the MIDI layer instead of relying on UI-only display strings.
MIDI PATCH now lets the user select an RPN/NRPN setup card and copy its model-owned receipt with
COPY CARD. This is review-only: it places the setup-card explanation on the clipboard without sending MIDI, changing presets, or mutating Hardware Passport records.Hardware Passports now have a guarded backend path for appending a copied RPN/NRPN setup-card receipt to a hardware profile's notes. The helper rejects missing profiles, avoids duplicate note blocks, and still sends no MIDI; the remaining work is deciding where the visible attach action belongs.
MIDI SETUP guide copy is now model-owned. Each hardware setup assistant plan can produce its own plain-text report, the full guide report is composed from those plans, and the Settings
COPY GUIDEbutton no longer carries a separate editor-only version of the same setup language.MIDI Input and MIDI Output preflight panels now each expose a focused
COPY REPORTaction. Input reports include input readiness, device inventory, and input-focused repair steps; Output reports include output readiness, runtime/open-device state, device inventory, and output-focused repair steps. Repair recommendation copy now comes from a reusable MIDI model helper instead of editor-only prose.MIDI Health now has a separate model-owned
SpaceAge MIDI Next Stepsreport and aCOPY STEPSbutton beside the fullCOPY REPORTaction. The short report turns repair recommendations, latency context, warning highlights, lane/target context, and fallback setup guidance into a musician-readable checklist without duplicating diagnostic prose in the editor.MIDI Hardware Passports now include an explicit Sync Role Editor for the selected hardware profile. Users can choose Internal Tempo, Follow Host, Send MIDI Clock, or Receive MIDI Clock; mark device capabilities for Clock, SPP, MTC, and MMC; and save send/chase transport roles without sending MIDI. The processor owns the mutation helper, refreshes runtime chase-readiness counts, keeps clock-send permission tied to the explicit send-clock role, and the self-test proves sync-role edits do not write to the hardware recall log.
MIDI AUTO now has a surgical
CLEAR STEPaction for the selected expression lane. It removes only editable CC/bend/pressure/aftertouch events in the current playhead step, leaving the rest of the lane intact. The processor owns the range-delete helper, and lane matching now respects note-specific poly-aftertouch lanes instead of treating every aftertouch note as the same lane.MIDI Hardware Passports now expose
COPY LOGandCOPY QUEUEactions beside the explicit recall buttons.COPY LOGnow includes detailed queued/failed message entries in addition to the summary, whileCOPY QUEUEcopies active queue progress. Neither action sends MIDI or mutates project state.Hardware recall logs and active hardware-queue progress now produce reusable plain-text reports from the MIDI model layer. These reports include queued/failed counts, SysEx/program-recall counts, bytes, planned delay, DIN wire estimates, completion estimates, dropped-message warnings, and serialized
plainTextReportfields for future UI copy/support/progress surfaces.MIDI Sync runtime, Sync policy/profile rows, and outbound transport plans now produce reusable plain-text reports from the MIDI model layer. The Settings
MIDI SYNCpanel exposesCOPY REPORT, bundling observed incoming sync/status evidence, configured sync authority, per-profile role readiness, and outbound Clock/transport intent without sending MIDI or changing project state.MIDI Input, MIDI Output, and MIDI Sync focused preflight copy reports now come from MIDI model helpers instead of editor-only report builders. This keeps musician-readable troubleshooting receipts available to tests, support bundles, future guided setup, and the current UI without duplicating wording in
PluginEditor.MIDI Timing preflight report copy is now model-owned too. The panel can still pass its current loopback pulse settings into the helper, but buffer latency, compensation readiness, latest measurement summary, hardware profile timing labels, and warnings are composed in the MIDI layer.
MIDI AUTO copy reports now come from a MIDI model helper as well. The selected-pattern expression receipt includes pattern, expression-event count, lane count, selected lane, tick/value ranges, and editable versus review-only status without rebuilding that prose inside
PluginEditor.MIDI SETUP now has a shared hardware-scenario model covering controller input, one external synth, multitimbral modules, MIDI guitar, wind controllers, and drum-pad input. The Settings guide, reports, and self-tests can now use one source of truth for "how do I hook this kind of hardware up?" instead of scattering those explanations in UI prose.
MIDI SETUP scenarios now carry real-world example labels such as MiniNova-style one-synth routing, QY-70/QY-100 multitimbral module routing, EWI-style wind control, MIDI guitar systems, and MPC-style pads. The selected setup scenario panel and copied setup reports can now speak in device families instead of only abstract MIDI categories.
MIDI SETUP now has a first backend Device Template layer. MiniNova, QY-70/QY-100, General MIDI/XG modules, EWI/wind controllers, MIDI guitar/per-string controllers, and MPC-style pad controllers can be searched, serialized, and copied as plain-text setup reports from the MIDI model without creating routes, arming lanes, or sending hardware data. This is the foundation for a future "I own this box; help me wire it up" wizard.
MIDI SETUP now surfaces those device templates in the selected scenario detail strip and includes the model-owned device-template report in
COPY GUIDE. This is still navigation/help only; templates do not arm lanes, create profiles, rewrite routing, or transmit hardware messages.MIDI SETUP now includes a read-only Device Template picker in the selected-scenario strip. Selecting a scenario chooses the nearest matching template, the user can browse the current template library, and
COPY TEMPLATEcopies only the selected template report. This is still reference-only: choosing a template does not create lanes, attach Hardware Passport records, arm input, change channels, or send MIDI.MIDI Device Templates now have a reusable apply-preview model. A template preview can report proposed user actions, lane/channel/expression/profile/timing changes, warnings, and blocked mutations, while explicitly reporting that it will not send MIDI or mutate the project. This gives the future Hardware Setup wizard a safer "review before apply" model before any real apply button exists.
MIDI SETUP now renders the selected Device Template's apply-preview directly in the selected-scenario strip. The preview shows a compact "will propose" list, a "blocked until apply" list, and the explicit no-MIDI-sent promise; the copy action now copies the preview report. This is still non-mutating and intentionally has no apply button yet.
MIDI Device Templates now also have a guarded apply transaction-plan model. It translates the preview into undoable project-side mutation steps, undo safety requirements, and blocked hardware-send steps while remaining non-executable. This defines what
APPLY TEMPLATEmust prove before it can ever become a real button.MIDI Device Templates now have a dry-run apply receipt model. It reports the selected transaction plan, the project changes that are still waiting for a real apply helper, blocked hardware sends, follow-up actions, and warnings while explicitly reporting that no project mutation happened, no hardware MIDI was sent, and no undo step exists yet.
The processor now has a first confirmed project-side Device Template draft-apply helper. With explicit confirmation, it can create a Hardware Passport draft, attach it to a target lane, and set that lane's PLAY/EXPORT MIDI channel from the template while returning a receipt that proves no hardware MIDI was sent. It now creates a normal project checkpoint and a processor rollback snapshot, so both normal Undo and the visible
UNDO DRAFTpath can reverse the project-side change.Device Template draft apply now has a before/after diff model. The processor can report the target lane's current Hardware Passport and PLAY/EXPORT channel, the proposed new Hardware Passport draft, the proposed channel change, blocked hardware sends, and undo warnings before any confirmed apply occurs. This is the missing review layer the future
APPLY TEMPLATEUI needs before it can become customer-facing.MIDI SETUP now surfaces that draft-apply diff under the selected Device Template preview and appends the full diff report to
COPY PREVIEW. The guardedAPPLY DRAFTbutton is now visible beside that diff, asks for confirmation, and stays project-only: it creates/attaches a Hardware Passport draft and sends no hardware MIDI.MIDI SETUP now has a first backend assistant plan. Given a scenario plus current MIDI readiness reports, it can mark setup steps as complete, needs action, blocked, or optional and expose the next action label/action kind for a future guided wizard.
The Settings
MIDI SETUPpopup now renders those assistant plans as live status cards. Each scenario shows a readiness badge, checklist rows, and a next-action line while remaining non-mutating.The Settings
MIDI SETUPpopup now lets the user select a hardware scenario card and press a focusedNEXT ACTIONbutton. The selected scenario also gets a dedicated detail strip that shows status, first actionable step, summary, and the explicit "navigation only" safety promise. The button routes to existing safe panels such as MIDI Input, MIDI Out, Hardware Profiles, MIDI Timing, MIDI Health, MIDI Patch/Import Review, SysEx Vault, or MIDI Expression; it still does not arm lanes, rewrite routing, create profiles, or send MIDI by itself.The MIDI SETUP guide also includes direct
PATCH,SYSEX, andAUTObuttons beside the core input/output/hardware/timing shortcuts, turning it into a real MIDI hub rather than a read-only help popup.MIDI Learn mappings now support per-control response curves: Slow Start, Linear, and Fast Start. MIDI Protocol Coverage now treats MIDI Learn as having a first mapping UI because MIDI Maps exposes target search/picking, learn/cancel/refresh, enable/disable, invert, exact endpoints, range nudging, curves, and delete controls.
MIDI Protocol Coverage now reports explicit next actions and release-readiness blockers per protocol family.
MIDI Protocol Coverage now reports release-ready family percentage and backend-ready/UI-pending family count, so the scorecard can answer "how close are we?" without hiding workflow debt behind backend protocol support.
MIDI PATCH can save reviewed Bank Select / Program Change rows as hardware profile recall recipes without sending MIDI or mutating instruments.
MIDI PATCH rows now carry model-level recall guidance, so the app can distinguish complete bank+program recall, program-only recall, and bank-only review data in a reusable way.
MIDI PATCH rows now explicitly report whether they can create a hardware profile recipe, keeping bank-only setup rows preserved but non-convertible until the user supplies a Program Change.
The MIDI Import Wizard now labels the setup option as
PRESERVE SETUP FOR MIDI PATCHand shows a compact Patch Setup Preview before import, so Program/Bank/RPN/NRPN rows are visible before the project is changed.MIDI PATCH now supports selected-row review: click a Bank/Program row, get a visible selected outline, then save only that row as a hardware profile recipe. The bulk button is now
SAVE ALL ELIGIBLE, so one-row and many-row workflows are distinct.MIDI PATCH now has a
SAVE + ATTACH TO LANEpath: it creates one hardware profile recipe from the selected row and attaches it to the current Arranger lane target, without sending any MIDI.MIDI PATCH now has an explicit
MAP SF2path: a selected Bank/Program row can intentionally select the matching preset on the currently selected Arranger lane's loaded SoundFont. Import still never mutates SoundFonts automatically.MIDI PATCH now includes a direct
MIDI OUTpreflight shortcut, so a user who attaches a hardware profile recipe to a lane can immediately verify output-device readiness without hunting through Settings.SoundFont Program/Bank mapping is now a reusable backend MIDI helper with self-test coverage, not editor-local math. This keeps future MIDI import, General MIDI, and SoundFont workflows from drifting into different mapping rules.
MIDI Health latency wording now clearly separates SpaceAge's internal audio-block time from driver/interface/controller/hardware latency, and oversized live-MIDI buffers are surfaced as explicit warnings.
MIDI Protocol Coverage now distinguishes protocol recognition/preservation from practical DAW-grade readiness. It explicitly tracks RPN/NRPN/channel-mode review, tempo-map import limits, raw-pattern versus lane-owned export semantics, and direct hardware output calibration as remaining MIDI 1.0 finish-line work.
Live external hardware MIDI lane playback now carries in-block sample offsets into JUCE's scheduled
MidiOutputpath instead of collapsing every due event into an immediate send-now call.Raw pattern MIDI export now has a documented pattern-local channel convention: drum steps export on General MIDI channel 10, Chord Engine markers export on channel 1, and Piano Roll notes preserve their stored source channel. Selected Arrangement clip export remains lane-route aware.
MIDI AUTO now has a first-stage authoring strip: users can create mod wheel, expression, volume, pan, sustain, brightness CC74, pitch bend, channel pressure, and note-specific poly-aftertouch points at the playhead, or draw 1/2/4/8/16-step ramps. Setup data remains protected.
MIDI PATCH / setup review now shows explicit RPN/NRPN selector rows before Data Entry arrives, warns when Data Entry appears without an active selector, and has a structured backend grouping model for future hardware-setup UI cards. This makes imported hardware setup data easier to audit without pretending the grouped RPN/NRPN editor is finished.
MIDI PATCH now renders structured RPN/NRPN hardware setup cards from the backend grouping model, showing channel/tick range, parameter selector, Data Entry value, warnings, and suggested next action. Channel-mode leftovers remain visible as review-only setup rows.
The MIDI Import Wizard's Patch Setup Preview now surfaces the first structured RPN/NRPN setup card when grouped setup data exists, so users see meaningful hardware setup intent before committing an import.
MIDI import inspection now keeps raw controller counts separate from performance-expression counts. Ordinary CCs such as mod wheel/expression stay musical and low-friction, while Bank Select, Program Change, Data Entry, RPN/NRPN, and channel-mode messages are counted as setup/review data.
MIDI Import Review Dashboard now carries structured setup-controller groups, including display labels and warnings for RPN/NRPN rows. This is the backend payload needed for future Pitch Bend Range, tuning, and hardware-parameter review cards.
MIDI import receipts now expose separate preserved performance-expression and patch/setup payload counts while keeping the older total field for compatibility. This gives UI a clearer way to say what was preserved after import.
MIDI import inspection now also separates preservable setup payload from protected setup-only controller messages. Bank/Program and RPN/NRPN can be counted as preserved setup payload, while Local Control, Omni, Mono, Poly, All Notes Off, All Sound Off, and Reset Controllers remain review-only unless a future explicit hardware setup workflow sends them.
RPN/NRPN setup-controller groups now expose UI-ready fields for parameter type, 14-bit parameter number, 14-bit Data Entry value, and human labels for complete or incomplete 14-bit parameter/value pairs. Future hardware setup cards can render those values directly instead of parsing display strings.
RPN/NRPN setup-controller groups now also expose action-state fields: whether a parameter selector is missing, whether Data Entry is still needed, whether the row is ready for a hardware setup card, plus both stable next-action kind and human next-action label.
Incomplete RPN/NRPN selector-only traffic now becomes a structured setup review group instead of vanishing when no Data Entry follows. These rows are marked as needing a completed selector, with a warning and a
Complete parameter selectoraction.MIDI Health now includes a structured recorded-timing alignment summary. It reports internal audio-block latency, saved record-latency compensation, armed-input/hardware-output readiness, stable suggested action kinds, and alignment warnings without pretending a real hardware round-trip measurement has happened yet.
MIDI timing calibration now has a reusable measurement helper for returned pulse tests. It computes average round-trip time, jitter, estimated one-way delay, suggested record compensation, confidence labels, and warnings for missing pulses or unstable timing.
Hardware MIDI profiles can now persist an accepted timing calibration record. Profile summaries expose the saved compensation, jitter, and warning state, so future hardware setup UI can show which devices have trustworthy timing data.
Processor helpers can now save or clear a timing calibration on a specific hardware profile. Invalid one-pulse/incomplete calibration attempts are rejected, and clearing a calibration is explicit instead of hidden inside profile load or routing changes.
MIDI Protocol Coverage now reflects the current truth directly: the hardware timing backend can schedule events, remember accepted recorded-timing alignment records, expose manual alignment entry, send safe loopback pulses, and accept returned-pulse measurements. The remaining work is polish and deeper diagnostics rather than the absence of a musician-facing timing UI.
MIDI Health now displays a dedicated recorded-alignment row, and MIDI Hardware Passports now show each profile's saved recorded-timing alignment label beside clock and SysEx information. This gives users visible truth that matches the first manual/loopback recorded-alignment workflow.
MIDI Health repair recommendations can now surface a timing-calibration action when an armed input lane or hardware-output path exists but no compensation has been saved yet.
Settings now includes a dedicated
MIDI TIMINGpanel. It shows session buffer latency, record-compensation state, recorded-alignment readiness, suggested action, timing warnings, and per-hardware-profile timing labels without pretending the round-trip alignment workflow has been verified against every hardware path.Timing-calibration repair recommendations now open the
MIDI TIMINGpanel directly, so latency-related Health guidance has an obvious destination instead of becoming a passive status message.The
MIDI TIMINGpanel now includes safe navigation buttons to MIDI Health, MIDI Out, and Hardware Profiles, plus a disabled calibration-wizard placeholder that clearly marks the real round-trip wizard as pending.The
MIDI TIMINGpanel can now copy a plain-text timing report to the clipboard, including buffer latency, record compensation, recorded-alignment readiness, hardware profile timing labels, and timing warnings.The
MIDI TIMINGpanel now has a practical manual calibration path: choose a hardware profile, enter measured round-trip milliseconds, jitter, and pulse count, then save or clear the timing calibration on that profile. This uses the existing validated profile calibration backend and updates the panel report immediately.SysEx Vault now exposes the richer librarian metadata that was already present in the model: snapshot name, manufacturer, model, notes, send-delay value, project-archive inclusion, send-confirmation requirement, guarded removal, attach/detach to Hardware Passport records, and a copyable plain-text Vault report for support/testing. Removal is confirmation-gated, sends no MIDI, queues no restore or recall, and changes no external hardware.
SysEx inspection now recognizes several common manufacturer IDs, surfaces a likely device-id byte for manufacturer-specific dumps, and reports Roland-style 7-bit checksum matches/differences without pretending that every manufacturer follows the same checksum rule. The Vault report includes the checksum line for support and hardware restore troubleshooting.
MIDI AUTO now includes a selected-lane scope preview and
COPY REPORTaction. This makes CC, pitch bend, pressure, and other expression payloads easier to inspect, copy into support notes, and distinguish from protected setup data.MIDI AUTO selected-lane scope is now drawable for editable performance lanes. Click or drag inside the selected-lane scope to write step-snapped CC, pitch bend, channel pressure, poly-aftertouch, sustain, and similar expression points through the existing undoable expression-event path.
MIDI expression transforms now return clearer model-owned receipts: action/lane label, matched count, kept count, changed count, and removed count. This makes thinning recorded controller data easier to trust because the UI can say how many points survived instead of only saying that something changed.
Settings now includes a
MIDI SETUPguide driven by the shared hardware-scenario model. It explains controller input, one external synth, multitimbral modules such as QY-70/QY-100-style boxes, MIDI guitar, wind controller, and drum-pad input, with structured primary action labels for the panels each scenario should open next.MIDI TIMING now has a guided loopback pulse sender. Choose a hardware profile, set pulse count and spacing, send a safe C4 note pulse train to the profile's MIDI output, route the return back into SpaceAge, and use
ACCEPT RETURNEDto store the measured compensation on that profile. Manual round-trip/jitter entry remains available for externally measured rigs. The copied timing report includes the latest loopback measurement and warnings.MIDI TIMING pulse trains now require a
SEND PULSE TRAINconfirmation before external note pulses are queued. The dialog names pulse count, spacing, duration, and the no-patch/no-SysEx/no-transport boundary before sending.Hardware recall plans and active hardware-queue progress now estimate MIDI DIN wire time, total completion time, and transfer class (
Small SysEx transfer,Patch dump transfer, orBulk dump transfer). The Hardware panel and confirmation dialog expose those estimates so old-hardware restores can feel deliberate instead of frozen.MIDI import commit requests and receipts now carry an explicit song-metadata policy. Imported tempo, meter, and key rows are reviewed and reported; first source tempo/key can now be deliberately adopted, while source meter and full source maps remain review-only. Full reviewed map rows are preserved in the apply receipt so the future timeline-map editor will not need to rediscover them.
MIDI export job plans now distinguish the current single-file export from the lane/stem package shape. Whole-Arrangement exports count exportable lane tracks, recommend a future stem-folder name, serialize those facts for UI/support, and tell the preview when a multi-lane MIDI stem package is review-ready without pretending the current button writes that package yet.
Whole-Arrangement MIDI stem-package export now has a tested backend writer, a user-facing preview choice, a richer
manifest.json, a plain-EnglishREADME.txtreceipt, and aCHECKSUMS.txtsidecar. The Arrangement MIDI export preview can write the single reviewed MIDI file or choose a parent folder and create a uniquely named stem package containing the full Arrangement MIDI file, one isolated lane MIDI file per exportable lane, generated timestamp, app version, machine-readable support metadata, package file inventory, FNV-1a 64-bit checksums for exported MIDI payload files, warning inventory, and a collaborator-readable summary of project, timing, event counts, lane files, channels, routes, checksums, and warnings.MIDI stem packages now have a reusable inspection helper that accepts either a package folder or its
manifest.json, validates theSpaceAge MIDI Stem Packageformat, verifies package files, byte counts, FNV-1a payload checksums, and theCHECKSUMS.txtsidecar, then reports whether the package is ready for import/repair. It also produces a copyable plain-text inspection report so future import/repair UI can show a trustworthy diagnosis without reparsing manifests in editor code.Library now exposes
CHECK / IMPORT MIDI PACKAGE, an inspection-first surface for SpaceAge MIDI stem packages. The user can choose a package folder ormanifest.json, see ready/missing/checksum/size/warning counts, preview package files, copy the plain-text support report, and reveal the package folder without importing or changing the current project.File drag/drop now keeps plain
.midfiles on the existing MIDI import-review path, while dropped package folders ormanifest.jsonfiles open the read-only MIDI package checker. This prevents package manifests from being mistaken for musical MIDI imports.MIDI stem packages now have a reusable import/repair preview model layered on top of inspection. It converts manifest, missing-file, size-mismatch, checksum-mismatch, and warning facts into UI-ready action rows, blocking counts, repair-readiness, and a copyable plain-text preview report without mutating the project. The Library
CHECK / IMPORT MIDI PACKAGEpanel now renders the preview summary/report too, including blocker and repair-readiness counts.MIDI stem packages now also have a reusable import-plan skeleton layered on top of the preview. It describes the full Arrangement MIDI reference, importable lane stems, support files, blocking repair items, lane/channel/event counts, and a copyable plan report without mutating the project. The Library
CHECK / IMPORT MIDI PACKAGEpanel now shows that plan report so collaborators can see the future import shape before any explicit import commit. This gives the future import wizard a trustworthy "what would be created?" model before any project state changes.MIDI stem package imports now have a first real processor-level apply path.
CinematicDrumsAudioProcessor::applyMidiStemPackageImport()re-inspects the package, rebuilds the preview/plan, refuses broken packages, honors inspect-only and reference-only modes without mutating the project, requires explicit confirmation for lane-stem import, then imports clean lane stems through the existing MIDI import engine. The self-test proves clean packages create new Arrangement lanes/clips while inspect-only and broken packages leave the project unchanged.Library
CHECK / IMPORT MIDI PACKAGEnow exposes a guardedIMPORT STEMSbutton when a package is clean and lane-stem import is available. The button shows a confirmation dialog, calls the processor mutation boundary, replaces the panel report with an import receipt, and leaves inspection/read-only behavior intact until the user explicitly commits.Confirmed MIDI stem-package import now behaves as one undoable user action. Package import creates one processor checkpoint before importing stems, while the repeated per-stem MIDI imports skip their individual checkpoints. The self-test now verifies that one Undo returns the project to its pre-package lane/clip counts.
Hardware recall/SysEx timing estimates now use one shared human-readable MIDI transfer formatter. The backend, queue summaries, and confirmation dialogs can say
35 ms,1.2 s, or12 sinstead of raw millisecond-only strings, which makes slow DIN/SysEx transfers feel intentional rather than frozen.Hardware recall plans now produce a reusable plain-text report from the MIDI model layer. The confirmation popup displays the shared report instead of assembling its own text, and self-tests verify that mode, output, transfer class, timing, confirmation, and message details are present.
MIDI Protocol Coverage now produces a reusable plain-text release-readiness report. The Settings protocol popup can copy the report, and the data model exposes a blocker summary so support/debug flows can see exactly which MIDI families still need customer-facing work instead of relying on color-coded rows alone.
The Settings MIDI Protocol Coverage popup now shows release-ready percentage and backend-ready/UI-pending family count directly in the visual scorecard. This keeps the screen honest about workflow debt instead of hiding the most useful readiness numbers in the copied report.
MIDI project/input/output/device readiness reports now also expose reusable
plainTextReportpayloads. Project readiness, MIDI input readiness, external output configuration readiness, external output runtime state, and device inventory can all be copied or bundled later without rebuilding diagnostic prose in the editor.MIDI Health now owns a full copyable plain-text report from the MIDI model layer. The report bundles the health summary, readiness, protocol coverage, control-learn state, expression/patch setup, sync/timing, hardware recall counts, suggested repairs, latency explanation, and warnings. The Settings MIDI Health panel exposes
COPY REPORT, so support/testing can capture the whole MIDI diagnosis without manually reading every row.MIDI Health now explicitly reports the live-note monitor path without collapsing host/plugin MIDI and SpaceAge-opened direct physical MIDI into one timing story. Host/plugin MIDI keeps native in-block sample offsets; direct physical performance data uses earliest-drain-block scheduling while sync/transport preserves source-aware timing. This keeps live-controller latency diagnosis honest: SpaceAge can separate direct queue age, internal block time, audio driver, interface, controller, hardware, and heavy-processing delay instead of guessing.
MIDI Health now reports runtime MIDI control-mapping queue pressure. MIDI Learn/controller assignment messages are no longer applied from the incoming audio/MIDI path, and the health report exposes dropped queued mapping messages if a controller floods SpaceAge faster than the safe worker can apply them.
Classic sample and one-shot note starts now use an immutable per-pad sample voice-start cache. Sample/layer/bonus edits publish a fresh cache at the mutation boundary, while
startVoice()reads handles/settings from the cache without takingsampleMutex, keeping another common live MIDI path out of lock territory.Quasar note starts now also use an immutable per-pad zone cache plus realtime-safe round-robin cursors. Loading, clearing, pasting, and project restore publish the zone snapshot; live note-on no longer takes
quasarMutexjust to choose a multisample zone.MIDI Sync now owns a focused copyable plain-text preflight report from the MIDI model layer. The report separates what SpaceAge has observed arriving at the input from what SpaceAge is configured to follow or send, and it includes outbound transport-plan rows for Hardware Passport targets that would receive Clock, Start, Continue, Stop, or SPP.
SysEx Vault copy/report text now comes from the MIDI model layer. Each snapshot summary owns a plain-text receipt, the Vault helper composes the full clipboard report, and the editor only copies that model report. This keeps future librarian UI, support bundles, and hardware restore safety language aligned to the same facts.
Hardware Passport summaries now report attached RPN/NRPN setup-card receipt counts and a short notes preview. The Hardware Profiles surfaces display compact setup-card counts beside timing/SysEx memory, so a device can visibly carry setup instructions without parsing raw note text or sending any MIDI.
MIDI PATCH now has an
ATTACH CARDaction for selected RPN/NRPN setup cards. It appends the selected card's receipt to the current Arranger lane's existing Hardware Passport notes, refuses lanes without a passport, sends no MIDI, queues no recall, and changes no external hardware.Hardware Passport summaries now extract compact setup-card receipt labels such as
CH 04 Pitch Bend Range, so the UI can show what kind of setup card is attached instead of only saying that a card exists.MIDI SETUP scenarios now carry channel-template, expression-template, hardware-template, and future-automation hint fields. The copied setup reports and selected-scenario detail strip expose those facts, giving the future guided setup wizard a stable model for lane arming, channel templates, expression visibility, hardware profile creation, pad learn, wind-controller breath setup, MIDI guitar per-string setup, and timing calibration.
MIDI input readiness reports now include a neutral channel-filter note. Fixed-channel lanes explicitly report that channels other than the selected MIDI input channel will be ignored, while Omni lanes report that all channels are accepted. This makes the common "my controller is silent" support case easier to diagnose without marking a deliberate fixed-channel setup as broken.
MIDI input readiness now also reports recently observed input channels. The processor records live channel-message traffic before armed-lane filtering, so a report can say when SpaceAge heard
CH 01while the armed lane accepts onlyCH 03. This is diagnostic only; it does not change routing, recording, or playback behavior.Observed input-channel mismatches now become guided MIDI repair recommendations. MIDI Health/Input next-step reports can point the user to the armed lane's MIDI input settings when SpaceAge hears one channel but the lane accepts another, without silently changing routing.
The MIDI Input popup now has
RESET OBSERVED, clearing the recent input-channel monitor and refreshing the panel in place. This makes channel diagnostics reusable while leaving routing, recording, playback, and MIDI Learn unchanged.The compact MIDI Health
COPY STEPSreport now includes recently observed input channels when present, even if the current state has no blocking repair row. This keeps support text focused on the practical hardware question: "What channel did SpaceAge actually hear?"MIDI SETUP assistant plans now add an observed-input-channel checklist row after the user plays a controller. Matching channels report as ready; mismatched fixed-channel filters become an input-channel repair step, still without changing routing automatically.
MIDI Project Readiness and MIDI Health now count silent export-only lanes separately. These lanes are valid MIDI lanes that intentionally make no SpaceAge playback sound and do not require hardware output readiness, but they still write MIDI during export. MIDI export previews and stem-package receipts now explain that behavior before handoff.
MIDI Output Preflight now reports how many export-only lanes were intentionally excluded from hardware-output readiness, so the hardware panel does not make valid silent MIDI-file lanes look like missing synths.
MIDI SETUP assistant plans now include an optional silent export-only checklist row when those lanes exist. No-hardware projects no longer produce a misleading "no hardware lanes" repair warning; the app now treats hardware routing as a chosen path rather than a required default.
MIDI export timing metadata is now centralized through one writer path. Export preview rows and stem-package receipts explicitly report
fixed 4/4alongside PPQ and BPM, so collaborator files do not imply full conductor-map support before the project timeline-map model exists.MIDI import note-off pairing now consumes matched note-off events once per track in both direct Piano Roll import and split-channel-to-lane import. Overlapping repeated notes with the same pitch/channel preserve distinct lengths and release velocities instead of reusing the first later note-off.
MIDI Learn/control summaries now recognize learnable high-resolution CC pairs. Coarse/MSB controllers such as CC 1 report their fine LSB companion, while accidentally learned fine/LSB controllers such as CC 33 are warned as "learn the MSB." Learned MSB mappings now automatically merge matching LSB/fine controller traffic into a 14-bit runtime value when both halves are present. The Settings MIDI Maps rows surface that companion/warning text directly so the user sees the practical meaning of the learned controller.
MIDI Maps rows now include a first-pass live activity meter. When a learned control moves, SpaceAge stores the latest normalized/mapped value in the assignment summary and refreshes the visible row while the panel is open, so controller setup has immediate proof-of-life feedback instead of relying on blind trust.
MIDI Device Template project draft apply now creates a normal project checkpoint and stores a single processor-owned rollback snapshot. Applying a template draft can create one Hardware Passport draft and attach it to a target lane without sending hardware MIDI, then either normal Undo or
undoLastMidiHardwareSetupDeviceTemplateProjectDraft()restores the previous Hardware Passport list and lane routing/channel/profile state.MIDI SETUP now exposes this as a guarded
APPLY DRAFTsurface beside the selected Device Template. The panel keeps the preview/diff visible, requires explicit confirmation, calls the checkpoint-backed processor apply helper, displays the apply receipt, and changesCOPY PREVIEWintoCOPY RECEIPTafter a successful draft apply. The confirmation copy explicitly says it sends no test notes, Program Change, Bank Select, MIDI Clock, transport, or SysEx.The same MIDI SETUP surface now exposes
UNDO DRAFTafter a successful Device Template draft apply. It asks for confirmation, calls the processor rollback helper, shows the rollback receipt, and sends no hardware MIDI. This keeps the whole project-draft transaction visible in one place: preview, diff, apply, receipt, rollback.MIDI SETUP
APPLY DRAFTnow has an explicit target picker. The picker can leave the template profile-only or aim it at a reported Arrangement lane, defaulting to the selected Arrangement lane first and the armed input lane second. Preview copy, diff, confirmation, receipt, and rollback now all follow that visible target instead of relying on a hidden lane assumption.The MIDI Import Wizard now exposes the song metadata policy instead of hardcoding it. Users can keep the current SpaceAge tempo/key, review source metadata only, deliberately adopt the first source tempo/key, or review full source maps without applying them. Receipts now name the chosen policy and carry full reviewed tempo/meter/key map rows when map review is selected. First source tempo/key adoption is a real processor mutation path with one undo checkpoint; source meter and full tempo/key maps remain review-only until the real project timeline-map model exists.
MIDI Protocol Coverage blocker categories are now structured data, not only report prose. Each active release-readiness category exposes its label, count, closeout priority, release role, recommended focus, affected protocol families, next actions, and summary for future MIDI dashboard/checklist UI. The current model-owned next focus is the MIDI AUTO final editor.
MIDI song metadata handling now uses the earliest source tempo/key event across all MIDI tracks instead of whichever track/file-order row appeared first. Selected-pattern import shares that helper before timestamp conversion, so first-source tempo/key adoption is more truthful for normal multi-track files. MIDI exports now write one current project tempo event, fixed 4/4 meter, and the current project key signature. Self-tests cover exported song metadata and earliest-across-tracks import adoption.
SysEx Librarian readiness now has a model-owned closeout plan. It distinguishes first-pass Vault/Hardware Passport readiness, one-dump live capture, timeout/source guidance, batch-capture dry-run planning, estimated restore progress, and restore verification receipt states from unfinished live multi-dump batch capture/save UI, device-specific ACK/NAK parsing, and deeper checksum/device-id helpers. The plan serializes safety copy, current surface, next action, product gap, checklist rows, and no-autosend language so future Settings/MIDI UI can quote backend truth instead of inventing new wording.
Hardware recall queue progress now reports explicit phase, trust, and next-action labels. The model can say whether the queue is clear, live hardware MIDI is draining, recall/librarian traffic is draining, or dropped messages need review, and it serializes the critical fact that this is SpaceAge-side queue visibility rather than external device acknowledgement.
MIDI AUTO editor plans now serialize a concrete final-editor checklist per lane type. Reports can distinguish generic CC curves, switch/block lanes, pitch bend, bipolar controls, poly-aftertouch, and channel pressure, then name the missing finish-line pieces: clip-local ownership, Piano Roll-style lasso/multi-select, visible handles, smoothing/thinning preview, destination bend-range contract, and note-row ownership where needed. The MIDI AUTO selected-lane status strip now previews the first closeout checklist items and points the full list to COPY REPORT.
MIDI AUTO selected-scope drawing now interpolates stepped expression points between the previous drag point and the current mouse position. Fast drags therefore fill the skipped step-grid points instead of leaving holes, and switch/block lanes paint solid stepped blocks while continuous lanes interpolate values.
MIDI AUTO selected-scope editing now has a graph-local erase gesture. Right-dragging inside the selected-scope graph clears the selected editable lane across snapped steps under the cursor, using the same grid mapping as drawing instead of forcing the user to move the playhead first. Draw/erase status messages now survive lane refresh, so the panel reports where the gesture landed instead of immediately falling back to a generic lane summary.
MIDI AUTO selected-scope points now support guarded value-only dragging. Clicking a visible point selects the exact source event, dragging vertically changes only that point's value, and the point's tick remains locked. Value edits now validate the expected old value before writing, so stale UI state refuses instead of overwriting a changed point.
MIDI AUTO selected points and point groups now support Up/Down value nudging, with Shift for larger jumps. Single-point and grouped value nudges validate the expected old value before writing. When no point is selected, those same keys still navigate the expression lane list, preserving the existing browser behavior.
MIDI AUTO selected points now support Left/Right time nudging by one step, with Shift moving by one 16-step measure. Same-lane same-tick collisions are refused visibly instead of silently stacking hidden events.
MIDI AUTO selected-lane points now support Shift-click and Shift-drag grouping for first-pass multi-point moves. Grouped points can move left/right by one step or one 16-step measure, nudge values up/down, and delete as one guarded batch. Both editor and processor refuse stale events or collisions before mutating the expression payload.
MIDI AUTO selected points now support lane-local select-all plus cut/copy/paste.
Ctrl+Aselects every editable point in the current expression lane,Ctrl+Ccopies selected points,Ctrl+Xcopies before deleting through the guarded batch-delete path,Ctrl+Vpastes the copied gesture at the current playhead in the same expression lane, and both UI and processor guard against stale events or same-lane same-tick collisions. The visibleCOPY REPORTbutton remains the explicit diagnostics path.Hardware MIDI output routing now has a safer closeout pass. The router wakes immediately when live, recall, or delayed recall messages are queued; immediate recall/transport messages are drained before live hardware playback; delayed test-note/recall traffic no longer sleeps the live router thread or spins hot while waiting; output slots are generation-tagged so stale queued messages cannot fire after a port is reopened; Panic clears SpaceAge FIFOs plus JUCE scheduled output messages; and Panic now targets every open hardware output, not only lane-routed ports. Hardware Clock output now delegates slot validation to the router's device-slot guard.
Current Active Slice
Recorded hardware timing alignment, SysEx librarian polish, guided hardware setup, live-MIDI feel diagnostics, and remaining full-MIDI hardening.
The goal is to keep the MIDI implementation honest against the actual MIDI 1.0 surface a musician expects: notes, controllers, bend, pressure, program/bank, RPN/NRPN, channel-mode messages, SysEx, sync, import/export, lane routing, and hardware timing. The current slice improved the app's own protocol scorecard so it no longer treats "classified and preserved" as the same thing as "finished workflow," upgraded live hardware output to preserve sample offsets through JUCE's scheduled MIDI sender, normalized raw pattern export channels into a documented convention, added a first-stage MIDI expression authoring tool with note-specific poly-aftertouch support, made RPN/NRPN setup review more readable and more structured, separated raw MIDI controller inspection from user-facing performance-expression counts, added clearer expression-lane preview/reporting plus first-pass selected-scope drawing and step-local cleanup, added editor-facing expression lane hints and serialized preview points for CC, pitch bend, sustain, pressure, and note-pressure drawing modes, began turning RPN/NRPN setup review into structured cards instead of raw controller-code prose, added a manual profile-based MIDI Timing calibration path, added safe profile-based timing pulse trains plus returned-pulse capture/acceptance for loopback tests, widened the SysEx Vault into a real metadata editor for saved hardware dumps, added first-pass manufacturer/checksum inspection for safer hardware restore decisions, added wire-time/completion estimates to hardware recall plans, moved hardware setup guidance into reusable scenario data instead of one-off text, gave the Settings MIDI Setup guide a selectable next-action route to the full current panel set without making it mutate project state, added a copyable protocol-readiness report for finish-line blockers, separated current MIDI 1.0 finish-line readiness from deferred MPE/MIDI 2.0 roadmap items, promoted blocker categories into structured model data, expanded the readiness/reporting layer so routing, device inventory, input focus, output configuration, output runtime state, and live-note latency diagnosis can all produce support-ready plain text, and made MIDI Device Template draft apply visible, confirmed, checkpoint-backed, receipt-copyable, and processor-rollbackable while still sending no hardware MIDI.
Remaining MIDI Finish-Line Items
- Full Piano Roll-grade expression lanes for CC, pitch bend, aftertouch, breath, mod wheel, and similar continuous data. First-stage point/ramp authoring, selected-scope step drawing, graph-local right-drag erasing, selected-lane step cleanup, hover/select real-event points, guarded one-point and group deletion, direct single-point time/value mouse dragging, selected-point keyboard nudging, Shift-click/drag grouping, group horizontal drag moves, group time/value nudging, lane-local select-all and point cut/copy/paste at the playhead, preview-confirm smoothing/thinning, clearer transform receipts, and editor-facing lane hints now exist in MIDI AUTO, including note-specific poly-aftertouch, selectable ramp lengths, pitch-bend 14-bit centered ranges, sustain switch-lane hints, pressure/CC drawing modes, and serialized lane preview points. The compact MIDI AUTO previews now read from the model-owned preview points instead of reparsing raw MIDI in the editor. The remaining work is larger piano-roll-style lanes with richer lasso modes, curve handles, ownership choices, and better clip/lane context.
- Program/Bank mapping that can intentionally become hardware recall, SoundFont preset selection, or preserved review-only setup. Hardware profile and SoundFont conversion paths now exist in first-pass, tested form; internal preset mapping remains future work.
- Grouped RPN/NRPN review/editing for hardware setup data, including pitch-bend range, tuning, and device-specific parameter maps. MIDI PATCH now has first-pass structured review cards; the remaining work is editable/applyable cards with named hardware parameter definitions and explicit send/attach decisions.
- SysEx Librarian completion: named dumps, manufacturer/model notes, profile attachment, archive/confirmation policy editing, guarded removal, restore preview, send pacing, user-visible safety, common manufacturer labeling, likely device-id reporting, Roland-style checksum inspection, estimated DIN wire-time/transfer-class reporting, a backend readiness/closeout plan, clearer SpaceAge-side queue phase/trust labels, one-dump live ARM/CANCEL/SAVE/COPY capture, timeout/source guidance, batch-capture dry-run planning, visible generic restore-response receipts, manual
MANUAL VERIFYreceipts, timeout receipts,CLEAR RESPONSES, and restore verification receipt states now have a first-pass Vault/Hardware workflow. Remaining work is true device-specific ACK/NAK parsing, deeper checksum/device-id helpers, live multi-dump batch capture/save UI, and restore history polish. - Sync controls now have a first-pass Hardware Passport role editor for MIDI Clock, SPP, MTC, MMC, host/internal authority reporting, and send/chase transport intent. Remaining work is deeper Sync polish: MTC offsets, MMC record/locate options, diagnostics, and a more musician-friendly all-in-one Sync page.
- Tempo-map-aware MIDI import with explicit choices to adopt, ignore, or preserve tempo, meter, and key metadata before any MIDI file mutates a project. The request/result policy hook, first musician-facing policy selector, first tempo/key adoption path, and full-map review receipts now exist; the remaining work is the real tempo-map/meter-map/key-map mutation path and broader validation against files with multiple tempo/meter/key changes.
- Full Import Wizard completion with clear per-channel and setup-data choices before any MIDI file mutates a project. First-pass selected-pattern and split-channel import UI exists; remaining work is full tempo/meter/key timeline-map adoption, deeper setup-data decisions, richer mapping polish, and broader real-file validation.
- MIDI export/import polish: selected pattern, selected Arrangement clip, whole song, drums-only, lane-track readiness, unique stem-folder naming, backend multi-file MIDI stem packages, the first Render/Export package choice, staged user-visible status feedback, a richer package manifest, FNV-1a 64-bit checksums for exported MIDI payload files, a
CHECKSUMS.txtsidecar, a human-readable package receipt, package inspection/validation, a backend import/repair preview, a backend import-plan skeleton, guarded import commit/receipt models, and the first confirmed project-mutating package importer now exist. MIDI Protocol Coverage now treats export as having a first UI, while still blocking product readiness on package/zip polish, true progress bars for long exports/imports, source-asset references, visible import/repair/commit UI, a single undo checkpoint for whole package import, and broader real-project validation. - Hardware output timing hardening: live lane output now uses scheduled sample offsets, MIDI Health exposes recorded-alignment readiness, Settings has a MIDI Timing panel with manual Passport alignment save/clear controls, the backend can summarize pulse-based timing measurements, Hardware Passport records can store accepted recorded-timing alignment records, and the panel can queue safe Passport-based C4 pulse trains while the processor captures matching returned pulses. The remaining work is a fully automated accept/apply wizard and deeper jitter/driver diagnostics.
- Guided hardware setup for controllers, MIDI guitars, wind controllers, drum pads, workstations, and external synth modules. A first reusable scenario model, real-world example labels, searchable backend device templates, a visible device-template picker, model-owned template apply previews, live readiness cards, selectable scenarios, selected-scenario detail, copyable setup/template reports, safe next-action routing, guarded draft apply, focused rollback, and confirmed note-only test-note queuing now exist; the remaining work is fuller profile creation, role selection, lane-stack/channel templates, polished timing/test receipts, and device-specific setup flows.
- Better customer-facing MIDI diagnostics when latency, missing input, wrong channel, or unassigned hardware output is detected.
- Latency calibration polish: manual profile calibration, safe loopback pulse sending, returned-pulse capture, and accepted profile timing records now exist. Remaining work is apply/recalibrate UX, broader real-device validation, driver/interface diagnostics, and clearer jitter warnings.
- Direct-control MIDI Learn polish: first-pass right-click/Ctrl+Alt-click learn now exists for APVTS-backed sliders plus many supported dropdowns/toggles and routes through the existing MIDI Maps target model. Direct learn can replace mappings for the selected visible target, can replace other mappings that use the same newly moved hardware source, can deliberately add one-source-to-many-target macro mappings, and MIDI Maps has first-pass per-row
PICKsoft takeover plus direct dashboard report copy. Remaining work is complete coverage for every APVTS-backed control surface, safe transient-popup binding, explicit paired/coarse mode controls, richer conflict browsing, deeper curve editing, and broader real-hardware validation. - 14-bit MIDI Learn polish: SpaceAge now identifies MSB/LSB controller pairs, warns on LSB-only learned mappings, automatically merges matching LSB traffic for learned MSB mappings, and shows first-pass live assignment activity in MIDI Maps. Remaining work is optional explicit coarse/paired mode controls, smoothing, richer high-resolution detail display, and broader real-hardware validation.
- MPE is not part of the current "MIDI 1.0 release-ready" finish line. Current support is MPE-adjacent: per-channel bend/pressure/CC expression, CC74 timbre-style data, and note-specific poly aftertouch. Import inspection and loaded-project MIDI Health now warn when material is multi-channel expressive MIDI that may be MPE-like, but true MPE still needs lane-level zone setup, master/member channel policy, per-note channel allocation, bend-range policy, MPE-aware synth response, import/export validation, and per-note expression editing.
- MIDI Health now shows the current MIDI 1.0 finish-line summary and next closeout focus directly in the popup, not only inside copied protocol reports. This keeps the Settings panel useful as an operational dashboard while MIDI is still being closed out.
- MIDI AUTO now applies the same selected-lane warning/tool-hint status after opening or refreshing the panel as it does after manually clicking a lane. Review-only setup lanes therefore stay visibly protected even when they are auto-selected on refresh.
- MIDI Health
COPY STEPSnow includes the current MIDI 1.0 finish-line summary, next closeout focus, and blocker-category summary before latency/action advice, keeping the short checklist aligned with the visible Health dashboard. - MIDI Protocol Coverage now separates the current MIDI 1.0 finish-line progress from deferred future protocols directly in the visible panel. MPE/MIDI 2.0 can stay tracked without visually dragging down the current MIDI 1.0 release-readiness target, and the next-closeout card now quotes the same model-owned focus and blocker-category summary used by the copied reports.
Risk Watch
- Do not silently route imported Program Change messages to internal instruments.
- Do not send SysEx or hardware recall data without explicit confirmation.
- Keep lane instrument assignment separate from the old Pad-as-instrument-proxy workflow.
- Keep drum lanes special only where the note-input paradigm requires it; do not let that leak into general Arrangement lane behavior.
Subagents
Carver audited the MIDI Import Wizard / Program-Bank / MIDI PATCH workflow and recommended: clearer setup-preservation wording, a Patch Setup Preview inside the import wizard, row-level MIDI PATCH actions, a clearer handoff to Hardware Passports, and later SoundFont mapping.
Hubble audited the implementation against practical MIDI 1.0 expectations and identified the main non-cosmetic gaps: direct external hardware output timing needed sample-offset scheduling, MIDI file import is first-tempo based, raw pattern export needed a documented channel convention, SysEx is guarded but not yet a full librarian, and expression editing still needed a real authoring surface. Hardware-output scheduling, manual/loopback timing calibration, raw pattern export conventions, and compact step-snapped MIDI AUTO drawing now have first-pass fixes; hardware timing and expression editing still need broader validation and final Piano Roll-grade UI.
2026-07-05 Status Addendum
- Current user-facing expression/automation doorway is
AUTO LANES / Shared PTN Data. Older implementation notes may still sayMIDI EXPR,MIDI AUTO,expression lanes, or generic automation, but the current UI wording should teach that AUTO LANES edit selected-pattern shared PTN automation/expression. - Effects are not per-pattern. Patterns own notes, drum steps, Chord Engine markers, and pattern MIDI automation/expression. The Effects-page rack is shared send/return infrastructure fed by pad/channel sends, with EchoRay retaining global character/return controls plus per-pad/channel delay memories.
- Arrangement lanes do not yet own independent effect-send fields. Future clip-local effect throws should be designed as explicit Clip Decorations, Motion Clips, or automation scopes rather than hidden pattern inserts.
- Subagent MIDI audit identified direct external MIDI input device routing as the next important backend slice. The first backend pass is now implemented: a processor-owned JUCE MIDI input router opens lane-referenced input devices, queues device events from the callback, and drains them in
processBlock()through the existing source-device, armed-lane, MIDI-channel, MIDI Learn, sync, SysEx, recording, and expression-capture paths. - Remaining direct-input work is customer-facing: validate the host/direct source policy with real controllers across hosts, refine open-input and dropped-message diagnostics in MIDI Health/Input, and keep proof-test surfaces current while the user plays hardware.
- MIDI Input now has a non-destructive
CHECK INPUTrefresh. The user can open the panel, play a controller, and refresh host/direct counts, observed channels, visible devices, and repair steps without clearing the evidence.COPY REPORTalso refreshes first so support receipts are not stale. - Subagent MIDI import audit identified an overlapping same-pitch import trap. This pass fixed the pairing logic and added self-test coverage for direct Piano Roll import and split-channel-to-lane import.
- Shared effects remain project/mixer-level send-return effects, not per-pattern inserts. This pass hardened restore behavior so recalled projects with nonzero Halostar, Reverb, EchoRay, modulation, or Octave sends wake the matching shared return instead of restoring a dead send path. Normal ENABLE switches still define whether the live return is active during use.
- No build was made for this pass, per request.
- MIDI Input readiness now carries a plain-English live routing verdict. Reports and the Settings MIDI Input panel can say whether the armed lane is currently expecting host/plugin MIDI, direct physical MIDI, both routes, a missing physical device, or no armed lane at all. Missing lane-selected physical inputs now fail deterministic
canReceiveMidireadiness instead of looking ready while requiring repair. - MIDI Input now has a model-owned trust gate, mirroring the MIDI OUT trust-gate pattern. The gate combines armed-lane state, visible input/device readiness, input source policy, channel-filter evidence, and dropped direct-input messages into
MIDI IN IDLE,MIDI IN BLOCKED,MIDI IN READY WITH CAUTION, orMIDI IN READY. The Settings MIDI preflight line, MIDI Input popup, MIDI Health panel, and copied input/health reports now share the same model-owned verdict. - AudioSelfTest now covers MIDI Input trust-gate ready/blocked/idle states, structured serialization, and MIDI Health inclusion so the new cockpit verdict has a regression guard before real hardware validation.
- MIDI Health
COPY STEPSnow includes the MIDI Input trust-gate summary and next action. The short support checklist therefore answers whether the current controller/lane route is idle, blocked, cautious, or ready without requiring the user to open the full report. - MIDI Health now also carries the MIDI Output trust gate as a first-class summary field. The visible Health panel, full copied Health report, compact
COPY STEPSchecklist, structured payload, and warning state can now say whether external hardware output is idle, blocked, or ready using the same model-owned verdict as the MIDI OUT preflight panel. - MIDI SETUP scenario plans now quote the shared MIDI IN and MIDI OUT trust gates for their primary input/output steps. The guide therefore starts with the same ready/blocked/idle verdict as MIDI Health and the focused preflight popups, then keeps observed channels, timing, expression, hardware lanes, and export-only lanes as supporting rows.
- MIDI Protocol Coverage now names the two scorecards explicitly. Backend foundation remains effectively complete for MIDI 1.0 protocol recognition, routing, preservation, and safety plumbing; MIDI 1.0 release readiness is intentionally lower because it includes customer-facing UI, import/export polish, setup wizards, progress feedback, real-hardware validation, and documentation. The apparent move from "99%" to a lower readiness score was not a backend regression; it was a clearer release-readiness meter replacing an overloaded label.
- Source-aware sync now has a direct test hook and broader regression coverage. Incoming MIDI Clock, Start/Continue/Stop, Song Position Pointer, MTC full-frame and assembled quarter-frame chase, and MMC chase can be exercised with explicit source device IDs, wrong-source messages are counted as ignored, and case-insensitive Hardware Passport source matches are accepted. This matters for real rigs where Windows, drivers, or users may present the same port name with small casing differences.
- MIDI AUTO now gives the selected expression lane a larger focused scope graph instead of a narrow strip. The graph, list layout, and hit-testing share the same height constant, so drawing/editing should remain aligned while making CC, bend, pressure, and sustain curves easier to understand.
- MIDI AUTO selected-lane graphs now label their own value range and visible step span. The graph draws small MAX, MIN, CENTER/ON-OFF where relevant, and STEPS x-y cues so CC, sustain, pressure, and pitch-bend edits are readable without cross-referencing a separate report.
- MIDI AUTO now labels hovered or singly selected graph points in place with their step and editor value. The readout strip still carries the full detail, but the graph itself now answers "which point am I touching?" without forcing a visual jump.
- The Piano Roll's compact
MIDI AUTOpreview lane is now an actual doorway, not just a readout. Hovering it shows pointer feedback and clicking it opens the guarded MIDI AUTO panel through the same Settings route. The MIDI Protocol Coverage panel also exposes its next closeout action as a real button, routing known Settings surfaces such as MIDI AUTO, MIDI PATCH, SysEx Vault, MIDI Setup, MIDI Maps, and Hardware Passport directly while giving clear status cues for import/export/roadmap items that live elsewhere. - Peirce's MIDI closeout audit recommends treating MIDI Learn as a polish-heavy area rather than the same severity as SysEx, import/export, expression editing, or hardware setup. For now the scorecard still keeps it visible as a release-readiness category because direct-control learn coverage is a customer-facing promise; we can demote it only after the remaining surfaces are reviewed.
- Peirce also recommends keeping Hardware Bend Range wording narrow: internal pitch bend and pressure are implemented, while the remaining risk is external hardware trust, bend-range contract, and guided verification. The current docs and scorecard should preserve that distinction.
- Jason's conductor-map audit confirms that full tempo/meter/key map adoption should remain review-only until SpaceAge owns a real project timeline-map model with structured rows, serialization, undo, and Arrangement playback integration. Do not parse receipt text as a shortcut into project mutation.
- MIDI AUTO now labels its current scope directly in the panel: pattern-owned data, selected PTN number, shared versus local/variant status, and whether the pattern currently contains MIDI-sent expression. This is a trust feature, not decoration, because MIDI AUTO remains selected-pattern automation until clip-local ownership is deliberately implemented.
- Pitch-bend MIDI AUTO now reports destination trust beside the selected-lane readout. If the selected pattern feeds multiple lanes, no lane, internal routing, or external hardware without a Hardware Passport bend-range contract, the panel says so instead of implying the graph alone is enough. Hardware pitch-bend correctness must remain destination-owned.
- MIDI AUTO closeout wording has been recalibrated. The remaining blocker is no longer "there is no editor"; it is now the more precise launch-quality work: curve/tangent tools, switch-edge confidence polish, and durable destination bend-range contracts beyond the first-pass cue. Clip-local and lane-local automation are future ownership architecture.
- SysEx Vault now shows a visible readiness strip in the Vault panel, using the model-owned Vault summary and Librarian readiness plan. The no-autosend and estimated-restore trust boundary is now visible at the feature doorway, not only in copied reports.
- MIDI Protocol Coverage family rows are now clickable when they carry an action surface. Hovering gives pointer feedback, blocker rows change from
Go:toClick:, and the click reuses the same guarded navigation route as the top closeout button. This makes the report panel more actionable without adding any hidden import/export/hardware-send behavior. - MIDI Output Preflight now shows the shared output trust gate's next action as its own visible row. The copied report already had that guidance; the panel now puts it in the user's eye line before they copy anything. This is read-only guidance and does not auto-repair routing, open devices, or send hardware MIDI.
- The compact Settings MIDI preflight
OUTPUTrow now uses the same MIDI Output trust gate as the full MIDI OUT panel. This keeps the small dashboard, popup, Health report, and copied support text from disagreeing about whether hardware output is idle, blocked, cautious, or ready. - MIDI Output Preflight now has a non-destructive
CHECK OUTPUTrefresh. It rebuilds output readiness, output runtime, visible device inventory, repair steps, and the trust-gate verdict in place, without sending MIDI or changing routing.COPY REPORTalso refreshes first so hardware support receipts are not stale. - MIDI Health now has a non-destructive
CHECK HEALTHrefresh. Its repair buttons rebuild from the latest health snapshot, timer refreshes keep the button actions current, andCOPY REPORT/COPY STEPSrefresh first so support text and visible actions do not drift apart. - MIDI Input Preflight now separates the shared input trust gate from its
NEXT ACTIONrow, refreshes the visible source-policy picker when the snapshot is checked, and reserves layout space for every fact row it paints. This keeps the musician-facing input diagnosis readable instead of letting the action rows crowd the lower panel. - MIDI Health now has a
FIX NEXTcloseout doorway that reuses the MIDI Protocol CoverageactionSurfaceIdmodel. It opens the current guarded MIDI surface, such as MIDI AUTO, Hardware Passport, SysEx Vault, MIDI PATCH, MIDI Maps, or MIDI Setup, but it is navigation-only and does not send MIDI, import/export, change routing, or mutate project data. - MIDI AUTO now has a
LANE VIEW/LIST VIEWtoggle.LANE VIEWenlarges the selected expression lane graph for more deliberate CC, bend, pressure, sustain, and controller editing, while the panel copy now states the critical ownership rule plainly: edits are still PTN-level pattern automation, shared clips still require Variant or Ack Shared, and the panel does not auto-send hardware MIDI. - MIDI SETUP now includes
HEALTHin its direct safe-door row and tightens the row copy/tooltips around the navigation-only rule. The guide can now jump to MIDI Input, MIDI Out, Hardware, Timing, Health, MIDI PATCH, SysEx Vault, and MIDI AUTO without sending hardware MIDI or changing project state; draft apply, test note, recall, and SysEx actions remain separately confirmed. - MIDI AUTO wording now names its exact scope: PTN-owned performance automation. Empty-state copy suggests concrete first lanes such as Mod Wheel, Sustain, Pitch Bend, Expression, and Custom CC, and review-only setup rows now expose an
OPEN MIDI PATCHnavigation door instead of making users hunt for the correct protected setup surface. - MIDI package import/export now has a first trust-surface polish pass: whole-Arrangement MIDI stem package export uses a cancellable
ThreadWithProgressWindow, export validates the finished package to report stem/file counts in the status receipt, and package import now runs as a message-thread-safe stem-by-stem progress flow instead of one silent synchronous shove. The import panel rechecks the package, imports one lane stem per timer step, reports progress/receipt text between stems, and lets the user stop before the next stem while keeping any imported stems protected by the package undo checkpoint. The package inspection panel also hasCOPY REPAIR STEPSplusRECHECKso missing/mismatched packages can be repaired externally and scanned again without closing the panel. - MIDI package import now owns an editor-level busy guard while the stem-by-stem import transaction is active. Undo/redo, file drops, project/archive/recovery loads, selected MIDI import, and launching another package inspection are blocked with a clear status message until the import finishes or cancels. The import confirmation button also has a pending state so a double-click cannot stack two import confirmations.
- Hardware Passport now has a read-only
COPY PLANaction for the selected profile. It copies both the program-only recall plan and the program-plus-SysEx plan without queueing or sending MIDI, and Passport rows now include recall-plan warnings in their visible warning text instead of hiding plan-only blockers behind disabled queue buttons. - MIDI Protocol Coverage action labels now distinguish real surface doors from status-only guidance. Import/export and roadmap rows say
Review...instead of pretending to open a hidden full wizard, while rows that do own a guarded Settings surface remain clickable. - MIDI AUTO copied reports now include the selected pitch-bend destination cue when a pitch-bend lane is selected. The on-screen
BEND RANGEbadge and copied support text therefore agree about multi-lane ambiguity, unplaced patterns, internal-only routes, and Hardware Passport bend-range contracts. - MIDI AUTO checklist wording has been tightened again: first-pass editing is acknowledged as present, focused point/switch affordances, switch-edge trimming, graph value feedback, and selected-lane bend cues are credited, and the remaining release work is curve/tangent tools, switch-edge confidence polish, and durable destination bend-range contracts beyond the first-pass cue. Clip-local and lane-local automation are future ownership architecture.
- Confirmed Hardware Passport recall now queues its messages on a cumulative schedule through the absolute-due-time hardware router. Multiple attached SysEx snapshots therefore pace one after another instead of sharing the same relative delay window and becoming due together. The log and pending-delay counters still report each item's own planned delay, while restore-attempt timeouts now start from the scheduled send time instead of the instant the full plan was queued.
- Subagent MIDI AUTO audit identified the next ownership gap: MIDI AUTO is still PTN-owned automation/expression. Arrangement clips can reference a source range inside a longer pattern, but the editor doorway currently opens by pattern id rather than explicit clip/source-range context. The next serious MIDI AUTO architecture pass should add selected-clip context to the panel without pretending automation is clip-local before that model exists.
- MIDI Health shared-pattern warnings now ignore preserved silent gaps when counting Arrangement references. This keeps MIDI expression and MIDI PATCH warnings focused on actual musical clips instead of treating empty time-preserving containers as if they were extra pattern users.
- MIDI AUTO now shows a selected Arrangement clip context row when a real clip using the edited PTN is selected. The row reports clip display name, lane name, source step range, arranger step range, selected PTN-clip count, and the critical ownership truth: edits still write the PTN, not a clip-local automation layer. The selected-lane graph also draws a subtle
CLIP SOURCEoverlay for the selected clip's source range, and the fit button becomesFIT CLIPwhen clip context exists. The first pass is intentionally read-only context; deeper clip-local automation remains a future architecture decision. - MIDI AUTO copied reports now include the selected Arrangement context row as support text. This makes
COPY REPORTuseful when explaining a clip/source-range edit without changing the ownership model. - MIDI AUTO wording now avoids ambiguous phrasing around Arrangement lanes and clip-local edits. The editor reports
MIDI AUTO lane(s), usespattern variantfor shared-pattern edits, and labels the focused graph as aMIDI AUTOscope. - MIDI AUTO switch-style lanes now use customer-facing switch/block wording in hover and drag hints. Sustain-like data is still stored as validated pattern-owned MIDI events, but the editor describes the user gesture as painting ON/OFF blocks and dragging switch edges.
- MIDI AUTO pitch-bend range now resolves destination context from the selected Arrangement clip before falling back to pattern-wide lane discovery. This keeps the
BEND RANGEcue honest when a shared PTN feeds multiple lanes. - MIDI AUTO edit receipts now use switch-edge wording for switch-style lanes across select/copy/paste/delete/nudge/move paths, while continuous lanes continue to say points. The editor is still event-based internally, but the language now matches the user gesture.
- MIDI AUTO visual language now has a first mockup-to-implementation pass. The compact Piano Roll lane is taller, labeled like a real editing doorway, uses semantic lane colors where possible, and draws switch-style automation as on/off blocks instead of interpolated curves. The expanded panel's
CLIP CONTEXT/PATTERN CONTEXTrow is now a larger bordered card so selected source range and PTN ownership are visible before edits begin. - MIDI AUTO switch-style lanes now draw and hit-test as switch/block edges in the selected-lane graph. Sustain-like events keep the same event-backed model, but the visible affordance is a tall draggable edge handle with switch-edge wording, not a tiny CC point. Continuous lanes keep point/curve behavior.
- MIDI AUTO switch-style receipts now report ON/OFF state instead of raw controller values during hover, selection, drag, lasso, and Up/Down nudging. Continuous lanes still report numeric values. This makes sustain-style editing read like musical blocks even though the backend continues to store validated MIDI events.
- MIDI AUTO selected Arrangement context now uses
SOURCE VIEWandFIT SOURCElanguage instead of ambiguous clip-context wording. The row front-loadsedits write PTN#, making the current ownership model clear: the selected clip can focus the source range, but the edit still belongs to the underlying pattern until a future clip-local automation model exists. - MIDI Maps / MIDI Learn now has an explicit state badge in the learn strip. It reports
IDLE,LISTENING,REVIEW SOURCE,REVIEW CONFLICT, orMAPPEDbefore the explanatory text, so the guarded REPLACE/MACRO/CANCEL workflow is easier to understand without changing MIDI routing or capture behavior. - Arrangement lane Signal buttons now show a blue
Awhen that lane contains any real clip whose pattern has MIDI AUTO lanes. The lane command remainsLANE SIGNAL, but its automation doorway is now labeledMIDI AUTO / Automation..., so users can discover pattern automation from the Arrangement Canvas without adding another top-row control. - Hardware Passport queue progress now surfaces phase, next action, and the trust boundary directly in the panel. The queue still reports SpaceAge-side send/wire timing only; it does not pretend external hardware accepted recall/SysEx data unless future device-specific acknowledgement logic proves that.
- MIDI Health now shows MPE readiness as its own row. This keeps the current truth visible: MPE-like multi-channel expression can be preserved as MIDI 1.0 expression, but true MPE zones/member channels/per-note policy are still future work and must not be marketed as complete.
- MIDI Health
COPY STEPSnow includes a compactMPE boundaryline using the same model-owned MPE readiness summary as the visible panel. The full report still carries the detailed MPE section when needed, but the short support checklist no longer omits the not-true-MPE boundary on clean projects. - MIDI AUTO's visible command/status wording now says
MIDI AUTO laneinstead of the olderexpression lanephrasing in the editor's common selection, copy, paste, delete, draw, zoom, quantize, thin, and target-clear paths. This is copy-only polish; the stored data remains MIDI expression/performance automation and the ownership model is still PTN-owned. - MIDI AUTO paste/setup-data guard wording now also uses
MIDI AUTO lanefor the remaining copied-lane, editable-lane, and same-lane refusal paths. The lower-level model can still call the stored payload MIDI expression data, but the musician-facing editor consistently teaches the workbench name. - MIDI Health
FIX NEXTand MIDI Protocol Coverage action rows now navigate import/export closeout to real workspaces instead of only posting breadcrumbs. Import closeout opens Sequencers and points to MIDI TASKS; export closeout opens Arranger and points to RENDER. This is navigation-only and does not change MIDI import/export behavior. - MIDI Protocol
COPY CLOSEOUTnow has an explicit tooltip and copied safety receipt stating that the action copied text only, sent no MIDI, changed no routing, and changed no project data. - MIDI AUTO shared-pattern guard wording now uses the same
VARIANTcommand name as the Arrangement Canvas. The behavior is unchanged: use VARIANT for independent pattern edits, or ACK SHARED to intentionally edit every linked clip using that PTN. - SysEx Vault
MANUAL VERIFYwording now explicitly says the action should be used only after checking the external hardware. The receipt remains manual user-confirmed evidence, not a device-generated ACK, and still sends no MIDI. - SysEx Vault
COPY REPORTnow has an explicit text-only tooltip. It copies Vault summaries and restore receipts but does not send SysEx, queue recall, or change project data. - MIDI package import now states the trust boundary directly in its tooltips and confirmation dialog:
IMPORT STEMSis the project-changing action, whileCOPY REPORT, repair steps, reveal, and recheck helpers remain text/file/scan actions that do not import, repair, or mutate project data. - MIDI package copied repair steps now name
REVEAL PACKAGEandRECHECKdirectly, making the external repair loop self-contained: open the package folder, repair files, re-scan, then import only after the package passes. - Hardware Passport queue/copy controls now have clearer button-temperature tooltips:
QUEUE PROGRAM RECALLandQUEUE RECALL + SYSEXcan transmit hardware-changing MIDI after confirmation, whileCOPY LOGandCOPY QUEUEare text-only support actions. - MIDI Setup template controls now use the same button-temperature language:
COPY PREVIEWis text-only,APPLY DRAFTcan change the SpaceAge project after confirmation,TEST NOTEsends one short note only after confirmation, andUNDO DRAFTrestores the protected setup snapshot without sending MIDI. - MIDI Input, MIDI Health, and MIDI Output repair-action buttons now share a safe-door tooltip: these recommendations open or refresh the relevant MIDI setup surface only, and do not send MIDI or change routing by themselves.
- SysEx Vault
COPY REPORTnow includes the current live-capture status and future batch-capture dry-run plan in the same support receipt as Vault snapshots, restore trust, selected snapshot closeout, and restore receipts. Capture buttons also now state their temperature: arm/listen sends nothing, copy is text-only, and save capture changes Vault project data without sending SysEx. - MIDI Setup
COPY SESSIONandNEXT ACTIONnow carry clearer button-temperature language. Copied setup sessions include a cold/safe-door/warm/hot/undo legend so hardware setup receipts explain which actions copy text, which navigate, which mutate SpaceAge project data, and which can send one confirmed test note. - MIDI AUTO copied reports and the
COPY REPORTtooltip now state the SOURCE VIEW ownership boundary directly: SOURCE VIEW and FIT SOURCE focus the selected clip's source range, but edits still write PTN-owned automation. The report also repeats the VARIANT/ACK SHARED choice for shared patterns and states that copying the report sends no MIDI, changes no routing, and changes no project data. - MIDI AUTO
ACK SHAREDis now a two-step guard. The first click arms shared-pattern editing and changes the button toCONFIRM ACK; the second click intentionally unlocks edits that affect every Arrangement clip sharing that PTN.VARIANTremains the safer route for independent edits. - MIDI AUTO's half-armed
CONFIRM ACKlatch now disarms on Escape, refresh/context reload, target clear, or selecting another MIDI AUTO lane. Confirmed shared editing remains explicit; the temporary armed state no longer follows the user into a new context. - SysEx Vault future multi-dump planning is now labeled as
COPY BATCH DRY RUN/BATCH DRY RUNinstead of implying live multi-dump batch capture is already enabled. This is wording only: the current product still supports one-dump live capture plus explicit Vault review/save, while multi-dump batch capture remains a planned librarian feature. - SysEx Vault live-capture saves now show a visible
CAPTURE SAVEDreceipt state afterSAVE CAPTURE, andCOPY CAPTUREincludes a save receipt explaining that Vault project data changed but no MIDI was sent, no restore was queued, and no hardware was changed. The receipt clears on a new or changed capture. - MIDI Setup now shows its button-temperature legend directly in the visible guide text, not only in
COPY SESSION. The panel itself now says that copy/preview actions are text-only, safe-door buttons only navigate,APPLY DRAFTchanges SpaceAge project data only after confirmation,TEST NOTEsends one short confirmed note, andUNDO DRAFTsends no MIDI. - MIDI Setup
TEST NOTEconfirmation now states the external-hardware boundary directly: SpaceAge can confirm the queue attempt, but audible success still depends on the physical route, monitoring, and the device's patch/volume/state. Behavior is unchanged; this is trust/safety copy. - MIDI Setup
TEST NOTEconsent wording now usesSEND TEST NOTEfor the final hardware action, while the receipt keeps the queue evidence and explicitly says queueing is not proof that the external device sounded, used the expected patch, or was monitored correctly. - MIDI Hardware Setup device-template apply plans now include an explicit apply-boundary line: the plan is for SpaceAge project setup only, and must not send Program Change, Bank Select, MIDI Clock, transport, SysEx, reset, or test-note messages. The matching apply confirmation also names reset/channel-mode messages. This reinforces that
APPLY DRAFTis project mutation, not hardware transmission. - Hardware Passport recall confirmation now uses explicit hot-action wording. The final confirmation button says
SEND PROGRAM RECALLorSEND RECALL + SYSEX, the success receipt says SpaceAge only confirmed queueing, and copied recall plans now state that queue/wire timing is not proof that the external device accepted or applied patch, bank, setup, or SysEx state. - Hardware Passport recall logs now carry the same acceptance boundary as recall plans and queue progress.
COPY LOGis explicitly text-only and the log report says entries prove SpaceAge attempted to queue hardware MIDI, not that the external device accepted or applied the messages. - MIDI PATCH setup-card queue wording now follows the same trust rule.
QUEUE CARDtooltips and confirmation copy make clear that queueing an RPN/NRPN card may change external hardware setup after confirmation, while queue receipts say SpaceAge attempted the confirmed queue and still cannot prove device acceptance without hardware-specific evidence or manual verification. - MIDI PATCH pitch-bend testing now follows the same hot-action rule. The confirmation button says
SEND BEND TEST, the dialog states that SpaceAge can only report the queue attempt, and the receipt asks the user to listen and record manual verification only if the audible bend matches the declared Hardware Passport range. This manual receipt is useful evidence, not a device-generated ACK. - MIDI package inspection/repair wording now follows the same button-temperature model.
COPY REPAIR STEPS,REVEAL PACKAGE, andRECHECKexplicitly say they do not import stems, repair files automatically, change routing, change project data, send MIDI, queue SysEx, recall hardware, or change external hardware. Import progress receipts now state that package import can add editable lanes/clips only after confirmation, and still does not send MIDI or change external hardware. - SysEx Vault capture/link wording now follows the same model.
ARM CAPTUREis explicitly listen-only and does not write project data untilSAVE CAPTURE;LINK TO PASSPORT/DETACHare project bookkeeping only;MANUAL VERIFYwrites user-confirmed evidence after hardware is checked; batch dry-run remains planning-only; none of these capture/bookkeeping actions send SysEx or change external hardware. - Earlier MIDI package, health, and setup copy/export surfaces now carry explicit action-temperature language and copied-report safety receipts. Export/package buttons are labeled as warm file writes, package import is labeled as a warm SpaceAge project-data edit, and MIDI Health / MIDI Setup copy actions now prepend receipts saying they copied text only, sent no MIDI, changed no routing, changed no project data, and changed no external hardware.
- Cold/navigation MIDI tooltips have been standardized to include the external-hardware boundary wherever they already promised no MIDI, no routing, and no project-data changes. Compact MIDI refresh, MIDI Input, Timing, Learn, Protocol Coverage, Sync, MIDI AUTO, MIDI PATCH setup-card copy, and MIDI Output refresh now say they do not change external hardware as well.
- MIDI copied-report receipts now have a first shared helper in
PluginEditor.cpp. The first conversion covers import preview, input readiness, package inspection/repair, health reports, timing, setup, Learn dashboard, Protocol Coverage, Sync preflight, Output preflight, and MIDI AUTO reports while preserving the existing receipt text. - Straightforward MIDI cold-copy tooltips now use a shared helper. Import preview, MIDI Input, MIDI Health, MIDI Timing, MIDI Learn, Protocol Coverage, and MIDI Sync copy tooltips share one safety suffix, while domain-specific package/passport/SysEx tooltips keep their specialized clauses.
- MIDI Protocol Coverage
OPEN NEXTnow explains the actual next blocker category and recommended focus in its tooltip. The button still only opens the relevant closeout surface; it does not send MIDI, change routing, or mutate project data. - MIDI Protocol Coverage
COPY CLOSEOUTnow includes the same next-focus sentence as the visible panel, so copied release-readiness notes say what SpaceAge thinks should be tackled next before listing the checklist. - MIDI Protocol Coverage now has a standalone
COPY QAaction. It copies only the current MIDI 1.0 closeout QA checklist plus the next QA summary, and includes a cold-copy safety receipt: no MIDI sent, no routing changed, no project data changed, and no external hardware changed. COPY QAnow emits a paste-ready MIDI closeout QA session template with checkbox rows, owner surface, safety-boundary confirmation, result status, and evidence-notes placeholders. This is still cold-copy only; it is the bridge toward persistent in-app pass/fail QA state.- MIDI Protocol Coverage plain-text and structured reports now include the same paste-ready QA session template. The visible card, clipboard action, and report payload now share the same QA source instead of relying on separate prose paths.
- MIDI Protocol Coverage blocker categories now carry stable
qaSessionIdvalues in structured reports and copied QA session text. This prepares future persistent pass/fail/evidence state without depending on customer-facing category labels staying frozen forever. - MIDI Health and copied MIDI Protocol/Health reports now include a model-owned
NEXT MISSIONsentence. It names the surface to open, the first QA action to run, the receipt/session evidence to copy, and the safety boundary. This keeps the closeout workflow from reading like an encyclopedia when the user only needs the next practical move. - MIDI AUTO's selected-lane strip now uses more precise launch-confidence badges. Pitch Bend lanes show
BEND TRUST, sustain/switch lanes showSWITCH BLOCK, pressure lanes showPRESSURE, and protected setup data still showsREVIEW ONLY. The Pitch Bend detail line now states the Hardware Passport range +TEST BENDevidence requirement directly at the editing surface. - MIDI AUTO shared-pattern ownership language now comes from one editor-side scope helper. The visible badge, ownership strip, edit-block warning, and copied report now use the same
SHARED,LOCAL, orUNPLACEDPTN wording, so the user sees one consistent explanation of whether MIDI AUTO edits affect one clip, no placed clip, or every linked Arrangement clip using that pattern. - MIDI AUTO warm-edit tooltips now use the full safety boundary used elsewhere in the MIDI system. Quantize, value nudge, thin, curve, clear, delete, shared ACK, Variant, add-point, draw-ramp, clear-target, and fit-lane guidance now state that those actions send no MIDI, change no routing, and change no external hardware while editing SpaceAge PTN automation/project data.
- MIDI Health
FIX NEXTnow uses the same next-focus language as MIDI Protocol Coverage. Its tooltip names the owner surface, blocker category, and recommended focus while preserving the navigation-only/no-MIDI-sent boundary. - MIDI Health layout now reserves space for the optional
MIDI IN WHYline before placing repair buttons. This keeps next-step buttons aligned when live-routing detail is visible. - Settings MIDI Input compact detail counts now include direct physical input timing notes and observed queue-age rows. If the detailed MIDI Input panel has useful direct-timing evidence, the compact Settings readout now admits there are extra details to inspect.
- Warm MIDI project-data tooltips and MIDI PATCH warm status strings now match their receipts more closely. Metadata-only saves state no MIDI was sent, no routing changed, and no external hardware changed; lane-attach and undo/rollback copy explicitly says when SpaceAge routing metadata changes intentionally.
- MIDI Health
COPY REPORTandCOPY STEPStooltips now state their cold/text-only boundary: they send no MIDI, change no routing, and change no project data. - MIDI Setup guide tooltips and copied session reports now use the same action-temperature language as MIDI Health. Copy actions state no MIDI/no routing/no project changes, safe-door buttons state navigation-only, and
APPLY DRAFTnow explicitly says it can change SpaceAge project data/routing after confirmation while still sending no hardware MIDI. - MIDI Output Preflight
COPY REPORTandCHECK OUTPUTnow state their cold/no-mutation boundary. The copied output preflight report also includes a safety receipt that no MIDI was sent, no routing changed, and no project data changed. - Shared MIDI repair recommendation reports now include a safety preface: recommendations are safe-door guidance unless a later panel asks for explicit confirmation, and copying the list sends no MIDI, changes no routing, and changes no project data.
- SysEx Vault metadata/remove/save/copy tooltips now use the same no-hidden-send language: Vault data edits are project-only, copy is text-only, and none of those actions send SysEx, change routing, queue restore/recall, change project data beyond the stated Vault edit, or change external hardware. Copied Vault reports now start with a safety receipt.
- Safe-door MIDI navigation tooltips now use a shared helper for the obvious non-mutating routes. MIDI Health
FIX NEXT, Timing/Input/Output/Hardware setup doors, MIDI SETUP guide buttons, Protocol CoverageOPEN NEXT, MIDI Sync navigation, MIDI AUTO, and MIDI PATCH review links now share the same navigation-only/no-MIDI/no-routing/no-project-data/no-external-hardware promise, with extra guard sentences retained for SysEx, recall, timing calibration, queue actions, and automation. - Hot confirmed MIDI hardware tooltips now have a shared helper for the obvious send/queue actions. Timing
SEND PULSE TRAIN, MIDI SetupTEST NOTE, Hardware Passport program/SysEx recall, MIDI PATCHQUEUE CARD, and MIDI PATCHTEST BENDnow use one wording pattern: confirmation is required before MIDI is queued, hardware can be affected, and queue receipts prove only SpaceAge-side send attempts rather than external-device acceptance. - Warm MIDI project-data tooltips now use a shared helper for the obvious no-send mutation actions. Timing calibration save/clear/accept, MIDI Setup draft apply/undo, Hardware Passport sync policy, SysEx Vault metadata/link/capture saves, and MIDI PATCH recipe/SoundFont/setup-card/NRPN metadata actions now share the same contract: SpaceAge project/passport/vault/lane data can change, MIDI is not sent, and external hardware is not changed.
- Warm MIDI file-write tooltips now have a shared helper on the MIDI export preview.
CHOOSE FILE & EXPORTandCHOOSE FOLDER & EXPORT STEMSnow use one wording pattern: the action writes MIDI artifacts, sends no MIDI, changes no routing, changes no project data, and changes no external hardware.
2026-07-05 Closeout Status
- Backend MIDI 1.0 protocol foundation remains in the high-90% zone: notes, controllers, bend, pressure, RPN/NRPN preservation/review, program/bank preservation/review, SysEx vaulting, sync/chase, import/export planning, hardware routing, recorded-alignment hooks, and diagnostics all have real model/backend paths.
- Current MIDI 1.0 release readiness is lower because it measures customer-facing finish, not just protocol plumbing. Remaining release blockers are visible MIDI AUTO final editing, SysEx batch/librarian polish, Import/Export progress and repair polish, Hardware Setup row-level actions, fuller real-hardware validation, and clearer documentation/onboarding.
- MPE remains out of this release-readiness percentage. Current work is MPE-adjacent MIDI 1.0 expression handling; true MPE still requires explicit zone policy, master/member channel ownership, per-note bend/timbre/pressure ownership, synth response, import/export validation, and UI.
Answers_for_Shane.mdnow has a plain-English MPE/MIDI 2.0 boundary answer: current SpaceAge preserves and reports MPE-like MIDI 1.0 expression, but true MPE zones and MIDI 2.0 UMP/Profile/Property Exchange support remain future protocol families.- MIDI Protocol Coverage's
Current MIDI 1.0 closeout by owner surfacereport now preserves release-priority order instead of sorting owner surfaces alphabetically. Copied closeout text therefore starts with the most important surface to test/fix, and each section is labeledTest/fix in ...to read like a practical QA map. - Hardware timing pulse trains now use the same processor-side confirmation contract as other hot hardware sends. The UI already asked before sending pulses, but the backend API now also requires a
userConfirmedflag before it can queue the C4 note-on/off pulse train. - PANIC is now documented in the UI as the deliberate emergency exception: it can immediately send pitch-bend center, mod wheel zero, sustain off, and panic/all-notes-off style MIDI to open hardware outputs. That remains unconfirmed by design because it is an emergency recovery command, not a casual setup/recall/send path.
- MIDI Sync Runtime now reports a compact trust verdict and next action alongside raw counters. The monitor distinguishes
IDLE,ALIVE ONLY,OBSERVED,OBSERVED BUT BLOCKED, andFOLLOWINGstates, so a user can tell whether SpaceAge saw only device/status chatter, saw timing traffic but ignored it by policy, or actually applied MIDI Clock/chase/tempo-follow behavior. The same fields are present in copied reports and structured data for QA/support. - MIDI Health now repeats the MIDI Sync Runtime trust verdict and next action in both the visible dashboard and copied health report. That keeps the main health surface from hiding the practical "what now?" behind raw Clock/SPP/MTC/MMC counters.
- MIDI Health
FIX NEXTand MIDI Protocol CoverageOPEN NEXTnow read the model-owned next-closeout action surface, label, route-proof status, direct-openable boolean, category, and first hardware evidence cue. The buttons no longer re-walk blocker category arrays to guess the current cockpit action. Direct panel routes and safe breadcrumb routes remain clickable; status-only or unwired routes stay disabled. - MIDI Protocol Coverage table rows now use the same direct/breadcrumb route verdict before offering hover/click behavior. Rows with status-only or unwired routes are shown as review items instead of false clickable doors.
- MIDI Protocol Coverage now exposes
actionIsSafeDoorOpenableon each row andnextCloseoutActionIsSafeDoorOpenableon the report/health payload. This separates true direct panels from broader safe-door navigation while keeping both model-owned instead of UI-inferred. - MIDI Protocol Coverage blocker categories now expose a reusable
actionSafetyBoundarySummary. It states COLD/WARM/HOT class, the documented boundary, and direct/safe-door openability in one sentence, so QA checklists, session templates, structured reports, and future tooltips can all use the same safety contract. - The current next-closeout cockpit now exposes
nextCloseoutSafetyBoundarySummaryin both Protocol Coverage and MIDI Health payloads, so visible buttons and copied reports can share the same next-action safety contract. - MIDI Health and MIDI Protocol Coverage now display the richer next-action safety-boundary sentence in their visible next-step blocks/tooltips/copy text instead of falling back to the older shorter safety line.
- MIDI Protocol Coverage and MIDI Health plain-text reports now include the same next-action safety-boundary sentence, so copied diagnostics no longer lose the COLD/WARM/HOT boundary detail.
- MIDI Protocol Coverage blocker categories now expose
qaEvidenceCaptureSummary, and the QA checklist/session template/plain-text report now repeat it. The closeout packet names the stable QA session id, PASS/FAIL/BLOCKED result expectation, evidence types to capture, and safety boundary in one reusable line. - MIDI Protocol Coverage and MIDI Health now expose
nextCloseoutQaEvidenceCaptureSummaryas a first-class next-action field. The visible MIDI Health panel, copy tooltips/text, structured reports, and plain-text reports can now point at the exact evidence target for the next closeout item without parsing the full QA template. Next MIDI missionnow embeds the same QA evidence target directly. The first mission sentence now tells the tester what to open, what to test, what proof to capture, and which safety boundary applies without requiring a second report section.- MIDI closeout working summaries now carry evidence targets too.
criticalCloseoutPathSummary,currentFinishLineCloseoutChecklist, andcurrentFinishLineSurfaceChecklistall repeat the model-owned QA evidence sentence beside route-openability, so a tester can work from any of those compact lists without losing proof requirements. - MIDI closeout QA now exposes a receipt schema beside the persistent QA state key. The next-closeout model, MIDI Health, Protocol Coverage, copied QA/closeout text, plain reports, and structured payloads all describe the same saved-result shape: PASS/FAIL/BLOCKED, evidence notes, checker, timestamp, receipt refs, blocked reason, safety class, route-proof status, and owner surface.
- MIDI closeout QA now also exposes an unsaved receipt snapshot. Reports and structured payloads can distinguish "receipt shape is known" from "a PASS/FAIL/BLOCKED result has actually been saved," which keeps the dashboard honest while persistent in-app QA storage is still future work.
- MIDI closeout QA receipt snapshots now expose save-readiness. Unsaved receipts report exactly why they cannot become persistent yet, including missing PASS/FAIL/BLOCKED result, evidence notes, checker, timestamp, and blocked reason when relevant.
- Dormant clip-local MIDI automation storage now has explicit copy/remove helpers, and Arranger clone, paste, insert-split, and clip-cut paths now assign fresh clip IDs to newly created clips. Future clip-local automation can therefore follow intentionally duplicated clips without accidentally sharing one stale clip identity across multiple visible Arrangement clips.
- Live external-MIDI monitoring now bypasses the generic pending-output queue and enters the hardware output router immediately from the live input path. Sequenced playback, recall, SysEx, and clock scheduling keep their existing timing queues, but played notes/controllers no longer wait for the later pending-output flush before reaching external hardware. Internal monitoring already starts at the earliest drain-block sample; this closes the equivalent avoidable hop for hardware live-thru.
- Arrangement lanes now show a soft
AUTO+doorway on the selected lane even before automation exists, while lanes with existing MIDI AUTO data keep the strongerAUTObadge. Clicking either opens the same guarded MIDI AUTO editor and keeps the shared-PTN / VARIANT warning visible. This makes first automation creation discoverable from the Arrangement Canvas instead of only after automation already exists. - The Arrangement
AUTO+doorway now requires real clip/pattern context. Empty lanes no longer advertise an automation editor or silently fall back to whatever PTN was selected elsewhere; the status line now tells the user to add or select a clip before creating pattern automation. - Arrangement
AUTO+doorway discoverability is now lane-wide for any lane that already contains a real clip, not only the selected lane. Empty lanes still show no automation doorway, existing automation still showsAUTO, and opening the doorway now reports whether the user is creating the first automation lane or opening existing lanes. - Arrangement automation badges now carry deduplicated lane counts. If a lane contains multiple clips that share the same automated PTN, the badge counts that PTN's automation lanes once for that lane; if multiple automated PTNs live on the lane, the badge can report the combined lane count instead of a vague yes/no flag.
- Direct physical MIDI input was rechecked against the audio-block order: the direct-input queue drains before host MIDI handling, sequencer processing, pending MIDI output flush, and audio rendering. Remaining live monitoring lag should therefore be investigated as buffer size, driver/interface, device response, SoundFont/instrument voice startup, or hardware-thru configuration rather than an obvious extra SpaceAge scheduling hop.
- MIDI Health now carries direct physical MIDI queue-age metrics as structured data instead of only burying them in the Input report. The main latency row now warns when direct queue peaks reach the performance-relevant 12 ms range, and copied health payloads include average/max queue age so support/testing can distinguish SpaceAge queue delay from driver, buffer, controller, SoundFont, or external-hardware response time.
- MIDI Health also shows direct queue evidence as its own row when direct physical input has been observed. This keeps the measured average/max queue age visible without forcing the user to read a long latency paragraph or open the detailed MIDI Input panel.
- Arrangement MIDI recording target placement now follows the armed lane instead of the whole arrangement. If recording starts over a real clip in the armed lane, SpaceAge records into that clip; otherwise it creates a fresh clip on that lane at the playhead, or at the lane end when the playhead is still at the start of an already-populated lane. Empty armed lanes still begin at measure 1. This keeps record placement predictable across drum and instrument lanes.
- Arrangement lane MIDI buttons now report the recording state directly. An armed lane shows
LIVE IN, a lane targeted by active MIDI recording showsREC IN, and a lane waiting through count-in showsCOUNT. Transport-stop and spacebar-stop paths now explicitly refresh those lane buttons, so the visible live/record target should not lag behind the actual recording state. - MIDI Health now exposes a model-owned
LIVE FEELverdict. It classifies the current audio block as live-friendly, borderline, or too high for tight playing, includes direct physical MIDI queue-age evidence when available, and separates SpaceAge's live-input scheduling path from driver/interface/controller/SoundFont/external-hardware latency. This gives users a blunt diagnostic before they start blaming MIDI protocol handling. - Live MIDI latency wording was rechecked and tightened across the model-facing reports. Host/plugin MIDI keeps JUCE in-block sample positions before voice rendering; SpaceAge-opened direct physical MIDI uses earliest-drain-block monitoring for notes/controllers while preserving device timing evidence separately. Recorded-timing alignment is now described as record-placement compensation, not as a cure for controller/audio monitoring lag.
- Hardware profile summaries, setup/test-note recommendations, MIDI Health repair copy, and Timing guidance now consistently use
recorded-timing alignment,REC ALIGN, andCLEAR ALIGNwording. Internal class/function names may still mention calibration, but musician-facing copy now teaches the right workflow: make live monitoring feel right first, then align recorded events. - MIDI closeout QA receipts now expose a compact reusable workflow summary: current state, recommended action, save-enabled state, and next missing evidence/action. MIDI Health, Protocol Coverage, copied QA text, copied closeout text, plain reports, and structured payloads now carry the same line so the tester does not have to infer whether the next QA receipt is unsaved, incomplete, save-ready, or already saved.
- MIDI closeout QA now also exposes a manual run-step summary. The next-closeout model, MIDI Health, Protocol Coverage, copied QA/closeout text, plain reports, structured payloads, and per-category QA templates now say exactly what surface to open, what to test, how to mark PASS/FAIL/BLOCKED, what evidence to capture, and which safety/route status applies.
- MIDI AUTO now exposes a compact doorway run-step summary. MIDI AUTO reports, MIDI Health, and structured expression payloads can now answer the practical first-use question: select/create a real clip or pattern, open AUTO from the Piano Roll, Arrangement
AUTO/AUTO+badge, MIDI TASKS, or Settings, then create or inspect shared PTN automation while respecting the VARIANT/shared-pattern warning. - Arrangement lane command wording now promotes
AUTO LANES (CC / Bend / Pressure)to the first command in the laneSignal / MIDImenu. This keeps the Arrangement Canvas automation doorway visible even when the user has not noticed the smallerAUTO/AUTO+badge yet, and the status line now explains that the command opens shared-PTN performance automation for CC, bend, pressure, sustain, and related MIDI data. - Piano Roll automation doorway wording now matches the Arrangement lane command. The MIDI TASKS menu, AUTO strip hover text, AUTO button tooltip, and MIDI TASKS tooltip all name CC/bend/pressure/sustain-style performance automation directly instead of relying only on the more abstract
Shared PTN Dataphrase. - Current model/UI safe-door wording now uses
AUTO LANESas the primary user-facing name, with shared-PTN ownership described in explanatory text instead of overloaded into every button label. MIDI Setup reports, MIDI Health/Protocol next-action labels, import follow-up instructions, MIDI guitar/wind controller scenario actions,Answers_for_Shane.md, and the glossary now point to the same doorway while preserving the shared-pattern warning where it matters.
2026-07-11 - Hardware Editor Profile Groundwork
- Enriched the Hardware Setup template family for Yamaha XG and GM/GS-style devices.
- Added a specific
Yamaha CBX-K1XG / XG Keyboardtemplate so SpaceAge can describe its dual role as controller and XG tone module. - Broadened the generic module template to
General MIDI / XG / GS Modulewith aliases for Roland Sound Canvas/GS and Yamaha MU-style devices. - Documented the Hardware Passport editor path: manuals/Data Lists become verified Parameter Registry rows before SpaceAge exposes device-specific knobs, dropdowns, RPN/NRPN, or SysEx controls.
- Hardware Passport drafts created from XG/GS-style templates now carry a profile note explaining that routing/channel/test-note setup is safe to draft, while deep parameter editing requires exact manual/Data List mapping.
- Status impact: this advances the customer-facing hardware workflow and reduces the risk of inventing unsafe vintage-hardware controls without manual-backed evidence.
- SysEx librarian reports now spell out the four hardware restore evidence tiers: stored bytes, queued send, device response, and manual verification. This keeps copied Vault/Health diagnostics honest about what SpaceAge can prove versus what the external device or user must confirm.
- SysEx snapshot and selected-snapshot closeout reports now include a plain
Identity reviewaction line. The report tells the user whether to avoid restore, attach the dump to a Hardware Passport, review a mismatch, manually confirm universal/incomplete evidence, or proceed only with explicit send confirmation and restore verification. - SysEx batch-capture dry-run plans now carry explicit session steps. The model, copied report, and structured payload describe the future safe ritual: choose source/passport, set expected dump count, arm one dump, review the receipt, save the approved dump, repeat, and trust restore only after review plus device/manual verification. The test call was also corrected so timeout is no longer accidentally passed as stored evidence.
- MIDI AUTO LANES preflight reports now carry model-owned workflow steps. The report describes the practical path: select/create the real PTN/clip/lane, open AUTO LANES from Piano Roll/Arrangement/MIDI TASKS/Settings, create or choose a row, edit with points/ramps/curves/blocks, use VARIANT before diverging linked clips, and test export/hardware response when the destination matters.
- MIDI project-level AUTO LANES summaries now reuse the same workflow steps in plain-text reports and structured payloads. The report keeps project-specific notes, but the basic user ritual no longer exists as a second hand-written instruction block.
- Piano Roll AUTO doorway tooltips and the empty AUTO LANES panel now reuse the same model-owned workflow steps. This keeps the visible first-use help aligned with reports, QA text, and the shared-PTN / VARIANT ownership model.
- The current MIDI 1.0 closeout checklist now carries route proof, route openability, safety class, QA evidence, and persistent QA-state cues inline on each blocker row. The short "what is left?" answer is now more useful without forcing the user to jump immediately to the full QA packet.
- The current MIDI 1.0 closeout-by-owner-surface checklist now carries the same route, safety, evidence, and QA-state cues. Users can work from the surface-organized list without losing the proof requirements that appear in the full closeout checklist.
- Each MIDI closeout blocker category now owns a reusable
closeoutChecklistRowSummaryand serializes it in structured reports. The main checklist and owner-surface checklist now render from that same row source instead of recomposing closeout language separately. - COPY QA and COPY CLOSEOUT now use model-owned clipboard text from
MidiProtocolCoverageReportinstead of rebuilding their packets inside the UI. Structured reports expose the same clipboard bodies, so future cockpit widgets, support exports, and tests all share the same safety/evidence/route wording. - Arrangement AUTO/AUTO+ lane badges now share one local label/tooltip helper. Normal and overview lane drawing no longer hand-compose their AUTO labels separately, and the hover text reuses the model-owned AUTO LANES workflow steps plus the shared-PTN / VARIANT warning.
- Piano Roll and Arrangement AUTO LANES click-status messages now also reuse the model-owned workflow steps. The first-use path therefore matches hover text, empty-state help, reports, and QA copy instead of teaching a separate hand-written ritual after the click.
- AUTO LANES now also has a model-owned one-line workflow summary helper. Tooltips, click-status messages, empty-state panel help, and tests can use the same compact string without hand-joining the step list or inventing fallback wording in the UI.
- The Piano Roll AUTO LANES preview strip now leads with musician-facing action language: draw mod wheel, bend, pressure, sustain, or custom CC movement. The shared-PTN / VARIANT warning remains present, but it no longer crowds out the basic "what do I do here?" message.
- Active closeout tests and source-owned blocker naming now use
AUTO LANES Final Editorinstead of the olderMIDI AUTO Final Editorphrase. Historical notes can still mention older naming, but the current release-gate category, structured report checks, and customer-facing doorway language now agree.
2026-07-12 - Direct MIDI Live/Record Timing Split
- Direct physical MIDI now keeps two timing concepts instead of pretending one timestamp can serve every purpose: live monitoring is still scheduled at the earliest drain-block sample for the lowest practical feel, while recording and automation capture use the measured in-block arrival sample.
- Host/plugin MIDI remains unchanged because host MIDI already carries native sample offsets inside the audio block.
- Practical meaning: controller play-through should stay as immediate as SpaceAge can make it, but recorded notes/CCs should no longer be flattened to the start of the drain block.
- Remaining truth: direct physical MIDI can still wait until the next audio callback before SpaceAge sees it, so audio buffer size, driver/interface latency, and duplicate routing are still the next things to inspect if a player feels lag.
2026-07-12 - Arrangement AUTO LANES Front Door
- Added a dedicated AUTO LANES button to the Arrangement toolbar next to ADD CLIP, so CC, pitch bend, pressure, sustain, and other performance automation are discoverable without diving through lane submenus.
- The button targets the selected Arrangement clip first; if no clip is selected, it uses the highlighted destination lane and opens the existing automation editor for that lane's clip context.
- Shared PTN behavior remains explicit: linked clips share automation until the user makes a VARIANT.
- Verified with SampleSquadAudioTest Release compile.
2026-07-12 - Arrangement Clip AUTO Evidence
- Added a small in-clip MIDI automation indicator on Arrangement clips that have effective AUTO LANES data.
- The marker shows AUTO for one automation row and A# when multiple automation rows are attached, with a compact stripe fallback for very small/overview clips.
- The count is populated from getMidiExpressionLaneSummariesForArrangementClip(), so it reflects effective clip automation rather than only the lane-level badge.
- Verification: SampleSquadAudioTest Release target compiled successfully. Running the executable did not exit before timeout, so compile is confirmed but self-test runtime completion is not claimed for this pass.
2026-07-12 - Clickable Arrangement Clip AUTO Badges
- Made the in-clip AUTO / A# automation evidence actionable in the Arrangement Canvas.
- Hovering a clip AUTO badge now shows a tooltip naming the clip/pattern and row count.
- Clicking the badge selects the clip, targets its lane, and opens the existing AUTO LANES editor through the same trusted path used by the lane AUTO badge.
- Added pointing-hand cursor feedback over clip AUTO badges so the new glyph reads as an interactive doorway, not a decorative label.
- Verification: SampleSquadAudioTest Release target compiled successfully.
2026-07-12 - Direct MIDI Live/Record Timing Regression
- Added a focused self-test for the direct hardware MIDI path: live monitoring can stay immediate while recorded note timing uses the measured arrival sample.
- Added SPACEAGE_AUDIO_SELF_TEST only to SampleSquadAudioTest, plus a test-only processor hook so production builds keep the direct MIDI handler private.
- Verified with a focused Release compile of SampleSquadAudioTest.
2026-07-12 - Direct MIDI Same-Block Drain Audit
- Audited the direct physical MIDI path beyond the live/record timing split: input FIFO timestamping, live lane routing, hardware live-thru, SoundFont prepared voice pools, expression-message application, and processBlock ordering.
- Added a second last-chance direct-input drain immediately before voice rendering. This catches direct MIDI messages that arrive while the sequencer/arranger is doing per-block bookkeeping, reducing the chance that a played note waits a full extra audio callback.
- Confirmed SoundFont live starts already use prepared TSF voice instances rather than cloning/loading large SF2 data on note-on. Prepared-pool misses remain diagnostic-only and are reported through MIDI Health.
- Updated the MIDI input readiness wording to describe the second drain and preserve the truth: audio buffer size, driver/interface latency, controller latency, duplicate routing, and hardware response still matter.
- Verification: SampleSquadAudioTest Release target compiled successfully. Running the self-test executable timed out before completion, so runtime self-test pass is not claimed for this pass.
2026-07-12 - Performance-Only Late MIDI Drain Correction
Double-check pass found that the second same-block direct MIDI drain must not consume clock, transport, SysEx, program/bank, RPN/NRPN, or setup messages after the sequencer timeline has already been processed for the block. The late drain now only removes front-of-queue live performance messages: notes, pitch bend, pressure, mod wheel, volume, pan, expression, and sustain. If a timeline/setup message is at the front of the direct-input FIFO, it remains queued for the normal full drain on the next block so ordering and sync semantics stay honest. Compile verification passed for SampleSquadAudioTest.
2026-07-12 - Second MIDI Lag Audit: Learned CCs
A second pass over the direct-input low-latency path found that notes, pitch bend, pressure, mod wheel, volume, pan, expression, and sustain were included in the last-chance live drain, but generic learned CCs were not. That meant MIDI-learn knobs and sliders could still wait one extra audio block even after note latency was improved.
Fixed by classifying generic controlChange as a live performance message in both the late direct-input drain and the live routing/recording branch. Bank Select, RPN/NRPN selectors, Data Entry, channel-mode messages, transport, clock, and SysEx remain outside that late live path because the MIDI classifier separates those setup/control messages before generic CC.
2026-07-12 - Third MIDI Lag Audit: Status Chatter Blockers
A third latency audit found one more hardware-world edge case: the late direct-MIDI drain was looking only at the front of the external input FIFO. If harmless status chatter such as MIDI Clock or Active Sense arrived immediately before a Note On, the note behind it could be held until the next block even though the note itself was live-performance data.
Fix: the late drain now treats MIDI Clock and Active Sense as drain-eligible status messages. They pass through only so they cannot block notes, learned CCs, pitch bend, aftertouch, sustain, mod wheel, volume, pan, or expression behind them. Transport, SysEx, Program Change, Bank Select, RPN/NRPN, and channel-mode/setup messages remain on the normal timeline path.
Verification: SampleSquadAudioTest rebuilt successfully after the change.
2026-07-12 16:57 direct MIDI input restoration: SpaceAge now opens visible physical MIDI inputs by default when no lane has narrowed input to a specific device. Lane-specific input-device filtering still applies when chosen, but the normal standalone controller path no longer depends on first selecting a device in a lane. This restores live note/chord-readout traffic at the front door instead of letting the input router sit empty.
2026-07-12 17:20 - Raw MIDI observation restored
- Moved live note-mask observation ahead of source-policy and lane/channel gates so the top chord readout can verify raw note-on/off traffic even when routing is misconfigured.
- Auto MIDI input source mode now suppresses host/plugin MIDI only after actual direct MIDI traffic is observed from a lane-selected direct device. An opened device alone is not enough to mute host MIDI.
- Added a low-frequency UI-triggered direct MIDI input refresh so late-appearing Windows MIDI devices are reopened without restarting SpaceAge.
2026-07-12 18:59 - Live MIDI lag reduction pass
- Auto MIDI input source arbitration now suppresses SpaceAge-opened direct physical MIDI when host/plugin MIDI has already been observed and no lane-specific direct input is selected. This avoids delayed duplicate live notes from the direct queue when the standalone host path is already handling the controller.
- Live monitoring for note starts, note releases, and live thru now uses immediate in-block scheduling while recording and automation still use the original timestamp/sample-position for accurate capture.
- If perceived lag remains after this pass, next checks are audio buffer/driver mode, direct queue age diagnostics, SoundFont/Quasar voice startup, and whether the controller is being routed through both Windows/JUCE Options and SpaceAge direct input.
2026-07-12 19:16 - MIDI two-controller Auto policy refinement
- Changed MIDI Auto source arbitration so host/direct duplicate suppression is per note event instead of global. Direct MIDI is no longer suppressed merely because any host MIDI has appeared, which should allow two simultaneous controllers to coexist.
- Added a short host-note timestamp window to suppress likely duplicate host/direct echoes of the same note/channel/kind within 25 ms when no direct lane device has been intentionally selected.
- Built test package: SPACEAGE_MIDI_TWO_CONTROLLERS_20260712-191625.zip.
2026-07-12 19:24 - MIDI multi-controller source routing fix
- Fixed a two-controller regression by making MIDI Auto source arbitration message-specific instead of stream-global. Host/direct duplicate suppression now compares recent host and direct note timestamps in both directions, rather than muting all host or all direct input after one source appears.
- Direct physical MIDI discovery now opens all visible input devices. Lane-specific input-device choices are still enforced later in the live-routing gate, but discovery no longer makes a second connected controller disappear because another lane named a controller.
- Built test package: SPACEAGE_MIDI_MULTI_CONTROLLER_FIX_20260712-192341.zip.
2026-07-12 - Arrangement MIDI Recording Timing Fix
- Fixed the recording-position path so Arrangement recording uses the block-start Arrangement timeline position, not only the pattern-local Step Bank position.
- Added regression coverage for direct MIDI live/record timing split, clip-local recording into an Arrangement clip that starts later in the song, and repeated/source-offset clips.
- Verified with full
SampleSquadAudioTest: all tests passed, including the new Arrangement clip-local and repeated/source-offset MIDI recording cases. - Remaining watch item: count-in activation from non-zero playhead starts should be kept under scrutiny when we expose more record-start modes. 2026-07-13 direct MIDI late-drain latency guard pass: verified that the late same-block direct-input drain now treats MIDI Clock and Active Sense as harmless eligible status messages, matching the existing code comment and preventing those messages from trapping live note/controller events behind them until the next audio block. The narrow Arrangement MIDI recording timing test still passes for a 64-step armed clip and a repeated/source-offset clip. No beta build was packaged.
2026-07-12 23:58:05 - AUTO source policy made multi-controller-safe
- Changed AUTO source policy so SpaceAge only suppresses host/plugin duplicates when an armed lane has a specific direct physical input device pinned and that selected direct path has produced the recent matching note.
- If no lane-specific input device is pinned, AUTO now accepts both host-stream and direct physical MIDI instead of silently dropping one path. This protects two-controller setups such as one DIN controller plus one USB controller.
- Added readiness warning text for the ambiguous case: host and direct input are both observed while no lane-specific input device is pinned. The fix favors audible input over silent suppression; users can still choose HOST ONLY, DIRECT ONLY, or pin a direct device to de-duplicate one doubled controller.
2026-07-13 00:08:45 - Direct physical MIDI received-time sign fix
- Fixed the direct MIDI router timing calculation so record sample position now uses receivedTime - blockStart for messages that arrive during the current audio callback. Before this pass, the expression was reversed and clamped to zero, which could flatten late-drained direct MIDI notes/controllers to the front of the block.
- Queue-age diagnostics still use blockStart - receivedTime, so the Health page can continue reporting real waiting time without corrupting musical placement.
- This specifically protects the last-chance direct-input drain before voice rendering: fresh DIN/USB physical input can be monitored immediately while recording keeps the best available in-block timing.
2026-07-13 00:17:36 - MIDI timing verified and diagnostic panels de-cramped
- Re-ran the focused MIDI record-timing self-test after the direct-input timing guard; long Arrangement clip and repeated source-offset cases both pass.
- Increased MIDI Input, MIDI Health, and MIDI Hardware diagnostic panel breathing room so customer-facing MIDI pages stop implying chaos through cramped/overlapping text.
- Backend note: direct physical input messages received during the current callback preserve their within-block elapsed time; older queued messages still land at sample 0 because that is the earliest safe point available in the block.
2026-07-13 00:29 - Arrangement processBlock recording regression
- Added focused regression coverage for recording MIDI through the real processBlock() path while the Arrangement playhead is already inside a long clip.
- Verified the previously scary failure mode: a note played at Arrangement step 48 inside a clip starting at step 16 now records at clip-local step 32.5, not at the first measure.
- Fast timing suite now covers three paths: long clip helper, repeated/source-offset helper, and live processBlock() playhead recording.
- Verification: SampleSquadAudioTest build passed; SPACEAGE_MIDI_RECORD_TIMING_ONLY=1 passed all three timing checks.
2026-07-13 00:38 - Selected direct input host-spill guard
- Hardened AUTO MIDI input policy for lanes with a selected physical input device.
- Once the selected direct input device is active, source-agnostic host/plugin musical messages are suppressed for that armed lane. This prevents a second controller, or the same controller routed through both direct input and host/plugin MIDI, from unexpectedly recording or triggering the selected lane.
- Added focused regression coverage: selected direct input records one intended note while a following host-stream note is suppressed. Verification reports hostSuppressed=2 for the host note-on/note-off pair.
- Verification: SampleSquadAudioTest build passed; SPACEAGE_MIDI_RECORD_TIMING_ONLY=1 passed all four focused MIDI checks.
2026-07-13 01:12 - Arrangement Record Button Plan + Focused MIDI Receipt
Completed this pass:
- Added
docs/Arrangement_Record_Button_Plan.mddescribing the Arrangement-page Record button workflow before implementation. - Clarified the AUTO MIDI source-policy text so the UI can explain why host musical input may be suppressed when a lane-selected direct device is active.
- Compiled
SampleSquadAudioTestsuccessfully. - Ran focused MIDI timing/source-policy regression suite successfully.
Focused test receipt:
- Long Arrangement clip recording: passed.
- Repeated/source-offset clip recording: passed.
- Real
processBlockArrangement playhead recording: passed. - Selected direct input suppresses host spill: passed.
Current MIDI priority remains: make Arrangement-first recording feel obvious and trustworthy, then keep closing real-hardware latency/source-routing gaps.
2026-07-13 01:02 - Arrangement Record Button Wiring
- Added an Arrangement-page REC transport button that uses the same lane-owned MIDI recording backend as Piano Roll recording.
- If no lane is explicitly armed, starting record now arms the selected Arrangement destination lane before resolving the record target.
- Verified focused MIDI timing/source policy regression: long clips, repeated clip source offsets, processBlock playhead recording, and direct-input host-spill suppression all passed.
- No packaged build produced in this pass per current workflow.
2026-07-13 01:05 - Arrangement REC Cleanup Verified
- Removed the accidental duplicate Arrangement REC live-state update from the Piano Roll refresh path.
- Recompiled SampleSquadAudioTest successfully after cleanup.
- Reran focused MIDI timing/source-policy regression successfully after cleanup.
2026-07-13 03:20 - Arrangement AUTO LANES Doorway Clarified
- Kept AUTO LANES on the Arrangement page but made its label and tooltip contextual: AUTO CLIP for a selected clip, AUTO LANE for a selected lane/group/new-lane source, and disabled/neutral for Section-marker-only selections.
- This is a customer-facing MIDI workflow improvement: automation is now more discoverable from Arrangement without requiring users to hunt through lane command panels or Piano Roll settings first.
- Recompiled SampleSquadAudioTest successfully and reran the focused MIDI timing/source-policy regression successfully.
2026-07-13 - Arrangement REC Target Truth
- Tightened the Arranger REC button so it reports the actual recording doorway: armed lane first, selected Arrangement lane second.
- REC now disables/fades only when there is no valid Arrangement lane target, and its tooltip names the target lane and explains that existing clip-under-playhead wins while empty lane space creates a lane-owned clip.
- Verification:
SampleSquadAudioTestcompiled, andSPACEAGE_MIDI_RECORD_TIMING_ONLY=1passed all four focused timing/source-policy checks.
2026-07-13 03:43 - Arrangement record-target badge clarity
- Arrangement lane badges now distinguish live monitoring from actual recording/count-in targets: LIVE IN, COUNT-IN TARGET, and REC TARGET are separate visible states.
- The same state is painted in both the scrolling lane label path and the pinned gutter path, so horizontal scrolling should not make the record target ambiguous.
- Verified Release compile and focused MIDI timing regression after the change.
2026-07-13 03:50 - AUTO LANES doorway visibility
- Arrangement lane AUTO badges are now wider and more legible: +AUTO means the lane has a real clip and can create/open AUTO LANES; AUTO/AUTO n means existing automation rows are present.
- The badge is less ghosted when no automation exists so users can discover the entry point before recording or drawing CC/bend/pressure data.
- The pinned lane badge record/count-in wording now matches the scrolling lane badge, so horizontal scrolling should not hide REC TARGET or COUNT-IN TARGET truth.
- Verified Release compile and focused MIDI timing regression after the UI change.
2026-07-13 - AUTO LANES Shared-PTN Clarity Pass
- Made the AUTO LANES ownership strip visibly change state when the selected PTN is shared by multiple Arrangement clips.
- Locked shared patterns now show SHARED EDIT LOCKED with warm warning styling before any destructive PTN-owned automation edit can happen.
- Acknowledged shared edits now show SHARED EDIT ACKNOWLEDGED, making it clear that edits affect every linked clip using the same PTN.
- No MIDI send, routing, export, storage, or playback semantics changed in this pass.
2026-07-13 - AUTO LANES Keyboard Delete Safety
- Changed AUTO LANES keyboard Delete/Backspace so it deletes selected points or switch edges only.
- Whole-row deletion remains available through the explicit DELETE ROW button, preserving a deliberate path for destructive row removal.
- If no point/edge is selected, Delete now reports what the user needs to select instead of silently deleting the selected row.
2026-07-13 - AUTO LANES Copy/Paste Scope Wording
- Copy status now says pasted points return to a PTN-owned AUTO LANES row.
- Paste shared-pattern guard copy now names AUTO LANES points/switch edges instead of generic expression points.
- Successful paste now repeats the MIDI AUTO boundary: PTN data only, undo available, no MIDI sent, no routing changed, no external hardware changed.
2026-07-13 - AUTO LANES Shared-PTN Wording Consistency
- Tightened MIDI report and workflow wording so model-owned summaries now consistently say shared PTN instead of mixing in older pattern-owned language.
- Updated the automation visibility summary, ownership boundary summary, preflight report scope, workflow steps, and shared-edit caution copy to keep AUTO LANES framed as shared PTN data until clip-local or lane-local automation is deliberately promoted.
- Updated self-test expectations to assert the new shared-PTN wording in the structured MIDI protocol coverage report.
- Verified with Release compile and the focused MIDI record timing self-test.
2026-07-13 - AUTO LANES Shared-PTN Runtime Copy Pass
- Finished the focused source/test wording cleanup so runtime AUTO LANES status text, tooltips, copy/paste receipts, preflight reports, and protocol tests use shared PTN / shared-PTN language instead of older PTN-owned, pattern-owned, or shared-pattern phrasing.
- Updated the final-editor QA checklist, protocol report expectations, and shared-edit acknowledgement copy so destructive shared edits now describe the same ownership model everywhere: linked clips share the PTN until the user chooses VARIANT or explicitly acknowledges shared editing.
- Verified the focused source/test search no longer finds stale ownership terms in PluginEditor.cpp, SpaceAgeMidi.cpp, or AudioSelfTest.cpp.
- Verified with Release compile and the focused MIDI record timing self-test.
2026-07-13 - Armed Arrangement Lane Recording Target Clarity
- Tightened the compact MIDI recording target summary so record tooltips/status now say ARMED ARRANGER LANE, the lane name, instrument/drum routing, input channel filter, output MIDI channel, edit focus, and the reminder that selected clips do not steal live input.
- This is a UI clarity pass only: no routing, timing, storage, or playback behavior changed.
- Verified with Release compile and the focused MIDI record timing self-test.
2026-07-13 - MIDI Input Live Owner Visibility
- Added a
Live input ownerline to the plain MIDI Input readiness report so the first diagnostic answer is who currently owns incoming MIDI. - Added
liveInputOwnerSummaryto the structured MIDI readiness payload for future UI/report reuse. - Added a visible MIDI Input panel row explaining that the armed Arrangement lane owns incoming MIDI, while selected clips and visible editors are edit focus only.
- This keeps the Arrangement recording model explicit: arm the lane that should hear/record MIDI; selection does not secretly steal live input.
- Verification: Release compile passed, and focused MIDI timing tests passed.
2026-07-13 - Multi-Controller MIDI Input Diagnostics
- Added explicit multi-controller diagnostics to the MIDI Input readiness report.
- SpaceAge now distinguishes between these cases:
- multiple physical inputs are open and the armed lane is pinned to one device, so other direct device IDs are ignored before channel filtering;
- multiple physical inputs are open and the armed lane accepts any input device, which is valid for layered controllers but should be treated as a caution for deterministic recording.
- Added
multipleDirectInputsOpenandmultipleDirectInputNoteto the structured readiness payload. - Added a
MULTI-CTRLrow to the MIDI Input panel and included it in the top-level MIDI detail count. - Updated the MIDI Input trust gate next-action guidance to recommend pinning the intended controller, separating controllers by MIDI channel, or leaving the route open only when layered controllers are deliberate.
- Verification: Release compile passed, and focused MIDI timing tests passed.
2026-07-13 - Arrangement Recording Capture Receipts
- Moved MIDI recording-change consumption out of the Piano-Roll-only refresh branch so Arrangement recording can repaint and report captured takes.
- Added a record-pattern getter and capture summary that reports lane, pattern, note name, start step, length, velocity, and MIDI channel for melodic takes.
- Recording start now clears the previous last-recorded note pointer for both immediate record and count-in record paths.
- Verified with Release compile plus focused MIDI timing tests for long clips, source-offset clips, processBlock playhead recording, and selected direct-input host-spill suppression.
2026-07-13 - Arrangement REC Button Truth Labels
- Widened the Arrangement REC transport button so it can communicate real state instead of forcing cryptic labels.
- REC now reports
ARM LANE,REC,COUNT, orREC INfrom the same lane-target logic used by the recording backend. - Removed the older timer refresh overwrite that could briefly reduce the Arrangement record state back to generic
REC/STOP REClanguage. - Verification: Release compile passed, and
SPACEAGE_MIDI_RECORD_TIMING_ONLY=1passed the focused MIDI recording checks including long clips, source-offset clips, processBlock playhead recording, direct-input host-spill suppression, drum receipts, and expression receipts.
2026-07-13 - MIDI Expression Recording Receipts
- Added processor-side receipt state for the last recorded editable MIDI expression event: kind, MIDI channel, controller number, tick, and editor value.
- Updated the recording status summary so CC/bend/pressure capture reports as
AUTO LANESwith the specific event instead of a generic automation message. - Extended the focused MIDI timing regression to prove expression recording clears stale note/drum receipts while retaining the captured CC number/value/tick.
- Verification:
SPACEAGE_MIDI_RECORD_TIMING_ONLY=1 SampleSquadAudioTest.exepassed.
2026-07-13 - MIDI Recording Length And Queue Shutdown Hardening
- Made MIDI recording pattern-length calculation inspect the current Arrangement clips before falling back to the playback snapshot. This prevents immediate record-after-edit workflows from using a stale shorter clip length.
- Added explicit wakeups before stopping MIDI/SysEx worker queues so focused test runs and app shutdown do not leave background MIDI queue threads lingering.
- Verification: focused MIDI timing suite passed twice serially after the fix.
2026-07-13 08:53 - QA Evidence Prompt Tightening
- Added category-specific QA evidence-note prompts to the MIDI closeout model, including AUTO LANES doorway/target/PTN proof, bend-range hardware proof, SysEx capture/restore proof, import preservation proof, and export handoff proof.
- The AUTO LANES QA template now asks the tester to record which doorway opened the editor, which clip/PTN was reported, which row type was tested, and whether the edit/playback/export landed on that exact shared PTN without stale selection or unintended linked-clip mutation.
- Exposed the evidence prompt through the structured MIDI report JSON so future UI receipt panels can show the same prompt without duplicating wording.
2026-07-13 09:00 - AUTO LANES Launch Proof Summary
- Added a model-owned AUTO LANES launch proof requirement summary. It now states exactly what must be proven before public MIDI automation claims: doorway targeting, shared-PTN edit/undo/playback/export/import proof, VARIANT/shared ownership warnings, pitch-bend destination/range trust where applicable, pressure/timbre destination response, setup-row review-only boundaries, and MPE-like preservation boundaries.
- The summary is included in AUTO LANES plain-text reports, structured report JSON, MIDI Health/Protocol report paths, and the broader MIDI closeout reports so support/QA do not have to infer evidence requirements from raw row counts.
2026-07-13 09:07 - COPY QA surface
- Added a dedicated COPY QA button to the MIDI Health panel so the MIDI 1.0 closeout QA session template and receipt scaffolding are one click away instead of buried inside COPY REPORT.
- The action is cold/text-only: it sends no MIDI, changes no routing, changes no project data, and changes no external hardware.
- This complements the existing project-persisted midiQaReceipts store and the append-only receipt self-tests; it does not pretend that copied templates are saved PASS/FAIL/BLOCKED proof.
2026-07-13 09:10 - COPY QA includes saved receipt ledger
- COPY QA now copies both the MIDI 1.0 closeout QA packet and the current saved project MIDI QA receipt ledger.
- This makes the button useful for real proof review: testers can see the required QA template plus append-only saved receipts in one cold clipboard action.
- Safety remains unchanged: COPY QA is text-only and sends no MIDI, changes no routing, changes no project data, and changes no external hardware.
2026-07-13 09:15 - MIDI Health COPY LEDGER review action
- Added a dedicated COPY LEDGER button to MIDI Health so saved MIDI QA receipts can be reviewed independently from the full COPY QA packet.
- COPY QA remains the full test packet plus ledger; COPY LEDGER is the saved evidence trail only.
- Both actions remain cold/text-only: no MIDI is sent, no routing changes, no project data changes, and no external hardware changes.
2026-07-13 09:24 - MIDI QA persistence wording alignment
- Corrected a stale MIDI Protocol Coverage sentence that still described QA receipt persistence as future wiring even though
project.midi.qaReceipts, append-only saved receipts, processor state persistence, COPY QA, and COPY LEDGER are already wired. - Added self-test guards that require the current contract wording (
SAVE QA RECEIPT appends cold project evidence) and reject the obsoleteNext product step: wirephrase. This keeps the MIDI closeout scorecard from contradicting its own implementation. - No live MIDI, routing, playback, hardware, or project-data behavior changed in this pass; it is a report/proof integrity correction.
2026-07-13 09:42 - MIDI Health QA receipt workflow rows
- Split the MIDI Health cockpit QA receipt display into QA RECEIPT and QA NEXT rows so the visible UI distinguishes saved-state workflow from next-user-action guidance.
- Added self-test coverage for nextCloseoutQaReceiptWorkflowSummary in direct protocol coverage, health summary export, and protocolCoverage var export.
- No beta build requested; verification stayed on build/self-test and MIDI timing regression.
2026-07-13 10:15 - AUTO LANES visible-entry labels
- Arrangement AUTO buttons now report existing automation row counts directly in the button label, e.g.
AUTO CLIP +2, so the user can see when a clip/lane already contains shared PTN automation. - The AUTO tooltip now distinguishes between opening existing rows and creating the first row, while preserving the current target order: selected clip, playhead clip, first real clip in lane.
- The Piano Roll AUTO strip copy now names the visible entry points: click the strip or use AUTO CLIP / AUTO LANE.
- No ownership model changed: AUTO LANES remain shared PTN MIDI performance automation until a future confirmed clip-local or lane-local automation layer exists.
Verification: build/self-test passed, and the MIDI timing-only regression passed all six checks after the AUTO LANES visibility-label update.
2026-07-13 10:45 - AUTO LANES hands-on QA script
- Added
MidiExpressionProjectSummary::handsOnQaScriptSummary()so MIDI Health can produce a compact human test script for AUTO LANES instead of only reporting counters and readiness percentages. - The script adapts to project contents: no rows prompts creating one first; shared/cross-lane PTNs prompt VARIANT proof; switch rows prompt trim/playback/export proof; pitch-bend rows prompt raw 14-bit plus Hardware Passport / TEST BEND proof; pressure/timbre rows prompt destination-response auditioning; review-only setup rows prompt MIDI PATCH / Hardware Passport boundary checks.
- Surfaced the script in AUTO LANES plain-text reports and structured
toVar()output. - Added regression coverage so the script, PASS/FAIL/BLOCKED language, and structured property remain present.
2026-07-13 11:20 - MIDI Health hardware-verification gap summary
- Added
MidiProjectHealthSummary::hardwareVerificationGapSummary()so MIDI Health can plainly report which items still require real controller/external-synth proof instead of scattering that truth across protocol coverage, Hardware Passport warnings, pitch-bend rows, timing calibration, and SysEx restore receipts. - Surfaced the summary in MIDI Next Steps, the full MIDI Health report, and the structured health payload as
hardwareVerificationGapSummary. - Added regression coverage that requires the report and payload to include the hardware-verification wording.
2026-07-13 11:45 - MIDI Health hardware proof action checklist
- Added
MidiProjectHealthSummary::hardwareVerificationActionLines()so the MIDI Health surface can render the next real-world hardware proof actions directly, instead of forcing the user to infer them from several separate warnings. - The checklist covers missing Hardware Passports, passport warnings, hardware-lane loopback timing, bend-range proof, SysEx restore verification, unsafe restore response behavior, and the current closeout evidence cue.
- Surfaced the checklist in MIDI Next Steps and the structured health payload as
hardwareVerificationActionLines. - Added regression coverage so the MIDI Health report, Next Steps text, and structured payload stay aligned.
2026-07-13 12:20 - MIDI Health cockpit status fields
- Added compact MIDI Health cockpit fields:
cockpitSeverityLabel,cockpitNextActionLabel, andcockpitStatusSummary. - These fields let the Settings/MIDI UI render a short, trustworthy status card without parsing long diagnostic reports. The status chooses among blocked release gates, live-feel latency, hardware-proof gaps, warnings, and ready state.
- Surfaced the cockpit fields in the structured health payload and added regression coverage for the methods and exported
toVar()properties. - Verification: build/self-test passed, and the MIDI timing-only regression passed all six checks.
2026-07-13 12:35 - MIDI Health cockpit rows surfaced in Settings
- The Settings MIDI Health panel now renders backend-owned
COCKPITandDO NEXTrows at the top of the visible diagnostic list. - These rows use
MidiProjectHealthSummary::cockpitStatusSummary()andcockpitNextActionLabel()directly, so the user-facing cockpit does not maintain a second, divergent interpretation of MIDI status. - Updated the panel layout row budget so repair buttons remain placed after the full visible row stack.
- Verification: build/self-test passed, and the MIDI timing-only regression passed all six checks after the UI change.
2026-07-13 12:55 - AUTO LANES visibility rows in MIDI Health
- The Settings MIDI Health panel now surfaces
AUTO VISIBLEandAUTO DOORrows immediately beside the Expression summary. - These rows render
MidiExpressionProjectSummary::automationVisibilitySummary()andautomationDoorwayRunStepSummary()directly, so the visible panel tells the user where AUTO LANES can be opened and what to do first without requiring a copied full report. - The current ownership model is unchanged: AUTO LANES remain shared PTN MIDI performance automation; clip-local and lane-local automation remain future architecture.
- Verification: build/self-test passed, and the MIDI timing-only regression passed all six checks.
2026-07-13 13:20 - AUTO LANES visibility regression lock
- Added regression assertions around
MidiExpressionProjectSummary::automationVisibilitySummary()andautomationDoorwayRunStepSummary()so MIDI Health cannot silently lose the visible AUTO LANES doorway language. - Protected the direct expression report, the full MIDI Health report, the MIDI Next Steps report, and the structured health payload.
- Build/self-test passed, and the focused MIDI record-timing regression passed 6/6 after the assertions were added.
2026-07-13 13:55 - QA receipt cockpit row
- Added MidiProjectHealthSummary::qaReceiptCockpitSummary() so the active MIDI 1.0 QA receipt state has one stable, structured summary point.
- Surfaced the summary as a QA COCKPIT row in MIDI Health, next to QA RECEIPT / QA NEXT / QA ACTIONS / QA STORE.
- Added regression assertions for the direct helper and exported qaReceiptCockpitSummary property.
- Verification: tools\codex-build-selftest.ps1 passed; SPACEAGE_MIDI_RECORD_TIMING_ONLY=1 focused regression passed 6/6.
- No beta build produced in this pass.
2026-07-13 14:25 - AUTO LANES doorway cockpit row
- Added
MidiExpressionProjectSummary::automationDoorwaySummary()as a stable one-sentence-plus-context explanation of where AUTO LANES are opened: Piano Roll AUTO strip/button, MIDI TASKS, Arrangement AUTO badges, Settings, and MIDI Health safe doors. - Surfaced the summary as an
AUTO PATHrow in the Settings MIDI Health panel, adjacent toAUTO VISIBLE,AUTO DOOR, andAUTO OPS. - Exported the summary through
MidiExpressionProjectSummary::toVar()and added regression assertions for the direct helper and structured payload. - Verification:
tools\codex-build-selftest.ps1passed;SPACEAGE_MIDI_RECORD_TIMING_ONLY=1focused regression passed 6/6. - No beta build produced in this pass.
2026-07-13 14:45 - AUTO LANES QA row surfaced
- Added an
AUTO QArow to the Settings MIDI Health cockpit, renderingMidiExpressionProjectSummary::handsOnQaScriptSummary()directly beside the other AUTO LANES rows. - This makes the manual validation recipe visible in the app: open each doorway, edit/undo/redo, play back, export/re-import, verify VARIANT ownership, and save PASS/FAIL/BLOCKED evidence.
- No automation ownership model changed. AUTO LANES remain shared PTN MIDI performance automation; clip-local and lane-local automation remain future architecture.
- Verification:
tools\codex-build-selftest.ps1passed;SPACEAGE_MIDI_RECORD_TIMING_ONLY=1focused regression passed 6/6. - No beta build produced in this pass.
2026-07-13 15:05 - MIDI Next Steps includes AUTO LANES QA ritual
- Updated
MidiProjectHealthSummary::toPlainTextNextSteps()so the musician-facing copy report includesautomationDoorwaySummary()andhandsOnQaScriptSummary()beside the existing visibility and doorway run-step text. - Added regression assertions so copied MIDI Next Steps cannot lose the AUTO LANES doorway or hands-on QA wording.
- No automation ownership model changed. This is a copy/report parity pass: the visible
AUTO QArow and copied Next Steps now say the same thing. - Verification:
tools\codex-build-selftest.ps1passed;SPACEAGE_MIDI_RECORD_TIMING_ONLY=1focused regression passed 6/6. - No beta build produced in this pass.
2026-07-13 15:30 - Live MIDI lag-source classifier surfaced
- MIDI Health now has a model-owned LAG SOURCE row via MidiProjectHealthSummary::liveLagSourceSummary(). It classifies the visible evidence as audio-buffer first, direct-input queue suspicious, hardware-output queue suspicious, SoundFont prepared-pool issue, or no internal queue red flag yet.
- Copied MIDI Health and MIDI Next Steps reports now include the same lag-source line, so support/debugging text matches the cockpit instead of forcing the user to infer where latency may be coming from.
- Regression coverage now protects the structured liveLagSourceSummary payload, copied reports, and high-buffer audio path wording. Build/self-test passed; focused MIDI record timing regression passed 6/6.
2026-07-13 - Active Direct Input Diagnostics
- Added router-side tracking for direct physical MIDI inputs that actually send musical channel data, separate from the list of open MIDI ports.
- MIDI Input Readiness now reports direct active musical input count/device IDs, so a USB controller plus DIN controller can be diagnosed as intentional layering or accidental double-feed.
- MIDI Input Trust Gate now gives stronger guidance when more than one physical controller has actively sent notes/controllers into an unpinned lane.
2026-07-13 14:39 - Fast MIDI Readiness Regression
- Added SPACEAGE_MIDI_READINESS_ONLY to AudioSelfTest so controller-readiness and trust-gate diagnostics can be verified without waiting for the full suite.
- Verified active-direct-input caution: two controllers that have actually sent musical MIDI now produce the stronger guidance, while open-only multi-input setups remain a weaker caution.
- Re-ran SPACEAGE_MIDI_RECORD_TIMING_ONLY and all six focused timing/receipt checks passed.
2026-07-13 14:45 - Fast MIDI Health And Live-Lag Regression
- Added SPACEAGE_MIDI_HEALTH_ONLY to AudioSelfTest so latency-health, timing-calibration summary, loopback-measurement math, and timing preflight report wording can be checked without running the full suite.
- Verified three focused MIDI gates after compile: readiness-only passed, health-only passed, record-timing-only passed 6/6.
- This closes another internal blind spot around user-facing MIDI lag diagnostics, while real controller feel still requires hardware testing on the target rig.
2026-07-13 - AUTO LANES Discoverability Pass
- Renamed the Arrangement automation action labels to CLIP AUTO / LANE AUTO so the scope is clearer before opening the editor.
- Updated the Piano Roll AUTO strip empty-state copy to point users toward the same CLIP AUTO / LANE AUTO workflow.
- Changed empty lane automation badges from +AUTO to AUTO+ so the badge reads as an automation affordance rather than a generic add button.
- No backend semantics changed in this pass; this is a customer-facing discoverability refinement on top of the existing MIDI expression lane backend.
2026-07-13 - Direct MIDI Late-Drain Lag Edge Case
- Adjusted the second direct-input drain inside processBlock so late-arriving physical MIDI input drains a bounded batch instead of only the first queued message.
- Reason: if controller/status/setup chatter reached the queue just before a note, the prior one-message late drain could leave the note waiting until the next audio block, which feels like live MIDI lag even when recorded timing math is correct.
- The change preserves the existing routing and recording math. Non-performance messages are still forwarded to the normal handler; the intent is to prevent harmless chatter from blocking same-block musical note/expression delivery.
2026-07-13 - MIDI Settings Headroom And Focused Gate Recheck
- Increased the Settings MIDI Health panel size and tightened its diagnostic row typography so the bottom of the health checklist has breathing room instead of clipping.
- Increased the Settings MIDI Hardware panel height so hardware/passport guidance has more vertical space before it reaches the lower edge of the dialog.
- Rebuilt successfully with
tools\codex-build-selftest.ps1. - Focused MIDI gates passed after the UI change:
SPACEAGE_MIDI_READINESS_ONLY,SPACEAGE_MIDI_HEALTH_ONLY, andSPACEAGE_MIDI_RECORD_TIMING_ONLY. - Readiness still needs human hardware proof on the actual rig, especially DIN-through-mioXL latency versus direct USB controller feel.
2026-07-13 - Direct MIDI Queue Chatter Regression
- Added a self-test-only physical-input queue injection hook so tests can exercise the actual external MIDI queue/drain path instead of bypassing it.
- Added a focused regression where CC, pitch bend, active sensing, note-on, and note-off are queued before processBlock(). The note now proves same-block capture instead of slipping a block late behind setup/chatter messages.
- Verified focused gates: build/self-test script, SPACEAGE_MIDI_RECORD_TIMING_ONLY, SPACEAGE_MIDI_READINESS_ONLY, and SPACEAGE_MIDI_HEALTH_ONLY all pass.
2026-07-13 - Direct Multi-Controller Regression
- Added a focused MIDI timing regression for two simultaneous direct physical controllers feeding SpaceAge in the same audio block.
- The armed lane is pinned to one controller/device ID. The wrong controller sends on the same MIDI channel first, but the recorded pattern keeps only the pinned controller's note.
- This covers the real-rig failure mode where USB and DIN-through-interface controllers are connected at the same time and the musician expects deterministic lane ownership.
2026-07-13 - Direct Multi-Controller Expression Guard
- Extended the focused MIDI record timing regression so a lane pinned to one physical controller rejects expression data from another controller on the same MIDI channel.
- The test now queues CC11 and pitch bend from the wrong controller, then CC11 and pitch bend from the armed controller, and verifies only the armed controller's two expression events are recorded.
- Rebuilt and passed the focused timing, readiness, and health self-tests. This closes another likely source of "two controllers are plugged in and SpaceAge recorded the wrong thing" confusion.
2026-07-13 - Direct Recording Preserves Setup Payloads
- Expanded the direct physical MIDI timing regression so a same-block input batch includes Bank Select MSB/LSB, Program Change, CC expression, Pitch Bend, Active Sense, Note On, and Note Off.
- Fixed MIDI expression recording so timeline MIDI payloads are preserved, not only editable performance automation. Bank/program/RPN/NRPN-style setup now survives a take as review-only MIDI data while notes still record with immediate direct-input feel.
- Verified focused timing, readiness, and health self-test slices after the change.
2026-07-13 - AUTO LANES Doorway Consequence Copy
- Tightened Piano Roll preview copy so AUTO LANES are described as shared PTN performance data, not clip-local automation.
- Standardized Arrangement doorway wording from AUTO CLIP / AUTO LANE to CLIP AUTO / LANE AUTO.
- Added consequence-first Arrangement AUTO LANES tooltips/status copy: edits affect every linked clip using that PTN until the user makes a VARIANT.
- No MIDI behavior change in this pass; this is a user-facing clarity pass for the automation doorway.
2026-07-13 - Automation Ownership Doc Correction
- Corrected the Piano Roll AUTO LANES spec so it no longer claims lane-local or clip-local automation is currently shown.
- Current behavior remains shared PTN automation only; clip-local/lane-local automation remains future architecture.
2026-07-13 - Shared PTN Wording Pass
- Tightened live AUTO LANES UI strings so current user-facing copy says shared PTN rather than this pattern, selected-pattern, pattern-owned, or generic PTN-owned where the linked-clip consequence matters.
- Updated current MIDI workflow spec language to keep shared PTN as the musician-facing ownership phrase.
- No MIDI storage/playback behavior changed in this pass.
2026-07-13 - Focused MIDI Gate Recheck After Shared-PTN Copy Pass
- Rebuilt the focused MIDI self-test executable successfully after the shared-PTN wording work.
SPACEAGE_MIDI_RECORD_TIMING_ONLY=1passed, including the four-measure Arrangement capture regression: recorded starts were0.25,16.25,32.25, and48.25inside a 64-step clip.SPACEAGE_MIDI_READINESS_ONLY=1passed: active direct inputs and open-only caution behavior remain covered.SPACEAGE_MIDI_HEALTH_ONLY=1passed: high-buffer latency warning, timing summary, timing measurement, and timing preflight report all returned green.- No beta build was produced in this pass.
2026-07-13 - AUTO LANES Ownership Wording Sweep
- Cleaned remaining current-facing AUTO LANES wording in source strings, Answers for Shane, glossary, and project gotchas so the active ownership phrase is shared PTN data.
- Left selected-pattern import wording alone where it describes the actual MIDI import mode rather than AUTO LANES ownership.
- Verified with grep that the remaining pattern-owned/PTN-owned hits in current workflow docs are only instructions to avoid older wording.
- No MIDI behavior changed and no beta build was produced in this pass.
2026-07-13 - Count-In Boundary Recording Regression
- Added a focused regression for a count-in boundary edge: a note-on that arrives before recording opens, with its note-off after recording opens, must not create a phantom recorded note.
- Verified the live note state is released cleanly after that note-off instead of hanging behind the count-in gate.
- Release self-test target rebuilt;
SPACEAGE_MIDI_RECORD_TIMING_ONLY=1,SPACEAGE_MIDI_READINESS_ONLY=1, andSPACEAGE_MIDI_HEALTH_ONLY=1all passed.
2026-07-14 00:59 - Long Drum Arrangement Recording Boundary
- Fixed long Arrangement drum recordings so clips longer than the 64-step Drum Composer grid no longer fold recorded hits into the first 64 steps.
- Short drum recordings still write classic Drum Composer steps; long drum recordings now write note-backed drum events with pad identity preserved, matching the existing long-clip playback path.
- Verified with MIDI record timing, readiness, and health self-test gates.
2026-07-14 - Arranger AUTO LANES Doorway Visibility
- Kept the Arranger AUTO LANES button visible in the lower clip/lane action row instead of letting the final layout pass clear its bounds.
- Rationale: automation belongs near clip and lane decisions. A selected clip or highlighted lane should have an obvious doorway into CC, pitch bend, pressure, sustain, and related MIDI expression rows without hunting through Settings or MIDI Tasks.
- Status: UI visibility fix made; no user test build requested in this pass.
2026-07-14 - MIDI Health cockpit layout pass
- Tightened MIDI Health row rendering so dense cockpit rows reserve and consume matching vertical space.
- Reduced diagnostic label/value font pressure to avoid text-on-text in the MIDI Health view while keeping all closeout rows visible.
- Re-verified focused MIDI readiness, health, and record-timing self-tests after the UI patch.
2026-07-14 04:23:29 - Lane Command MIDI Panel Breathing Room
- Widened and loosened the Arrangement Lane command popup so L/S/V signal actions like AUTO LANES, MIDI Routing, Arm/Disarm MIDI Input, Choose Lane Instrument, and Lane Routing / Passport have more vertical and horizontal room.
- Build passed via tools/codex-build-selftest.ps1.
- Focused MIDI tests passed: readiness, health, and record timing.
- MIDI backend status remains high-90s for MIDI 1.0: remaining work is mostly customer-facing polish, hardware validation in real setups, and automation-lane visibility/ergonomics rather than core event capture.
2026-07-14 04:35 - Lane MIDI routing readability pass
- Enlarged the Arrangement lane MIDI routing callout from 560x404 to 660x462 so hardware input/output/profile labels have more room.
- Added wider gutters and taller rows between paired routing controls to reduce text crowding in the customer-facing lane MIDI setup path.
- Verified build plus focused MIDI readiness, MIDI Health, and MIDI record-timing self-tests.
- Current MIDI 1.0 backend remains in closeout territory; remaining work is mostly user-facing MIDI polish, real hardware validation, and final automation-lane discoverability checks.
2026-07-14 04:48 - MIDI Hardware panel readability + focused regression pass
- Widened/tallened the MIDI Hardware Passport panel so long hardware-action buttons and passport rows have more breathing room.
- Moved the Sync Role help copy below the visible controls to prevent text-on-control overlap in the hardware setup surface.
- Verified build plus MIDI readiness, MIDI health, and MIDI record timing focused self-tests all pass.
- Current MIDI closeout focus remains user-facing visibility: automation-lane doorway, hardware passport clarity, and live-recording confidence.
2026-07-14 04:54 - AUTO LANES doorway wording + regression pass
- Inspected the Arrangement AUTO LANES launch path: selected clip, clip under playhead, then first real clip in lane.
- Confirmed AUTO LANES preserves shared-PTN safety language: VARIANT for independent edits, ACK SHARED for linked-clip edits, no MIDI autosend.
- Tightened the Arrangement AUTO LANES tooltip so it reads as MIDI performance automation: CC, pitch bend, pressure, sustain, and expressive motion.
- Verified build plus MIDI readiness, MIDI health, and MIDI record timing focused self-tests all pass.
2026-07-14 05:09:57 - Direct MIDI live-input latency pass
- Removed one audio-thread device lookup from the physical MIDI input drain path by storing the input device ID directly in queued direct-input messages.
- Added a second direct-input drain immediately before the main audio sample render loop so physical MIDI arriving during effect/routing setup can still land in the current processBlock.
- Verified focused tests: MIDI readiness, MIDI health/latency, MIDI record timing, four-measure Arrangement capture, long drum Arrangement capture, direct queue same-block drain, and pinned two-controller direct-input behavior.
- Status: SpaceAge-side direct MIDI queue latency is improved. Remaining perceived lag can still come from hardware/interface path, Windows driver buffering, audio device buffer size, or external DIN-to-USB routing.
2026-07-14 05:23:18 - MIDI recording worker-queue backend cleanup
- Started the MIDI runtime worker queues from the processor constructor: control mapping, SysEx capture, SysEx restore response, MIDI expression recording, and MIDI note recording.
- Converted MIDI note recording from immediate pattern/vector mutation into a real FIFO worker queue. Live monitoring/release remains immediate, while note and drum-step commits happen off the audio callback.
- Long drum Arrangement recordings no longer enqueue clamped Drum Composer step writes beyond the 64-step grid; the note-backed long-clip capture remains the source of truth for those takes.
- Verified build plus focused MIDI readiness, MIDI health, and MIDI record-timing self-tests. The timing suite still passes four-measure capture, long drum capture, selected direct-input suppression, expression receipts, same-block direct queue drain, and pinned two-controller behavior.
2026-07-14 05:34:23 - MIDI recording queue health warnings
- MIDI Health now treats dropped note/drum recording events and dropped expression-recording events as active warnings instead of quiet counters.
- MIDI Next Steps now adds a Recording queue checks section when these drops occur, telling the user to treat the take as untrusted and review AUTO LANES when expression data drops.
- Focused MIDI tests passed: readiness, health, and record timing, including long Arrangement capture, long drum capture, same-block direct queue drain, and pinned two-controller behavior.
2026-07-14 05:39:00 - MIDI recording queue Health wiring
- Wired the processor's live MIDI note/drum and expression recording queue drop counters into MidiProjectHealthSummary so Health reflects runtime reality, not just synthetic report fields.
- Added a visible MIDI Health cockpit REC QUEUE row when note/drum or expression recording drops occur, with a plain-language retake/review warning.
- Focused MIDI readiness, health, and record-timing self-tests passed after the wiring and UI row.
2026-07-14 05:45 - Armed-lane MIDI recording target classification
- Fixed Arrangement MIDI recording prep so the armed Arrangement lane is authoritative when deciding whether the target is a Drum Composer lane or melodic Piano Roll lane.
- This closes a playhead-target edge case where recording into a drum lane could be prepared with melodic assumptions when the playhead was explicitly placed.
- Focused MIDI record timing self-test passed after the change, including long drum Arrangement capture and pinned two-controller behavior.
2026-07-14 05:48 - Armed-lane recording verification
- Internal compile gate passed after the editor-side Arrangement REC fix.
- Focused MIDI gates passed after compile: record timing, readiness, and health.
- This keeps the Arrangement REC rule explicit: armed lane owns live input and recording target; selected clips remain editing context unless the resolver chooses the clip under the playhead inside that armed lane.
2026-07-14 10:15:06 -05:00 - MIDI Focused Gates
- Fixed MIDI Project Health timing diagnostics so high audio-buffer latency is reflected in the timing-calibration subreport and top-level warning list.
- Focused self-tests passing: MIDI record timing, MIDI readiness, MIDI health.
- Standard self-test wrapper was attempted after the fix but exceeded the 180 second command timeout before returning; do not count that as a full-suite pass yet.
- LOC snapshot: 102,986 counted lines across Source, Tests, Tools, Docs, and small project assets; Source alone counted at 88,542 lines.
- Current MIDI 1.0 backend confidence: high for recording timing/readiness/health gates; remaining closeout is broad full-suite pass, real-device lag validation, customer-facing automation lane visibility, and hardware workflow QA receipts.
2026-07-14 - Clip-local AUTO LANES clipboard ownership closure
- Fixed Arranger Copy/Paste so clip-local automation is captured as clipboard-owned musical data rather than looked up later through the source clip ID.
- Editing or deleting the source clip after Copy no longer changes or destroys the automation pasted into a new clip.
- Added focused coverage through the real Arranger keyboard path: select, Copy, mutate source automation, delete source, Paste, and verify the original CC snapshot.
- Focused gates passing: automation ownership, MIDI readiness, MIDI health, and MIDI record timing.
- A controlled broad self-test completed in about 138 seconds. The suite is slow because its monolithic main retains many processor fixtures, prepared delay banks, and MIDI polling threads; this is test-harness memory pressure, not a detected production deadlock.
- Remaining ownership closeout: partition clip-local automation correctly when clips are split; define stable lane-local identity before lane delete/reorder is enabled; prune orphaned automation owners after project restore.
2026-07-14 - Clip-local AUTO LANES split ownership closure
- Added one processor-level source-range extractor for clip-local MIDI expression data.
- Timeline insertion splits and Arranger Ctrl+U cuts now snapshot the original payload, retain only each child's source range, and avoid later children losing data after the left child is updated.
- Boundary policy is half-open: left owns events before the cut; right owns events exactly at and after the cut. No synthetic CC/RPN/NRPN state is invented at the boundary.
- Focused ownership, readiness, health, and four-measure recording-timing gates pass in Release.
2026-07-14 - Stable lane-local AUTO LANES ownership closure
- Added permanent lane IDs so lane-local MIDI automation follows the musical lane rather than its mutable UI row.
- Save state now records lane IDs on Arrangement lanes and lane-local expression payloads. Legacy row-index payloads are accepted only as a restore fallback.
- Restore now stages payloads until lanes and clips exist, then attaches data only to verified owners.
- Duplicate lane and clip IDs are repaired into independent owners that initially inherit the source payload; orphan payload rows are pruned.
- New real-state mutation gate passes lane-order survival, orphan pruning, duplicate repair, repaired-owner independence, and second-save persistence.
- Existing ownership, readiness, health, and recording-timing focused gates remain green.
2026-07-14 - Real-time recording commit queues
- Replaced the note/drum and MIDI-expression recording queue stubs with bounded
juce::AbstractFifoworker queues that are started with the processor. - The audio callback now computes capture placement and performs immediate audition only; Piano Roll note insertion, drum-step document mutation, expression-list mutation, sorting, receipts, and pattern-length commits run on the recording workers.
- Queued melodic notes carry the Arrangement clip's minimum pattern length so a 64-step clip cannot collapse to a shorter inferred length during asynchronous commit.
- Focused Release gates pass: recording timing (including long clips, four-measure capture, long drums, direct timestamps, and two-controller policy), MIDI readiness, and MIDI health/latency calibration.
- No distributable build was made in this pass.
- Remaining real-time closeout from that phase: replace the short recording-context and Arrangement-playback
patternMutexreads with immutable snapshots. Source-aware same-note ownership is completed in the next entry.
2026-07-14 - Source-aware same-note ownership
- Propagated a compact MIDI source session through direct-input drain, host input, live monitoring, voice start/release, and recording capture.
- Direct sessions use the existing fixed router slot and generation; host input uses one stable host session. No allocation, string comparison, or container growth was added to the audio path.
- Added fixed source/channel/note ownership tables for live-note masks and recording slots. Two controllers can now hold the same note independently, release in either order, and record independent note lengths.
- Focused Release gates pass: MIDI record timing, MIDI readiness, and MIDI health. The new timing gate proves forward release, reverse release, and same-source retrigger behavior.
- The complete AudioSelfTest ran to completion, but its pre-existing broad red baseline remains in unrelated MIDI import, Hardware Passport, MIDI Learn, and legacy effect-send tests. This pass is verified by focused gates, not represented as a full-suite pass.
- Source-aware sustain, channel-mode handling, generation retirement, and stale-event invalidation are completed in the entries below. Immutable playback/record-context snapshots remain separate real-time work.
2026-07-14 - Source-aware sustain and channel-mode messages
- Completed the source-awareness phase for sustain and channel resets. Two controllers can now share a channel and pitch without one pedal or channel-mode command ending the other performance.
- CC 64, CC 120, CC 121, and CC 123 are source scoped. Global Panic still clears every source by design.
- Separated each voice's routed output channel from its input control channel, fixing controller behavior on remapped lanes.
- Direct-input generation changes retire stale controller state, voices, ownership, and active recording slots.
- Focused Release gates are green: MIDI record timing, readiness, and health. No distributable build was made.
- Proactive disconnected-generation retirement is completed in the entry below. Remaining source work is processor-owned unplug discovery, repeated-pedal/host-direct hardware validation, and source-aware RPN/NRPN state where simultaneous editors require it.
2026-07-14 - Proactive direct-input disconnect retirement
- Direct controller removal now retires accepted performance state before any replacement controller sends an event.
- Router generation reconciliation runs before every direct-input queue drain. Stale queued notes are rejected, while a newly opened controller may safely reuse the same fixed slot with a newer generation.
- Added an adversarial two-controller gate: both controllers hold the same note and channel with sustain down; disconnecting A clears only A's voice, ownership, controller state, sustain, and recording slot while preserving B exactly.
- Added a slot-reuse gate: an old queued event is dropped, the replacement generation remains active, and no old voice survives.
- Release build and focused MIDI recording-timing, readiness, and health gates all pass. No distributable build was made.
- Remaining lifecycle work is narrower: processor-owned device inventory polling while the editor is closed, source-aware RPN/NRPN selection where simultaneous hardware editing requires it, and real USB/DIN disconnect validation.
2026-07-14 - Editor-independent physical MIDI inventory
- Replaced editor-timer device polling with a processor-owned JUCE message-thread timer. Physical controller unplug/reconnect discovery now continues when the plugin editor is closed.
- Device enumeration and router synchronization have one caller. prepareToPlay, source-policy changes, route edits, and UI requests only wake that owner.
- Published lane input demand through a locked immutable snapshot, avoiding worker/timer reads of mutable Arrangement lanes.
- Added explicit processor shutdown ordering so the inventory callback is stopped and joined before the direct-input router tears down its handles.
- Production Standalone and self-test Release targets compile. Focused MIDI recording-timing, readiness, and health gates pass.
- No distributable build was made.
- Remaining closeout: source-aware RPN/NRPN selector ownership for simultaneous hardware editors, cached device inventory/report scans, and real USB/DIN unplug/latency validation.
2026-07-14 - Atomic hardware setup-card execution
- Implemented production queue execution for confirmed RPN/NRPN setup cards using the selected Hardware Passport.
- Added producer serialization and an all-or-nothing batch reservation in the hardware output router, preserving exact controller order across FIFO wrap.
- Added rejection gates for profile/channel mismatch, invalid MIDI 1.0 7-bit values, unsafe or unknown NRPN definitions, and unapproved relative Data Increment/Decrement.
- Added the focused SPACEAGE_MIDI_SETUP_QUEUE_ONLY gate. It accepts either a fully queued or fully rejected environmental outcome while forbidding partial publication, and verifies confirmation, safety, receipts, logs, RPN Null, and external-acknowledgement honesty.
- All six relevant focused Release gates pass. No distributable build was made.
- Remaining work is real-device USB/DIN confirmation and customer-facing workflow QA, not a missing setup-card backend.
2026-07-15 - Realtime control and SysEx inbox closeout
- Live MIDI Learn/control mapping now crosses a bounded worker queue before changing project mappings or notifying host parameters. The audio callback performs only classification and enqueue.
- Cancel/rearm is generation-safe: a controller gesture already waiting in the queue belongs to the Learn intention that was armed when it arrived and cannot capture a newer target.
- Live SysEx capture is an explicit, one-message inbox with timeout, progress, validation, review receipt, Vault commit, and Hardware Passport attachment. It does not create an implicit restore path.
- Focused Release result: all eight relevant contracts passed. MIDI control queue reported
deferred=1,staleSafe=1,rpnExcluded=1,processed=2, anddropped=0; SysEx capture reportedidle=1,invalidSafety=1,async=1,vault=1, andcancel=1. - Core MIDI 1.0 input, timing, recording, routing, control mapping, setup queueing, and capture safety remain in high-90s backend closeout territory. Completion is not 100% until restore-response handling, device dialects/checksums, durable QA receipts, and physical USB/DIN tests are closed.
- Customer-facing completion remains lower than backend completion because real-hardware setup, multi-device SysEx source selection, automation ergonomics, and recovery/help wording still require hands-on QA.
- No distributable build was produced.
2026-07-15 - Hardware restore conversations closed end to end
- SpaceAge now distinguishes output queue acceptance from external hardware acknowledgement.
- A successful confirmed SysEx queue operation creates a pending restore conversation. Standard WAIT keeps it alive; ACK, NAK, or CANCEL creates a final hardware-response receipt; silence produces a timeout rather than a false success.
- The response inbox is fixed-capacity and worker-drained. Queue drops and oversized replies are visible in MIDI Health instead of disappearing silently.
- Explicit live SysEx capture wins when armed, preserving the user intention to inspect/store a message rather than treating it as a restore reply.
- All nine focused MIDI Release gates passed. Restore-response output reported unrelated=1, wait=1, activeHealth=1, ack=1, receiptHealth=1, nak=1, timeout=1, capturePriority=1, and postCaptureAck=1.
- Core MIDI 1.0 backend remains in high-90s closeout territory. The largest remaining proof is real multi-device USB/DIN hardware behavior and device-specific dialect work, not a missing generic response runtime.
- No distributable build was produced.
2026-07-15 - MIDI Learn performance controls closed
- MIDI Learn now has a complete commit path rather than compatibility stubs: capture, conflict preview, replace or share-as-macro confirmation, cancellation, mapping mutation, and capture receipt generation.
- Common paired CC families can operate at true MIDI 1.0 14-bit resolution. Coarse-only controllers remain useful, while compliant MSB/LSB devices gain fine control without creating a second user-facing mapping.
- Pickup is operational and reported as
pickup waitingorpickup ready, so loading a project does not make a physical knob jump the software parameter on first movement. - Verified broad assertions: Learn registry/capture passed, 14-bit awareness passed, paired runtime passed, and pickup passed. Nine focused release gates passed after the change.
- Backend foundation remains in the high-90s. Remaining work is predominantly hardware evidence and device dialect depth: multi-device source identity for SysEx replies, manufacturer checksums/ACK rules, persisted QA evidence, and real USB/DIN testing.
- No distributable build was made.
2026-07-15 - Multi-device SysEx restore identity closeout
- Closed a real multi-device ambiguity in restore verification. Incoming SysEx replies previously lost source identity in the response worker queue and were tested against the oldest pending attempt.
- The queue now carries a bounded UTF-8 input-device identity beside the SysEx bytes. The worker matches that identity against the Hardware Passport input bound to each restore attempt.
- Cross-device replies are ignored rather than being credited to the wrong instrument. Simultaneous pending restores can finish out of order when their actual devices reply out of order.
- Compilation passed. Focused gates passed for automation restore/ownership, setup queueing, SysEx capture, source-pinned restore response, MIDI Learn/control queueing, readiness, health, recording timing, and the Arranger edit contract.
- Remaining MIDI 1.0 backend work is narrow: source-pinned one-shot capture, manufacturer/device reply dialect depth, durable QA receipt persistence, and hands-on USB/DIN proof.
2026-07-15 - One-shot SysEx capture now has a source address
- Closed the capture-side counterpart to restore-response identity. Captured bytes now travel with their originating MIDI input ID through the callback-safe worker queue.
- Hardware Passport input binding is enforced before capture disarms. A dump from the wrong controller or hardware unit leaves the intended capture armed and untouched.
- Customer-facing capture readiness distinguishes
Armed and source-pinnedfrom genericArmed and listening, and names the pinned input in its report. - Release compilation passed. All ten focused gates passed, including source-aware recording, source-pinned restore replies, source-pinned capture, automation ownership, setup queueing, Learn/control mapping, readiness, health, and Arranger editing.
- Cancel/rearm is generation-safe: a dump queued for an older capture intention cannot complete the newly armed one.
- Remaining MIDI 1.0 backend work is narrow and evidence-heavy: persisted QA receipts, device-specific SysEx dialect/checksum support, and hands-on USB/DIN testing.
2026-07-15 - QA evidence now survives the project
- Completed the cold project persistence path for MIDI closeout QA receipts.
- Verified rejection of incomplete evidence, append-only same-key history, explicit
saved=true, root-level state shape, two save/restore cycles, and clear behavior. - Focused result:
invalid=1 first=1 state=1 roundtrip=1 history=1 clear=1. - Full focused matrix: 11/11 passed.
- MIDI 1.0 generic backend closeout is now in its final evidence phase. Remaining work is device/manufacturer dialect coverage and real USB/DIN proof, not another generic project-state subsystem.
- No distributable build was produced.
2026-07-15 - Closeout evidence is now saveable from MIDI Health
The durable receipt backend is no longer invisible infrastructure. MIDI Health now owns a clear SAVE/REVIEW doorway: SAVE QA records the next unsatisfied closeout category in the project ledger, while REVIEW QA exposes the full append-only evidence history after all active categories have receipts.
Verification: compilation passed; receipt validation/review/persistence passed; the complete 11-gate focused MIDI/Arranger matrix passed. The broad legacy monolithic self-test remains red across unrelated historical fixtures, so focused gates continue to be the trustworthy regression boundary until that harness is isolated or rewritten.
2026-07-15 - Closeout progress now follows the latest saved result
The project ledger now affects the customer-facing MIDI closeout projection. One category's latest valid saved PASS closes that category; a later FAIL or BLOCKED reopens it. Earlier receipts remain visible as append-only history, unknown keys do not alter coverage, and malformed saved records are ignored.
MIDI Health and MIDI Protocol now agree because both use the same receipt-adjusted coverage report. The SAVE QA doorway remains available after FAIL/BLOCKED so a corrected retest can be appended. Compilation passed, git diff --check found no whitespace errors, and all 11 focused release gates passed. No distributable build was produced.
2026-07-15 - SysEx trust now comes from Hardware Passport policy
SpaceAge no longer treats a manufacturer byte as enough evidence to infer a checksum or consume a hardware reply. Hardware Passports carry normalized declarative SysEx policy data, and that policy follows the restore snapshot into the active conversation. The only automatic response dialect currently recognized is standard MIDI Sample Dump (midi-sds) with an explicit device ID and opt-in switch.
Wrong-source, wrong-device, wrong-packet, non-SDS, policy-disabled, and ambiguous responses remain unconsumed. Generic vendor checksums are now reported as not evaluated until a verified device/message-family policy exists. Compilation and the complete 11-gate MIDI/Arranger release matrix passed. Remaining closeout is the verified policy registry and real-device evidence, not a claim of universal manufacturer support.
2026-07-15 - Passport apply and target test note are one guarded workflow
Mixer leave/return now clears only transient channel-strip subpage visibility, restoring the meter-first overview without changing authored mix state. Hardware Setup APPLY DRAFT is a checkpointed project transaction with one protected rollback snapshot; later checkpoints, normal Undo, and state restore invalidate that snapshot.
The follow-on hardware test-note bridge is no longer a compatibility stub. It binds template defaults to the selected lane, Hardware Passport, output device, and channel, remains cold during planning, and requires explicit confirmation before atomically reserving a timed Note On/Note Off pair. Focused Release gates pass. The next high-impact MIDI implementation target is the import commit bridge, which still needs to honor review choices and return truthful mutation receipts.
2026-07-15 - Import review now commits exactly what it reviewed
The MIDI file importer no longer bypasses its own review model. Inspect mode is cold, apply mode uses one transaction boundary, and receipts report actual lanes and clips rather than predicted mutations. Channel filters, expression/setup choices, SysEx quarantine, and first-source tempo/key policy now reach the processor mutator.
Verification passed for all ten targeted import behaviors exercised by the broad self-test: policy gating, non-mutation, first and earliest metadata, sorted/full source-map review, variable-tempo PPQ placement, notes beyond 64 steps, FIFO overlap pairing, and split-lane overlap pairing. The full legacy executable remains red elsewhere, so this is a scoped green import gate rather than a claim that every historical self-test is green. No distributable build was produced.
2026-07-15 - Stem package export/import closeout
SpaceAge can now emit a collaborator-ready MIDI package rather than an empty folder: one full Arrangement reference, isolated lane stems, a human receipt, a machine manifest, and externally compatible checksums. Completed packages self-inspect before success; damaged packages are diagnosed and blocked before mutation.
The reverse path is equally deliberate. A confirmed clean package creates editable lanes and clips through the same reviewed MIDI importer used for standalone files, protected by one Undo checkpoint. Inspect-only and repair-required paths remain cold. The package regression is green end to end, while unrelated failures in the old monolithic harness remain explicit debt rather than being folded into this result.
Stem-package safety gate
The completed package transaction now includes capacity refusal before mutation and verified cleanup on cancellation. The focused export/inspect/import/Undo regression remains green with cancel=1; the broad historical executable still exits red on unrelated legacy fixtures.
2026-07-15 - Stem-package adversarial verification
The package path now survives more than its happy path. A cancellation after one stem has already committed is rolled back completely, including Undo/Redo history. Pattern capacity is reserved before mutation, package integrity is rechecked before every stem, and material beyond the 4,096-step editable-pattern boundary is refused visibly rather than shortened invisibly.
Focused verification passed with export cancellation, long-stem refusal, key-signature fallback, manifest/checksum inspection, clean import, one-step Undo, and mid-import cancellation rollback all asserted. The next backend investigation returns to raw-pattern channel export and live lane-input filtering failures in the historical suite.
2026-07-15 - Channel-routing closeout
Raw pattern portability and armed-lane input behavior are now aligned. Drums export on channel 10, chords on channel 1, piano notes preserve stored channels, and raw files carry project key metadata. Live input observes physical channel traffic before applying the lane filter, allowing MIDI Health to report CH 01 rejection followed by CH 02 acceptance without letting the wrong channel sound.
Recorded expression now follows the same normalized lane output channel as recorded notes. The verified lines all pass: arrangement export routing, metadata, raw channel convention, channel-aware recording, note filtering, live filtering plus diagnostics, and expression filtering. Remaining red lines in the broad historical harness are outside this routing block and remain explicit work rather than being hidden in a percentage.
2026-07-15 - Protocol foundation green
- Closed malformed modulation-route storage.
- Closed bank/program/setup payload loss during save/reload.
- Closed long channel-10 MIDI truncation at the 64-step Drum Composer boundary.
- Broad verification now reports the core MIDI protocol foundation group as passing.
- Next evidence block: isolate the current MIDI project-readiness and hardware fixture failures into production defects versus stale expectations, then continue with real USB/DIN timing receipts.
2026-07-15 - Broad MIDI baseline closed
The complete AudioSelfTest now passes with exit code 0. The last production omission was a blank live-routing verdict in the MIDI input readiness model; it now reports host, direct, combined, blocked, or unarmed ownership consistently to readiness, health, and customer-facing diagnostics. The remaining stale assertion mutated a copied health snapshot without clearing its cached headline and was corrected at the fixture boundary.
This supersedes earlier notes that described the broad historical suite as red. Focused gates remain useful for fast diagnosis, but the broad regression is once again an authoritative whole-application gate. Hardware Passport/SysEx persistence, setup-card receipts, sync chase, MIDI Learn, import/export, lane routing, sample-positioned recording, expression, and Arrangement behavior all passed in the same process run.
Release meaning remains precise: software-side MIDI integration is green; real hardware latency, device-response dialects, and customer workflow QA still require physical USB/DIN evidence and saved QA receipts. No distributable build was produced.
2026-07-15 - Owner-clock and arranger-transaction pass
Automation ownership now has an explicit time contract. Shared PTN and Clip Local expression use source-relative steps; Lane Local expression uses absolute Arrangement steps and remains active through clip gaps. Runtime, editor behavior, summaries, selected-clip export, lane export, and full-Arrangement export now agree on that model.
Arranger CUT, paste, and clone paths now preflight capacity before checkpoint or mutation. Failure is all-or-nothing, and two obsolete paste implementations were removed. A Release build and all four focused gates passed: closeout regression, ownership, project readiness, and QA-receipt persistence. Remaining work is physical hardware evidence and focused full-capacity interaction QA, not a hidden claim of shipping completion.
2026-07-16 - MIDI source determinism and protocol transaction pass
Completed: armed-lane AUTO ownership, two-controller isolation regression, insertion-preserving equal-tick ordering, SysEx Passport lifecycle, accepted-capture cancellation, and stale automation/Undo preflights. Focused timing and closeout gates pass, followed by the complete self-test suite.
Next: audio-thread lock/copy removal, full sub-block note-off/expression timing, panic-safe hardware output queues, immutable route snapshots, then hands-on DIN-versus-USB latency and dual-controller testing through the mioXL.
2026-07-16 - Sample-accurate incoming performance dispatch
Host-buffer performance MIDI is no longer applied wholesale at block start. Accepted note, release, sustain, pitch-bend, modulation, pressure, and controller messages enter one bounded insertion-ordered queue and reach internal rendering at their exact sample offsets. Recording keeps its separate compensated sample position, so low-latency monitoring and accurate capture no longer compete for one timestamp.
Focused timing coverage passed for delayed note-on/off, sustain, bend, CC1, equal-timestamp ordering, direct callback age, source ownership, stale generations, disconnect, two-controller isolation, and combined host/direct ordering. The complete AudioSelfTest then passed with exit code 0 in 177.0 seconds. Remaining MIDI closeout is sample-accurate internal application of sequencer-generated expression, panic-safe queued hardware-output cancellation, and physical mioXL DIN/USB latency evidence; no distributable build was produced.
2026-07-16 - Sequencer expression sub-block timing closed
Sequencer-authored CC, sustain, pitch-bend, volume, pan, and parameter-selection events now reach internal instruments at their exact sample within the block. The fixed-capacity render queue is stable for equal-sample events, preserving Shared PTN -> Lane Local -> Clip Local precedence; incoming live performance is applied afterward at the same sample so intentional live overrides remain possible. Plugin MIDI and hardware timestamps were not moved.
The complete AudioSelfTest passed with exit code 0 in 178.9 seconds. The focused expression regression proves CC11 dispatch at samples 0 and 1200 in a 4096-sample block. Remaining software closeout is the hardware-output worker: route/device lifetime tokens, non-resetting cancellation, priority panic traffic, deadline-ordered scheduling, and removal of output-device locks/opens from the audio callback. Physical mioXL DIN/USB evidence remains required. No distributable build was produced.
2026-07-16 - Hardware output timing and cancellation closeout
Completed a major hardware-output hardening pass:
- Removed profile locks, device locks, device opening, StringArray construction, and recall-queue locking from the audio callback's MIDI Clock and lane-output paths.
- Published lane endpoint, target, output channel, and route epoch as a stable read.
- Added queue epochs so reset operations retire stale traffic without racing AbstractFifo reset.
- Replaced per-message sleeping with a stable deadline heap ordered by deadline and enqueue sequence.
- Added a separate priority safety queue so Panic and channel-release traffic bypass delayed musical messages.
- Added channel-scoped safety release when a lane is rerouted.
- Prepared hardware-clock endpoint slots outside processBlock.
- Removed obsolete clock-cache declarations and unused hardware-output queue paths.
Verification: Release build passed and the complete SampleSquadAudioTest suite passed with exit code 0 after the final channel-scoped release change (179.4 seconds).
Remaining hardware-output closeout: add a virtual output/manual-clock test seam that directly observes successful sends and proves stale-message cancellation, panic precedence, and stable equal-deadline ordering.
2026-07-16 - Deterministic hardware-output scheduler proof complete
Added a test-only virtual MIDI-output layer and manual clock around the production hardware scheduler. New adversarial regressions prove heap-resident reroute cancellation, heap-resident reset cancellation, Panic priority over a future heap head, and stable equal-deadline ordering across live and recall queues.
Also closed a send-boundary reset race by linearizing queue-epoch retirement with the final device send lock, and notified the worker on all recall enqueue paths to remove an avoidable wait. The Release self-test target built successfully and the complete AudioSelfTest suite passed with exit code 0 in 177.9 seconds. No distributable build was produced.
Remaining MIDI closeout evidence is physical simultaneous USB/DIN monitoring and recording through the mioXL, including saved timing-calibration receipts and a longer disconnect/reroute soak.
2026-07-16 - Hardware safety and reconnect hardening verified
- Replaced the finite safety FIFO with generation-aware, per-channel coalesced safety intent. Required release/Panic work cannot overflow, while repeated Panics collapse to one batch per endpoint generation.
- Added stable output device IDs, generation rollover, disappearance invalidation, and demand-driven reconnection outside the audio callback.
- Compacted stale heap entries immediately so pending counts and progress exclude retired traffic.
- Preserved queued note-offs across internal/external target-mode changes when the physical destination is unchanged.
- Prevented one lane reroute from issuing a destructive channel reset when another lane shares that physical endpoint/channel.
- Included pending safety work and DIN wire time in hardware-progress reporting.
Release build and the complete AudioSelfTest passed with exit code 0 in 182.4 seconds. New deterministic tests cover 16-channel safety bursts across two endpoints, 128 repeated Panics, non-destructive target-mode changes, shared-channel rerouting, and disconnect/reconnect generation rollover. No distributable build was produced.
Remaining release evidence is physical mioXL USB/DIN monitoring and recording, held-note/sustain/clock/SysEx disconnect-reconnect soak, and a product decision for lanes deliberately sharing one hardware endpoint/channel.
2026-07-16 - MIDI Closeout Digest
- Progress: MIDI Health and Protocol Coverage now expose a compact closeout digest so the next blocker list is readable without parsing the long report.
- Status: focused self-tests passed for MIDI Health, MIDI Project Readiness, and MIDI Closeout Regression.
- Remaining: continue through active MIDI 1.0 closeout categories, especially hands-on AUTO LANES validation, hardware bend/setup receipts, SysEx librarian polish, import/export real-file proof, timing/live-lag validation, and customer-facing workflow polish.
2026-07-16 - MIDI Closeout Headline Added
- Added a one-line MIDI closeout headline for the MIDI Health cockpit: readiness percent, blocker count, deferred future-family count, next blocker category, route proof, safety class, and QA session.
- Exported the same headline as
currentFinishLineCloseoutHeadlinein the protocol coverage var so reports/tests can inspect it without parsing the full multi-line digest. - Verification passed: Release
SampleSquadAudioTestbuild,SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_PROJECT_READINESS_ONLY, andSPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY. - No public/test build was packaged.
2026-07-16 - AUTO LANES QA Script Tightened
- Expanded the AUTO LANES Final Editor closeout checklist from broad guidance into explicit tester steps for Shared PTN, Clip Local, Lane Local, transforms, import/export, save/reload, and pitch-bend trust.
- Added regression assertions so the checklist must keep naming Shared PTN, Clip Local, Lane Local, and raw 14-bit pitch-bend evidence.
- Verification passed: Release
SampleSquadAudioTestbuild,SPACEAGE_MIDI_PROJECT_READINESS_ONLY,SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY, andSPACEAGE_MIDI_HEALTH_ONLY. - No public/test build was packaged.
2026-07-16 - AUTO LANES QA Run Cue Added
- Added a compact AUTO LANES run cue to the MIDI finish-line QA run-order summary: Shared PTN clone proof -> VARIANT isolation -> Clip Local sibling proof -> Lane Local gap proof -> transforms/undo/import/export -> pitch-bend trust.
- This is intentionally tester-facing. It keeps the shortest health/readiness summaries from hiding the exact proof sequence needed for automation ownership confidence.
- Verification: Release SampleSquadAudioTest target rebuilt; SPACEAGE_MIDI_HEALTH_ONLY, SPACEAGE_MIDI_PROJECT_READINESS_ONLY, and SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY all passed.
- Timestamp: 2026-07-16 13:13:19
2026-07-16 - MIDI Health Shows QA Run Order
- Added a visible QA RUN row to the MIDI Health panel directly beneath the CLOSEOUT digest, so the compact AUTO LANES proof sequence is visible in the GUI instead of only in copied reports.
- The row uses currentFinishLineQaRunOrderSummary(), which now includes the Shared PTN -> VARIANT -> Clip Local -> Lane Local -> transforms/undo/import/export -> pitch-bend trust cue.
- Verification: focused MIDI backend tests passed: SPACEAGE_MIDI_HEALTH_ONLY, SPACEAGE_MIDI_PROJECT_READINESS_ONLY, and SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY.
- Build note: full Release app compile reached final link, but linking was blocked by locked output files (SPACEAGE by Sample Squad.exe and VST3). This is consistent with the app/host still holding the binaries, not a source compile error.
- Timestamp: 2026-07-16 13:22:53
2026-07-16 - Health Report Proof Cue Regression Locked
- Added regression assertions that the AUTO LANES proof sequence appears in the user-facing MIDI Health next-steps text and serialized plain-text report, not only in the lower-level protocol coverage object.
- Locked cue terms: Shared PTN clone proof, Clip Local sibling proof, Lane Local gap proof, and pitch-bend trust.
- Verification: Release SampleSquadAudioTest target rebuilt; SPACEAGE_MIDI_HEALTH_ONLY, SPACEAGE_MIDI_PROJECT_READINESS_ONLY, and SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY all passed.
- Timestamp: 2026-07-16 13:27:32
2026-07-16 - MIDI Export Write Receipt Added
- Added a model-level MidiExportWriteReceipt beside the export job plan so backend tests can report attempted/succeeded/cancelled, file path, byte size, exportability, warnings, and the remaining validation boundary.
- Added regression coverage that writes an Arrangement MIDI file, builds the receipt, and verifies the receipt reports a non-empty file while still requiring open/re-import validation.
- Verified Release build, SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY, and SPACEAGE_MIDI_HEALTH_ONLY.
2026-07-16 - MIDI Recording Timing Gate Rechecked
- Re-ran the focused MIDI record timing gate after the export receipt work.
- Verified disarm note closure, step-input note closure, loop-edge split, long Arrangement clips, count-in boundary release, repeated/source-offset clips, Arrangement processBlock recording, four-measure Arrangement capture, long drum capture, direct-input source isolation, source-aware held-note ownership, sustain/channel-mode safety, stale generation rejection, direct disconnect retirement, slot reuse handoff, callback timestamp placement, input source policy, sync source policy, and active/open input evidence.
- Result: focused recording timing gate passed; closeout regression and MIDI Health gates were re-run in the same pass.
2026-07-16 23:01 - Recording target clarity pass
- Removed stale 'selected or armed lane' wording from the Arrangement REC tooltip and disabled-state help.
- Current customer-facing rule now matches backend behavior: select/arm a lane, then record at the Arrangement playhead; selected clips remain editing context and do not steal live input.
- Verified there are no remaining 'selected or armed' MIDI recording strings in PluginEditor.cpp.
- No user build produced in this pass per current no-build preference.
2026-07-16 23:06 - Arrangement AUTO LANES discoverability pass
- Kept the Arrangement automation command labeled AUTO LANES in live refresh instead of changing it to CLIP AUTO or LANE AUTO. The button may still append an existing-row count, but the feature name remains stable.
- Verified freshly compiled Release self-test binary after the UI label change.
- Focused gates passed: MIDI record timing, MIDI Health, and MIDI closeout regression.
- No user-facing beta build/package produced in this pass.
2026-07-17 00:01 - MIDI launch-proof reporting and timing gates
- Added launchProofStatusSummary() to the MIDI protocol coverage report so status displays now separate software-model capability, visible workflow, and release-proof evidence instead of collapsing them into one misleading percent.
- Exposed the same launch-proof wording through MIDI Health JSON/plain text so the UI/report layer can explain why backend MIDI can be high-90s while launch readiness still requires receipts.
- Repaired two malformed self-test diagnostic strings so hardware/readiness output is readable again.
- Verified with Release self-test build plus focused gates: SPACEAGE_MIDI_PROJECT_READINESS_ONLY, SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY, and SPACEAGE_MIDI_RECORD_TIMING_ONLY all passed.
- Current reality: backend/timing contracts are strong in software; remaining release proof still needs physical USB/DIN hardware validation, hands-on AUTO LANES QA receipts, and real-file/host round trips.
2026-07-17 00:17 - MIDI QA receipt audit fingerprints
- Added deterministic qa-xxxxxxxxxxxxxxxx audit fingerprints to MidiProtocolQaReceiptSnapshot.
- Exposed fingerprints in receipt JSON, plaintext records, receipt summaries, and the append-only store audit trail.
- Added store lookup for latest saved fingerprint by persistentStateKey, so saved PASS/FAIL/BLOCKED evidence can be compared after project reload/export.
- Strengthened SPACEAGE_MIDI_QA_RECEIPT_PERSISTENCE_ONLY to verify fingerprint format, determinism, ledger visibility, JSON visibility, and round-trip persistence.
- Verified gates: build, QA receipt persistence, closeout regression, project readiness, record timing, MIDI health.
2026-07-17 - MIDI QA audit fingerprints tied into release-proof language
- Tightened
launchProofStatusSummary()so the report explicitly says QA receipt audit fingerprints are evidence handles, not proof by themselves. - Added
software-green advanced MIDI 1.0 foundationwording so green self-tests cannot be confused with hardware-proven public release claims. - Tightened the real-hardware trust boundary and release-candidate validation ladder to require saved PASS/FAIL/BLOCKED receipts with stable audit fingerprints before broad claims.
- Verified with Release build plus QA receipt persistence, closeout regression, project readiness, record timing, and MIDI health gates.
2026-07-17 - MIDI Health hardware proof cockpit tightened
- Updated MIDI Health hardware proof guidance so missing Hardware Passports now explicitly say saved PASS/FAIL/BLOCKED evidence still needs a real device, file, host, or manual verification note.
- Updated the no-gap hardware proof message to keep send-capable actions tied to explicit confirmation, receipt logging, and real device/file/host evidence notes.
- Added regression assertions so the hardware cockpit cannot drift back into vague proof language.
- Verified with Release build plus MIDI Health, project readiness, closeout regression, QA receipt persistence, and record timing focused gates.
2026-07-17 - MIDI Next Steps hardware proof run order
- Added a copied
Hardware proof run ordersection to the MIDI Next Steps report. - The sequence is now explicit: review/create Hardware Passport, calibrate MIDI Timing, run TEST BEND/test phrase, restore SysEx only after confirmation and record ACK/rejection/timeout/manual verification, round-trip a real MIDI file through another DAW/host, then save PASS/FAIL/BLOCKED evidence with device/file/host notes.
- Added regression assertions so copied MIDI Next Steps must keep this tester-facing run order.
- Verified with Release build plus project readiness, MIDI Health, QA receipt persistence, record timing, and closeout regression gates.
2026-07-17 - Structured hardware proof run order
- Promoted the MIDI Health hardware proof run order from copied prose into
MidiProjectHealthSummary::hardwareProofRunOrderLines(). plainTextNextStepsnow uses that shared helper, andtoVar()exposeshardwareProofRunOrderLinesfor future UI rendering without parsing text.- Verified with project readiness, MIDI health, QA receipt persistence, record timing, and closeout regression gates.
2026-07-17 - Hardware proof run order summary
- Added MidiProjectHealthSummary::hardwareProofRunOrderSummary() so the MIDI Health cockpit can show a compact explanation of the proof ritual without parsing the checklist.
- Serialized the summary as hardwareProofRunOrderSummary beside hardwareProofRunOrderLines.
- Verified with project readiness, MIDI health, QA receipt persistence, record timing, and closeout regression gates.
2026-07-17 - Hardware proof summary regression guard
Added a self-test guard for the serialized hardwareProofRunOrderSummary field so the MIDI Health UI can rely on the compact hardware-proof ritual label staying present beside the structured proof-run lines. Verified with the Release self-test build plus the focused MIDI project readiness, MIDI health, QA receipt persistence, record timing, and closeout regression gates.
2026-07-17 - Structured hardware proof checklist
Added MidiHardwareProofChecklistItem and MidiProjectHealthSummary::hardwareProofChecklistItems() so the MIDI Health UI can render the hardware proof ritual as stable checklist rows instead of parsing plain text. Each item now carries an id, label, evidenceHint, and doneWhen field. Serialized as hardwareProofChecklistItems beside hardwareProofRunOrderSummary and hardwareProofRunOrderLines.
Verified with the Release self-test build plus MIDI project readiness, MIDI health, QA receipt persistence, record timing, and closeout regression gates.
2026-07-17 - Hardware proof checklist statuses
Expanded the structured hardware proof checklist so each row now carries status and nextAction fields. Status is intentionally simple (done, needed, or ready) and is derived from existing health signals such as Hardware Passport presence/warnings, timing calibration state, pitch-bend hardware verification needs, SysEx restore receipts, and next hardware evidence cues.
Verified with the Release self-test build plus MIDI project readiness, MIDI health, QA receipt persistence, record timing, and closeout regression gates.
2026-07-17 - First needed hardware proof action
Added first-needed hardware proof helpers so MIDI Health can surface the next blocking hardware-proof item without scanning the full checklist. hardwareProofFirstNeededLabel() and hardwareProofFirstNeededNextAction() now feed serialized fields and the MIDI cockpit next-action label.
Verified with the Release self-test build plus MIDI project readiness, MIDI health, QA receipt persistence, record timing, and closeout regression gates.
2026-07-17 - Hardware proof checklist count fields
Added explicit hardware proof checklist count helpers and serialized count fields: hardwareProofChecklistDoneCount, hardwareProofChecklistNeededCount, and hardwareProofChecklistReadyCount. The summary text now uses these helpers, and the future MIDI Health UI can render badges/progress meters without parsing human-readable text.
Verified with the Release self-test build plus MIDI project readiness, MIDI health, QA receipt persistence, record timing, and closeout regression gates.
2026-07-17 - Compact hardware proof badge
Added MidiProjectHealthSummary::hardwareProofBadgeLabel() and serialized hardwareProofBadgeLabel so the MIDI Health cockpit can show one compact proof-state badge without parsing the full checklist. When proof is still missing, the badge reports the needed count plus the first blocking proof item; when no proof item is blocking, it reports done/ready counts.
Verified with the Release self-test build plus MIDI project readiness, MIDI health, QA receipt persistence, record timing, and closeout regression gates.
2026-07-17 - Hardware proof badge visible in MIDI Health
Wired the compact hardwareProofBadgeLabel() into the visible MIDI Health cockpit as an HW PROOF row and added the same proof badge line to the copied plain-text MIDI Health report. This closes the loop between structured health data, visible UI language, and support/debug copy.
Verified with the Release self-test build plus MIDI Health, MIDI project readiness, MIDI closeout regression, and MIDI QA receipt persistence focused gates.
2026-07-17 - MIDI Health copied report includes proof counts
Added hardwareProofChecklistSummary() to the copied full MIDI Health report directly under the compact proof badge. The visible cockpit keeps the single HW PROOF row, while support/debug text now carries both the compact next-action badge and the done/needed/ready count summary.
Verified with the Release self-test build plus MIDI Health, MIDI project readiness, MIDI closeout regression, and MIDI QA receipt persistence focused gates.
2026-07-17 08:26 - AUTO LANES Proof Badge
- Added a compact AUTO LANES proof badge to MIDI Health so the automation status can be scanned quickly before reading the longer visibility/path/QA rows.
- The badge reports whether AUTO LANES has rows, how many are editable, whether row-level QA remains, and whether pitch-bend destination trust still needs checks.
- The copied AUTO LANES report and serialized MIDI health payload now include the same badge text, keeping the UI, report, and tests aligned.
2026-07-17 08:35 - AUTO LANES Proof Consistency
- Promoted the compact AUTO LANES proof badge into the top-level MIDI Health report and serialized health payload, not only the nested expression report.
- Added regression assertions for the visible AUTO OPS and AUTO TOOLS MIDI Health rows so their customer-facing summaries remain tied to tested model output.
- Verified the build, MIDI Health, MIDI Project Readiness, and MIDI closeout regression gates after the changes.
2026-07-17 - Hardware Setup Badge Model Proof
- Promoted MIDI Hardware Setup Assistant status badge wording into the MIDI model layer via midiHardwareSetupStepStatusToBadgeText().
- Serialized overallStatusLabel on setup plans and statusLabel on each setup step so UI badges, copied reports, and tests read the same source of truth.
- Verified Release compile plus MIDI Health, MIDI Project Readiness, and MIDI Closeout Regression gates.
2026-07-17 - AUTO LANES Doorway Checklist Proof
- Added a model-backed AUTO DOORS checklist label to the MIDI expression project summary.
- The label compactly names the live entry points: Piano Roll AUTO, Arrangement AUTO LANES, MIDI TASKS, and Settings, plus the ownership model: Shared PTN, Clip Local, Lane.
- Serialized the checklist into MIDI Health/project readiness payloads and asserted it in focused self-tests so doorway copy cannot quietly drift from the model.
- Verified Release compile plus MIDI Health, MIDI Project Readiness, and MIDI Closeout Regression gates.
2026-07-17 - AUTO DOORS Health Cockpit Alignment
- Wired the model-backed AUTO DOORS checklist into the visible MIDI Health cockpit as its own row.
- Split the previous long AUTO DOOR row into AUTO DOORS for entry-point proof and AUTO STEP for the run-step instruction.
- Added the same AUTO DOORS line to both MIDI Health and MIDI Next Steps reports, with focused tests proving the text is present.
- Verified Release compile plus MIDI Health, MIDI Project Readiness, and MIDI Closeout Regression gates.
2026-07-17 - AUTO DOORS Top-Level Health Payload
- Promoted the model-backed AUTO DOORS checklist into the top-level MIDI Health structured payload, not only the nested expression payload.
- Added focused regression assertions so Settings, copied reports, future UI widgets, and support exports can read the same AUTO DOORS: line directly.
- Pinned the broader instrument audio-output audit as a public-build release gate; the MIDI work continues, but the synth/sampler proof pass is now scheduled at the correct trust boundary.
2026-07-17 - Remaining MIDI 1.0 Summary In Health Payload
- Added emainingMidiOnePerfectionSummary to the top-level MIDI Health structured payload.
- This gives Settings, future status cards, copied reports, and support exports one model-owned sentence for what still separates the current MIDI stack from MIDI 1.0 release confidence.
- Added regression coverage so the summary remains present instead of being re-created ad hoc in the editor.
2026-07-17 - MIDI Health QA Clipboard Packet
- Added currentFinishLineQaClipboardText to the top-level MIDI Health structured payload.
- Future Settings buttons, support exports, or QA panels can now copy the exact closeout packet without parsing the nested Protocol Coverage object.
- Regression coverage proves the packet contains the MIDI 1.0 Closeout QA Session and its cold COPY QA safety boundary.
2026-07-17 - MIDI LEFT Health Cockpit Row
- Added a visible
MIDI LEFTrow to the MIDI Health cockpit near the release gate. - The row uses the model-owned
remainingMidiOnePerfectionSummary()sentence, so the GUI now names the remaining MIDI 1.0 confidence boundary instead of hiding it only in copied reports or structured payloads. - This keeps the Health panel honest: strong automation/QA plumbing is visible, but so is the remaining SysEx/hardware-proof frontier.
2026-07-17 - MIDI LEFT Next-Steps Handoff Alignment
- Added the model-owned
remainingMidiOnePerfectionSummary()sentence to MIDI HealthCOPY STEPS/plainTextNextSteps. - The same closeout boundary now appears in the visible MIDI Health cockpit, structured Health payload, full protocol report, and copied next-steps handoff.
- Regression coverage now protects the sentence in both direct next-steps text and the structured
plainTextNextStepspayload.
2026-07-17 - FILE PROOF Health Cockpit Bridge
- Promoted the model-owned
realFileRoundTripTrustBoundarySummary()into MIDI Health next-steps and the top-level structured Health payload. - Added a visible
FILE PROOFcockpit row beside the MIDI 1.0 closeout rows so real-file import/export validation is not hidden inside protocol reports. - Regression coverage now protects the real-file trust boundary in both direct
COPY STEPStext and structuredplainTextNextSteps/ Health payload fields.
2026-07-17 11:10 - Import Validation Checklist Parity
- Added MidiImportApplyPreview::validationChecklistSummary() so MIDI import now exposes the same kind of concrete trust checklist already present on export readiness/write receipts.
- The checklist adapts to preview content: lane creation, single-clip import, AUTO LANES expression, metadata, setup review, SysEx vault storage, ignored sync events, warnings, and final re-open/re-export validation.
- Regression coverage now requires import preview plain text and JSON to carry the checklist, preventing the Health/File Proof language from drifting into marketing-only prose.
Import Apply Receipt Boundary
Committed MIDI imports now publish an explicit evidence-boundary summary and validation checklist in MidiImportApplyResult. This closes the gap between preview proof and post-commit proof: after an import is accepted, the receipt now states what SpaceAge actually changed, what remains review-only, and what the user/tester must verify before trusting or saving the project.
Stem Package Import Receipt Boundary
MIDI stem package import apply results now expose explicit evidence-boundary and validation-checklist summaries. Package receipts now say whether the project changed, whether undo protects the operation, what support/reference files prove, and what still requires listening, lane verification, re-inspection, or re-export before collaborator handoff is trusted.## MIDI Recording Latency Wrap Test Synchronization
The latency-wrap regression now waits for both the recorded note and recorded expression event before evaluating their compensated positions. Expression commits can arrive before note-off commits because they use separate realtime queues, so the test now verifies the complete musical result instead of racing the note queue.
MIDI Recording Latency Edge Split Proof
The latency-wrap regression now expects the musically correct result when compensation pulls note-on before the pattern boundary and note-off remains after the 1: two split note fragments plus one expression event at the wrapped tick. This keeps MIDI recording proof aligned with playback reality instead of expecting an impossible single note across the pattern edge.
2026-07-17 - Fresh Build-Local MIDI Gate Discipline
The MIDI latency-wrap regression now has a focused SPACEAGE_MIDI_LATENCY_WRAP_ONLY gate. Verification must run the executable produced by tools/codex-build-selftest.ps1 in outputs/build-local-midi-closeout, not the older diagnostic build directory. The fresh gate proves that latency compensation crossing the pattern boundary records two note fragments plus the wrapped expression event.
2026-07-17 - Shared Test Runner Path Alignment
tools/spaceage_paths.ps1 now defaults to outputs/build-local-midi-closeout instead of the older diagnostic build folder. tools/run_tests.ps1 -NoBuild now launches the same fresh executable produced by tools/codex-build-selftest.ps1, and the focused latency-wrap gate passes through that shared runner.
2026-07-17 - Named MIDI Gate Runner
tools/run_tests.ps1 now accepts -Gate MIDI_LATENCY_WRAP, MIDI_RECORD_TIMING, MIDI_CLOSEOUT, MIDI_HEALTH, or MIDI_PROJECT_READINESS. This keeps focused MIDI verification on the corrected build-local executable while removing manual environment-variable setup from day-to-day regression runs.
2026-07-17 - Arrangement Recording Captures Notes And Expression Together
Tightened the MIDI record timing gate so a four-measure Arrangement take now proves both note events and expression automation land in the same armed-lane pattern across the full clip span. The regression records notes at 0.25, 16.25, 32.25, and 48.25 steps, plus CC11 expression at matching half-step tick offsets, routed onto the lane MIDI channel. This closes another trust gap between live playing, controller motion, and what the Arrangement clip actually stores.
Verification:
MIDI_RECORD_TIMING: passedMIDI_CLOSEOUT: passed with-NoBuild
2026-07-17 - Focused MIDI Runner Covers The Older Proof Gates
Expanded tools/run_tests.ps1 -Gate beyond the original big five so older focused MIDI/SysEx/automation proofs no longer require hand-set environment variables. New named gates include MIDI_READINESS, MIDI_QA_RECEIPT, MIDI_SETUP_QUEUE, MIDI_CONTROL_QUEUE, MIDI_TEMPLATE_DRAFT, SYSEX_RESTORE_RESPONSE, SYSEX_CAPTURE, AUTOMATION_RESTORE, and AUTOMATION_OWNERSHIP.
Verification through the shared runner:
MIDI_QA_RECEIPT: passedMIDI_SETUP_QUEUE: passedSYSEX_CAPTURE: passedAUTOMATION_OWNERSHIP: passedMIDI_READINESS: passed
2026-07-17 - Named MIDI Proof Gate Sweep
Completed the follow-up sweep of the remaining newly named focused gates through tools/run_tests.ps1. This confirms the runner is now a practical closeout surface for MIDI readiness, MIDI QA evidence, MIDI setup/control queues, SysEx capture/restore response handling, and AUTO LANES automation ownership/restore proofs.
Verification through the shared runner:
MIDI_CONTROL_QUEUE: passedMIDI_TEMPLATE_DRAFT: passedSYSEX_RESTORE_RESPONSE: passedAUTOMATION_RESTORE: passedMIDI_HEALTH: passedMIDI_PROJECT_READINESS: passed
Together with the previous pass, the newly exposed named gates are now exercised without manual environment-variable setup.
2026-07-17 - AUTO LANES Wording Contract Tightened
- Removed stale CLIP AUTO / LANE AUTO wording from the MIDI UI workflow spec.
- The code, health cockpit, copied reports, and documentation now agree that AUTO LANES is the visible doorway and ownership is selected inside the editor.
2026-07-17 - QA Receipt Button Tooltip Honesty
- Refined the MIDI Health QA receipt button tooltip so incomplete evidence says it opens the QA receipt form instead of implying it saves immediately.
- Cleaned small documentation artifacts in MIDI status/progress notes while keeping the current AUTO LANES and hardware-proof language intact.
- Verification: compile-backed MIDI_HEALTH gate passed; MIDI_CLOSEOUT passed with -NoBuild before the compile-backed run.
2026-07-17 - MIDI Health FIX NEXT Label Honesty
- MIDI Health now labels the next safe-door button with the model-owned next action, such as AUTO LANES, PASSPORT, SysEx, MIDI SETUP, or MIDI MAPS, instead of always showing generic FIX NEXT.
- The safe-door behavior is unchanged: it only navigates to the current closeout surface and still sends no MIDI, changes no routing, and mutates no project data.
- Verification: compile-backed MIDI_HEALTH passed; MIDI_CLOSEOUT passed with -NoBuild.
2026-07-17 - MIDI Health Next Button Label Moved To Model
- Promoted the compact MIDI Health next-action button label into MidiProtocolCoverageReport::nextCloseoutActionButtonLabel().
- MIDI Health now consumes the model-owned label instead of maintaining private UI wording for AUTO LANES, PASSPORT, SYSEX, MIDI SETUP, MIDI PATCH, and MIDI MAPS.
- Exported the label through protocolCoverage.toVar() and MidiProjectHealthSummary.toVar(), then protected the default AUTO LANES closeout label in MIDI readiness assertions.
- Verification: compile-backed MIDI_HEALTH passed; MIDI_READINESS and MIDI_CLOSEOUT passed with -NoBuild.
2026-07-17 - Protocol OPEN NEXT Label Uses Model-Owned Compact Label
- Updated the MIDI Protocol closeout panel so its OPEN NEXT button uses MidiProtocolCoverageReport::nextCloseoutActionButtonLabel() instead of uppercasing the full action sentence.
- Kept the full action label in the tooltip, so compact UI and detailed safety context now come from the same report model without duplicated wording logic.
- Verification: MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check passed; one first parallel run hit a Windows object-file permission race, then passed sequentially.
2026-07-17 - MIDI Cockpit Compact Action Label
- Added MidiProjectHealthSummary::cockpitNextActionButtonLabel() so the MIDI Health cockpit can expose a compact action-chip label without duplicating UI-only string shortening logic.
- Serialized the compact label as cockpitNextActionButtonLabel and added self-test coverage for the Hardware Passport path compressing to PASSPORT.
- Verification: MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check passed.
2026-07-17 - Direct MIDI Input Preserves Playback Sample Position
- Changed ExternalMidiInputRouter::drainToProcessor() so direct hardware/controller input derives a live playback sample position from the event timestamp instead of forcing every direct-device event to sample zero.
- Kept recording compensation separate: old events still record with negative sample offset for alignment, while future/in-block direct events can now start voices at their timestamp-derived sample position.
- Added self-test coverage proving timestamped direct input dispatches at expected sample positions, including the 4 ms note-on path at 48 kHz.
- Verification: MIDI_RECORDING, MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check passed.
2026-07-17 - Direct Arrangement Recording Regression Locked
- Added regression coverage for direct external MIDI queued through processBlock into an armed Arrangement lane clip at the playhead.
- The test records a one-step melodic note from a direct device route, verifies clip-local placement, MIDI output channel routing, pad/instrument routing, and automatic pattern-length expansion to the active 64-step clip.
- Verified: MIDI_RECORDING, MIDI_HEALTH, MIDI_READINESS -NoBuild, and MIDI_CLOSEOUT -NoBuild.
2026-07-17 - Piano Roll AUTO LANES Doorway Uses Arrangement Context First
- Changed Piano Roll AUTO and MIDI TASKS > AUTO LANES to resolve the selected Arrangement clip or selected destination lane before opening AUTO LANES.
- If a valid Arrangement lane/clip exists, the doorway now targets that lane's current clip context instead of blindly entering Settings first.
- If no Arrangement context exists, the previous shared-pattern Settings fallback remains available.
- Verified: MIDI_HEALTH, MIDI_READINESS -NoBuild, and MIDI_CLOSEOUT -NoBuild.
2026-07-17 16:23 - Arranger REC target clarity
- Made the Arranger REC button tooltip dynamic so it reports the same active MIDI recording target model as the status line: armed lane, lane routing, input channel, MIDI output channel, edit focus or pattern, and the rule that selected clips do not steal live input.
- This keeps the visible lane highlight, REC button, and hover help aligned while preserving the direct-to-Arrangement recording backend.
2026-07-17 16:28 - REC tooltip pattern alignment
- Corrected the Arranger REC tooltip refresh path so active/count-in recording reports the real MIDI recording pattern instead of whichever pattern happens to be selected in the inspector.
- This keeps the Arranger lane badge, status line, and hover help aligned during live recording.
2026-07-17 16:33 - Stable AUTO badge doorway
- Changed empty Arrangement lane AUTO LANES badges from AUTO+ / A+ to the stable AUTO label.
- Existing tooltips still explain create/open behavior and target order, while the visible surface stays simpler and easier to learn.
2026-07-17 16:39 - Timing Trust Boundary Copy
- Clarified the MIDI Timing page copy: recorded alignment changes where captured MIDI lands after recording, while live feel is governed by audio buffer size, driver/interface latency, and the physical USB/DIN route.
- The default recorded-alignment helper now says calibration is stored per Hardware Passport/device route, which matters when a USB controller and a 5-pin DIN controller behave differently through the same interface.
2026-07-17 16:45 - MIDI Health Hardware Next Action Row
- Added a visible HW NEXT row under HW PROOF in MIDI Health. When hardware proof is still needed, the panel now shows the next physical validation action directly instead of forcing the user to copy or parse the full report.
2026-07-17 16:49 - Hardware Proof Next Action Report Parity
- Copied MIDI Health / Next Steps reports now include the same hardware-proof next action shown by the visible HW NEXT row. Regression coverage now checks the copied report text so the cockpit and support/report surfaces stay aligned.
2026-07-17 17:08 - MIDI Record Timing Gate Restored
- Audited the live MIDI recording path from direct input queue through armed Arrangement lane clip-local placement.
- Found that the MIDI_RECORD_TIMING gate was failing because the direct-queue chatter regression assumed a fixed trace index for note-on after Active Sense filtering. The recording itself landed correctly.
- Updated the regression to find the note-on trace by MIDI status/data instead of relying on brittle dispatch order, while still verifying timestamp-derived sample placement, direct queue age, setup-message rejection, expression capture, note placement, and note length.
- Verification: rebuilt and ran MIDI_RECORD_TIMING; the gate passed.
2026-07-19 - Live MIDI first-attention row
- Added a structured
livePerformanceTroubleshootingFirstAttentionRowobject to MIDI Health, serialized beside the existing first-issue summary. - The row preserves id, label, value, status, attention, and nextAction so future UI can open the exact fix doorway instead of parsing a sentence.
- Added regression coverage in both high-latency health blocks and the general health serialization assertions.
2026-07-19 - Live MIDI first-attention action card
- Added a structured
livePerformanceTroubleshootingFirstAttentionActionCardobject beside the first-attention row. - The card maps buffer, direct input, hardware output, sample-position, and SoundFont-pool diagnostics to safe navigation surfaces without sending MIDI or mutating the project.
- Added regression coverage for direct helper output, serialized MIDI Health output, and the general health serialization contract.
2026-07-19 - Live MIDI action card report parity
- Added
livePerformanceTroubleshootingFirstAttentionActionCardSummaryso copied MIDI Health and Next Steps reports include the same safe action-card doorway as the structured model. - The summary reports title, button label, target surface, source row, and safe=yes/no without sending MIDI or mutating project state.
- Added regression coverage for helper output, serialized property output, and copied report parity.
2026-07-19 - Live MIDI action card visible in Health
- Added a visible
LIVE ACTIONrow to the MIDI Health panel, sourced fromlivePerformanceTroubleshootingFirstAttentionActionCardSummary. - The visible panel now matches the model and copied reports: first issue, safe action doorway, diagnostic row count.
- No behavior sends MIDI or mutates project state; this is visibility/reporting polish for the live-MIDI troubleshooting cockpit.
2026-07-19 - Live MIDI action row budget and serialized parity
- Updated the MIDI Health fixed row budget for the new visible
LIVE ACTIONcockpit line so the panel height remains honest. - Added serialized-report assertions that both
plainTextNextStepsandplainTextReportcarry theLive MIDI action card:sentence. - This keeps visible Health, structured JSON, copied reports, and tests tied to the same first-fix doorway.
2026-07-19 - AUTO LANES badge wording cleanup
- Updated
Answers for Shaneso the current Arrangement badge language no longer describes obsoleteAUTO+wording. - The current customer-facing rule is stable
AUTOas the doorway; exact owner/target context belongs inside the editor and reports. - No code behavior changed in this pass.
2026-07-19 - Health report carries next QA receipt action
Added
nextCloseoutQaReceiptActionSurfaceSummary()to the full MIDI Health report, matching the shorter Next Steps report.Regression coverage now proves both direct Health report text and serialized
plainTextReportincludeQA receipt action: COMPLETE QA RECEIPT.No MIDI routing, recording, SysEx, hardware output, or project mutation behavior changed.
Removed a duplicated QA receipt action-surface line from MIDI Health Next Steps. The QA receipt action still appears in Next Steps, the full Health report, and serialized payloads, but the copied checklist no longer repeats the same action sentence back-to-back.
Corrected the MIDI Health popup fixed row budget from 40 to 56 always-visible rows. This matches the current painted rows after closeout, QA, AUTO, live diagnostic, record-alignment, hardware, and sync additions, reducing the risk of clipped or overlapping Health-panel controls.
Mirrored extCloseoutFocusSummary into the top-level MIDI Health payload and added regression coverage for AUTO LANES Final Editor / Shared PTN / Clip Local / Lane ownership wording. This keeps visible Health, copied reports, and structured support data aligned.
2026-07-19 10:03 - Health Payload Parity Guard
Added regression coverage for the top-level MIDI Health closeout route-contract, safety-summary, and hardware-evidence fields. No behavior change; this prevents exported health data from drifting away from the visible MIDI closeout cockpit.
2026-07-19 10:08 - Health Breadcrumb Regression Guard
Added MIDI readiness assertions for the top-level MIDI Health closeout breadcrumbs: next test, next route, route proof, QA summary, and manual QA run step. This keeps the Health cockpit payload aligned with the protocol coverage model and prevents hidden drift in the user-facing closeout instructions.
2026-07-19 10:13 - Piano Roll AUTO LANES Doorway Label
Changed the Piano Roll automation doorway from AUTO to AUTO LANES and widened the button so the label remains readable. This aligns the visible button with Arrangement, MIDI Health, QA, and documentation naming.
2026-07-19 10:21 - AUTO LANES Doorway Wording Parity
- Updated MIDI expression health strings so every Piano Roll automation doorway now says
Piano Roll AUTO LANESinstead of the olderPiano Roll AUTOwording. - Updated the AudioSelfTest regression checks to protect that exact customer-facing label across MIDI Health, structured payloads, and next-test/checklist summaries.
2026-07-19 10:29 - AUTO LANES Assertion Tightening
Tightened the remaining MIDI Health regression assertions so they require the full visible label
Piano Roll AUTO LANESinstead of passing on the looser substringPiano Roll AUTO.Re-ran MIDI_HEALTH, MIDI_READINESS -NoBuild, and MIDI_CLOSEOUT -NoBuild; all passed.
Tightened the early health-only AUTO LANES doorway assertion as well, so every active test now requires the full
Piano Roll AUTO LANESlabel.
2026-07-19 10:37 - Closeout Action Card Label Contract
- Added regression coverage that the next MIDI closeout action card carries both the full instruction label
Open AUTO LANESand the compact button labelAUTO LANES. - This keeps the health/report language descriptive without forcing oversized button text back into the GUI.
2026-07-20 - MIDI Launch Validation Matrix
- Added a model-owned MIDI launch validation matrix that turns each remaining MIDI 1.0 closeout bucket into a proof artifact: hardware, real-file, live-performance, and receipt requirements are now explicit.
- Surfaced the matrix through protocol coverage and MIDI Health so beta testing can move from "we think it works" to saved PASS/FAIL/BLOCKED evidence.
2026-07-20 - Next Launch Validation Receipt Selector
- Added a next-receipt selector for the MIDI launch validation matrix so reports can name the first proof bucket, receipt key, and evidence artifact to capture next.
- Surfaced the selector through Protocol Coverage and MIDI Health, giving beta testing a direct bridge from remaining checklist to saved PASS/FAIL/BLOCKED evidence.
2026-07-20 - Launch Validation Receipt Action Surface
- The next MIDI launch validation target now exposes a receipt snapshot and action surface, not just a summary string. This lets the UI show the same COMPLETE/SAVE/REVIEW-style workflow for launch proof that the closeout QA system already uses.
- The launch receipt action is explicitly cold/no-send for non-hardware buckets, so validation guidance cannot accidentally imply a MIDI send or hidden project mutation.
2026-07-20 - AUTO LANES First-Use Guidance
- Added a visible safe-start status line when AUTO LANES opens: choose owner, choose controller, then ADD POINT or DRAW RAMP at the playhead.
- Added an empty-state first-action line so a panel with no automation rows still teaches the next move.
- Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - MIDI Health Shows Launch Validation Receipts
- Added visible MIDI Health rows for LAUNCH PROOF, LAUNCH NEXT, and LAUNCH ACTION.
- These rows use the existing launch validation matrix plus the saved QA receipt store, so the cockpit reports how many launch validation receipts have saved PASS evidence and which receipt should be captured next.
- Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - MIDI Health QA Button Prefers Launch Receipts
- Updated the MIDI Health QA receipt workflow so COMPLETE QA / SAVE QA now prefers the next unsatisfied launch-validation receipt before falling back to older closeout blocker receipts.
- This aligns the visible LAUNCH NEXT / LAUNCH ACTION rows with the actual receipt button path, reducing cockpit confusion during launch proof gathering.
- Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - MIDI Health Launch-Proof Surface Carries Proof Context
- Exposed the current launch-validation proof bucket, proof artifact, and proof needs on
MidiProjectHealthSummary::cockpitNextActionSurface()when the cockpit source islaunchProof. - Extended
cockpitNextActionSurfaceSummary()so reports now show the specific bucket and artifact instead of only a generic launch-proof button. - Added regression coverage proving the pending launch-proof cockpit points at
AUTO LANES hands-on QA, includes the screen-recording artifact, and remains MIDI-safe/non-mutating. - Verification:
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andMIDI_RECORD_TIMINGpassed.
2026-07-20 - MIDI Health Text Reports Carry Cockpit Proof Context
- Added the cockpit next-action surface summary to both MIDI Health next-steps and full plain-text reports.
- Copied reports now include the active launch-proof bucket and artifact, e.g.
proofBucket=AUTO LANES hands-on QAand the required screen-recording/tester-note proof. - Extended regression coverage so launch-proof Health reports cannot collapse back into a vague
LAUNCH PROOFlabel without the actual evidence target. - Verification:
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild, andMIDI_RECORD_TIMINGpassed.
2026-07-20 - MIDI Launch Validation Cockpit Card
- Added MidiProjectHealthSummary::midiLaunchValidationCockpitCard() as a structured UI-ready surface for the launch-proof state.
- The card reports PASS/BLOCKED, receipt counts, remaining hardware/real-file/live-performance proof needs, the next proof bucket, the next proof artifact, and whether public MIDI claims are allowed.
- oPlainTextNextSteps(), oPlainTextReport(), and oVar() now carry the same launch-validation card data so copied reports and future UI panels cannot drift from the MIDI Health cockpit.
- Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and MIDI_RECORD_TIMING.
2026-07-20 - Launch Validation Cockpit Card Gets Proof Rows
- Added structured proofRows, progressPercent, and normalized next-receipt identity fields to MidiProjectHealthSummary::midiLaunchValidationCockpitCard().
- The future MIDI Health UI can now render a checklist/progress card directly from the payload instead of parsing report prose.
- The complete state normalizes receiptKey=midi.validation.complete into the same next-receipt identity field used by ordinary proof buckets.
- Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and MIDI_RECORD_TIMING.
2026-07-20 - MIDI Health Uses Launch Validation Cockpit Card
- Rewired the visible MIDI Health launch rows to use
MidiProjectHealthSummary::midiLaunchValidationCockpitCard()instead of recomputing launch receipt state inside the editor. - The panel now shows the card summary, progress percent, saved PASS count, verdict, queue, next receipt, action helper, and persistent receipt key from one structured source of truth.
- Updated the MIDI Health fixed row budget from 63 to 65 so the new visible card/key rows do not crowd the lower warning/recommendation area.
2026-07-20 - MIDI Health FIX NEXT Uses Cockpit Action Surface
- Rewired the MIDI Health
FIX NEXTbutton to route fromMidiProjectHealthSummary::cockpitNextActionSurface()instead of the older closeout-only action surface. - Launch-proof and QA receipt actions now open the QA receipt workflow directly; timing, input, output, hardware passport, SysEx, automation, patch, and mapping actions route to their dedicated safe-door panels.
- This keeps the visible
DO NEXT, button label, tooltip, and destination aligned to the same cockpit source of truth.
2026-07-20 - MIDI Cockpit Action Surfaces Own Their Safe-Door Route
- Added
doorwayIdanddoorwayLabeltoMidiProjectHealthSummary::cockpitNextActionSurface()so the model names the panel/action route directly instead of making the UI infer it from source prose. - Updated the MIDI Health
FIX NEXTroute to prefer the model-owneddoorwayId, with the old source mapping left only as fallback. - Added card-level
actionDoorwayIdandactionDoorwayLabelto the launch-validation cockpit card so future graphical cards can open the correct QA/safe-door workflow without parsing text. - Added regression assertions for launch-proof
qaReceiptrouting and verified MIDI_HEALTH, MIDI_READINESS, MIDI_CLOSEOUT, MIDI_RECORD_TIMING, and diff hygiene.
2026-07-22 - MIDI Protocol-Only Gate Cleanly Green
- Fixed stale project-readiness string contracts that were making the dashboard layer look red after the MIDI mechanics had already passed.
- Rebuilt the Release self-test target.
- Verified
MIDI_PROJECT_READINESSpasses with lanes, expression events, and external readiness reported. - Corrected the
SPACEAGE_MIDI_PROTOCOL_ONLYboundary so it exits immediately after the MIDI protocol/hardware queue coverage instead of continuing into unrelated full-app smoke tests. - Verified
SPACEAGE_MIDI_PROTOCOL_ONLY=1exits 0 and printsMIDI protocol-only gate: passed. - Remaining MIDI closeout is now proof and polish rather than core protocol mechanics: real DIN/USB hardware receipts, SysEx restore validation, real-file import/export round trips, AUTO LANES hands-on QA, and final customer-facing cockpit clarity.
2026-07-22 - MIDI_PROTOCOL Runner Gate
- Added
MIDI_PROTOCOLas a first-classtools/run_tests.ps1 -Gateoption. - This removes the hand-typed environment-variable step for the protocol-only boundary and makes future MIDI closeout reports easier to reproduce.
- Verification:
MIDI_PROTOCOLpassed through the runner and wrotemidi-protocol-runner-20260722.out.
2026-07-22 - Launch-Proof Cockpit Next Cue
- Added structured
nextProofBucket,nextProofArtifact, andnextProofCuefields to the MIDI launch-validation cockpit card. - MIDI Health now displays the concise next-proof cue instead of forcing the UI to parse the longer next-receipt summary.
- Regression coverage now proves the blocked state points at
AUTO LANES hands-on QAplus the screen-recording artifact, and the all-PASS state normalizes toComplete. - Verification: Release self-test build compiled.
MIDI_HEALTHgate passed. TheMIDI_PROTOCOLrunner report reachedMIDI protocol-only gate: passed, but the wrapper command timed out and left an orphaned test process, which was stopped; treat that as a runner/process-lifecycle wrinkle, not a protocol assertion failure.
2026-07-22 - Direct MIDI Protocol Gate Confirmation
After the runner wrapper timed out, the same SPACEAGE_MIDI_PROTOCOL_ONLY=1 executable path was run directly. It exited with code 0 and ended at MIDI protocol-only gate: passed. The protocol gate is therefore green; the remaining follow-up is runner ergonomics/runtime duration, not a failed MIDI assertion.
2026-07-22 - Streaming MIDI Gate Runner
- Updated
tools/run_tests.ps1so report-mode test output streams line-by-line to both console and the report file instead of buffering the entire self-test run before writing. - This makes long gates such as
MIDI_PROTOCOLvisibly alive while they run and leaves a useful partial report if an outer shell interrupts execution. - Verification:
MIDI_HEALTHpassed through the streaming report path.MIDI_PROTOCOLpassed through the streaming report path withmidi-protocol-streaming-runner-20260722.out, ending atMIDI protocol-only gate: passed.
2026-07-22 - Direct Input Handoff And Hardware-Proof Claim Gate
- Direct MIDI input slot reuse now retires stale held-note ownership at the timestamped current recording step, including wrap-safe end-of-loop handoffs. This prevents an old controller/generation from closing notes at step 0 when the same device slot is reused mid-recording.
- MIDI health wording now distinguishes launch-proof completion from hardware-proof release readiness. A project can show launch receipts complete while still refusing public "MIDI 1.0 shippable" language until saved hardware/file/host proof clears.
- Verified with Release compile, MIDI_HEALTH, and MIDI_RECORD_TIMING on 2026-07-22.
2026-07-22 - MIDI Focused Gate Sweep
- Ran the focused MIDI closeout sweep after the direct-input handoff and hardware-proof claim-gate fixes.
- PASS: MIDI_READINESS, MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_RECORD_TIMING, MIDI_PROJECT_READINESS, MIDI_CONTROL_QUEUE, MIDI_SETUP_QUEUE, SYSEX_CAPTURE, SYSEX_RESTORE_RESPONSE, AUTOMATION_OWNERSHIP, AUTOMATION_RESTORE, MIDI_QA_RECEIPT, MIDI_TEMPLATE_DRAFT, and MIDI_LATENCY_WRAP.
- MIDI_PROTOCOL streamed through to
MIDI protocol-only gate: passed; the outer shell timeout landed at the end of the long report, so the protocol assertions are green but the long-run wrapper still deserves ergonomic patience/timeout tuning. - Current interpretation: MIDI 1.0 backend and model contracts are strong. Remaining work is field proof on real devices, customer-facing AUTO LANES comfort, hardware setup polish, and careful validation on Shane's DIN-via-mioXL path before public MIDI completion claims.
2026-07-22 - Live MIDI Start-Offset Fix
Status: passed focused verification.
What changed:
- Sample-queued live MIDI no longer double-applies its in-block sample offset to the voice start delay.
- Recording timestamps still use the original sample position, so capture timing remains accurate.
- MIDI readiness wording now says direct-input offsets schedule live sound inside the current audio block when possible.
Tests:
- Release compile: passed.
- MIDI_RECORD_TIMING: passed, including direct queue same-block drain.
- MIDI_LATENCY_WRAP: passed.
- MIDI_HEALTH: passed.
Remaining field risk: real hardware can still add latency before SpaceAge receives the event, especially DIN chains through interfaces. The app now avoids the avoidable internal double-offset delay.
2026-07-22 - Arrangement Record Target Resolver Tightened
Status: passed focused verification.
What changed:
- Removed stale selected-clip fallback from Arrangement MIDI record target resolution.
- Recording from Arrangement is now playhead-first: clip under playhead wins, otherwise a lane-owned clip is created at the intended timeline position.
Tests:
- Release compile: passed.
- MIDI_RECORD_TIMING: passed.
- MIDI_CLOSEOUT: passed.
2026-07-22 - Routing Audit Gate Pass
- Audited Arrangement lane MIDI routing around
setMidiInputLane,refreshMidiInputLaneRouting, and the lane command panel. - Confirmed the intended model remains: lane selection is editing/add-clip intent;
ARM/LIVE INis the explicit MIDI input target. - Re-ran focused MIDI gates after the live-start offset fix and playhead-first recording target fix:
MIDI_RECORD_TIMING,MIDI_HEALTH, andMIDI_CLOSEOUTall pass. - Current MIDI backend confidence: high for recorded timing, source ownership, multi-controller policy, SysEx/automation ownership gates, and closeout regressions. Remaining risk is mostly customer-facing hardware validation across real controllers/interfaces and polish around MIDI pages.
2026-07-22 - MIDI Protocol Gate False Negative Removed
- Audited the live/direct MIDI input queue path: direct controller messages enter a lock-protected FIFO, drain onto the audio thread before rendering, and either dispatch immediately at sample zero or queue to the exact sample position in the block.
- Confirmed the second direct-input drain before the sample loop is intentional: it catches late-arriving controller messages before audio rendering starts, reducing real hardware latency.
- Fixed the
MIDI_PROTOCOLgate so an unrelated wall-clockPerformance stress 200 blocksthreshold is reported, not failed, when running the MIDI-only protocol gate. The full all-systems self-test still enforces that threshold. MIDI_PROTOCOLnow passes after the harness correction.
2026-07-22 - First Measure MIDI Recording Protection
- Responded to the first-measure recording concern by auditing count-in and no-count-in activation paths.
- Corrected the activation-sample math so count-in capture begins exactly at the first live recording sample.
- Verified with
MIDI_RECORD_TIMING:count-in first-measure capturepassed withstart=0,length=0.2,notes=1. - Follow-up gates
MIDI_HEALTHandMIDI_CLOSEOUTalso passed.
2026-07-22 - Lane Instrument Boundary UI Pass
- Kept MIDI closeout direction intact while improving the Arrangement lane instrument workflow: native engine choices are now the primary lane-owned instrument path, and pad-backed sounds are explicitly framed as copied/imported sources.
- This reduces future MIDI confusion because a melodic/harmonic lane should own its instrument identity, mixer route, MIDI input channel, MIDI output route, and automation scope as one unit.
2026-07-22 - Lane Creation Boundary Pass
- Added a backend insertArrangementLane helper that shifts lane records, clip lane indices, armed MIDI lane state, and route snapshots together.
- Changed + ADD LANE into an explicit Drum Lane vs Instrument Lane choice so MIDI/instrument work no longer silently creates another pad-backed instrument lane when the user wanted drums.
- Instrument lanes still use the transitional hidden instrument slot until the full lane-owned instrument storage pass lands; drum lanes remain intentionally tied to Drum Composer/pad banks.
Verification
Release build completed after the Add Lane boundary pass. Focused receipts passed: SPACEAGE_MIDI_RECORD_TIMING_ONLY, SPACEAGE_MIDI_HEALTH_ONLY, and SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY. This keeps the lane creation change inside the existing MIDI timing/route safety envelope.
2026-07-22 - Lane-Owned Instrument Label Pass
- Fixed Synth Engine title refresh to use the active drawer target instead of selectedPad, preventing lane-owned instruments from being mislabeled after selection changes.
- Reworded lane instrument menu items from pad-sound language toward existing/new instrument language while the underlying storage migration continues.
2026-07-22 - Lane Insert And Instrument Slot Receipt Pass
- Added closeout regression coverage for explicit lane insertion: inserting a lane now proves clip lane indices and the armed MIDI input lane shift together.
- Added project save/load coverage for the new instrumentSlot alias while keeping legacy instrumentPad readable during the backend migration.
- Adjusted the direct-input same-block drain receipt to validate relative sample timing inside the audio block instead of brittle wall-clock windows; this preserves the real requirement without failing on tiny test harness scheduling drift.
- Verification: Release build passed; focused SPACEAGE_MIDI_RECORD_TIMING_ONLY, SPACEAGE_MIDI_HEALTH_ONLY, and SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY all passed.
2026-07-22 - Instrument Slot Accessor Bridge
- Added getArrangementLaneInstrumentSlot() as the semantic accessor for non-drum lane instruments.
- Kept getArrangementLaneInstrumentPad() as a legacy compatibility wrapper while the backing store is still pad-slot based.
- Migrated editor lane/instrument call sites to the slot accessor so new UI/MIDI work stops teaching the deprecated pad mental model.
- Added broader identity coverage asserting the new slot accessor and legacy wrapper agree during save/load.
- Verification: Release build passed; focused SPACEAGE_MIDI_RECORD_TIMING_ONLY, SPACEAGE_MIDI_HEALTH_ONLY, and SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY passed.
2026-07-22 10:14 - Processor Slot Call Site Cleanup
- Replaced remaining instrument-lane playback and recording call sites that were still calling the legacy pad accessor with getArrangementLaneInstrumentSlot().
- Kept drum lanes pad-driven; this pass only clarified non-drum instrument-lane ownership language and call paths.
- Verified Release build plus focused MIDI timing, MIDI health, and MIDI closeout regression receipts.
2026-07-22 10:25 - Lane-Aware Synth Drawer Context
- Added explicit lane context when the Synth Engine drawer is opened from an Arrangement lane badge or an Arrangement-owned Piano Roll clip.
- Pad-page synth editing still presents as a pad/instrument slot, but lane-owned instrument editing now prefers the lane name and mixer/MIDI channel label.
- Verified Release build plus focused MIDI timing, MIDI health, and closeout regression receipts after the UI context change.
2026-07-22 - Long Piano Roll Clip Navigation
- Fixed Piano Roll refresh behavior so long melodic Arrangement clips are no longer forced back to the four-bank Drum Composer
selectedStepPageview. - 256-step melodic clips and patterns now use their real edit length instead of receiving a hidden 64-step tail that made the back half harder to reach.
- Opening an Arrangement clip now asks the Piano Roll to show that clip source range directly, so long recordings begin in an editable, navigable view.
2026-07-22 - Measure-Start Stutter Mitigation
- Cached Arrangement timeline length during sequencer snapshot publication so the realtime scheduler no longer scans live clip/section arrays when deciding wrap points.
- Cached sequencer step sample duration once per audio block instead of repeatedly querying effective BPM inside active clip/note/chord paths.
- Throttled non-critical synth patch readout and synth tab maintenance scans while playback is running.
- Removed the full efreshChain() rebuild that was firing during playback slot changes; status updates remain, but the heavy UI rebuild waits for explicit UI changes or stopped transport.
- Verified with Release build/self-test plus focused MIDI record timing, MIDI health, and MIDI closeout regression gates.
2026-07-22 - Block-Level MIDI Timing Margin
- Cached effective BPM once per processBlock and reused it for MIDI recording step math, EchoRay delay sync, autopan sync, and loop importer playback.
- Removed a remaining per-sample getEffectiveBpm() call from loop playback so host tempo/playhead querying cannot happen thousands of times per block.
- Kept the second direct-MIDI drain for low-latency controller capture, but made it skip duplicate direct-input source-generation reconciliation.
- Moved EchoRay per-pad delay scratch buffers out of the per-sample stack construction path; they are now reused across samples and cleared only when delay processing is active.
- Verification: Release build/self-test passed; focused MIDI record timing, MIDI health, and MIDI closeout regression gates passed.
2026-07-22 - Render-Loop MIDI Timing Trim
- Cached source-aware MIDI channel gain once per active voice/sample and reused it for the main signal and side signal.
- Moved loop-track solo detection and active pattern lookup out of the per-sample loop so loop-importer playback no longer scans loop state every sample.
- Preserved the low-latency direct MIDI two-drain shape while keeping duplicate source reconciliation disabled on the late drain from the prior pass.
- Verification: Release build/self-test passed; focused MIDI record timing, MIDI health, and MIDI closeout regression gates passed.
2026-07-22 - Block Meter Publication
- Replaced per-voice/per-sample mixer meter atomic load/store updates with block-local peak accumulation and one relaxed atomic publish per pad at the end of the render loop.
- This keeps meter data current while removing visual metering from the critical inner audio path as much as possible.
- Verification: Release build/self-test passed; focused MIDI record timing, MIDI health, and MIDI closeout regression gates passed.
2026-07-22 13:05 - Arrangement AUTO LANES Doorway Polish
- Widened the lane-level AUTO LANES badge and reserved extra lane-badge text space so automation access is visible without colliding with instrument/route labels.
- The badge now reads AUTO LANES in full on normal lane badges, while overview mode keeps the compact AUTO/A# language.
- Verified MIDI record timing, MIDI Health, and MIDI Closeout regressions after the UI change.
2026-07-22 13:11 - AUTO LANES Explicit Labels
- Kept AUTO LANES wording explicit in the Piano Roll refresh path; the button no longer collapses back to plain AUTO after refresh.
- Updated MIDI Health/report wording so AUTO LANES visibility names Piano Roll strip/button, Arrangement button, Arrangement lane badges, MIDI TASKS, and Settings.
- Rebuilt and passed MIDI record timing, MIDI Health, and MIDI Closeout regressions.
2026-07-22 - AUTO LANES context-safe default
- Opening AUTO LANES from Arrangement context now prefers the selected clip's local automation owner, or the selected lane's local automation owner when no clip is selected. Shared PTN automation remains available but is no longer the silent default when a local Arrangement target exists.
- The create strip now labels the buttons as AUTO POINT and AUTO RAMP, with status/help copy explaining that the operation writes automation only to the selected owner and sends no MIDI.
2026-07-23 - Record-Arm Ordering and Lane Source Language
- Changed Arrangement MIDI record startup so
startMidiRecording(...)is armed beforesetSequencerRunning(true). This protects the first audio/MIDI block after REC from playing before the recorder is live. - Reframed non-drum lane chooser copy from pad/instrument-slot language to lane-owned source language while the deeper instrument storage migration continues.
- Added the missing longer EchoRay/channel-strip delay sync choices to the Mixer delay-time dropdown: half-note dotted/triplet, one-bar dotted/triplet, and two bars.
- Verified with the focused MIDI record timing gate after the record-start ordering change; source-aware ownership, multi-controller policy, and direct timestamp placement passed.
Verification - 2026-07-23 Record-Start / Lane Source Pass
- Release compile: passed.
SPACEAGE_MIDI_RECORD_TIMING_ONLY=1: passed, including four-measure Arrangement capture at starts0.25,16.25,32.25,48.25, direct callback timestamp placement, multi-controller source ownership, and source-policy matrix.SPACEAGE_MIDI_HEALTH_ONLY=1: passed.SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY=1: passed.
2026-07-23 - Lane-Aware Synth Drawer Labeling
- Removed another old pad-proxy leak from the Synth Engine drawer: non-drum lanes now present as
LANE INSTRUMENTwith the lane/instrument label instead of exposingPAD xxas if the pad grid were still the user-facing instrument source. - Kept drum/pad-origin editors on the older synth-engine wording because drum pads are still legitimately pad-oriented.
- Rechecked that the larger MIDI recording-ordering fixes remain the active priority after this small Instrument Bay cleanup.
2026-07-23 - Lane Instrument Identity Bridge
- New Instrument Bay-created Arrangement lanes now enter the processor with an unset lane instrument id, allowing the processor to assign a fresh lane-owned identity instead of treating the visible instrument as a user-facing Pad assignment.
- Changing or copying a sound into an existing non-drum lane preserves that lane's instrument identity, mixer route, and future automation ownership. The sound changes; the lane remains the same musical destination.
- Focused MIDI recording regression passed after this change, including four-measure Arrangement capture, long clip capture, source-aware ownership, direct callback timestamp placement, source policy matrix, and open-versus-active direct evidence.
- MIDI Health focused gate also passed. MIDI closeout regression was not rerun in this pass because the approval reviewer rejected the external test command with the known internal model/support error.
2026-07-23 - Lane-sourced Synth Drawer Wording
- Tightened the lane-owned synth drawer label so non-drum lane editing reports the lane name, engine, and patch instead of exposing the transitional backing pad slot.
- Widened the synth drawer title area so lane-owned instrument names have room to read cleanly before the engine chooser and action buttons.
- Verified Release compile and focused MIDI record timing gate after the UI-facing change.
2026-07-23 - Lane-sourced Synth Save/Render Names
- Added a lane-aware synth edit base-name helper so patch saves, sample renders, and Quasar captures opened from non-drum Arrangement lanes use the lane/instrument identity instead of the hidden backing slot label.
- Updated the Quasar editor title to reuse the lane-aware synth drawer target label.
- Left Pad Vault naming untouched because Pad Vault is still explicitly a Pad/Drum workflow.
- Verified Release compile and focused MIDI record timing gate after the change.
2026-07-23 - Lane-locked Piano Roll Instrument Label
- Hardened the Piano Roll instrument selector while editing an Arrangement-owned clip so it reports the lane-owned instrument instead of silently populating Pad/Instrument Bay source labels.
- This keeps the lane badge as the visible source of truth while the remaining transitional backing-slot internals are retired.
2026-07-23 - Existing Instrument Copy Menu Language
- Changed the non-drum lane instrument copy submenu from
COPY FROM EXISTING SOURCEtoCOPY FROM EXISTING INSTRUMENT. - Menu entries now emphasize engine, preset/display name, and mixer channel instead of source-slot wording, reducing the remaining Pad-era mental model in lane workflows.
2026-07-23 - Synth Drawer Copy/Paste Targets Active Instrument
- Hardened Synth Drawer copy/paste so it targets the active synth edit instrument slot rather than relying on
selectedPad. - This protects lane-owned instrument edits from stale Pad selection state and keeps the status text in instrument/lane language.
2026-07-23 - Lane Instrument Duplication Uses Instrument-only Copy
- Switched
DUPLICATE INSTRUMENT INTO NEW LANEandMAKE THIS LANE A VARIANTfrom full Pad copying to the narrower instrument-only copy helper. - This preserves sound identity while avoiding mixer-owned channel-strip values riding along with lane instrument duplication.
2026-07-23 - Lane/Piano Roll Synth Drawer No Longer Forces Pads
- Moved the Synth Editor drawer to a root-level overlay so lane and Piano Roll instrument editing can happen over the current workstation page.
- Removed the two remaining UI routes that called showPage(Page::pads) before opening a lane/Piano Roll instrument editor.
- Verified after the change: focused MIDI record timing gate passed, and focused Arranger edit contract gate passed.
2026-07-23 - Root Synth Editor Closes On Page Change
- After moving the Synth Editor drawer to the editor root, page changes now close the drawer deliberately so it cannot float over unrelated pages like Mixer or Library.
- The remaining direct showPage(Page::pads) call is startup initialization; lane and Piano Roll edit paths no longer force Pads.
2026-07-23 - Lane Instrument Menu Stops Teaching Source Slots
- Arrangement lane instrument selection now labels existing sounds by owning lane when possible, e.g. lane name, engine, preset, and mixer channel.
- Transitional unowned backing sounds are labeled as unassigned instruments instead of sources or pads, keeping Pad language out of non-drum lane workflows.
- No MIDI routing or audio engine semantics changed; this is a user-facing Instrument Bay clarity pass.
2026-07-23 - Lane-Owned Instrument Menu Label Tightening
- Updated the shared Instrument Bay label helper so non-drum Arrangement lanes that own an instrument slot are presented by lane name and mixer channel instead of anonymous slot/pad language.
- Verified the focused MIDI timing gate after the UI routing-label cleanup: four-measure Arrangement capture, direct/host source policy, same-note ownership, stale-device rejection, and direct timestamp placement all passed.
- Remaining architecture note: the backend still uses a transitional instrumentPad storage slot while the user-facing Arrangement workflow migrates toward true lane-owned Instrument Bay records.
2026-07-23 - Removed Legacy Lane Instrument Pad Wrapper
- Removed the unused getArrangementLaneInstrumentPad() compatibility API and updated the lane-owned identity self-test to assert getArrangementLaneInstrumentSlot() directly.
- Verified compile and the focused MIDI timing-only gate after the deletion.
- This reduces one more old-name path that implied non-drum lanes are still pad-facing at the public API level.
2026-07-23 - Instrument Bay Records Now Declare Lane Ownership
- Added laneOwned to InstrumentBayRecord so callers can distinguish a lane-owned instrument record from a raw/unassigned backing slot without guessing from slot numbers.
- Updated the lane-owned identity self-test to verify lane-owned records, restored lane-owned records, and direct unowned records behave differently.
- Verified compile and the focused MIDI timing-only gate after the change.
2026-07-23 13:21 - Instrument Bay Lane Ownership Helper
Centralized editor-side detection of which non-drum Arrangement lane owns an instrument slot. This removes duplicate ownership scans from the lane instrument menu and Instrument Bay labels while preserving the current lane-owned workflow and MIDI timing gates.
2026-07-23 - Lane-Owned Instrument Slot Cleanup
- Renamed editor-side lane instrument helpers from pad-oriented names to instrument-slot names, reducing the chance that non-drum lanes leak pad-era terminology into UI paths.
- Rebuilt Release self-test target successfully after the cleanup.
- Focused MIDI timing gate passed, including first-measure capture, long Arrangement clips, source-aware controller ownership, stale direct-device rejection, and open-versus-active direct evidence.
- No user-facing build was packaged in this pass.
2026-07-23 - Lane Instrument Chooser No Longer Lists Raw Backing Slots
- Changed the non-drum lane instrument chooser so COPY INSTRUMENT SETTINGS FROM LANE lists other non-drum Arrangement lanes only, instead of exposing anonymous unassigned backing slots.
- NEW INSTRUMENT remains the primary path for assigning a fresh native engine to the selected lane.
- Release compile passed and the focused MIDI timing gate passed after the change.
2026-07-24 - Lane Mixer Destination Routed Into Live/Arrangement Voices
- Non-drum Arrangement voices now carry the lane-owned mixer channel separately from the internal source slot.
- Arrangement playback, Chord Engine playback, and armed MIDI monitoring pass the lane mixer destination into voice creation, so the selected lane mixer strip is the audio destination even while the transitional source slot remains internal.
- The final mix pass now applies mute/solo, gain, pan, meters, output bus, channel-strip processing, and shared effect sends from the mixer destination instead of the hidden source slot.
- Drum lanes remain pad-routed by design.
- Remaining MIDI-side audit item: note release/source ownership still identifies voices by source slot and MIDI channel, which is correct for voice matching but should remain covered by focused tests as lane mixer reassignment grows.
2026-07-24 - Piano Roll Live Monitoring Follows Lane Mixer Destination
- Piano Roll live input now carries an optional mixer-channel destination separate from the instrument/source slot.
- Editing or arming a non-drum Arrangement lane sets that live-input mixer destination from the lane; standalone Piano Roll use falls back to source-slot routing.
- Channel EQ now follows the same mixer destination path, keeping live monitoring, playback, and mix treatment aligned.
- Verification: Release standalone compile passed after the change.
2026-07-24 - Lane Mixer Routing Defaults Stabilized
Instrument-lane creation now assigns a free mixer channel deliberately, and instrument reassignment preserves the lane's mixer channel. This removes another old Pad-era behavior where hidden backing slots could quietly determine the lane's visible channel-strip routing. Backend MIDI work remains in the mid-to-high 90% range; the remaining risk is mostly live-record timing validation, automation-lane user workflow, and hardware edge-case testing.
2026-07-24 - MIDI Recording Respects Metronome Intent
MIDI recording no longer forces the metronome on unless count-in is active or the record-only metronome preference is enabled. When SpaceAge turns the metronome on for those deliberate recording aids, it restores the user's previous metronome state when recording stops. This keeps live Arrangement recording from changing the room unless the user asked for that cue.
2026-07-24 - Focused MIDI Record Timing Gate Passed
After the metronome-intent fix, the focused SPACEAGE_MIDI_RECORD_TIMING_ONLY self-test passed. Covered cases included disarm closing held notes, step-input switching, loop-edge splitting, count-in first-measure capture, four-measure Arrangement note/expression capture, long drum Arrangement capture, selected direct input suppressing host spill, two-controller direct-input pinning, source-aware same-note ownership, stale direct-device generation rejection, proactive disconnect retirement, direct slot reuse handoff, callback timestamp placement, input source policy, sync source policy, and open-versus-active device evidence.
2026-07-24 - Instrument Slot Naming Cleanup Compiled
The editor-side current Piano Roll instrument variable now uses instrument-slot language instead of pad language. Release standalone compile passed after the change. No routing behavior changed in this pass; this was cleanup to reduce future Pad-era leakage while the lane-owned Instrument Bay migration continues.
2026-07-24 - Instrument Bay support pass
- Release standalone compile passed after moving Synth Drawer layer, one-shot, and mod-route refresh/action paths to getActiveSynthEditPad().
- MIDI backend work remains in the high-90% range, but the customer-facing recording/routing story still depends on finishing the Instrument Bay split so lane instruments stop inheriting confusing Pad semantics.
2026-07-24 - Active instrument binding verified
- Release standalone compile passed after attachSynthDrawer() was moved to active edit slot binding.
- This supports the MIDI/Instrument Bay work because armed lanes and selected lanes can now edit their own instrument targets more reliably instead of relying on global Pad selection side effects.
2026-07-24 - Instrument Bay / MIDI Routing Cleanup
- Continued removing Pad-era side effects from lane-owned instrument editing. The Synth Drawer can now open for an Arrangement lane and bind patch/load/source operations to that lane's instrument slot without making the Pad page think the user selected a drum pad.
- This supports the MIDI work because live input, recording, and editor focus need one predictable target: armed/selected lane first, Pad grid only for actual drum-pad workflows.
- Verification: Release standalone compile passed. No user-test build was packaged in this pass.
2026-07-24 - Lane-Owned Editor Entry Points Verified
- Continued Instrument Bay separation by removing more Pad-selection side effects from non-drum lane instrument editor entry points.
- This should make MIDI monitoring/recording focus easier to reason about: lane-owned instruments are edited through their lane target, while drum workflows still use Pad selection.
- Verification: Release standalone compile passed. No user-facing build package was produced.
2026-07-24 - MIDI / Instrument Bay Focus Pass
- Removed another group of Pad-selection side effects from lane badge instrument changes, SoundFont loads, SoundFont clears, and instrument-setting paste.
- This keeps armed/selected non-drum lanes more predictable for MIDI monitoring and recording because the active lane instrument no longer has to masquerade as a selected Pad.
- Backend MIDI completion remains high, but the customer-facing reliability target still needs final live-record timing tests, multi-controller validation, and automation-lane visibility/polish.
- Verification: Release standalone compile passed. No packaged build was produced.
2026-07-24 - MIDI / Instrument Bay boundary
- MIDI import now creates non-drum Arrangement lanes with the lane-owned instrumentSlot field rather than the deprecated instrumentPad field.
- This reduces pad-proxy leakage in imported melodic/harmonic MIDI lanes while preserving real drum-pad behavior for Drum Composer lanes.
- Verified with Release standalone compile; no new errors.
2026-07-23 - Instrument Bay Boundary Progress
- Continued the non-drum lane separation from Pad identity by routing lane-owned Instrument Bay lookup through getInstrumentBayRecordForInstrumentSlot().
- Verified that Arrangement lane storage is now instrumentSlot and current project state writes instrumentSlot only for lane routes.
- MIDI import uses the same slot field when creating melodic/harmonic lanes from imported files.
- Remaining MIDI/Instrument Bay architecture task: replace the finite pad-backed instrument slot storage with a true lane/instrument registry so non-drum lanes are no longer capped by the Pad grid backing store.
2026-07-23 - Piano Roll MIDI Target Slot Cleanup
- MIDI recording and live Piano Roll monitoring now resolve their melodic instrument target through instrument-slot accessors rather than Pad-named accessors.
- This does not yet create the unlimited Instrument Registry; it is a safe boundary cleanup before the larger registry extraction.
- Remaining structural dependency: MIDI note payloads and voice launch still store/use slot-backed pad fields because the voice engine is still 64-bank parameter backed.
2026-07-23 22:23 - MIDI / Instrument Bay Status
- Continued the Instrument Bay decoupling required for clean MIDI lane routing by replacing another set of lane-facing Pad calls with instrument-slot APIs.
- This reduces customer-facing confusion and makes the next MIDI recording/routing work less likely to touch Drum Composer-specific Pad assumptions.
- Build check passed for CinematicDrums_Standalone in Release.
- MIDI 1.0 backend remains close, but the main unresolved workflow dependency is still clean lane-owned instrument identity and visible automation-lane access.
2026-07-23 22:32 - MIDI / Instrument Bay Status
- Preserved the drum-first mental model by keeping new lane instruments out of the visible first 16 drum pads.
- This reduces one source of MIDI routing ambiguity: newly created melodic/harmonic lanes no longer appear to be assigned to the same surface area the user thinks of as the drum pads.
- Release Standalone compile passed after the change.
2026-07-24 - Instrument Bay / MIDI Routing Foundation
- Centralized the private instrument slot boundary used by new non-drum Arrangement lanes.
- This reduces MIDI/live-input ambiguity by keeping melodic lane instruments away from the visible drum pad bank while the larger Instrument Bay migration continues.
- Remaining MIDI-critical work: arrangement-record timing validation, multi-controller latency audit, and removing remaining pad-backed assumptions from non-drum instrument routing.
2026-07-23 23:32 - Arrangement MIDI Recording / Lane Instrument Stability
- Explicit Arrangement MIDI recording targets now map beyond the original clip edge without wrapping/clamping notes into the wrong local pattern region. This prevents long takes from collapsing into tiny notes at the beginning/end of a pattern when the take outgrows the visible clip.
- The selected Arrangement clip can grow to reveal recorded or edited content beyond its previous edge, rounded to the next 16-step boundary.
- Non-drum Arrangement lanes now clamp instrument slots to the private instrument range (slots 16-63 in the transitional backend) while preserving valid user-chosen mixer channels.
- Verification: Standalone target builds. Broad SampleSquadAudioTest shows the named MIDI/lane recording checks passing, but still exits nonzero from an older broad aggregate check that does not print a failure label.
2026-07-24 - Split Import UI/Backend Lane-Instrument Guardrail Verified
- Added a closeout regression proving non-drum lanes are normalized out of visible drum-pad slots by the central lane setter.
- Tightened the MIDI split-import UI so melodic channel destinations clamp to private lane-instrument slots before commit.
- MIDI protocol gate passed after the editor/test changes, including split-lane import, Arrangement recording, expression routing, hardware MIDI, panic, and lane-owned instrument identity checks.
2026-07-24 - Piano Roll Instrument Selector Moved Further From Pad Identity
- Standalone Piano Roll instrument choice now starts at the private lane-instrument slot range instead of offering Pads 1-16 as tonal targets.
- Selection uses ComboBox item IDs, so removing visible drum-pad entries does not shift the chosen backing slot.
- Removed a Pad-page selection side effect from this selector path, reducing MIDI focus confusion between selected Pad, selected lane, and armed input lane.
2026-07-24 - Piano Roll / Chord Helper Private-Slot Cleanup Verified
- Tightened remaining editor helper clamps for Piano Roll and Chord Engine selected instruments to the private lane-instrument range.
- Re-ran MIDI_PROTOCOL successfully after the helper cleanup. Covered MIDI import/export, Arrangement recording, expression recording/playback/export, hardware routing, sync, panic, and lane-owned instrument identity.
- No user-facing build was packaged.
2026-07-24 - MIDI Step Input Uses Instrument-Slot Terminology
- Removed stale Piano Roll pad wrapper APIs and updated tests to call instrument-slot APIs directly.
- Renamed MIDI step-input storage to instrument-slot terminology and clamped step-input targets to private lane-instrument space.
- MIDI_RECORD_TIMING passed, including step-input switching, first-measure capture, loop-edge splits, long Arrangement recording, multi-controller pinning, and direct timestamp placement.
- MIDI_PROTOCOL passed after the cleanup.
2026-07-24 - Lane-Owned Synth Preset Target Guardrail
- Synth and Drum Lab preset apply functions now resolve their target through the active synth edit slot instead of the global selected Pad.
- This closes a MIDI/Instrument Bay workflow seam where opening a lane-owned instrument editor could still let preset changes land on an unrelated selected Pad.
- Compile-backed
MIDI_PROTOCOLpassed after the change.
2026-07-24 - Arrangement Playback Guarded Against Visible Pad Slot Drift
- Hardened Arrangement playback so non-drum lane instruments resolve through private lane-instrument slots, not the full Pad range.
- This supports the Instrument Bay migration by making playback itself enforce the same pad/lane boundary as lane creation, import, and UI selection.
- Compile-backed
MIDI_PROTOCOLpassed after the change.
2026-07-24 - Playback Private-Slot Regression Added
- Added regression coverage for stale playback snapshots that try to route a non-drum Arrangement lane through a visible Pad slot.
- Confirmed
MIDI_CLOSEOUT,MIDI_RECORD_TIMING, andMIDI_PROTOCOLremain green after the guard. - Current MIDI status: backend protocol coverage remains in the high-confidence closeout phase; remaining work is mostly UI exposure, hardware-facing polish, and final real-device validation.
2026-07-24 - Private Instrument Undo Boundary Tightened
MIDI/Instrument Bay closeout continued with undo-boundary cleanup for lane-owned instruments. The helper that creates instrument lanes now honors caller-owned checkpoints, and lane instrument copies checkpoint before private slot mutation. Verified with MIDI_CLOSEOUT, MIDI_RECORD_TIMING, and MIDI_PROTOCOL gates.
2026-07-24 - Active Synth Edit Slot Cleanup
Continued separating Instrument lanes from Pads by changing remaining editor handlers that were still using selectedPad during lane-owned synth editing. MIDI_CLOSEOUT and MIDI_RECORD_TIMING passed after the cleanup.
2026-07-24 - Remaining Drawer selectedPad Leaks Reduced
Continued the Instrument Bay / lane-owned instrument cleanup by moving Flux Nodes and the Synth Engine tab indicator scan to the active synth edit slot. Verification passed MIDI_CLOSEOUT and MIDI_RECORD_TIMING, including the multi-controller/direct-input timing cases.
2026-07-24 - Instrument Bay Language Pass
Ran another Instrument Bay separation pass focused on user-facing labels and error text. Private lane instruments no longer present themselves as pad slots in the main lane/instrument chooser wording. Verified with MIDI_CLOSEOUT and MIDI_RECORD_TIMING.
2026-07-24 - Lane-Owned Pattern Metadata Retargeting
Added safe pattern retarget helpers for non-drum Arrangement lanes. Lane-private notes and chords now inherit the lane-owned instrument after instrument reassignment, while shared patterns are left untouched to avoid cross-lane mutation. Verified with MIDI_CLOSEOUT and MIDI_RECORD_TIMING.
2026-07-24 - Lane-Owned Pattern Metadata Retargeting
Moved lane pattern retargeting into the processor/model layer via retargetPatternToInstrumentSlot() and retargetArrangementLanePatternsToInstrumentSlot(). The editor now delegates to the processor after lane instrument changes, keeping Instrument Bay ownership consistent without exposing GUI internals.
Verified: MIDI_CLOSEOUT, MIDI_RECORD_TIMING, and focused arranger edit contract.
2026-07-24 - Lane Instrument Setter Owns Retargeting
Centralized lane-private pattern retargeting inside setArrangementLaneInstrumentSlot() so future callers cannot forget the metadata update after changing a lane instrument. The editor now performs one visible lane-instrument action; the processor/model owns the note/chord normalization.
2026-07-24 - Piano Roll Slot Setter Guardrail
Centralized the Piano Roll instrument and live-input setters so stale callers clamp into the private lane-instrument range instead of targeting visible Drum Composer pads. MIDI Learn target grouping now labels pad-backed parameters as Instrument / Drum Pad to keep the bridge explicit.
2026-07-24 - Visible Pad Slot Ownership Guard
Tightened the editor-side lane instrument helpers so non-drum lane workflows clamp into the private Instrument Bay range, while lane-ownership lookups return no owner for visible Drum Composer pad slots. This prevents stale pad-origin calls from making melodic lanes look attached to PAD 01-16.
2026-07-24 - Pad Presets No Longer Hijack Piano Roll Focus
Guarded synth preset and sample-import paths so they update Piano Roll instrument focus only when the edited slot is a private lane instrument. Visible Drum Composer pad edits can still audition and update pads, but they no longer silently retarget melodic MIDI input.
2026-07-24 - Private Instrument Labels Stop Saying Pad
Instrument Bay records for private lane-owned backing slots now translate untouched default pad labels into instrument language, e.g. Init Redshift, while real pad records keep their pad labels. This keeps the transitional 64-slot engine from leaking Pad wording into non-drum lane workflows.
2026-07-24 - Instrument Slot Copy Guard
Instrument-slot copy now rejects visible Drum Composer pad sources and destinations. Lane instruments may copy from other lane instruments, while Drum Composer pads stay in pad space; this closes another transitional Pad-as-Instrument bridge path.
2026-07-24 - InstrumentSlot Wrappers Reject Visible Pads
Processor APIs named InstrumentSlot now reject visible Drum Composer pad slots for label, SoundFont, Quasar, source-name, and built-in-synth wrapper operations. Pad APIs remain available for real pad workflows, but stale non-drum InstrumentSlot calls can no longer mutate Pads 1-16.
2026-07-24 - Non-Lane Pad Selection Page Sync
Cleaned up remaining Synth Drawer focus bookkeeping so non-lane edit contexts update selectedPadPage whenever they intentionally update selectedPad. Lane-owned Synth Drawer contexts still avoid Pad selection side effects, preserving the Instrument Bay boundary while keeping real Pad-page workflows internally coherent.
2026-07-24 - Private Instrument Edit Targets No Longer Select Pads
- Removed the standalone Piano Roll synth-edit path that copied a private Instrument Bay slot into selectedPad.
- Guarded synth-editor sync, patch-save refresh, paste, and Lunacy/Liftoff source-load callbacks so only true Drum Pad slots can update selectedPad/selectedPadPage.
- SoundFont editor refresh now follows the active synth-edit target instead of visible pad selection, which keeps lane-owned instruments editable without pretending they are pads.
- Verified with MIDI_CLOSEOUT and MIDI_RECORD_TIMING gates.
2026-07-24 - Synth Drawer Lane Owner Inference
- Updated the Synth Drawer open path so a private instrument slot that is already owned by an Arrangement lane infers that lane even when a caller forgets to pass source-lane context.
- This prevents lane-owned instruments from falling through to visible Pad selection and helps keep non-drum lanes out of the deprecated Pad-as-instrument workflow.
- Verified with a fresh build plus MIDI_CLOSEOUT and MIDI_RECORD_TIMING gates.
2026-07-24 - Automation wording and lane-owned instrument menu pass
- Rechecked the Arrangement lane instrument chooser: fresh engines initialize the current lane-owned slot, copied instruments copy into the current lane-owned slot, and mixer assignment stays lane-scoped.
- Renamed the most visible Piano Roll/Lane automation entry points from AUTO LANES toward AUTOMATION/AUTOMATION LANES so users can find expressive MIDI editing more naturally.
- Retargeted SoundFont lane status copy away from Pad language: lane-owned SoundFont loading now points back to the Lane Instrument menu.
- Verification: full MIDI_CLOSEOUT build passed; MIDI_RECORD_TIMING no-build gate passed.
2026-07-24 - AUTO Direct Input And Live Monitor Timing Tightening
- Changed AUTO MIDI input policy so an armed lane with no pinned physical input no longer silently suppresses SpaceAge-opened direct controllers. If a lane names a physical input, that named input still wins and host duplicates are suppressed.
- Direct hardware input now starts live internal monitoring immediately when drained into the audio block, while preserving the original signed sample offset for recording placement and timing diagnostics.
- Validation: MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_CLOSEOUT all passed after the change.
2026-07-24 - Compile-Backed AUTO Input And Direct Monitoring Proof
- AUTO input now accepts host/plugin MIDI and direct physical controller input when the armed lane has no pinned physical input. If a lane has a pinned physical input, the pinned direct device remains authoritative and host spill/wrong-device input is suppressed.
- Direct hardware messages now monitor live at the front of the drain block to reduce perceived controller lag, while recording still uses the signed timestamp offset so captured note starts and lengths remain musical.
- Compile-backed gate passed: MIDI_RECORD_TIMING. Fresh-binary gates passed: MIDI_HEALTH and MIDI_CLOSEOUT.
- Regression wording changed from autoHost fallback to autoUnpinned so future work does not accidentally restore the old controller-hostile behavior.
2026-07-24 - Lane Mixer Fallback Detached From Private Instrument Slots
- Removed the remaining pad-style fallback where invalid Arrangement lane mixer channels healed to instrumentSlot + 1.
- Lane mixer fallback now heals from lane position, preserving the Instrument Bay direction: instrument identity and mixer routing are separate decisions.
- Compile-backed gates passed: MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_CLOSEOUT.
- AUTO input wording was also corrected in status docs: unpinned AUTO accepts host/plugin and direct physical controllers; pinned direct input remains exclusive.
2026-07-24 - Private Instrument Label Padding Cleanup
- Corrected private Instrument Bay default-label padding from a null character to '0', so Pad 01-style default labels can be reliably recognized and hidden from lane-owned instrument presentation.
- This is a small cleanup, but it protects the larger Instrument Bay direction: non-drum lanes should present as lane-owned instruments, not as visible Pad assignments.
- Compile-backed gates passed after the change: MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_CLOSEOUT.
2026-07-24 - Long Arrangement Direct-MIDI Recording Guard
Added a regression guard for direct MIDI recording into a 256-step Arrangement clip at a late playhead position. The focused MIDI_RECORD_TIMING gate now proves a direct external MIDI note records at step 192.5 with a one-step duration and preserves the 256-step clip length, protecting against the failure mode where long recordings collapse into the first measure or lose timing.
2026-07-24 - Lane Instruments Copy Only From Lane Instruments
Tightened the backend InstrumentSlot copy API so visible Drum Composer pads cannot be used as copy sources or destinations for lane-owned instruments. The current lane menu already exposes only lane-to-lane copies; this makes the processor contract match the user-facing workflow and keeps pads from silently becoming instrument-lane templates.
2026-07-24 - Synth Drawer Paste Uses Lane-Owned Instrument Guard
Closed another pad-proxy loophole in the Instrument Bay migration. The Synth Drawer now routes lane-owned paste actions through a processor-level pasteCapturedInstrumentSlotSettings() helper, which requires both the captured source and destination to live in the private lane-owned instrument slot range. Visible Drum Composer pads remain valid Pad-page paste targets, but they can no longer silently become Arrangement-lane instruments through the generic paste button.
2026-07-24 - Generator Presets Stop Touching Mixer Effects
- Removed remaining editor-side generator preset writes to channel-strip compressor/saturation settings.
- Re-audited synth-editor setPadParameterValue(...) calls for shared sends and strip-effect keys; none remain in PluginEditor.cpp preset/generator paths.
- This supports the lane-owned Instrument Bay architecture by keeping instrument patches separate from Mixer effects.
2026-07-24 - Removed Stale InstrumentPad Formatter
- Removed the unused editor helper
formatInstrumentPadLabel()and its declaration. - Re-ran the deprecated symbol search for old
InstrumentPad/PianoRollInstrumentPadAPI names; no live references remain. - Re-audited remaining send/strip parameter references. They now live in processor parameter storage, Mixer/Effects routing UI, and tests, not synth/generator preset application paths.
- Verified with
MIDI_CLOSEOUT.
2026-07-24 - Arrangement MIDI Recording Target Honesty
- Hardened the editor-side record target resolver so the playhead clip in the armed lane is the named recording target.
- Updated the recording target summary to say PLAYHEAD CLIP or NEW CLIP / PATTERN instead of implying that edit selection owns recording.
- Verification: MIDI_RECORD_TIMING and MIDI_CLOSEOUT both passed after the change.
2026-07-24 - Lane-Owned Synth Drawer Header Refresh
- Opening the Synth Editor from a non-drum Arrangement lane now refreshes the surrounding header immediately after attaching the drawer, so stale Pad labels do not linger around a lane-owned Instrument editor.
- This is a UI-facing cleanup for the Instrument Bay migration: lane-owned synth editing should say Lane Instrument/Instrument, not imply a visible Pad assignment.
- Verification: MIDI_CLOSEOUT passed. MIDI_RECORD_TIMING passed after rerunning it solo; the first timing run collided with a parallel build using the same object directory.
2026-07-24 - Automation Naming And MIDI Gate Pass
- Cleaned the visible automation terminology so user-facing tooltips and full-size buttons say Automation instead of the older AUTO LANES phrasing.
- Kept compact AUTO/A# badges where lane width is tight, but updated explanatory text to teach that these are MIDI automation rows for CC, pitch bend, pressure, sustain, and related performance movement.
- Verified serial gates: MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_CLOSEOUT all passed.
2026-07-24 - Instrument Bay Wording Cleanup
- Tightened lane-owned Synth Editor wording so non-drum lane surfaces say Instrument rather than continuing to teach a Pad-centered workflow.
- Kept Drum Composer / Pad Bank language for actual drum-pad contexts only.
- Verified serial gates: MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_CLOSEOUT all passed.
2026-07-24 - Automation Editor Button Clarity
- Simplified the Automation editor's create-row controls from AUTO POINT / AUTO RAMP to ADD POINT / DRAW RAMP.
- Updated related live help/status copy so first-use guidance reads like a direct editing action instead of an internal feature name.
- Verified serial gates: MIDI_CLOSEOUT, MIDI_RECORD_TIMING, and MIDI_HEALTH all passed.
2026-07-24 - Arrangement Recording Target Audit
- Re-audited the Arrangement REC path after the latest MIDI passes: armed lane owns live MIDI, the Arrangement playhead owns the insertion point, and an existing real clip under the playhead wins before any new clip is created.
- Confirmed the resolver creates a next-empty lane-owned pattern at the snapped playhead/insertion point when no clip exists under the playhead, avoiding stale selected-clip hijacks.
- Cleaned a misleading indentation glitch in
refreshMidiInputLaneRouting()so the invalid-lane recording-state update reads correctly. - Existing focused tests already cover first-measure recording compensation and long Arrangement clip direct MIDI timing; gates are being rerun after this audit.
2026-07-24 - Arrangement REC Tooltip Contract
- Aligned Arrangement and Piano Roll REC tooltips with the current backend contract: armed lane owns live MIDI, the Arrangement playhead chooses the recording destination, the playhead clip wins inside that lane, and selection remains editing context.
- The tooltip now names the important consequence directly: selected clips do not steal live input.
- No MIDI timing semantics changed; this pass improves customer-facing clarity around the recording workflow.
2026-07-24 - MIDI Recording State Refresh Contract
- Closed a UI/backend drift path in MIDI recording: direct start/stop, count-in start, and count-in activation now all raise the processor recording-change flag.
- The editor consumes that flag and refreshes Arrangement REC/armed-lane visual state immediately, including the canvas recording-state overlay.
- This protects the user-facing rule that the armed lane and Arrangement playhead remain the visible truth during recording.
2026-07-24 - Automation Doorway Wording Normalized
- Normalized the active MIDI expression workflow/report helper from stale AUTO LANES wording to Automation for current user-facing receipts and guidance.
- Kept compact
AUTO/AUTO +Ndoorways where space is constrained. Explanatory workflow text now says users openAUTOfrom Piano Roll or Arrangement, or open Automation from MIDI TASKS and Settings. - Updated focused source assertions so future builds protect the new naming in MIDI expression preflight reports.
2026-07-24 - Piano Roll Automation Button Refresh
- Aligned the Piano Roll doorway with Arrangement wording: the visible control now reports
AUTOorAUTO +Nwhile longer reports/manual prose can still say Automation. - Tooltip/status copy now uses title-case Automation wording for empty/existing row states while compact clip badges remain AUTO/A# by design.
- This keeps the live refresh path aligned with the Automation doorway terminology established in the MIDI model helper.
2026-07-24 07:51 - Automation Doorway Wording Regression
- Normalized active Automation doorway, visibility, import/export verification, and run-step helper wording away from stale AUTO LANES labels while preserving compact proof badges such as AUTO: and AUTO DOORS:.
- Added regression expectations so Piano Roll Automation, Arrangement Automation, and Automation workflow summaries stay customer-facing and do not drift back to AUTO LANES wording.
2026-07-24 07:58 - Visible Pad Ownership Lookup Guard
- Fixed the editor ownership lookup so visible Drum Composer pads 1-16 return no Arrangement-lane owner instead of being clamped upward into private Lane Instrument storage.
- Private lane instrument fallback info now says Lane Instrument rather than Instrument Bay slot, keeping user-facing language aligned with the Instrument Bay direction.
- Added regression coverage that lane-owned Instrument Bay records expose Lane Instrument wording and do not leak Instrument Bay slot text.
2026-07-24 08:06 - Private Instrument Records Stop Saying Raw Instrument Numbers
- Updated private Instrument Bay backing records so non-drum lane instruments report as Lane Instrument ## instead of raw Instrument/Pad-number storage.
- Added regression coverage that direct private Instrument Bay records keep Lane Instrument wording and do not expose 'stored in Instrument 59' style implementation labels.
2026-07-24 08:11 - Private Lane Instrument Preset Names Stop Exposing Slot Numbers
- Untouched private lane-instrument records now use Init + engine name rather than raw Instrument ## preset names.
- Added closeout coverage so both info text and preset-name text avoid implementation slot numbers for private lane instruments.
2026-07-24 08:15 - MIDI Health Automation Warning Wording
- Replaced a stale MIDI Health warning that still said AUTO LANES data with current Automation wording.
- Added regression coverage so MIDI Health expression reports and top-level reports do not reintroduce the obsolete AUTO LANES phrase while compact AUTO proof badges remain allowed.
2026-07-24 08:47 - MIDI Health Automation/Latency Contract Tightening
- Rebuilt the focused MIDI Health gate and fixed the current-source contract instead of trusting stale no-build output.
- Restored the Latency checks action list inside MIDI Next Steps so high-buffer live MIDI diagnostics show concrete user actions again.
- Normalized the remaining active launch-proof bucket from AUTO LANES hands-on QA to Automation hands-on QA, keeping the current user-facing Automation naming aligned across health reports and tests.
- Updated dropped recording queue wording so expression drops tell the user to review Automation, not the old AUTO LANES label.
- Verified compile-backed MIDI_HEALTH plus focused MIDI_RECORD_TIMING and MIDI_CLOSEOUT gates.
2026-07-24 08:57 - Automation Naming Closeout Pass
- Normalized the active MIDI Health/report model from the older AUTO LANES label to the current Automation language.
- Updated MIDI Health cockpit labels to say AUTOMATION PROOF, AUTOMATION DOORS, AUTOMATION QA, and related current-language labels.
- Updated focused regression expectations so the MIDI Health gate protects Automation doorway wording while keeping compact AUTO only where intentionally space-constrained.
- Refreshed core user-facing docs that still taught the old AUTO LANES wording.
- Verification: compile-backed MIDI_HEALTH passed; no-build MIDI_RECORD_TIMING and MIDI_CLOSEOUT passed.
2026-07-24 09:05 - Arrangement Automation Target Clarity Pass
- Updated the Arrangement toolbar Automation tooltip so it reports the actual target source: selected clip, clip under playhead, first clip in lane, or selected lane fallback.
- Kept Automation routing behavior unchanged; this is a discoverability and confidence pass over an already-tested pathway.
- Cleaned one stale focused-editor label from FOCUSED AUTO ROW to FOCUSED AUTOMATION ROW so the visible language stays consistent.
- Verification: MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_RECORD_TIMING all passed.
2026-07-24 09:10 - Lane Instrument Menu Clarity Pass
- Added a disabled CURRENT receipt line to the lane instrument menu so the user can see the lane's active instrument/mixer/MIDI identity before changing anything.
- Renamed the mixer submenu to SEND TO MIXER CHANNEL and changed the routing status receipt to LANE ROUTING | Lane -> MIXER CHANNEL xx.
- No audio or routing model behavior changed in this pass; this is a customer-facing clarity improvement over the lane-owned Instrument Bay bridge.
- Verification: MIDI_HEALTH passed.
2026-07-24 09:14 - Piano Roll Preset Wording Cleanup
- Changed ambiguous Piano Roll preset categories from Pad to Atmosphere for soft/dark/air pad-style synth presets.
- This preserves the musical sound-family meaning while avoiding a false customer-facing lesson that non-drum Arrangement lanes are still owned by MPC Pads.
- MIDI record-target inspection confirmed the visible record controls still describe the armed Arrangement lane as the live input destination and treat selected clips as editing context only.
2026-07-24 09:18 - Redshift Preset Category Wording Cleanup
- Changed the Redshift starting-point preset category labels from Pad | ... to Atmosphere | ... while preserving patch names such as Velvet Fifth Pad and Vintage String Pad.
- Verified source no longer contains active synth-preset category labels beginning with Pad |; remaining Pad wording is intentional Pad-page/drum-bank language or documentation history.
2026-07-24 09:23 - Arrangement Lane Automation Tooltip Ownership Fix
- Corrected the Arrangement lane Automation badge tooltip so it no longer implies Automation is only shared PTN performance data.
- The hover copy now explains the real model: effective layered view first, then Shared PTN, Clip Local, or Lane Local as the write owner.
- This is a customer-facing MIDI closeout fix; backend automation ownership and routing behavior were unchanged.
2026-07-24 10:52 - Split Import / Lane Instrument Closeout
- Split-lane MIDI import now reserves unique private Instrument Bay slots for melodic lanes while keeping channel 10 / drum imports pad-backed on slot 0.
- Private lane instrument records now normalize legacy/default Pad labels to meaningful Init
labels so Instrument Bay reporting does not leak pad-era names. - MIDI readiness coverage was de-brittled to test stable user-facing contracts instead of stale exact report prose.
- Verified gates: MIDI_PROTOCOL, MIDI_HEALTH, MIDI_RECORD_TIMING, MIDI_CLOSEOUT.
2026-07-24 11:08 - Split Import Explicit Slot De-Duplication
- Split-channel MIDI import now de-duplicates explicitly repeated private instrument-slot requests, so two melodic lanes cannot accidentally share one lane-owned instrument during import.
- Drum imports remain intentionally pad-backed on slot 0; melodic imports stay in private Arrangement instrument slots.
- Added regression coverage: repeated explicit private slot requests are reassigned to unique private lane instruments.
- Verified gates: MIDI_PROTOCOL, MIDI_HEALTH, MIDI_RECORD_TIMING, MIDI_CLOSEOUT.
2026-07-24 11:16 - Private Instrument Label Helper Sanitized
- Lower-level private InstrumentSlot labels now hide default Pad XX backing labels instead of exposing them to lane-owned instrument workflows.
- Custom private instrument labels still survive, so real user patch/lane names remain visible.
- Added closeout coverage for default-label sanitizing, custom-label survival, and padded Pad-label sanitizing.
- Verified gates: MIDI_PROTOCOL, MIDI_HEALTH, MIDI_RECORD_TIMING, MIDI_CLOSEOUT.
2026-07-24 11:35 - Recording Queue Trust Is Explicit
- Added a model-owned Recording Queue Trust summary to MIDI Health. Clean snapshots say the recording queue is clean; any dropped note/drum or expression event now marks the take as UNTRUSTED and tells the user to retake or repair notes plus Automation before keeping it.
- Surfaced the trust line in MIDI Health UI, plain-text next steps, full health reports, and structured payloads so dropped MIDI recording events cannot hide behind raw counters.
- Regression coverage now protects both dropped-recording health paths and the serialized trust summary.
2026-07-24 11:55 - Recording Take Reliability Verdict
- Added a MIDI Health Recording take reliability summary that combines dropped recording events with SpaceAge-visible live-lag risks.
- Outcomes are intentionally blunt: CLEAN when no dropped events or visible lag risks exist, TIMING SUSPECT when latency/queue/SoundFont pool risks can affect groove even without dropped events, and UNTRUSTED when recording events were dropped.
- The verdict is now visible in MIDI Health, full text reports, next steps, serialized health payloads, and regression coverage.
2026-07-24 12:12 - Recording Take Next Action
- Added a MIDI Health Recording take action helper beside the reliability verdict, so suspect/untrusted takes now have a direct next step instead of only a diagnosis.
- Dropped events route to retake/repair guidance; buffer latency routes to lowering the audio buffer; direct queue lag routes to HOST ONLY vs DIRECT ONLY comparison; hardware output lag routes to simplifying external MIDI output; SoundFont pool refusal routes to prepared-voice repair.
- Surfaced the action in MIDI Health UI, next-step/full reports, serialized payloads, and regression coverage.
2026-07-24 12:35 - Launch Proof Next Action
- Added a first-class MIDI Health launch-proof next-action summary so the Health payload and reports say exactly which validation receipt to capture next, what evidence it needs, where to do it, and which persistent receipt key will be saved.
- Exposed the cue in the full Health report, Next Steps report, and serialized Health payload.
- Added regression coverage for the blocked launch-proof state so the report and payload cannot silently lose the action cue.
- Verified gates: MIDI_HEALTH, MIDI_RECORD_TIMING, MIDI_CLOSEOUT.
2026-07-24 12:52 - Launch Proof Human Wording
- Removed the internal nextReceiptPersistentStateKey/saveKey wording from the human-facing MIDI launch-proof next-action summary.
- The structured card can still retain the persistent receipt key internally, but copied Health reports now say the evidence in product language: receipt=Automation hands-on QA receipt.
- Added regression coverage so the launch-proof summary cannot leak the internal auto_lanes key into user-facing report text.
- Verified gates: MIDI_HEALTH, MIDI_RECORD_TIMING, MIDI_CLOSEOUT.
2026-07-24 13:06 - Automation Row Wording Pass
- Normalized current MIDI expression UI copy from automation lanes to Automation rows where the feature refers to the current CC, pitch bend, pressure, sustain, and performance-data editor.
- Kept compact AUTO/AUTOMATION labels where they are intentional doorways, but avoided promising the future full Arrangement automation-lane system by accident.
- No MIDI data semantics changed in this pass.
2026-07-24 13:24 - Arrangement Automation Empty-Lane Truth
- Fixed the Arrangement toolbar AUTOMATION tooltip/color state so an empty selected lane no longer promises that it can create the first Automation row.
- The button now stays grey and explains that the lane needs a real clip before MIDI Automation rows can be edited; clip-backed targets still show the blue active state and row count.
- Behavior is unchanged: clicking an empty-lane Automation target still gives a status message instead of mutating project data.
- Verified gates: MIDI_HEALTH, MIDI_RECORD_TIMING, MIDI_CLOSEOUT.
2026-07-25 00:12 - Hardware Template Receipt Automation Wording
- Updated the hardware-template project-draft receipt so skipped follow-up actions say Automation instead of the retired AUTO LANES wording.
- Added regression coverage to keep that receipt from leaking the old phrase back into copied/customer-facing MIDI setup output.
- Verified gates: MIDI_HEALTH, MIDI_CLOSEOUT, MIDI_RECORD_TIMING.
2026-07-25 00:34 - Lane-Owned Badge Labels Directly Guarded
- Added direct MIDI closeout coverage for Arrangement lane-owned instrument badge formatting, not just the Synth Drawer title.
- The regression now requires lane-owned labels to show Mixer Channel and MIDI Channel while rejecting Pad/private-slot/Instrument Bay storage wording.
- Verified gates: MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_PROTOCOL.
2026-07-25 00:58 - Arrangement Automation Target Resolver Unified
- Extracted the Arrangement Automation target rule into one resolver shared by the toolbar label/tooltip path and the actual Automation opener.
- The target order is now guarded directly: selected clip in lane, clip under playhead, first real clip in lane, then no-clip warning.
- Added MIDI closeout coverage so the visible doorway cannot drift from the opener behavior.
- Verified gates: MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, MIDI_PROTOCOL.
2026-07-25 01:18 - Arrangement REC Target Guard
- Added a compile-backed closeout regression for Arrangement MIDI recording target selection.
- The protected contract is now: armed lane wins live input, real clip under the playhead wins inside that lane, and a stale selected clip elsewhere cannot hijack the recording target.
- The user-facing target summary is also checked for
ARMED ARRANGER LANE,PLAYHEAD CLIP, andselection does not steal live input, so the UI language stays aligned with behavior. - Verified gates: MIDI_CLOSEOUT, MIDI_RECORD_TIMING, MIDI_HEALTH, MIDI_READINESS, MIDI_PROTOCOL.
2026-07-25 01:42 - Armed Lane Status Keeps Route Detail
- Removed two lane command/menu overwrites that replaced the detailed MIDI input route summary with a bare armed/disarmed lane-name message.
- The status line now keeps the actionable route facts after arming a lane: lane name, mixer channel, MIDI output channel, and input filter.
- Added MIDI closeout coverage for the status text so live-input arming cannot drift away from the lane-owned Instrument Bay language.
- Verified gates: MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, MIDI_PROTOCOL.
2026-07-25 02:03 - Opening Arranger Clips Preserves MIDI Route Detail
- Fixed the Arrangement clip-open workflow so its final status message preserves the detailed armed-lane MIDI route summary instead of replacing it with a generic
MIDI INPUT ARMED TO THIS LANEphrase. - Added closeout coverage that opens a real Arrangement clip and verifies the status still names the clip edit context plus lane name, mixer channel, MIDI channel, input filter, and no hidden Pad wording.
- Verified gates: MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, MIDI_PROTOCOL.
2026-07-25 02:31 - Recorded Note Receipts Preserve Route Detail
- Extended the
REC CAPTUREDstatus receipt so melodic lane recordings include the armed lane name, mixer channel, MIDI output channel, input filter, note name, start, length, velocity, and recorded MIDI channel. - Added closeout coverage that verifies a captured non-drum note receipt stays lane-owned and does not leak Pad wording.
- Verified gates: MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, MIDI_PROTOCOL.
2026-07-25 15:17 - MIDI Route Summary Centralized
- Added a shared editor route-summary helper for armed Arrangement MIDI input lanes so arming, input-channel filtering, physical input selection, output-channel changes, target summaries, and
REC CAPTUREDreceipts all speak the same truth. - The shared wording includes lane name, lane-owned instrument route, mixer channel, MIDI output channel, input filter, and named hardware input device when one is selected.
- Closeout coverage now simulates a named hardware input such as a mioXL DIN path and verifies the status does not fall back to hidden Pad/private-slot wording for non-drum lanes.
- Verified gates: MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, MIDI_PROTOCOL.
2026-07-25 15:31 - Hardware Route Receipts Use Full MIDI Route Truth
- Extended the shared MIDI route summary to include route target, hardware output device, and Hardware Passport ID alongside the existing lane, mixer, MIDI channel, input filter, and input device facts.
- Updated hardware output, Hardware Passport, route target, and Hardware Passport creation receipts in the lane MIDI routing panel so they no longer collapse into vague
assigned/internal onlymessages. - Strengthened MIDI closeout coverage with a named input device, named output device, Hardware Passport, and
Internal + Hardwareroute target so hardware-capable lane receipts cannot lose their routing context. - Verified gates: MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, MIDI_PROTOCOL.
2026-07-25 15:33 - Hardware Test Notes Keep Route Receipts
- Updated the lane
TEST HARDWAREresult status so queued/failed test-note attempts report the same full route truth as arming and recording: lane, lane-owned instrument, mixer channel, MIDI channel, input filter, input device, route target, output device, and Hardware Passport. - The success receipt now also reminds the user to listen to the external device, because SpaceAge can prove the queue attempt but cannot prove that a physical synth sounded without user/device evidence.
- Added MIDI closeout coverage for both queued and failed hardware test-note statuses so hot external-MIDI actions cannot regress into vague
queuedwording. - Verified gates: MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, MIDI_PROTOCOL.
2026-07-25 15:40 - Blocked Hardware Test Notes Also Show Route Truth
- Extended the same hardware test-note route receipt rule to the blocked/not-ready path, not only queued and failed outcomes.
TEST HARDWAREnow reports the full lane/input/output/Passport route before telling the user to check the route, so the warning itself carries useful diagnostic context.- Strengthened MIDI closeout coverage so blocked, queued, and failed hardware test-note states all reject non-drum Pad wording and preserve route details.
- Verified gates: MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, MIDI_PROTOCOL.
2026-07-25 16:05 - Lane Instrument Menu Wording Cleanup
- Cleaned up live Arrangement lane instrument menu/status wording so the user-facing flow says
Choose Instrument,New Instrument,Edit Instrument, andLoad SoundFont Into Instrumentinstead of over-teaching the backendLane Instrumentstorage term. - Kept the architecture unchanged: non-drum Arrangement lanes still own independent instrument instances, Drum Composer lanes still use Pad Banks, and the transitional private backing slots remain hidden.
- This supports the Instrument Bay direction by making the lane badge/menu teach the final mental model: choose an Instrument for a Lane, send it to a Mixer Channel, and let Pads remain the MPC-style drum surface.
- Verified gates: MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, MIDI_PROTOCOL.
2026-07-25 16:27 - Import And Instrument Records Stop Saying Lane Instrument
- Extended the Instrument vocabulary cleanup into MIDI split-import destination rows, import tooltips, SoundFont chooser titles, Piano Roll clip tooltips, paste-block receipts, and Instrument Bay record info.
- User-facing records now say
Instrument ##rather thanLane Instrument ##; tests explicitly reject the old phrase while still proving Instrument identity, mixer routing, unique lane ownership, and no hidden Pad/private-slot wording. - Internal comments and variable names can still describe lane-owned backing behavior, but live labels now follow the product model: Instrument belongs to Lane, Drum Composer belongs to Pads.
- Verified gates: MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, MIDI_PROTOCOL.
2026-07-25 16:48 - Available Instrument Label Replaces Lane-Ready
- Replaced the unused-instrument dropdown label
LANE-READY INSTRUMENT ##withAVAILABLE INSTRUMENT ##. - Updated MIDI closeout coverage so the label must use the cleaner Instrument wording and reject the old
LANE-READYphrase while still hiding Pad/private-slot details. - This keeps import, lane creation, and Instrument selection aligned around the same mental model: Instruments are available choices; lanes own whichever Instrument the user assigns.
- Verified gates: MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, MIDI_PROTOCOL.
2026-07-26 00:18 - Shared Instrument Loads Respect Lane-Owned Targets
- Added processor/editor active-target load wrappers for samples, one-shots, and SoundFonts so shared Synth Editor actions can write to private lane-owned Instrument slots without pretending the user is editing a visible Pad.
- Added a SoundFont path accessor for private Instrument slots so shared SoundFont UI helpers no longer have to reach through the Pad path for lane-owned instruments.
- Routed the shared SoundFont loader and one-shot loader through the active-target wrappers; true Pad workflows such as selected-pad sample loading and bulk pad loading remain intentionally pad-based.
- This closes another bridge-phase leak: non-drum lanes can load instrument assets from the shared editor while Pads remain the Drum Composer/MPC surface.
- Verified gates: MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, MIDI_PROTOCOL.
2026-07-26 00:44 - Sample Layer Editor Uses Active Instrument Targets
- Added InstrumentSlot-safe wrappers for sample-layer loading, clearing, reset, velocity-layer creation, layer spreading, and loaded-sample activation.
- Routed the shared layer editor plus Liftoff/Lunacy source-load controls through active-target helpers, so a lane-owned Instrument receives layer edits as an Instrument while visible Pad workflows still use Pad APIs.
- Left
Clear All Padsintentionally pad-owned because it is explicitly a Drum Pad housekeeping command. - Verified gates: MIDI_CLOSEOUT, MIDI_RECORD_TIMING, MIDI_HEALTH, MIDI_READINESS, MIDI_PROTOCOL.
2026-07-26 01:05 - Sample Layer Boundary Is Now A Closeout Regression
- Added MIDI closeout coverage for the sample-layer InstrumentSlot wrappers, not just the plain sample wrapper.
- The regression proves a visible Pad can still be edited by true Pad APIs, while InstrumentSlot layer wrappers reject visible Pad targets and only mutate private lane-owned Instrument slots.
- Covered layer load, loaded-sample activation, layer clear, velocity-layer creation, and layer spreading.
- Verified gates: MIDI_CLOSEOUT, MIDI_RECORD_TIMING, MIDI_HEALTH, MIDI_READINESS, MIDI_PROTOCOL.
2026-07-26 01:24 - Quasar Shared Editor Uses Active Instrument Targets
- Added InstrumentSlot-safe Quasar load/path/name/info/zone-count accessors and active-target editor wrappers.
- Routed Quasar Reveal Package, Build + Load, manual load, patch fingerprinting, and patch-name hydration through active-target helpers so lane-owned Quasar instruments no longer rely on visible-Pad calls from shared editor code.
- Added a closeout guard proving Quasar InstrumentSlot wrappers reject visible Pad targets.
- Verified gates: MIDI_CLOSEOUT, MIDI_RECORD_TIMING, MIDI_HEALTH, MIDI_READINESS, MIDI_PROTOCOL.
2026-07-26 01:43 - Effects Sends Stop Teaching Selected Pad
- Renamed the Effects-page send-bank copy from selected Pad wording to selected Source wording.
- The routing is unchanged: this is a presentation cleanup so drum pads and lane-owned Instrument slots can both feed shared returns without the UI teaching the deprecated Pad-proxy model.
- Verified gates: MIDI_CLOSEOUT, MIDI_RECORD_TIMING, MIDI_HEALTH, MIDI_READINESS, MIDI_PROTOCOL.
2026-07-26 02:02 - Effects Source Chooser Uses Real Target Labels
- The Effects-page send source dropdown now labels true drum targets as Drum Pads and lane-owned targets with their Instrument/Mixer/MIDI identity instead of generic
SOURCE ##text. - Added a refresh helper so this dropdown follows lane/instrument changes instead of freezing stale target names.
- Added MIDI_CLOSEOUT coverage for the source chooser so the lane-owned Instrument side cannot regress to Pad wording.
- Verified gates: MIDI_CLOSEOUT, MIDI_RECORD_TIMING, MIDI_HEALTH, MIDI_READINESS, MIDI_PROTOCOL.
2026-07-26 02:28 - Mixer Strip Titles Respect Lane-Owned Instruments
- Mixer strip headers now say
MIXER ##when a non-drum Arrangement lane owns that mixer destination, while true drum-only destinations still sayPAD ##. - Mixer strip tooltips now include the receiving lane, patch label, and MIDI channel so the strip teaches what is actually feeding it.
- Added MIDI_CLOSEOUT coverage proving lane-owned mixer strips do not regress to Pad wording while unused/drum destinations can still identify as Pads.
- Verified gates: MIDI_CLOSEOUT, MIDI_RECORD_TIMING, MIDI_HEALTH, MIDI_READINESS, MIDI_PROTOCOL.
2026-07-26 02:42 - Mixer And Reset Audio Tooltips Are Lane-Aware
- Updated the Mixer tab, Reset Audio, and Multi-Out tooltips so they describe lane instruments and drum pads together instead of implying every audible path is pad-only.
- No routing changed; this is another Instrument Bay vocabulary cleanup so top-level controls teach the same model as the Arranger and Mixer strip headers.
- Verified gate: MIDI_CLOSEOUT.
2026-07-26 03:10 - Piano Roll Instrument Selector Becomes A Lane Receipt
- When editing an Arrangement Piano Roll clip, the Piano Roll instrument selector now displays the owning lane name before the Instrument/Mixer/MIDI receipt.
- The selector remains disabled in that context, so it reports the lane-owned Instrument instead of acting like a loose top inspector.
- Added MIDI_CLOSEOUT coverage proving the receipt names the lane, includes Mixer/MIDI identity, and does not regress to Pad/private-slot/Instrument Bay slot wording.
- Verified gate: MIDI_CLOSEOUT.
2026-07-26 03:39 - Fast MIDI Record Capture Core Gate
- Added a focused
MIDI_RECORD_CAPTURE_COREself-test gate for the most confidence-critical live recording cases. - Covered long Arrangement clips, first-measure capture after count-in, and four-measure note/expression timing with preserved note length.
- This does not replace the full MIDI recording timing gate; it gives us a fast smoke test before spending minutes on the deep suite.
- Verified gate: MIDI_RECORD_CAPTURE_CORE.
2026-07-26 04:15 - Live Armed-Lane Hardware Monitoring
- Direct-device live MIDI now mirrors notes and performance expression to the armed lane's external hardware route immediately instead of waiting for the normal deferred outgoing-MIDI flush.
- The live path now obeys the armed lane's route target, forced MIDI output channel, lane instrument, and mixer channel, matching the mental model that the lane is the performance destination.
- External-only lanes no longer start hidden internal voices while monitoring or recording; Internal+External lanes still monitor internally while sending to the chosen hardware output.
- Added focused regression coverage for External-only and Internal+External live routes, including forced MIDI channel checks and a no-hidden-internal-voice assertion.
- Verified gates: MIDI_RECORD_CAPTURE_CORE, MIDI_LIVE_INPUT_HEALTH, MIDI_LATENCY_WRAP.
2026-07-26 04:38 - Two-Controller Live Hardware Source Filter Guard
- Extended the fast MIDI record-capture core gate so a lane pinned to one direct controller ignores another connected controller before external live hardware mirroring.
- The test now proves the accepted controller sends note and pitch-bend data to the lane's forced output channel while rejected-controller note/CC data never reaches the hardware output.
- Verified gate: MIDI_RECORD_CAPTURE_CORE.
2026-07-28 - Yamaha XG Source Proof Becomes Visible In MIDI Setup
- Expanded the MIDI Hardware Setup Guide's selected-template preview so locked Yamaha/XG editor profiles show their source-proof status in the app, not only in copied reports.
- The preview now separates normal setup proposals from editor-specific proof: profile state, legal/source note, primary source URL, required artifact, and unlock requirement.
- This keeps QY/MU/XG editor work honest: APPLY DRAFT can still create routing/passport scaffolding, while deep hardware editor pages remain visibly locked until official data lists and physical proof receipts exist.
2026-07-28 - Hardware Editor Parameter Import Contract
- Added the first read-only source-table row format for future Yamaha XG and other hardware editors.
HardwareEditorParameterDefinitionstores profile family, parameter id, display name, page/group, SysEx address, value range/default, encoding, source artifact/page/URL, queue-safe state, and source-verification state.HardwareEditorParameterImportPreviewvalidates JSON row arrays without sending MIDI or mutating the project, then reports whether a deep editor section can be unlocked.- Regression coverage proves verified QY rows can unlock, while unsourced rows and wrong-family MU rows stay locked with warnings.
2026-07-28 - MIDI 1.0 Remaining Launch Blocker Card
- Added a compact
midiOneRemainingLaunchBlockersSummaryto the MIDI Health model, plain-text reports, next-step reports, and serialized health object. - The summary separates software blockers, backend-ready/UI-pending rows, launch receipt progress, hardware proof, real-file proof, live-performance proof, and the MPE/MIDI 2.0 future boundary.
- The MIDI Health popup now shows the compact
BLOCKERSrow directly after the completion boundary, so the app itself answers what remains without forcing a copied report. - The MIDI Protocol Coverage popup now receives the full MIDI Health snapshot and shows the same blocker truth in its visible
BLOCKERScard instead of inventing a separate protocol-only summary. - This keeps status honest: a high backend score is not treated as launch permission until receipts and hardware/live/file proofs are green.
2026-07-28 - Automation Launch Proof Copy Block
- Added
automationLaunchProofCopyBlock()to the Automation project summary so the current top MIDI blocker has a self-contained PASS/FAIL/BLOCKED test script. - The block names the required doorways, ownership modes, edit operations, playback, import/export, pitch-bend trust, review-only setup rows, receipt evidence, current project counts, and future-work boundary.
- Serialized the block through MIDI Health and protected it with AudioSelfTest coverage so Automation proof cannot disappear into scattered prose again.
2026-07-28 - Automation Copy Report Includes Launch Proof
- The Automation popup's
COPY REPORTaction now includes the full Automation Final Editor launch-proof block. - This means a tester working inside Automation can copy the actual PASS evidence checklist without detouring through MIDI Health or Protocol Coverage.
- Safety stays cold-copy only: the report sends no MIDI, changes no routing, changes no project data, and changes no external hardware.
2026-07-28 - Health QA Copy Also Carries Automation Proof
- The MIDI Health panel's
COPY QAaction now includes the Automation Final Editor launch-proof block before the saved QA receipt ledger. - This gives the user two consistent cold-copy paths for the same proof script: Automation
COPY REPORTandCOPY QA. - Verification:
codex-build-selftest.ps1,MIDI_HEALTH,MIDI_CLOSEOUT, andMIDI_PROTOCOLpassed.
2026-07-28 - Automation Has A Focused Copy Proof Button
- The Automation panel now has a compact
COPY PROOFbutton besideCOPY REPORT. COPY PROOFcopies only the Automation Final Editor launch-proof run sheet, whileCOPY REPORTremains the fuller ownership/context report.- Safety stays cold-copy only: no MIDI is sent, no routing changes, no project data changes, and no external hardware changes.
2026-07-28 - Automation Proof Names Its Guardrail Gates
- Expanded the Automation Final Editor launch-proof copy block so it names the automated guardrails that belong with the human PASS script.
- The copied proof now calls out
MIDI_HEALTH,MIDI_CLOSEOUT,MIDI_PROTOCOL,AUTOMATION_OWNERSHIP, andAUTOMATION_RESTORE, plus the receipt keysmidi.validation.auto_lanesandmidi.closeout.qa.midi_auto_final_editor. - The text also names the available copy surfaces: Automation
COPY PROOF, AutomationCOPY REPORT,COPY QA, and MIDI HealthCOPY LAUNCH. - AudioSelfTest now asserts the guardrail wording so it cannot quietly vanish while we keep closing out MIDI.
2026-07-28 - MIDI Health Shows The Automation Proof Doors
- Added a model-owned Automation proof copy-surface summary.
- MIDI Health now renders an
AUTO PROOFrow so a tester can immediately see where to copy the focused Automation proof, the full Automation report, the finish-line QA packet, and the launch run order. - Serialized the same summary through the MIDI Health object and protected it with AudioSelfTest coverage.
2026-07-28 - MIDI Closeout Copy Doors Are Model-Owned
- Added a
currentFinishLineProofCopySurfaceSummary()to the MIDI Protocol Coverage model. - MIDI Health now renders a
COPY DOORSrow that explains which copy action serves which job:COPY QA,COPY CLOSEOUT,COPY LAUNCH, and AutomationCOPY PROOF. - The same summary is included in QA and Closeout copied text, serialized through Protocol Coverage and MIDI Health, and covered by AudioSelfTest.
2026-07-28 - MIDI Health Shows The Score Denominator Warning
- MIDI Health now renders a visible
SCORE NOTErow using the model-owned progress truth summary. - The top-level MIDI Health serialization now mirrors the scorecard clarification and progress truth summary, so copied/inspected health data explains why backend confidence and release-proof closeout can show different percentages.
- This protects the user-facing status story: a lower closeout score is evidence work becoming visible, not a backend regression.
2026-07-28 - MIDI Closeout Fast Gate Runner
- Added
tools/run-midi-closeout-fast.ps1as a single-command runner for the current MIDI closeout guardrails. - The helper can build first or skip the build, then runs
MIDI_HEALTH,MIDI_CLOSEOUT,MIDI_PROTOCOL,AUTOMATION_OWNERSHIP, andAUTOMATION_RESTOREwith tagged report files. - This reduces repeated command overhead during MIDI closeout work and gives every pass the same verification spine.
2026-07-28 - MIDI Health Shows The Fast Gate Runner
- Added a model-owned
currentFinishLineFastGateRunnerSummary()to the MIDI Protocol Coverage report. - MIDI Health now renders a
FAST GATESrow that namestools/run-midi-closeout-fast.ps1and the exact guardrails it runs:MIDI_HEALTH,MIDI_CLOSEOUT,MIDI_PROTOCOL,AUTOMATION_OWNERSHIP, andAUTOMATION_RESTORE. - The same runner summary is serialized through Protocol Coverage and MIDI Health and included in QA/Closeout copied text so the one-command proof path stays discoverable.
2026-07-28 - Plain Text MIDI Reports Carry The Handoff
- The MIDI Health next-steps text and full plain-text report now include the current finish-line proof handoff explicitly.
- This keeps copied reports, saved diagnostics, and tester handoffs aligned with the visible MIDI Health cockpit and QA receipt flows.
- AudioSelfTest now asserts the handoff appears in direct plain-text methods and serialized plain-text properties.
2026-07-28 - Copy Launch Carries The Current Handoff
- The MIDI Health
COPY LAUNCHpacket now includes the current finish-line proof handoff before the launch validation run order. - This keeps the launch-proof queue tied to the active blocker category, action doorway, proof expectation, QA receipt key, and fast verification command.
- AudioSelfTest now asserts the handoff appears in the launch run-order copy block through both direct health access and serialized health data.
2026-07-28 - Proof Surface Report Consistency
- Added the named MIDI proof copy surfaces and fast closeout runner summary to the compact Next Steps report and full MIDI Health report, matching the clipboard and serialized payloads.
- This keeps COPY QA, COPY CLOSEOUT, MIDI Health COPY LAUNCH, MIDI Health COPY PROOF, and Automation COPY PROOF visible from the same human-facing report path.
2026-07-28 - Automation Proof Summary COPY QA Naming
- Normalized the Automation proof-copy surface summary to call the finish-line QA button COPY QA, matching the actual MIDI Health button label and the core MIDI proof summary.
- MIDI Health COPY LAUNCH and MIDI Health COPY PROOF remain explicitly named because those are the two health-specific launch-proof doors.
2026-07-28 - COPY QA Uses A Model-Owned Full Packet
- Added
MidiProjectHealthSummary::midiCloseoutQaCopyBlock()so the MIDI Health COPY QA button no longer assembles its own QA text in the UI layer. - The packet now includes the MIDI 1.0 closeout QA session, Automation launch proof, and saved MIDI QA receipt ledger from one health-summary method.
- Removed the duplicated
Automation Final Editor Launch Proofheader that could appear when the UI stitched the packet together manually. - AudioSelfTest now guards the direct method and serialized
midiCloseoutQaCopyBlockpayload.
2026-07-28 - Protocol Copy Buttons Say What They Copy
- Updated the MIDI Protocol panel COPY QA tooltip to describe the full QA session packet instead of calling it only a checklist.
- COPY REPORT, COPY QA, and COPY CLOSEOUT now give immediate
COPIEDbutton feedback in the Protocol panel, matching the trust rhythm used in MIDI Health. - The protocol QA action surface helper text now names the QA session packet, receipt scaffolding, proof context, and run order.
2026-07-28 - COPY LEDGER Uses The Health Snapshot
- Added
MidiProjectHealthSummary::midiQaReceiptLedgerCopyBlock()so the MIDI HealthCOPY LEDGERbutton no longer assembles receipt text in the UI layer. - Serialized
midiQaReceiptLedgerCopyBlockwith the rest of the MIDI Health payload so clipboard, diagnostics, and tests all see the same saved QA receipt ledger. - AudioSelfTest now guards the direct method and serialized property for the
Saved MIDI QA Receiptsheader and QA receipt store model text. - Status:
tools/run-midi-closeout-fast.ps1 -ReportTag codex-health-ledger-model-packet-20260728-rerunpassed MIDI_HEALTH, MIDI_CLOSEOUT, MIDI_PROTOCOL, AUTOMATION_OWNERSHIP, and AUTOMATION_RESTORE.
2026-07-29 - QA Receipt Button Uses Model Helper Text
- Wired the MIDI Health QA receipt button tooltip to
MidiProtocolQaReceiptActionState::fromReceipt(...)for pending receipts. - The visible button can keep compact labels for layout, while the tooltip now carries the model-owned action meaning for complete/save launch-proof and QA receipt states.
- Status:
tools/run-midi-closeout-fast.ps1 -ReportTag codex-qa-receipt-tooltip-model-helper-20260729passed MIDI_HEALTH, MIDI_CLOSEOUT, MIDI_PROTOCOL, AUTOMATION_OWNERSHIP, and AUTOMATION_RESTORE.
2026-07-29 - COPY CLAIM Shows Current Public-Claim Status
- Updated MIDI Health
COPY CLAIMso its tooltip refreshes fromsafePublicMidiClaimStatusLabel()andsafePublicMidiClaimHelperText(). - The button still copies the model-owned hardware/public-claim proof review block, but now its hover text names the current claim boundary before the user clicks.
- Status:
tools/run-midi-closeout-fast.ps1 -ReportTag codex-copy-claim-current-status-tooltip-20260729passed MIDI_HEALTH, MIDI_CLOSEOUT, MIDI_PROTOCOL, AUTOMATION_OWNERSHIP, and AUTOMATION_RESTORE.
2026-07-29 02:54 - Next MIDI Proof Packet
- Added a model-owned extMidiProofToCollectPacket / extMidiProofToCollectSummary so MIDI Health can name the next exact proof item without forcing the user or developer to assemble it from the checklist, receipt queue, and route summaries.
- Exposed the packet through protocol coverage serialization and project health serialization.
- Added a MIDI Health NEXT PROOF row after MIDI LEFT so the closeout screen now points to the next evidence target directly.
2026-07-29 03:01 - Next Proof Packet In Copy Surfaces
- Wired the extMidiProofToCollectPacket copy block into MIDI launch validation run-order copy text and the next-proof review card copy text.
- Added the same next-proof summary/copy block to the MIDI project health plain-text report so validation notes carry the exact proof target, focused gate, and public-claim boundary.
2026-07-29 03:13:25 -05:00 - Receipt-aware next-proof packet
- Corrected the MIDI next-proof packet so it selects the checklist row matching the next unsatisfied launch-validation receipt, instead of continuing to display the first remaining MIDI 1.0 checklist row after a PASS receipt exists.
- Added regression coverage proving the next visible proof packet advances from automation lanes to real-controller latency after the automation proof receipt is saved as PASS.
2026-07-29 03:26:41 -05:00 - First-action summary evidence restored
- Restored backend gate and PASS-evidence wording to the Remaining MIDI 1.0 first-action summary after repairing the receipt-aware NEXT PROOF packet.
- Verification: ools/run-midi-closeout-fast.ps1 -ReportTag codex-first-action-summary-evidence-rerun-20260729 passed MIDI_HEALTH, MIDI_CLOSEOUT, MIDI_PROTOCOL, AUTOMATION_OWNERSHIP, and AUTOMATION_RESTORE.
2026-07-29 03:29:01 -05:00 - NEXT PROOF consistency flag
- MIDI Health now serializes extMidiProofMatchesLaunchReceipt and extMidiProofConsistencySummary so the UI/report layer can prove the visible NEXT PROOF target and the next saved-receipt target agree.
- Regression coverage verifies the flag stays true after a saved AUTO LANES PASS advances the receipt target to real-controller latency.
2026-07-29 03:38:22 -05:00 - Launch proof requirement summary
- Added midiLaunchValidationProofRequirementSummary so protocol coverage and MIDI Health can plainly state remaining launch-proof counts for hardware, real files, and live-performance feel, plus the next receipt's evidence requirement.
- Exposed the summary through protocol payloads, protocol plain text, MIDI Health payloads, and MIDI Health plain text so testers see what still needs hands-on proof without reading multiple rows.
2026-07-29 - Receipt-aware next proof action lines
- Added midiLaunchValidationNextProofActionLines and summary output so the MIDI health/protocol reports state the exact next user proof step, receipt key, evidence requirement, script cue, backend gate, and whether real hardware/files/live performance are required.
- The action text advances with saved PASS receipts, so AUTO proof no longer remains visible after controller-latency proof becomes the next required bucket.
2026-07-29 - Pasteable MIDI next-proof checklist
- Added MidiProjectHealthSummary::midiLaunchValidationNextProofActionCopyBlock() so the Health surface can expose a receipt-aware, pasteable checklist for the next launch-validation proof bucket. It includes the proof requirement summary, ordered action lines, receipt summary, fast-gate command, and public-claim boundary.
2026-07-29 - Cockpit card next-proof payload
- Added the next-proof action lines, summary, and copy block directly to the MIDI launch validation cockpit card. UI code can now render one authoritative cockpit payload instead of stitching next actions from sibling Health properties.
2026-07-29 - Cockpit readiness blockers
- Added structured readinessLabel, readinessBlockers, and readinessBlockerSummary fields to the MIDI launch validation cockpit card. UI can now display why MIDI launch/public claims are blocked without parsing long report strings.
2026-07-29 - Proof-type cockpit counts
- Added proofTypeCounts and proofTypeCountSummary to the MIDI launch validation cockpit card so UI can show hardware, real-file, and live-performance proof counts as badges without recomputing matrix rows.
2026-07-29 - Cockpit proof badge rows
- Added
proofTypeBadgeRowsandproofTypeBadgeCountto the MIDI launch validation cockpit payload. The rows exposehardware,realFiles, andlivePerformanceas UI-ready badge records with label, short label, satisfied/total/remaining counts, done state, status label, display label, and helper text. - This keeps the future cockpit UI from parsing free-form summaries when drawing proof badges.
2026-07-29 - Cockpit next-proof checklist rows
- Added
nextProofChecklistRows,nextProofChecklistCount, andnextProofChecklistSummaryto the MIDI launch validation cockpit payload. - The checklist gives the future UI four explicit proof steps: open target, follow script, capture evidence, and save PASS/FAIL/BLOCKED. This avoids making the editor parse long copy blocks to tell a tester what to do next.
2026-07-29 - Actionable next-proof checklist rows
- Added
doorwayId,doorwayLabel,buttonLabel, andactionablemetadata to each MIDI cockpitnextProofChecklistRowsitem. - Pending rows route to Launch Proof actions such as OPEN PROOF, VIEW SCRIPT, CAPTURE EVIDENCE, and SAVE RESULT. Completed rows route to proof review actions.
2026-07-29 - Cockpit dashboard lines
- Added
dashboardLinesanddashboardSummaryto the MIDI launch validation cockpit payload. - The dashboard combines readiness, proof badges, next proof, next action, and blockers into display-ready strings so the future UI can render a concise proof cockpit without recomputing report state.
2026-07-29 - Cockpit dashboard in plain text
- Surfaced the MIDI launch cockpit
dashboardLinesin bothtoPlainTextNextSteps()andtoPlainTextReport()so the same proof dashboard is visible outside the structuredtoVar()payload. - Added top-level
midiLaunchValidationCockpitDashboardLinesandmidiLaunchValidationCockpitDashboardSummaryfields for UI panels that do not want to crawl inside the full cockpit card. - Added regression coverage for both blocked launch-proof state and launch-proof-PASS/hardware-proof-pending state.
2026-07-29 - Next-proof checklist in reports
- Added
midiLaunchValidationNextProofChecklistLines, a display-ready checklist generated from the cockpitnextProofChecklistRowspayload. - Surfaced the checklist in both MIDI Next Steps and the full MIDI Health report so the next proof ritual is visible without drilling into structured JSON.
- Added top-level
midiLaunchValidationNextProofChecklistRows,midiLaunchValidationNextProofChecklistLines, andmidiLaunchValidationNextProofChecklistSummaryfields for UI panels.
2026-07-29 - UI Handoff Progress
- Added
midiLaunchValidationUiHandofftoMidiProjectHealthSummary::toVar()so the MIDI Health UI has a stable object for dashboard/checklist/proof-card/action rendering. - Verified with
run-midi-closeout-fast.ps1 -ReportTag codex-midi-ui-handoff-final-20260729.
2026-07-29 05:59 - MIDI Launch Proof UI Sections
- Added
midiLaunchValidationUiHandoff.uiSections, a stable render-order contract for the future Settings/MIDI Health surface. - Sections are now explicit: Dashboard, Next Proof Checklist, Proof Cards, Primary Action, and Public Claim Boundary.
- The handoff remains card-derived so the UI does not recompute or reinterpret proof state.
- Regression coverage now verifies blocked proof shows
COMPLETE LAUNCH PROOFwhile completed proof showsREVIEW LAUNCH PROOF.
2026-07-29 06:09 - MIDI Launch Public Claim Gate Handoff
- Added
midiLaunchValidationUiHandoff.claimGateso the customer-facing MIDI Health screen can render public-claim status as one explicit card. - The claim gate carries status, helper text, ship-state summary, blocker summary, and a
CLAIMS LOCKED/CLAIMS UNLOCKEDwarning label. - Regression coverage now pins both important current states: launch proof pending and launch proof PASS with hardware proof still pending.
2026-07-29 06:22 - MIDI Launch Proof Progress Handoff
- Added
midiLaunchValidationUiHandoff.proofProgressas the single UI source for launch-proof percent, receipt counts, remaining-proof wording, next proof bucket, and proof-type badges. - The Settings/MIDI Health page can now render a proof progress card without scraping dashboard strings or full cockpit rows.
- Regression coverage pins the BLOCKED 0% state and the PASS 100% / hardware-proof-pending state.
2026-07-29 06:31 - MIDI Launch Next Action Panel Handoff
- Added
midiLaunchValidationUiHandoff.nextActionPanelso the future MIDI Health UI has one stable card for the next proof action. - The action panel carries button label, doorway, proof bucket, artifact, minimum PASS evidence, script cue, action copy, run-order summary, and the already-derived action surface.
- Regression coverage pins the pending-proof state to
COMPLETE LAUNCH PROOFand the completed-launch-proof state toREVIEW LAUNCH PROOF.
2026-07-29 06:49 - MIDI Launch Hardware Proof Gate Handoff
- Added
midiLaunchValidationUiHandoff.hardwareProofGateas the dedicated UI card for hardware proof readiness. - The card reports the Hardware Passport doorway, proof checklist counts, release-ready flag, first-needed proof action, and REAL HARDWARE PROOF REQUIRED warning copy when public claims remain locked.
- Regression coverage now pins this card in both launch-proof-pending and launch-proof-PASS / hardware-proof-pending states.
2026-07-29 - Beta Roadblocks Promoted Into Health Data
- Promoted the beta roadblocks list into a serialized betaReadinessGate on MidiProjectHealthSummary.
- This gives future Settings/Health UI a clean object with blocker rows, status labels, next actions, source docs, and the first practical blocker.
- No app build was produced; validation uses the fast MIDI closeout gate after code changes.
Validation: compile-backed MIDI_HEALTH passed after the beta readiness gate change; fresh-binary MIDI_CLOSEOUT and MIDI_RECORD_TIMING no-build gates also passed on 2026-07-29.
2026-07-29 - Instrument Audio QA Checklist Added To Beta Readiness
- Added an instrumentAudioQaChecklist to the serialized beta readiness gate.
- The checklist names every current public synth, sampler, drum lab, and asset-backed path that needs public-build listening proof.
- MIDI_HEALTH now asserts the checklist exists, has at least 17 rows, marks the rows as needing public-build audio QA, and includes minimum pass evidence.
2026-07-29 - Instrument Bay Lane-Independence Checklist Added To Beta Readiness
- Added instrumentLaneIndependenceChecklist to the serialized beta readiness gate.
- The checklist records which lane-owned Instrument contracts already have automated MIDI_CLOSEOUT proof and which architectural item remains open.
- Superseded 2026-07-31: the explicit 16-lane beta ceiling is fully covered by 16 independent private Instrument sources and maximum-capacity round-trip proof. An unbounded registry is post-beta scalability work.
2026-07-29 - UI Readability Checklist Added To Beta Readiness
Beta readiness now exposes a UI readability checklist alongside the instrument audio QA and Instrument Bay lane-independence checklists. The rows cover default viewport sweep, Synth Engine pages, Effects editors, Settings/MIDI pages, automation popups, Arrangement lane badges, Mixer strips, and startup/Library dialogs.
This does not change MIDI routing or DSP. It makes the visual polish blocker inspectable from the same project health surface that already reports MIDI proof, hardware proof, and beta blockers.
2026-07-29 - Arrangement / Automation UX Checklist Added To Beta Readiness
Beta readiness now exposes a structured Arrangement/Automation UX checklist. It covers loop-start transport behavior, playhead/timeline visual sync, live automation immediacy, automation delete truth, FIT/O/overview behavior, long clip previews, Section-marker-plus-clip group moves, and Arrangement-page MIDI recording into armed lanes.
This keeps the beta gate honest: automated closeout tests can prove many contracts, but the ship decision still needs a hands-on musical pass where the visible Arrangement Canvas and the audible output agree in real time.
2026-07-29 - Save / Load / Recovery Checklist Added To Beta Readiness
Beta readiness now exposes a structured save/load/recovery checklist. It covers startup load choices, Library save/load behavior, tempo/loop/playhead restoration, lane Instrument and mixer routing restoration, patch dirty-state honesty, automation state, missing-asset relink repair, and large-project progress feedback.
This does not change project serialization today; it makes the trust boundary visible. A beta build should not be called ready until a multi-lane project survives these reopen paths with the visible Arrangement, Mixer, Synth Engine, and audible playback all agreeing.
2026-07-29 - Render / Export Checklist Added To Beta Readiness
Beta readiness now exposes a structured render/export checklist. It covers whole-song WAV render length, loop/selection render boundaries, stem render routing and filenames, MIDI export timing/channels/automation, automation in audio render, tail/effect capture, asset-backed render paths, and progress feedback.
This keeps render trust connected to the same project-health surface as MIDI and beta blockers. A project can feel good during playback and still fail the product promise if the exported file does not match the visible Arrangement Canvas.
2026-07-29 - Packaging / Legal Checklist Added To Beta Readiness
Beta readiness now exposes a structured packaging/legal release checklist. It covers the third-party code ledger, GPL/incompatible-license avoidance, factory asset rights, embedded splash and marketing assets, installer/runtime packaging, version/app naming, public release claims, and privacy/network behavior.
This keeps MIDI and product claims aligned with evidence. A public beta should not inherit legal or packaging uncertainty just because the musical workflow is exciting.
2026-08-08 - MIDI Health Opens The Test Before Capturing The Receipt
- Corrected the main MIDI Health action so a pending launch-proof item opens the customer surface where that test is actually performed.
- Receipt-aware routing now covers Automation, controller latency/live timing, external expression, RPN/NRPN maps, SysEx restore, MIDI file round trips, and project round trips.
- The separate proof action remains the only place that saves PASS, FAIL, or BLOCKED evidence. This prevents the interface from conflating test execution with evidence capture.
- The next real hardware boundary is unchanged: use a physical controller for measured latency and recording proof, then save a build-scoped receipt with the observed result and evidence reference.
- Verification: fresh
MIDI_HEALTHPASS, followed by no-buildMIDI_CLOSEOUTPASS andSETTINGS_ROOT_LAYOUTPASS.
2026-08-08 - Physical-Controller Evidence Is Now Reproducible
- Controller-latency receipts prompt for controller, connection path, audio buffer, measured/observed latency, compensation/pinning, and timing/recording result.
- Live-timing receipts prompt for controller, connection path, audio buffer, tempo/scenario, monitor feel, and recorded placement.
- PASS is blocked until every required line contains an observation. An untouched template cannot satisfy FAIL or BLOCKED evidence requirements either.
- The receipt template is exposed in structured output so MIDI Health and future reporting surfaces use one authoritative contract.
- Verification: fresh
MIDI_QA_RECEIPTPASS; final-binaryMIDI_HEALTH,MIDI_CLOSEOUT,MIDI_RECORD_TIMING, andMIDI_LIVE_INPUT_HEALTHPASS.
2026-08-08 - Launch Proof Promoted Into The Visible Cockpit
- Promoted the launch card, proof state, verdict, run identity, evidence detail, and next action into the first nine MIDI Health rows.
- Added a compile-time visibility guard so release-critical rows cannot drift below the 36-row viewport unnoticed.
- Corrected RPN/NRPN launch routing from MIDI Maps to MIDI Patch.
- Changed the public-wording launch action from the premature
REVIEW PROOFlabel toCAPTURE REVIEW. - Corrected inspect-only import truth reporting: optional adoption flags cannot make an inspect-only request claim that it mutates the project.
- Verification passes:
MIDI_QA_RECEIPT,MIDI_HEALTH,MIDI_CLOSEOUT,SETTINGS_ROOT_LAYOUT,MIDI_RECORD_TIMING,MIDI_PROTOCOL, andMIDI_IMPORT_TRANSACTION(inspectTruth=1).
2026-08-08 - Incomplete Receipt Forms Preserve Entered Evidence
- MIDI Health now retains a temporary draft when receipt validation rejects missing fields.
- The warning identifies the missing fields and returns the musician to a repopulated form.
- Restored state includes result, evidence, reviewer, references, blocked reason, and all Automation proof selectors/indexes.
- Cancel remains an intentional discard; no invalid receipt is appended to the ledger.
- Verification passes: fresh
SETTINGS_ROOT_LAYOUT, plusMIDI_QA_RECEIPT,MIDI_HEALTH, andMIDI_CLOSEOUT.
2026-08-08 - MIDI Health Accessibility And Readability Closed
- MIDI Health now exposes cockpit status, next action, saved proof count, verdict, and action guidance through its accessibility description.
- Accessibility clients receive a structure-change event whenever the health snapshot or receipt state changes.
- The title and ten commands occupy separate rows; command widths are derived from available space rather than fixed right-edge offsets.
- Critical status rows increased from 18 to 20 pixels, with larger label/value type and less aggressive text compression.
- The panel is taller, while the existing Settings scroll shell keeps every control reachable at smaller supported viewports.
- Verification passes: fresh SETTINGS_ROOT_LAYOUT, then PRIMARY_UI_VISUAL_STATE, MIDI_QA_RECEIPT, MIDI_HEALTH, and MIDI_CLOSEOUT.
- Remaining release boundary: physical-controller evidence on the exact candidate build; software presentation is no longer the blocker here.
2026-08-08 - MIDI Health Presentation Is Now Regression-Protected
- Production and tests use the same command-row geometry helper.
- The Settings gate covers ten buttons at full and compact widths, including containment, six-pixel gaps, consistent height, and minimum usable widths.
- Production and tests use the same accessibility-summary builder.
- The gate requires cockpit, next action, launch proof, verdict, and action guidance to remain semantically exposed.
- Fresh SETTINGS_ROOT_LAYOUT plus PRIMARY_UI_VISUAL_STATE, MIDI_HEALTH, and MIDI_CLOSEOUT pass.
- The next MIDI release boundary remains physical-controller evidence rather than another known software implementation gap.
2026-08-08 - MIDI Import And Export Popups Share Escape Dismissal
- MIDI export preview, MIDI import review, and MIDI import receipts now use the shared focus-aware callout dismissal contract.
- Each panel publishes an accessible title and explains that Escape cancels or closes it.
- Clicking outside remains JUCE callout behavior; guarded package-import confirmation retains its specialized protection.
- Fresh
PRIMARY_UI_VISUAL_STATEreportspopupEscape=1;AUTOMATION_EDITOR_LAYOUT,SETTINGS_ROOT_LAYOUT, and completeMIDI_CLOSEOUTpass. - Remaining MIDI beta boundary is still physical-controller and real-file evidence on the exact candidate build, not another known popup implementation gap.
2026-08-08 - Full Closeout Now Includes Every Lane Workflow Receipt
- The complete MIDI closeout verdict now requires lane Instrument presentation, Arrangement Add Clip placement, production clip preview, Mixer reassignment, and MIDI policy round-trip presentation.
- The clip-preview receipt crosses real stored pattern data through
refreshChain()into the Arrangement canvas and proves both temporal endpoints survive dense reduction. - The strengthened closeout run passes with every new field reporting
1. - Focused Arrangement overview/visual gates and the factory-instrument default sweep also pass.
- Remaining MIDI beta boundary is physical-controller, real-file, and musician-perception evidence on the exact candidate build.
2026-08-10 - Focused MIDI Contracts Promoted Into Release Convergence
Ten existing focused contracts are now first-class supporting release gates: MIDI Health/latency accounting, simultaneous-input health, the MIDI 1.0 protocol foundation, RPN setup queue, guarded control queue, clock/transport sync policy, MIDI file learn/persistence, SysEx capture, SysEx restore responses, and transactional MIDI import. All ten pass against the current Release self-test binary.
This is stronger engineering evidence, not a claim that physical MIDI QA is complete. USB and 5-pin DIN latency, simultaneous real controllers, external hardware acceptance, SysEx device dialects, and cross-DAW real-file exchange remain assigned in Resources/ReleaseHumanEvidencePlan.json.
2026-08-10 - MIDI Hardware Guidance Uses Readable Scroll Depth
- Hardware Setup scenario cards now use taller rows and tested typography floors rather than shrinking long setup guidance into tiny text.
- Selected-scenario routing, template evidence, action safety, and proof language remain visible through the existing vertical Settings scroll shell.
- MIDI Sync Preflight raises trust and next-action receipts while preserving the compact count matrix.
SETTINGS_ROOT_LAYOUT,SETTINGS_DESTINATION_REACHABILITY,PRIMARY_UI_VISUAL_STATE,AUTOMATION_EDITOR_LAYOUT,MIDI_HEALTH, and completeMIDI_CLOSEOUTpass.- Remaining MIDI release boundary is unchanged: real USB and 5-pin DIN controllers, simultaneous devices, external hardware response, and real SysEx/file receipts on the exact candidate build.
2026-08-12 - Realtime Performance Filter Publication Boundary
- Replaced audio-thread parameter lookup and
setValueNotifyingHost()calls for mapped performance cutoff with fixed per-pad atomic overrides. - Audio rendering consumes the newest mapped CC or pitch-wheel cutoff in the same block, while host and listener publication is coalesced onto the existing background control queue.
- The callback consumes its block-change mask at block close and requests message-thread publication; no parameter or host/listener work executes on the realtime thread.
- Per-pad active serials make the latest gesture win across adjacent blocks, prevent an older publication from clearing a newer value, and suppress duplicate notification when a coalesced request has already settled.
- Added release gate
M02-B Realtime performance-filter response and deferred host publicationand focused selectorREALTIME_PERFORMANCE_FILTER. - Focused proof floods one block with 128 CC values, then places different values in two adjacent blocks before publication: immediate cutoff reaches the expected latest value, exactly one post-block notification publishes it, and a second drain emits no duplicate.
- The complete broad application self-test passes the corrected immediate-DSP/deferred-host contract together with MIDI recording, hardware scheduling, project lifecycle, and audio export.
- Physical USB and 5-pin DIN feel, final-value settling, and measured latency remain human evidence items for the exact candidate build.
2026-08-17 - Full Application Verification After Startup Recovery
- The complete Release
SampleSquadAudioTestsuite finished with exit code 0 after the standalone startup-recovery work. - Coverage passed across native synthesis, shared effects routing, Arranger movement, first-measure and long-clip MIDI recording, simultaneous channel-aware input, hardware MIDI scheduling and panic safety, MIDI import/export, project lifecycle, recovery, full-song WAV export, and lane stems.
- The factory-groove uniqueness sweep is now explicitly timed instead of appearing to hang: all 192 combinations completed in 10189.8 ms on this machine.
- The Arranger movement workflow is now independently selectable through
tools/run_tests.ps1 -Gate ARRANGEMENT_MOVE_WORKFLOW; its focused proof passed selection, long-distance movement, undo/redo, refusal safety, selection authority, round-trip persistence, and edge scrolling. - Remaining release evidence is physical and human-facing: real USB/DIN latency and recording feel, simultaneous-controller evidence, external-device/SysEx acceptance, cross-DAW file inspection, and candidate-build UI review.