2026-07-19 - Owner Surface Closeout Rows
2026-07-31 - Explicit Arrangement Record Targets Stop At Their Playable End
An explicit selected clip is now the authoritative recording destination. Note, drum, and expression events outside clip.start .. clip.start + clip.length * clip.repeats are rejected instead of falling through to another clip or extending shared Pattern data. Valid repeated-clip positions still map through the clip source range, and the existing tiny pre-roll clamp still protects first-measure capture. Rejections increment the existing dropped-note/drum or dropped-expression diagnostics.
Deterministic coverage uses a 16-step selected clip, an overlapping non-target clip, and a longer linked clip on another lane. Step-20 note-on, note-off, drum, and CC11 input must enqueue no recording mutation, leave the shared Pattern empty, increment the appropriate diagnostics, and produce no linked-lane playback leak.
Focused verification: rebuilt SampleSquadAudioTest only; MIDI_RECORD_TIMING, MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_RECORD_CAPTURE_CORE, PLAYBACK_COUNTIN_BOUNDARY, REALTIME_RECORDING_NOLOCK, MIDI_RESTORE_RECORDING_BOUNDARY, and SPACEAGE_ARRANGER_EDIT_CONTRACT_ONLY passed. No customer executable was built.
2026-07-29 - Recording Take Badge Is Model-Owned
MidiProjectHealthSummary now owns the recording-take badge state used by MIDI Health and copied review cards. Dropped recording events produce RETAKE; visible timing risks produce TIMING SUSPECT; otherwise the badge reports TAKE CLEAN. This is status/reporting only: it sends no MIDI, changes no routing, and does not mutate recorded notes or automation.
2026-07-28 - Automation Proof Summary Includes MIDI Health COPY PROOF
The Automation proof-copy summary now names MIDI Health COPY PROOF alongside Automation COPY PROOF, Automation COPY REPORT, COPY QA, and MIDI Health COPY LAUNCH. This keeps Automation-specific proof language aligned with the MIDI Health proof buttons.
2026-07-28 - Public Claim Copy Includes Handoff And Gate
The hardware/public-claim proof review packet now includes currentFinishLineProofHandoffSummary() and currentFinishLineFastGateRunnerSummary(). This keeps public wording review tied to the current closeout blocker and the exact fast gate rather than relying only on ship-state labels.
2026-07-28 - Explicit Proof Copy Door Names
The proof-copy surface summary now names MIDI Health COPY LAUNCH, MIDI Health COPY PROOF, and Automation COPY PROOF separately. This prevents two different proof buttons from sounding like the same action in copied QA/report text.
2026-07-28 - Focused Proof Card Handoff
MidiProjectHealthSummary::midiLaunchValidationNextProofReviewCardCopyBlock() now appends the current MIDI proof handoff before the launch validation summaries. The focused copy packet no longer depends on adjacent UI context to explain what remains, where to verify it, or which fast gate to run.
2026-07-28 - QA Receipt Handoff Context
The QA receipt UI now prepends or appends currentFinishLineProofHandoffSummary() to receipt review and receipt-entry text. This is a clarity-only UI pass; receipt validation remains append-only and MIDI-safe.
Focused verification: tools/run-midi-closeout-fast.ps1 -ReportTag codex-recording-take-trust-badge-20260729-rerun passed the MIDI fast closeout gate set.
2026-07-28 - Cockpit Handoff Wiring
Added handoffSummary to MidiProjectHealthSummary::cockpitNextActionSurface(), included it in cockpitNextActionSurfaceSummary(), and surfaced it in the MIDI Health FIX NEXT tooltip. Tests now assert that the cockpit action surface and summary both carry the current MIDI proof handoff.
2026-07-28 - Proof Handoff Surface
MIDI Health now exposes currentFinishLineProofHandoffSummary, including the current blocker family, action button, route/proof status, QA receipt id, next receipt action, and the fast closeout gate command. This is a customer-facing QA/control-room clarity improvement, not a MIDI behavior change.
2026-07-28 - Last Recorded Event Source Proof
MIDI Health last-recorded proof now carries the source identity from the recording queue to the committed event receipt. Notes, drum hits, and expression events can identify host/plugin MIDI versus physical direct input slot/generation, which makes two-controller or USB-versus-DIN testing less opaque.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_RECORD_TIMING, MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_PROTOCOL passed.
2026-07-28 - Recording Proof Front-Loaded In MIDI Health
MIDI Health now shows the recording trust block near the top of the visible summary: live input, recording owner, destination proof, recording target proof, last-recorded event proof, capture policy, target boundary, queue trust, take trust, take action, and take evidence. This makes the post-take question visible immediately instead of hiding it below launch/protocol rows.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_RECORD_TIMING and MIDI_HEALTH passed.
2026-07-28 - Last Recorded Event Proof
MIDI Health now carries liveMidiLastRecordedEventProofLabel, generated by the processor from the latest committed MIDI recording event. It can report a note, drum hit, or expression/CC event and is included in next steps, full reports, serialized Health, and the visible MIDI Health summary. Stale last-recorded fields are cleared together so the proof label reflects the latest event type instead of a leftover prior capture.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_RECORD_TIMING, MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_PROTOCOL passed.
2026-07-28 - MIDI 1.0 Completion Boundary
MIDI Health now exposes midiOneCompletionBoundarySummary(), a clearer status line that separates software/backend closeout from human proof and future roadmap exclusions. This is meant to stop completion percentages from masquerading as launch permission. The same boundary is serialized, printed in next steps/full reports, and included in the public-claim proof copy block.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_PROTOCOL passed.
2026-07-28 - Recording Take Fix-Next UI Fallback
MIDI Health now has a UI-level fallback that maps source=recordingTake to the Automation/Retake doorway even if future backend refactors omit the explicit doorwayId. This is intentionally defensive: the backend already serializes the doorway, but the button should stay useful if metadata drifts.
Focused verification: current build state was already compiled; MIDI_HEALTH and MIDI_CLOSEOUT passed.
2026-07-28 - Recording Take Cockpit Priority
MIDI Health now treats dropped recording events as a first-class cockpit problem. When note/drum or expression recording events are dropped, the visible severity becomes RECORDING, the action button becomes RETAKE, and the action surface carries the same recording take review copy block used by reports. This keeps a bad take from being visually buried behind latency or launch-proof status.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_PROTOCOL passed.
2026-07-28 - Recording Take Card In Health Reports
MIDI Health next steps and the full MIDI Health report now include the full recordingTakeReviewCopyBlock(). This deliberately surfaces take trust through existing COPY STEPS and COPY REPORT paths instead of adding another cramped title-row button.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_PROTOCOL passed.
2026-07-28 - Recording Take Review Copy Block
MIDI Health now exposes recordingTakeReviewCopyBlock(), a focused recording-trust handoff. It combines live recording ownership, capture policy, target boundary, queue trust, take reliability, next action, evidence, troubleshooting, and live-timing boundary into one model-owned block. This keeps "was this take trustworthy?" tied to backend diagnostics instead of scattered panel copy.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_PROTOCOL passed.
2026-07-28 - MIDI Health Copy Claim Door
MIDI Health now has a focused COPY CLAIM button that copies hardwareProofReviewCopyBlock(). This gives testers and future support/marketing review a smaller doorway than COPY REPORT for the exact boundary between "software MIDI foundation is strong" and "do not overstate real hardware/interchange proof until receipts exist."
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH and MIDI_CLOSEOUT passed.
2026-07-28 - Hardware Public-Claim Proof Copy Block
MIDI Health now exposes hardwareProofReviewCopyBlock(), a focused copy block for the boundary between software MIDI readiness and hardware/public-claim proof. It pulls together safe wording, ship state, hardware gaps, checklist state, first needed proof, run order, action checks, and the explicit no-send safety boundary.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_PROTOCOL passed.
2026-07-28 - Model-Owned Launch Proof Copy Block
MIDI Health now owns the next-proof review-card copy block through midiLaunchValidationNextProofReviewCardCopyBlock(). The UI no longer needs to assemble proof text from raw properties; it asks the model for the focused copy payload. The block includes the review card, run-order summary, next receipt summary, and action queue summary.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_PROTOCOL passed.
2026-07-28 - MIDI Health Copy Proof Door
MIDI Health now has a focused COPY PROOF button for the next launch-proof review card, plus FIX NEXT tooltip coverage for the same readable proof text. This keeps the tester path small: copy the run order when planning a whole launch pass, copy the proof card when working the current next item.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH and MIDI_CLOSEOUT passed.
2026-07-28 - Launch Proof Action Review Card
MIDI QA/launch receipt action states now expose reviewCardText, a multiline plain-English card for the next action. This gives future buttons, support copies, test panels, the MIDI Health cockpit action surface, and MIDI Health plain-text reports a calmer surface than raw key/value summaries while retaining proof bucket, evidence, script, backend gate, and safe/no-MIDI boundaries.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_PROTOCOL, MIDI_QA_RECEIPT, and MIDI_CLOSEOUT passed.
2026-07-28 - MIDI Health Copy Launch Door
MIDI Health now has a dedicated COPY LAUNCH button. It copies the launch-validation run-order block directly, avoiding the too-large full health report when the user/tester only needs the remaining launch proof ritual.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_PROTOCOL passed.
2026-07-28 - Launch Run Order Copy Block
MIDI Health now exposes a single midiLaunchValidationRunOrderCopyBlock, also mirrored on the launch cockpit card as runOrderCopyBlock. It is intended for support/testing handoff: one copyable chunk that says which launch proof bucket comes next, what receipt key it saves, what evidence is required, and what test script should be run.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_CLOSEOUT, MIDI_PROTOCOL, and MIDI_QA_RECEIPT passed.
2026-07-28 - Launch Run Order Enforced In Next Steps
The MIDI Health next-steps report is now test-enforced to include the launch-validation run order, the first proof bucket, receipt key, and proof script cue. The older remaining queue remains available, but the primary tester experience is now an ordered run plan.
Focused verification: rebuilt SampleSquadAudioTest; focused health/closeout gates rerun.
2026-07-28 - Launch Validation Run Order
The MIDI launch proof system now exposes an ordered run plan through protocol coverage, MIDI Health, the cockpit card, copied reports, and the visible health summary row. This gives the tester a practical sequence with receipt key, proof artifact, proof needs, minimum PASS evidence, and test script cue for each remaining proof bucket.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_QA_RECEIPT, MIDI_HEALTH, MIDI_PROTOCOL, and MIDI_CLOSEOUT passed.
2026-07-28 - Launch Proof Dialog Names The Test Ritual
The Save MIDI Launch Proof dialog now derives its instruction copy from MidiProtocolQaReceiptActionState::fromReceipt(), so the evidence-entry moment names proof artifact, proof needs, test script, and minimum PASS evidence. This keeps the launch proof workflow from becoming a scavenger hunt across MIDI Health, reports, and the receipt form.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_QA_RECEIPT, MIDI_HEALTH, and MIDI_CLOSEOUT passed.
2026-07-28 - MIDI Health Proof Card Shows Script
The MIDI Health popup now exposes the launch-proof test script in the visible PROOF CARD row and in the FIX NEXT tooltip path. This reduces the gap between backend receipts and the human testing ritual: the tester can see what to do before entering the Launch Proof dialog.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_PROTOCOL passed.
2026-07-28 - Launch Next Action Shows Test Script
The compact MIDI launch validation next-action summary now carries the proofScriptCue from the cockpit card. This keeps the visible/readable status line aligned with the deeper launch receipt objects: a tester sees the next bucket, proof artifact, minimum evidence, proof needs, exact test script, doorway, and receipt name in one place.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_PROTOCOL, MIDI_CLOSEOUT, and MIDI_QA_RECEIPT passed.
2026-07-28 - Launch Receipts Carry Test Script Cues
MIDI launch validation proof rows now include proofScriptCue everywhere the proof appears. The launch matrix, remaining checklist, action queue, next receipt, cockpit proof card, and copied report surfaces now tell the tester not only what proof is needed, but what practical test to run.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_QA_RECEIPT, MIDI_HEALTH, MIDI_PROTOCOL, and MIDI_CLOSEOUT passed.
2026-07-28 - Lane Local Label Cleanup
Active Automation/report copy now keeps the third owner named as Lane Local, matching the visible owner selector and avoiding the ambiguous shorthand Lane or Lane data. This touches release wording, Automation editor plan text, doorway checklist labels, and the popup helper line.
Focused verification: rebuilt SampleSquadAudioTest; AUTOMATION_OWNERSHIP, MIDI_HEALTH, MIDI_PROTOCOL, and MIDI_CLOSEOUT passed.
2026-07-28 - Launch Validation Receipts Name Proof Needs
MIDI launch validation receipts now expose proofNeedsSummary everywhere the next proof target appears. A tester can see at a glance whether the next receipt is software/customer review only, hardware/device proof, real file/project proof, live-performance feel/timing proof, or some combination.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_QA_RECEIPT, MIDI_HEALTH, MIDI_PROTOCOL, and MIDI_CLOSEOUT passed from the fresh local closeout executable.
2026-07-28 - Automation Ownership Uses Visible UI Names
The active MIDI closeout surfaces now use one vocabulary for Automation ownership: Shared PTN, Clip Local, and Lane Local. This keeps health/report copy, preflight text, and tests aligned with the visible UI instead of mixing in old developer labels like Lane Data.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_PROTOCOL, AUTOMATION_OWNERSHIP, and MIDI_CLOSEOUT passed from the fresh local closeout executable.
2026-07-28 - Record Timing Gate Uses Fresh Build Output
The MIDI record-timing focused gate now has flushed scenario checkpoints, so a future timeout tells us which MIDI timing proof was last completed. The direct-slot/timestamp log line was also split so the proof output stays readable.
Important process correction: tools/codex-build-selftest.ps1 builds into outputs/build-local-midi-closeout. Running the stale build-codex executable can falsely suggest timing hangs because that artefact may not contain the current code.
Focused verification: rebuilt SampleSquadAudioTest; MIDI record timing, MIDI Health, MIDI record capture core, and the MIDI closeout playback/automation slice passed from the fresh build output. tools/run_tests.ps1 -NoBuild also passed MIDI_RECORD_TIMING, MIDI_PROTOCOL, MIDI_READINESS, and MIDI_LIVE_INPUT_HEALTH against the same fresh executable.
2026-07-28 - Automation Door Label Parity
Automation discoverability is now consistent between the Piano Roll button label, Arrangement compact label, shortcut cheat sheet, and in-app shortcut popup. Arrangement remains compact as AUTO; Piano Roll reads AUTOMATION; both are documented as the same editor.
The generated Automation workflow helper now uses the same words, which restores the MIDI expression preflight report contract instead of letting a stale help phrase drift out of sync.
Focused verification: rebuilt SampleSquadAudioTest; MIDI Health and the MIDI closeout playback/automation slice passed.
2026-07-28 - Piano Roll Automation Door Uses Plain Label
The Piano Roll Automation button now uses the full AUTOMATION label, preserving row counts as AUTOMATION +N. This aligns Piano Roll with Arrangement language and makes the Automation doorway less hidden.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH passed.
2026-07-28 - Partial MIDI Import Refreshes Automation State
MIDI recording/monitoring ownership was rechecked against the armed Arrangement lane contract. The live path still routes through the armed lane before monitoring, note recording, or expression recording. A partial MIDI import clear path now refreshes affected Automation lanes after erasing expression ranges, avoiding silent raw-vector edits that could leave stale live controller state.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_PROTOCOL and MIDI_RECORD_CAPTURE_CORE passed.
2026-07-28 - Automation UI Uses Live-State Refresh
The Automation popup's direct transform/apply path now refreshes the live audible state after it rewrites an automation lane, matching the backend delete/replace cleanup contract. Delete and clear messages now say the live output was refreshed, which is more truthful than always saying reset-to-neutral when remaining automation may be reasserted.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_CLOSEOUT playback/automation slice and MIDI_HEALTH passed.
2026-07-28 - Automation Delete Refreshes Live State
Automation edit/delete operations now reconcile the live audible state against the lane data that remains after the edit. Point deletes, bulk deletes, range deletes, and empty lane replacement all reset to neutral when the lane is empty, or reapply the latest remaining lane value when it is not. This closes a trust gap where deleted visible automation could leave a stale controller value active in playback/monitoring state.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_CLOSEOUT playback/automation slice passed.
2026-07-28 - Live Recording Target Boundary
MIDI Health now has an explicit recording-target boundary summary. It says the armed Arrangement lane owns incoming MIDI, selection is edit focus only, and the playhead or explicit clip resolves where the take lands. The same line also blocks the no-armed-lane case instead of implying a hidden target. The MIDI Health panel now displays the same contract as REC BOUNDARY beside the recording proof/trust rows.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH and MIDI_RECORD_CAPTURE_CORE passed.
2026-07-28 - Automation Door Proof Visible In MIDI Health
The MIDI Health panel now shows AUTOMATION DOOR PROOF, using the same doorway-proof summary already exposed in reports. This keeps the visible cockpit aligned with the backend proof: door count, direct editors, safe doors, QA doors, and MIDI-sending status are no longer hidden in copied reports only.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH passed.
2026-07-28 - Live Timing Boundary Visible In MIDI Health
The MIDI Health panel now shows TIMING BOUNDARY, using the existing live timing trust-boundary summary. This keeps the visible cockpit honest about the difference between recorded MIDI placement and felt live-monitoring latency.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH passed.
2026-07-28 - Automation Doorway Proof Summary
Automation now has a compact doorway-proof summary in the MIDI model. It counts enabled doorways, direct editor routes, safe doors, QA doors, and any MIDI-sending routes, then explains the launch proof expected for empty or active projects. This is meant to keep Automation visible and testable without falsely claiming full always-expanded Arrangement automation lanes.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_PROTOCOL, and the MIDI_CLOSEOUT automation/protocol slice passed.
2026-07-28 - Live Timing Trust Boundary
MIDI Health now has an explicit live timing trust-boundary summary. It tells the user that recorded MIDI placement and felt live-monitoring latency are separate problems: timeline compensation can fix where notes land, but it cannot remove monitoring lag caused by buffers, drivers, interfaces, controller paths, SoundFont voice starts, external hardware, or duplicate host/direct routing.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH and MIDI_PROTOCOL passed.
2026-07-28 - Source-Pinned Multi-Controller Evidence
MIDI Health now explicitly distinguishes a source-pinned lane from an ambiguous multi-controller setup. If multiple physical MIDI inputs are open but the armed lane is pinned to one input device, the take proof and latency action lines say so instead of implying all two-controller setups are suspect.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_RECORD_TIMING passed.
2026-07-28 - Playhead Clip Is The Visible Recording Target
MIDI recording target summaries now prefer the actual armed-lane clip under the playhead over stale caller/editor pattern context. A closeout harness shadowing bug was also fixed so private Instrument-slot boundary tests report their true result.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_CLOSEOUT, MIDI_RECORD_CAPTURE_CORE, and MIDI_HEALTH passed.
2026-07-28 - Hardware Editor Table Proof Counts
Hardware editor parameter-table previews now expose structured proof counters. Reports can distinguish source-ready rows from missing source proof, malformed addresses, invalid ranges/defaults, and profile mismatches. The MIDI protocol gate covers both verified rows and intentionally locked fixture-style rows.
2026-07-28 - Locked Yamaha QY Parameter Table Fixture
The MIDI Hardware IMPORT TABLE path now has a committed manual-test JSON file: docs/Yamaha_XG_QY_Parameter_Table_Preview_Example.json. It is intentionally locked with sourceVerified=false and queueSafe=false so the preview/report UI can be tested without creating false confidence about Yamaha SysEx rows that still need official source-page verification.
2026-07-28 - Hardware Editor Source Proof Is Structured
MIDI Hardware Setup templates now expose source-proof fields for deep hardware editors: legal note, primary source URLs, required source artifacts, and unlock requirements. QY-70/QY-100, CBX-K1XG, MU1000/MU2000, and generic GM/XG/GS templates use those fields so the future Yamaha XG editor can show a locked-but-useful checklist instead of an unsafe half-editor.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_PROTOCOL passed.
2026-07-28 - Yamaha XG Editor Spec And MU Template
Yamaha XG editor work now has a dedicated spec document and a named MU1000/MU2000 Hardware Setup template. QY-70/QY-100, CBX-K1XG, generic GM/XG/GS, and MU1000/MU2000 profiles stay locked until exact Data List / MIDI Data Format tables verify model IDs, SysEx addresses, ranges, checksums, effect maps, drum maps, and send pacing.
The new spec is docs/Yamaha_XG_Editor_Spec.md. WebXGMIDI and QXGEdit are useful workflow references only; QXGEdit is GPL and WebXGMIDI has no obvious permissive license in GitHub metadata checked on 2026-07-28, so neither should be copied into SpaceAge.
Focused verification: SPACEAGE_MIDI_PROTOCOL_ONLY passed.
2026-07-26 - Launch Proof Cards Carry Their Backend Guardrail
MIDI launch-proof rows now retain backend-gate identity all the way to the UI-facing card/action layer. The same proof bucket can name its receipt key, minimum PASS evidence, required real-world proof type, and automated focused gate without cross-parsing another report structure.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_PROTOCOL, MIDI_READINESS, and SPACEAGE_MIDI_CLOSEOUT_AUTOMATION_SLICE_ONLY passed.
2026-07-26 - Remaining MIDI Proof Rows Name Their Automated Guardrails
The Remaining MIDI 1.0 checklist now bridges human launch-proof work to automated backend proof gates. Each row carries an automatedFocusedGate and readable automatedFocusedGateLabel, while the first-action summary exposes the next surface, receipt key, backend gate, and minimum PASS evidence together.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_HEALTH, MIDI_PROTOCOL, MIDI_READINESS, SPACEAGE_MIDI_CLOSEOUT_AUTOMATION_SLICE_ONLY, and SPACEAGE_MIDI_CLOSEOUT_PLAYBACK_AUTOMATION_SLICE_ONLY passed.
2026-07-26 - Focused Slice Output Is Now Truthful
The focused MIDI closeout slices now avoid misleading checkpoint text. The lane-owned drawer checkpoint only appears when the instrument-UI slice actually runs, while playback/live automation and route/status slices report only their own proof stages.
Focused verification: rebuilt SampleSquadAudioTest; instrument-UI, playback/live automation, and route/status slice-only gates passed.
2026-07-26 - Closeout Coverage Now Has Six Passing Focused Gates
MIDI closeout verification now has six smaller gates instead of relying only on one multi-minute sweep: automation/protocol, instrument-slot boundaries, instrument UI routing, playback/live automation, lane workflow, and route/status messaging. The full closeout gate remains available for deep confidence, but day-to-day MIDI work can now prove the relevant surface much faster.
Focused verification: rebuilt SampleSquadAudioTest; all six slice-only gates passed.
2026-07-26 - Focused Closeout Slices Are Faster Now
The MIDI closeout slice gates now skip unrelated setup. Instrument-slot and instrument-UI verification no longer pay the automation/protocol setup cost before running their own proof sections, while the full closeout regression still proves the entire chain. This makes iteration less punishing without lowering the release bar.
Focused verification: rebuilt SampleSquadAudioTest; automation/protocol slice passed; instrument-slot slice passed in the shorter path; instrument-UI slice passed in the shorter path.
2026-07-26 - Closeout Regression Now Has Focused Slices
The oversized MIDI closeout regression has been split into focused early-return gates: automation/protocol, instrument-slot boundaries, and instrument UI routing. This preserves the full deep regression while giving us smaller proof runs that expose exactly which subsystem is being tested and where time is being spent.
Focused verification: rebuilt SampleSquadAudioTest; automation/protocol slice passed; instrument-slot slice passed; instrument-UI slice passed.
2026-07-26 - Closeout Regression Is Passing But Too Heavy
SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY now prints timed checkpoints. The previous timeout was caused by a test budget that was too short for the current all-in-one closeout gate, not by a failed regression. A controlled full run completed successfully in roughly 229 seconds, proving the MIDI / Instrument Bay closeout contracts still pass while also showing that the gate should be split into smaller focused gates soon.
Focused verification: rebuilt SampleSquadAudioTest; controlled closeout run exited 0 and reported MIDI closeout regression: passed; rebuilt again after checkpoint-label cleanup.
2026-07-26 - Remaining MIDI Has A First Action Surface
The remaining MIDI 1.0 checklist now exposes a first actionable row and human-readable next-action summary in both protocol coverage and MIDI Health serialization. This is the bridge from a truthful checklist to a usable cockpit: SpaceAge can show the next closeout action, route, receipt key, and minimum PASS evidence directly.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_MIDI_PROTOCOL_ONLY passed; SPACEAGE_MIDI_HEALTH_ONLY passed; SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY passed. SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY timed out in this pass and left a test process, which was stopped.
2026-07-26 - Remaining MIDI Checklist Rows Are Cockpit-Ready
The Remaining MIDI 1.0 checklist rows now carry stable row IDs, closeout category, action surface, action label, route proof, safety class, launch-proof bucket, receipt key, proof artifact, minimum PASS evidence, and hardware/file/live-performance flags. The human checklist wording stays unchanged, but future UI can now draw actionable cards from structured data instead of scraping prose.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_MIDI_PROTOCOL_ONLY passed; SPACEAGE_MIDI_HEALTH_ONLY passed; SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY passed; SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY passed.
2026-07-26 - MIDI Health Layout Row Budget Is Shared
The MIDI Health panel no longer has separate magic numbers for the visible summary region and the button layout skip. Both now use the same local row-budget constants, which makes the dense Health cockpit less likely to drift into text/button overlap as launch-proof and MIDI diagnostics continue to evolve.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_MIDI_HEALTH_ONLY passed; SPACEAGE_MIDI_PROTOCOL_ONLY passed; SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY passed; SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY passed; SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY passed.
2026-07-26 - Fix Next Explains Launch Proof Evidence
The MIDI Health FIX NEXT button now includes launch-proof requirements in its tooltip when the next action is a launch-proof task. It carries proof needs and minimum PASS evidence from the same proof card data used by the visible dashboard row, so the doorway can explain both the destination and the acceptance criteria.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_MIDI_HEALTH_ONLY passed; SPACEAGE_MIDI_PROTOCOL_ONLY passed; SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY passed; SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY passed; SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY passed.
2026-07-26 - MIDI Health Renders The First Launch Proof Card
The MIDI Health panel now renders a compact PROOF CARD row from firstOpenProofCard, showing the first unresolved proof bucket, action, proof requirement, and receipt key. The full proof deck remains available through Copy Report / Copy Steps, but the visible dashboard now has a direct proof cue instead of only long launch-proof prose.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_MIDI_HEALTH_ONLY passed; SPACEAGE_MIDI_PROTOCOL_ONLY passed; SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY passed; SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY passed; SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY passed.
2026-07-26 - MIDI Cockpit Names Launch Proof Progress
The top-level MIDI cockpit status summary now includes launch-proof progress and remaining bucket count directly. This keeps the first visible Health line honest about the real ship gate: backend confidence is not the same as evidence-backed launch proof.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_MIDI_HEALTH_ONLY passed; SPACEAGE_MIDI_PROTOCOL_ONLY passed; SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY passed; SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY passed; SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY passed.
2026-07-26 - Launch Proof Checklist Has Plain Rows
The MIDI project health report now exposes launch-proof cards as readable checklist lines through midiLaunchValidationProofCardLines(), and the Next Steps report prints them under MIDI launch proof cards:. This gives testers and the future MIDI Health UI the same readable card language: open rows are [ ], completed rows are [PASS], and every row names proof needs plus the minimum PASS evidence.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_MIDI_HEALTH_ONLY passed; SPACEAGE_MIDI_PROTOCOL_ONLY passed; SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY passed; SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY passed; SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY passed.
2026-07-26 - Launch Proof Cards Are Exposed At The Health Root
The MIDI Health payload now exposes the launch-proof card deck at the top level as midiLaunchValidationProofCardRows, along with the first open proof card and the progress/remaining labels. The nested cockpit card remains available, but the eventual UI no longer needs to traverse nested detail just to draw the visible proof checklist.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_MIDI_HEALTH_ONLY passed; SPACEAGE_MIDI_PROTOCOL_ONLY passed; SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY passed; SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY passed; SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY passed.
2026-07-26 - Launch Proof Next Action Has A Proof Card
The MIDI Health cockpit next-action surface now carries a compact proofCard when the next task is launch-proof capture. This lets the future UI draw the active task card directly from the doorway action instead of cross-looking-up the proof deck. Hardware-proof actions intentionally leave this blank, because they route to Hardware Passport rather than launch receipt capture.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_MIDI_HEALTH_ONLY passed; SPACEAGE_MIDI_PROTOCOL_ONLY passed; SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY passed; SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY passed; SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY passed.
2026-07-26 - Launch Proof Cockpit Has Renderable Proof Cards
The MIDI Health launch-proof cockpit now exposes proofCardRows: compact, UI-ready cards for every validation bucket. The raw matrix remains available, but the app no longer needs to parse long proof text to draw a clear launch checklist. The first open proof card, progress label, and remaining proof label are also structured fields now.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_MIDI_HEALTH_ONLY passed; SPACEAGE_MIDI_PROTOCOL_ONLY passed; SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY passed; SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY passed; SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY passed.
2026-07-26 - Launch Proof Cockpit Surfaces The Evidence Floor
The MIDI Health launch-proof cockpit now includes the minimum PASS evidence line in both the cockpit card summary and next-action summary. This prepares the UI for clear proof cards: "what is next?", "what kind of proof is needed?", and "what must a PASS include?" can be shown as separate readable pieces instead of asking the user or tester to interpret a paragraph.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_MIDI_HEALTH_ONLY passed; SPACEAGE_MIDI_PROTOCOL_ONLY passed; SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY passed; SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY passed; SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY passed.
2026-07-26 - Launch Proof Cards Include Minimum PASS Evidence
MIDI launch-validation proof buckets now carry minimumPassEvidence, which names the minimum evidence required before a tester can mark that bucket PASS. This travels through the matrix rows, action queue, next receipt, action surfaces, Health cockpit card, and cockpit next-action summary. The goal is to remove ambiguity from the final MIDI 1.0 proof pass: the tester should not have to invent what "good enough evidence" means.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_MIDI_PROTOCOL_ONLY passed; SPACEAGE_MIDI_HEALTH_ONLY passed; SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY passed; SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY passed; SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY passed.
2026-07-26 - Automation Closeout Uses Current-Surface Language
The MIDI closeout reports now direct Automation QA to the surfaces that actually exist today: preview strips, Arrangement badges/counts, Automation doorways, and the owner-scoped popup editor. Full always-expanded timeline Automation lanes are explicitly documented as future work, which keeps our launch language honest while still preserving the current popup-based automation workflow as a real MIDI 1.0 closeout path.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_MIDI_PROTOCOL_ONLY passed; SPACEAGE_MIDI_HEALTH_ONLY passed; SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY passed; SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY passed; SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY passed.
2026-07-26 - Automation Popup Geometry Matches Its Painted Rows
The Automation popup now uses matching geometry for its status/checklist strips and its calculated list/graph areas, reclaiming space that was being accidentally reserved. Automation rows are taller and use slightly larger row text, making the editor easier to read while preserving its Shared PTN / Lane Local / Clip Local ownership rules.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_AUTOMATION_HARDWARE_RESET_ONLY passed; SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY passed.
2026-07-26 - Automation Deletion Resets External Hardware Too
Deleting automation now applies the same neutral-value rule to external MIDI hardware that SpaceAge already applied internally. Pan returns to center, volume/expression return to unity, sustain turns off, pitch bend centers, pressure resets to zero, and generic CCs reset to zero unless they are volume/expression/pan-style controllers. The reset is lane-aware, so it targets only hardware lanes that could have received the deleted automation.
Focused verification: rebuilt SampleSquadAudioTest; SPACEAGE_AUTOMATION_HARDWARE_RESET_ONLY passed; SPACEAGE_MIDI_RECORD_CAPTURE_CORE_ONLY passed; SPACEAGE_MIDI_LIVE_INPUT_HEALTH_ONLY passed. SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY timed out locally after five minutes and should be treated as a slow-gate issue to split or profile, not as evidence that this reset failed.
2026-07-26 - Arrangement Automation Doorway Is Explicit Again
The main Arrangement toolbar now says AUTOMATION instead of the compact AUTO shorthand, while tiny clip evidence badges may still stay compact. When Automation is opened from Arrangement, the Settings/Automation callout now anchors to the visible Arrangement Automation button, making the feature feel launched from the current workspace rather than from a hidden Piano Roll control.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_RECORD_CAPTURE_CORE passed with live external, internal+external, and two-controller source filtering; MIDI_LIVE_INPUT_HEALTH passed.
2026-07-26 - Fast Live Input Health Gate Added
SpaceAge now has a focused MIDI_LIVE_INPUT_HEALTH gate for the current live-controller risk area: multiple physical inputs open, multiple active controllers, unpinned lanes, health attention rows, and recording-take trust warnings. This keeps daily MIDI work from depending on the much slower closeout gate for every small correction.
Focused verification: rebuilt SampleSquadAudioTest; MIDI_LIVE_INPUT_HEALTH passed via midi-live-input-health-fast.out; MIDI_HEALTH passed afterward via midi-health-after-live-input-fast-gate.out.
2026-07-26 - Open-Only Multi-Controller Input Is A Suspect Setup
SpaceAge now has focused project-health coverage for the case where multiple physical MIDI inputs are open but only one has actively sent notes so far. That setup should not be called a clean recording environment unless the lane is pinned to a specific device, because the next accidental keypress from the second controller can contaminate the take.
Focused verification: rebuilt SampleSquadAudioTest in build-codex; MIDI_HEALTH passed via midi-health-open-input-project-summary.out; MIDI_READINESS passed via midi-readiness-open-input-project-summary.out; MIDI_CLOSEOUT_REGRESSION passed via midi-closeout-open-input-project-summary-fresh.out. 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 - Multi-Controller Takes Are Not Marked Clean By Accident
Recording reliability now treats unpinned multi-controller input as a timing/source risk. If multiple physical controllers are open or have sent musical MIDI into the live route, SpaceAge reports the take as TIMING SUSPECT and recommends pinning the lane, splitting channels, or deliberately accepting layered input before judging the performance.
Focused verification: rebuilt MIDI_HEALTH passed via midi-health-multi-input-recording-suspect.out; rebuilt MIDI_READINESS passed via midi-readiness-multi-input-recording-suspect.out; rebuilt MIDI_CLOSEOUT passed via midi-closeout-multi-input-recording-suspect.out.
2026-07-26 - Live Diagnostics See Multi-Controller Ambiguity
MIDI Health now carries the physical direct-input identity state from the live input router: open input IDs, active musical input IDs, counts, and whether the armed lane is device-specific. The directInput troubleshooting row now reports active/open devices and raises attention when multiple controllers are feeding an unpinned lane, even if queue age itself is clean. This gives the user a concrete next step when two controllers are attached and one path feels late or unpredictable.
Focused verification: rebuilt MIDI_HEALTH passed via midi-health-multi-input-diagnostic.out; rebuilt MIDI_READINESS passed via midi-readiness-multi-input-diagnostic.out; rebuilt MIDI_CLOSEOUT passed via midi-closeout-multi-input-diagnostic.out.
2026-07-26 - Lane AUTO Doorways Stay Stable
Arrangement lane-level Automation commands now keep the stable AUTO / AUTOMATION label even when multiple automation rows exist. Row counts remain discoverable through tooltip/status/editor context. Tiny in-clip evidence badges may still use compact AUTO / A# shorthand because they are breadcrumbs, not primary commands.
Focused verification: rebuilt MIDI_HEALTH passed via midi-health-lane-auto-stable.out; rebuilt MIDI_CLOSEOUT passed via midi-closeout-lane-auto-stable.out.
2026-07-26 - Closeout Action Cards Point At AUTO
MIDI closeout action cards now distinguish the formal feature name from the visible control. The closeout blocker remains Automation Final Editor, but the next action label is Open AUTO and the action button label is AUTO, matching the current Piano Roll and Arrangement doorway text.
Focused verification: rebuilt MIDI_HEALTH passed via midi-health-auto-closeout-card.out; rebuilt MIDI_CLOSEOUT passed via midi-closeout-auto-closeout-card.out.
2026-07-26 - MIDI Health Promotes Every Live-Feel Bottleneck
MIDI Health now uses one live-feel attention predicate for the visible cockpit rows. High audio buffer, direct-input queue lag, hardware-output queue lag, and SoundFont prepared-voice refusal all promote LIVE FEEL, LAG SOURCE, LIVE DIAG, FEEL ACTION, and LATENCY instead of leaving some causes buried in deeper reports.
Focused verification: rebuilt MIDI_HEALTH passed via midi-health-live-feel-attention.out; rebuilt MIDI_CLOSEOUT passed via midi-closeout-live-feel-attention.out.
2026-07-26 - Piano Roll Automation Doorway Uses AUTO
The Piano Roll Automation doorway now uses AUTO / AUTO +N, matching the Arrangement toolbar and the updated documentation. This preserves the full Automation feature name in explanatory surfaces while keeping the working toolbar compact.
Focused verification: rebuilt MIDI_CLOSEOUT passed via midi-closeout-pianoroll-auto-label.out; rebuilt MIDI_HEALTH passed via midi-health-pianoroll-auto-label.out.
2026-07-26 - Arrangement Automation Breadcrumbs
The Arrangement toolbar now uses AUTO / AUTO +N for the Automation doorway, and the selected-item readout appends AUTO +N when the resolved clip/lane target already has Automation rows. The tooltip also names the current Automation target, keeping the feature discoverable from the Arrangement Canvas without adding another large control.
Focused verification: rebuilt MIDI_CLOSEOUT passed via midi-closeout-auto-readout.out; rebuilt MIDI_HEALTH passed via midi-health-auto-readout.out.
2026-07-26 - Settings MIDI Doorway Readability
The main Settings popup now uses a wider two-column toggle layout, reducing vertical pressure on the MIDI doorway controls and making the lower rows less likely to clip. MIDI Hardware Passport visible copy was shortened so the no-autosend, confirmation, and hardware-proof distinctions stay readable without piling text on text.
Focused verification: rebuilt MIDI_HEALTH passed via midi-health-settings-layout.out; rebuilt MIDI_CLOSEOUT passed via midi-closeout-settings-layout.out.
2026-07-26 - Automation Popup Readability Follow-Up
The Automation popup now uses an even larger panel footprint, shorter visible helper copy, stronger fitted-text minimums, and shared constants for the bottom action row and insert/create panel. This keeps the popup readable while preserving the ownership model: Shared PTN, Lane, Clip, and protected MIDI PATCH setup data remain clearly separated.
Focused verification: rebuilt MIDI_CLOSEOUT passed after the follow-up readability pass via midi-closeout-automation-popup-readability-2.out.
2026-07-26 - Automation Popup Is More Readable And Easier To Dismiss
The Automation popup now has a larger panel footprint, larger labels, taller list rows, a clearer evidence strip, a roomier create/action area, and more readable source-graph overlays. The row drawing, hit-testing, and visible-row calculations now share the same row-height constant so future spacing edits do not leave the click geometry behind. The popup also follows the quick-dismiss convention: Esc, x, and X close it.
Focused verification: rebuilt MIDI_CLOSEOUT passed after the readability/key-dismiss pass; MIDI_RECORD_TIMING and MIDI_PROTOCOL also passed during the pass.
2026-07-26 - Stale Direct Device Generations Are Dropped Before Sound Or Recording
Direct hardware MIDI queue entries now have focused regression coverage for the case where a controller queues note-on/note-off data and then its direct input slot is invalidated before the audio block drains. The stale-generation events are dropped, do not create live voices, and do not write notes into the armed Arrangement clip. This matters for real rigs with USB plus DIN controllers, flaky interfaces, or hot-plug recovery because old bytes must never become new musical intent.
Focused verification: rebuilt MIDI_RECORD_TIMING passed with stale direct device generation rejection: passed; no-build MIDI_CLOSEOUT, MIDI_READINESS, MIDI_PROTOCOL, and MIDI_HEALTH passed afterward.
2026-07-26 - Variant Branches Receive New Instrument Identity
The Arrangement lane VARIANT workflow now resets lane Instrument identity when moving the lane to a copied private Instrument slot. This keeps Variant distinct from copying another lane's sound into the existing lane owner. Variant now means a new Instrument ID with the same lane role, same mixer channel, and retargeted musical payload.
Focused verification: rebuilt MIDI_CLOSEOUT passed with laneInstrumentVariantWorkflow=1; no-build MIDI_READINESS, MIDI_PROTOCOL, and MIDI_RECORD_TIMING passed afterward.
2026-07-26 - Fresh Lane Instrument Replacement Keeps Armed Input Current
The NEW INSTRUMENT Arrangement lane path now refreshes destination-lane selection, Piano Roll instrument routing, and armed MIDI input routing after initializing the fresh engine. The lane keeps its private Instrument slot, mixer channel, and clips, but receives a fresh Instrument identity. This keeps live monitoring/recording aligned with the lane's visible sound after an engine swap.
Focused verification: rebuilt MIDI_CLOSEOUT passed with freshLaneInstrumentReplacement=1; no-build MIDI_READINESS, MIDI_PROTOCOL, and MIDI_RECORD_TIMING passed afterward.
2026-07-26 - Shared Arrangement Patterns Fork Before Lane Instrument Retarget
Non-drum lane Instrument reassignment now handles shared clip patterns by copying the full pattern payload to an unused pattern, assigning only the edited lane's clips to that copy, and retargeting the copy to the lane's private Instrument. This prevents the old compromise where shared patterns were left untouched to protect other lanes, which also left the changed lane's notes/chords pointed at stale sound ownership.
Focused verification: rebuilt MIDI_CLOSEOUT passed; no-build MIDI_READINESS, MIDI_PROTOCOL, and MIDI_RECORD_TIMING passed. A full all-tests sweep was attempted but exceeded the 3-minute command cap before completion.
2026-07-26 - Instrument Records Describe Ownership, Not Storage
Instrument Bay records no longer describe private non-drum slots as sounds "stored in Instrument ##." Available private Instruments now read as presets available for Arrangement lanes, and lane-owned records describe the owning lane, Instrument ID, mixer channel, MIDI channel, engine, and preset. This keeps the remaining slot-backed bridge from leaking into customer-facing explanations.
Focused verification: rebuilt MIDI_CLOSEOUT passed with availableInstrumentLabel=1; MIDI_READINESS, MIDI_PROTOCOL, and MIDI_RECORD_TIMING passed afterward.
2026-07-26 - Lane-Owned Synth Editor Header Is Fully Instrument-Facing
The closeout regression now verifies the Synth Editor's visible drawer title plus the smaller target/source labels when editing a non-drum Arrangement lane Instrument. These labels must say INSTRUMENT, include the lane/mixer/MIDI-channel context, and avoid Pad language. This protects the user-facing side of Option B: melodic/harmonic lanes own Instruments; Pads remain the Drum Composer surface.
Focused verification: rebuilt MIDI_CLOSEOUT passed with laneOwnedDrawer=1; no-build MIDI_READINESS, MIDI_PROTOCOL, and MIDI_RECORD_TIMING passed afterward. Note: these gates should be run serially because the current scripts share the same local build directory.
2026-07-26 - Automation Mutation Paths Update Live Output
Automation mutation helpers now latch the most recent edited event into the live MIDI expression state after successful value updates, moves, move-and-value drags, group moves, and pastes. This is deliberately paired with the earlier lane-delete reset behavior so the user can hear automation changes immediately and can also trust that deleting a lane clears the stale audible state.
Focused verification: rebuilt MIDI_CLOSEOUT passed with automationUpdateLivePan=1, automationPasteLivePan=1, and automationDeleteResetsPan=1.
2026-07-25 - Native Preset Resource Cleanup Follows Target Ownership
Shared native preset loaders now clear sample, one-shot, and SoundFont payloads through active-target helpers. The shared One-Shots clear buttons use the same target-aware route, while the explicit Clear All Pads workflow remains Pad-specific. This keeps preset switching consistent with Option B: visible Drum Pads remain Pad-owned, while non-drum lane Instruments use private Instrument-slot resource clearing. The real win is not cosmetic; it prevents a preset change on a lane-owned Instrument from quietly exercising a Pad-only cleanup path.
Focused verification: rebuilt MIDI_CLOSEOUT passed after the One-Shot wrapper expansion.
2026-07-25 - SoundFont Display Uses Owner-Aware Source Paths
The shared SoundFont editor loaded-file readout now calls an owner-aware path helper instead of directly asking the processor for a Pad path. The storage is still bridge-backed, but the editor code now follows the same slot-aware pattern as SoundFont clear/preset selection, reducing the chance that lane-owned Instruments drift back into Pad-facing behavior.
Focused verification: rebuilt MIDI_CLOSEOUT passed after this pass.
2026-07-25 - Shared Synth Loaders Use Active-Target Routing
Shared Synth Engine preset/source loaders now use an editor active-target helper when switching the target back to an internal synth engine. Visible Drum Pads still route through Pad behavior. Lane-owned private Instruments route through the Instrument-slot behavior. This keeps the bridge phase honest: the storage may still be slot-indexed, but shared UI actions should speak and route as Instruments when the Arrangement lane owns them.
Focused verification: rebuilt MIDI_CLOSEOUT passed after this pass.
2026-07-25 - SoundFont Clear Uses Owner-Aware Routing
The shared Synth Editor SoundFont clear action now routes private lane-owned Instruments through clearSoundFontForInstrumentSlot() while preserving clearSoundFontForPad() for visible Drum Pad targets. This removes another customer-facing Pad assumption from non-drum lane editing without requiring a risky storage rewrite.
Focused verification: rebuilt MIDI_CLOSEOUT passed; no-build MIDI_RECORD_TIMING, MIDI_HEALTH, MIDI_READINESS, and MIDI_PROTOCOL passed afterward.
2026-07-25 - Private Instrument Labels Are Independent From Pad Labels
Private lane-owned Instrument labels no longer fall back to visible Pad labels. A private Instrument must have its own Instrument label or use an engine-based fallback such as Init Redshift; it cannot inherit Pad 59 or a custom Pad name by accident. This makes the current bridge safer while the full Instrument Bay registry is still being completed.
Focused verification: rebuilt MIDI_CLOSEOUT passed; no-build MIDI_RECORD_TIMING, MIDI_HEALTH, MIDI_READINESS, and MIDI_PROTOCOL passed afterward.
2026-07-25 - Instrument Menus Use Final Workflow Language
The Arrangement lane instrument chooser now describes non-drum sounds as Instruments all the way through the visible menu/status path. Fresh engines are offered as NEW INSTRUMENT, source-copy choices are COPY INSTRUMENT FROM LANE, and unclaimed private slots show as AVAILABLE INSTRUMENT. The lane remains the owner/context, but the menu does not ask the user to learn a backend-ish "Lane Instrument" noun.
Private Instrument labels are now stored separately from visible Pad labels. This lets lane-owned Instruments retain names through save/load/copy paths while Pad labels remain the Drum Composer/MPC surface.
Focused verification: rebuilt MIDI_CLOSEOUT passed; no-build MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_READINESS passed afterward.
2026-07-25 - Preset Application Uses The Instrument Owner
Shared Synth Editor preset paths now apply display names through setActiveSynthEditLabel() when they can target either a visible Pad or a lane-owned Instrument. Patch display fallback also checks private Instrument labels before Pad labels. This keeps lane-owned Redshift/Liftoff/Glass Moon/Moonshadow/Lunacy/etc. naming aligned with the final Instrument Bay direction instead of teaching users that a melodic lane is secretly Pad 57.
Focused verification: rebuilt MIDI_CLOSEOUT passed with expanded laneOwnedDrawer; no-build MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_READINESS passed afterward.
2026-07-25 - Saved Patch Naming Uses The Active Instrument Doorway
Saved patch name refresh now routes through setActiveSynthEditLabel() instead of writing directly to Pad labels. For visible Drum Pads this still updates the Pad label. For lane-owned Instruments this updates the private Instrument label and preserves the visible Pad selection, which keeps the Option B lane-Instrument model intact.
Focused verification: rebuilt MIDI_CLOSEOUT passed with expanded laneOwnedDrawer; no-build MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_READINESS passed afterward.
2026-07-25 - Patch/Status Base Names Use Lane Ownership
Synth Editor patch names, copy/paste status text, and save-file suggestions now resolve private lane Instruments through the owning Arrangement lane when possible. If a private Instrument slot is not yet owned by a lane, the fallback is still Instrument-facing and does not expose Pad ##, Instrument Bay slot, or private-slot language.
Focused verification: rebuilt MIDI_CLOSEOUT passed with expanded laneOwnedDrawer; no-build MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_READINESS passed afterward.
2026-07-25 - Lane-Owned Drawer Copy/Paste Context Is Stable
The Synth Editor now preserves lane-owned copy/paste wording after an Instrument copy action. This keeps the drawer's visible controls aligned with Option B: non-drum lanes own Instruments, while Pads remain the Drum Composer-facing surface.
Focused verification: rebuilt MIDI_CLOSEOUT passed with the expanded laneOwnedDrawer regression; no-build MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_READINESS passed afterward.
2026-07-25 - Lane Variants Retarget Notes And Chords
The editor-level VARIANT workflow is now protected by closeout. A non-drum lane can copy its current Instrument into a new private Instrument slot, switch the lane to that slot, and retarget the lane's Piano Roll notes and Chord Engine markers without changing the lane's mixer channel, adding clips, moving visible Pad selection, or copying mixer-owned gain/sends into the new variant.
Focused verification: rebuilt MIDI_CLOSEOUT passed with laneInstrumentVariantWorkflow=1; no-build MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_READINESS passed afterward.
2026-07-25 - Fresh Instrument Replacement Keeps The Lane Identity
The NEW INSTRUMENT lane menu path is now covered by closeout. Replacing a non-drum lane with a fresh native engine preserves the lane's private Instrument slot, mixer channel, clip count, and visible Pad selection. The visible Arrangement label remains Instrument-facing and continues to reject Pad/private-slot language.
Focused verification: rebuilt MIDI_CLOSEOUT passed with freshLaneInstrumentReplacement=1.
2026-07-25 - Live Monitoring Keeps Controller Ownership Separate
The MIDI timing gate now covers a second physical-controller shape outside the recording path: two direct controllers can play the same pitch simultaneously, one can release, and the other remains held. This matters for the mioXL/USB-controller reports because it proves SpaceAge's source identity model is not collapsing controllers into one anonymous note owner.
Focused verification: rebuilt MIDI_RECORD_TIMING passed with live same-note two-controller isolation; no-build MIDI_HEALTH, MIDI_READINESS, and MIDI_CLOSEOUT also passed.
2026-07-25 - Recording Monitors Through One Path
The MIDI recording path was audited against the live-lag reports. Recorded note input is already monitored by handleMidiRecordingEvent() itself, which starts the relevant drum or lane-Instrument voice while also tracking note length. The normal live-monitor path must not also receive that same event, or a single controller note can become two voices and break direct-device cleanup expectations.
Focused verification: MIDI_RECORD_TIMING now includes recording monitors exactly one voice; MIDI_CLOSEOUT, MIDI_READINESS, and MIDI_HEALTH passed afterward.
2026-07-25 - Visible Pad Rejection Is Protected By Closeout
Add Instrument Lane and lane instrument replacement already reject visible Drum Pad slots at the editor boundary. MIDI closeout now verifies the creation path directly: asking the editor to create an Instrument lane from a visible Pad returns failure and does not add either a lane or a starter clip. This keeps the Option B migration from quietly reviving the old pad-proxy workflow.
2026-07-25 - Protocol Gates Split For Faster Closeout
MIDI_PROTOCOL now exits at the protocol-foundation boundary instead of continuing through unrelated all-up self-test work. The runner also exposes focused protocol sub-gates: MIDI_PROTOCOL_PREIMPORT, MIDI_PROTOCOL_INSPECTION, MIDI_PROTOCOL_MULTICHANNEL, and MIDI_PROTOCOL_FILE_LEARN. This makes MIDI protocol regression checks usable again during normal iteration.
Focused verification: MIDI_PROTOCOL passed after rebuild, and the four new sub-gates passed when run sequentially. Do not run the protocol sub-gates in parallel; the multi-channel fixture can false-fail under simultaneous protocol test processes.
2026-07-25 - Instrument Lane Editor Boundary Tightened
Add Instrument Lane and lane instrument reassignment now reject visible Drum Pad slots before any clamping/normalization can hide the mistake. Processor insertion was already assigning stable Instrument IDs and normalizing MIDI/mixer routes; this pass tightens the user-triggered editor doorway so non-drum lanes cannot be created from or reassigned through the Drum Pad range.
Focused verification: MIDI_CLOSEOUT, MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_READINESS passed. The expanded MIDI_PROTOCOL gate exceeded the current 180-second command timeout without surfacing an assertion failure; split that gate or raise its CI timeout before using it as the fast closeout proof again.
2026-07-25 - Import And Live Ownership Text Are Instrument-Facing
MIDI split-import review hints now say Choose an Instrument preset or SoundFont patch, and the split destination tooltip now says Instrument destination rather than lane-owned instrument destination. The live MIDI ownership summary also now says melodic lanes use their Instrument for monitoring and recorded Piano Roll notes. This keeps import, monitoring, and recording copy aligned with the same user-facing architecture.
Focused verification: MIDI_PROTOCOL passed, and MIDI_CLOSEOUT passed on a solo rerun after the first parallel closeout attempt encountered an executable lock.
2026-07-25 - Available Instrument Wording Is The Current UI Contract
The live Add Instrument Lane failure status now says NO EMPTY INSTRUMENTS AVAILABLE, and unassigned instrument choices display as AVAILABLE INSTRUMENT ##. The closeout gate continues rejecting LANE-READY, Pad, private-slot, and Instrument Bay slot leaks in the visible chooser path.
Focused verification: MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, and MIDI_PROTOCOL all passed.
2026-07-25 - Lane-Owned Drawer Titles Stay Instrument-Facing
The Synth Editor lane-owned display path now uses the actual lane Instrument label in the side readout and the closeout regression rejects visible Pad wording in non-drum lane Instrument drawer titles. This is a bridge-phase guard: internal slot indexes may still exist, but user-facing labels must teach the lane-owned Instrument model.
Focused verification: rebuilt MIDI_CLOSEOUT; passed.
2026-07-25 - Shared Synth Editor Labels Use Target-Aware Helper
The editor now has setActiveSynthEditLabel() for shared sound-loader paths that may target either visible Drum Pads or private lane Instruments. Redshift/native patch loading, SoundFont loading, MIDI Patch Mapper SoundFont assignment, and Quasar build/load now route patch/source labels through that helper where appropriate. This keeps the bridge-phase UI from writing lane Instrument identity through Pad labels.
2026-07-25 - Quasar Loader Uses Target-Aware Instrument Labels
The editor Quasar loader is now named loadQuasarIntoActiveInstrument(), and package names loaded into private lane Instruments are written through setInstrumentSlotLabel() rather than the visible Pad label API. Visible Drum Pad loading still uses Pad labels. This keeps shared engines usable in both workflows without leaking Pad identity into Arrangement lanes.
2026-07-25 - Piano Roll Source Reads Use InstrumentSlot Wrapper
Piano Roll readiness now reads source identity through getInstrumentSlotSourceName() instead of calling the Pad-facing sample-name API. The closeout guard now verifies visible Pad source names are blocked while private lane-Instrument source names remain readable, tightening the read side of the same boundary already used for sample, SoundFont, and Quasar writes.
2026-07-25 - Fresh Lane Instrument Source Boundary
Fresh Instrument lane setup now clears sample payloads through clearSampleForInstrumentSlot(), matching the guarded SoundFont and Quasar cleanup already in that initializer. This keeps Add Instrument Lane from touching visible Drum Pads if a stale index ever reaches the bridge-phase code, and it tightens the MIDI/Instrument Bay split before the final registry migration.
2026-07-25 - Piano Roll Preset Slot Wrappers
Piano Roll preset application now clears and labels lane Instruments through InstrumentSlot wrapper APIs instead of Pad-facing calls. A new clearSampleForInstrumentSlot() wrapper rejects visible Drum Pad indices and allows private lane-Instrument sample clearing. MIDI closeout reports instrumentSlotSampleClear=1, and timing/health/readiness gates remain green.
2026-07-25 - Source Lane Instrument Copy Menu Cleanup
The editor internals behind COPY INSTRUMENT SETTINGS FROM LANE now use source-lane Instrument naming instead of InstrumentBayChoice. The operation remains a copy into the destination lane's own Instrument, not a shared assignment. The all-up MIDI protocol gate is green after this cleanup.
2026-07-25 - Lane Instrument Slot Availability Centralized
The remaining bridge-phase private slot allocation rule now lives in the processor through isArrangementInstrumentSlotAvailableForNewLane(). Editor code no longer duplicates the model's occupancy checks, and Internal engine alone is treated as an empty source marker rather than real payload. MIDI closeout now reports instrumentSlotAvailable=1, proving empty private slots are allocatable while labelled, already-owned, and visible Pad slots are blocked. This keeps the current 64-slot bridge safer while Instrument Bay moves toward a real registry.
2026-07-25 - MIDI Import Wording Aligned With Instruments
Melodic MIDI import lane candidates now say Choose an Instrument preset or SoundFont patch instead of treating the Instrument Bay preset, private slot, or lane-instrument bridge as the thing assigned to the lane. The MIDI protocol gate now protects this wording, keeping the import flow aligned with the Option B model: Instrument Bay is where choices come from; Arrangement lanes own Instruments.
2026-07-25 - Lane Instrument Choice Naming Cleaned Up
The editor helper that formats non-drum lane instrument choices is now named formatLaneInstrumentChoiceLabel() instead of formatInstrumentBayLabel(). The visible behavior is unchanged, and MIDI closeout remains green, but the source now reflects the intended model: lanes choose Instruments; Instrument Bay is the browser/source concept, not the thing a lane secretly is.
2026-07-25 - Available Instrument Labels Are Guarded
Unowned private instrument candidates now display as AVAILABLE INSTRUMENT ##, and Add Instrument Lane exhaustion now says NO EMPTY INSTRUMENTS AVAILABLE. The MIDI closeout gate reports availableInstrumentLabel=1, proving this visible path does not leak Pad, private-slot, Lane Instrument, or Instrument Bay slot wording. This keeps the temporary 64-slot bridge from becoming the user's mental model.
2026-07-25 - Lane SoundFont Preset Access Uses Instrument Language
Arrangement lane labels now query SoundFont preset state through private instrument-slot wrappers instead of Pad-facing SoundFont calls. The wrapper surface covers preset lists, counts, selected index, selected name, and selected-index mutation, and the MIDI closeout guard proves visible Pad indices are rejected. Mixed editor contexts now use a slot-aware helper layer so Piano Roll preset selection, the SoundFont tab, patch-name tracking, and MIDI Patch Mapper SoundFont mapping can behave correctly whether the active slot is a true Drum Pad or a private lane Instrument. This is a small but important Instrument Bay cleanup: SoundFonts can remain technically stored in bridge-phase slots while non-drum lanes stop teaching the user that melodic instruments are Pads.
2026-07-25 - Lane Instrument Copy Workflow Is Protected
The editor workflow for copying another lane's instrument settings is now under MIDI closeout coverage. COPY INSTRUMENT SETTINGS FROM LANE copies the source patch/settings into the destination lane's own instrument slot, keeps the destination lane identity stable, and preserves unrelated Pad selection. The closeout gate now reports laneInstrumentCopyWorkflow=1, which protects the Instrument Bay migration from sliding back into shared hidden-slot behavior.
2026-07-25 - Lane Backing Slots Are Collision-Protected
Non-drum Arrangement lanes now reject hidden shared-slot behavior. Assigning a lane to another lane's private backing slot copies the source instrument into the destination lane's own slot, and project restore repairs duplicate slot state after instrument payloads are loaded. The MIDI closeout gate now proves this with instrumentSlotsUnique=1. MIDI 1.0 / Instrument Bay status remains in closeout: the backend is substantially stronger, with remaining risk concentrated in real-device validation, final automation visibility polish, and hands-on workflow testing.
2026-07-25 - Instrument Identity Protection Added
Lane-owned non-drum instruments now repair duplicate internal instrument IDs during lane normalization and project restore. The fast MIDI closeout gate includes this proof as instrumentIdsUnique=1. MIDI 1.0 backend status remains in the high-confidence closeout phase: core routing, direct input timing, source ownership, automation/expression preservation, SysEx safety, and lane-owned instrument contracts are covered by automated gates; remaining launch risk is mostly real-hardware proof, customer-facing workflow polish, and hands-on timing validation across actual controllers/interfaces.
2026-07-25 - Automation Entry Point Is Now Visible
Arrangement MIDI automation no longer depends on users finding a buried lane-menu command first. The main Arrangement toolbar now exposes Automation, with the same selected-clip/playhead/lane target rules used by the existing backend. Compact AUTO badges are allowed only where space is physically constrained; reports, help text, and first-use guidance should use Automation.
2026-07-24 - Add Lane Wording No Longer Mentions Private Slots
- Add Instrument Lane now reports
NO EMPTY INSTRUMENTS AVAILABLEwhen no lane-owned instrument backing slot is available. - Drum pads remain explicitly reserved for Drum Composer behavior.
- The user-facing lane creation model is now cleaner: choose Drum Lane or Instrument Lane; instrument lanes get a starter clip and lane-owned instrument.
2026-07-24 - Instrument Bay Wording Cleanup
- Non-drum lane-owned fallback records now say "Lane Instrument" instead of exposing private slot or Instrument Bay slot implementation details.
- This is a small but important customer-facing cleanup while the backend still carries transitional pad-slot storage.
- Visible Drum Composer pads are unchanged.
2026-07-24 - Arrangement Record Timing And Direct Source Cleanup Gates Green
- Arrangement first-measure MIDI recording now clamps source lifecycle timing to the active Arrangement block start, so latency compensation cannot push a first-measure take behind step 0.
- Direct input source reuse/disconnect cleanup now treats synthetic note-offs as housekeeping events, not human performance events, so cleanup closes held notes at the current boundary without latency-compensated 0.05-step stubs.
- Automated verification is green for
MIDI_RECORD_TIMING,MIDI_HEALTH,MIDI_CLOSEOUT, andMIDI_READINESS. - Current status: MIDI 1.0 backend/model confidence is high for timing, source ownership, multi-controller policy, SysEx/automation ownership gates, and closeout regressions. Public "MIDI 1.0 complete" language is still gated by real hardware proof, real-file round trips, launch-proof receipts, and final hands-on workflow validation.
- Scope boundary: MPE and MIDI 2.0 remain future protocol layers. This pass preserves expressive MIDI 1.0 data but does not claim true MPE zones, MIDI 2.0 UMP, Profile Exchange, or Property Exchange support.
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
- Aligned the visible MIDI Health receipt modal with the launch-validation proof model.
- Launch proof and generic QA now share safe storage mechanics but no longer share user-facing wording at the modal/save/error layer.
2026-07-22 - Launch Proof Button Wording In MIDI Health
- Updated the MIDI Health QA receipt button so launch-validation receipts use launch-specific wording in the visible UI.
- The change is UI wording only; the safe receipt workflow remains non-sending, append-only, and backed by the same
project.midi.qaReceiptsledger.
2026-07-22 - MIDI 1.0 Ship State Truth Line
- Added a Health-level
midiOneShipStateSummary()so the app can answer the practical readiness question directly: backend covered, but public completion remains gated by saved launch-validation proof receipts. - The summary is visible in MIDI Health, available in Health
toVar(), and present in copied next-step/full-report text. - AudioSelfTest now protects the blocked and PASS variants, preventing future wording from implying launch readiness without saved proof.
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 - Record Timing Regression Gate Still Green
MIDI_RECORD_TIMINGpassed after the Health cockpit launch-proof priority work.- Coverage includes four-measure Arrangement recording, long drum clips, direct callback timestamps, two-controller direct input filtering, source-aware note ownership, sustain/channel-mode behavior, and source policy matrices.
- This keeps MIDI timing in the backend-high-90s zone while public release claims remain gated by saved launch-validation receipts from real hardware and DAW/file round trips.
2026-07-20 - Cockpit Next Action Launch-Proof Priority
MidiProjectHealthSummary::cockpitSeverityLabel()andcockpitNextActionLabel()now prioritize pending launch-validation proof after urgent latency checks and before hardware-proof checklist actions.cockpitNextActionSurface()exposes launch-proof actions assource=launchProof, non-MIDI-sending, and tied to the same receipt action state used by the launch-validation matrix.
2026-07-20 - Health Public Claim Summary Uses Saved Proof
MidiProjectHealthSummary::safePublicMidiClaimSummary()now combines status, helper text, and the saved launch-validation verdict.- Health
toVar()and plain-text reports now expose the gated summary rather than the protocol-only generic claim copy.
2026-07-20 - Public Claim Gate Bound To Launch Verdict
- Safe public MIDI claim wording now checks
midiLaunchValidationVerdictSummary(midiQaReceiptStore)before allowing any software-ready/hardware-proof-pending language. - If launch receipts are incomplete, the Health report says launch proof is pending and points the user back to MIDI Health launch verdict evidence instead of implying release readiness.
2026-07-20 - Launch Validation Verdict Closed On Both Sides
- MIDI launch validation now has regression coverage for both outcomes: BLOCKED when any launch proof remains and PASS when all launch proof buckets have saved PASS receipts.
- This tightens the final public-claim boundary: marketing/UI wording may only follow the saved receipt ledger after all launch validation buckets are satisfied.
2026-07-20 - MIDI Health Verdict Regression Coverage
- AudioSelfTest now asserts midiLaunchValidationVerdictSummary appears in high-latency MIDI Health toVar output, next-step text, and plain-text report output.
- This protects the Health/cockpit launch verdict path alongside the protocol coverage serialization added in the previous pass.
2026-07-20 - MIDI Health Launch Verdict Row
- MIDI Health now draws LAUNCH VERDICT using protocolCoverage.midiLaunchValidationVerdictSummary(midiQaReceiptStore).
- The visible LAUNCH PROOF count now reads receiptSatisfied, matching protocol/health serialization and saved receipt state.
- Increased the MIDI Health cockpit row budget to include launch proof, launch verdict, launch queue, launch next, and launch action without clipping the lower rows.
2026-07-20 - MIDI Launch Validation Verdict
- Implemented MidiProtocolCoverageReport::midiLaunchValidationVerdictSummary with default and project-receipt-store overloads.
- The verdict reports remaining saved-PASS receipt counts, next proof bucket, receipt key, proof artifact, and the public-claims boundary while validation is blocked.
- AudioSelfTest now asserts verdict serialization through protocol coverage, health summaries, plain-text protocol reports, and health next-step reports.
2026-07-20 - Launch Proof Report Summaries
- MidiProtocolQaReceiptActionQueue::summary now aggregates launch proof requirements and names the primary proof bucket/artifact.
- nextMidiLaunchValidationReceiptActionSurfaceSummary now includes proofBucket, proofArtifact, and proofNeeds details for both default and project-receipt-store paths.
- AudioSelfTest now asserts proof context in launch validation queue summaries and next-action summaries.
2026-07-20 - Launch Proof Actions Carry Proof Context
- Added structured proof context to MidiProtocolQaReceiptActionState: proofBucket, proofArtifact, requiresHardware, requiresRealFiles, and requiresLivePerformance.
- Launch validation next-action and remaining-action queue paths now preserve the row-level proof requirements all the way to serialized health/protocol reports.
- Regression coverage now asserts launch proof context for both AUTO LANES and real-controller latency buckets.
2026-07-20 - Launch Proof Labels Are Distinct From Generic QA
MIDI launch-validation receipts now produce launch-specific action labels. This makes the cockpit easier to trust: closeout QA remains COMPLETE QA RECEIPT, pending public launch validation asks for COMPLETE LAUNCH PROOF, and the all-PASS state becomes REVIEW LAUNCH PROOF. The behavior is still safe by construction; these actions open/capture/review receipt evidence and do not send MIDI.
Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - Launch Proof Queue Is Visible In Health
The MIDI Health cockpit now exposes the remaining launch-validation queue directly, not only through copied reports. This keeps the launch proof surface honest: the user can see how many proof buckets remain and how many require hardware, real files, or live-performance validation before SpaceAge can make stronger public MIDI claims.
Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - AUTO LANES Launch Receipt Is No Longer Generic
Launch validation for AUTO LANES now requires the full structured receipt body before it can be saved as PASS. This prevents the MIDI Health cockpit from presenting AUTO LANES as launch-proven when the receipt only contains generic notes. The UI receipt form, plain-text templates, receipt records, and test helper all recognize both the closeout key and the launch-validation key.
Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - MIDI Health Cockpit Now Displays AUTO LANES Doorway Summaries
The cockpit no longer relies only on report text for AUTO LANES doorway visibility. MIDI Health now shows a direct doorway count summary and first-action summary, making AUTO LANES easier to discover from the Health panel while keeping the route safe: these rows are visibility/navigation information and do not send MIDI or change routing.
Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - AUTO LANES Doorway Rows Now Have UI Summaries
AUTO LANES doorway rows now produce concise cockpit-ready copy: how many doorways are enabled, how many are contextual, how many can create automation, their warm/cold safety split, and the first enabled doorway action. This keeps the UI from needing to walk or interpret every row just to show the user where to click first.
Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - AUTO LANES Doorway Model Is UI-Ready
AUTO LANES now has structured doorway rows in the MIDI expression payload. The UI can render cards for Piano Roll, Arrangement, MIDI TASKS, Settings MIDI, MIDI Health, and MIDI PATCH Review without scraping summary text. The model also marks MIDI PATCH Review disabled until review/setup rows exist, preserving the boundary between performance automation and setup data.
Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - Protocol Coverage Receives The Same Launch Queue Model
Protocol Coverage now serializes the same remaining launch-validation queue/action model that MIDI Health uses with project receipts. With no saved receipts, the protocol payload shows every launch bucket as remaining and every bucket as a safe COMPLETE QA RECEIPT action. This keeps the future MIDI cockpit from needing separate Health-only logic.
Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - Remaining Launch Validation Queue Can Render Action Cards
MIDI Health now exposes a structured remainingMidiLaunchValidationReceiptActionQueue plus a summary for the remaining launch-validation receipt queue. The future MIDI cockpit can render each unsatisfied proof bucket as a COMPLETE QA RECEIPT action card instead of only showing one next receipt at a time.
Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - Remaining MIDI Proof Queue Has Type Counts
The launch-validation queue now names not only the remaining proof buckets, but also how many still require hardware, real files, and live performance. This gives the UI a direct way to explain why MIDI 1.0 is not yet publicly launch-green even when the backend is mature: the remaining burden is evidence type, not parser capability.
Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - Launch Validation Queue Is Receipt-Aware
MIDI Health now derives a remaining launch-validation proof queue from the saved QA receipt store. Saved PASS receipts disappear from the remaining queue, the next receipt target advances, and both the full report and COPY STEPS describe the same remaining proof path. This gives the future UI a structured checklist instead of forcing it to parse text.
Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - Full MIDI Health Report Is Receipt-Aware
The full MIDI Health report now shows launch-validation receipt progress and the receipt-aware next launch validation target near the public-claim status. This keeps the deep evidence report aligned with COPY STEPS and the structured health payload, instead of letting the full report fall back to the generic first-row protocol summary.
Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - MIDI Health Copy Steps Show Launch Validation Progress
The copied MIDI Health next-steps report now prints launch-validation receipt progress as x/y saved PASS before naming the next required launch receipt. This keeps the user-facing proof ritual aligned with the structured health payload and prevents the closeout workflow from feeling invisible.
Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - MIDI Launch Validation Is Receipt-Aware
The MIDI launch validation matrix and next-receipt/action-surface payloads now consult the saved QA receipt store. Saved PASS rows are marked satisfied and the next validation target advances to the first unsatisfied launch bucket. MIDI Health also serializes launch-validation satisfied/total counts and a compact progress summary. This fixes the proof workflow so completed AUTO LANES evidence does not keep stealing focus from controller-latency, hardware, SysEx, file-round-trip, live-timing, project-round-trip, or public-wording receipts.
Verified with MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild, and git diff --check.
2026-07-20 - MIDI Health Reuses The Remaining Checklist
The MIDI Health next-steps text and payload now reuse the structured Remaining MIDI 1.0 checklist from Protocol Coverage. This keeps the visible health workflow aligned with the protocol model and prepares the checklist for future Settings or QA-cockpit display.
2026-07-20 - Remaining MIDI 1.0 Checklist Is Structured
MIDI Protocol Coverage now exposes the remaining MIDI 1.0 perfection checklist as both human-readable lines and structured rows. This gives future Settings/QA UI a stable model-owned checklist instead of relying on one long paragraph or hand-written status notes.
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
- MIDI Health now exposes livePerformanceTroubleshootingRowsReport, a copied-report checklist generated from the same structured LIVE DIAG rows as the visible cockpit summary.
- The report lists each row label, value, status, attention flag, and next action, so support/debug text can explain why the first focus was chosen.
- This is 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 08:48 - LIVE ROWS visible in MIDI Health
- The MIDI Health cockpit now shows a LIVE ROWS line sourced from livePerformanceTroubleshootingRowSummary, immediately after the long LIVE DIAG evidence line.
- Health serialization and copied plain-text report coverage now assert the same LIVE DIAG rows headline, keeping visible UI and support/report surfaces aligned.
- This is UI/report parity 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 08:36 - LIVE DIAG row summary added
- MIDI Health now exposes livePerformanceTroubleshootingRowSummary beside the structured row array and prose troubleshooting line.
- The summary reports row count, attention count, and the first focus such as lower audio buffer, direct input route, hardware output route, sample-position proof, or SoundFont prepared pool.
- This is diagnostic/report architecture only; live MIDI routing, scheduling, recording, SysEx, hardware output, and synth behavior were not changed.
- Verified: MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild.
2026-07-19 08:22 - Live MIDI troubleshooting rows added
- MIDI Health now serializes livePerformanceTroubleshootingRows alongside the compact prose summary.
- Rows cover audio buffer, direct input queue, hardware output queue, sample-position proof, and SoundFont prepared-pool state when relevant.
- This is diagnostic architecture only: no live MIDI routing, scheduling, recording, SysEx, hardware output, or synth behavior changed.
- Verified: MIDI_HEALTH, MIDI_READINESS -NoBuild, MIDI_CLOSEOUT -NoBuild.
2026-07-19 08:09 - MIDI lag diagnostics improved
- Health/report data now includes livePerformanceTroubleshootingSummary. It does not alter the audio/MIDI path; it clarifies what SpaceAge can observe before blaming controller hardware, interface routing, audio buffer size, or SoundFont pool behavior.
2026-07-19 08:00 - Copy action safety parity
- COPY QA and COPY CLOSEOUT now share the same safety-reporting contract shape: clipboard text, action surface, protocol report var, and health summary var all describe copy-only behavior consistently.
2026-07-19 07:52 - Closeout copy safety contract
- COPY CLOSEOUT now exposes a shared safety summary instead of relying only on repeated text in the clipboard report.
- Current MIDI closeout UI/report layer is less likely to drift between visible cards, copied text, and serialized health data.
2026-07-19 - Closeout Row Summary Reaches the UI
- MIDI Health and MIDI Protocol Coverage now render the model-owned closeout row summary directly. The old prose checklist remains available, but the first visible line is now stable data, not string-parsed UI state.
2026-07-19 - Closeout Row Summary for UI Consumers
- Protocol Coverage now exports currentFinishLineCloseoutChecklistRowSummary beside currentFinishLineCloseoutChecklistRows. This gives Settings/MIDI Health a stable compact status line for the closeout list without scraping prose.
2026-07-19 - MIDI Closeout Checklist Serialization
- currentFinishLineCloseoutChecklistRows now exposes each closeout blocker as structured data: category, owner surface/action, route proof, safety class, QA session, release role, recommended focus, and summary line.
- MIDI Health now carries the same rows, keeping the finish-line UI/reporting path aligned with Protocol Coverage.
2026-07-19 - Owner Surface Closeout Rows
The current MIDI closeout-by-owner-surface checklist now has structured row data. Future cockpit UI can display owner surface cards directly, including route proof and safety class, without scraping the multiline checklist text.
2026-07-19 - Release Claims Have Structured Guardrails
Release wording audit checks now expose structured rows. This preserves the readable checklist while giving future UI a safer way to show which public claims are guardrails versus release-blocking promises requiring saved receipts.
2026-07-19 - QA Run Order Is UI-Ready Data
The MIDI closeout run order is no longer only prose. It now exposes structured row data for cockpit cards/checklists while preserving the human-readable summary. This keeps route proof, safety class, QA session id, and proof cues attached to each row as first-class data.
2026-07-19 - Closeout Action Card Is Navigation-Only
The next MIDI closeout action card now declares that clicking the card opens a surface only. It does not send MIDI, mutate project state, change routing, or affect external hardware. This gives the future MIDI cockpit a clean action-card contract instead of relying on prose or category names.
2026-07-19 - Finish-Line Clipboard Actions Are Structured
COPY QA and COPY CLOSEOUT now have explicit action surfaces. They are cold, copy-only actions: no MIDI send, no routing mutation, no project mutation, and no external hardware change. This keeps the QA/closeout buttons aligned with the same structured-action model now used by the MIDI cockpit.
2026-07-19 - Cockpit Summary Uses Structured Action Surface
MIDI Health now exposes both cockpitNextActionSurface and cockpitNextActionSurfaceSummary. This gives the UI a compact user-facing line while keeping the underlying button/source/safety fields available for future cockpit rendering.
2026-07-19 - MIDI Health Cockpit Action Contract
The MIDI Health cockpit now exposes cockpitNextActionSurface with label, uttonLabel, source, and QA action safety fields. This keeps the customer-facing cockpit button on a structured contract instead of relying on free-text guessing.
2026-07-19 - MIDI Health Uses Canonical Receipt Action Text
MIDI Health now pulls QA receipt action wording from the same action-surface summary as Protocol Coverage. This removes duplicate can-save-only wording and keeps cockpit, next-steps, and closeout reports aligned.
2026-07-19 - QA Receipt Button Wording Uses Active Action
The next QA receipt action summary now reports enabled state from the active action surface. COMPLETE QA RECEIPT correctly reports enabled=yes, canComplete=yes, and canSave=no, preventing the UI or clipboard text from implying the button is unavailable.
2026-07-19 - Next Receipt Action Matches Finish-Line Action
The next closeout QA receipt action now has the same structured action-surface shape as the current finish-line action. This keeps the MIDI cockpit from needing one-off logic for current versus next receipt buttons.
2026-07-19 - Receipt Action Surface Is Structured
The MIDI closeout model now exposes the current QA receipt action surface as structured payload data. UI can display the safe receipt button state directly (COMPLETE QA RECEIPT, completeQaReceipt, sendsMidi=false) without scraping the summary sentence.
2026-07-19 - QA Run Order Is UI-Ready
Protocol Coverage now exposes currentFinishLineQaRunOrderLines, and MIDI Health mirrors it. The existing currentFinishLineQaRunOrderSummary remains for reports, while UI can render each proof step as its own row.
2026-07-19 - Next Closeout QA Checklist Is UI-Ready
Protocol Coverage now exports nextCloseoutQaChecklistLines, and MIDI Health mirrors it. The next blocker still has a human summary, but the UI can now render the individual QA proof rows directly.
2026-07-19 - Next MIDI Closeout Action Is Machine-Readable
Protocol Coverage now exports nextCloseoutActionCard, and MIDI Health mirrors it. The existing nextCloseoutActionCardSummary remains for reports, while UI can render the same facts from stable fields such as categoryName, actionSurfaceId, actionButtonLabel, safetyClass, and qaSessionId.
2026-07-19 - Release Wording Checklist Has UI Rows
Protocol Coverage now exposes releaseWordingAuditChecklistLines, and MIDI Health mirrors it as releaseWordingAuditChecklistLines. This lets future UI render the claim-safety checklist as rows without parsing report text, while the existing plain-text report stays readable for humans.
2026-07-19 - Health Payload Owns Release Wording Boundary
MidiProjectHealthSummary::toVar() now mirrors safePublicMidiClaimSummary and releaseWordingAuditChecklist from Protocol Coverage. The UI can read MIDI Health directly without reaching into a deeper protocol report for claim-safe wording. Verified with rebuilt MIDI_HEALTH, then MIDI_READINESS -NoBuild and MIDI_CLOSEOUT -NoBuild; all passed.
2026-07-19 - Full Health Report Matches Next Steps Claim Boundary
MidiProjectHealthSummary::toPlainTextReport() now includes Safe public MIDI claim status: <status> - <helper>, matching the next-steps report and JSON payload. Verified with rebuilt MIDI_HEALTH, then MIDI_READINESS -NoBuild and MIDI_CLOSEOUT -NoBuild; all passed.
2026-07-19 - MIDI Health Plain Text Carries Claim Boundaries
The MIDI Health next-steps report now includes Public MIDI claim: <status> - <helper>, so the same honesty rule visible in JSON can also appear in reports, diagnostics, and future copy/paste support messages. Verified with rebuilt MIDI_HEALTH, then MIDI_READINESS -NoBuild and MIDI_CLOSEOUT -NoBuild; all passed.
2026-07-18 - Public Claim Badge Now Has Helper Text
MIDI Health now exposes safePublicMidiClaimHelperText beside safePublicMidiClaimStatusLabel. This gives the UI enough context to explain why a snapshot is hardware-proof-pending or beta-only instead of leaving the user with a cryptic badge. Verified with rebuilt MIDI_HEALTH, then MIDI_READINESS -NoBuild and MIDI_CLOSEOUT -NoBuild; all passed.
2026-07-18 - Public MIDI Claim Status Is Explicit
MIDI Health now exposes safePublicMidiClaimStatusLabel, a compact label for what SpaceAge can safely claim about MIDI right now. Software-ready snapshots with missing real-device receipts report as hardware-proof-pending, while blocked closeout states still report as internal/beta-only instead of implying public completion. Verified with rebuilt MIDI_HEALTH, then MIDI_READINESS -NoBuild and MIDI_CLOSEOUT -NoBuild; all passed.
2026-07-18 - Hardware Proof Readiness Separates Ready From Proven
MIDI Health now exposes hardwareProofChecklistPercent and hardwareProofReleaseReady. This keeps the customer-facing MIDI cockpit honest: hardware setup can be ready for evidence while still not release-proven until every proof checklist item has saved evidence.
Focused verification: rebuilt MIDI_HEALTH, then ran MIDI_READINESS -NoBuild and MIDI_CLOSEOUT -NoBuild; all passed.
2026-07-18 - Next MIDI Action Card Added
The MIDI Health payload now includes a compact nextCloseoutActionCardSummary field. This gives the Settings/MIDI cockpit a direct, readable card for the next action: category, button label, action surface, route/proof state, safety class, and QA session id.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_HEALTH -NoBuild and MIDI_CLOSEOUT -NoBuild; all passed.
2026-07-18 - Remaining MIDI Focus Is Prioritized
The remaining MIDI 1.0 focus report now starts with the next actionable closeout category and its route/safety/QA identifiers instead of only naming a broad checklist. This makes the cockpit more useful for deciding what to test next.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_HEALTH -NoBuild and MIDI_CLOSEOUT -NoBuild; all passed.
2026-07-18 - MIDI Health Cockpit Counts Mirror Protocol Coverage
MIDI Health now exposes the same release-gate count facts needed by a cockpit UI: finish-line family count, blocker count, readiness percent, deferred future count, real-hardware pending count, and backend-ready/UI-pending count. This keeps the visible status dashboard numeric and machine-readable.
Focused verification: rebuilt MIDI_HEALTH, then ran MIDI_READINESS -NoBuild and MIDI_CLOSEOUT -NoBuild; all passed.
2026-07-18 - QA Receipt Persistence Counts Are UI-Ready
Protocol Coverage and MIDI Health now export numeric QA receipt persistence counts beside the existing prose summary. Future Settings panels can render badges and status rows from structured fields instead of parsing text: template count, valid saved count, invalid saved count, unsaved template count, save-ready count, and missing-field row count.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_CLOSEOUT -NoBuild and MIDI_HEALTH -NoBuild; all passed.
2026-07-18 - Receipt Count Naming Now Matches Closeout Semantics
Receipt-store and closeout tests now prefer validSavedReceiptCount/invalidSavedReceiptCount everywhere except the intentional compatibility payload alias. This reduces the chance that a future UI/reporting pass mistakes visible saved history for valid proof.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_CLOSEOUT -NoBuild and MIDI_HEALTH -NoBuild; all passed.
2026-07-18 - Receipt Store Valid/Invalid Saved Counts Are Explicit
The MIDI QA receipt store now exposes valid and invalid saved receipt counts as separate API and serialized payload fields. savedReceiptCount remains available as the valid-saved compatibility alias, but downstream UI should prefer validSavedReceiptCount and invalidSavedReceiptCount so closeout displays cannot confuse visible history with usable proof.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_CLOSEOUT -NoBuild and MIDI_HEALTH -NoBuild; all passed.
2026-07-18 - Finish-Line QA Summary Uses Valid Saved Receipt Language
The MIDI finish-line QA receipt persistence summary now distinguishes valid saved PASS/FAIL/BLOCKED receipts from invalid saved rows. This keeps visible closeout status aligned with the ledger rule: corrupted saved history can be shown, but it does not count as proof.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_CLOSEOUT -NoBuild and MIDI_HEALTH -NoBuild; all passed.
2026-07-18 - Receipt Ledger Separates History From Valid Proof
The MIDI QA receipt ledger now treats malformed saved blobs as historical artifacts, not valid proof. savedReceiptCount() only counts saved receipts that still satisfy the full save-readiness contract, and the audit trail reports validSaved to avoid overstating evidence.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_CLOSEOUT -NoBuild and MIDI_HEALTH -NoBuild; all passed.
2026-07-18 - QA Receipt Action Surface Explains Route/Safety Gaps
The QA receipt action surface now has regression coverage for malformed receipts missing route proof, safety class, or action surface identity. Those receipts remain in the COMPLETE QA RECEIPT state, and the helper text names the missing field before SAVE QA RECEIPT can appear.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_CLOSEOUT -NoBuild and MIDI_HEALTH -NoBuild; all passed.
2026-07-18 - QA Receipt Save Readiness Has Safety/Route Guardrails
MIDI QA receipt save-readiness is now regression-protected for the fields that make a receipt auditable: safety class, route proof status, and action surface identity. This keeps receipt history from becoming a pile of unexplained PASS notes.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_CLOSEOUT -NoBuild and MIDI_HEALTH -NoBuild; all passed.
2026-07-17 - Software-Green Is Not Launch-Green
The MIDI launch-proof report now clearly says that backend/software readiness is not the same as launch proof. Public MIDI wording must follow saved PASS receipts, PASS/FAIL/BLOCKED receipt history, and hardware/round-trip evidence, not just the backend percentage.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_CLOSEOUT -NoBuild and MIDI_HEALTH -NoBuild; all passed.
2026-07-17 - Manual MIDI QA Run Steps Are Evidence-Gated
MIDI QA run steps now instruct testers to capture evidence before marking PASS/FAIL/BLOCKED and to save receipts only when the observed result matches the claim. This reduces the risk of optimistic QA receipts that look complete but do not prove the musical or hardware behavior.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_CLOSEOUT -NoBuild and MIDI_HEALTH -NoBuild; all passed.
2026-07-17 - QA Evidence Artifacts Are Explicit
MIDI closeout rows now identify both where evidence is saved and what sort of artifact should be captured. This makes future beta testing less ambiguous: notes alone are not enough when the claim depends on hardware behavior, file interchange, audio/render output, or timing observations.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_CLOSEOUT -NoBuild and MIDI_HEALTH -NoBuild; all passed.
2026-07-17 - Closeout Route Points To Saved Evidence
The MIDI closeout route now names the persistent QA receipt target directly in the next-route summary. This gives beta testers and the UI a concrete destination for proof instead of a vague instruction to test the next thing.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_CLOSEOUT -NoBuild and MIDI_HEALTH -NoBuild; all passed. Remaining work continues to be hands-on AUTO LANES receipts, real hardware timing/controller proof, guarded SysEx restore evidence, and DAW round-trip files.
2026-07-17 - Remaining MIDI 1.0 Proof Categories Are Explicit
The remaining MIDI 1.0 perfection report now names the concrete evidence still required for product trust: AUTO LANES hands-on editing QA, real-controller input/latency, external synth pitch-bend/pressure, RPN/NRPN hardware setup, guarded SysEx restore attempts, DAW file round trips, live timing checks, and complete project reopen/export scenarios.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_CLOSEOUT -NoBuild and MIDI_HEALTH -NoBuild; all passed. This keeps the backend almost-done status from being confused with finished customer-facing proof.
2026-07-17 - Release Gate Evidence Boundary Hardened
The MIDI release gate now states the distinction we need for beta and marketing discipline: internal implementation is not field proof. Regression tests verify that the structured MIDI Protocol Coverage payload exposes the blocked status, customer-facing closeout wording, the next blocker, and the explicit field-proof warning.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_CLOSEOUT -NoBuild and MIDI_HEALTH -NoBuild; all passed. Remaining product-trust items are still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, external hardware checks, and real-file DAW round trips.
2026-07-17 - Public MIDI Language Is Evidence-Bound
MIDI Protocol Coverage now has stricter regression coverage around safe public MIDI claims. SpaceAge can honestly describe 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 until the validation ladder has saved receipts for those exact promises.
Focused verification: rebuilt MIDI_CLOSEOUT, then ran MIDI_HEALTH -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - Public MIDI Claims Follow The Validation Ladder
MIDI Protocol Coverage now has stricter regression coverage around the release-candidate validation ladder. A MIDI feature can move toward public release only through evidence-backed rungs: self-tests/fixtures, open UI routes, visible workflow completion, saved PASS/FAIL/BLOCKED receipts, real file round trips, real hardware/live-monitoring checks, and release notes that say only what the evidence supports.
Focused verification: rebuilt MIDI_CLOSEOUT, then ran MIDI_HEALTH -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - Internal MIDI Reports Are Not Real-Hardware Proof
MIDI Protocol Coverage now has stricter regression coverage around real-hardware validation. SpaceAge-side reports, fixtures, receipt templates, queue plans, audit fingerprints, and self-tests prove internal intent only. Real release trust requires saved PASS/FAIL/BLOCKED checks with real controllers, MIDI interfaces, DAW hosts, imported/exported files, external synths, SysEx restore attempts, bend-range tests, clock/transport sync, and live monitoring/timing observations.
Focused verification: rebuilt MIDI_CLOSEOUT, then ran MIDI_HEALTH -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - QA Receipt Forms Are Not QA Evidence Until Saved
MIDI Protocol Coverage now has stricter regression coverage around QA receipt persistence. The existence of receipt templates and readiness labels proves the proof form exists, but does not prove a QA pass happened until the result, checker/timestamp, evidence notes, receipt refs, and blocking/follow-up decisions are saved with the project or exported QA record.
Focused verification: rebuilt MIDI_CLOSEOUT, then ran MIDI_HEALTH -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - Timing Proof Is Not The Same As Felt-Latency Proof
MIDI Protocol Coverage now has stricter regression coverage around timing/live-lag claims. SpaceAge can preserve sample offsets, schedule hardware lane output, drain live input before sequencer rendering, and store recorded-event compensation, but that proves internal timing intent rather than the player's felt latency.
Focused verification: rebuilt MIDI_CLOSEOUT, then ran MIDI_HEALTH -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - MIDI Import Cannot Silently Rewrite The Conductor Timeline
MIDI Protocol Coverage now has stricter regression coverage around imported tempo, meter, and key maps. SpaceAge can inspect and receipt source conductor data, and may deliberately adopt first source tempo/key when that user policy is chosen, but full tempo/meter/key map adoption remains review-only until an undo-safe conductor timeline exists.
Focused verification: rebuilt MIDI_CLOSEOUT, then ran MIDI_HEALTH -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - MIDI Learn Capture Is Not Control-Feel Proof
MIDI Protocol Coverage now has stricter regression coverage around MIDI Learn and control-map conflict trust boundaries. Capturing a CC, pitch bend, pressure, or poly-pressure source proves source observation and assignment intent, but not final musical feel until the user confirms pickup behavior, curve/range, conflicts, target behavior, and hardware feel in context.
Focused verification: rebuilt MIDI_CLOSEOUT, then ran MIDI_HEALTH -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - SysEx Restore Proof Cannot Be Inferred From Stored Bytes
MIDI Protocol Coverage now has stricter regression coverage around the SysEx restore trust boundary. Stored snapshots and queued bytes remain explicitly non-proof; external-device trust requires matching device identity plus ACK/NAK/WAIT/CANCEL response evidence, successful restore verification, or explicit manual confirmation.
Focused verification: rebuilt MIDI_CLOSEOUT, then ran MIDI_HEALTH -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - Real-File MIDI Interchange Claims Stay Evidence-Bound
MIDI Protocol Coverage now has stricter regression coverage for the real-file import/export trust boundary. Internal fixtures and self-tests remain known-case proof only; release trust still requires real DAW/host round trips with DAW files, General MIDI/XG files, dense controller files, warning-heavy setup files, and exported stems opened elsewhere.
Focused verification: rebuilt MIDI_CLOSEOUT, then ran MIDI_HEALTH -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - Live-Lag Health Wording Is Regression-Protected
MIDI Health now has stricter regression coverage around live-lag diagnostics. High-buffer reports must keep the real-world latency chain visible: audio-device buffer first, then driver/interface/controller path, duplicate host/direct routing, wired monitoring, and the distinction between live feel and recorded-event alignment. This keeps the app from pretending MIDI Timing compensation removes monitoring lag.
Focused verification: rebuilt MIDI_HEALTH, then ran MIDI_CLOSEOUT -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - Hardware Proof Requires A Visible Round-Trip Row
MIDI Health now has regression coverage that keeps the round-trip MIDI file row anchored inside the hardware proof checklist. This protects the launch-proof workflow from becoming too optimistic: Hardware Passport, timing, test phrase, SysEx verification, DAW/host round trip, and saved PASS/FAIL/BLOCKED receipts remain distinct proof steps.
Focused verification: rebuilt MIDI_HEALTH, then ran MIDI_CLOSEOUT -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - Export Write Receipts Preserve The Musical Trust Boundary
MIDI export write receipts now have regression coverage requiring the plain-text receipt to say musical trust still requires opening or re-importing the file. This keeps the final copied/export handoff object aligned with the preview/readiness model: file write success proves bytes, not musical correctness in another environment.
Focused verification: rebuilt MIDI_CLOSEOUT, then ran MIDI_HEALTH -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - AUTO LANES Readiness Distinguishes Visible Tools From Release Proof
AUTO LANES status text now separates first-pass editor visibility from product-ready release proof. A row can have visible editor tools and still need hands-on QA receipts before SpaceAge claims the workflow is finished. Clean snapshots with no row-specific gaps still say saved QA receipts are required.
Focused verification: rebuilt MIDI_HEALTH, then ran MIDI_CLOSEOUT -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - MIDI Import Readiness Now Separates Safe Mutation From Musical Proof
MIDI import validation now says readiness is a safe mutation plan, not proof of musical correctness. Applied import receipts say SpaceAge changed the project model, but playback plus re-export or re-open verification is still required before trusting the imported material as a musical handoff.
Focused verification: rebuilt MIDI_CLOSEOUT, then ran MIDI_HEALTH -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - Hardware Proof Badge Uses Evidence-First Wording
The MIDI Health proof badge now says ready for evidence when the checklist has no visible blocker but still lacks real release receipts. This keeps the compact UI aligned with the deeper checklist language: ready is not the same as proven.
Focused verification: rebuilt MIDI_HEALTH, then ran MIDI_CLOSEOUT -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - Hardware Proof Ready State Is Not Release Proof
MIDI Health now protects the distinction between no visible blocker and actual release proof. When hardware proof rows are merely ready, the report says release trust still requires saved real device, file, host, or manual verification evidence. This prevents a ready checklist from sounding like completed hardware validation.
Focused verification: rebuilt MIDI_HEALTH, then ran MIDI_CLOSEOUT -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - Hardware Proof Checklist Uses Evidence-First Release Language
The MIDI Health hardware proof checklist no longer says the checklist has enough evidence by itself. The receipt row now states that a MIDI path is release-proven only after saved evidence names the real device, file, host, or manual verification result. This keeps release language attached to actual proof, not model readiness.
Focused verification: rebuilt MIDI_HEALTH, then ran MIDI_CLOSEOUT -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - Live-Feel Latency And Timeline Alignment Are Separate In Health
MIDI Health now says the critical distinction plainly: MIDI Timing recorded alignment fixes where recorded notes land on the timeline, but it does not remove live monitoring lag. Live feel must be diagnosed through buffer size, driver/interface/controller path, direct queue age, duplicate host/direct routing, and wired monitoring.
Focused verification: rebuilt MIDI_HEALTH, then ran MIDI_CLOSEOUT -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - Export Trust Boundary Now Calls Out MIDI PATCH And SysEx Vault
The MIDI export validation checklist now explicitly tells users/testers to review MIDI PATCH and SysEx Vault separately when setup, bank/program, RPN/NRPN, or SysEx hardware state matters. This keeps musical MIDI file handoff proof separate from external-device restore proof.
Focused verification: rebuilt MIDI_CLOSEOUT, then ran MIDI_HEALTH -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency/hardware receipts, guarded SysEx restore proof, and real import/export round trips.
2026-07-17 - AUTO LANES Doorway Script Names Every Route
The AUTO LANES no-row next-step script now names the same four customer-facing doors as the proof/checklist layer: Piano Roll AUTO, Arrangement AUTO LANES, MIDI TASKS, and Settings. The MIDI Health gate now protects that wording so the first-time automation workflow does not collapse back to only one or two entry points.
Focused verification: rebuilt MIDI_HEALTH, then ran MIDI_CLOSEOUT -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still hands-on AUTO LANES receipts, real-controller latency/hardware receipts, SysEx restore proof, and import/export round trips.
2026-07-17 - No-Armed-Lane Recording Cannot Silently Fall Back
The MIDI Health gate now protects the dangerous edge case directly: if no Arrangement lane is armed, live Arrangement recording is blocked rather than routed to a selected clip, visible pattern, or old edit target. Monitoring can still be preview-only, but recording requires an armed lane.
Focused verification: rebuilt MIDI_HEALTH, then ran MIDI_CLOSEOUT -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is still visible AUTO LANES workflow proof, real-controller latency/hardware receipts, SysEx restore proof, and import/export round trips.
2026-07-17 - Lane-Owned MIDI Recording Language Is Now The Contract
MIDI Health no longer describes live recording as falling back to a visible pattern or edit target. The current product rule is lane-owned: the armed Arrangement lane is the performance owner, selected clips/lanes are editing context, and no armed lane means Arrangement recording is blocked until the user chooses a lane. Monitoring without an armed lane is preview, not a recording destination.
Focused verification: rebuilt MIDI_HEALTH, then ran MIDI_CLOSEOUT -NoBuild and MIDI_READINESS -NoBuild; all passed. Remaining MIDI 1.0 closeout work is visible automation workflow proof, real-controller latency/hardware receipts, SysEx restore proof, and import/export round trips.
2026-07-17 - MIDI Source Policy Diagnostics Are Now Gate-Protected
The MIDI backend now reports AUTO input-source decisions in plainer terms: lane-pinned direct input wins and suppresses host duplicates; if no direct input is pinned, SpaceAge accepts both host/plugin MIDI and direct physical controllers, with MIDI Health warning when multiple paths create duplicate-note risk. Multiple direct controllers are also reported as independently identified, with guidance to check the armed lane assignment if notes arrive from the wrong keyboard.
Focused verification: rebuilt MIDI_READINESS, then ran MIDI_CLOSEOUT -NoBuild; both passed. Remaining MIDI 1.0 closeout work is still real hardware evidence, automation-lane hands-on proof, and final customer-facing setup polish rather than another generic parser rewrite.
2026-07-17 - Current MIDI Status After Named Gate Alignment
Software-side MIDI 1.0 implementation is in closeout/high-90s status. The corrected runner now verifies the fresh build-local executable through named gates: MIDI_LATENCY_WRAP, MIDI_RECORD_TIMING, MIDI_CLOSEOUT, MIDI_HEALTH, and MIDI_PROJECT_READINESS. These cover timing compensation, loop-edge note splitting, multi-controller source ownership, expression receipts, sustain/channel mode behavior, direct-device generation handoff, health timing, protocol foundation, import/export readiness, SysEx Vault scaffolding, MIDI Learn, RPN/NRPN setup cards, sync chase, and project-readiness reporting.
Remaining MIDI 1.0 release confidence is not another generic parser rewrite. It is evidence work: hands-on AUTO LANES QA, real USB and DIN controller latency checks, Hardware Passport bend/setup receipts, real external synth response, guarded SysEx restore proof, and MIDI file/host round trips. Public wording should remain "advanced MIDI 1.0 foundation" until those saved receipts exist.
2026-07-16 - MIDI Readiness Gate Uses A Structural Contract
The MIDI project-readiness self-test no longer fails just because prose in the health report changes from one honest phrase to another. It now verifies the durable contract: readiness/expression counts, AUTO LANES doorway and ownership reporting, Hardware Passport warning state, sync policy warning state, protocol coverage summary, dropped-recording warnings, SysEx Vault reporting, and QA receipt availability.
Focused gates passed after the cleanup: MIDI project readiness, MIDI Health, MIDI closeout regression, and MIDI record timing. Remaining MIDI 1.0 launch proof is unchanged: real-device latency/passport checks, AUTO LANES hands-on QA, import/export round trips, SysEx restore receipts, and customer-facing setup polish.
2026-07-16 - MIDI Completion Reporting Is More Honest
The MIDI progress report now separates three truths that had been easy to blur: software/model implementation, visible UI/workflow readiness, and release-proof external evidence. This is the answer to the earlier confusion about why MIDI could feel high-90s in backend terms but lower in closeout terms. The code did not regress; the report now makes the unpaid evidence bill visible.
Focused gates passed after the wording change: MIDI readiness, MIDI Health, and MIDI closeout regression. Remaining launch proof still requires real controllers/interfaces, hardware receipts, import/export round trips, SysEx restore receipts, and hands-on AUTO LANES QA.
2026-07-16 - Stable AUTO LANES Doorway
The customer-facing automation doorway is now intentionally named AUTO LANES in the Arrangement view. The backend still distinguishes Shared PTN, Clip Local, and Lane Local ownership, but the user should not have to decode separate CLIP AUTO and LANE AUTO labels just to find automation. Context lives inside the editor/reporting layer; the doorway name stays stable.
Focused gates passed after this cleanup: MIDI Health, MIDI closeout regression, and MIDI record timing. Remaining launch evidence is unchanged: real hardware latency/passport validation, hands-on AUTO LANES workflow proof, SysEx/import/export receipts, and final customer-facing polish.
2026-07-16 - MIDI Export Evidence Boundary
The MIDI export plan now explicitly separates readiness from proof. A ready plan means SpaceAge found exportable material and prepared the correct file/stem rows. A completed write means bytes were written. Real customer/collaborator trust still requires opening or re-importing the exported file/package and checking the validation checklist. This keeps MIDI export closeout honest and prevents internal planning evidence from being mistaken for external interoperability proof.
2026-07-16 - MIDI Export Handoff Checklist
MIDI export readiness now includes a customer-facing validation checklist. The checklist does not claim that a human has opened the generated file in another DAW, but it does tell the user exactly what still needs confirmation: musical length, tempo, timeline boundaries, lane separation, channel assignment, selected-clip source offset, pattern-local AUTO LANES, expression data, pitch-bend range trust, and unresolved warnings. This tightens the final MIDI handoff workflow without pretending that local code tests replace real collaborator/customer import evidence.
2026-07-16 - MIDI QA Evidence Button State Clarified
The MIDI Health QA evidence button now reports the actual state of the pending receipt. Pending incomplete evidence is labelled COMPLETE QA; only a save-ready receipt should be described as saveable. This keeps the MIDI closeout workflow honest: a button label should not imply that unperformed QA has already been captured.
2026-07-16 - MIDI Health AUTO TOOLS Cockpit Line
MIDI Health now separates AUTO LANES launch readiness from operation coverage. AUTO OPS reports whether rows are ready enough for launch QA, while AUTO TOOLS reports what editor operation families are covered. This makes the customer-facing MIDI dashboard more honest and reduces the need to copy a report just to understand what AUTO LANES can do.
2026-07-16 - AUTO LANES Doorway Wording Alignment
The AUTO LANES backend ownership model already supports Shared PTN, Clip Local, and Lane Local data. This pass aligns the customer-facing doorway wording with the current Arrangement controls: users should look for the stable AUTO LANES doorway, not older CLIP AUTO / LANE AUTO or badge/AUTO+ terminology.
The focused build, record-timing, closeout-regression, and MIDI Health gates passed. The broader project-readiness gate still correctly reports launch blockers because it includes unperformed human/hardware evidence, QA receipts, SysEx/import/export proof, and live-device validation.
2026-07-16 - Arrangement Expression Playback Snapshot Boundary
Arrangement expression playback now uses the same prepared-state model as Arrangement note/chord playback. Shared PTN expression events come from the pattern playback snapshot, while Lane Local and Clip Local expression events come from immutable maps copied into the sequencer playback snapshot.
This removes the remaining known patternMutex dependency from the Arrangement playback decision path. The remaining MIDI launch risk is no longer this backend lock boundary; it is physical-device QA, visible automation-lane polish, and any undiscovered UI workflow defects.
2026-07-16 - Arrangement Note/Chord Playback Snapshot Boundary
Arrangement note and chord playback now consumes the published sequencer snapshot plus per-pattern playback snapshots. The audio path no longer needs to read live Arrangement clip/lane containers or pattern note/chord containers to decide which musical notes and Chord Engine markers should sound in context.
The remaining realtime cleanup risk is narrower and more honest: Arrangement expression playback still enters the guarded expression payload helpers so Shared PTN, Lane Local, and Clip Local automation continue to layer correctly. The next backend step is to publish lane/clip-local expression snapshots so that expression playback can leave the mutex path too.
2026-07-16 - Pattern Playback Snapshot Boundary
Pattern-level isolated playback now reads immutable snapshots instead of locking pattern storage on the audio thread. The published snapshot includes drum steps, Piano Roll notes, Chord Engine markers, MIDI expression events, and the effective pattern length, and it is refreshed after the main pattern-edit and MIDI-recording commit paths. This closes a meaningful part of the audio-thread cleanup work without pretending the whole category is finished.
The remaining realtime cleanup item is Arrangement playback: it still has code paths that read lane/clip state under the pattern mutex. The correct next step is to extend the same snapshot idea to Arrangement lane/clip-local playback so shared pattern, lane-local, and clip-local automation continue to agree without requiring live playback locks.
2026-07-16 - Expression Timing Checklist Closed
Sequencer-generated MIDI expression events already retain their local in-step timing through live playback, plugin MIDI output, and internal synth-state application. The expression queue computes each event's delay from its tick offset inside the step, adds the audio-block base delay, and dispatches at the resulting sample position. Existing regression evidence proves CC11 lands at samples 0 and 1200, so the release checklist now marks expression sample-offset rendering complete. Queued hardware cancellation is also marked complete because route/reset epochs and stale-generation rejection are covered by focused MIDI timing regressions.
2026-07-16 - Step Input Switch Preserves Recording Notes
Switching from live MIDI recording into MIDI Step Input now closes active recorded notes before clearing recording state. This prevents a held performance note from disappearing if the user changes input modes mid-gesture. The focused record-timing gate now proves the transition by starting a note at step 6, enabling Step Input at step 10, and verifying a committed 4-step note while recording is off and Step Input is on.
2026-07-16 - Record Disarm Commits Held Notes
MIDI recording now treats disarm as a musical commit point instead of a silent cancellation of held notes. When recording is turned off, SpaceAge closes all active recorded notes at the current compensated step position, writes the note data, then clears transient live-recording state. Focused record-timing coverage proves a note-on at step 4 becomes a 5-step note when record is disabled at step 9. This complements the loop-edge split behavior and closes another user-facing "I played it, but it vanished" failure mode.
2026-07-16 - Loop-Edge MIDI Recording Implementation
Live MIDI note recording now handles pattern-edge wraparound without silently truncating the performance. If a note starts near the end of the active pattern and is released after the transport wraps, SpaceAge writes a boundary-ending note plus a step-zero continuation note. This keeps MIDI data legal, visible, and editable while preserving the musical duration the user actually played. Focused record-timing coverage now includes this exact case, alongside long clips, repeated clips, drum capture, direct controller isolation, source ownership, and timing-policy checks.
2026-07-15 - AUTO LANES Ownership Source-Of-Truth Closeout
The live Controllers coverage row, category focus, editor plans, plain-text reports, UI copy, and regression tests now describe the same implemented owners: Shared PTN, Clip Local, and Lane Local. Reports name the current owner and the runtime/export precedence Shared PTN -> Lane -> Clip. Older dated notes that call clip/lane ownership future architecture are historical and superseded. Remaining launch work is hands-on doorway, owner-isolation/layering, Undo/Redo, playback, export, curve-handle, and real-device bend-gate evidence rather than another storage model.
2026-07-15 - AUTO LANES QA Identity And Coverage Hardening
AUTO LANES PASS evidence now uses exact zero-based Pattern, Clip, and Lane coordinates, entered as familiar one-based numbers in MIDI Health. The canonical session id and persistent-state key must agree; changing either one cannot bypass the structured gate. A launch-closing PASS requires ALL REQUIRED DOORWAYS, ALL OWNERS, and ALL_OWNERS_VERIFIED, so one successful Shared PTN or Clip Local test cannot close the entire feature.
Current ownership reporting now matches the implementation: AUTO LANES supports Shared PTN, Clip Local, and Lane Local ownership; playback/export layers Shared PTN, then Lane Local, then Clip Local. Motion Clips and general non-MIDI Arrangement automation remain future work. Focused receipt tests and the full Release self-test are green; broad evidence is midi-broad-current-8.log.
2026-07-15 - Structured AUTO LANES QA Evidence
AUTO LANES can no longer be closed by saving an unstructured PASS receipt. MIDI Health now asks for the doorway used, selected automation owner, exact target reference, full edit/undo/playback/export proof, and an ownership result. The ownership result must match Shared PTN linked scope, Clip Local isolation, or Lane Local isolation. FAIL and BLOCKED receipts remain saveable when testing stops early, preserving honest failure evidence.
The append-only project ledger serializes and restores the structured evidence. Focused coverage rejects missing and owner-mismatched PASS receipts, accepts all three correctly matched owners, and proves project round-trip persistence. The full Release self-test passed in 140.6 seconds; evidence is stored in midi-broad-current-7.log. Remaining AUTO LANES proof is hands-on customer interaction across the visible doorways, not another backend ownership implementation.
2026-07-15 - Source-Pinned Hardware Timing Calibration
Hardware timing-pulse sessions now capture the selected Hardware Passport input and accept returns only from that exact physical source. A second controller sending the same note on the same channel is rejected and counted rather than contaminating the measurement. Direct-input queue-age timing remains signed through the observer, avoiding an artificial delay of up to one audio buffer. The full Release self-test passed, including the new multi-controller isolation regression; the green run is recorded in midi-broad-current-6.log.
The software calibration boundary is now closed. Remaining proof is environmental: run and save USB and 5-pin DIN receipts on the intended hardware, then attach those receipts to their Hardware Passports. Structured customer-facing AUTO LANES workflow evidence remains a separate release-readiness item.
2026-07-15 - Immutable SysEx Policy Registry Boundary
Hardware Passport SysEx behavior now resolves through an immutable compiled policy registry. Persisted projects store only normalized stable policy IDs and an exact message-family ID; they never serialize executable formulas or dynamically register trust rules. The first and only automatic policy is standards-based midi-sds scoped to midi-sds.data-packet. Unknown response/checksum policy IDs are unsupported and block automatic evidence rather than falling back to manufacturer guesses.
Generic Yamaha, Roland, and other manufacturer-specific frames no longer infer a device ID from the first payload byte, and generic vendor checksums remain not evaluated. Universal 7E/7F messages retain the standards-defined device-ID decode. Snapshot JSON and reports now preserve the exact family used for a trust decision. Release compilation and all 11 focused MIDI/Arranger gates passed. Remaining SysEx work is adding one verified implementation per device/message family plus saved USB/DIN hardware receipts; this is deliberately not universal vendor support.
2026-07-15 - Strict SysEx Restore Response Correlation
SysEx restore responses now require exact provenance before SpaceAge creates hardware-success evidence. Standard MIDI Sample Dump ACK/NAK/WAIT/CANCEL messages are eligible only when the outgoing snapshot is an SDS data packet, the response device id matches, the packet number matches, the input source policy matches, and exactly one active restore attempt can claim the response. Wrong-device, wrong-packet, non-SDS, unrelated, and ambiguous replies remain unconsumed. Snapshot summaries now preserve decoded descriptor, manufacturer, device, transfer, identity, checksum, warning, and completion metadata instead of dropping those fields at the processor boundary.
Release compile and all 11 focused MIDI release gates passed, including explicit mismatch, non-SDS, and ambiguous-attempt coverage. This closes false-positive generic SDS acknowledgement handling; it does not claim universal vendor-specific restore support. Remaining work is declarative Hardware Passport dialect/checksum rules plus saved real-hardware receipts for each supported Yamaha, Roland, or other device family.
2026-07-14 - Source-aware RPN/NRPN ownership
Live MIDI parameter selection and pitch-bend range now belong to (physical source generation, MIDI channel), so two controllers on the same channel cannot complete each other's selector or overwrite each other's bend range. Imported/setup-review parsing uses (sourceDeviceId, MIDI channel) and preserves same-tick wire order. RPN Null clears selection without destroying the committed range; CC121 clears transient controller/selector state while retaining the receiver's configured bend range; NRPN data cannot mutate SpaceAge's internal pitch range. Five focused Release gates pass. Mixed Data Increment/Decrement operations now retain exact wire order through review, serialization, and replay-plan generation. Confirmed hardware setup-card queue execution and real-device receipts remain separate closeout work and are not being claimed complete.
2026-07-14 - AUTO LANES Ownership Convergence Verified
AUTO LANES now exposes and persists three explicit owners: Shared PTN, Clip Local, and Lane Local. Runtime and Arrangement export resolve them in deterministic order: Shared PTN, then Lane Local, then Clip Local, so the most specific owner wins same-controller collisions. VARIANT resets editing to the newly independent Shared PTN. Focused Release gates passed for ownership order/export, variants, save/load, clip-deletion cleanup, MIDI readiness, MIDI health, and record timing. The broad legacy self-test was attempted but exceeded the five-minute timeout, so it is not being reported as passed or failed.
2026-07-14 - Clip/Lane-local Automation Persistence
Clip-local and lane-local MIDI expression containers have a save/load path in project state, and clip deletion clears the removed clip id's local expression payload. This storage-foundation note is superseded by the 2026-07-15 ownership closeout above: the owner selector, playback/export layering, reports, and QA model now promote Shared PTN, Clip Local, and Lane Local as explicit MIDI automation owners.
2026-07-14 - Effective Arrangement Automation Source Of Truth
AUTO LANES now has a real backend helper for Arrangement clip context. buildEffectiveMidiExpressionEventsForArrangementClip() no longer returns an empty list; it merges shared PTN automation with lane-local and clip-local data, filters to timeline expression messages, and sorts the result. This keeps Arrangement badges, Piano Roll AUTO context, readiness summaries, and future clip/lane ownership UI from disagreeing about what automation exists. Compile verification and focused readiness/health/record-timing gates passed.
2026-07-14 runtime queue closeout: the restored MIDI compatibility queues are no longer fake-success shells. MIDI learn/control mapping, SysEx restore response handling, and MIDI expression recording now enqueue/drain into real processor behavior. Incoming SysEx is handled before MIDI channel filtering so captures and restore replies are not blocked by lane channel policy. Build verification plus focused readiness, health, and record-timing gates passed. MIDI backend status remains closeout/high-90s internally, with the main remaining product risks now concentrated in visible AUTO LANES workflow polish and real-device latency/SysEx/hardware receipts.
2026-07-14 02:35 - Direct Input / Arrangement Recording Regression Closed
The restored compatibility layer now has test-proven Arrangement MIDI recording behavior again. Direct physical MIDI is drained from processBlock(), clip-local recording positions respect Arrangement clip start/source/repeat context, and live-recorded performance expression rejects setup chatter. Focused readiness, health, and record-timing gates all pass. Remaining MIDI closeout work should move back to customer-facing proof: real controller latency on Shane's USB vs mioXL DIN paths, visible Arrangement REC workflow, AUTO LANES usability, and hardware editor/editor-template validation.
2026-07-14 00:45 - Live MIDI Timing Boundary
- Direct physical MIDI and host/plugin MIDI now use separate live-output timing rules: direct input is monitored immediately when drained, while host/plugin MIDI retains its incoming JUCE sample position.
- Focused gates passed against
outputs/build-local-midi-closeout/SampleSquadAudioTest_artefacts/Release/SampleSquadAudioTest.exe:SPACEAGE_MIDI_RECORD_TIMING_ONLY,SPACEAGE_MIDI_READINESS_ONLY, andSPACEAGE_MIDI_HEALTH_ONLY. - This improves internal timing correctness but does not by itself prove a DIN controller rig feels latency-free; that still needs real-device observation.
2026-07-14 00:17 - MIDI Report-Path Performance Boundary
- Quick MIDI preflight/status UI now uses known/open/referenced device data rather than enumerating physical devices.
- Full juce::MidiInput::getAvailableDevices() / juce::MidiOutput::getAvailableDevices() calls remain confined to explicit inventory/device panels and the full inventory builder.
- Focused tests passed: SPACEAGE_MIDI_RECORD_TIMING_ONLY, SPACEAGE_MIDI_READINESS_ONLY, and SPACEAGE_MIDI_HEALTH_ONLY.
2026-07-13 - MIDI Timing/Readiness Gate Unblocked
- MIDI readiness and health reports now avoid physical hardware enumeration unless the user explicitly performs discovery. This prevents report generation from stalling live recording/timing workflows.
- Internal focused status: record timing, input readiness, and health gates pass after the no-scan inventory path. Backend MIDI 1.0 work remains in closeout mode: the main remaining risk is hands-on real-device latency/rig validation and customer-facing polish, not basic note/event capture math.
2026-07-13 16:25 - MIDI UI Closeout Surface Fit
- MIDI backend state unchanged; this pass improved customer-facing diagnostics. MIDI Health now prioritizes scannable cockpit rows and defers exhaustive details to COPY REPORT.
- Hardware Setup Guide cards now display fewer steps per card with explicit overflow language, preserving safe-door navigation while preventing overlapping text.
2026-07-13 - Hardened Arrangement REC target resolution: selected clips are reused only without an explicit playhead target, preventing offscreen/old clip recording surprises.
2026-07-13 Arrangement REC target-length alignment: fresh clips created by Arrangement REC now respect the visible LENGTH control instead of silently forcing 16 steps. This closes another workflow gap between what the user prepares in the Arrangement inspector and what the backend records into. Compile verification and focused MIDI timing regression passed. 2026-07-13 four-measure Arrangement MIDI capture verification: focused MIDI timing coverage now proves a 64-step Arrangement recording can capture notes across all four measures while preserving the lane instrument pad, playback MIDI channel, note lengths, and pattern length. This specifically fences the former user-facing fear that live recording might dump notes into the first measure or silently shrink the clip. 2026-07-13 Arrangement AUTO LANES visibility baseline: lane AUTO badges and selected Arrangement AUTO status now use effective clip-aware expression summaries instead of selected-pattern-only counts. This improves user-facing evidence for automation in context. Compile passed; focused MIDI regression passed twice after one transient first-run length mismatch. 2026-07-13 AUTO LANES context baseline: Piano Roll automation preview is now clip-aware in Arrangement context and falls back to selected-pattern summaries for standalone pattern editing. This aligns the visible compact strip with the deeper MIDI expression editor's effective automation model. Compile and focused MIDI timing/source-policy regression passed.
MIDI Implementation Status
2026-07-12 armed-lane recording rule pass: MIDI recording is now arrangement-first by contract. Starting record requires an armed Arrangement lane; selected patterns, selected clips, and the visible Piano Roll cannot quietly become standalone recording destinations. If the armed lane contains a real clip at the playhead, recording targets that clip's pattern; otherwise SpaceAge creates a new lane-owned clip/pattern in the armed lane. Compile verification passed for SampleSquadAudioTest.
2026-07-12 MIDI Health evidence visibility pass: the MIDI Health panel now includes a backend-owned QA STORE summary row sourced from MidiProtocolQaReceiptStore. This keeps the visible cockpit aligned with the append-only QA ledger in project state and prevents the UI from implying MIDI protocol completion without stored proof. Compile verification for SampleSquadAudioTest succeeded in the Visual Studio developer environment; running the executable timed out after two minutes with no useful output, so runtime self-test evidence remains pending for this pass.
2026-07-12 honesty boundary after read-only audit: keep public wording below "complete MIDI 1.0" until hardware receipts exist. Current state is best described as an advanced MIDI 1.0 foundation with strong internal coverage for note/channel data, editable performance expression, guarded setup messages, SysEx Vault/librarian flows, MIDI Learn persistence, and import/export planning. Launch-readiness still depends on hands-on QA for arrangement recording, visible AUTO LANES ownership, real hardware output timing, SysEx restore proof, and real MIDI file round trips.
Last updated: 2026-07-13
This file tracks how close SpaceAge is to a release-ready MIDI implementation.
Historical entries before the 2026-07-05 rename may use MIDI EXPR; older entries may also use MIDI AUTO as the compact tool name. The current customer-facing doorway is AUTO LANES / Shared PTN Data, because the first release surface edits shared pattern-owned automation rather than clip-local or lane-local automation.
Customer-facing MIDI closeout plan, 2026-07-12: MIDI Protocol Coverage now exports customerFacingMidiCloseoutPlanSummary. It keeps the remaining launch path focused on 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 release wording backed only by saved evidence. True MPE, MIDI 2.0, clip-local/lane-local automation, and universal hardware editors remain future layers.
Safe public MIDI claim, 2026-07-12: MIDI Protocol Coverage now exports safePublicMidiClaimSummary. It allows wording around an advanced MIDI 1.0 foundation with guarded import/export, lane routing, recording, playback, controller capture, SysEx vaulting, hardware setup scaffolding, and visible closeout reports, while blocking claims of complete MIDI 1.0, true MPE, MIDI 2.0, effortless hardware tightness, device-accepted SysEx restore, or universal DAW interchange until saved receipts prove those exact promises.
Release-candidate validation ladder, 2026-07-12: MIDI Protocol Coverage now exports releaseCandidateValidationLadderSummary. The report names the ordered proof path from Release self-tests and fixtures, to visible UI closeout workflow, to saved PASS/FAIL/BLOCKED receipts, to real-file DAW round trips, to real controllers/interfaces/external synths/SysEx/bend/clock/live-timing checks, and finally to public release notes that only claim rungs with saved evidence.
Real-hardware validation trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated realHardwareValidationTrustBoundarySummary. The copied report and structured payload state that SpaceAge-side MIDI reports, fixtures, receipts, queue plans, and self-tests prove internal intent only. Release trust requires saved PASS/FAIL/BLOCKED checks with real controllers, MIDI interfaces, DAW hosts, imported/exported files, external synths, SysEx restore attempts, bend-range tests, clock/transport sync, and live monitoring/timing observations.
Future protocol trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated futureProtocolTrustBoundarySummary. The copied report and structured payload state that 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 claims require zone policy, master/member channel ownership, per-note channel allocation, per-note editing, synth response, import/export, and hardware validation. MIDI 2.0 claims require UMP transport, profile exchange, property exchange, higher-resolution value domains, device negotiation, and compatibility tests.
Live recording capture trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated liveRecordingCaptureTrustBoundarySummary. The copied report and structured payload state that the armed Arrangement lane owns incoming MIDI notes and editable performance expression, while clip selection remains editing focus. Record-time capture is notes plus editable expression rows; Bank/Program, RPN/NRPN, Data Entry, SysEx, clock/transport, and protected channel-mode/reset messages stay in import/review/setup flows instead of becoming ordinary recorded automation.
Automation lane visibility trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated automationLaneVisibilityTrustBoundarySummary. The copied report and structured payload state that MIDI automation is product-trusted only when AUTO LANES are discoverable from musical context, openable from the selected PTN/clip, visibly labelled as shared pattern-owned data, editable with undo, and separated from future clip-local or lane-local automation ownership.
QA receipt persistence trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated qaReceiptPersistenceTrustBoundarySummary. The copied report and structured payload state that session ids, state keys, unsaved receipt templates, missing-field lists, save-readiness labels, and PASS/FAIL/BLOCKED vocabulary prove the proof form exists, but not that a QA pass happened. A real QA pass still needs saved result, checker/timestamp, evidence notes, receipt refs, and blocking/follow-up decisions.
Real-file import/export trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated realFileRoundTripTrustBoundarySummary. The copied report and structured payload state that fixtures and self-tests prove known model-owned import/export/stem-package cases, but release trust still requires round-trip validation with real DAW files, General MIDI/XG files, dense controller files, warning-heavy setup files, and exported stems opened in another DAW before broad MIDI interchange claims are safe.
Timing/live-lag trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated timingLiveLagTrustBoundarySummary. The copied report and structured payload state that sample-offset preservation, scheduled hardware output, early live-input draining, and recorded-event compensation prove SpaceAge's internal timing intent, but not the user's felt latency on a real rig. Buffer-size review, wired/controller/interface checks, MIDI Timing measurement or manual alignment, and live-monitoring tests remain the trust layer before changing musical timing.
Validation refresh, 2026-07-11: SampleSquadAudioTest exits cleanly after the latest MIDI backend work. The pass covers MIDI project readiness, lane MIDI input channel filtering, overlapping same-pitch MIDI import pairing, Arrangement MIDI import/export/readiness paths, live lane MIDI output, channel-aware recording, expression recording, panic/all-notes-off behavior, and the broader audio/export smoke tests. The backend remains in the high-90s foundation state; the remaining closeout work is customer-facing polish, real-hardware proof, and confidence-building UI around the backend.
Hardware bend-range trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated hardwareBendRangeTrustBoundarySummary. The copied report and structured payload state that MIDI 1.0 pitch bend is raw 14-bit center-based data, and that external semitone-width trust requires a target lane, Hardware Passport, declared +/- bend range, and TEST BEND/manual evidence. Without that proof, SpaceAge must present untrusted bend-width guidance instead of promising accurate hardware slides.
Hardware setup wizard trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated hardwareSetupWizardTrustBoundarySummary. The copied report and structured payload state that external MIDI hardware becomes product-trusted only through a visible Hardware Passport path: input/output selection, lane role, channel policy, confirmed test notes or setup cards, and saved receipts. Device visibility, templates, and copied reports do not prove the rig works, and first-run setup surfaces must not silently send Program/Bank, RPN/NRPN, SysEx, clock, transport, or reset data.
Sync/transport trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated syncTransportTrustBoundarySummary. The copied report and structured payload state that MIDI Clock, Start, Stop, Continue, Song Position, and host/internal sync are product-trusted only when time authority, receive/send role, tempo source, chase behavior, loop/start policy, output device, and Hardware Passport consequences are visible. SpaceAge-side observation/scheduling is not proof that external devices followed; loopback, listening, or manual evidence remains required.
Setup-controller trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated setupControllerTrustBoundarySummary. The copied report and structured payload state that RPN, NRPN, Data Entry, Bank Select, Program Change, and protected channel-mode/reset messages are setup intent rather than ordinary musical performance. SpaceAge can parse, preserve, review, attach, queue, receipt, and export those messages, but product trust requires a visible MIDI PATCH or Hardware Passport context, explicit queue/send confirmation, device/channel identity, undo-safe project metadata, and external hardware evidence before claiming a synth accepted the change. These messages must not become hidden AUTO LANES data, live-through traffic, or record-time performance edits.
SysEx restore trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated sysExRestoreTrustBoundarySummary. The copied report and structured payload state that SpaceAge can capture, frame, vault, preview, pace, queue, and receipt SysEx bytes, but external-device trust still requires matching device identity plus ACK/NAK/WAIT/CANCEL response evidence, successful restore verification, or explicit manual confirmation. Stored snapshots and queued bytes are not proof that hardware accepted the restore.
MIDI Learn mapping trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated midiLearnMappingTrustBoundarySummary. The copied report and structured payload state that SpaceAge can capture learnable CC, pitch bend, pressure, and poly-pressure sources, bind them to targets, persist mappings, merge 14-bit companion CC traffic, and apply pickup/range/curve rules. That proves a mapping exists; it does not prove the physical control feels good, avoids every conflict, or has the desired musical range until the user reviews and confirms it in context.
MIDI control-map conflict trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated midiControlMappingConflictTrustBoundarySummary. The copied report and structured payload state that learned mappings are release-safe only when source, target, channel/device scope, pickup rule, curve/range, 7-bit vs 14-bit companion pairing, and conflict status are visible and persisted. Duplicate source/target conflicts, destructive ranges, missing pickup, and hardware/controller feel still need review or explicit acceptance before the mapping is product-trusted.
Import conductor-map trust boundary, 2026-07-12: MIDI Protocol Coverage now exports a dedicated importConductorMapTrustBoundarySummary. The copied report and structured payload state that SpaceAge can inspect and receipt imported tempo, meter, and key maps, and can deliberately adopt the first source tempo/key when the user chooses that policy. Full source tempo/meter/key map adoption remains review-only until an undo-safe conductor timeline exists, and MIDI import must not silently reshape an existing arrangement's meter, tempo, or key structure.
Hardware editor readiness visibility, 2026-07-12: the MIDI SETUP selected-template callout, template preview report, and structured preview payload now surface Hardware Editor readiness instead of hiding it in the raw device template. Yamaha XG/CBX/QY-style templates can tell the user when a future deep editor is locked until verified, name the required manual/Data List source, and print the verification checklist in copied previews, while COPY SESSION / COPY PREVIEW remain text-only and send no MIDI.
Hardware editor readiness model, 2026-07-12: MidiHardwareSetupDeviceTemplate now carries structured hardware-editor profile fields for targets such as Yamaha QY-70/QY-100, Yamaha CBX-K1XG, and generic GM/XG/GS modules. The model can report the editor profile label, locked/ready state, manual/Data List source requirement, verification checklist, and deep-editor readiness boolean. This is intentionally not a working XG editor yet; it is the safe model doorway that prevents Yamaha/Roland editor UI from enabling deep parameter sends until exact model ids, SysEx address maps, value ranges, labels, checksum policy, and queue safety have been verified.
MIDI import note-pairing pass, 2026-07-11: direct Piano Roll import and split-lane import now avoid JUCE's automatic note-off pairing when SpaceAge needs source-faithful note ownership. SpaceAge pairs overlapping same-pitch notes with a FIFO note stack so repeated/overlapping notes remain distinct and do not get shortened or reassigned by updateMatchedPairs.
Lane input channel recording pass, 2026-07-11: armed-lane MIDI recording now applies the lane's fixed MIDI input channel filter before committing note-on/note-off data. This brings the recording path into line with the live filter/readiness reports and prevents wrong-channel notes from being stored in a lane that is intentionally listening to a specific channel.
AUTO LANES doorway wording pass, 2026-07-11: visible 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 use AUTO LANES / Shared PTN Data when teaching the user where automation lives and what it can affect. The compact AUTO button label remains for space, but its tooltip carries the ownership warning.
MIDI AUTO lane-plan closeout pass, 2026-07-09: MidiExpressionEditorPlan now separates each lane's usable now, remaining polish, and ownership boundary language. Pattern/preflight reports can credit working PTN-owned editing, switch blocks, pressure curves, and raw pitch-bend preservation while still naming direct tangent/freehand curves, durable bend-range contracts, and future clip/lane-local automation as unfinished.
MIDI AUTO next-test pass, 2026-07-09: MidiExpressionProjectSummary now reports a concrete Next MIDI AUTO test: derived from actual project lane types and bend-trust state. Hardware bend verification/range gaps outrank generic editor polish; switch lanes, pressure lanes, preview transforms, controller lanes, and review-only setup rows each get a more specific next action.
MIDI export next-test pass, 2026-07-09: MidiExportReadinessSummary now reports a concrete Next MIDI export test:. The helper distinguishes empty exports, pitch-bend trust review, warning review, full Arrangement/stem handoff testing, selected-clip export checks, and pattern-local channel/timing checks without changing export encoding.
MIDI import next-test pass, 2026-07-09: MidiImportApplyPreview now reports a concrete Next MIDI import test:. Import previews can point testers toward warning review/disposable targets, setup/SysEx receipt checks, split-lane channel/timing checks, and MIDI AUTO expression verification without changing import mutation behavior.
MIDI import receipt next-check pass, 2026-07-09: MidiImportApplyResult now reports a concrete Next MIDI import receipt check: and the styled import receipt popup displays it under the summary. Receipts can point testers toward lane/channel/timing checks, MIDI AUTO expression verification, MIDI PATCH/SysEx Vault review, or warning cleanup without changing import mutation behavior.
MIDI import receipt copy-report pass, 2026-07-09: MidiImportApplyResult now exposes a reusable plainTextReport containing summary, next receipt check, mutation counts, reviewed source maps, action lines, and warnings. The styled import receipt popup renders the model-owned report instead of maintaining a separate UI-only text recipe.
MIDI import receipt copy-button pass, 2026-07-09: styled MIDI import receipt popups now include COPY RECEIPT, using the shared cold-copy receipt helper around MidiImportApplyResult::toPlainTextReport(). Copying the receipt sends no MIDI, changes no routing, changes no project data, and changes no external hardware.
MIDI import preview copy-report pass, 2026-07-09: the MIDI Import Wizard Preview COPY REPORT button now copies MidiImportApplyPreview::toPlainTextReport() through the shared cold-copy helper instead of copying rendered review text. The copied preview now stays aligned with the model-owned next-test/action/warning report.
Current Estimate
Backend MIDI 1.0 message recognition/preservation foundation: advanced, but not the same thing as release readiness.
Practical DAW-grade MIDI behavior: broad first-pass coverage exists across recording, playback, import/export, expression, SysEx, and hardware recall.
Customer-facing MIDI workflow: use the live MIDI PROTOCOL COVERAGE panel as the source of truth. It computes current MIDI 1.0 finish-line readiness from tracked protocol-family blockers instead of relying on hand-written status percentages.
The distinction matters. The backend can already recognize, preserve, route, inspect, and plan around many important MIDI message classes. The user-facing surfaces still need the polished dialogs, editors, and routing panels that make those powers feel obvious and safe.
Completion Scorecards
Use two separate percentages going forward:
- Backend MIDI 1.0 foundation: about 98-99%. This covers message recognition, preservation, guarded routing, timing paths, import/export behavior, SysEx storage/recall scaffolding, and safety predicates.
- Customer-facing release readiness: lower and reported by the live
MIDI PROTOCOL COVERAGEblockers instead of hardcoded here. This includes polished setup dialogs, visible editors, real-hardware validation, trust-building reports, and workflow clarity.
These are not contradictory numbers. The backend can be essentially complete while the product surface still needs visible polish and proof. Do not collapse them into one estimate.
MIDI naming alignment pass, 2026-07-05: report-facing MIDI Protocol Coverage blocker data now uses AUTO LANES Final Editor instead of the older expression-editor label, Hardware Setup Safety actions say Open MIDI PATCH, and visible score/report language prefers release-ready / release-readiness for the customer-facing finish line.
Hardware Passport recall wording pass, 2026-07-05: visible hardware recall actions now say queue instead of send. QUEUE PROGRAM RECALL, QUEUE RECALL + SYSEX, and the matching confirmation-dialog titles keep the page aligned with the model-owned queue/receipt behavior and reduce the chance that users think opening or clicking the panel silently transmits hardware data.
MIDI Protocol Coverage wording sync, 2026-07-05: the report wording now matches the newest MIDI PATCH behavior. The scorecard clarification separates backend foundation from visible release readiness without the older "two meters" phrasing, and the RPN/NRPN plus Program/Bank rows mention selected-item readouts and no-send mapping/recipe actions.
MIDI AUTO discoverability pass, 2026-07-05: the sequencer SETTINGS tooltip named the first MIDI AUTO automation lanes directly, the compact AUTO button tooltip said it can view/create selected-pattern automation lanes, and the empty state/create strip started using automation-lane language instead of only expression-language. Later wording now presents this doorway as AUTO LANES / Shared PTN Data. The selected-lane graph labels its value range, visible step span, and hovered/selected point values directly inside the graph. This does not change ownership: the surface still edits pattern-owned MIDI automation/expression, not full Arrangement automation lanes.
MIDI PATCH selected-item decision strip, 2026-07-05: MIDI PATCH now explains the selected row/card in place with TYPE, STATE, NEXT ACTION, and WHY. Bank/Program rows can say whether they are recipe-ready or bank-only and clarify that save/attach/map actions send nothing. RPN setup cards can say when they are ready to queue after confirmation, NRPN setup cards can say whether they need a queue-safe Hardware Passport definition, and protected channel-mode/reset rows report copy-only/no-queue behavior without requiring the user to decode disabled buttons.
MIDI PATCH wording pass, 2026-07-05: the MIDI PATCH entry point now explains that it reviews imported Bank Select, Program Change, RPN/NRPN, and protected channel-mode setup data before users click it. The queue guard now says RPN/NRPN setup card instead of RPN setup card, matching the actual guarded workflow where RPN cards can queue after confirmation and NRPN cards require a queue-safe Hardware Passport definition.
Bend Info readiness pass, 2026-07-05: BEND INFO in MIDI PATCH is now readable even when the selected lane has no Hardware Passport yet. It explains the missing lane/Passport/output/range setup instead of becoming a dead disabled button. The actual TEST BEND path remains guarded and still sends nothing until a ready Hardware Passport plan is confirmed by the user.
NRPN definition receipt pass, 2026-07-05: successful DEFINE NRPN actions now produce a readable receipt and copy it to the clipboard. The receipt names the lane, Hardware Passport, selector MSB/LSB, display name, value meaning, relative Data Increment/Decrement policy, future queue-confirmation rule, and the safety fact that no MIDI was sent. This closes the previous trust gap where defining queue-safe NRPN knowledge only flashed a status line.
MIDI workflow nomenclature cleanup, 2026-07-05: the customer-facing MIDI_UI_Workflow_Spec now consistently uses Hardware Passport for external-device identity, setup, recall, sync, SysEx, and timing workflows. The old Hardware Profile wording is reserved for internal code/model history only, while the app/manual language should teach one concept: a Passport is the trusted record for what SpaceAge knows and is allowed to do with a piece of hardware.
MIDI live-report nomenclature cleanup, 2026-07-05: customer-facing protocol coverage, setup, readiness, sync, import-review, and hardware-send report strings now use Hardware Passport instead of Hardware Profile / hardware profile. The stale Pitch Bend protocol row that said the visible bend-test UI was still upcoming now points to the existing MIDI PATCH TEST BEND / BEND INFO path and correctly leaves the remaining work as Piano Roll-grade expression editing plus continued real-hardware validation.
MIDI Output preflight send-boundary pass, 2026-07-05: the MIDI OUT preflight report now exposes a model-owned Live send readiness line and Setup safety line. The visible Settings MIDI OUT panel shows those as SEND STATE and SETUP SAFETY, making clear that live performance/safety messages can pass through ready external lanes while Bank/Program, RPN/NRPN/Data Entry, channel-mode setup, SysEx, clock, and transport-like setup changes remain behind explicit MIDI PATCH, Hardware Passport, MIDI Sync, or confirmed recall actions. The pass also removes remaining customer-facing hardware profile wording from live source strings.
MIDI Output trust-gate pass, 2026-07-05: external MIDI output now has a model-owned MidiExternalOutputTrustGateReport layered above readiness, runtime, and device inventory. The MIDI OUT popup and copied preflight report now show one direct answer: idle, blocked, or ready for live hardware performance messages. The gate also names the reason, next action, and safety boundary: live notes/bend/pressure/sustain/core CC/safety resets only when ready, while Bank/Program, RPN/NRPN, Data Entry, channel-mode, SysEx, clock, and transport remain explicit setup/sync/recall actions.
MIDI Health trust-gate pass, 2026-07-05: top-level MIDI Health now carries both inputTrustGate and outputTrustGate. The visible Health panel, full copied Health report, compact COPY STEPS checklist, and structured payload all use the same MIDI IN / MIDI OUT verdicts as their focused preflight popups.
Hardware bend-test UI pass, 2026-07-05: MIDI PATCH now exposes the selected lane's Hardware Passport pitch-bend test through a TEST BEND / BEND INFO button. The UI renders the processor-owned plan, blocks incomplete setup with a readable report, asks before queueing, and then displays the structured receipt. The action refuses to run without confirmation, rechecks that the Hardware Passport still exists, requires an output device plus declared bend-range policy, queues only a C4 note with center/up/center/down/center pitch-wheel messages, and records each attempted message in the hardware recall log. It deliberately sends no Program Change, Bank Select, SysEx, MIDI Clock, transport, or reset traffic.
MIDI stem-package undo receipt pass, 2026-07-05: MIDI stem-package import receipts now report whether the project was actually mutated and whether an undo checkpoint was created. Planning/model receipts no longer claim mutation merely because lane stems are prepared. Processor receipts mark projectMutated and undoCheckpointCreated only after the confirmed lane-stem import path creates Arrangement data under the single package-import checkpoint.
MIDI AUTO pitch-bend range visibility pass, 2026-07-05: the selected-lane MIDI AUTO graph now reports pitch-bend center together with the active internal bend range. If no RPN Pitch Bend Range has been observed, it says INTERNAL DEFAULT 2.00 st | hardware target may differ; after standard RPN 0,0 plus Data Entry it reports the learned semitone/cents range, such as INTERNAL RANGE 12.34 st from RPN | hardware target may differ. This keeps the editable 14-bit pitch-bend lane honest without pretending SpaceAge already owns every external synth's destination range.
Hardware Passport pitch-bend policy pass, 2026-07-05: Hardware Passports now have structured destination pitch-bend range fields in semitones plus cents. Profile summaries expose whether the range is declared, and attaching a reviewed RPN 0,0 Pitch Bend Range setup card writes that range into the profile instead of leaving it only as note text. This is the first bridge between preserved raw pitch-bend curves and trustworthy external-hardware bend behavior.
MIDI readiness/export pitch-bend policy pass, 2026-07-05: lane readiness, external-output readiness, and MIDI export lane summaries now carry per-lane MIDI expression counts, pitch-bend expression counts, and Hardware Passport bend-policy summaries. Hardware-routed lanes/clips with pitch-bend expression now warn when no Hardware Passport is attached or when the attached passport has no declared bend range. This keeps slide/pitch-bend material from silently leaving SpaceAge with an unknown destination range.
MIDI protocol coverage pitch-bend range pass, 2026-07-05: MIDI PROTOCOL COVERAGE now separates generic pitch-bend/pressure editing from external-hardware bend trust. The Pitch Bend and Pressure row is categorized under Hardware Bend Range, because the remaining product gap is not only drawing a 14-bit curve; it is proving what that curve means on the destination synth through a Hardware Passport bend-range declaration and a guided bend-test phrase.
SysEx identity confidence pass, 2026-07-05: SysEx descriptors now preserve the raw device id byte alongside the display label, and SysEx snapshot reports expose an identity line plus identityMatchesProfile / identityNeedsReview flags. A manufacturer mismatch between the SysEx dump and its linked Hardware Passport creates a review warning, while universal SysEx messages are treated as device-level evidence rather than manufacturer-specific dumps. This is identity evidence only; it does not replace restore verification receipts.
Hardware bend-test plan pass, 2026-07-05: Hardware Passport summaries now include a model-owned pitch-bend test plan. The plan reports output-device readiness, declared destination bend range, MIDI channel, a C4 center/up/down/center test phrase, safety copy, checklist rows, and a ready/not-ready next action. It still sends nothing by itself; future UI can render this as a confirmed bend-test button without inventing policy in the editor.
MIDI release-wording audit pass, 2026-07-05: MidiProtocolCoverageReport now includes a model-owned release wording audit checklist in its copied report and structured payload. The checklist protects the current truth boundaries around MIDI AUTO, pattern-owned automation/expression data, visible SysEx restore receipts, deferred MPE/MIDI 2.0, shared effect returns, and broad MIDI-completion claims. Self-test coverage now verifies those audit rows remain present.
MIDI Protocol closeout cockpit pass, 2026-07-05: the MIDI PROTOCOL COVERAGE panel now exposes the computed current MIDI 1.0 closeout checklist directly in the dialog and adds COPY CLOSEOUT for the short finish-line action list. The copied full report remains available, but the app now shows the practical next steps without making the user leave the panel or parse every protocol-family row.
Automation visibility note, 2026-07-05: full Arrangement-style automation lanes do not exist yet. The current editable expression surface is AUTO LANES / Shared PTN Data, which is a selected-pattern MIDI automation/expression editor for CC, pitch bend, pressure, sustain, and related performance data. The UI must keep saying shared PTN data until the clip-local/lane-local automation model is finished.
Automation ownership boundary pass, 2026-07-12: MidiProtocolCoverageReport now owns a copyable and structured automationOwnershipBoundarySummary. It says directly that AUTO LANES / Shared PTN Data edits shared pattern-owned rows, that linked clips share those rows until the composer makes a VARIANT, and that clip-local, lane-local, Motion Clip, and full Arrangement automation ownership remain future architecture.
MIDI AUTO naming pass, 2026-07-05: model-owned protocol reports, setup scenario actions, expression editor plans, and project expression reports began using MIDI AUTO when naming the visible selected-pattern automation/expression editor. Later UI wording now expands that compact label to AUTO LANES / Shared PTN Data wherever ownership matters. The code still uses "MIDI expression" for the stored musical/protocol data itself.
PPQ import-grid pass, 2026-07-05: MIDI import now separates musical PPQ timing from SMPTE/timecode timing before deriving SpaceAge step positions. PPQ files keep their note/controller timestamps in ticks and convert directly through the file's ticks-per-quarter value, while SMPTE/timecode files continue through JUCE's seconds conversion. This prevents variable source tempo maps from shifting imported notes when the chosen policy is review-only or first-value adoption rather than full map adoption.
Direct Piano Roll import timeline pass, 2026-07-05: the older selected-pattern importPatternMidi() path now honors the 4096-step Piano Roll pattern timeline for melodic MIDI and preserved expression data. Drum Composer MIDI import remains intentionally limited to the 64-step visible bank because it is importing into the classic step-bank grid, not the long Piano Roll clip timeline.
Live MIDI source policy pass, 2026-07-05: Settings MIDI Input now owns an explicit source policy for host/plugin MIDI versus SpaceAge direct physical MIDI. AUTO accepts host input normally, then suppresses host-stream musical messages after a lane-selected direct device starts sending data. HOST ONLY, DIRECT ONLY, and BOTH are available for deliberate routing setups. Suppressed host/direct counts are reported in the input preflight and saved with the project.
MIDI source-policy repair pass, 2026-07-05: MIDI Health now treats source-policy ambiguity as an actionable repair condition. BOTH plus observed host/direct traffic creates a high-severity repair card that warns about doubled notes and opens MIDI Input setup. Policy suppression under AUTO, HOST ONLY, or DIRECT ONLY creates a lower-severity card explaining which source is being blocked and why. The repair model now compares the persisted string policy ids (autoPreferDirect, hostOnly, directOnly) instead of stale integer ids, and self-test coverage protects the policy-specific repair wording.
MIDI automation doorway pass, 2026-07-05: the selected-pattern expression editor is now labeled MIDI AUTO in the UI and titled PATTERN MIDI AUTOMATION inside the panel. The copy now states that it edits pattern-owned MIDI automation/expression data and that full Arrangement automation lanes are future architecture. This is a discoverability and truth-labeling pass, not a new automation ownership model.
Effects ownership audit, 2026-07-05: the named Effects-page rack is not per pattern or per clip. Halostar, Reverb, Chorus, Flanger, Phaser, Tremolo, and Octave are shared returns fed by per-pad/channel sends; loop tracks have their own Halostar/Reverb/EchoRay send amounts. EchoRay is a hybrid: it has shared global character/return controls, but its delay memories are per pad/channel. Arrangement lanes do not yet own independent effect-send fields.
External MIDI input router pass, 2026-07-05: direct external MIDI input now has a processor-owned JUCE MidiInputCallback router. Lanes that name a physical input device cause SpaceAge to open that device, enqueue callback messages with source-device identity, and drain them in processBlock() through the existing armed-lane/channel, recording, expression, MIDI Learn, SysEx, and sync paths. The lane MIDI routing panel now exposes the physical input selector and reports open direct inputs, dropped-message count, observed host/direct message counts, possible duplicate host-plus-direct input risk, and the explicit host/direct source policy. Remaining polish: richer real-controller validation across hosts, operating systems, and loopback-heavy setups.
MIDI Protocol Coverage scrolling pass, 2026-07-05: the Protocol Coverage panel now lets the visible MIDI family list scroll with the mouse wheel instead of stopping after the first rows with a passive +N more note. The copied report is unchanged, but the in-app source-of-truth dashboard can now show every tracked family row directly.
MIDI PATCH queue-policy strip, 2026-07-05: the MIDI PATCH setup panel now shows the queue rules directly under the safe-by-default banner, and the MIDI Protocol Coverage RPN/NRPN row reports the same policy. RPN cards are labeled as queueable after confirmation, NRPN cards require a queue-safe Hardware Passport definition, and protected channel-mode/reset rows remain copy-only and never queue from this panel. This is a UI clarity pass only; it does not loosen the guarded send model.
MIDI truth-label cleanup, 2026-07-04: MIDI PATCH now labels RPN/NRPN setup cards as review-first/confirm-before-queue instead of broadly review-only, protected channel-mode rows keep copy-only/no-send wording, and Protocol Coverage no longer lists visible SysEx restore history as missing now that the Vault renders the restore receipt trail.
SysEx restore-history visibility pass, 2026-07-04: the SysEx Vault now renders the latest restore-verification receipts in a visible compact history card. Device ACK, manual verification, timeout, and rejection receipts can be seen in the Vault with trust/safety labels instead of living only inside copied reports. The card is diagnostic only and sends no MIDI.
MIDI EXPR direct point-drag pass, 2026-07-04: selected MIDI expression points can now be moved with the mouse, not only keyboard nudges. Single points drag horizontally for timing and vertically for value through one guarded processor mutation, while lasso-selected point groups drag horizontally together through the existing collision-aware group move path. Shared-pattern locks, setup-lane review guards, stale-event checks, undo checkpoints, and duplicate-point collision refusals remain active.
SysEx receipt-aware readiness pass, 2026-07-04: SysExLibrarianReadinessPlan now accepts session restore-verification receipts in addition to stored snapshot summaries. Device ACK, manual verification, timeout, and device rejection receipts feed receipt counts, restore-trust wording, and next-action guidance in MIDI Health and the SysEx Vault instead of leaving readiness based only on snapshot byte estimates.
Expression shared-pattern prevention pass, 2026-07-04: MIDI EXPR now mirrors its existing shared-pattern edit guard in the button states. Mutating actions such as quantize, value nudge, thin, smooth, clear-step, delete-lane, add-point, and draw-ramp go dim when the selected pattern is used by multiple Arrangement clips until the user chooses MAKE VARIANT or ACK SHARED. Command-level guards remain in place underneath for keyboard, draw, and drag paths.
SysEx receipt wording cleanup pass, 2026-07-04: SysEx reports now distinguish missing evidence from missing capability. Restore progress says no device ACK receipt is recorded rather than hardware acknowledgement being unavailable, and manual verification is reported as a recorded receipt state rather than a ready/not-ready feature layer. Protocol Coverage now credits manual verification, timeout receipts, and clear-response reset in the SysEx core row while leaving device-specific ACK/NAK dialects, batch capture, restore history polish, and checksum/device-id helpers as real librarian blockers.
SysEx Vault manual verification pass, 2026-07-04: the Vault now exposes MARK VERIFIED for a selected SysEx snapshot. The processor creates a normal manualVerified restore-verification receipt, removes any active waiting attempt for that snapshot, and keeps the no-send/no-delete boundary intact. This gives hardware with no useful response dialect a product-safe manual evidence path.
SysEx Vault response-clear pass, 2026-07-04: the Vault now has a visible CLEAR RESPONSES action for session restore-response receipts and active restore wait state. It deliberately does not delete SysEx snapshots, detach Hardware Passports, or send MIDI; it only resets the current verification-history surface so users can rerun hardware recall tests without stale ACK/NAK/timeout rows muddying the result.
SysEx restore timeout receipt pass, 2026-07-04: active SysEx restore attempts now produce a Timed out verification receipt when hardware does not answer. The timeout uses each snapshot's estimated completion time plus a grace window, with a minimum response window for small dumps, then drops the stale active attempt and routes the result through the existing SysEx Vault, MIDI Health, and copied-report receipt surfaces. This closes the trust gap where a silent hardware device could leave SpaceAge saying it was still waiting indefinitely.
Future protocol boundary pass, 2026-07-04: MIDI Health now owns a structured MidiFutureProtocolPolicy report for MIDI 2.0, UMP packets, Profile Exchange, Property Exchange, and higher-resolution controller domains. The report is deliberately explicit that these are deferred future protocols, not active compliance features, and it lists the design work required before SpaceAge can claim MIDI 2.0 support. This keeps the current MIDI 1.0 release gate honest while preserving a clear roadmap for future devices.
Live external-lane setup-policy pass, 2026-07-04: MIDI Output Preflight now exposes the live setup-message rule in both the visible panel and copied readiness report. Armed external lanes can pass live performance/safety messages such as notes, pitch bend, pressure, volume, pan, expression, sustain, Reset All Controllers, All Notes Off, and All Sound Off; setup-style traffic such as Bank/Program, RPN/NRPN/Data Entry, Local Control, Omni, Mono, and Poly mode remains preserved/reviewed until the user deliberately uses MIDI PATCH, Hardware Passports, or a confirmed recall workflow.
MIDI EXPR smoothing pass, 2026-07-04: MIDI EXPR now has a first-pass SMOOTH CURVE action for editable performance lanes. The shared transform engine preserves the first and last matching points, lightly averages interior values, uses preview-confirm before mutating data, writes through the same undoable expression-event setter as other transforms, and stays unavailable for review-only/setup lanes and switch-style lanes such as sustain. Full Piano Roll-grade curve handles and destination-owned pitch-bend range UX remain future work.
Timing calibration apply-comp pass, 2026-07-04: MIDI TIMING APPLY COMP and ACCEPT RETURNED now connect Hardware Passport timing calibration to the active recording path. A saved manual or returned loopback calibration still lives on the selected Hardware Passport, but the suggested record compensation is also pushed into the session-level REC LATENCY COMP slider/processor value immediately, so subsequent MIDI recording uses the correction without requiring the user to copy the number by hand.
RPN/NRPN setup-card queue receipt pass, 2026-07-04: MIDI PATCH QUEUE CARD now returns a structured MidiSetupControllerQueueReceipt instead of a bare boolean. Confirmed RPN/NRPN setup sends report the selected card, Hardware Passport, output device, per-message queue result, queued/failed counts, action-plan snapshot, and explicit no-autosend safety language. Device-specific NRPNs still require a Hardware Passport queue-safe definition before they can be queued.
Piano Roll release-velocity pass, 2026-07-04: PianoNote now has a stored releaseVelocity value. Live recording and MIDI import capture note-off velocity, project save/load persists it with old-project defaults, and Pattern/Clip/Lane/Arrangement MIDI exports write that release value on Piano Roll note-offs. There is not yet a musician-facing release-velocity editor, but the protocol data is no longer discarded.
Direct MIDI Learn safety pass, 2026-07-04: direct control-click MIDI Learn now defaults to CC / Knob capture for the quick replace and macro paths, with explicit Any Source options when the user intentionally wants pitch bend, channel pressure, or poly aftertouch to drive a target. This aligns the direct workflow with the broader MIDI Maps source-filter model while keeping the fast right-click gesture simple.
Clip-edit MIDI target alignment pass, 2026-07-04: opening an Arrangement clip for editing now arms that clip's lane for MIDI input, including Drum Composer clips. The record controls also expose a plain record-target summary naming the clip/pattern and currently armed MIDI input lane, reducing the old mismatch where selected clip editing and live performance routing could silently point at different places.
MIDI truth-label audit pass, 2026-07-04: MIDI protocol coverage, MIDI Input readiness, and MPE readiness wording were tightened to match the actual handler paths. MIDI Learn is now described as learning messages that pass live input filters rather than a global pre-filter stream; no-armed-lane reports now say deterministic lane routing/recording needs an armed lane while legacy audition paths may still respond; fixed-channel input copy now says musical notes/controllers are filtered while panic/reset safety messages can still be honored; and multi-channel expressive MIDI is no longer labeled as true MPE without an explicit future MPE zone policy. The protocol scorecard also split deferred MPE zone work from deferred MIDI 2.0 profile/property exchange work.
Song Select recognition pass, 2026-07-04: MIDI Song Select (F3 nn) is now classified as Song Select, can be rebuilt from event fields, is described in reports/logs, and appears in the MIDI Sync runtime monitor with count plus last song number. It is intentionally not timeline payload and not a chase source; SpaceAge observes it as external-device status instead of letting it change the project or arrangement.
Lane hardware test-note safety pass, 2026-07-04: the Arrangement lane MIDI Routing TEST NOTE shortcut now uses the same route-aware preflight, confirmation, and structured receipt path as the MIDI SETUP workbench. A blocked lane test shows the model-owned plan; a confirmed lane test queues only note-on/note-off and reports the hardware-affecting families that were not sent.
Hardware sync-role confirmation pass, 2026-07-04: Hardware Passport sync edits that can arm future MIDI Clock, playback transport, incoming transport chase, or warnings now run through a model-owned MidiHardwareSyncPolicyPreview. The preview states that saving the policy sends no MIDI now, lists future playback sends and incoming chase behavior, names missing input/output/capability problems, and asks for confirmation before saving hardware-affecting roles. This closes the gap where sync-role save was explicit but did not locally preview the future hardware consequences.
Hardware setup receipt/selection pass, 2026-07-04: MIDI SETUP TEST NOTE now returns a structured receipt after every confirmed or blocked attempt. The receipt reports whether hardware MIDI was queued, which note-on/note-off messages were queued, which output route was used, what remained blocked, and which hardware-affecting message families were deliberately not sent. Hardware Passport pickers in setup/timing surfaces also stop auto-selecting the first saved profile when the user has not chosen one, so the UI no longer pretends SpaceAge knows which external device the user meant.
MIDI PATCH protected-row UI pass, 2026-07-04: the dedicated MIDI PATCH review surface now renders protected channel-mode/reset messages as selectable copy-only cards instead of burying them among plain setup rows. RPN/NRPN cards keep attach/define/queue behavior; Local Control, Omni, Mono/Poly, All Notes Off, All Sound Off, and Reset All Controllers remain review-only and cannot be queued from that panel.
Realtime timing closeout pass, 2026-07-04: generated clip/controller expression now uses the same per-sample internal-state queue as incoming live MIDI, so internal synth pitch bend, sustain, pressure, CC, volume, pan, and expression updates no longer land early compared with plugin/hardware output. Incoming All Sound Off now schedules a sample-positioned hard stop through voice rendering/retirement, and Panic now clears stale hardware-router queues before sending reset traffic.
Hardware timing calibration closeout, 2026-07-04: hardware timing pulse trains now schedule each pulse against an absolute due time instead of repeatedly queuing relative note-on/note-off delays. This preserves deliberate SysEx/program-recall pacing while making calibration pulses land as a real evenly spaced train for loopback timing measurement.
Protected channel-mode review pass, 2026-07-04: MIDI import dashboards now own structured cards for Local Control, Omni, Mono/Poly, All Notes Off, All Sound Off, and Reset All Controllers. These messages remain review-only and require explicit confirmation before any future hardware send, but the UI no longer has to infer their meaning from plain-text patch setup lines.
Protocol action-routing pass, 2026-07-04: MIDI Protocol Coverage rows and blocker categories now carry model-owned action surface IDs and labels. This lets reports name the next UI surface to open for each blocker family instead of forcing the user or developer to infer it from prose.
Count-in recording timing pass, 2026-07-04: count-in activation now advances before incoming live MIDI is handled for the audio block. Downbeat notes at or after the activation sample can record against the activation point instead of being monitored and lost because recording flipped on later in sequencer processing.
Hardware block-anchor timing pass, 2026-07-04: live hardware MIDI output now carries a shared audio-block timestamp alongside each in-block sample offset. Sequenced external notes, controller/expression messages, pitch bend, and MIDI clock therefore keep the same block origin when they reach JUCE's scheduled hardware output path instead of being retimed from the router thread's wake-up moment.
Incoming transport edge timing pass, 2026-07-04: incoming MIDI Start/Continue and Stop/MMC Stop/Pause now honor the event's sample position inside the current audio block. Start/Continue delays the first chased sequencer step to the incoming event sample, while Stop/Pause renders the pre-stop portion of the block and schedules voice release at the stop sample instead of erasing the whole block from sample 0.
Live armed-lane hardware monitoring pass, 2026-07-04: incoming live notes and performance-expression messages now follow the armed lane's route when that route targets external hardware or internal+external output. The forwarded message keeps the incoming sample position, uses the lane's output-channel policy, avoids double-applying internal expression state, and suppresses internal recording-monitor voices for external-only armed lanes.
SPP/MTC running-position chase pass, 2026-07-04: incoming Song Position Pointer and MTC full-frame / assembled quarter-frame messages now schedule in-block position jumps when playback is already running. processBlock() renders sequencer material up to the incoming event sample, applies the absolute-step jump with delayed voice release at that same sample boundary, then continues rendering the rest of the block from the chased position. This avoids whole-buffer teleporting when external hardware moves the timeline mid-block.
SPP/MTC chase diagnostics pass, 2026-07-04: MIDI Sync Preflight now carries the last SPP chase sample offset and the last MTC chase sample offset through MidiSyncRuntimeSummary, the copied plain-text report, structured payload, and visible preflight rows. The product surface can now distinguish "a chase happened" from "a chase happened at the MIDI event's sample position," which is the difference that matters for hardware trust.
Timing audit refresh, 2026-07-04: incoming expression timing is sample-drained before voice rendering and is currently the healthiest timing path. The remaining timing-risk list is real-device validation for live external monitoring, broader jitter/offset diagnostics for SPP/MTC chase, and future user-facing monitoring meters.
MIDI input source-identity pass, 2026-07-04 / updated 2026-07-05: MIDI Input readiness separates saved device intent, visible-device checks, and enforceable per-event source identity. The host/plugin MIDI path can still arrive source-agnostic, but the direct external input router now opens lane-referenced physical devices and supplies a source id before armed-lane/channel filtering. Reports expose both paths so the user can understand whether a controller is coming through SpaceAge's direct input route, the host/device stream, or both.
Protocol coverage core/polish split, 2026-07-04: MIDI Protocol Coverage now splits broad partially-finished families into core rows and launch-polish blocker rows. SysEx core safety is credited for guarded import, Vault storage, one-dump live capture, confirmed recall, and generic restore-response receipts, while device-specific librarian polish remains the blocker. MIDI export core is credited for pattern, clip, Arrangement, and first stem-package export readiness, while package/repair/progress/validation polish remains the blocker.
Expression closeout rollup, 2026-07-04: MIDI Health now aggregates final-editor checklist items from each lane's MidiExpressionEditorPlan. The MIDI AUTO report can name the remaining product work for real project data, including clip-local ownership, larger Piano Roll-grade editing lanes, switch-block/curve handles, deeper smoothing tools, bend-range ownership, pressure badges, and poly-aftertouch note-row ownership. This keeps the active AUTO LANES Final Editor blocker measurable without claiming the full product UI is done.
MIDI EXPR editor shortcut/matcher pass, 2026-07-04: the MIDI EXPR panel now behaves more like a real editor surface. It grabs keyboard focus while open, exposes Esc for clearing the target, Delete/Backspace for selected-lane or selected-point deletion through the existing shared-pattern/setup-data guards, Ctrl/Cmd+A for selected-lane point selection, point-aware Ctrl/Cmd+C, Ctrl/Cmd+X, and Ctrl/Cmd+V for cut/copy/paste, with report copy remaining available when no point selection exists. It also replaces the editor-local lane matcher with the shared MidiExpressionLaneSelector, which fixes note-specific poly aftertouch replacement so drawing over a point edits the lane instead of stacking duplicate aftertouch events.
MIDI EXPR lane-browser/scope pass, 2026-07-04: hidden expression lanes are now reachable in the current editor. The visible list owns a scroll offset, mouse wheel changes the offset, Up/Down and Page Up/Page Down move the selected lane, and refresh/delete operations keep the selected lane in view. The selected-lane scope also has a first-pass viewport with VIEW -, FIT LANE, and VIEW +; draw/erase gestures now use the same visible tick range as the graph. This is not the final Piano Roll-grade expression lane editor, but it removes the previous "more lanes exist but cannot be selected" UX trap and the full-pattern-only graph limitation.
MIDI Learn source-filter pass, 2026-07-03: MIDI Maps now lets the user narrow the next Learn capture to CC, pitch bend, channel pressure, and/or poly aftertouch. The processor already filters captures from the armed request, and the panel now exposes those booleans directly with a guard that restores CC if every source type is disabled. This makes Learn safer for controllers that transmit multiple message families during one physical gesture.
MIDI Learn resolution-mode pass, 2026-07-03: learned CC mappings now carry a saved resolutionMode with auto, 7bit, and 14bit choices. Auto preserves the existing "use fine companion CC when present" behavior, forced 7-bit ignores the companion for coarse hardware controls, and required 14-bit waits for both MSB and LSB traffic before updating a target. MIDI Maps exposes the mode in the source row, assignment summaries report it, and validation warns when 14-bit is requested from a non-MSB controller. Remaining MIDI Learn polish is now direct-control coverage, broader conflict browsing, richer high-resolution diagnostics/meters, and deeper response-curve editing.
SysEx restore-progress trust pass, 2026-07-03: restore progress now has a reusable model contract via SysExRestoreProgressPlan and a companion SysExRestoreVerificationReceipt state model. The progress plan reports stored dump counts, byte totals, DIN wire-time estimates, paced completion estimates, confirmation requirements, warning counts, and verification coverage while explicitly marking reports/previews as non-sending. The receipt model distinguishes preview/no verification, manual verified, device ACK, device NAK, and timeout, preserving the boundary between SpaceAge-side transfer estimates, user-confirmed success, and real hardware responses.
SysEx restore-response classifier pass, 2026-07-03: incoming restore responses now have a conservative model contract via SysExRestoreResponseClassification. The classifier recognizes standard MIDI Sample Dump-style ACK, NAK, CANCEL, and WAIT responses, bridges final ACK/NAK/CANCEL outcomes into restore verification receipts, and labels valid but unrecognized SysEx as unrelated instead of falsely calling it hardware success. Restore replies now surface through active-attempt routing, MIDI Health, and the SysEx Vault response strip. Remaining work is device-specific ACK/NAK dialects, retry timing policy, and richer per-passport restore history.
SysEx capture timeout pass, 2026-07-03: armed live SysEx capture now owns a 60-second listening window in the processor/model layer. Readiness and progress reports expose timeout duration, remaining time, and a timed-out phase; successful capture and manual cancel clear the deadline; late dumps after timeout are ignored instead of being turned into surprise Vault receipts. Remaining SysEx closeout work is live batch capture/save UI, deeper device-specific source scripts, checksum/device-id helpers, device-specific ACK/NAK dialects, and restore history UI.
SysEx source-guidance pass, 2026-07-03: SysEx capture readiness/progress now carries a model-owned source-guidance list. The current guidance is intentionally conservative and generic: connect hardware MIDI OUT to the selected input, prepare the device's patch/bulk dump page, arm SpaceAge only when ready, send one complete dump first, and review/name the capture before restore. Yamaha/QY/XG and Novation/MiniNova labels receive modest extra hints, while deeper device scripts remain a future Hardware Passport layer.
SysEx batch-capture planning pass, 2026-07-03: batch capture now has a read-only model contract via SysExBatchCapturePlan. It reports source device, Hardware Passport target, expected and captured dump counts, per-dump timeout, explicit-start policy, captured-only policy, confirmation defaults, and remaining live multi-dump UI gaps. batchDumpWorkflowReady remains false until SpaceAge has a real per-dump inbox, receipt review, duplicate detection, save workflow, and batch UI that can reuse the existing manual verification, timeout, generic ACK, and generic NAK receipt vocabulary.
MPE project-health honesty pass, 2026-07-03: 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 where pitch, pressure, or CC74-style timbre expression appears across multiple channels, and repeat that this data is preserved as MIDI 1.0 until SpaceAge has a true MPE zone/member-channel policy.
MPE Health headline pass, 2026-07-03: the compact MIDI Health headline now includes an MPE-like pattern(s) count when the project contains multi-channel pitch/pressure/CC74-style expression. The full Health report still carries the detailed pattern/channel list and warning language, but the first line no longer hides this important limitation.
MPE readiness policy pass, 2026-07-04: MIDI Health now owns a structured MPE Readiness Policy. It reports multi-channel expressive pattern/channel counts, confirms that SpaceAge preserves the data as MIDI 1.0 expression, exposes explicit true-MPE zone/member-channel support as inactive, and serializes review guidance plus the remaining true-MPE implementation checklist for future UI/support reports. This keeps future MPE work visible without letting preserved channel-per-note-looking data masquerade as finished MPE playback.
Pattern playback snapshot pass, 2026-07-03: drum steps, Piano Roll notes, Chord Engine markers, MIDI expression events, and pattern length now publish immutable per-pattern snapshots whenever pattern data is edited/restored/imported or queued recording commits land. processSequencer() reads those snapshots in both isolated and Arrangement playback, so normal sequencer playback no longer takes patternMutex. MIDI Step Input also routes accepted notes through the completed-note runtime queue instead of writing pattern vectors directly from the live handler.
Conductor-map review ordering pass, 2026-07-03: MIDI inspection now sorts tempo, meter, and key map rows by tick before exposing review/copy rows, and AudioSelfTest covers out-of-order metadata stored across multiple MIDI tracks. This does not yet add full project tempo-map mutation, but it prevents misleading "first row" copy when the earliest conductor event is stored in a later source MIDI track.
Sequencer playback snapshot pass, 2026-07-03: chain slots, Arrangement lanes, Arrangement clips, and Section markers now publish an immutable playback-topology snapshot when edited/restored. getEffectiveBpm(), advanceStep(), and processSequencer() read that snapshot instead of walking mutable Arrangement topology directly in the callback.
Pattern-length realtime mirror pass, 2026-07-03: pattern-length writes now update both the editor/export-facing patternLengths model and a lock-free realtimePatternLengths mirror. MIDI recording timing helpers read the realtime mirror, removing one more live-input read of mutable pattern state while preserving the existing locked pattern model for editing, import, export, and restore.
Armed-lane recording route consistency pass, 2026-07-03: MIDI note recording now reads the armed lane's type, instrument pad, and output-channel route from the same immutable playback snapshot used by armed-input channel filtering. This prevents one incoming note from being accepted against one lane topology and monitored/recorded through another if the lane route is edited during the same audio block.
Realtime MIDI audit pass, 2026-07-03: live MIDI control mappings, armed SysEx live-capture, recorded timeline-expression commits, and completed note-recording commits now enter dedicated runtime queues before parameter/receipt/vector work happens, and the legacy performance-CC/pitch-wheel-to-perfcutoff path now writes the realtime performance cutoff atomics instead of notifying APVTS/host parameters from incoming live MIDI handling. MIDI Health now reports queue pressure for those runtime queues, including dropped mapping messages, dropped/oversized SysEx captures, dropped expression events, and dropped completed notes. Remaining product-hardening work is now clearer: keep auditing note-trigger sample/SoundFont readiness, tune SoundFont prepared-pool capacity against real projects, and keep polishing customer-facing diagnostics. The sharpest previous SoundFont hazard, per-note TinySoundFont copying under soundFontMutex, is now replaced by a prepared-pool-only live path that refuses unsafe starts and reports the miss in MIDI Health.
MIDI import copy-report pass, 2026-07-02: the MIDI Import Wizard Preview now has a direct COPY REPORT action that copies the same model-owned preflight/action-preview text shown in the panel. This keeps import troubleshooting aligned with the broader MIDI Health / Input / Output / Setup convention: every important MIDI surface should be able to produce a supportable plain-text receipt without relying on screenshots.
MIDI import/export latest-receipt pass, 2026-07-11: selected-pattern imports, Import Wizard commits, split-to-lanes imports, inspect-only reviews, MIDI stem-package imports, selected-pattern exports, Arrangement MIDI exports, and MIDI stem-package exports now leave copyable latest receipts in editor state. MIDI TASKS exposes latest import and export receipts; Arranger RENDER exposes latest export receipts. These copy actions remain cold and do not send MIDI, change routing, mutate project data, write files, or touch external hardware.
MPE honesty pass, 2026-07-02: MIDI inspection now owns a structured MPE-like limitation checklist. Reports and Import Review can explain that SpaceAge preserves channel-per-note-looking bend, pressure, poly aftertouch, CC74, and expression payloads as MIDI 1.0 data while explicitly not claiming true MPE zones, member-channel ownership, bend-range policy, or MPE-aware synth response yet.
Latency checklist pass, 2026-07-02 / refreshed 2026-07-03: MIDI Health now serializes reusable latency action lines and explicit live-note path facts. Copied reports distinguish internal audio-block time and SpaceAge's sample-positioned live-note monitor path from driver/interface/controller delay, hardware response, Bluetooth, or heavy processing before a user blames the wrong part of the signal path.
MIDI AUTO honesty pass, 2026-07-03: MIDI expression editor plans now serialize whether a lane has a first-pass editor surface, whether that surface is release-final, which surface owns the gesture, and what product gap remains. Pitch bend, sustain, pressure, and CC lanes can now credit the working MIDI AUTO surface without pretending the future Piano Roll-grade expression lane editor is already finished.
MIDI AUTO target summary pass, 2026-07-03: MIDI expression editor plans now expose one model-owned target summary for copied reports and future UI. The summary combines active surface, gesture, snap behavior, value language, preview density, release-ready state, final-editor gap, and warning text so MIDI AUTO, future Piano Roll lanes, support copies, and Motion Clip work can share the same explanation.
Expression selected-scope event model pass, 2026-07-04: MIDI EXPR selected-lane scope now draws from full visible expression events instead of capped lane-preview sparklines, and it builds a visible point model with source event index, tick, editor value, duplicate/stack count, and hit boxes. That model now drives guarded hover, selection, deletion, value edits, time nudges, grouping, and lane-local point copy/paste without overclaiming that the final Piano Roll-grade expression editor exists.
Expression point focus pass, 2026-07-04: MIDI EXPR selected-lane points now support non-destructive hover and click selection. Hover and selected rings plus a scope readout make actual visible points feel inspectable, while Delete deliberately clears point focus instead of deleting data until a validated single-event processor helper exists.
Expression point delete pass, 2026-07-04: MIDI EXPR selected-lane points can now be removed with Delete/Backspace. The editor sends the selected visible event index to a processor helper that revalidates pattern, lane identity, tick, and expected old editor value before deleting exactly one event, preserving the safety boundary for stacked same-tick controller data.
Expression point value-drag pass, 2026-07-04: MIDI EXPR selected-lane points can now be dragged vertically to change their value while their tick remains locked. The processor revalidates event index, lane identity, tick, and expected old editor value before mutating, and the editor only creates an undo checkpoint after the drag actually changes data.
Expression point keyboard nudge pass, 2026-07-04: MIDI EXPR selected-lane points now respond to Up/Down value nudging, with Shift producing a larger step. Without a selected point, Up/Down keeps its lane-list navigation role.
Expression point time nudge pass, 2026-07-04: MIDI EXPR selected-lane points now respond to Left/Right time nudging by one step, with Shift moving by one 16-step measure. The editor and processor both refuse same-lane same-tick collisions, and the processor revalidates the expected old value before moving the point instead of silently stacking hidden or stale points.
Expression point group-selection pass, 2026-07-04: MIDI EXPR selected-lane points now support Shift-click and Shift-drag grouping for a first safe multi-point workflow. A selected group can move left/right by one step, Shift+Left/Right by one 16-step measure, Up/Down by lane-aware value increments, or Shift+Up/Down by larger value increments. Group deletes, time moves, and value nudges use processor-owned batch helpers that revalidate source events, including each expected old value, before mutating. Richer lasso modes remain future Piano Roll-grade editor work.
Expression editor safety-report pass, 2026-07-04: MidiExpressionEditorPlan now carries a model-owned guarded-edit label. MIDI expression reports can state whether a lane supports guarded point edits that validate lane/tick/old-value identity before commit, or whether it is review-only setup data that should be handled through MIDI PATCH.
Protocol coverage expression-credit pass, 2026-07-04: MIDI Protocol Coverage now credits the compact selected-point/group workflow for Controllers and Pitch Bend / Pressure rows. It still keeps the AUTO LANES Final Editor blocker active because the final surface needs larger handles, smoothing/curve tools, bend-range ownership, and clip/lane-local expression policy.
Pitch-bend center cue pass, 2026-07-04: MIDI EXPR pitch-bend lanes now draw an explicit center-reference marker in the selected-lane graph. The visible PITCH CENTER 8192 cue makes the 14-bit bipolar bend lane easier to understand and keeps bend-range uncertainty visible until destination instruments and hardware profiles own their bend-range settings.
Pitch-bend destination ownership pass, 2026-07-04: MIDI EXPR and copied expression reports now say that pitch bend is preserved as raw 14-bit data centered at 8192, while the musical semitone bend range remains destination-owned and unset in SpaceAge lane/hardware policy. This is intentionally a UI/report honesty pass, not a Hardware Passport schema migration.
Expression THIN preview pass, 2026-07-04: MIDI EXPR THIN REDUNDANT is now preview-first instead of instantly destructive. The first click computes the model-owned transform receipt and reports the matched/kept/removed counts; a repeat click against the same lane/request applies the transform. Selection changes and lane refreshes clear the pending apply state.
Compact MIDI warning cue pass, 2026-07-03: MIDI Output lane rows and compact Settings MIDI cards now show visible +N detail(s) breadcrumbs when warnings are too dense for the small surface. The full reports still preserve the detailed warning lists, but the user no longer has to infer "more is wrong" from color alone.
SoundFont live-note prepared-pool pass, 2026-07-03: the prepared SoundFont voice pool is now the only live note-start path. If the pool is exhausted or stale, SpaceAge increments the SoundFont refused-start Health counter and drops that unsafe voice start instead of taking soundFontMutex and cloning TinySoundFont state on the realtime path. This turns the remaining huge-SF2 risk into a visible pool-sizing diagnostic rather than a hidden latency spike.
Live MIDI callback-order pass, 2026-07-03: processBlock() now handles incoming live MIDI before processSequencer() can read patterns under patternMutex. Sync/chase observation remains first, and recording still uses the captured block-start timing state. This removes one avoidable source of controller-feel lag while leaving the deeper future task, immutable sequencer playback snapshots, clearly named.
Live MIDI destination-report pass, 2026-07-04: MIDI Health now exposes the live destination and mode from processor state. Reports can name the armed lane, input channel filter, play/export channel, route target, and whether recording, Step Input, Piano Roll monitoring, or drum-pad fallback currently owns incoming notes. This keeps selected clip/lane editing context from being mistaken for the live MIDI target.
Hardware template defaults pass, 2026-07-04: MIDI hardware setup templates now carry explicit suggested output channel, test note, velocity, and duration defaults. Test-note planning no longer depends on text-searching a channel hint to choose channel 10, and template reports/structured payloads now show the suggested safe test. Lane normalization also inherits Hardware Passport input/output device IDs when the lane does not provide its own override, so an attached profile can resolve live/test hardware routing instead of acting like passive metadata.
Note-off release-velocity preservation pass, 2026-07-04: the shared MIDI event model now stores note-off release velocity in MidiEvent::data2, reconstructs note-off messages with that value, and includes release velocity in note-off descriptions. Imported, recorded, saved, loaded, and exported Piano Roll notes now carry release velocity through the ordinary note model too; the remaining work is a musician-facing release-velocity editor.
Overlapping same-pitch import pairing pass, 2026-07-05: selected-pattern Piano Roll MIDI import and split-channel-to-lane import now consume matching note-off events once per MIDI track. Repeated or overlapping same-channel/same-note material therefore keeps distinct note lengths and release velocities instead of letting multiple note-ons steal the first later note-off.
RPN Pitch Bend Range runtime bridge, 2026-07-04: standard RPN 0,0 plus absolute Data Entry MSB/LSB now updates SpaceAge's internal per-channel pitch-bend range for live/imported/sequenced playback. The current raw wheel value is re-scaled immediately when the range changes. NRPN and relative Data Increment/Decrement messages remain guarded setup-card material until lane/profile/device policies define their runtime meaning.
Realtime allocation/lookup hardening pass, 2026-07-03: shared send buffers now reserve 32k samples during prepareToPlay() so ordinary host blocks do not allocate inside processBlock(). Quasar packages now publish a note/velocity best-zone lookup table, so live Quasar notes no longer scan every zone twice before choosing a multisample. Remaining realtime work is now sharper: immutable sequencer playback snapshots, callback-safe SysEx capture staging for large dumps, plugin MIDI output preallocation if needed, and real hardware validation.
Hardware hookup checklist pass, 2026-07-03: MIDI hardware device templates now include searchable, serializable, model-owned hookup checklists. MiniNova, QY/GM/XG, EWI, MIDI guitar, and MPC-style pad templates can explain physical cabling, input/output routing, channel matching, test-note steps, SysEx Vault storage, and timing calibration in their template reports and preview actions without creating lanes, changing routing, or sending MIDI.
Hardware test-note plan pass, 2026-07-03: MIDI hardware templates now have a reusable safe test-note plan. The plan reports output/profile readiness, channel/note/velocity/duration, preconditions, blocking reasons, warnings, and an explicit "sends MIDI now: no" fact. This gives the future setup wizard a safe model-owned bridge from "read the recipe" to "queue a confirmed test note."
Hardware test-note UI bridge pass, 2026-07-03: the Settings MIDI SETUP panel now exposes that safe test-note plan as a visible TEST NOTE action for the selected Device Template and target lane. The action refuses blocked routes, shows the preflight receipt, requires explicit confirmation, and queues only note-on/note-off. Program Change, Bank Select, MIDI Clock, transport, SysEx, reset, template-apply data, and timing-calibration traffic remain outside the test-note gesture.
SysEx capture UI bridge pass, 2026-07-03: the SysEx Vault now has a visible live-capture strip and actions: ARM CAPTURE, CANCEL, SAVE CAPTURE, and COPY CAPTURE. The panel renders the shared progress object, listens only while armed, lets one incoming SysEx dump auto-disarm into a review receipt, and saves the reviewed capture into the Vault as a confirmation-required snapshot. Remaining polish is live batch capture/save UI, deeper Hardware Passport attachment prompts, restore verification history, and device-specific ACK/NAK parsing.
SysEx capture model pass, 2026-07-03: SysEx live-capture now has reusable readiness, receipt, progress, and source-guidance models. SysExCaptureReadinessPlan states that explicit arming is required, one-dump live capture is wired, and captured dumps remain listen/store only. SysExCaptureReceipt classifies a captured dump, validates SysEx framing, estimates wire/send timing, and marks the result as captured-only/not-sent with confirmation required by default.
SysEx capture processor pass, 2026-07-03: the processor now owns the first live-capture state machine. SpaceAge can arm capture for one dump, keep SysEx outside ordinary channel filtering, accept the next F0...F7 message as review-only data, auto-disarm, expose the last receipt, and commit the reviewed capture into the SysEx Vault. Remaining work is polish: live batch capture/save UI, deeper source selection, and richer Hardware Passport attachment prompts.
SysEx capture progress pass, 2026-07-03: SysExCaptureProgress now reports the runtime phase for capture surfaces: idle, armed/listening, captured/ready, or captured/needs-review. It carries byte count, transfer class, DIN timing, trust/safety copy, warnings, and next action so the SysEx Vault capture strip, COPY CAPTURE report, and future richer progress/history surfaces share wording.
Spec-reality audit, 2026-06-29: the MIDI Protocol Coverage model now distinguishes "classified/preserved" from "product-ready workflow" more aggressively. The report explicitly calls out RPN/NRPN/channel-mode data as review-only, MIDI import as first-tempo based with first source tempo/key adoption only, full tempo/meter/key maps as receipt-preserved but review-only until a timeline-map editor exists, and direct external hardware output as scheduled with calibration storage, manual calibration, and loopback pulse capture in place. This makes the in-app MIDI status less flattering but more trustworthy.
Hardware timing baseline, 2026-06-29: live external hardware MIDI lane playback now carries in-block sample offsets into JUCE's scheduled MidiOutput::sendBlockOfMessages() path. Confirmed hardware recall/SysEx traffic keeps its separate deliberate queue and send-delay behavior. Product readiness still needs real-device testing, latency calibration, and jitter/health reporting.
Timing calibration backbone, 2026-06-30: MIDI Health now serializes a timingCalibration payload with audio-block latency, saved record-latency compensation, armed-input/hardware-output context, stable suggested action kinds, and warnings. The later MIDI Timing panel builds on this model with manual and loopback measurement paths, so every timing surface reports from the same readiness truth instead of loose settings text.
Protocol coverage timing update, 2026-06-30: MIDI Protocol Coverage now reports Hardware Output Timing as a scheduled backend with first calibration UI. Manual profile calibration, guided loopback pulse sending, returned-pulse acceptance, saved timing labels, warnings, and copyable reports are no longer treated as missing. Remaining work is apply/recalibrate polish, broader real-device validation, and deeper jitter/driver diagnostics.
MIDI Maps duplicate repair, 2026-07-01: MIDI Maps now exposes a safe REPAIR action when exact duplicate source-target rows exist. The processor removes only accidental duplicate mappings that share the same source and target, keeping the first row and preserving unresolved diagnostics and intentional one-control-to-many-target assignments. The self-test proves repair clears the duplicate count without hiding unresolved-target warnings.
MIDI Learn replacement primitives, 2026-07-01: the processor now has removeMidiControlMappingsForSource() for one-source-to-many-target cleanup and removeMidiControlMappingsForTarget() for replacing mappings aimed at one visible target. Direct-control learn can now choose the musician's intent up front: replace the moved hardware source's older assignments, or add the new mapping as an intentional macro. These are deliberately separate from automatic duplicate repair because one hardware source driving many targets may be a deliberate creative gesture.
MIDI Maps macro-source visibility, 2026-07-01: one hardware source driving multiple enabled targets is now counted and displayed as a macro source instead of being treated like a duplicate accident. Assignment summaries serialize the shared-source target count, MIDI Maps rows show a MACRO SOURCE note, and exact duplicate source-target rows remain the only duplicate-repair condition.
MIDI Learn capture receipts, 2026-07-01: after a MIDI Learn capture, the processor now records a reusable receipt describing the learned source, target, source-conflict mode, number of older source mappings removed, target labels involved, and resulting macro target count. MIDI Maps can display that receipt immediately after capture, so direct Learn no longer silently changes the map without explaining whether it replaced old routing or created/preserved a macro.
MIDI Learn pre-capture preview, 2026-07-02: the processor now exposes previewMidiLearnCapture(), a non-mutating model that inspects an armed Learn request plus an incoming learnable MIDI message and reports whether that hardware source already controls other targets. It serializes the source, target, action label, conflict count, existing target labels, and high-resolution companion metadata before any mapping is committed. This is the backend for the later Replace/Macro confirmation dialog and keeps the current capture receipt as the post-action audit trail.
MIDI Learn conflict confirmation, 2026-07-02: the MIDI Maps panel now uses that preview model directly. A source conflict no longer commits immediately; it becomes a pending capture with visible REPLACE, MACRO, and CANCEL choices. REPLACE removes older mappings that use the same hardware source, MACRO keeps the source shared across targets, and CANCEL drops the candidate mapping without changing the project.
MIDI Learn 14-bit source labels, 2026-07-02: assignment summaries now append the fine companion CC to 14-bit capable MSB controllers, e.g. CC 1 + CC 33 fine, while preserving the warning path for learned LSB/fine controllers. This keeps high-resolution MIDI visible without changing persisted raw mapping sources.
Hardware setup examples, 2026-07-01: MIDI setup scenarios now carry real-world example device labels. The guide can mention MiniNova-style single synths, QY-70/QY-100-style multitimbral modules, EWI/wind controllers, MIDI guitar systems, and MPC-style pad controllers from the shared model, keeping the setup UI and copied reports grounded in recognisable hardware without making device-specific routing changes automatically.
Hardware setup device templates, 2026-07-01: the MIDI model now owns a first searchable Device Template layer for common real-world hardware families: MiniNova-style single synths, QY-70/QY-100 and GM/XG multitimbral modules, EWI/wind controllers, MIDI guitar/per-string controllers, and MPC-style pad controllers. Templates serialize setup hints, aliases, channel expectations, expression expectations, profile/timing needs, warnings, and plain-text reports without mutating routes or sending MIDI. This turns the guide from abstract scenario cards toward a future "choose your hardware" wizard while preserving the explicit-confirmation rule.
MIDI SETUP template visibility, 2026-07-01: the selected MIDI SETUP scenario detail now shows matching device-template labels, and COPY GUIDE appends the model-owned device-template report after the scenario-plan report. This gives the user real hardware names in the current UI while keeping template application read-only until a safer preview/apply wizard exists.
MIDI SETUP template picker, 2026-07-01: the selected MIDI SETUP detail now includes a read-only Device Template picker plus COPY TEMPLATE. Scenario selection moves the picker to the nearest matching template, and manual template browsing updates the visible template focus text. This is still intentionally non-mutating: it does not create lanes, profiles, routing, channel filters, timing records, or hardware sends.
MIDI SETUP template apply preview, 2026-07-01: MidiHardwareSetupDeviceTemplatePreview now describes what a chosen template would propose before any UI is allowed to apply it. The model reports proposed actions, lane/channel/expression/profile/timing changes, warnings, blocked mutations, and explicit safety booleans proving the preview does not create lanes, change routing, create hardware profiles, or send MIDI by itself.
Settings timing panel, 2026-06-30: Settings now has a dedicated MIDI Timing callout. It reports session buffer latency, saved record-compensation state, calibration readiness, suggested action, timing warnings, and hardware-profile timing labels from the shared MIDI Health model. Timing-calibration repair recommendations open this panel directly, and the panel now hosts the first manual/loopback calibration workflow.
Loopback timing calibration panel, 2026-06-30: the MIDI Timing callout now has both a profile-based manual calibration path and a guided loopback pulse path. A user can choose a hardware profile, send safe C4 timing pulses to the selected MIDI output, route the hardware return back into SpaceAge, accept the returned measurement, and store the suggested compensation on that profile. Manual round-trip/jitter entry remains available for externally measured rigs. The remaining future step is deeper device-aware diagnostics and friendlier transfer/progress guidance, not the core profile timing record itself.
Hardware recall transfer estimates, 2026-06-30: hardware recall summaries and active hardware-queue progress now estimate MIDI DIN wire time, total completion time, and transfer class for program recall plus SysEx restores. The Hardware panel and send-confirmation copy can now tell the user whether they are queuing a small SysEx recall, patch dump, or bulk dump, and approximately how long the transfer path should take. Generic restore-response classification now covers standard ACK/NAK/WAIT/CANCEL replies, while profile-specific acknowledgement dialects remain future Hardware Passport work.
MIDI setup assistant baseline, 2026-06-30: the reusable setup scenarios now have a first state-aware assistant plan. The plan can combine current input/output/runtime/inventory readiness with a selected scenario and emit complete/needs-action/blocked/optional checklist rows plus the next action label. This is backend-only, non-mutating wizard infrastructure.
MIDI package support baseline, 2026-06-30: whole-Arrangement MIDI stem packages now include app version, generated timestamp, project name when known, a full package-file inventory, FNV-1a 64-bit checksums for exported MIDI payload files, a CHECKSUMS.txt sidecar, warning inventory, and a support summary in manifest.json, mirrored by a human-readable README.txt. A reusable package inspection helper can now validate package folders or manifest files, verify payload checksums/byte counts, report missing files, and answer whether the package is ready for import/repair. Package import now has preview, plan, guarded commit-request, receipt models, a first confirmed processor-level lane-stem import path, a guarded Library IMPORT STEMS button for clean packages, and one-Undo restoration for confirmed package imports. The wizard stack can now distinguish facts, safety, user intent, audit trail, and actual mutation.
Hardware/SysEx confidence baseline, 2026-06-30: Hardware recall plans, hardware recall logs, and live queue progress estimate MIDI DIN wire time from byte count, include planned send delay, categorize transfer size, and now expose those durations through a shared human-readable formatter. Hardware recall plans, logs, and queue progress also expose reusable plain-text reports for confirmation dialogs, support, and future progress/history surfaces. Queue progress now includes phase/trust/next-action labels that explicitly distinguish SpaceAge-side queue visibility from external device acknowledgement. This keeps old-device workflows understandable before the final progress-meter UI lands.
Raw export baseline, 2026-06-29: raw selected-pattern MIDI export now uses a documented pattern-local convention. Drum steps export on General MIDI channel 10, Chord Engine markers export on channel 1, and Piano Roll notes preserve their stored channels. Selected Arrangement clip export remains lane-route aware.
Export timing honesty, 2026-07-02: MIDI export now writes song metadata through one shared processor helper and export job details/stem-package receipts explicitly report PPQ, BPM, and fixed 4/4 meter. Full tempo/meter conductor-map export remains a future timeline-map feature rather than a hidden assumption.
Expression authoring baseline, 2026-06-29: MIDI EXPR now includes a first-stage expression insert strip. A user can create ordinary timeline expression at the playhead, including mod wheel, expression, volume, pan, sustain, brightness CC74, pitch bend, channel pressure, and note-specific poly aftertouch, or draw selectable 1/2/4/8/16-step ramps. RPN, NRPN, Data Entry, Bank/Program, and channel-mode setup data remain review/protected data until their own grouped hardware-oriented workflows exist.
Expression inspection baseline, 2026-06-30: MIDI EXPR now has a selected-lane scope preview and a copyable expression report. This improves the customer-facing inspection path for CC, pitch bend, pressure, sustain, and aftertouch data while still keeping setup traffic protected.
Expression shared-pattern guard, 2026-07-02: MIDI EXPR now detects whether the selected pattern is referenced by multiple Arrangement clips and blocks expression creation/drawing/transforms/step-clears/deletes until the user clicks ACK SHARED or MAKE VARIANT. ACK SHARED allows an intentional linked edit across every clip using the pattern; MAKE VARIANT copies the selected clip's pattern payload, including notes, chords, and MIDI expression, into a new independent pattern before editing. This does not yet create clip-local expression overlays, but it prevents pattern-scoped MIDI expression edits from silently changing several places in the song.
Expression ownership boundary, 2026-07-02: MIDI expression payloads are documented as pattern-owned across the current architecture, UI workflow, gotchas, and progress docs. Shared Arrangement clips share expression by design until the user makes a variant. Clip-local expression overlays remain a future architecture item that must define copy/paste, split, export, undo, and linked-clip behavior before any UI implies local automation.
Expression drawing baseline, 2026-06-30: MIDI EXPR selected-lane scope now accepts click/drag drawing for editable performance lanes. It writes step-snapped events through the same undoable MIDI expression payload path used by point/ramp authoring, while setup-style lanes remain review-only. This is a practical first pass, not the final piano-roll-grade expression lane editor.
Import inspection baseline, 2026-06-29: raw controller counts now remain raw MIDI facts, while user-facing expression counts subtract setup controllers and Bank Select. This prevents ordinary CC performance data from inflating patch/setup review and prevents RPN/NRPN/Data Entry from being mislabeled as normal musical expression. The MIDI Import Review Dashboard also carries structured setup-controller groups for RPN/NRPN review cards.
Import receipt baseline, 2026-06-29: MIDI import apply results now serialize both the compatibility preserved-payload total and clearer subcounts for preserved performance expression versus preserved patch/setup payload. UI should prefer the subcounts when explaining import results.
Setup-card baseline, 2026-06-29: RPN/NRPN setup-controller summaries now expose parameter type, combined 14-bit parameter number, combined 14-bit Data Entry value when complete, labels for complete 14-bit values or incomplete MSB-only/LSB-only cases, interpretation labels for known RPNs, and action-state fields for missing selector, awaiting Data Entry, ready-for-card, stable suggested action kind, and human suggested next action. Incomplete selector-only traffic is now preserved as its own review group instead of disappearing. Future hardware setup cards should render those fields directly instead of parsing display text.
Setup-card action-plan baseline, 2026-07-01: RPN/NRPN setup-controller summaries can now be converted into preview-only action plans. The model reports the selected card, interpretation, safety copy, absolute/relative value mode, warnings, and the planned CC order without queueing or sending MIDI. RPN plans can include a safety RPN-null/deselect pair after the value messages; NRPN plans stay conservative and warn that device-specific behavior varies.
Setup-card queue bridge, 2026-07-02: MIDI PATCH now exposes a confirmed QUEUE CARD action for selected standard RPN setup cards. The processor requires explicit user confirmation, an attached Hardware Passport, and a real output-device target, then queues the model-owned CC sequence and writes each attempted message to the hardware recall log.
Hardware Passport NRPN dictionary baseline, 2026-07-02: Hardware Passports can now carry named NRPN definitions with parameter MSB/LSB, value meaning, relative-data policy, and an explicit queueSafe flag. Profile summaries expose total and queue-safe NRPN definition counts plus a compact preview, validation catches incomplete/duplicate definitions, and MIDI PATCH can queue a selected NRPN setup card only when the selected lane's Hardware Passport contains a matching queue-safe definition. Unknown NRPN cards remain review/receipt-only.
Setup-card receipt baseline, 2026-06-30: RPN/NRPN setup-controller summaries now own copyable plain-text receipts with channel, tick range, selector type, parameter number, Data Entry value, readiness, warnings, and next action. This keeps future editable hardware setup cards, support bundles, import receipts, and device-profile workflows aligned to one MIDI-layer interpretation of the controller stream.
Setup-card copy UI baseline, 2026-06-30: MIDI PATCH now supports selecting a structured RPN/NRPN setup card and copying its model-owned receipt through COPY CARD. Selection is mutually exclusive with Bank/Program rows so recipe-saving, SoundFont mapping, and setup-card copying remain clearly separate actions.
Setup-card profile-note bridge, 2026-06-30: the processor now has a guarded helper that appends a model-owned RPN/NRPN setup-card receipt to a Hardware Passport's notes. It rejects missing profile IDs, preserves existing notes, avoids duplicate receipt blocks, and never sends MIDI. This gives future UI a safe bridge from import review to hardware documentation before editable RPN/NRPN send cards exist.
MIDI PATCH setup-card UI baseline, 2026-06-30: the MIDI PATCH panel now renders RPN/NRPN setup-controller summaries as structured hardware setup cards instead of only flat review strings. Cards show channel/tick range, selected parameter, 14-bit parameter/value labels, event count, warnings, and suggested next action. Channel-mode setup rows remain visible as review-only text because they are not part of the RPN/NRPN grouping model.
Import preview setup-card baseline, 2026-06-30: the MIDI Import Wizard Patch Setup Preview now shows the first grouped RPN/NRPN setup card when setup-controller groups exist, before falling back to flat patch/setup text. This makes hardware setup intent visible before the import mutates the project.
Verification baseline, 2026-06-26: the Release SampleSquadAudioTest suite passes after the TempoCalc addition and MIDI protocol/readiness hardening. The MIDI protocol foundation test now verifies stop-transport safety messages, broader same-channel device-setup inspection, split-channel import previews, hardware profile validation, SysEx vault safety, and project MIDI readiness/health summaries.
Repair baseline, 2026-06-26: the Release SampleSquadAudioTest suite passes with MIDI device repair recommendations wired into backend readiness, MIDI Input, MIDI Output, and MIDI Health surfaces. These recommendations now expose first-pass guided navigation buttons in MIDI Health plus the focused MIDI Input and MIDI Out panels. They still do not silently change routing or send hardware data.
Expression-risk baseline, 2026-06-27: MIDI Health now includes a model-layer Expression summary that reports pattern-scoped expression payloads, arrangement clip references, shared-pattern reuse, cross-lane reuse, and dense expression lanes. This is a guardrail before the deeper future migration to clip/lane-local expression envelopes.
Patch-setup baseline, 2026-06-27: MIDI Health now includes a model-layer Patch Setup summary that reports Bank Select / Program Change setup rows, complete recall rows, bank-only rows, arrangement clip references, shared-pattern reuse, and cross-lane reuse. This is the guardrail before converting imported patch setup into lane instrument assignments, hardware recall metadata, or clip-local setup data.
Import-choice baseline, 2026-06-27: the Release SampleSquadAudioTest suite passes with selected-pattern import and split-channel import both honoring visible Import Wizard choices for editable expression, device setup, and SysEx storage. This prevents the wizard from presenting safety toggles that do not actually affect backend mutation.
Patch-profile baseline, 2026-06-27: the MIDI PATCH panel can now explicitly save reviewed Bank Select / Program Change rows as hardware profile recall recipes. This creates profile metadata only; it does not send hardware messages, change internal presets, or attach the profile to a lane without a later user action.
Sync-monitor baseline, 2026-06-27: the MIDI SYNC panel now has explicit Refresh Monitor and Reset Monitor controls for incoming Clock/Start/Stop/SPP/MTC/MMC/Active Sense counters. This makes hardware sync troubleshooting repeatable without changing sync policy or sending MIDI. Guarded MTC full-frame / assembled quarter-frame position chase and guarded MMC Play, Deferred Play, Stop, and Pause chase are now implemented for profiles that explicitly opt into those chase roles.
Sync-authority baseline, 2026-06-27: MIDI Sync policy summaries now report separate clock, position, and transport authority labels. Clock authority can be Host Sync, MIDI Clock, or Internal Tempo; position authority can be SpaceAge Playhead, Song Position Pointer, MTC, or both; transport authority can be SpaceAge Transport, MIDI Start/Continue/Stop, MMC, or both. This keeps tempo, timeline position, and play/stop control from becoming one confusing "sync on/off" idea.
Protocol-readiness baseline, 2026-06-28: the MIDI Protocol Coverage model now carries explicit next-action text and blocksProductReady flags per protocol family. This makes the remaining MIDI 1.0 finish line visible in the product model instead of burying it in prose: Piano Roll-grade expression lanes, SysEx librarian completion, direct-control MIDI Learn polish, the full Import Wizard, and guided hardware setup are current customer-facing blockers. Program/bank, Sync, MIDI Learn, routing/preflight, and timing calibration now have first-pass UI surfaces, so their remaining work is tracked more precisely.
Protocol finish-line split, 2026-07-02: MIDI Protocol Coverage now reports the current MIDI 1.0 finish line separately from deferred future protocol families. MPE and MIDI 2.0 remain visible roadmap rows, but they no longer distort the MIDI 1.0 release-readiness score or blocker count. Copied reports serialize the current-finish-line summary, deferred future-protocol summary, current family count, current blocker count, and deferred-family count.
Protocol blocker categories, 2026-07-02: each active MIDI release-readiness blocker now carries a model-owned category. The plain-text report and serialized data can distinguish AUTO LANES Final Editor, Hardware Setup Safety, SysEx Librarian, MIDI Learn Completion, Import Wizard, Export Workflow, Timeline Map, and Hardware Setup Wizard work instead of treating every blocker as the same kind of unfinished MIDI.
MIDI-map feel baseline, 2026-06-28: MIDI Learn mappings now persist and apply a first-pass response curve. Each mapping can remain Linear, bend toward a Fast Start response, or bend toward a Slow Start response, letting hardware knobs, pedals, wheels, and pressure sources feel less crude without changing the target parameter itself.
Patch-recall guidance baseline, 2026-06-28: MIDI Patch summary rows now carry reusable recall guidance for complete bank+program recall, program-only recall, incomplete-bank recall, and bank-only review data. The MIDI PATCH panel consumes those labels instead of inventing one-off status prose, keeping future import wizard and hardware setup surfaces aligned.
Patch-recipe eligibility baseline, 2026-06-28: MIDI Patch summary rows now also expose whether they can create a hardware profile recipe. Program Change rows can be converted, even if they are program-only or partial-bank recalls; bank-only setup rows remain preserved review data and are skipped by recipe creation.
Import-wizard patch preview baseline, 2026-06-28: the MIDI Import Wizard now uses clearer PRESERVE SETUP FOR MIDI PATCH language and shows a compact Patch Setup Preview before import. This makes Bank Select / Program Change / setup controller data visible before a user commits the file into the project.
Implemented
- Shared 960 PPQ timing vocabulary.
- Channel-aware MIDI event model.
- MIDI message classification for notes, note-offs, CC, pitch bend, poly aftertouch, channel pressure, program change, bank select, SysEx, clock, Start, Continue, Stop, Song Position Pointer, Song Select, MTC, MMC, active sense, tempo, meter, and key meta events.
- Channel-aware Piano Roll note storage/export.
- MIDI recording of notes and expression payloads.
- Lane MIDI input arming and input-channel filtering.
- Lane playback/export MIDI channel routing.
- Panic/reset handling for internal state and external channels.
- Direct hardware panic broadcast for routed hardware lanes/devices.
- Pattern-owned expression payload persistence.
- MIDI file import preserves safe timeline expression payloads.
- MIDI file import quarantines SysEx as confirmation-required vault snapshots.
- SysEx snapshots use a conservative hardware-safe send-delay recommendation based on byte count, and recall plans enforce that recommendation so large dumps are not fired at old hardware too aggressively.
- UI-ready MIDI expression lane summaries.
- UI-ready MIDI patch/setup summaries for Bank Select and Program Change events.
- Explicit MIDI PATCH to hardware-profile conversion for reviewed Bank Select / Program Change rows.
- Processor-level add/remove/replace helpers for individual MIDI expression lanes.
- Pure MIDI expression lane transforms for quantizing CC/bend/pressure ticks, scaling values, offsetting values, and thinning redundant events without directly mutating project state.
- First-stage MIDI EXPR authoring controls for inserting common expression points, including note-specific poly aftertouch, at the playhead and drawing selectable 1/2/4/8/16-step ramps through the existing undoable expression-event path.
- UI-ready MIDI import lane candidates for channel-to-lane wizard rows.
- Dry-run MIDI import apply previews for the final "what will happen?" wizard checklist.
- Recommended MIDI import commit requests for capturing the final chosen import shape before mutation.
- UI-ready MIDI import apply results for reporting the actual import receipt: clips, lanes, preserved expression, stored SysEx, reviewed setup, ignored transport, and warnings.
- UI-ready MIDI export readiness summaries for pattern, selected clip, and full Arrangement MIDI export preflight.
- UI-ready MIDI export job plans that turn readiness summaries into file rows, lane/track rows, suggested
.midfilenames, warnings, and can-export state. - MIDI export job plans now also expose lane/stem-package readiness: exportable lane-track count, a recommended stem-folder name, and a flag for whole-Arrangement multi-lane package readiness.
- Whole-Arrangement MIDI stem-package export now has a backend writer that creates one full Arrangement
.midplus one isolated lane.midper exportable lane while preserving timeline positions and lane playback/export channels. The package also writes amanifest.json,README.txt, andCHECKSUMS.txtwith app version, generated timestamp, package files, MIDI payload FNV-1a 64-bit checksums, warnings, lane names, MIDI channels, route labels, and support summary fields. - MIDI stem-package inspection now reads a package folder or direct
manifest.json, verifies the SpaceAge package format, checks every listed package file, confirms recorded byte counts, recomputes FNV-1a payload checksums, verifies the checksum sidecar is present, and serializes a UI-ready readiness summary for future import/repair surfaces. - MIDI stem-package import now has a reusable preview, import plan, commit request, apply receipt, and processor mutation path. Clean packages can recommend lane-stem import; broken packages are forced back to inspect-only or repair flows; receipts report lane stems, event counts, support files, full Arrangement reference handling, confirmation state, warnings, and action lines. The processor-level apply helper re-inspects and replans before mutation, refuses broken packages, imports clean lane stems through the existing MIDI importer, and groups the whole package import into one undo checkpoint.
- MIDI export job rows now include explicit timing context: PPQ, BPM, and exported step range.
- Selected-pattern, selected Arrangement clip, full Arrangement MIDI, and drum-only Arrangement MIDI exports now show a SpaceAge-styled Export Preview with readiness stats, recommended filename, timing context, job-plan rows, and warnings before opening the save-file chooser.
- Project-level MIDI readiness counts for expression events and expression lanes.
- Drag/drop and menu MIDI imports run through a shared preflight warning when files contain setup/sync/unsafe data.
- Selected-pattern, selected Arrangement clip, and whole Arrangement MIDI export paths.
- Selected-pattern, selected Arrangement clip, full Arrangement MIDI, and drum-only Arrangement MIDI exports now block empty exports and show warning review dialogs before writing files when the preflight finds questionable routing, muted lanes, missing data, or other export concerns.
- Hardware profile project model.
- SysEx snapshot project model.
- Hardware profile validation.
- UI-ready hardware profile and SysEx snapshot summaries.
- Hardware recall plan builder.
- UI-ready hardware recall plan summaries for previewing Bank/Program/SysEx recall before confirmation.
- Explicit confirmed hardware recall queue path.
- Hardware recall log.
- Hardware sync capability flags.
- Dry-run transport/sync plan preview.
- UI-ready transport/sync plan summaries for previewing Start/Continue/Stop, Song Position Pointer, and MIDI Clock intent.
- Guarded runtime transport/clock send for hardware profiles that explicitly allow it: Start/Continue/Stop and Song Position Pointer are queued at playback boundaries, and continuous MIDI Clock is queued during playback for unique clock-enabled output devices.
- Resettable incoming MIDI sync/status monitor counters for hardware troubleshooting.
- MIDI Sync policy authority labels for clock, timeline position, and transport control, so UI can plainly report whether SpaceAge, the host, MIDI Clock, SPP, MTC, or MMC is currently in charge of each job.
- MIDI file/event/sequence inspection report.
- Reusable MIDI device repair recommendations that convert readiness, visible-device inventory, and runtime output state into clear next-step actions for missing inputs, missing outputs, closed outputs, dropped messages, and unarmed input lanes.
- Per-channel MIDI activity summaries.
- MIDI import planning policy.
- UI-ready MIDI import summaries.
- UI-ready MIDI import review dashboards with Overview, Lane Plan, Expression, Patch Setup, SysEx, Song Metadata, Transport / Sync, and Warnings sections.
- MIDI import preflight now uses a SpaceAge-styled review panel instead of a generic OS warning dialog, with compact review-dashboard details from the same Overview, Lane Plan, Expression, Patch Setup, SysEx, Song Metadata, Transport / Sync, and Warnings model.
- The MIDI import preflight panel is now labeled as a first-page MIDI Import Wizard Preview, clarifying that it is a rich inspection/review surface while the current commit path still imports into the selected pattern.
- MIDI import preflight dialogs now include an action preview that distinguishes selected-pattern import from the richer lane-splitting / setup-review actions recognized by the backend.
- MIDI import review dashboards carry structured setup-controller groups for RPN/NRPN and Data Entry review, including display labels and warnings. These are review payloads, not automatic hardware or instrument mutation commands.
- MIDI import action preview now enables a first-pass "Split Channels To Lanes" footer button when safe melodic/instrument or GM drum candidates exist, and the backend can commit General MIDI channel 10 drum candidates into long-form drum lanes. This creates Arrangement lanes, new pattern payloads, clips, preserves same-channel expression data, and stores SysEx snapshots when requested.
- MIDI import channel splitting now has first-pass include/exclude rows inside the Import Wizard Preview. Safe melodic/instrument channels and GM drum channels are checked by default and can be unchecked before commit; drum rows show a disabled
Long-form Drum Lanedestination, while setup and review-only rows remain visible but guarded with explanatory copy. - MIDI Import Wizard channel rows are now paged when a file has more than four reviewed rows. Importable rows keep their include/exclude and destination state while paging, and split-channel commits are built from every checked row rather than only the currently visible page.
- MIDI Import Wizard Preview now exposes first-pass safety toggles for preserving expression, reviewing song metadata, reviewing device setup, storing SysEx, and ignoring transport/sync events. Selected-pattern import and split-channel import both build their commit requests from those visible choices.
- MIDI import commit requests now include per-channel commit options for source channel, lane name, instrument slot, play/export channel, and input channel. The first-pass UI fills these with current defaults; the backend now has a clean hook for richer destination controls without changing today's default behavior.
- Successful split-channel imports now show a styled MIDI Import Receipt callout with summary, action rows, and warnings, so users can verify which lanes, patterns, and SysEx snapshots were created or skipped.
- Selected-pattern MIDI import now reports through the shared MIDI import receipt model after import, so preserved expression, quarantined SysEx, metadata review, ignored transport/sync, and warnings can share the same language as the future full Import Wizard.
- Selected-pattern MIDI import now enters through a processor-level
applyMidiFileImportcommit boundary, so the editor no longer performs the mutation directly. This is the first safe step toward making the full Import Wizard commit lane-splitting, setup review, and SysEx choices through one backend path. - Channel-to-lane import is no longer all-or-nothing: note-bearing melodic/instrument rows and GM channel 10 drum rows can commit, while setup-only and review-only channels remain guarded rather than half-implemented.
- MIDI import inspection now reports the file timing format, including PPQ ticks-per-quarter or SMPTE/timecode timing, and surfaces concrete tempo, meter, and key rows in the Song Metadata review section.
- MIDI import warns when files contain variable tempo, meter changes, multiple key signatures, or SMPTE timing, and explicitly states that clip import does not silently adopt the source tempo map or rewrite the current project.
- MIDI import commit requests and receipts now include an explicit song metadata policy. The Import Wizard exposes keep-current-project, review-only, adopt-first-values, and review-maps-only choices. First source tempo/key adoption now mutates through the processor apply path; full reviewed tempo/meter/key map rows are preserved in receipts, while source meter and full tempo/key timeline mutation remain guarded until they are undo-safe.
- MIDI Learn control mappings support per-mapping response curves, including Linear, Fast Start, and Slow Start behavior, with UI controls in MIDI Maps.
- Processor-level MIDI import review dashboard helpers for files and stored pattern MIDI payloads.
- Channel-role hints for likely drums, melodic notes, expressive notes, controller-only data, and device setup.
- Project-persistent MIDI control mapping model for CC, pitch bend, channel pressure, and poly aftertouch.
- MIDI control mapping validation and processor upsert/remove/enable-disable helpers.
- Automatic MIDI Learn target registry for APVTS-backed parameters using canonical
param:<parameterId>target ids. - Processor-level MIDI Learn arming and capture path.
- Runtime application of learned MIDI control mappings to JUCE parameters, including inverted controller direction when requested.
- Whole-table MIDI mapping diagnostics for duplicate/suspicious assignments.
- UI-ready MIDI control assignment summaries with resolved source labels, compact labels, source metadata, target labels, groups, enabled state, value range, and per-assignment warnings.
- MIDI Maps callout now shows current mappings plus a compact learnable-target summary with target counts, target kinds, groups, and examples.
- UI-ready MIDI Learn mapping dashboard with assignment counts, enabled/disabled counts, unresolved targets, duplicate warnings, source-family counts, groups, and a ready-for-performance flag.
- Project-level MIDI readiness report for lane routing, armed input state, compact lane status labels, controller assignment count, hardware profile count, SysEx snapshot count, expression event/lane count, and setup warnings.
- External MIDI output readiness report for hardware-routed lanes, missing output devices, attached hardware profiles, blocked/ready lane counts, and user-facing preflight warnings.
- External MIDI output runtime report for requested/open/closed output device counts and dropped hardware-message counts.
- MIDI device inventory report comparing currently visible OS MIDI inputs/outputs against saved lane and hardware-profile device references.
- MIDI input readiness report for the armed lane, input channel filter, selected input device visibility, and can-receive state.
- Project-level MIDI Health summary aggregating readiness, protocol coverage, controller assignment dashboard, controller assignments, hardware profile summaries, SysEx snapshot summaries, and warning counts.
- MIDI Health now includes a dedicated Expression row and diagnostic model, warning when pattern-owned CC/pitch/pressure data is reused by multiple arrangement clips or across multiple lanes.
- MIDI Health now includes a dedicated Patch Setup row and diagnostic model, warning when pattern-owned Bank Select / Program Change setup is incomplete, bank-only, reused by multiple arrangement clips, or referenced across multiple lanes.
- MIDI Health reports current audio block size, sample rate, and calculated block-time latency so live MIDI feel can be diagnosed separately from driver/interface/hardware latency.
- MIDI Health, MIDI Input, and MIDI Out next-step rows now expose guided repair buttons. Lane-specific repairs open the target lane's MIDI Routing panel; setup repairs open the matching MIDI Input, MIDI Out, or MIDI Hardware surface; refresh repairs rescan the MIDI preflight state. These buttons navigate to repair surfaces, but they do not silently change routing or send hardware data.
- First-pass MIDI Health, MIDI Input, MIDI Out, MIDI Hardware, MIDI Protocol, MIDI Preflight, MIDI Maps, MIDI Sync, and SysEx Vault callouts exist in Settings. These are useful inspection surfaces, not final workflows.
- The MIDI Hardware callout shows hardware profile summaries, recall-plan previews, first concrete recall-message rows, recent hardware queue log entries, a compact recall queue summary with queued/failed counts, SysEx byte totals, planned delay totals, latest target, and guarded send controls for program recall or program recall plus attached SysEx.
- The MIDI Hardware callout now shows first-pass live send queue progress for SpaceAge's internal hardware-MIDI queues: pending live lane messages, pending recall/librarian messages, pending SysEx count, pending byte count, planned recall delay, and dropped-message warnings. This is SpaceAge queue visibility, not external-device acknowledgement.
- The MIDI Hardware callout now shares the SysEx Vault's explicit "NO AUTOSEND" language, making recall previews and queue history visually distinct from actual hardware transmission. Hardware recall can only queue after the user selects a hardware passport, clicks a send action, and accepts a confirmation dialog that lists messages, bytes, delays, output device, and warnings.
- SysEx snapshots now include a derived descriptor/safety layer that reports framing validity, manufacturer id shape, universal real-time/non-real-time status, message class, payload size, safety category, and warnings. The SysEx Vault shows this descriptor beside the raw hex preview.
- SysEx descriptors now recognize several common manufacturer IDs, expose likely manufacturer-specific device-id bytes, and report Roland-style 7-bit checksum matches/differences while leaving unknown manufacturer checksum rules explicitly uninterpreted. The Vault report includes the checksum detail for support and restore troubleshooting.
- First-pass MIDI Input callout reports the armed lane, input device scope, channel filter, can-receive state, visible MIDI input count, and input warnings so selected clip/lane state is not confused with the live MIDI destination.
- MIDI input/channel diagnostics now include recently observed channel traffic before lane filtering, guided repair recommendations for observed-channel mismatches, a
RESET OBSERVEDcontrol in the MIDI Input popup, and compact Health next-step text that names the observed channels when available. - MIDI Setup assistant plans now surface recently observed input channels as a checklist row, so controller/guitar/wind/drum-pad setup can confirm that SpaceAge heard the hardware before asking the user to repair channel filters or routes.
- First-pass MIDI Out callout reports external-output readiness, runtime open/closed device state, visible output count, dropped-message count, and hardware-routed lane rows.
- First-pass MIDI Maps callout lists stored/learned controller assignments with source, target, group, value range, enabled state, inverted state, resolved/unresolved target status, and per-assignment warnings.
- MIDI Maps now exposes safe per-assignment
INV, exact low/high endpoint fields, andR-/R+controls, so hardware sliders, pedals, wheels, and pressure sources can reverse direction, set exact response limits, or narrow/widen their response range without deleting and relearning the mapping. - MIDI Maps now includes a first-pass target-group picker, target picker,
LEARN,CANCEL, andREFRESHcontrols, so a user can arm MIDI Learn from Settings without needing a hidden direct-control gesture. The panel auto-refreshes after a capture completes, so the new mapping appears without a manual refresh. - MIDI Learn assignment summaries now recognize learnable high-resolution CC pair relationships. Coarse/MSB controllers report their fine LSB companion, LSB-only learned mappings are warned, and learned MSB mappings automatically merge matching LSB traffic into a 14-bit runtime value when both halves are present.
- MIDI Maps rows now show a first-pass live activity meter sourced from the assignment summary. Moving a learned controller updates the row's latest normalized/mapped value while the panel is open, giving hardware setup immediate visual confirmation.
- MIDI Maps now has a safe exact-duplicate repair button. It activates only when duplicate source-target mappings exist and keeps broader conflict choices explicit for direct-control remapping.
- The processor now has a source-replacement helper, and MIDI Maps exposes it per row as
KEEPwhen a hardware source drives multiple targets.KEEPpreserves the chosen row and removes other mappings from that source, while still allowing intentional one-control-to-many-target macro mappings to exist until the user chooses cleanup. - MIDI Maps rows now expose
PICK, a soft-takeover/pickup toggle. When enabled, a learned hardware control must reach or cross the current SpaceAge parameter value before it takes over, preventing sudden parameter jumps during live performance. - MIDI Maps target picking now includes text search across target name, group, id, parameter id, and unit label, so learnable controls can be found without memorizing internal parameter names.
- First-pass MIDI Expression callout shows selected-pattern expression lanes, including label, event count, tick range, and value range, with safe actions for step-quantizing event timing, raising/lowering lane values, thinning redundant events, and deleting a selected expression lane. Setup-style rows such as Bank Select, Program Change, RPN/NRPN, and Data Entry are preserved but treated as review-only and routed conceptually to MIDI Patch review instead of generic editing. The panel now names the data as pattern-owned and shared by clips that use the same pattern.
- MIDI Expression rows now include compact shape previews for editable CC, pitch bend, and pressure-style lanes, so the user can recognize the contour of imported or recorded controller data before full drawable automation lanes exist.
- First-pass MIDI Patch callout shows selected-pattern Bank Select, Program Change, RPN/NRPN, Data Entry, and channel-mode setup rows, including channel/tick details and review status, without silently applying those rows to instruments or hardware.
- RPN/NRPN setup review now reports selector rows explicitly, for example selected pitch-bend range awaiting Data Entry, flags Data Entry that appears without an active selector, and exposes structured setup-controller groups for future UI/editor work.
- Arrangement lane signal menus now route both MIDI Routing and Hardware Profile actions into the same lane MIDI panel, so hardware profile selection is reachable instead of hidden behind a disabled placeholder.
- Lane MIDI Routing panels now include an explicit hardware test note that queues a note-on/note-off pair to the lane's chosen hardware route and channel without mutating the project. Those queue attempts are written to the recent hardware log.
- Lane MIDI Routing panels can create and immediately attach a hardware profile from the lane's current output/channel/route state. This creates identity only; it does not send bank/program/SysEx recall.
- Backend helpers can attach or detach SysEx snapshots to hardware profiles, creating a profile recall checklist without sending any hardware data.
- The SysEx Vault now has a first-pass attachment workflow: choose a stored SysEx snapshot, choose a hardware profile, attach or detach the snapshot as profile recall metadata, and refresh the checklist without sending bytes.
- The SysEx Vault now includes a visible "NO AUTOSEND" guardrail, wider snapshot/profile selectors, and clearer copy explaining that attach/detach is bookkeeping only; actual SysEx transmission still needs a separate confirmed send workflow.
- The SysEx Vault now includes first-pass snapshot review/edit controls: visible selected-row feedback, snapshot renaming, notes editing, and exact send-delay editing. Saving a snapshot updates the stored project model without sending hardware data.
- Incoming live MIDI note-offs now carry sample-positioned release timing to active voices, matching the existing sample-positioned note-on path and improving short-note/live-performance feel inside an audio block.
- MIDI count-in recording now stamps the exact in-block sample where recording becomes active, ignores pre-downbeat MIDI events in that same block, and records post-downbeat events relative to the true count-in finish instead of stale pre-count-in step state.
- Incoming live MIDI expression messages that affect internal performance state, including pitch bend, channel pressure, poly aftertouch, mod wheel, channel volume/expression/pan, sustain pedal, and reset-all-controllers, are queued to their
MidiBuffersample position and applied inside the per-sample render loop instead of being applied early to the entire audio block. - Incoming live MIDI All Notes Off now releases matching channel voices at the message's
MidiBuffersample position instead of at the beginning of the audio block, and is kept out of the generic expression queue. - First-pass MIDI Sync callout shows observed incoming Clock, Start, Continue, Stop, Song Position Pointer, Song Select, MTC, MMC, and Active Sense counts, plus the last observed sync/status label. It now also previews outbound hardware sync/transport intent for hardware profiles configured to send MIDI Clock or playback transport, including a compact sync-policy snapshot, per-profile sync role rows, and the first planned outbound messages. The policy snapshot and rows are backed by a reusable
MidiSyncPolicySummaryserialized through MIDI Health instead of editor-only field counting. The summary distinguishes clock-ready chase, MTC-ready chase, and MMC-ready chase: Start/Continue/Stop/SPP chase requires a receive-clock policy, an input device, and clock response; SPP readiness is counted separately; Song Select is observed and reported only; MTC position chase requires an input device,chaseIncomingTransport, andrespondsToMtc; MMC Play/Deferred Play/Stop/Pause chase requires an input device,chaseIncomingTransport, andrespondsToMmc. Smoothed 24 PPQN MIDI Clock tempo-following is implemented for receive-clock-ready profiles when Host Sync is off, with locked-BPM/applied/ignored diagnostics. The panel includes safe shortcuts to Hardware Profiles and MIDI Out preflight, but those shortcuts only navigate to setup surfaces. - Hardware transport stop plans now honor the profile's panic-on-stop flag by appending channel-scoped All Sound Off, Reset All Controllers, and All Notes Off messages after MIDI Stop.
- MIDI Health latency wording now distinguishes low internal block time/sample-positioned incoming notes from additional driver/interface/controller/hardware latency, and serializes the live-note path as structured data for future support panels.
- Hardware MIDI profiles can now remember accepted timing calibration records, and profile summaries expose saved compensation, jitter, confidence labels, and warnings. Loading a calibrated profile remains read-only; applying a compensation value will need an explicit user action in the future calibration workflow.
- Project-level MIDI protocol coverage report that distinguishes implemented, backend-ready/UI-pending, guarded, and future MIDI families without pretending UI work is complete.
- MIDI protocol coverage now includes routing, devices, and preflight as its own backend-ready family.
- MIDI Protocol coverage UI now shows backend-family and customer-facing-family percentages separately, plus per-family safety notes, so "backend can preserve/guard it" is not confused with "the musician-facing workflow is finished."
- MIDI Protocol coverage UI now includes a compact next-actions strip derived from backend-ready/customer-facing-pending families, so the panel explains the next work instead of acting as a static scorecard.
- MIDI Protocol coverage items now expose explicit
nextActionandblocksProductReadyfields, and the report summarizes how many MIDI families still block an honest MIDI 1.0 release-ready claim. - MIDI Protocol coverage now separates the current MIDI 1.0 finish line from deferred MPE/MIDI 2.0 roadmap work, and its active blocker categories are model-owned structured data with affected families and next actions.
- Live MIDI Learn capture and learned control mappings are handled before armed-lane musical channel filtering, so global controller assignments are not accidentally blocked by the currently armed lane.
- Incoming global sync/status messages are recognized before lane filtering and kept out of note recording, pad triggering, and controller-expression recording until explicit chase behavior is designed.
- Incoming Clock, Start, Continue, Stop, Song Position Pointer, Song Select, MTC, MMC, and Active Sense messages are now counted into a backend MIDI Health sync-runtime summary, so future UI can explain which external sync/status signals are actually arriving before SpaceAge offers chase behavior.
- Bank Select MSB, Bank Select LSB, and Program Change now use a shared setup-event ordering policy when expression lists are sorted or restored from project state, so same-tick patch setup data travels in hardware-safe order instead of accidentally sending Program Change first.
- Live Bank Select and Program Change messages are preserved/recorded where appropriate, but they do not fall through into generic performance-CC behavior or silently mutate internal presets.
- RPN, NRPN, Data Entry, Data Increment/Decrement, Local Control, Omni, Mono, and Poly mode controller messages are now classified explicitly. RPN/NRPN setup data can be preserved in ordered setup payloads, while Local Control, Omni, Mono, Poly, reset, and off-style setup messages are review-only and kept out of MIDI Learn so a user cannot accidentally map a destructive hardware/setup command as if it were a normal knob.
- Live setup/channel-mode controllers are now guarded out of pad triggering and the legacy performance-cutoff CC path after any recording/preservation chance, so RPN/NRPN, Data Entry, Local Control, Omni, Mono, and Poly messages cannot accidentally behave like musical note or filter gestures.
- Channel Pressure and Poly Aftertouch are selectable internal synth modulation sources in MOD / CHOKE routes, alongside Velocity, Random, and LFO. The runtime evaluates them from the active voice's MIDI channel/note, and saved route data is clamped before storage.
- MIDI EXPR selected points now support lane-local selection and cut/copy/paste.
Ctrl+Aselects every editable point in the current expression lane,Ctrl+Ccopies selected expression points when a point selection exists,Ctrl+Xcopies before deleting,Ctrl+Vpastes the copied gesture at the playhead in the same lane, and paste refuses same-lane same-tick collisions before mutating the pattern. The visibleCOPY REPORTbutton remains the diagnostics path.
Partially Implemented
MIDI Learn now has backend target discovery, arming, live capture, persistence, parameter application, diagnostics, UI-ready assignment summaries, a UI-ready mapping dashboard, source-replacement cleanup, target-replacement cleanup, soft-takeover pickup, first-pass direct control-click learn for APVTS-backed sliders plus many supported dropdowns/toggles, and a first-pass MIDI Maps browser/editor in Settings with target visibility, target-group filtering, target search, manual target picking, learn/cancel/refresh, auto-refresh after capture, enable/disable, invert, pickup, exact low/high endpoint editing, response-range narrow/widen, 7-bit/14-bit/auto resolution choices, exact-duplicate repair, and delete actions. Enabled/disabled, inverted, pickup, exact-range, scaled-range, and resolution-mode mappings are respected during runtime application. Direct learn can now replace mappings for the selected visible target, and source-conflict confirmation exposes REPLACE, MACRO, and CANCEL choices before committing the new mapping. It still needs complete direct-control coverage, richer curve editing, broader conflict browsing, richer high-resolution diagnostics/meters, and broader real-hardware validation.
Program/bank data is preserved, ordered safely, planned, summarized into readable patch/setup rows, and visible in a first-pass selected-pattern MIDI Patch inspector. External hardware recipe creation and loaded-SoundFont preset mapping now have guarded first-pass actions; a fuller guided mapping workflow and internal preset mapping are still pending.
Pressure data is preserved, classified, sample-positioned into live runtime state, learnable, exportable, and now exposed as a first-pass internal synth modulation source for pitch/filter routes. The compact MIDI AUTO surface can already inspect/author pressure data; it still needs Piano Roll-grade lanes, smoothing/curve controls, and polished controller-profile defaults.
SysEx can be saved, imported into quarantine, summarized with manufacturer/model identity, archive intent, confirmation labels, short hex previews, conservative send-delay guidance, renamed, annotated, given exact send-delay values, edited for manufacturer/model metadata, marked for project-archive inclusion, marked as requiring send confirmation, removed through a confirmation-gated action, attached/detached from hardware profiles as recall metadata, queued only through an explicit confirmed hardware recall action, summarized after recall attempts with queued/failed counts, byte totals, delay totals, latest target, monitored with first-pass SpaceAge queue progress, and described with restore verification receipt states. A first-pass Vault librarian workflow exists, but device-specific ACK/NAK parsing, checksum/device-id helpers, and deep bulk-dump tooling are not finished yet.
Transport/sync messages are recognized, plan-previewed, incoming global sync/status messages are safely isolated from musical input, Start/Continue/Stop/SPP plus MIDI Clock can be emitted for safe hardware profiles, incoming sync/status is counted for Health and MIDI Sync diagnostics, guarded incoming Start/Continue/Stop/SPP chase can drive transport for clock-chase-ready hardware profiles, guarded MTC full-frame / assembled quarter-frame chase can position transport for MTC-ready hardware profiles, guarded MMC Play/Deferred Play/Stop/Pause chase can drive transport for MMC-ready hardware profiles, and smoothed incoming MIDI Clock tempo-following can update internal tempo for receive-clock-ready profiles when Host Sync is off. The MIDI Sync callout now shows outbound hardware sync intent, per-profile roles from the reusable
MidiSyncPolicySummary, clock-follow diagnostics, MTC chase diagnostics, and MMC chase diagnostics. Hardware Passports now expose first-pass sync-role editing; fine-grained MTC offsets, MMC record/locate options, and deeper clock diagnostics remain pending.External output readiness and runtime state are reportable through the processor and visible in a first-pass MIDI Out callout, but the polished "Hardware Output Preflight" setup/send workflow is not finished yet.
Device inventory is backend-ready, but the friendly "Reconnect or replace this missing controller/synth" workflow is not built yet.
MIDI input readiness is backend-ready and visible in first-pass Settings preflight plus a focused read-only MIDI Input callout, but the customer-facing "where is my controller going?" guided setup panel is not finished yet.
MIDI Input reports now separate saved physical-input selection from host MIDI and direct standalone hardware input. SpaceAge still accepts host/device MIDI through the normal source-agnostic plugin
MidiBuffer, but a first-pass processor-owned external input router now opens lane-referenced physical input devices directly in standalone-style operation, preserves source-device ids, and drains them through the same armed-lane/channel/recording path.MIDI repair recommendations now include structured action metadata (
actionKind, target id, and lane index), and MIDI Health plus the focused MIDI Input/MIDI Out panels use that metadata for first-pass guided repair buttons. MIDI Health now separates observedSYNC INfrom configuredSYNC POLICY, so incoming clock/status evidence and outbound/chase intent are not conflated.Expression payloads play/export, can be summarized into UI-ready lanes, have backend-safe transform operations, and now have a first-pass selected-pattern inspector/editor in Settings for timing quantize, value nudging, thinning, deletion, compact shape preview, selectable ramps, playhead points, selected-point cut/copy/paste, and step-snapped scope drawing of editable performance lanes. Fast scope drags now interpolate through skipped step-grid points, so continuous lanes draw filled ramps and switch lanes paint solid blocks instead of sparse mouse-event dots. The selected-scope graph is now a larger focused edit surface with small value-range and visible-step-span cues, and it can erase the selected lane across snapped mouse steps with right-drag, giving the compact editor a local edit/remove gesture before the final point-handle UI exists. Draw/erase gesture receipts now survive lane refresh instead of immediately collapsing back to a generic lane summary. Setup data stays visible under the guarded MIDI PATCH policy: standard RPN cards can queue after confirmation, NRPN cards require a queue-safe Hardware Passport definition, and protected channel-mode/reset rows remain copy-only. The expression editor plan now serializes the final lane-type checklist for CC curves, switch blocks, pitch bend, bipolar controls, poly-aftertouch, and channel pressure. The remaining product work is a Piano Roll-grade expression lane workflow with larger handles, curve/smoothing controls, destination bend policy, note-row ownership where needed, and clip/lane-local ownership.
MIDI import can inspect, plan safely, summarize user-facing choices, build review-dashboard sections, show a SpaceAge-styled preflight review panel, show an action preview, create a dry-run preview, build recommended/selected-pattern/inspect-only commit requests, enter a processor-level commit boundary, produce an apply-result receipt, convert notes, preserve safe timeline expression payloads, quarantine SysEx, report selected-pattern import through the receipt model, expose explicit safety toggles, and perform first-pass channel-to-lane import for melodic/instrument channels and General MIDI channel 10 drum material.
The current Import Wizard Preview is truthful but still first-pass: it can commit selected-pattern import, safe melodic/instrument channel splitting, and long-form GM drum lane splitting with backend-ready paged channel destination options, visible safety toggles, compact per-channel destination controls, quick recipes (
SAFE REVIEW,NOTES ONLY,MELODIC,DRUMS), live destination labels that follow current slot/channel choices, and styled receipts for selected-pattern, split-channel, and inspect-only paths, while deeper setup-data conversion remains guarded.Tempo, meter, key, and timing-format metadata are visible in import review and guarded by warnings. First source tempo/key can now be adopted deliberately through the processor import path; full reviewed tempo/meter/key map rows are carried in import receipts; source meter and full tempo/key maps remain review-only until SpaceAge has a full project timeline-map adoption editor.
MIDI export can preflight pattern/clip/arrangement scope, lane channels, route targets, clip counts, pattern counts, expression counts, job-plan rows, and lane/stem package shape. The backend can write and inspect a multi-file Arrangement MIDI stem package, the Arrangement MIDI preview exposes a user-facing choice between one reviewed MIDI file and a lane-stem package, package folders avoid stale-name collisions, export actions show staged preparing/writing/complete status feedback, and exported packages now include a richer
manifest.json, human-readableREADME.txt,CHECKSUMS.txt, and package validation path. Remaining work is true long-export progress bars, package/zip polish, visible import/repair UI, and real-project validation.Hardware MIDI output has a stronger router foundation. Live hardware note/clock traffic, immediate recall/transport traffic, and delayed recall/test-note traffic now use separate drain paths so a delayed test note or paced recall step cannot sleep the live MIDI output thread. Output device slots carry generation tags, queued messages are refused if the port was closed/reopened after they were queued, Panic clears both SpaceAge-side queues and JUCE scheduled output messages, and Panic sends reset messages to every open hardware output port.
Not Done Yet
- Full MIDI Import Wizard polish with complete editable per-channel mapping and richer setup/SysEx workflows. A first-pass safe channel-to-lane commit UI exists for melodic/instrument rows and GM channel 10 drum rows; melodic rows expose compact paged Instrument Slot plus playback/export MIDI Channel controls, drum rows expose the long-form drum-lane destination, import safety choices are visible toggles, and recipe buttons provide fast safe defaults.
- Full customer-facing controls for choosing how drum imports should land: classic Drum Composer grid, long-form drum lane, or melodic MIDI note lane. The backend now has the long-form drum lane path for GM channel 10 material.
- Full Hardware Passport editor and final SysEx Vault UI with richer restore verification history, device-specific ACK/NAK parsing, checksum/device-id tools, batch actions, and send-log controls.
- Dedicated live input-device manager polish. A first-pass external input router now opens lane-referenced physical input devices and preserves source ids when draining direct device traffic into the processor. The lane input-device picker, open-input/dropped-message diagnostics, and duplicate host/direct activity warning exist as first-pass surfaces. Remaining work is a deliberate host-vs-direct preference/de-dupe policy and broader real-controller validation.
- Polished external Sync page for MTC offsets, MMC record/locate options, and deeper diagnostics beyond the current first-pass Hardware Passport sync-role editor.
- MIDI Learn UI for complete direct control-click coverage, remapping/replacing, conflict repair, richer high-resolution details, and richer curve editing beyond the current MIDI Maps editor.
- Full MIDI Dashboard UI beyond the current read-only Settings callout.
- Full controller assignment editor with remap, deeper curve editing, richer high-resolution pair diagnostics/meters, broader conflict browsing, and richer target filtering.
- Full Piano Roll-grade CC, pitch-bend, and aftertouch/pressure expression lanes. The MIDI AUTO surface can already preview, transform, draw selected-scope pattern-owned performance lanes in a larger focused graph, right-drag erase snapped selected-lane graph steps, select all/lasso/move/value-nudge/cut/copy/paste points in one lane, show internal/RPN pitch-bend range, and expose a per-lane closeout checklist. The remaining work is the final full-size editable lane surface with larger point/block handles, curve/smoothing handles, destination bend policy, and an explicit future clip-local overlay model if arrangement-specific expression becomes necessary.
- Program/bank mapping dialog.
- Future true MPE lane/device policy, including explicit zones, master/member channels, bend-range ownership, per-note pitch/timbre/pressure routing, MPE-aware synth/hardware response, and import/export validation. Current MPE-like data is preserved as MIDI 1.0 expression and reported through MIDI Health.
- MIDI 2.0 profile/property exchange support.
- Polished hardware setup assistant for MIDI guitar, wind controllers, drum pads, and external synth modules. First-pass scenarios, templates, hookup checklists, safe test-note plans, draft apply, rollback, and report copy exist; the remaining work is fuller profile creation, role selection, lane-stack/channel templates, timing/test receipts, and device-specific setup flows.
- Round-trip tests against a broad library of real-world MIDI files.
- Project-level full tempo-map, meter-map, and key-map adoption workflow for imported Standard MIDI Files. First source tempo/key adoption is already implemented as the safe partial step.
Current Protocol Gaps From Audit
- Hardware input device IDs now have a first-pass direct-device path. Lane-referenced physical input devices can be opened directly, and their source ids are preserved through the existing armed-lane source filter. Host MIDI still arrives through a source-agnostic
MidiBuffer; the UI can now report host/direct activity side by side, while true duplicate-input prevention remains a future explicit policy. - RPN/NRPN support is strong as review/setup-card data, and standard RPN 0,0 Pitch Bend Range now has a narrow runtime bridge into internal bend playback when absolute Data Entry MSB/LSB arrives. Remaining work is full musician-facing bend-range policy, relative Data Increment/Decrement semantics, grouped editing/sending, and device-specific NRPN runtime mappings through Hardware Passports.
- Channel-mode controller support is deliberately conservative. Local Control, Omni, Mono, Poly, All Notes Off, All Sound Off, and Reset All Controllers are classified, counted separately as protected setup-only messages, and guarded out of ordinary learn/performance paths; they are not yet a musician-facing editable setup lane or automatic live hardware behavior.
- Bank Select and Program Change are preserved and available for guarded mapping/recall, but live patch-change messages do not silently mutate internal presets or automatically pass through an armed external lane. MIDI Output Preflight now exposes that live setup-message policy; the remaining work is a deeper explicit live-send/editor workflow if we decide power users need it.
- Clock/SPP/MTC/MMC support is intentionally asymmetric. SpaceAge can emit Start/Continue/Stop, optional SPP, and MIDI Clock for safe profiles, while MTC and MMC remain incoming chase/review surfaces. MMC Locate/Record and outgoing MTC are not current MIDI 1.0 launch scope.
- Standard MIDI File tempo/meter/key support still favors first-tempo import plus review receipts over full conductor-track adoption. Full tempo-map, meter-map, and key-map mutation remains a separate timeline-map editor problem.
- SpaceAge-authored Piano Roll notes now preserve release velocity through record/import/save/load/export. They still need a user-facing release-velocity lane or inspector so musicians can intentionally edit that value instead of only preserving what came from imported MIDI or a controller performance.
- SysEx is stored safely, can be renamed/reviewed, can carry manufacturer/model/notes metadata, can carry exact send-delay values, can opt in/out of project archive packaging, can require confirmation, can be removed only through a guarded action, can be attached to hardware profiles, can be queued only through confirmed recall paths with conservative send-delay throttling, and now has session-level recall queue summaries, first-pass pending queue progress, one-dump live capture, visible restore-response receipts, and a model-owned librarian readiness plan. It still needs checksum/device-id helpers, batch librarian tools, and richer device-aware restore history for long hardware dumps.
- Pitch bend and controller data are musically active. Channel pressure and poly aftertouch are now sample-positioned into live runtime state, preserved, exported, transformed, learnable, and available as direct internal synth modulation sources; Piano Roll-grade expression editing and richer response curves remain pending.
- Program Change and Bank Select are preserved, restored in safe setup order, summarized, and blocked from generic live performance-CC mapping. MIDI PATCH now has a first-pass explicit
MAP SF2action that maps a selected Program/Bank row to the current Arranger lane's loaded SoundFont preset through a reusable backend helper. Internal non-SoundFont preset mapping remains future work, and no import path silently mutates presets. - MIDI PATCH now has a selected-row hardware-profile recipe workflow in addition to bulk eligible-row saving. The row selection is visible and guarded: bank-only/review-only rows stay preserved but cannot be saved as recall recipes until a Program Change exists. A selected row can also be saved and attached to the current Arranger lane target, still without transmitting hardware recall messages. A selected Program/Bank row can also be deliberately mapped to a loaded SoundFont on the current lane. The panel includes a direct MIDI OUT preflight shortcut for the next setup step after lane attachment.
- RPN/NRPN data is now named, sorted, and summarized into readable import-review rows that show selector state, pair selector traffic with Data Entry/Increment/Decrement messages, warn when Data Entry has no active selector, and model those groups as reusable backend summaries. Hardware Passports can carry guarded setup-card receipts in notes, profile summaries now expose receipt counts, a notes preview, and compact receipt labels such as
CH 04 Pitch Bend Range, and MIDI PATCH can attach a selected setup-card receipt to the current lane's existing Hardware Passport without sending MIDI. A full musician-facing editor for editing/sending those grouped parameters is still pending. - Transport, clock, SPP, Song Select, MTC, MMC, and Active Sense are inspectable, plan-previewed, counted when received, and guarded out of the musical input path. Start/Continue/Stop/SPP and outgoing MIDI Clock can now be emitted for safe profiles, incoming MIDI Clock can tempo-follow when explicitly configured, Song Select remains observe/report-only, MTC full-frame / assembled quarter-frame messages can position chase when explicitly configured, and MMC Play/Deferred Play/Stop/Pause can chase when explicitly configured. Hardware Passports now expose first-pass sync-role editing; fine-grained MTC offset/source controls, MMC record/locate options, and the final polished customer-facing Sync page remain pending.
- Expression payloads are owner-aware: Shared PTN follows linked clips, Clip Local isolates one arrangement clip, and Lane Local follows the lane. Effective playback/export layering is Shared PTN, then Lane, then Clip. Remaining work is hands-on owner-isolation/layering and cross-doorway evidence, plus future non-MIDI Motion Clip/general automation architecture.
2026-07-05 Scorecard Clarification
SpaceAge is now tracking two different MIDI percentages on purpose:
- Backend foundation: protocol recognition, routing, preservation, timing, safety gates, and reportable model state. This remains about 98-99% for MIDI 1.0 foundation work.
- MIDI 1.0 release readiness: the customer-facing finish line, including visible editors, import/export polish, progress feedback, hardware setup guidance, reliable receipts, documentation, and real-device validation. This sits lower and should be read from the live coverage panel/report because it measures the whole musician workflow, not just protocol plumbing.
The shift from a previous "99%" statement to a lower release-readiness score is therefore a language correction, not a regression. The old wording blended backend completion with product readiness. The current wording keeps those promises separate.
Current audit conclusions:
- MIDI Learn remains visible as release-readiness work, but it may be demoted from blocker to polish once direct-control coverage and high-resolution details are reviewed against the rest of the launch surface.
- Hardware bend/pressure should be described precisely: internal bend and pressure handling exist; the unfinished work is hardware bend-range trust, Hardware Passport policy, and guided verification.
- Full tempo/meter/key map adoption must wait for a true project timeline-map model. First tempo/key adoption is safe; full conductor-track mutation is still review-only.
- Source-aware MIDI Clock/MMC chase now has case-insensitive Hardware Passport source matching and wrong-source regression coverage.
Definition Of Done For MIDI 1.0
SpaceAge can honestly call its MIDI 1.0 support release-ready when:
- The user can import a MIDI file and see a clear preflight explanation before anything changes.
- Multi-channel imports can become lanes with editable default choices.
- Channel 10 drum material can be routed into an appropriate drum workflow.
- Expression data can be preserved during recording/import, heard, exported, and edited.
- Program/bank data can be intentionally preserved, ignored, or mapped to hardware/SoundFont choices.
- SysEx can be stored, named, attached to Hardware Passports, and sent only through explicit confirmation.
- External Hardware Passports can be created, validated, recalled, and attached to lanes without hidden side effects.
- Hardware timing can be inspected, manually calibrated per Hardware Passport, assisted with a safe loopback pulse train, and accepted from returned-pulse measurements in the MIDI TIMING panel. Remaining polish is device-aware diagnostics, recalibrate/apply UX, and clearer jitter/driver guidance.
- Panic/reset works predictably for internal instruments and external devices.
- The user can understand at a glance which lane receives MIDI input, which channel it listens to, which channel it plays/exports on, and where the output goes.
Product Principle
MIDI power should feel guided, not dumped on the user. SpaceAge should expose the musical intent first, the protocol detail second, and dangerous hardware actions only after confirmation.
2026-07-12 - Direct Input Timing Correction
Status: improved and compile-verified.
Direct physical MIDI now separates monitor timing from record timing. Non-sync direct notes/controllers still enter live playback at the earliest available audio-block sample, but MIDI recording and automation placement use the measured timingSamplePosition from the direct-input queue. This preserves low-latency feel while improving captured timing accuracy.
This does not remove hardware/driver/audio-buffer latency. It removes one avoidable SpaceAge-side timing flattening issue.
2026-07-12 - Automation Visibility Update
- Arrangement Canvas now exposes AUTO LANES directly in the main control row.
- Existing deep editor remains the canonical surface for CC, pitch bend, pressure, sustain, RPN/NRPN-related performance curves, copy/paste, quantize, and shared-pattern warnings.
- Remaining polish: user QA of the new doorway, possible later inline automation-lane display, and final real-hardware verification of recorded automation against MIDI 1.0 devices.
2026-07-12 - Automation Visibility Status
- Arrangement AUTO LANES now have two discoverability layers: lane badge at the lane header and clip badge inside clips with effective MIDI expression data.
- This keeps automation visible in the composition surface without forcing users to open the AUTO LANES editor just to discover that CC/bend/pressure/sustain data exists.
- Remaining MIDI UX closeout: continue hardening automation editing visibility, live monitoring/recording latency, and real-device SysEx/RPN/NRPN verification.
2026-07-12 - AUTO LANES Doorway Status
- Arrangement clips with MIDI automation are now discoverable and directly openable from the clip itself.
- This reduces the customer-facing MIDI gap between stored automation data and visible musical workflow: the user can see it, hover it, click it, and land in the editor that owns it.
- Remaining MIDI 1.0 closeout still needs real-world controller/hardware QA, live monitoring latency validation, and final SysEx/RPN/NRPN verification receipts.
2026-07-12 - Timing Closeout: Direct Input Split Covered
- Backend status: direct hardware MIDI now has regression coverage for the latency-sensitive split between early live monitoring and accurate recording placement.
- This supports the live-performance goal: physical MIDI input should feel immediate without smearing recorded clips earlier than the human actually played.
2026-07-12 - Live MIDI Lag Audit Status
- Backend status: improved. Direct physical MIDI now has two same-block pickup points: one before sequencer processing and one immediately before voice rendering.
- This reduces avoidable SpaceAge-side waiting in heavier Arrangement blocks without changing recorded timing, automation capture, host/plugin MIDI offsets, or external sync timing.
- Remaining validation: hands-on controller testing at low buffer sizes, direct-only vs host-only comparison, and MIDI Health queue-age observation on the user's actual interface/controller path.
2026-07-12 late live MIDI timing correction: The direct-input latency fix was narrowed after audit. The normal drain still handles the complete MIDI stream before sequencer processing. The last-chance drain before voice rendering is now performance-only and preserves FIFO order by refusing to consume front-of-queue sync, transport, SysEx, setup, or program/bank messages. This reduces note/expression lag without moving timeline-sensitive messages onto the wrong side of the sequencer decision point. Compile verification passed for SampleSquadAudioTest.
2026-07-12 - Learned CC Latency Closeout
- Generic MIDI CC messages now share the same low-latency live route as notes, pitch bend, pressure, mod wheel, volume, pan, expression, and sustain.
- Setup-sensitive controllers remain protected by the classifier: Bank Select, Data Entry, RPN/NRPN, Local Control, Omni, Mono/Poly, transport, clock, and SysEx are not pulled into the last-chance performance drain.
2026-07-12 - Late Drain Status Chatter
The late direct-MIDI drain now separates �performance/audio-latency critical� from �harmless queue blocker.� MIDI Clock and Active Sense are allowed through the late drain to prevent them from delaying following live notes. They are not recorded as performance-expression lanes and do not change the setup-message policy.
Current expected behavior: live notes and expression remain same-block candidates; clock/active-sense chatter can clear out of the way; transport, SysEx, patch/setup, RPN/NRPN, and channel-mode messages stay ordered through the normal path.
2026-07-12 16:57 direct physical input fallback pass: ExternalMidiInputRouter now tracks open input count and efreshExternalMidiInputDevices() falls back to all visible JUCE MIDI inputs when no lane references a specific device. AUTO source policy can now suppress host duplicates after direct traffic is observed while preserving explicit Host Only / Direct Only / Host + Direct modes.
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 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-13 00:29 - Timing Status Update
- Arrangement clip-local recording helper coverage: passing.
- Repeated/source-offset recording helper coverage: passing.
- Real processBlock Arrangement playhead recording coverage: passing.
- Known remaining MIDI risk: external hardware latency can still differ by device path, especially DIN through mioXL vs USB. The backend now has stronger placement tests, but live hardware should still expose per-device calibration and health readouts.
2026-07-13 00:38 - AUTO Input Source Policy Tightened
- AUTO mode now treats a lane-selected direct MIDI input as authoritative after that device is seen recently.
- This is stricter than duplicate-note filtering: host/plugin musical messages are suppressed while the selected direct device is active, even if the host message is a different note.
- Remaining user-facing need: make the MIDI Hardware / Health page explain this behavior plainly, so users understand why host input may be ignored when a direct physical input is selected.
2026-07-13 01:05 - Arrangement Record Button Plan
- Added
docs/Arrangement_Record_Button_Plan.mdas the implementation plan for a visible Arrangement-page Record button. - The planned button is a doorway into the existing lane-owned recording backend: selected/armed lane first, clip-local recording when inside a clip, new lane-owned clip creation when in empty lane space.
- No new hidden pattern fallback should be introduced. The Arrangement page should record in context, with Piano Roll remaining the detailed editor.
- Tightened the AUTO input source policy note so the UI can explain that a lane-selected direct MIDI input suppresses source-agnostic host musical input while that direct device is active.
2026-07-13 01:02 - Arrangement Record Button
Arrangement REC is now wired to the existing lane-owned recording path. Recording still requires a valid lane target, but the button can auto-arm the selected Arrangement lane when no explicit arm exists. Focused timing/source regression passed.
2026-07-13 03:20 - Arrangement AUTO LANES Access
Arrangement AUTO LANES now reports its target context directly in the button label/tooltip. Backend timing/source-policy tests remain green.
2026-07-13 04:05 - Arrangement REC Target Truth
The Arrangement REC button now mirrors the same lane-target contract as the backend. It uses the armed lane when one exists, otherwise the selected Arranger lane, and its tooltip explains where incoming MIDI will land before the user records. Compile verification and focused MIDI record-timing regressions passed.
2026-07-13 03:43 - Customer-facing MIDI recording visibility
- Added canvas-level recording/count-in state so the Arrangement lane itself reports when it is the REC TARGET or COUNT-IN TARGET, instead of only saying MIDI IN.
- This improves the one-lane-at-a-time recording contract without adding another top inspector.
2026-07-13 03:50 - AUTO LANES user-facing access
- Improved Arrangement lane AUTO badge discoverability without adding a top-level inspector. AUTO LANES remains PTN-owned for now; users should use VARIANT before editing automation that should not affect linked clips.
- MIDI backend remains high-90s; visible automation lanes are now discoverable, but full clip-local/lane-wide automation remains future architecture.
2026-07-13 - AUTO LANES Ownership UI Status
The AUTO LANES editor keeps the current PTN-owned automation model. This pass strengthened user-facing clarity only: shared PTNs now display a prominent locked/acknowledged ownership strip, while VARIANT remains the independence path and ACK SHARED remains the deliberate linked-edit path.
2026-07-13 - Arrangement REC Button State Status
- Arrangement REC is now stateful: ARM LANE / REC / COUNT / REC IN.
- Button state is derived from the same armed-lane-or-selected-lane target contract as the recording backend.
- Verification: Release compile passed; focused MIDI record timing/source/receipt self-test passed.
- Remaining MIDI 1.0 closeout risk is not this button path; it is final real-device validation, visible automation-lane editing polish, and hardware setup/restore QA.
2026-07-13 - Expression Receipt Status
- Backend: expression recording now leaves a concrete latest-capture receipt parallel to piano-note and drum-step receipts.
- UI: recording status can report the most recent automation event as user-readable capture evidence.
- Test coverage: focused MIDI timing suite now checks the expression receipt path for controller number, value, and tick.
2026-07-13 - Recording Stability Status
- Arrangement recording length is now derived from current clip state first, then playback snapshot fallback. This closes a race where processBlock recording could capture the note correctly but keep an older pattern length.
- MIDI/SysEx queue shutdown is now explicitly notified before thread stop, reducing shutdown flake risk under MIDI activity.
2026-07-13 MIDI Health cockpit row pass: the Settings MIDI Health panel now surfaces backend-owned COCKPIT and DO NEXT rows before the long diagnostics. The compact rows are sourced from MidiProjectHealthSummary, not rebuilt in editor code. Build/self-test passed and the MIDI timing-only regression passed all six checks.
2026-07-13 AUTO LANES visibility row pass: MIDI Health now shows AUTO VISIBLE and AUTO DOOR rows sourced from MidiExpressionProjectSummary, giving the user a visible answer for where automation lives and how to open it. No ownership model changed; AUTO LANES remain shared PTN MIDI performance automation. Build/self-test passed and MIDI timing-only regression passed all six checks.
2026-07-13 AUTO LANES regression lock: visible automation-doorway language is now protected in expression reports, MIDI Health reports, MIDI Next Steps, and structured health payloads. Build/self-test passed; focused MIDI timing regression passed 6/6.
2026-07-13 QA receipt cockpit: added a structured qaReceiptCockpitSummary, a visible MIDI Health QA COCKPIT row, and regression checks proving the active QA receipt state remains visible and exportable. Build/self-test passed; focused MIDI record timing regression passed 6/6.
2026-07-13 AUTO LANES doorway cockpit: added
automationDoorwaySummary, surfaced it asAUTO PATHin MIDI Health, exported it in structured expression diagnostics, and protected it with regression tests. Build/self-test passed; focused MIDI record timing regression passed 6/6.2026-07-13 AUTO LANES QA row: MIDI Health now displays
AUTO QAfromhandsOnQaScriptSummary(), making the automation validation ritual visible in the app. No ownership model changed. Build/self-test passed; focused MIDI record timing regression passed 6/6.2026-07-13 MIDI Next Steps AUTO QA parity: copied MIDI Next Steps now include the AUTO LANES doorway summary and hands-on QA script, matching the visible MIDI Health cockpit. Build/self-test passed; focused MIDI record timing regression passed 6/6.
2026-07-13 live MIDI lag-source classifier: MIDI Health now surfaces LAG SOURCE, copied Health/Next Steps reports include the same model-owned diagnosis, and tests protect the payload/report text. This does not claim to fix external DIN/interface latency; it separates SpaceAge-visible audio-buffer/direct-queue/output-queue/SoundFont evidence from hardware/driver/controller paths. Build/self-test passed; focused MIDI record timing regression passed 6/6.
2026-07-13 - Input Source Closeout Note
- Direct MIDI diagnostics now distinguish open input ports from active musical input sources. This is important for mioXL-style rigs where many ports may be open but only one or two are actually playing into SpaceAge.
2026-07-13 14:39 - MIDI Readiness Test Door
- New focused executable mode: set SPACEAGE_MIDI_READINESS_ONLY=1 before running SampleSquadAudioTest.exe.
- Expected checks: active direct musical inputs are reported in plain text/JSON and promoted to MIDI IN READY WITH CAUTION; open-only multiple inputs remain cautionary but do not claim multiple controllers have played.
- Current focused MIDI verification: readiness-only passed, record-timing-only passed 6/6, compile/link passed.
2026-07-13 14:45 - MIDI Health Test Door
- New focused executable mode: set SPACEAGE_MIDI_HEALTH_ONLY=1 before running SampleSquadAudioTest.exe.
- Expected checks: high audio-buffer latency warning, live-lag source text, latency action lines, timing calibration action states, loopback measurement confidence/compensation, and timing preflight report sections.
- Current focused MIDI verification: readiness-only passed, health-only passed, record-timing-only passed 6/6, compile/link passed.
MIDI Settings layout proof, 2026-07-13: the MIDI Health and MIDI Hardware settings panels now have additional vertical headroom and denser diagnostic rows so readiness text is less likely to clip. Focused validation passed afterward: MIDI readiness-only, MIDI health-only, and MIDI record-timing-only all returned green. This is UI/readability polish plus regression proof, not a claim that real DIN/USB controller latency has been physically solved on the user's rig.
2026-07-13 - MIDI 1.0 Closeout: Physical Input Queue Chatter
- Status: backend remains in high-90% territory for MIDI 1.0, with remaining risk concentrated in real-rig validation rather than missing protocol plumbing.
- New coverage confirms direct physical MIDI controller chatter does not block or delay note recording in the same audio block.
- The new queue injection helpers are compiled only under SPACEAGE_AUDIO_SELF_TEST and do not ship in product builds.
2026-07-13 - MIDI 1.0 Closeout: Multi-Controller Direct Input Guard
- Status: backend remains high-90s for MIDI 1.0, with the multi-controller direct-input path now covered by a self-test regression.
- The test proves lane-pinned direct MIDI input filters by physical device ID before committing recorded notes, even when another controller sends on the same MIDI channel in the same block.
- Remaining trust still depends on real hardware QA with the user's mioXL/USB/DIN setup, but this closes one more internal source of unpredictable controller routing.
2026-07-13 - MIDI 1.0 Closeout: Direct Expression Routing
- Added regression coverage for physical-device filtering of live expression/automation recording.
- Notes and expression now share the same guarded expectation: armed lane + selected input device + selected input channel decide what is allowed into the clip.
- Verified with
SPACEAGE_MIDI_RECORD_TIMING_ONLY,SPACEAGE_MIDI_READINESS_ONLY, andSPACEAGE_MIDI_HEALTH_ONLY.
2026-07-13 - MIDI 1.0 Closeout: Setup Payload Recording
Direct hardware recording now preserves setup payloads such as Bank Select and Program Change alongside editable automation. Editable expression remains the draw/edit surface; setup payloads are captured as review-only timeline MIDI facts so hardware-oriented performances do not lose patch context.
2026-07-13 - AUTO LANES Ownership Wording
- AUTO LANES UI now warns from the Arrangement doorway that edits are shared PTN data and linked clips hear those edits until VARIANT is made.
- This closes a customer-facing ambiguity between visible Arrangement clips and the underlying PTN automation owner.
2026-07-13 - Focused MIDI Gate Status
- Current backend confidence remains high-90s for MIDI 1.0 core routing, direct recording, active-input diagnostics, and MIDI Health diagnostics.
- Latest focused gates passed after the shared-PTN wording pass: record timing, input readiness, and MIDI Health.
- The four-measure Arrangement recording regression specifically protects against notes collapsing into the first measure of a 64-step clip.
- Remaining MIDI closeout work is practical/customer-facing: real hardware validation on the user's USB and DIN-through-mioXL routes, visible automation lane interaction QA, SysEx restore proof with actual hardware, and final MIDI setup/onboarding language.
2026-07-14 00:59 - Long Drum Recording Uses Note-Backed Events Past 64 Steps
Arrangement drum-lane recording now switches to PianoNote-backed drum events when the target pattern length is greater than numSteps. This avoids the old 64-step grid limit while keeping short Drum Composer recordings compatible with the step grid.
2026-07-14 - MIDI closeout UI verification
MIDI backend remains in high-90s closeout status after focused verification. Latest pass was UI-facing: MIDI Health cockpit row spacing and readability. Focused tests passed: readiness, health, and record timing, including direct-input queue chatter, two-controller pinned input suppression, and expression recording receipts.
2026-07-14 04:23:29 - Closeout Pass
Arrangement lane command panel spacing adjusted to reduce text overlap risk in the MIDI signal command popup.
Verified no regression in MIDI readiness, MIDI health, or MIDI record timing self-tests.
Still to watch with human eyes: MIDI Hardware page bottom clipping, MIDI Health viewport height on smaller windows, and live-controller latency on DIN-through-interface hardware.
2026-07-14 04:35: Lane MIDI routing panel widened/tallened for readability; build passed; MIDI readiness, health, and record-timing focused tests passed.
2026-07-14 04:48 - Status Delta
- MIDI backend focused checks remain green after Hardware Passport UI changes.
- Hardware setup surface readability improved: wider panel, wider action buttons, and sync-help text moved away from control row.
- Remaining MIDI finish-line work: final human hardware validation, automation-lane visual QA in real projects, and continued latency checks with DIN-via-interface controllers.
2026-07-14 04:54 - Status Delta
- AUTO LANES user-facing doorway is clearer from the Arrangement page.
- Focused MIDI regression checks remain green after the wording pass.
- Remaining finish-line items: real controller/hardware timing validation, visible automation-lane QA in a working song, and final MIDI setup surfaces review.
2026-07-14 05:09:57 - MIDI backend status update
- Backend direct-input routing: tightened. Device identity is now captured at callback enqueue time and reused during audio-block drain.
- Live input timing: improved by draining once at block start and once immediately before render. This reduces the chance that late-arriving physical MIDI waits one extra audio block.
- Focused validation: passed MIDI readiness, health, and record timing self-tests after the change.
- Estimated MIDI 1.0 backend completion remains high-90s for core note/CC/pitch/pressure/RPN/NRPN/SysEx routing. Customer-facing completion is lower because automation lane visibility, MIDI editor UX, and hardware workflow polish still need testable UI passes.
2026-07-14 05:23:18 - MIDI recording backend status
- MIDI recording commit path is cleaner: audio callback handles timing, monitoring, and queueing; worker threads commit note/expression/SysEx/control data to project state.
- Backend MIDI 1.0 remains in high-90s closeout territory for core note/CC/bend/pressure/RPN/NRPN/SysEx routing. Remaining MIDI work is now concentrated in customer-facing UI proof, real hardware validation, automation-lane ergonomics, and final latency verification on actual controller/interface paths.
2026-07-14 05:34:23 - Recording queue diagnostics
- The MIDI recording worker queues now have customer-facing health semantics: overflow/drop counters are warnings, not passive telemetry.
- This improves trust during MIDI 1.0 closeout because a failed dense take should be visible in MIDI Health/Next Steps even if playback otherwise continues.
- Status remains high-90s for MIDI 1.0 backend; remaining work is mainly real hardware validation, automation-lane UI ergonomics, and final latency QA on the user's actual USB/DIN paths.
2026-07-14 05:39:00 - Recording queue counters are live
- MIDI Health now receives dropped note/drum recording and dropped expression recording counters from the runtime worker queues.
- Customer-facing impact: if dense recording, CPU pressure, or queue overflow corrupts a take, MIDI Health can warn the user directly instead of hiding the problem in passive telemetry.
- Remaining MIDI closeout: hardware validation on real USB/DIN paths, AUTO LANES hands-on QA, and final user-facing MIDI setup polish.
2026-07-14 05:45 - Arrangement recording target source
- REC now classifies the recording target from the armed Arrangement lane first, with the resolved clip used only as a fallback. This keeps drum lanes from being treated as melodic lanes when the playhead is used as the insertion/recording target.
2026-07-14 05:49 - Verification after Arrangement REC fix
- Build/self-test compile gate passed, including PluginEditor.cpp.
- MIDI record timing, readiness, and health focused gates passed afterward.
- Current MIDI 1.0 backend remains high-90s; remaining work continues to be customer-facing recording/automation clarity, hardware validation, and final setup polish.
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 - Multi-controller note ownership status
- Core note ownership is now source-aware across live masks, internal voices, and recording slots.
- Verified in Release with two controllers sending the same channel/note: either release order preserves the remaining owner, and both performances retain independent recorded timing.
- Same-controller retrigger replaces that controller's open recording slot without incrementing aggregate ownership twice.
- Focused timing, readiness, and health gates are green. Broad-suite historical failures remain and are tracked separately.
- Next backend ownership phase: sustain and channel-mode contributor policy, device retirement/generation cleanup, and stale-event invalidation.
2026-07-14 - Multi-controller sustain/reset closeout
- Source-aware note ownership now extends through sustain and MIDI 1.0 channel-mode messages.
- Verified independent CC 64 sustain, source-scoped CC 120/121/123, input/output channel remapping, stale direct generation rejection, and global panic.
- Focused Release gates passed: MIDI record timing, MIDI readiness, and MIDI health.
- MIDI 1.0 backend confidence remains high-90s. Remaining work is narrow device-lifecycle/RPN ownership hardening, exhaustive real-hardware validation, and customer-facing workflow polish rather than missing basic note/controller transport.
2026-07-14 - Direct-input lifecycle generation gate
- Proactive source retirement is implemented and covered in Release tests.
- Verified: same-note/same-channel two-controller isolation, independent sustain, controller reset to defaults for only the disconnected source, open-recording-note closure, stale queue rejection, and safe slot reuse by a newer generation.
- Focused recording timing, readiness, and health gates are green.
- MIDI 1.0 backend confidence remains high-90s. Remaining closeout is processor-owned unplug discovery independent of the editor, source-aware RPN/NRPN hardening for simultaneous hardware editors, broad real-device USB/DIN validation, and customer-facing workflow polish.
2026-07-14 - No-editor hot-plug discovery complete
- Direct physical MIDI inventory is now owned by the processor rather than an editor window.
- A single message-thread timer performs enumeration and differential port synchronization every second and on requested configuration refreshes.
- Lane route demand is snapshotted under its own lock; the timer never reads mutable Arrangement lane objects.
- Processor shutdown stops the timer before router destruction. No MIDI device work moved onto the audio callback.
- Production Standalone compilation and focused timing/readiness/health gates pass.
- MIDI 1.0 backend remains in the high-90s. The remaining backend risks are source-aware RPN/NRPN selection for simultaneous devices, cached inventory-report consolidation, and real hardware validation.
2026-07-14 - Confirmed RPN/NRPN setup-card queue closeout
- Replaced the compatibility stub with a real Hardware Passport-bound queue path for RPN and explicitly queue-safe NRPN setup cards.
- A selector, value action, and required RPN Null safety deselect are now published as one atomic batch. SpaceAge either queues every message in order or rejects the entire batch.
- Queueing requires explicit user confirmation, a valid profile and output, a matching profile MIDI channel, legal 7-bit selector/data values, and a matching queue-safe NRPN definition. Relative NRPN actions additionally require the profile's relative-data permission.
- Hardware recall receipts and logs now agree message-for-message. They report SpaceAge queue acceptance honestly and never claim that the external instrument acknowledged or applied the change.
- Setup-controller traffic is no longer counted as bank/program recall in the hardware log summary.
- Release focused gates pass: setup queue, automation restore, automation ownership, MIDI readiness, MIDI health, and MIDI recording timing.
- Remaining validation boundary: real USB and DIN hardware must confirm device-specific interpretation and audible/visible parameter changes. A SpaceAge queue receipt alone cannot prove external device state.
2026-07-15 - Live SysEx capture and realtime MIDI Learn closeout
- Implemented explicit one-shot live SysEx capture. The user arms capture, the next valid incoming F0...F7 message enters a fixed-capacity callback-safe queue, capture auto-disarms, and a worker builds the review receipt away from the audio callback.
- Invalid framing is rejected without replacing a previous valid capture. Reviewed bytes can be committed to the SysEx Vault and attached to the selected Hardware Passport; capture itself never transmits data.
- Replaced the non-functional MIDI control-mapping queue with a fixed-capacity runtime handoff. Incoming learnable CC messages no longer lock the MIDI profile store or call
setValueNotifyingHost()from the audio callback. - Host parameter notification and Learn mutation now occur on the message thread. A Learn-generation token prevents an old queued gesture from binding to a target armed after Cancel/rearm.
- RPN and NRPN selector/data traffic remains excluded from generic MIDI Learn so hardware setup messages cannot accidentally become ordinary control mappings.
- Queue processed/drop counters are exposed for diagnostics. The focused queue test completed with two processed messages and zero drops.
- Eight isolated Release contracts pass: automation restore, automation ownership, MIDI setup queue, SysEx capture, MIDI control queue, MIDI readiness, MIDI health, and MIDI recording timing.
- Remaining backend boundary: restore-response SysEx queue execution, device-specific checksum/ACK/NAK parsing, source-pinned capture for multi-device rigs, advanced high-resolution Learn/pickup confirmation, QA receipt persistence, and real USB/DIN hardware validation.
- No distributable build was produced in this pass.
2026-07-15 - SysEx restore-response verification runtime complete
- Confirmed SysEx sends now register a bounded, session-local restore attempt only after the complete message is accepted by the hardware output queue.
- Incoming standard SDS-style ACK, NAK, CANCEL, and WAIT replies are handled by a fixed-capacity worker queue. The audio callback only classifies and copies into preallocated storage; receipt construction and matching occur off the callback.
- WAIT extends the oldest pending conversation. ACK, NAK, and CANCEL finalize it. Structurally unrelated SysEx leaves the attempt pending, and an expired attempt becomes an honest timeout receipt.
- Explicit one-shot live capture has priority over restore listening. A message intentionally captured for the Vault cannot accidentally acknowledge a restore.
- MIDI Health now reports active restore attempts, verification receipts, dropped response messages, and oversized response messages from the real runtime queue.
- Nine isolated Release contracts pass, including active-attempt and post-ACK MIDI Health assertions. No distributable build was produced.
- Remaining backend boundary: source-pinned response matching in multi-device rigs, device-specific checksum and reply dialects, durable QA receipt persistence, advanced high-resolution Learn/pickup confirmation, and physical USB/DIN validation.
2026-07-15 - High-resolution MIDI Learn and pickup closeout
- Completed MIDI Learn mapping mutation, duplicate/source/target removal, conflict preview, explicit replace-or-macro confirmation, cancellation, and durable in-session capture receipts.
- Added paired 14-bit CC handling for MIDI 1.0 MSB/LSB controller families. Automatic mode accepts a coarse MSB immediately and refines it when the companion LSB arrives; required-14-bit mode waits for the complete pair; an orphan LSB never moves a target.
- Added pickup/soft takeover with live assignment status. A physical control waits until it reaches or crosses the software value, preventing parameter jumps when a project or preset opens.
- Assignment summaries now expose resolution mode, fine-CC companion, curve, inversion, pickup state, shared-source macro count, live value, and conflict warnings.
- Broad self-test assertions pass for the Learn registry/conflict workflow, high-resolution metadata, paired 14-bit runtime, and pickup. All nine focused MIDI regression gates also pass.
- The broad legacy suite still exits nonzero because of unrelated pre-existing import/export, effects, and fixture failures; those were not treated as evidence against this isolated closeout.
- Remaining backend boundary: source-pinned SysEx matching for simultaneous devices, device-specific checksum/reply dialects, durable QA receipt persistence, and physical USB/DIN verification.
- No distributable build was produced.
2026-07-15 - Source-pinned SysEx restore replies
- SysEx restore-response queue entries now preserve the originating MIDI input device ID in fixed-capacity storage before leaving the real-time path.
- A Hardware Passport-bound restore attempt records the Passport input device as its expected response source. ACK, NAK, WAIT, and CANCEL messages from another connected device cannot complete or extend that attempt.
- Multiple simultaneous restore attempts are matched by source rather than by oldest-attempt order. Profiles without a declared input remain deliberately unpinned for generic/host compatibility and should not be treated as multi-device proof.
- Focused two-device coverage proves that an unrelated source is ignored, Hardware B completes Hardware B's attempt while the older Hardware A attempt remains active, and Hardware A completes only after its own response.
- All ten isolated MIDI/Arranger gates pass after the change. Remaining closeout is source-pinned one-shot capture, device-specific reply/checksum dialects, durable QA evidence, and physical USB/DIN validation.
- No distributable build was produced.
2026-07-15 - Source-pinned one-shot SysEx capture
- One-shot live SysEx capture now derives its expected input device from the selected Hardware Passport and preserves the actual callback source through fixed-capacity queue storage.
- A structurally valid dump from another connected MIDI input is ignored without disarming capture or replacing the review receipt. Only the Passport-bound input can complete a pinned capture.
- Profiles without a declared input remain explicitly unpinned for host/generic compatibility; the readiness report now states that limitation rather than implying multi-device proof.
- Focused two-input coverage passed (
sourcePinning=1), followed by all ten focused MIDI/Arranger gates. - A capture-intention generation token also prevents bytes queued before Cancel/rearm from completing the next capture.
- Remaining backend boundary: device/manufacturer checksum and reply dialect depth, durable QA receipt persistence, and physical USB/DIN validation.
- No distributable build was produced.
2026-07-15 - Durable project-owned MIDI QA receipt ledger
- Replaced the processor compatibility stubs with a mutex-protected
MidiProtocolQaReceiptStoreowned by the project processor. - Complete PASS/FAIL/BLOCKED receipts append as immutable history. Incomplete forms remain rejected, and repeated results for one
persistentStateKeyremain separate evidence instead of overwriting earlier checks. - The ledger serializes at the project root as
midiQaReceiptStore, independently of the sequencing-inclusion option. Save/restore, second append, second round trip, and explicit clear are covered bySPACEAGE_MIDI_QA_RECEIPT_PERSISTENCE_ONLY. - Restore accepts only records that were explicitly saved and still pass the receipt model's field validation. Copied templates and unsaved forms cannot become durable evidence merely by appearing in JSON.
- All eleven focused MIDI/Arranger gates pass after the change.
- Remaining MIDI 1.0 release boundary is now evidence- and device-specific: manufacturer checksum/reply dialect depth plus hands-on USB/DIN timing, disconnect, restore, and control validation. The generic backend no longer has a QA-ledger persistence stub.
- No distributable build was produced.
2026-07-15 - MIDI Health durable QA receipt workflow
- MIDI Health now exposes one explicit SAVE QA action for the first active closeout category without saved evidence.
- The action captures PASS/FAIL/BLOCKED, evidence notes, checker identity, receipt/log references, and a BLOCKED reason when required. Timestamp, persistent key, route proof, safety class, and destination surface come from the canonical closeout model.
- Saving calls CinematicDrumsAudioProcessor::appendMidiQaReceipt() and therefore appends to project.midi.qaReceipts; it sends no MIDI, changes no routing, and touches no external hardware.
- Once every active closeout category has saved evidence, the action becomes REVIEW QA. Review exposes the append-only ledger and can copy the full evidence report.
- Receipt validation now genuinely requires receiptRefs, and ledger reports include evidence notes, checker, timestamp, references, and BLOCKED reasons rather than summary-only rows.
- The self-test target compiled successfully. All 11 focused MIDI/Arranger gates passed. The old broad all-in-one harness still reports numerous pre-existing cross-test/legacy expectation failures and remains explicit test debt; it is not being represented as a green product gate.
- Remaining customer boundary: run the new form hands-on, collect real-device evidence, and close each active category. No distributable build was produced in this pass.
2026-07-15 - Saved QA results now drive closeout status
- MIDI closeout is now evidence-driven rather than a static checklist. The latest valid saved receipt for each persistent category key is authoritative.
- A latest
PASSclears that category's product-ready and real-hardware blockers in the projected coverage report. A laterFAILorBLOCKEDreopens the category while preserving all earlier history. - Ordering follows append order, not editable timestamps. Malformed or incompletely saved records are ignored.
- MIDI Health and the standalone MIDI Protocol view now consume the same receipt-adjusted report. FAIL/BLOCKED categories remain available for another SAVE QA retest.
- Category evidence changes readiness reporting only; it sends no MIDI, changes no route, and mutates no musical or hardware state.
- Compilation and the complete 11-gate focused MIDI/Arranger matrix passed. No distributable build was produced.
2026-07-15 - Declarative Hardware Passport SysEx response policy
- Hardware Passports now persist an explicit SysEx dialect ID, manufacturer ID, device ID, checksum-policy ID, and an opt-in automatic-response-correlation switch.
- Defaults are deliberately manual and untrusted. Automatic response consumption is enabled only when the Passport declares
midi-sds, a valid 7-bit device ID, and the explicit switch. - The resolved policy is copied into every restore snapshot and active attempt, so response classification survives project state and cannot silently fall back to global manufacturer guesses.
- Standard SDS ACK, NAK, WAIT, and CANCEL still require source pinning, unique active-attempt identity, matching device ID, and matching packet number before they can alter restore state.
- Generic Roland checksum inference was removed. Undeclared vendor checksum rules are reported as
not evaluated, never as valid or invalid. - Compilation passed and all 11 focused MIDI/Arranger release gates passed. Remaining work is a verified per-device/message-family policy registry plus hands-on USB/DIN evidence; this is not universal Yamaha/Roland support.
- No distributable build was produced.
2026-07-15 - Hardware Passport target test-note bridge verified
- Supersedes earlier notes that described the target-aware test-note bridge as complete before its processor methods were implemented.
- A project-draft apply now creates one Hardware Passport, optionally attaches it to the target lane, and updates the lane playback/export channel under one normal checkpoint. It sends no MIDI.
- The dedicated protected rollback is single-use and short-lived: the next checkpoint, normal Undo, or state restore invalidates it so it cannot overwrite newer project work.
- Target-aware planning now resolves the living Arrangement lane, attached Hardware Passport, selected output device, and MIDI channel into a non-sending review plan.
- A confirmed test note is queued only when the route is complete. Note On and delayed Note Off reserve one atomic timed batch, preventing a partial queue from creating a stuck hardware note.
- Queue receipts distinguish SpaceAge-side queue acceptance from external-device acknowledgement.
- Focused Release gates passed for project-draft refusal/apply/test-note/protected rollback/normal Undo/stale invalidation and the existing atomic RPN/NRPN setup queue.
- The broad legacy suite exceeded the two-minute command window and is not represented as green. No distributable build was produced.
2026-07-15 - MIDI file import transaction bridge verified
- Inspect-only import is demonstrably non-mutating: notes, expression, lanes, clips, SysEx vault, tempo, and project state remain unchanged.
- Single-clip and split-channel commits now honor source-channel selection, performance-expression preservation, setup-payload review, SysEx quarantine, song-metadata policy, and one outer Undo checkpoint.
- Split mode creates real Arrangement lanes and clips, applies reviewed lane/channel options, and reports actual created counts.
- PPQ note positions remain grid-native across variable tempo maps. SMPTE/absolute-time files alone use seconds conversion.
- Piano Roll import now uses the 4,096-step melodic timeline; the 64-step ceiling remains confined to the drum grid.
- Overlapping same-pitch notes are reconstructed FIFO despite JUCE's inserted zero-velocity retrigger safety note-offs, preserving distinct lengths and release velocities.
- Targeted importer assertions all passed inside the broad self-test: choice gating, inspect-only safety, metadata adoption, earliest metadata, sorted/full review maps, variable-tempo PPQ, long clips, direct overlap, and split overlap.
- The broad monolithic suite still exits red on unrelated historical fixtures. This pass does not represent those unrelated failures as fixed.
- No distributable build was produced.
2026-07-15 - Arrangement MIDI stem-package transaction restored
- Replaced the active export placeholder with full Arrangement MIDI plus one absolute-timeline, channel-isolated MIDI file per musical lane.
- Packages now include
manifest.json,README.txt,CHECKSUMS.txt, real file sizes, standard 16-hex FNV-1a-64 payload checksums, app/project/timestamp metadata, lane routing/event summaries, and a complete package inventory. - Export reports monotonic phases, honors cancellation between payloads, removes partial app-created output on failure/cancel, and validates the completed folder through
inspectMidiStemPackage()before reporting success. - Restored the missing compiled
exportArrangementLaneMidi()implementation using the same note, chord, ratchet, expression, transpose, channel, tempo, meter, and absolute Arrangement timing semantics as full export. - Full and lane MIDI files now carry the current project key signature. FNV-1a-64 now uses the published offset basis and passes the canonical
hello -> a430d84680aabd0bvector. - Replaced package-import placeholders with inspect/plan/confirm/apply behavior. Broken or checksum-mismatched packages remain non-mutating; clean lane stems create editable Arrangement lanes/clips through the reviewed MIDI-file importer under one outer Undo checkpoint.
- Focused behavioral line passed completely:
fnv=1 files=4 laneFiles=3 manifest=1 checksums=1 receipt=1 inspect=1 preview=1 plan=1 commit=1 processorImport=1 processorUndo=1 repairPreview=1 repairPlan=1 drum=1 bass=1 harmony=1. - The broad legacy executable still exits red on unrelated historical MIDI/hardware compatibility placeholders. This scoped green result is not represented as whole-suite completion.
- No distributable build was produced.
Stem-package safety follow-up
- Import preflights Arrangement lane and clip capacity before creating its single Undo checkpoint.
- Export cancellation is regression-tested after work has begun and must leave no partial package directory.
- Focused result: fnv=1 cancel=1 files=4 laneFiles=3 manifest=1 checksums=1 receipt=1 inspect=1 preview=1 plan=1 commit=1 processorImport=1 processorUndo=1 repairPreview=1 repairPlan=1 drum=1 bass=1 harmony=1.
2026-07-15 - Stem-package adversarial closeout
- Package import is now all-or-nothing. Mid-import failure or cancellation restores project state and the pre-existing Undo/Redo history.
- Capacity preflight covers lanes, clips, and unused pattern payloads before the checkpoint.
- Each package is re-inspected immediately before a stem is consumed, closing the progress-callback integrity gap.
- Stems beyond the current 4,096-step editable-pattern limit are refused without mutation rather than truncated. Lossless automatic segmentation remains future work.
- Key-signature export falls back to the valid enharmonic table when the UI spelling preference has no legal signature for that tonic.
- Manifest self-inventory no longer writes a misleading negative file size for the not-yet-written manifest.
- Focused result: fnv=1 cancel=1 longRefusal=1 files=4 laneFiles=3 manifest=1 checksums=1 receipt=1 inspect=1 preview=1 plan=1 commit=1 processorImport=1 processorUndo=1 importCancel=1 repairPreview=1 repairPlan=1 drum=1 bass=1 harmony=1.
- The broad historical suite still exits red on unrelated fixtures; this is a scoped package gate, not whole-suite completion.
- No distributable build was produced.
2026-07-15 - Raw export and armed-lane channel routing verified
- Raw pattern export now uses the documented portable convention: drums on MIDI channel 10, Chord Engine notes on channel 1, and Piano Roll notes on their stored channels.
- Raw pattern MIDI now includes the current project key signature alongside tempo and meter.
- Host and direct channel-voice input update one shared observed-channel mask before the armed-lane filter. Rejected channels remain visible only to diagnostics, not to the instrument.
- MIDI readiness and health reports now receive that observed mask, so channel-mismatch guidance reflects actual recent input.
- Recorded CC and pitch expression now adopt the armed lane's normalized output channel, matching recorded note behavior.
- Verified broad-suite lines: arrangement channels pass; song metadata passes; raw 10/3/1 channels pass; channel-aware recording passes; note filtering passes; live filtering/diagnostics pass; expression filtering passes.
- The monolithic executable still exits red on older hardware-profile/sync fixtures and one unrelated stress threshold. This scoped routing gate is green; it is not represented as whole-suite completion.
- No distributable build was produced.
2026-07-15 - Foundation persistence and long-form drum import closeout
- Pressure/aftertouch modulation routes now validate source, target, and bipolar amount at the storage boundary.
- Shared, clip-local, and lane-local MIDI payload storage preserves bank select, program change, RPN/NRPN setup, and performance expression across project state round-trips.
- Setup payload summaries remain visible but non-editable; live expression recording remains intentionally limited to performance data.
- Split-to-lanes imports preserve channel-10 drum notes beyond 64 steps using the shared long-form note payload while retaining pad mapping and drum-lane playback.
- Verified passing: Pressure/aftertouch mod route storage, MIDI protocol foundation, MIDI expression payload persistence, raw export channel conventions, and armed-lane note/live/expression channel filtering.
- The broad executable still exits nonzero because later hardware/readiness fixture clusters remain red; this closeout does not claim those unrelated groups are complete.
2026-07-15 - Complete MIDI integration suite green
- The monolithic
SampleSquadAudioTestnow exits0after exercising MIDI protocol storage, Hardware Passports, SysEx snapshot/restore safety, RPN/NRPN setup cards, MIDI Learn including 14-bit pairs and pickup, Clock/SPP/MTC/MMC chase, readiness/health, timing calibration, import/export, stem packages, live routing, recording placement, expression automation, mute semantics, and panic/reset behavior. - MIDI input readiness now publishes a nonempty live-routing verdict and detail for host, direct, combined, blocked, and unarmed states. MIDI Health can therefore explain the active path instead of showing an empty contract.
- Hardware Passport summaries now preserve setup-card receipt evidence and normalized SysEx policy without treating generic vendor responses as automatic acknowledgements.
- Protected bank/program/RPN/NRPN setup data survives project storage but remains outside live editable-expression playback.
- Verification artifact:
midi-broad-current-5.log; runtime 167.5 seconds; exit code 0. - No distributable build was produced.
- Remaining launch work is not hidden in this green backend result: real USB/DIN device timing receipts, user-facing AUTO LANES workflow QA, and device-specific librarian policies still require hands-on evidence.
2026-07-15 - Owner timing and atomic arranger edits verified
- Shared PTN and Clip Local MIDI expression are source-relative and repeat with their pattern or clip.
- Lane Local MIDI expression is absolute to the Arrangement timeline, continues through silent gaps, and is queued once per audible lane rather than once per clip.
- Runtime layering remains Shared PTN -> Lane Local -> Clip Local, but each owner is evaluated in its own timing domain.
- Selected-clip export includes only Lane Local events intersecting the clip's actual absolute repeat spans. Lane and full-Arrangement exports append Lane Local data once over the absolute song timeline.
- AUTO LANES Lane Local editing, playhead insertion, and fit behavior now use the Arrangement timeline. The fit command is labeled FIT TIMELINE.
- CUT, section paste, clip paste, drum-chain paste, and toolbar clone now reserve required capacity before their single Undo checkpoint. Refusal reports NOTHING CHANGED.
- Duplicate unreachable arranger paste implementations were removed.
- Release build passed. Focused gates passed: MIDI closeout regression, automation ownership, MIDI project readiness, and MIDI QA receipt persistence.
- This is software-side verification. Real USB/DIN timing, device response dialects, and hands-on customer workflow receipts remain launch evidence, not completed claims.
2026-07-16 - AUTO LANES collision and transaction closeout
- Continuous CC, bend, pressure, sustain, and custom-expression point moves now preflight occupied destinations before checkpointing.
- Processor-level single-point moves refuse same-lane/same-tick collisions.
- Processor-level group move, value, and delete operations resolve every expected event before mutating, preventing stale selections from splitting a group.
- Empty CLEAR STEP and graph-erase gestures preserve Undo history; ADD POINT refuses an occupied lane/tick before checkpointing.
- The permanently hidden legacy direct chain-row editor and its uncheckpointed callbacks were removed.
- Focused MIDI closeout regression passed with expressionMoves=1.
- Complete AudioSelfTest passed in 176 seconds; performance stress completed in 5,922.08 ms under the 8,000 ms ceiling.
- No distributable build was produced.
- HUMAN QA REMAINS: drag single and grouped AUTO LANES points onto occupied ticks, erase across empty spans, and verify one Undo per changed gesture in the desktop UI.
2026-07-16 - Deterministic AUTO routing and closeout hardening
- AUTO now isolates to the armed lane's pinned direct input when one is assigned; with no physical input pinned, it accepts host/plugin MIDI and direct physical-controller input while MIDI Health reports duplicate-risk conditions.
- Opening a second controller no longer silently changes AUTO routing.
- Equal-tick event ordering is stable and insertion-preserving, protecting RPN/NRPN transactions.
- SysEx Passport attach, reattach, detach, and capture cancellation have regression coverage.
- Stale automation edit selections no longer create empty Undo history.
- Focused timing, source-policy, closeout, and the complete AudioSelfTest suite pass.
Remaining professional closeout is concentrated in real-time architecture and hardware validation: remove audio-thread mutex/copy paths, retain all sub-block event offsets, make hardware queue cancellation race-proof, publish an immutable armed-route snapshot, and run the mioXL DIN/USB device matrix.
2026-07-16 - Incoming sub-block timing closed
- Incoming host performance events are accepted/routed once and dispatched to internal rendering at their exact sample offset.
- Note-on, note-off, sustain down/up, pitch bend, CC1, and equal-timestamp insertion order have exact-sample regression evidence.
- Live playback timing and compensated recording timing are distinct values carried by the same event.
- The fixed-capacity queue performs no dynamic allocation and fails safe by releasing voices/ownership if capacity is exceeded.
- Focused MIDI timing and two-controller tests pass.
- The complete AudioSelfTest passes with exit code 0 in 177.0 seconds after the combined host/direct ordering regression.
- No distributable build was produced.
Remaining professional closeout: sample-accurate internal application of sequencer-generated expression, panic-safe queued hardware-output invalidation, and hands-on mioXL DIN/USB latency evidence. The earlier item to retain incoming sub-block offsets is complete.
2026-07-16 - Internal sequencer expression timing closed
- Due authored expression is staged in a fixed 4096-entry per-block queue with stable sample ordering.
- Internal state changes occur immediately before the matching sample is rendered, not before sample 0.
- Live incoming MIDI follows authored expression at equal samples, providing deterministic performance override.
- Plugin MIDI and hardware output retain their original sample offsets.
- Overflow fails safe by releasing voices and live ownership rather than risking stuck state.
- Regression evidence: CC11 reached plugin output and internal dispatch at samples 0 and 1200.
- Complete AudioSelfTest passed with exit code 0 in 178.9 seconds.
- No distributable build was produced.
Remaining software blocker: replace the hardware-output worker's resettable FIFOs and blocking per-item waits with epoch-retired, deadline-ordered traffic and guaranteed-priority panic commands. Then perform physical mioXL USB/DIN timing and disconnect validation.
2026-07-16 - Hardware output worker status
Implemented: lock-free callback route lookup, prepared clock destinations, route and queue cancellation epochs, deadline-ordered worker scheduling, stable equal-deadline sequence ordering, priority safety dispatch, and channel-scoped reroute release.
Verified: full Release self-test suite passes.
Not yet claimed complete: successful hardware sends are not yet observed through a deterministic virtual device. The next required proof is a manual-clock harness covering reroute cancellation, reset cancellation, panic bypass, and equal-deadline ordering. A later strict real-time refinement should replace generic juce::MidiMessage queue cells with fixed short-message packets for live/channel traffic.
2026-07-16 - Hardware scheduler software gate closed
Software status: the hardware-output router now has deterministic direct evidence for stale-message cancellation, priority safety traffic, and stable deadline ordering. The virtual-output/manual-clock seam is compiled only into SPACEAGE_AUDIO_SELF_TEST builds and does not alter the production API or executable surface.
The complete regression suite passes. Remaining work is hardware evidence rather than another routing rewrite: simultaneous mioXL USB and DIN latency measurement, repeated hot disconnect/reconnect, long-running reroute/Panic soak, and saved MIDI Health receipts.
2026-07-16 - Output lifetime and emergency-delivery closeout
Software status remains approximately 99 percent for MIDI 1.0. The hardware router now reconciles real JUCE output inventory by stable device ID, advances endpoint generations before disconnect, invalidates lane and clock routes, and reconnects only currently demanded devices. Old-generation heap and safety traffic is discarded before it can reach a replacement endpoint.
Safety release is loss-resistant: channel intents are coalesced per endpoint generation, duplicate Panic bursts collapse, pending safety appears in progress, and stale scheduled entries are compacted from the full heap. The complete Release suite passed in 182.4 seconds.
Not claimed by software tests: OS-driver delivery confirmation, physical cable latency, hot-plug behavior while notes/sustain/clock/SysEx are active, or independent note ownership when multiple lanes intentionally share the same hardware device and MIDI channel.
2026-07-16 - Arrangement Clip-Local Expression Length Regression Closed
MIDI expression recording now preserves clip-local Arrangement source length instead of shrinking patternLengths to the final CC/pitch-bend tick. The expression runtime queue carries a minimum pattern length, and expression commits keep the maximum of existing length, clip-local length, and inferred expression length. Focused verification passed: SPACEAGE_MIDI_RECORD_TIMING_ONLY, including the previously failing Arrangement processBlock playhead-record case (patternLength=64).
2026-07-16 - Effective AUTO LANES layering restored
buildEffectiveMidiExpressionEventsForArrangementClip()now layers Shared PTN, Lane Local, then Clip Local automation for Arrangement clips instead of omitting Lane Local data from the effective view.- Automation restore identity now proves lane-local payloads survive lane reordering and participate in the effective clip view.
- Stale automation ownership/readiness expectations were corrected to match the current model: clips on a lane with Lane Local automation show Shared + Lane + Clip events; clips on other lanes do not inherit that lane-local data.
- Focused gates passed after rebuild:
SPACEAGE_AUTOMATION_RESTORE_ONLY,SPACEAGE_AUTOMATION_OWNERSHIP_ONLY,SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY,SPACEAGE_MIDI_PROJECT_READINESS_ONLY,SPACEAGE_MIDI_RECORD_TIMING_ONLY,SPACEAGE_MIDI_READINESS_ONLY,SPACEAGE_MIDI_HEALTH_ONLY,SPACEAGE_MIDI_SETUP_QUEUE_ONLY,SPACEAGE_MIDI_CONTROL_QUEUE_ONLY,SPACEAGE_SYSEX_RESTORE_RESPONSE_ONLY, andSPACEAGE_SYSEX_CAPTURE_ONLY. - No distributable build was produced. Remaining MIDI launch proof remains physical: real mioXL USB/DIN latency, hot-plug/Panic/Stop soak, SysEx device receipts, and hands-on AUTO LANES doorway QA.
2026-07-16 - MIDI closeout audit narrowed
- Removed three untracked .orig backup files from Source and Tests so MIDI audits no longer read stale compatibility stubs or old self-test copies as if they were active code.
- Rechecked the live Protocol Coverage model. The remaining active MIDI blockers are now accurately categorized as product-trust work: AUTO LANES hands-on QA, grouped RPN/NRPN editor and hardware template polish, real hardware setup receipts, real-file import/export validation, stem-package repair polish, and future protocol work for true MPE/MIDI 2.0.
- No product code behavior changed in this cleanup. The useful distinction is clearer now: MIDI 1.0 software plumbing is high-90s; release confidence still needs saved human/hardware evidence.
2026-07-16 - Closeout Digest Reporting
- Added a compact MIDI 1.0 closeout digest to protocol coverage and MIDI Health reports.
- Digest lists current readiness, blocker count, deferred future-family count, and each active closeout category with route proof, safety class, QA session id, family list, next action, QA cue, and hardware-evidence cue where applicable.
- This is report-only; it does not alter MIDI playback, recording, routing, import/export, hardware sends, or automation data.
- Verified with SPACEAGE_MIDI_HEALTH_ONLY, SPACEAGE_MIDI_PROJECT_READINESS_ONLY, and SPACEAGE_MIDI_CLOSEOUT_REGRESSION_ONLY.
2026-07-16 - Closeout Headline UI/Report Field
The MIDI Health cockpit now displays a compact CLOSEOUT row directly under the finish-line row. This is a read-only orientation feature: it summarizes the current MIDI 1.0 readiness percentage, blockers, deferred future families, next category, route proof, safety class, and QA session without changing MIDI playback, recording, routing, hardware output, automation, or SysEx behavior.
The protocol coverage report also exports currentFinishLineCloseoutHeadline for regression tests and future UI/report consumers. Focused MIDI health, readiness, and closeout regression gates passed after the change.
2026-07-16 - AUTO LANES Closeout QA Checklist Refinement
The first active MIDI closeout category remains AUTO LANES Final Editor. Its QA script now names the concrete ownership proofs required before calling that surface launch-ready: Shared PTN clone propagation and VARIANT isolation, Clip Local sibling isolation through playback/undo/export/import/save/reload, Lane Local absolute-timeline behavior through gaps, full edit-transform coverage, and raw 14-bit pitch-bend trust boundaries.
This is a report/checklist improvement, not a playback-path change. Focused readiness, closeout, and health gates passed.
2026-07-16 - Closeout Run Order Is More Explicit
The current MIDI 1.0 backend remains in closeout mode. The highest-risk remaining customer-facing proof is still AUTO LANES final editor behavior, but the QA run-order summary now names the actual ownership proof chain instead of only exposing the first test. This reduces ambiguity for manual QA and prevents us from accidentally signing off automation lanes without checking Shared PTN, VARIANT, Clip Local, Lane Local, transforms, undo/import/export, and pitch-bend trust in one coherent pass.
2026-07-16 - Health Panel Closeout Visibility
The MIDI Health panel now exposes the QA run order as a visible row, not only as copied text. This makes the closeout surface more honest: the user/tester can see the actual current MIDI proof path at a glance. The remaining MIDI launch risk is still manual/real-hardware validation, especially AUTO LANES ownership behavior and external pitch-bend trust.
2026-07-16 - MIDI Health Text Now Covered By Tests
The AUTO LANES closeout proof cue is now protected at the Health report layer. This means a future refactor cannot leave the low-level protocol object correct while accidentally removing the proof sequence from the user-facing copied Health report or Next Steps text.
2026-07-16 - Export Write Receipt Status
- MIDI export readiness now has three distinct proof layers: readiness summary, export job plan, and write receipt.
- The write receipt proves only the file-write result and byte presence; it deliberately does not claim musical/collaborator validity until the file is opened or re-imported and checked.
- Focused MIDI closeout and MIDI Health gates passed after the change.
2026-07-16 - Recording Timing Gate Reconfirmed
- Focused MIDI recording timing is currently passing across disarm closure, loop-edge split, long clips, four-measure Arrangement capture, source-offset clips, direct source policy, multi-controller source ownership, and callback timestamp placement.
- Remaining risk is not the modeled timing path itself; it is real controller/interface/audio-driver validation and any undiscovered UI workflow confusion around arming, monitoring, and recording destination.
2026-07-16 23:01 - MIDI recording target UI alignment
- Backend state remains lane-armed first. UI language now says recording needs an armed Arrangement lane and that selecting a lane badge arms it.
- Remaining MIDI risk is not the target rule itself; it is real-hardware latency validation across DIN-via-interface versus direct USB and final automation-lane discoverability.
2026-07-16 23:06 - MIDI UI closeout update
- AUTO LANES is now more discoverable from the Arrangement command row because the button keeps the exact feature name regardless of clip/lane context.
- MIDI 1.0 backend remains in the 96-97% range. Remaining closeout work is real-device latency validation, final automation-lane user workflow proof, and hardware/SysEx edge-case polish.
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 - Receipt Proof Hardening
- MIDI 1.0 backend remains in the high-90s for software-side coverage.
- QA receipt evidence now has stable audit fingerprints, reducing ambiguity between copied receipt templates and actual saved evidence.
- Still not complete for public launch claims until hands-on hardware/host receipts are saved for real devices, real DAWs, SysEx restore, clock/transport, and external bend range tests.
2026-07-17 - Release-proof evidence boundary hardened
- MIDI backend remains software-green/high-90s for internal parsing, routing, recording, expression preservation, SysEx vaulting, direct-input policy, and timing model gates.
- Customer-facing MIDI 1.0 completion still depends on saved real-world evidence: hardware controllers over USB and DIN, external synth response, SysEx restore verification, host sync, real DAW round trips, and live monitoring/timing checks.
- QA receipt audit fingerprints are now visible in the launch-proof summaries as stable evidence handles, but the wording prevents treating them as a substitute for real hardware PASS receipts.
2026-07-17 - Hardware proof cockpit language
- MIDI Health now makes the release evidence boundary clearer: Hardware Passports and reports are not enough by themselves. Hardware proof needs saved PASS/FAIL/BLOCKED evidence tied to a real device, file, host, or manual verification note.
- Focused gates passed: MIDI Health, project readiness, closeout regression, QA receipt persistence, and record timing.
2026-07-17 - Copied MIDI proof ritual
- MIDI Next Steps now gives testers a direct hardware/file/host proof sequence rather than only diagnostic warnings. This helps convert the remaining MIDI 1.0 closeout into a repeatable human QA ritual.
- Focused gates passed: project readiness, MIDI Health, QA receipt persistence, record timing, and closeout regression.
2026-07-17 - Hardware proof ritual is now structured
- Added a structured
hardwareProofRunOrderLineshealth-summary field. - This keeps the future MIDI Health cockpit aligned with the copied Next Steps ritual: Hardware Passport, MIDI Timing, TEST BEND/test phrase, SysEx confirmation and receipt, round-trip file/host proof, then PASS/FAIL/BLOCKED evidence.
2026-07-17 - Hardware proof cockpit summary
- MIDI Health now exposes both a compact hardwareProofRunOrderSummary and the structured hardwareProofRunOrderLines array.
- This gives the future UI a one-line cockpit label plus the full checklist: Passport, Timing, TEST BEND/test phrase, SysEx ACK/manual evidence, DAW/host round-trip, PASS/FAIL/BLOCKED receipt.
2026-07-17 - MIDI Health hardware proof checklist payload
MIDI Health now exposes structured hardware proof checklist rows for the release-proof cockpit: Passport, Timing, TEST BEND/test phrase, SysEx restore verification, DAW/host round-trip, and PASS/FAIL/BLOCKED receipt. This is UI-ready data rather than decorative prose.
2026-07-17 - Hardware checklist status/action fields
MidiHardwareProofChecklistItem now includes UI-facing status and nextAction fields. MIDI Health also serializes hardwareProofChecklistSummary, giving the future cockpit an immediate count of done/needed/ready proof steps.
2026-07-17 - First needed proof field for MIDI Health UI
MIDI Health now serializes hardwareProofFirstNeededLabel and hardwareProofFirstNeededNextAction. The cockpit next-action label can now point to the first blocking hardware proof task from the checklist rather than falling back to broader report text.
2026-07-17 - Checklist counts for MIDI Health badges
MIDI Health now exposes checklist counts as first-class fields: done, needed, and ready. This keeps the future UI honest and avoids string parsing for release-proof status badges.
2026-07-17 - Compact proof badge for MIDI Health
MIDI Health now exposes hardwareProofBadgeLabel, a UI-ready short label for the hardware proof cockpit. It is intentionally conservative: if any proof item is still needed, the badge names the first needed proof item instead of implying the MIDI stack is launch-proven.
2026-07-17 - MIDI Health now displays compact hardware proof state
The Health panel now draws an HW PROOF row using hardwareProofBadgeLabel(). The copied MIDI Health report also includes the same proof badge, so visible diagnostics and support text agree about the first remaining hardware-proof action.
2026-07-17 - MIDI Health report proof count alignment
The copied MIDI Health report now includes hardwareProofChecklistSummary() immediately after hardwareProofBadgeLabel(). This keeps the report useful for support without crowding the visible Health cockpit.
2026-07-17 08:26 - Automation Proof Cockpit Label
- MidiExpressionProjectSummary::automationProofBadgeLabel() now condenses AUTO LANES status into one musician-readable proof line.
- MIDI Health now shows AUTO PROOF before the longer AUTO visibility/path/detail rows.
- Regression coverage confirms the helper, serialized field, and plain-text report output remain present.
2026-07-17 08:35 - MIDI Health AUTO Proof Alignment
- Top-level MIDI Health plain-text and JSON-style var output now expose the same AUTO LANES proof badge shown in the UI.
- AUTO OPS (editorLaunchReadinessSummary) and AUTO TOOLS (editorOperationCoverageSummary) now have focused test assertions through direct summary calls, expression serialization, and top-level health serialization.
2026-07-17 - Setup Assistant Status Labels
- Hardware setup readiness labels are now model-backed: READY, NEEDS ACTION, BLOCKED, OPTIONAL.
- Setup plan toVar() now exposes overallStatusLabel; setup step toVar() now exposes statusLabel.
- Plugin UI no longer owns private wording for these badge labels.
2026-07-17 - AUTO LANES Doorway Checklist Label
- MidiExpressionProjectSummary now exposes automationDoorwayChecklistLabel() and automationDoorwayChecklistLabel in toVar().
- The compact status label proves AUTO LANES remains discoverable through Piano Roll, Arrangement, MIDI TASKS, and Settings while preserving explicit Shared PTN / Clip Local / Lane ownership wording.
2026-07-17 - MIDI Health AUTO DOORS Row
- The MIDI Health cockpit now draws AUTO DOORS from MidiExpressionProjectSummary::automationDoorwayChecklistLabel().
- Top-level MIDI Health and Next Steps reports now include the same compact doorway checklist, preventing UI/report drift.
2026-07-17 - Named Runner Expansion
The shared test runner now exposes the older focused MIDI/SysEx/automation gates by name instead of requiring manual SPACEAGE_*_ONLY environment variables. This reduces closeout friction and makes repeated MIDI proof passes less error-prone. Verified named gates this pass: MIDI_QA_RECEIPT, MIDI_SETUP_QUEUE, SYSEX_CAPTURE, AUTOMATION_OWNERSHIP, and MIDI_READINESS.
2026-07-17 - Named Gate Sweep Complete
The expanded runner has now been verified across the older focused gates as well as the core closeout gates. Green named gates include MIDI_READINESS, MIDI_QA_RECEIPT, MIDI_SETUP_QUEUE, MIDI_CONTROL_QUEUE, MIDI_TEMPLATE_DRAFT, SYSEX_CAPTURE, SYSEX_RESTORE_RESPONSE, AUTOMATION_RESTORE, AUTOMATION_OWNERSHIP, MIDI_HEALTH, and MIDI_PROJECT_READINESS. Remaining MIDI release confidence is therefore less about local proof plumbing and more about hands-on hardware receipts, visible AUTO LANES workflow proof, and final UI/customer-facing integration.
2026-07-17 - AUTO LANES Doorway Name Cleanup
- Cleaned stale workflow-spec language that still implied separate CLIP AUTO and LANE AUTO buttons.
- Customer-facing documentation now matches the implemented model: AUTO LANES is the doorway; Shared PTN, Clip Local, and Lane Local are ownership choices inside the editor.
2026-07-17 - QA Receipt Tooltip Honesty
- MIDI Health now distinguishes opening an incomplete QA receipt form from saving completed PASS/FAIL/BLOCKED evidence.
- The focused MIDI Health gate was rebuilt and passed after the PluginEditor change.
2026-07-17 - MIDI Health Next Action Button Label
- The MIDI Health next-action button now renders a compact label derived from protocolCoverage.nextCloseoutActionLabel().
- This keeps the cockpit model-owned while giving the user a clearer target than generic FIX NEXT.
- Focused verification: MIDI_HEALTH and MIDI_CLOSEOUT passed.
2026-07-17 - Model-Owned Next Action Button Label
- Added nextCloseoutActionButtonLabel() to the MIDI protocol coverage model and structured payloads.
- The visible MIDI Health next-action button now uses this model-owned compact label, reducing UI/model drift risk.
- Focused verification: MIDI_HEALTH, MIDI_READINESS, and MIDI_CLOSEOUT passed.
2026-07-17 - MIDI Protocol Panel Button Label Consistency
- The MIDI Health FIX NEXT button and MIDI Protocol OPEN NEXT button now both use the same model-owned compact next-action label. This prevents future drift between release-gate surfaces while preserving full explanatory wording in tooltips and reports.
2026-07-17 - Cockpit Next Action Has Full And Compact Forms
- MIDI Health now has both a full musician-facing cockpitNextActionLabel() and compact cockpitNextActionButtonLabel(). This protects future cockpit chips/buttons from inventing their own abbreviations while keeping the long DO NEXT line readable.
2026-07-17 - Direct Controller Timing Tightened
- Direct MIDI input no longer collapses all playback timing to sample zero during queue drain. This improves internal timing honesty for USB/DIN controller paths and gives the latency diagnostics a real sample-positioned path to validate.
2026-07-17 - Arrangement Direct MIDI Recording Timing Covered
Direct MIDI now has test coverage for the user-facing Arrangement recording path, not only direct handler calls and host-MIDI processBlock events. This protects the live-controller scenario where a user arms a lane, records into an existing clip from the Arrangement Canvas, and expects timing/length to land where the playhead says it should.
2026-07-17 - AUTO LANES Doorway Polish
The Piano Roll automation doorway now prefers real Arrangement context before falling back to the generic shared-pattern path. This keeps AUTO LANES closer to the user's musical target and reduces the sense that automation is hidden behind Settings.
2026-07-17 16:23 - Recording UI confidence
- Arranger REC now exposes current target details in its tooltip at refresh time, using the active/pending recording pattern when recording and the selected pattern otherwise.
- Backend MIDI timing and recording behavior unchanged in this pass; this is a user-trust surface improvement.
2026-07-17 16:28 - Recording target report consistency
- Active Arranger recording now uses processor.getMidiRecordingPattern() for REC tooltip target summaries; idle state still uses the selected pattern for preflight help.
2026-07-17 16:49 - MIDI Health HW NEXT Report Parity
The visible HW NEXT row now has copied-report parity: MIDI Health and MIDI Next Steps text include Hardware proof next action whenever the hardware proof checklist still has a needed item. This keeps support/debug copies consistent with the in-app cockpit.
2026-07-17 17:08 - Record Timing Gate Trust Repair
- MIDI_RECORD_TIMING is green again after replacing a brittle fixed-index dispatch assertion with event-identity lookup.
- This was a test-harness correction, not an app-path change: direct queued MIDI still records correct note start/length and expression events through the armed Arrangement lane.
- Remaining work is customer-facing proof and hardware receipt depth, not this specific timing regression.
2026-07-20 - Launch Validation Matrix Added
MidiProtocolCoverageReportnow serializesmidiLaunchValidationMatrixSummaryandmidiLaunchValidationMatrixRows.- MIDI Health now repeats that matrix so the UI/status layer can show which proof artifacts remain before public MIDI 1.0 claims are safe.
2026-07-20 - Next Validation Receipt Surface
MidiProtocolCoverageReportnow exposesnextMidiLaunchValidationReceiptandnextMidiLaunchValidationReceiptSummary.- MIDI Health mirrors those fields so the cockpit/status layer can point to the next missing proof receipt instead of merely listing all remaining validation categories.
2026-07-20 - Launch Receipt Template Connected To Health
MidiProtocolCoverageReportnow exportsnextMidiLaunchValidationReceiptSnapshotandnextMidiLaunchValidationReceiptActionSurfacealongside the launch validation matrix.MidiProjectHealthSummarymirrors those fields so the MIDI Health UI can eventually render the exact next launch proof task with a deterministic button/action model.
2026-07-20 - AUTO LANES First-Use State
- AUTO LANES now opens with customer-facing next-step text instead of only internal ownership language.
- Empty AUTO LANES owners now explain how to create the first performance automation row without implying any MIDI is sent from the editor.
- MIDI backend status remains unchanged: the pass is UI guidance over already validated owned automation behavior.
2026-07-20 - Launch Proof Rows In MIDI Health
- MIDI Health now surfaces launch validation receipt progress directly in the visible cockpit instead of only in copied reports / structured payloads.
- The rows remain cold/status-only: they report saved PASS evidence and the next receipt action without sending MIDI, changing routing, or mutating project data.
2026-07-20 - QA Button Launch Receipt Alignment
- The MIDI Health receipt button now follows the launch-validation receipt selector when launch proof is still pending.
- The workflow remains safe: completing or saving a receipt writes only append-only project QA evidence and sends no MIDI by itself.
2026-07-20 - Launch-Proof Cockpit Context Contract
- MIDI Health no longer exposes launch proof as an anonymous action shell; the surface object now includes
proofBucket,proofArtifact,requiresHardware,requiresRealFiles, andrequiresLivePerformancefor launch-validation actions. - This keeps the customer-facing Health cockpit aligned with the QA receipt ledger and prevents vague public-MIDI readiness wording from sneaking back in.
- Current verified gates:
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild,MIDI_RECORD_TIMING.
2026-07-20 - Copied Health Reports Match MIDI Cockpit
MidiProjectHealthSummary::toPlainTextNextSteps()andtoPlainTextReport()now includecockpitNextActionSurfaceSummary()near the public MIDI claim / launch-validation lines.- This keeps UI, JSON, and copied support reports synchronized around the same next proof action.
- Current verified gates:
MIDI_HEALTH,MIDI_READINESS -NoBuild,MIDI_CLOSEOUT -NoBuild,MIDI_RECORD_TIMING.
2026-07-20 - Launch Validation Card
- MIDI Health now exposes a single launch-validation cockpit card for customer-facing proof status.
- BLOCKED state names the next required proof bucket and artifact before public claims are allowed.
- PASS state is covered by saved QA receipts and exposes publicClaimsAllowed=true while still letting hardware proof communicate remaining real-device/file/host work.
2026-07-20 - Launch Card Proof Rows
- Launch-validation cockpit cards now include progress percentage, proof rows, and normalized next receipt identity.
- UI should use this card for Launch Proof status instead of recomputing counts or scraping plain-text reports.
2026-07-21 18:31 - MIDI 1.0 Closeout: Queued Live Input Sample Position
- Fixed the queued incoming MIDI performance dispatch so it forwards pending.samplePosition into handleIncomingMidiMessage instead of collapsing playback/record start offsets to sample zero.
- This improves live-monitoring and recording timing honesty for host/direct MIDI queued inside an audio block, especially near measure starts and dense controller paths.
- Shared-code Release compile passed after the change. Remaining proof is still hands-on USB/DIN controller latency and recorded-take alignment testing on real hardware.
2026-07-21 18:52 - MIDI 1.0 Closeout: Final Pre-Render Direct Input Drain
- Added a second direct physical MIDI input drain immediately before per-sample voice rendering. This catches controller messages that arrive after the first processBlock MIDI pass but before audio generation begins.
- The change is intended to reduce avoidable SpaceAge-side live-monitoring delay without pretending to fix driver/interface/audio-buffer latency outside the app.
- Shared-code Release compile passed. Remaining proof: Shane's USB controller vs mioXL DIN controller latency comparison and real Arrangement recording takes.
2026-07-21 - MIDI 1.0 Closeout: Arrangement Recording Closeout Position
- Fixed held-note closeout for MIDI recording stop and step-input interruption so active notes close against the target clip's local source timeline, not the raw Arrangement song step.
- This matters for real Arrangement recording: notes held to the clip boundary, notes recorded into repeated clips, and notes closed by stopping record should retain believable lengths instead of collapsing into tiny notes near the beginning of the pattern.
- Shared-code Release compile passed after the change. Remaining proof: real-time Arrangement recording takes with 16/64/128-step clips, stop-at-boundary behavior, and USB vs DIN controller latency comparison.
2026-07-21 - MIDI 1.0 Closeout: Shared Arrangement Recording Mapper
- Consolidated MIDI note recording, MIDI expression recording, and held-note recording closeout onto one shared Arrangement clip-to-source-step mapper.
- This removes three subtly different copies of the same timing logic, including a boundary-sensitive variant for stop/closeout and the live-event variant for note/CC/bend capture.
- The mapper now preserves fallback behavior: a selected target clip is preferred, but if the playhead is outside it, recording can still map to another valid clip in the armed lane instead of silently falling back to raw song-step timing.
- Shared-code Release compile passed. Remaining proof: real Arrangement MIDI recording into clips at the beginning, middle, and end of 16/64/128-step lanes, including notes held across clip edges.
2026-07-21 - MIDI 1.0 Closeout: Arrangement REC Target Ownership
- Tightened the Arrangement REC flow so arming a MIDI input lane also makes that lane the selected Arrangement destination target.
- Target clip IDs are now accepted only when the selected clip belongs to the armed MIDI lane, preventing stale cross-lane clip selection from influencing live recording.
- Shared-code Release compile passed. Remaining proof: use the Arrangement REC button from selected lanes, armed lane buttons, empty lanes, clips under the playhead, and clips on other lanes to confirm the target always matches what the lane badge teaches.
MIDI 1.0 Closeout: AUTO LANES Layout Ownership
- Removed the duplicate Arrangement AUTO LANES bounds assignment from the transport/zoom row.
- AUTO LANES now has one visible home in the Arrangement command row, avoiding hidden top-row space consumption and making the automation entry point easier to reason about.
- Verified with shared-code Release compile.
MIDI 1.0 Closeout: AUTO LANES Badge Warning Cleanup
- Removed unused AUTO LANES badge-count locals from the full-height lane badge paint paths.
- Restored badge-count locals where they are actually used by overview badges and tooltips.
- Verified with shared-code Release compile after correction.
MIDI 1.0 Closeout: AUTO LANES Selected-Clip Priority
- Fixed Arrangement AUTO LANES targeting so the selected clip wins before the playhead clip, matching the tooltip and expected badge-click workflow.
- This prevents a clip AUTO badge click from accidentally opening the automation owner under the playhead instead of the clicked/selected clip.
- Verified with shared-code Release compile.
2026-07-21 - Direct MIDI Record Offset Sign Fix
Fixed direct physical MIDI recording placement so the recorded note/CC position uses the signed event offset from the current audio block start. Queue age remains a diagnostic measurement only. This prevents fresh direct-controller messages that arrive inside the current block from being recorded as if they occurred at sample 0, while still allowing older queued messages to be placed with negative offset compensation.
Verification: Release SharedCode compile passed after the change.
2026-07-21 - Direct MIDI Health Text Alignment
Updated the direct-input health note so it reports the current design truth: queue age is diagnostic, while signed event offset is used for recording placement. Verification: Release SharedCode compile passed after the wording change.
2026-07-21 - Live MIDI Duplicate Voice Delay Fix
Removed the extra internal voice delay from incoming MIDI note starts after sample-dispatch has already placed the event in the current audio block. Recording still uses signed record offsets for musical placement, but monitoring no longer waits a second time inside startVoice. Verification: Release SharedCode compile passed.
2026-07-21 - MIDI Recording Stop Target Stability
Changed the editor stop paths so ending MIDI recording uses the processor's active recording pattern instead of the currently selected pattern. This prevents clicks, page changes, or selection drift during recording from closing held notes or applying post-record quantize to the wrong pattern. Verification: Release SharedCode compile passed.
2026-07-22 - MIDI 1.0 Closeout: Arrangement Recording Clip Identity Stability
- Updated Arrangement gap-consumption handoff so a newly created recording target clip is relocated by its hidden clipId after preserved gaps are consumed and lane gaps are normalized.
- The old visible-property fallback remains as a safety net, but exact clip identity now wins first. This prevents duplicate-looking clips from confusing MIDI recording target selection.
- Verified with a Release SharedCode compile.
2026-07-22 - MIDI 1.0 Closeout: Drum Recording Data Separation
- Split Drum-lane MIDI recording from melodic Piano Roll note recording.
- Drum lanes now enqueue drum-step data and trigger drum audio, then return immediately; they no longer fall through into hidden Piano Roll note creation.
- Instrument lanes still record note starts, lengths, velocity, output channel, and pad/instrument identity as before.
- Verified with a Release SharedCode compile.
2026-07-22 - MIDI 1.0 Closeout: Unified Direct MIDI Block Dispatch
- Kept incoming MIDI collection active through both direct-device drains in processBlock.
- Late direct MIDI messages that arrive after host MIDI and before voice rendering now enter the same sample-ordered pending queue instead of bypassing the queue and taking a different immediate path.
- This reduces live/record timing disagreement and keeps host MIDI plus direct MIDI under one block-level dispatch model.
- Verified with a Release SharedCode compile.
2026-07-22 - MIDI 1.0 Closeout: Direct Router Boundary Audit
- Verified the direct MIDI input router still converts OS callback timestamps into audio-block sample positions before dispatch.
- Confirmed the late-live-only drain mode is not currently used by production processBlock, so setup messages are not being consumed by that path.
- Cleaned the router function boundary formatting so future edits around this timing-critical code are easier to inspect.
- Current MIDI backend status remains high-90s: direct input, multi-controller ownership, sample-ordered dispatch, recording receipt, sync/source filtering, and hardware profiles are in place; remaining risk is hardware validation across Shane's DIN-via-mioXL path and visible automation-lane polish.
2026-07-22 - MIDI 1.0 Closeout: Focused Timing Gate Restored
- Rebuilt SampleSquadAudioTest after the direct MIDI router audit and drum-recording repair.
- SPACEAGE_MIDI_RECORD_TIMING_ONLY=1 now passes. Covered cases include disarm/step-input note closure, loop-edge splits, long Arrangement clips, repeated source-offset clips, Arrangement playhead recording, four-measure note/expression capture, long drum Arrangement capture, direct queue chatter, pinned two-controller input filtering, source-aware same-note ownership, stale direct-device rejection, direct slot generation handoff, callback timestamp placement, input source policy, sync source policy, and open-vs-active direct evidence.
- SPACEAGE_MIDI_READINESS_ONLY=1 passes.
- SPACEAGE_MIDI_HEALTH_ONLY=1 passes.
- Fixed the regression where drum-lane recording separation removed the note-length representation needed by long drum Arrangement clips. Drum recording now writes the Drum Composer step plus the timed Arrangement note representation.
- Current MIDI status: backend remains in the high-90s. The main remaining gap is real hardware validation on Shane's DIN-via-mioXL path, plus customer-facing automation-lane visibility/polish.
2026-07-22 - Arrangement AUTO LANES Doorway Visibility
- The Arrangement lane AUTO badge now appears for the selected destination lane even before automation rows exist, making the automation editor discoverable from the lane surface instead of only from the top button.
- Existing automation and active record/add-clip target lanes render the AUTO badge at higher visual weight; ordinary lanes with clips keep a quieter invitation.
- Empty lanes explain that a real clip is needed before AUTO LANES has performance data to own.
2026-07-22 - MIDI Hardware Setup Layout Guard
- Fixed the MIDI Hardware Setup Guide bottom-region geometry so the selected scenario panel no longer consumes the strip reserved for the button-safety explanation.
- This addresses a likely source of overlapping text on the MIDI Hardware page and keeps the safety copy visible without competing with template controls.
2026-07-22 - MIDI Health Cockpit Height Guard
- Fixed a MIDI Hardware Setup Guide layout bug where the bottom guide area could compute an invalid/overlapping rectangle.
- Capped the visible MIDI Health cockpit to a dashboard-height summary so warnings, next-step buttons, and bottom legal/trust text do not get pushed offscreen by the full diagnostic row list.
- Full verbose MIDI Health remains available through COPY REPORT, keeping the UI readable while preserving support-grade detail.
- Verified with SharedCode Release compile after the UI layout changes.
2026-07-22 - MIDI Live/Record Gate Recheck
- Ran the focused MIDI record-timing gate after the recent live-input work. PASS.
- Confirmed the four-measure Arrangement recording test lands notes across the expected 64-step span instead of collapsing them into measure one.
- Confirmed direct input tests for pinned controller behavior, stale generation rejection, slot reuse handoff, source-aware same-note ownership, sustain/channel-mode behavior, and callback timestamp placement all pass.
- Ran MIDI readiness gate. PASS.
- Ran MIDI health gate. PASS.
- Broad MIDI protocol gate still has a readiness-report contract failure: the musical/protocol mechanics continue past it and pass, but the closeout/readiness wording/property assertions need their own cleanup before calling the dashboard receipt layer complete.
2026-07-22 - MIDI Protocol Gate Boundary Restored
- Removed stale readiness-contract assertions that expected AUTO LANES to carry a hardware proof cue and expected route summaries to duplicate hardware cue counts. AUTO LANES proof is a hands-on evidence receipt; route summaries own route/action context.
- Rebuilt the Release self-test executable and reran
MIDI_PROJECT_READINESS. PASS:MIDI project readiness report: passed lanes=4 warnings=1 expressionEvents=2 healthWarnings=7 externalReady=0/1. - Added an explicit
SPACEAGE_MIDI_PROTOCOL_ONLYexit boundary after the MIDI hardware queue/reconnect/coalescing coverage so the protocol-only gate no longer inherits unrelated full-app audio/editor smoke failures. - Reran
SPACEAGE_MIDI_PROTOCOL_ONLY=1. PASS, ending withMIDI protocol-only gate: passed. - Current status: MIDI 1.0 backend mechanics are green in focused gates; launch completion still needs real hardware receipts, SysEx restore proof, import/export real-file round trips, AUTO LANES hands-on QA, and visible customer-facing validation polish before we claim public-facing MIDI perfection.
2026-07-22 - MIDI Protocol Gate Added To Test Runner
- Added
MIDI_PROTOCOLtotools/run_tests.ps1as the standard runner name forSPACEAGE_MIDI_PROTOCOL_ONLY. - Verified the new runner path with
tools/run_tests.ps1 -NoBuild -Gate MIDI_PROTOCOL -ReportPath midi-protocol-runner-20260722.out. - Result: PASS, ending with
MIDI protocol-only gate: passed. - Practical impact: MIDI closeout can now run the core protocol gate through the same report-generating tool path as Health, Readiness, Record Timing, QA Receipt, SysEx, and Automation gates.
2026-07-22 - Launch-Proof Cue Status
The MIDI launch-validation cockpit now exposes the next proof target as structured fields: nextProofBucket, nextProofArtifact, and nextProofCue. This keeps the Health panel, support reports, and future launch-proof UI from parsing long receipt-summary text. Current backend status remains green for compile and MIDI Health; MIDI protocol output reached PASS, while the test wrapper timeout still needs a small runner lifecycle follow-up.
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 Queued-Offset Double Delay Removed
Fixed a live-performance latency bug where sample-accurate host/direct MIDI events were queued until their correct sample inside the audio block, then the same sample offset was passed again into voice start. Queued events now start audio immediately at the dispatch sample while preserving the original record sample position for captured MIDI timing. This specifically targets the subtle live-controller lag Shane heard while keeping recorded note placement intact.
Verification: Release compile passed; MIDI_RECORD_TIMING, MIDI_LATENCY_WRAP, and MIDI_HEALTH gates passed.
2026-07-22 - Arrangement Recording Target Is Playhead-First
Updated the Arrangement MIDI recording target resolver so a stale selected clip elsewhere in the armed lane cannot hijack recording. The contract is now explicit in code: a real clip under the Arrangement playhead wins; otherwise SpaceAge creates/uses a lane-owned clip at the intended timeline position. This keeps Arrangement recording from feeling like it is secretly recording into a pattern silo.
Verification: Release compile passed; MIDI_RECORD_TIMING and MIDI_CLOSEOUT gates passed.
2026-07-22 - Arrangement MIDI Routing Contract Audit
- Verified lane selection and MIDI arming are separate actions: selecting a lane chooses the Add Clip target, while
Arm MIDI Input Hereis the explicit live/record input switch. - Verified the armed lane is mirrored into the Arrangement Canvas as
liveMidiInputLaneso the UI can showARM,LIVE IN,COUNT, andREC INstates without the selected clip stealing input. - Verified non-drum armed lanes route live MIDI to the lane instrument, while drum lanes intentionally use Drum Composer pad mapping rather than Piano Roll live input.
- Risk to keep watching: if the user selects a different clip while a lane remains armed, monitoring correctly stays with the armed lane; the UI must keep making that distinction obvious.
2026-07-22 - Direct Input Queue and MIDI Protocol Gate Audit
- Verified host MIDI and direct MIDI now share the same audio-thread dispatch path for musical performance messages.
- Direct hardware input is drained before audio rendering and again immediately before the sample loop, so controller messages that arrive between setup and render can still make the current block.
- MIDI-only protocol verification no longer fails because of the unrelated 200-block audio stress wall-clock threshold; that threshold remains active for the full self-test.
2026-07-22 - Count-In First-Measure Capture Guard
- Fixed
getRecordStepPosition()so a recording that becomes active partway through an audio block treats the activation sample as the start of the recording window. - This prevents the first performed measure after count-in from being offset as if recording had started at the beginning of the audio block.
- Added
MIDI_RECORD_TIMINGregression coverage: a Note On exactly at count-in activation now records at start0.0instead of landing late in the first measure.
2026-07-24 - Lane Mixer Destination Split
- Added the audio-side bridge needed for lane-owned instruments: source slot and mixer destination are now separate on active voices.
- Current interpretation: MIDI input/recording can monitor through the lane-selected mixer strip without reintroducing the old Pad-as-instrument mental model for non-drum lanes.
- Remaining public-facing MIDI work remains hardware proof, SysEx/file receipts, automation-lane visibility polish, and hands-on validation on Shane's DIN-through-mioXL controller path.
2026-07-24 - AUTO Direct Input Policy Adjusted For Multi-Controller Reality
- AUTO source policy now treats unpinned armed lanes as open to direct physical controllers instead of requiring a lane-specific input assignment first. Pinned direct inputs remain exclusive and continue to block host/plugin duplicates.
- Live direct-input playback dispatch is immediate at drain time; recording still uses the signed callback offset so captured timing remains honest.
- Gates passed: MIDI_RECORD_TIMING, MIDI_HEALTH, MIDI_CLOSEOUT.
2026-07-24 - AUTO Input Policy And Direct Monitor Timing Compile-Proven
AUTO now has the intended two-mode behavior: pinned direct lanes isolate to the selected device, while unpinned armed lanes accept both direct controllers and host/plugin MIDI. Direct monitoring starts immediately on drain; recorded timing remains timestamp-based. MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_CLOSEOUT are passing after compile.
2026-07-24 - Lane Mixer Fallback No Longer Uses Private Instrument Slot
SpaceAge no longer repairs invalid Arrangement lane mixer channels by deriving them from the private instrument slot. Invalid non-drum lane mixer routing now heals from lane position, while valid user-selected mixer channels remain preserved. This keeps lane-owned instruments, mixer channels, and MIDI channels conceptually separate.
Validation: MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_CLOSEOUT all passed after the change.
2026-07-24 - Instrument Bay Label Sanitizing Cleanup
Private instrument default-label detection now uses real zero padding instead of a null padding character. This helps keep transitional private slots from leaking default Pad-style labels into lane-owned instrument displays.
Validation: MIDI_RECORD_TIMING, MIDI_HEALTH, and MIDI_CLOSEOUT passed.
2026-07-24 - 256-Step Direct Recording Coverage
MIDI_RECORD_TIMING now includes a long-clip direct-input Arrangement recording case. Status impact: MIDI recording timing has stronger automated coverage for real composing workflows involving long melodic clips, external controllers, and later-measure playhead recording.
2026-07-24 - Instrument Bay Copy Contract Tightened
Visible Drum Composer pad slots are now rejected as both InstrumentSlot copy sources and destinations. This keeps lane-owned instrument duplication lane-to-lane and prevents pad assignments from leaking back into melodic/harmonic lane workflows.
2026-07-24 - Lane-Owned Paste Guard
Added pasteCapturedInstrumentSlotSettings() and pointed the lane-owned Synth Drawer paste path at it. MIDI closeout now checks that visible pad captures are rejected for private lane instrument targets while private lane instrument captures still paste successfully.
2026-07-24 - Synth/Mixer Boundary Tightened
Generator preset paths no longer write channel-strip compressor/saturation state. Shared sends and mixer effects remain mixer-owned, reducing hidden state when changing lane instruments or creating fresh generator sounds.
2026-07-24 - Pad-Proxy Fossil Cleanup
Removed the unused formatInstrumentPadLabel() helper so future Instrument Bay work has one fewer pad-named lane-instrument affordance to trip over. Closeout verification remains green.
2026-07-24 - Recording Target UX Aligned With Backend
- Recording target text now follows the same playhead-first rule used to resolve Arrangement MIDI recording.
- This reduces ambiguity between selected clips, armed lanes, and the actual destination clip.
- Verified with the focused recording timing gate and MIDI closeout regression gate.
2026-07-24 - Lane-Owned Synth Drawer Header Cleanup
The Synth Editor now refreshes lane-owned header text immediately on open, preventing stale Pad labels from lingering when editing non-drum lane Instruments. MIDI_CLOSEOUT and MIDI_RECORD_TIMING are passing after the latest change.
2026-07-24 - Automation Naming And MIDI Gate Pass
Status: backend remains in the high-90% zone for MIDI 1.0 internal handling. This pass improved the customer-facing automation entry points without changing MIDI data semantics.
Passed gates:
- MIDI_RECORD_TIMING
- MIDI_HEALTH
- MIDI_CLOSEOUT
Remaining MIDI/customer-facing work is concentrated in hardware validation, final Arrangement-record affordances, automation-lane discoverability, and broader real-device latency confirmation.
2026-07-24 - Instrument Bay Wording Cleanup
Instrument Bay separation is increasingly user-visible: Arrangement lanes use private instrument slots, closeout tests reject visible-pad writes for lane instruments, and the Synth Editor now presents lane-owned targets as Instruments. Remaining work is to finish the last surface-level menu/report wording and continue real-device validation for input latency and multi-controller behavior.
2026-07-24 - Automation Editor Button Clarity
The Automation editor remains functionally unchanged, but its visible action vocabulary is cleaner: users add points and draw ramps inside Automation. This helps the editor feel less like a technical subsystem and more like a musical drawing surface while preserving Shared PTN, Clip Local, and Lane ownership behavior.
2026-07-24 - Arrangement Recording Target Audit
Arrangement MIDI recording is still playhead-first and armed-lane-owned. The current backend and editor path protect against three failure modes: selected clips stealing recording focus, first-measure notes being shifted before step 0 by latency compensation, and late-position recording into long clips collapsing into the first measure. Remaining work is mostly customer-facing: clearer record-arm education, final live hardware feel checks, and making Automation lanes more discoverable.
2026-07-24 - Arrangement REC Tooltip Contract
REC surfaces now teach the same rule as the backend: lane arms the instrument/input path, playhead chooses musical time, and selection stays for editing. This is customer-facing polish, not a timing change. The remaining MIDI closeout focus is still real hardware validation, Arrangement record feel, automation discoverability, and final release-proof receipts.
2026-07-24 - MIDI Recording State Refresh Contract
MIDI recording state transitions now announce themselves consistently. Count-in pending-to-active recording was the important edge case: the processor now raises the recording-change flag at that transition, and the editor refreshes the Arrangement REC/button/canvas state when the flag is consumed. This reduces risk of stale recording indicators while the backend is already recording.
2026-07-24 - Automation Doorway Wording Normalized
The active MIDI expression workflow helper now uses Automation as the user-facing name in reports and guidance. Compact badge labels remain acceptable where width is constrained, but receipts and first-use prose now teach Automation instead of stale AUTO LANES terminology.
2026-07-24 - Piano Roll Automation Button Refresh
The Piano Roll and Arrangement automation doorways now use the same compact AUTO / AUTO +N wording. Longer reports, docs, and health panels can still say Automation, but direct action cards and buttons should match the visible AUTO control.
2026-07-24 07:51 - Automation Doorway Surface Cleanup
- Active MIDI health and expression workflow text now teaches Automation as the user-facing surface name. AUTO remains only where it is a deliberately compact badge or historical/internal blocker category.
2026-07-24 11:35 - Recording Queue Trust Summary
MIDI Health now reports a single Recording Queue Trust sentence in addition to raw dropped-event counters. This keeps live recording QA honest: a take with dropped note/drum or expression events is explicitly marked UNTRUSTED in the model, UI, text reports, and serialized health payload until the user retakes or repairs it.
2026-07-24 11:55 - Recording Take Reliability Verdict
MIDI Health now has a combined Recording Take Reliability verdict. Dropped recording events mark a take UNTRUSTED; high audio-buffer latency, direct queue lag, hardware-output queue lag, or SoundFont live-voice refusal mark it TIMING SUSPECT; otherwise it reports CLEAN. Verified with MIDI_HEALTH, MIDI_RECORD_TIMING, and MIDI_CLOSEOUT.
2026-07-24 12:12 - Recording Take Next Action
MIDI Health now pairs the Recording Take Reliability verdict with a Recording take action line. It gives repair/retake, buffer, input-route, hardware-output, or SoundFont voice-pool guidance depending on the active failure mode. Verified with MIDI_HEALTH, MIDI_RECORD_TIMING, and MIDI_CLOSEOUT.
2026-07-24 12:35 - Launch Proof Next Action Surface
- MIDI launch validation no longer only reports the cockpit card and queue; it now also produces a short hand-action line: blocked/pass state, progress, next proof bucket, proof artifact, proof needs, action doorway, and receipt evidence name.
- This keeps release-proof work understandable when copied from Health reports outside the app.
2026-07-24 12:52 - Launch Proof Report Language
- The launch-proof next-action line now keeps persistent receipt storage names out of user-facing reports.
- The cue still identifies the concrete evidence object, but in musician/product language: Automation hands-on QA receipt.
- Verified with MIDI_HEALTH, MIDI_RECORD_TIMING, and MIDI_CLOSEOUT.
2026-07-24 13:06 - Automation Row Wording Pass
- Current MIDI expression UI copy now says Automation rows for the editor/preview strip, preserving Automation as the doorway name and avoiding confusion with future full Arrangement automation lanes.
- This is a surface-language cleanup only; backend Shared PTN, Clip Local, and Lane ownership behavior is unchanged.
2026-07-24 13:24 - Arrangement Automation Empty-Lane Truth
- Arrangement AUTOMATION now distinguishes a selected lane from an editable clip-backed Automation target in its tooltip and color state.
- This removes a misleading first-row promise for empty lanes while keeping the current safe status-message behavior.
- Verified with MIDI_HEALTH, MIDI_RECORD_TIMING, and MIDI_CLOSEOUT.
2026-07-25 00:12 - Hardware Template Receipt Automation Wording
- Hardware template apply receipts now use the current Automation doorway name in skipped follow-up actions.
- This keeps MIDI hardware setup receipts aligned with the current Automation vocabulary while preserving the no-hardware-send safety contract.
- Verified with MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_RECORD_TIMING.
2026-07-25 00:34 - Lane-Owned Instrument Label Contract
- MIDI closeout now verifies the Arrangement lane instrument label itself: Mixer Channel and MIDI Channel must be visible, and Pad/private-slot/Instrument Bay storage wording must not appear.
- This protects the Instrument Bay migration at the user-facing badge/menu layer while the backend still uses the transitional private-slot storage bridge.
- Verified with MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, and MIDI_PROTOCOL.
2026-07-25 00:58 - Arrangement Automation Doorway Target Contract
- The Arrangement Automation target rule now lives in a shared editor resolver used by both the toolbar UI and the opener.
- MIDI closeout now verifies selected-clip priority, playhead fallback, first-real-clip fallback, and empty-lane no-clip reporting.
- Current MIDI backend/customer-facing confidence improved slightly because Automation discoverability is now less ambiguous, though hands-on Automation editing QA and real hardware validation remain required before public MIDI completion claims.
- Verified with MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, and MIDI_PROTOCOL.
2026-07-25 01:18 - Arrangement Recording Target Contract
- Added MIDI closeout proof that Arrangement REC targets the armed lane and playhead clip rather than stale selected clips.
- This aligns with the user-facing recording model: selected objects are edit focus; armed lane and playhead are performance focus.
- Current confidence improved for Arrangement MIDI recording workflow, especially after prior reports that recording could feel disconnected from the visible song context.
- Verified with MIDI_CLOSEOUT, MIDI_RECORD_TIMING, MIDI_HEALTH, MIDI_READINESS, and MIDI_PROTOCOL.
2026-07-25 01:42 - MIDI Input Route Status Contract
- Arming a lane now preserves the detailed route summary built by
setMidiInputLane()instead of immediately overwriting it with a terse lane-name-only status. - MIDI closeout now verifies the armed status includes the lane name,
MIXER CHANNEL,MIDI CHANNEL, input-filter text, and no hiddenPadwording for non-drum lane-owned instruments. - This improves customer-facing MIDI confidence because the live-input destination is visible at the exact moment the user arms a lane.
- Verified with MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, and MIDI_PROTOCOL.
2026-07-25 02:03 - Arranger Clip Open Route Status Contract
- Opening a non-drum Arrangement clip now keeps the same detailed armed-route status after switching into the Sequencer/Piano Roll view.
- The protected status combines edit context and performance context:
EDITING CLIP #... FROM ARRANGER | MIDI INPUT | lane | mixer | input filter | MIDI channel. - This reduces a remaining workflow ambiguity where the app did the right routing work but hid the evidence immediately after navigation.
- Verified with MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, and MIDI_PROTOCOL.
2026-07-25 02:31 - Recording Capture Receipt Route Contract
- The
REC CAPTUREDstatus for melodic Arrangement recording now carries the same route facts as the armed-lane status: lane name, mixer channel, MIDI output channel, input filter, note name, timing, velocity, and captured MIDI channel. - MIDI closeout now verifies this receipt directly, including the no-Pad wording rule for non-drum lane-owned instruments.
- Current MIDI customer-facing confidence improves because a successful recorded note now leaves a traceable destination receipt instead of only a pattern/note summary.
- Verified with MIDI_CLOSEOUT, MIDI_HEALTH, MIDI_READINESS, MIDI_RECORD_TIMING, and MIDI_PROTOCOL.
2026-07-25 15:17 - Shared MIDI Route Summary Contract
- Centralized the lane MIDI route summary used by live input arming, input filter changes, selected hardware input changes, playback/export MIDI channel changes, recording target summaries, and capture receipts.
- Protected contract: every meaningful MIDI route receipt must show the armed lane, lane-owned instrument route, mixer channel, MIDI channel, input filter, and selected input device when present.
- Regression coverage now checks named direct input devices and rejects non-drum Pad wording in the same route summary.
2026-07-25 15:31 - Hardware Output And Passport Visibility
- Route summaries now report route target, MIDI output device, and Hardware Passport ID.
- Lane MIDI routing receipts for hardware output, Hardware Passport assignment/creation, and route-target changes now reuse the same formatter as arming and capture receipts.
- This protects external hardware setup from becoming invisible after a user changes one routing field.
2026-07-25 15:33 - Hardware Test Note Route Receipts
- Lane hardware test-note queued/failed statuses now reuse the full route summary instead of only naming the lane.
- This is a hot-action confidence fix: when SpaceAge sends or fails to send a hardware test note, the status line now preserves target mode, output device, Passport, input source/filter, mixer channel, and MIDI channel.
- MIDI closeout coverage protects the success and failure wording.
2026-07-25 15:40 - Hardware Test Note Blocked Status
- The blocked/not-ready lane hardware test-note status now also uses the full route summary.
- This closes the last obvious route-truth gap in the lane
TEST HARDWAREbutton: blocked, queued, and failed states all expose the same diagnostic facts.
2026-07-25 16:05 - Instrument Bay Surface Vocabulary
- The Arrangement lane L/S/V instrument menu now uses plain user-facing Instrument wording while preserving lane-owned backend behavior.
- Visible actions now read as Instrument choices instead of resurrecting the old pad-proxy/slot mindset; Drum Composer is still explicitly Pad Bank based.
- Current MIDI closeout confidence remains high after full gate verification. Remaining MIDI work is still primarily hands-on Automation evidence, real hardware bend/test-note proof, import/export polish, and user-facing MIDI setup flow validation.
2026-07-25 16:27 - Import/Record Vocabulary Aligned
- Split-import destination rows, SoundFont loading, Piano Roll clip tooltips, paste-block receipts, and Instrument Bay records now use Instrument language instead of
Lane Instrumentlabels. - This reduces the risk that MIDI import or preset/record metadata accidentally teaches users about the private backing-slot bridge while the Arranger is moving toward lane-owned Instruments.
- MIDI 1.0 implementation status is unchanged functionally and remains test-clean; this was a customer-facing clarity pass around the same backend.
2026-07-25 16:48 - Available Instrument Wording
- Unassigned backing choices now appear as
AVAILABLE INSTRUMENT ##instead ofLANE-READY INSTRUMENT ##. - The closeout test now treats
LANE-READYas stale wording, keeping the customer-facing Instrument Bay direction tighter.
2026-07-26 00:18 - Active-Target Asset Loading
- Shared editor asset loads now have explicit active-target wrappers for sample, one-shot, and SoundFont actions.
- SoundFont path reads now also have an InstrumentSlot wrapper, reducing the need for lane-owned UI to call a Pad getter.
- Lane-owned instrument slots use instrument-slot load wrappers; visible Pad workflows still use Pad loaders.
- This keeps MIDI/Instrument Bay migration stable while the internal storage bridge is still pad-indexed.
2026-07-26 00:44 - Active-Target Sample Layer Editing
- Shared sample-layer operations now mirror the active-target asset-load rule: private Arrangement Instrument slots use InstrumentSlot wrappers, visible Pads use Pad wrappers.
- Covered operations include layer load, layer clear, all-layer reset, loaded-sample activation, add velocity layer, and spread layers evenly.
- Liftoff and Lunacy source loading now follow the same target-aware path, reducing the chance that a lane-owned synth source edit silently mutates the selected Drum Pad.
- Current MIDI/Instrument Bay confidence remains test-clean after MIDI_CLOSEOUT, MIDI_RECORD_TIMING, MIDI_HEALTH, MIDI_READINESS, and MIDI_PROTOCOL gates.
2026-07-26 01:05 - Sample Layer Regression Coverage
- MIDI_CLOSEOUT now includes an explicit sample-layer boundary check.
- Visible Pad layer edits remain possible through the Pad API, but InstrumentSlot sample-layer wrappers must reject visible Pads and only affect private Arrangement Instrument slots.
- This raises confidence in the lane-owned Instrument migration because shared editor layer controls now have test coverage against accidental Pad mutation.
2026-07-26 01:24 - Quasar Active-Target Wrapper Coverage
- Quasar now mirrors the other shared instrument asset workflows: visible Pads use Pad APIs, private Arrangement Instrument slots use InstrumentSlot wrappers.
- Shared editor Quasar actions now route through active-target helpers for loading, reveal-path lookup, name/info readout, patch-name hydration, and patch fingerprinting.
- MIDI_CLOSEOUT now has a Quasar boundary flag so visible Pad targets cannot accidentally pass through InstrumentSlot Quasar APIs.
2026-07-26 01:43 - Effects Send Bank Wording
- The Effects page no longer labels its lower send editor as selected Pad sends.
- It now uses selected Source language, which is accurate during the bridge phase because both visible Drum Pads and private Arrangement Instrument slots can feed the shared returns.
- No audio routing changed in this pass; the intent was to remove one more customer-facing Pad-proxy leak.
2026-07-26 02:02 - Effects Source Dropdown Refresh
- The selected-source dropdown now distinguishes Drum Pad targets from lane-owned Instrument targets.
- Lane-owned entries reuse the Arrangement Instrument label, so the user can see Mixer Channel, MIDI Channel, engine, and patch identity from the Effects page.
- The chooser refreshes when Arrangement lane instrument labels refresh, keeping shared effects source selection aligned with Instrument Bay work.
2026-07-26 02:28 - Mixer Strip Destination Labels
- Mixer channel strips now format their header according to what they are receiving.
- Non-drum Arrangement lane destinations display as
MIXER ##; drum-only/unassigned destinations can still display asPAD ##. - Tooltips now surface lane name, patch label, and MIDI channel, keeping Mixer identity aligned with lane-owned Instruments and Hardware/MIDI route summaries.
2026-07-26 02:42 - Top-Level Audio Tooltips
- The Mixer tab tooltip now describes lane, drum pad, and master channel strips.
- Reset Audio and Multi-Out tooltips now mention lane instruments plus drum pads, reducing another top-level pad-proxy wording leak.
2026-07-26 03:10 - Piano Roll Lane-Owned Instrument Receipt
- Arrangement-sourced Piano Roll clips now show a disabled Instrument receipt that includes the owning lane name plus Mixer/MIDI identity.
- This keeps the lane badge as the place to change Instruments while the Piano Roll reports the active target without reopening the top-inspector confusion.
- Verified with MIDI_CLOSEOUT.
2026-07-26 03:39 - Record Capture Core Fast Gate
- Added
MIDI_RECORD_CAPTURE_COREas a fast gate for long-clip recording, first-measure count-in capture, and four-measure note/expression capture. - The gate passed and gives us a quicker sanity check for live recording placement before running the slower full timing suite.
2026-07-26 04:15 - Direct Controller Hardware Monitoring
- Implemented immediate live hardware mirroring for armed lanes routed to External or Internal+External.
- External-only live monitoring and recording now suppress internal voice starts instead of secretly playing the lane's internal engine.
- Pitch bend, poly aftertouch, channel pressure, mod wheel, sustain, expression, pan, volume, and ordinary CCs remain in the timeline-expression family and share the same live route discipline.
- Status: implemented and covered by fast MIDI gates; still needs Shane-side physical USB/DIN feel testing because controller/interface/audio-driver latency can live outside SpaceAge.
2026-07-26 04:38 - Two-Controller Live Route Isolation
- The fast MIDI capture gate now covers a lane pinned to one direct controller while a second direct controller is also open and active.
- Result: rejected-source live notes/CCs do not mirror to external hardware; accepted-source notes and pitch bend do mirror to the lane's forced output MIDI channel.
- Status: covered by MIDI_RECORD_CAPTURE_CORE.
2026-07-28 - Remaining Launch Blocker Summary
- MIDI Health now exposes
midiOneRemainingLaunchBlockersSummaryintoVar(), full reports, next-step reports, and hardware proof review copy. - The line is deliberately not a percentage. It names what remains: software blockers, UI-pending rows, launch receipts, hardware proof, real-file proof, live-performance proof, and the separate MPE/MIDI 2.0 roadmap boundary.
- The MIDI Health panel now renders the same summary as a visible
BLOCKERSrow beneath the MIDI 1.0 completion boundary. - MIDI Protocol Coverage now takes the full health snapshot and displays the same summary in its blocker card, keeping the two diagnostics aligned.
- Status: implemented with AudioSelfTest coverage.
2026-07-28 - Automation Proof Script Is Model-Owned
MidiExpressionProjectSummarynow owns anautomationLaunchProofCopyBlock()run sheet for the Automation Final Editor launch proof.- The copy block defines PASS evidence for doorway targeting, Shared PTN/Clip Local/Lane Local ownership, edit/undo/redo, playback immediacy, import/export survival, pitch-bend hardware trust, review-only setup rows, and saved receipts.
- Status: implemented in model serialization and text reports with AudioSelfTest coverage.
2026-07-28 - Automation Proof Is Available From The Editor
- The Automation editor's
COPY REPORTnow appends the model-owned launch-proof run sheet. - Practical effect: the user can open Automation, edit or inspect rows, and copy the same launch-proof script from the context being tested.
- Status: UI copy path wired; focused build plus MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_PROTOCOL passed.
2026-07-28 - Health QA Copy Shares The Same Launch Proof
MidiHealthPanelCOPY QAnow appends the Automation Final Editor launch-proof block before the saved QA receipt ledger.- Practical effect: Shane can gather the finish-line MIDI checklist, automation proof script, and saved receipt ledger from one Health-panel copy action.
- Status: focused build plus MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_PROTOCOL passed.
2026-07-28 - Automation Copy Proof Is A Smaller Receipt Door
- The Automation editor now exposes
COPY PROOFas a direct cold-copy action for the Automation Final Editor launch-proof script. - Practical effect: testers can copy only the acceptance script without the full preflight/context report when they are doing focused Automation QA.
- Status: focused build plus MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_PROTOCOL passed.
2026-07-28 - Automation Proof Names Its Backend Guardrails
automationLaunchProofCopyBlock()now includes anAutomated guardrailssection that names the exact gates expected after Automation/MIDI changes: MIDI_HEALTH, MIDI_CLOSEOUT, MIDI_PROTOCOL, AUTOMATION_OWNERSHIP, and AUTOMATION_RESTORE.- The block also names the two receipt keys that matter for this closeout slice:
midi.validation.auto_lanesandmidi.closeout.qa.midi_auto_final_editor. - The copy text stays honest about the boundary: automated gates protect regressions, but they do not replace human PASS receipts, real-file import/export proof, or physical controller/hardware proof.
- Status:
codex-build-selftest.ps1, MIDI_HEALTH, MIDI_CLOSEOUT, MIDI_PROTOCOL, AUTOMATION_OWNERSHIP, and AUTOMATION_RESTORE passed.
2026-07-28 - Automation Proof Doorways Are Visible In Health
- Added
automationProofCopySurfaceSummary()to the MIDI expression summary and mirrored it into the top-level MIDI Health serialization. - The MIDI Health cockpit now shows an
AUTO PROOFrow that points to AutomationCOPY PROOF, AutomationCOPY REPORT,COPY QA, and MIDI HealthCOPY LAUNCH. - Status:
codex-build-selftest.ps1, MIDI_HEALTH, MIDI_CLOSEOUT, MIDI_PROTOCOL, AUTOMATION_OWNERSHIP, and AUTOMATION_RESTORE passed.
2026-07-28 - MIDI Closeout Copy Doors Are Visible In Health
- Added
currentFinishLineProofCopySurfaceSummary()to the MIDI Protocol Coverage report and mirrored it into the top-level MIDI Health serialization. - MIDI Health now shows a
COPY DOORSrow that distinguishes the finish-line QA session, compact closeout summary, launch validation run order, and focused Automation proof. - QA and Closeout copied text now include the same copy-door summary.
- Status:
codex-build-selftest.ps1, MIDI_HEALTH, MIDI_CLOSEOUT, MIDI_PROTOCOL, AUTOMATION_OWNERSHIP, and AUTOMATION_RESTORE passed.
2026-07-28 - MIDI Health Shows The Score Denominator Boundary
- The MIDI Health cockpit now shows a
SCORE NOTErow using the existing model-owned progress truth summary. - Top-level MIDI Health serialization now exposes
midiScorecardClarificationandmidiProgressTruthSummary. - This keeps the status story honest: backend foundation, tracked model-row coverage, release-proof closeout, hardware proof, and launch receipts are different denominators.
- Status:
codex-build-selftest.ps1, MIDI_HEALTH, MIDI_CLOSEOUT, and MIDI_PROTOCOL passed.
2026-07-28 - MIDI Closeout Fast Gate Runner
- Added
tools/run-midi-closeout-fast.ps1to run the recurring closeout gate pack from one command. - The runner supports
-NoBuildfor fast follow-up passes and-ReportTagso related reports are easy to identify. - Status: script added and verified with the current no-build MIDI closeout gate pack.
2026-07-28 - MIDI Health Shows The Fast Gate Runner
MidiProtocolCoverageReportnow owns the fast gate runner summary instead of leaving the command only in docs.- The summary is visible in MIDI Health, copied in closeout reports, serialized in health/protocol payloads, and guarded by AudioSelfTest assertions.
- Status:
tools/run-midi-closeout-fast.ps1 -ReportTag codex-fast-model-20260728rebuilt AudioSelfTest and passedMIDI_HEALTH,MIDI_CLOSEOUT,MIDI_PROTOCOL,AUTOMATION_OWNERSHIP, andAUTOMATION_RESTORE.
2026-07-28 - Plain Text MIDI Handoff
- MIDI Health
toPlainTextNextSteps()andtoPlainTextReport()now printcurrentFinishLineProofHandoffSummary()directly. - The same handoff is guarded in
plainTextNextStepsandplainTextReportserialization, so non-GUI reports remain useful for launch QA. - Status: implemented; verify with
tools/run-midi-closeout-fast.ps1.
2026-07-28 - Launch Run Order Handoff
MidiProjectHealthSummary::midiLaunchValidationRunOrderCopyBlock()now printscurrentFinishLineProofHandoffSummary()before the launch validation run order.- Practical effect:
COPY LAUNCHno longer produces a detached checklist; it names the current closeout focus and fast verification path. - Status: implemented; verify with
tools/run-midi-closeout-fast.ps1.
2026-07-28 - Health Reports Carry The Same Proof Map
- The compact MIDI Next Steps and full MIDI Health report now include the same proof-copy surface summary and fast gate-runner summary used by clipboard/debug payloads.
- Guarded by AudioSelfTest assertions so the report path cannot quietly lose the handoff map.
2026-07-28 - COPY QA Naming Is Single-Source
- Automation proof summaries now use COPY QA for the finish-line QA packet, avoiding the older health-prefixed QA wording so the user sees one label for one action.
- AudioSelfTest guards both the direct summary and serialized health payload against reintroducing the old wording.
2026-07-28 - COPY QA Packet Is Health-Owned
MidiProjectHealthSummarynow owns the full COPY QA packet viamidiCloseoutQaCopyBlock().- The MIDI Health button copies that single packet instead of composing protocol text, Automation proof text, and receipt-ledger text in the editor.
- Status:
tools/run-midi-closeout-fast.ps1 -ReportTag codex-copy-qa-model-packet-20260728passed MIDI_HEALTH, MIDI_CLOSEOUT, MIDI_PROTOCOL, AUTOMATION_OWNERSHIP, and AUTOMATION_RESTORE.
2026-07-28 - Protocol COPY QA Wording Aligned
- MIDI Protocol Coverage
COPY QAhelper text now describes the full QA session packet rather than a narrow checklist. - The Protocol panel copy buttons now confirm with
COPIEDafter clipboard actions. - Status:
tools/run-midi-closeout-fast.ps1 -ReportTag codex-protocol-copy-wording-20260728passed MIDI_HEALTH, MIDI_CLOSEOUT, MIDI_PROTOCOL, AUTOMATION_OWNERSHIP, and AUTOMATION_RESTORE.
2026-07-28 - COPY LEDGER Packet Is Health-Owned
MidiProjectHealthSummarynow owns the saved MIDI QA ledger copy payload viamidiQaReceiptLedgerCopyBlock().- MIDI Health
COPY LEDGERcopies that health snapshot text directly, instead of refreshing and assembling the receipt store insidePluginEditor. - 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 Tooltip Is Model-Owned
- MIDI Health pending QA receipt actions now use
MidiProtocolQaReceiptActionStatehelper text inside the tooltip. - This keeps compact UI labels from becoming a second source of truth about receipt completion/saving semantics.
- 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 Tooltip Reflects The Health Model
- MIDI Health now refreshes the
COPY CLAIMtooltip from the current safe-public-claim status and helper text. - This keeps the proof button honest about whether the app is internal-only, launch-proof pending, hardware-proof pending, MIDI 1.0-only, or evidence-backed.
- 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 - MIDI Closeout Proof Direction
- MIDI 1.0 closeout now has a single next-proof packet that includes category, surface, action, receipt key, proof needs, focused gates, safety class, route proof, and copy text.
- This does not claim MIDI 1.0 is finished; it sharpens the remaining work path and keeps public claims blocked until saved evidence receipts pass.
2026-07-29 03:01 - Validation Handoff Uses NEXT PROOF
- MIDI closeout handoff now carries a single NEXT PROOF packet across health UI, protocol serialization, health serialization, plain-text reports, run-order copy text, and review-card copy text.
- This reduces ambiguity during validation: the next surface, receipt key, evidence requirement, gate, route proof, and claim boundary travel together.
2026-07-29 03:13:25 -05:00 - Closeout truth surface alignment
- NEXT PROOF now follows the saved QA receipt store. The health panel/report packet, next receipt, remaining queue, and run-order copy should all point at the same next proof target.
2026-07-29 03:26:41 -05:00 - First-action helper restored
- The first remaining MIDI action helper again exposes the backend focused gate and minimum PASS evidence, while NEXT PROOF remains receipt-aware.
2026-07-29 03:29:01 -05:00 - Health proof/receipt consistency
- Added a receipt-aware MIDI Health consistency signal that guards against stale NEXT PROOF instructions after QA receipts are saved.
2026-07-29 03:38:22 -05:00 - Proof requirement visibility
- MIDI closeout now has a compact proof-requirement summary adjacent to the launch-validation verdict. This is a customer-facing clarity layer, not a new backend blocker.
2026-07-29 - Launch proof action copy
- MIDI 1.0 backend closeout now exposes compact next-proof action lines in protocol coverage and project health serialization. This is not a new MIDI feature; it is the customer-facing proof runway for the remaining hardware, real-file, and live-performance receipts.
- Regression coverage now checks that the protocol report starts at midi.validation.auto_lanes, and that a saved AUTO PASS advances the action summary to midi.validation.controller_latency with real-hardware language.
2026-07-29 - Next-proof action copy block
- Project health now serializes midiLaunchValidationNextProofActionCopyBlock alongside the review-card copy block and run-order copy block. This makes the next manual proof target consumable by UI without requiring a human to reconstruct the test from several separate reports.
2026-07-29 - Cockpit card authority
- The MIDI launch validation cockpit card now owns nextProofActionLines, nextProofActionSummary, and nextProofActionCopyBlock. Regression coverage checks both pending proof state and all-PASS launch-receipt state so stale instructions are caught.
2026-07-29 - Structured MIDI readiness state
- The MIDI cockpit card now distinguishes PROOF BLOCKED, LAUNCH PROOF PASS / HARDWARE PROOF PENDING, and CLAIMS READY. Regression tests cover the blocked and launch-PASS-but-hardware-pending states.
2026-07-29 - Hardware/file/live proof badges
- The cockpit card now reports satisfied/total/remaining counts for hardware/device proofs, real-file/project proofs, and live-performance proofs. Tests cover blocked and all-PASS receipt states.
2026-07-29 - UI-ready proof badges
- MIDI launch validation now serializes structured proof-type badge rows for hardware/device, real-file/project, and live-performance requirements.
- The badge rows preserve the proof boundary: backend MIDI support can stay green while hardware/file/live proof still clearly reports what remains.
2026-07-29 - Next-proof checklist payload
- The MIDI cockpit now serializes a compact next-proof checklist alongside proof cards and proof badges.
- Pending proof rows report TODO checklist state; completed launch-proof rows report DONE state, keeping the human proof ritual visible without implying hardware/file/live proof is automatic.
2026-07-29 - Next-proof checklist routing metadata
- The MIDI launch cockpit checklist rows now carry explicit routing/action metadata, so the UI can wire each checklist item to the QA receipt doorway without parsing labels or copy blocks.
2026-07-29 - Display-ready cockpit dashboard
- MIDI Health now exposes display-ready launch validation dashboard strings in the cockpit card. These are intentionally redundant with the structured badge/checklist fields so UI can show a compact status panel immediately while richer widgets mature.
2026-07-29 - Plain-text cockpit dashboard
- MIDI Health now carries one consistent launch-proof dashboard across structured data, next-step copy, and the full health report.
- The customer-facing dashboard lines include readiness, proof-badge counts, next proof, next action, and blockers.
- This keeps the MIDI closeout UI honest: the text report can no longer omit the same launch-proof guidance shown by the cockpit card.
2026-07-29 - Next-proof checklist report surface
- The launch-proof cockpit checklist now has display-ready plain-text lines with status, detail, action button, and doorway label.
- Pending proof states show TODO rows such as OPEN PROOF; completed launch-proof states show DONE rows such as REVIEW LAUNCH PROOF.
- This reduces UI implementation risk because the same checklist can feed health reports, settings panels, and future proof dashboards.
2026-07-29 - MIDI launch validation UI handoff
- Project health now exposes
midiLaunchValidationUiHandoff, a single UI-ready packet for the MIDI Health / Launch Proof surface. It bundles the cockpit dashboard, checklist rows/lines, proof-card rows/lines, run-order rows, action copy, primary action labels, and public-claim boundary language so future UI does not have to stitch those fields together manually. - Regression coverage now asserts the pending proof handoff, including the distinction between checklist action text (
OPEN PROOF) and the primary action button (COMPLETE LAUNCH PROOF).
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.hardwareProofGateso the future MIDI Health UI can render the real-hardware proof boundary without scraping report prose. - The gate carries release-ready state, done/needed/ready counts, percent, first-needed action, checklist rows, run-order copy, and the Hardware Passport doorway.
- This keeps software launch-proof PASS visually separate from real hardware proof readiness and public-claim permission.
2026-07-29 - Beta Readiness Gate
- Added a structured betaReadinessGate to MidiProjectHealthSummary so beta blockers can be surfaced by app UI/tests without scraping Markdown.
- The gate intentionally remains conservative: public/beta readiness stays blocked while real hardware proof, instrument audio QA, Instrument Bay lane independence, UI clipping, Arrangement/Automation QA, save/load recovery, render/export proof, and packaging/legal hygiene remain open.
- Self-test coverage now protects the gate id, status, blocker count, first blocker, and publicClaimsAllowed=false contract.
2026-07-30 - Channel-Split Import Destination Contract
- Default melodic destinations are deterministic: MIDI channels 1-16 map to private Instrument source slots 64-79.
- UI and backend use the same mapping and availability predicate.
- The UI disables split commit when two selected melodic channels point at the same Instrument destination.
- The backend treats an explicit reviewed destination as strict. If it is occupied or duplicated at commit time, that channel is skipped with a review warning rather than silently rerouted.
- Automatic fallback remains available only when no explicit destination was reviewed.
- Exhausted Instrument pools are non-mutating: no lane, clip, or pattern payload is left behind.
- The review UI omits Instrument slots already owned by Arrangement lanes. It still guards against two checked source-channel rows selecting the same otherwise-unclaimed slot before commit.
Hardware sync-policy integrity follow-up, 2026-07-31: the processor wrapper now delegates to the canonical MidiHardwareSyncPolicyPreview builder instead of returning an empty preview. The editor binds preview and commit to one immutable proposed value set, receive-clock roles participate in confirmation, send-role CLOCK capability normalization matches persistence, clock-only output no longer requires transport-send, and the report states that an already-running transport may activate a confirmed role on the next audio block. The focused MIDI_SYNC_POLICY gate passes alongside MIDI closeout and MIDI health.
2026-07-31 - Automation Snapshot And Export Timebase Closeout
- Clip Local and Lane Local edits, copies, removals, and clears now republish the immutable sequencer snapshot immediately.
- Project restore publishes the fully reconstructed automation generation before playback, and sound-only restore clears stale Shared Pattern, Clip Local, and Lane Local payloads from both mutable state and playback snapshots.
- Resetting Arrangement lanes retires local automation before lane and clip identifiers can be reused.
- MIDI export now keeps Shared Pattern and Clip Local data source-relative while ranging Lane Local data once in absolute Arrangement time. This prevents shifted or duplicate lane automation in selected-clip, lane, and full-arrangement exports.
- Regression evidence:
AUTOMATION_OWNERSHIP,AUTOMATION_RESTORE,MIDI_CLOSEOUT, andMIDI_HEALTHpass.
2026-07-31 - Stable Automation Identity And Transactional Pattern MIDI Import
- Property updates through
setArrangementLaneandsetArrangementClipretain the existing positivelaneIdorclipId; insertion still allocates or validates a new identity. importPatternMidiparses accepted notes, drum steps, expression/setup events, and quarantined SysEx into local staging data before changing project state.- Accepted pattern payload commits under one
patternMutexacquisition and publishes one immutable pattern snapshot. Expression lane refresh happens after that commit. - A readable file with no accepted payload returns false without a checkpoint or mutation. A SysEx-only import updates only the vault and leaves the pattern unchanged.
- Full replacement still replaces drums, Piano Roll notes, Shared Pattern expression, and length while preserving chords. Partial drum-bank import still replaces only its 16-step drum/expression window and preserves the existing length floor.
- Focused proof is named
MIDI_IMPORT_TRANSACTION;AUTOMATION_OWNERSHIPalso attempts positive-ID rekeys and verifies that existing automation owners remain reachable.
2026-07-31 - Hardware Profile Delete Publication And Live Monitor Ownership
removeHardwareMidiProfilenow removes the registry entry, clears dependent Arrangement lane routes, refreshes cached sync/chase readiness, and publishes the sequencer snapshot under one deadlock-safe jointpatternMutex/midiProfileMutextransaction.- Hardware clock output refresh remains outside both locks so device-output work cannot extend the model transaction.
- Live melodic and drum-fallback voices keep the lane's remapped output channel for sound/output while using the incoming channel for sustain, expression, note ownership, and channel-mode control.
MIDI_PROFILE_DELETE_PUBLICATIONchecks registry, mutable lane, playback snapshot, readiness summary, serialized state, and repeated-delete behavior.MIDI_RECORD_TIMINGincludes a non-recording Channel 4 input to Channel 15 output regression for sustain/expression ownership.- These focused gates prove deterministic state publication and channel ownership; they do not replace hardware timing/listening validation with multiple physical controllers.
2026-07-31 - Long-Pattern Quantization And Restore Recording Boundary
quantizePianoNotesnow clamps quantized note starts and ends to the target Pattern's stored length instead of the legacy 64-step drum grid.- The 256-step direct Arrangement recording fixture now applies post-record quantization and requires its note to remain near step 193 with its one-step length and 256-step horizon intact.
- Recording note, drum, and expression queue items carry the recording epoch captured by the realtime event handler.
- State restore directly cancels active/pending recording, resets count-in and recording targets, advances the epoch, and clears held-note bookkeeping under
patternMutexwithout closing held notes into restored content. - Queue workers compare their item epoch inside the commit lock; stale items return before model mutation, receipt updates, or snapshot publication.
MIDI_RESTORE_RECORDING_BOUNDARYdeterministically covers direct restore, undo restore, late note-off, and stale note/expression worker rejection.- Self-test queue holding controls ordering only; it does not claim production thread scheduling or device timing performance.
2026-07-31 - Count-In Block Boundary And Customer Passport Deletion
- Count-in completion now continues through the unconsumed part of the current audio block instead of returning early. At 48 kHz and 120 BPM, a one-step count-in inside an 8192-sample block activates recording and schedules Arrangement step zero at sample 6000, then advances the playhead in the same callback.
PLAYBACK_COUNTIN_BOUNDARYdirectly checks recording activation, step advancement, and the first recorded-measure metronome event at sample 6000.- MIDI Hardware now exposes
REMOVE PASSPORTbeside the Passport selector. The confirmation path and self-test call one editor-owned helper that validates, checkpoints, removes through the processor transaction, and refreshes editor models. - Deletion is deliberately blocked when either side of the model reports an attached SysEx snapshot. The UI explains that the snapshot must be explicitly detached or deleted in SysEx Vault; no Passport deletion silently detaches or deletes SysEx.
MIDI_PROFILE_DELETE_PUBLICATIONnow covers cancel/no-op, confirmed helper deletion, mutable/snapshot/serialized cleanup, undo restoration of the Passport and lane attachment, and attached-SysEx refusal with the snapshot preserved.- These gates prove deterministic in-process scheduling and project-state safety; they do not replace real audio-device buffer or external-hardware validation.
2026-07-31 - Realtime Recording Snapshot And Failed-Arm Transaction
- Note, drum, and expression capture read one immutable RecordingReadSnapshot per dispatch. It carries the recording Pattern horizon, armed-lane route, and Arrangement clip mapping and is published from record start plus Pattern/Arrangement publishers.
- Audio-callback recording no longer acquires patternMutex; accepted writes still use the existing bounded worker queues and commit under the model lock.
- Arrangement record target resolution preflights clip capacity, an unused Pattern payload, and timeline range before checkpointing or changing selection/routing. Failed target resolution therefore preserves project state and redo.
- REALTIME_RECORDING_NOLOCK holds patternMutex across a warmed 512-sample callback and requires note, CC, bend, and drum payloads to commit after release. PROJECT_PERSISTENCE covers failed record-arm state and redo preservation through the production REC callback.
- These deterministic gates prove in-process lock and transaction boundaries; they do not replace physical-controller latency validation.
Realtime Loop Snapshot Release Gate - 2026-07-31
- Loop assets and every callback-consumed loop setting publish together as one immutable
LoopPlaybackSnapshotgeneration. -
processBlock()captures one generation at block entry; edits made while that block is held cannot alter its asset or settings, and the following block observes the new generation. - Position, compressor envelope, low-pass memory, tape phase, and applied generation live in fixed audio-thread-owned
LoopRuntimeStatestorage and reset at transport boundaries or track-generation changes. - Replaced generations that overlap a callback retire to non-audio-owned storage and are reclaimed only by a later non-audio publisher after the callback epoch advances.
-
REALTIME_LOOP_SNAPSHOTpasses deterministically: generations4/4 -> 9/9, finite means0.25/-0.262495, callback lock/allocation/asset-destruction diagnostics0/0/0, retired snapshot destructions6. - Companion gates pass from the same
SampleSquadAudioTestbuild: shared effects signal,REALTIME_RECORDING_NOLOCK,MIDI_CLOSEOUT, andMIDI_HEALTH.
Release gate: powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\tools\run_tests.ps1 -Gate REALTIME_LOOP_SNAPSHOT. The callback allocation diagnostic is scoped to loop snapshot publication; it is not a process-wide heap profiler. Physical host stop/start and rapid asset-replacement soak remains manual beta evidence.
Realtime Instrument Asset Retirement Release Gate - 2026-07-31
- Sample/Liftoff/Lunacy, Quasar, mapped-sample, and SoundFont voice-start caches publish complete immutable generations with atomic exchange.
- Every started voice retains its captured generation; callback retirement drops leaf handles before the generation token, while replaced generations remain in writer-owned retirement storage until no callback or voice owns them.
- REALTIME_INSTRUMENT_ASSET_RETIREMENT passes: sample generations 82 -> 85 -> 86, SoundFont generations 1 -> 2 -> 3, finite old/new output, callback lock/allocation/destruction/TSF-close/mapped-unmap diagnostics 0/0/0/0/0, and non-audio reclamation 2/97.
- Quasar asset, SoundFont asset, 21-engine synth, REALTIME_LOOP_SNAPSHOT, REALTIME_RECORDING_NOLOCK, MIDI_CLOSEOUT, and MIDI_HEALTH companion gates pass from the same SampleSquadAudioTest build.
Release gate: powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\tools\run_tests.ps1 -Gate REALTIME_INSTRUMENT_ASSET_RETIREMENT. Allocation and lock diagnostics cover instrument publication helpers and custom asset deleters, not every process-wide allocation or lock.
2026-07-31 - Owner-Scoped Live Automation Remap
- A stored automation event's MIDI channel remains its authored source identity; it is not assumed to be the lane's current internal output channel.
- Live apply and delete/reset resolve Arrangement destinations from the automation owner: Shared Pattern clips, stable Clip Local
clipId, or stable Lane LocallaneId. - Each affected internal lane contributes
midiRoute.applyOutputChannel(lane.midiChannel). Equal channel destinations are deduplicated before controller, bend, or sustain state is changed. - Raw source-channel fallback is used only when the owner has no Arrangement destination. An external-only destination does not fall back into internal state, and the existing hardware-output reset path remains separate.
AUTOMATION_OWNERSHIPproves Channel 4 data applying and resetting on remapped Channel 12 across Shared Pattern, Clip Local, and Lane Local ownership, with no source-channel or unrelated-lane leakage.AUTOMATION_RESTORE,MIDI_CLOSEOUT, andMIDI_HEALTHpass from the same self-test build.