fix(timeline): harden SDK and agent surfaces#6520
Merged
Merged
Conversation
Skill-Update: skip skill=web-plugins reason="Shared playback lowering only; web source closure and workflow are unchanged."
Skill-Update: skip skill=web-plugins reason="existing source-closure guidance already covers new timeline translation units"
Skill-Update: skip skill=web-plugins reason="No browser ABI or wasm behavior changes; existing mirrored source lists are unchanged."
Skill-Update: skip skill=web-plugins reason="Native file journal is outside wasm source closure; no browser ABI or wasm behavior changes."
Add a registry-aware, allocation-light project summary scan for browsers and load admission. Enforce generic JSON and domain limits, count current timeline structures including takes, and preserve the existing deserialize hot path. Skill-Update: skip skill=web-plugins reason="timeline summary validation source closure only; no browser ABI or runtime behavior change"
Add the fourth agent-codegen surface as a pure projection of the canonical timeline schema manifest. The fixed five-operation MCP definition derives its document, command, and diagnostic vocabularies from the same JSON consumed by the TypeScript, CLI, and JS generators. The command envelope always uses its manifest-derived vocabulary. While no Command types are registered, an MCP-compatible object-valued reject-all subschema blocks every type name; populated vocabularies emit a non-empty enum. Positive versions and non-empty batches mirror the engine transaction contract. A shared drift-gate registration and focused selftest cover determinism, exact operations, complete domain projection, fail-closed command behavior, protocol-compatible schema shape, engine-valid envelopes, and mutation detection. Live tools/mcp registration remains a separate integration step. Skill-Update: skip skill=web-plugins reason="manifest-only MCP projection; no web-plugin runtime or build behavior changed" Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
MidiParameterMap already routed a MIDI Control Change to any parameter by id, with learn mode, an omni/channel filter, and an RT-safe lock-free apply. It always drove the parameter across its full range, though — a controller could not be scaled to a sub-range or inverted. Give each mapping a MidiMapScale: the normalized [0, 1] window a 0..127 CC sweep is mapped onto. Endpoints clamp into [0, 1]; min > max inverts. The default window is the full range, so existing mappings are unchanged and the prior tests pass untouched. Shaping stays a property of the target ParamRange, not the map. The apply path stays allocation-free (asserted with RtAllocationProbe). Deferred, not required by the mapping foundation: MIDI-learn UI, 14-bit (MSB/LSB) CC pairing, per-map response curves, MPE per-note expression routing, and OSC. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TVQHcnbg3t6TvXsdv6gXhS
…river code The Creative Timeline Engine's only automatable parameter surface is a hosted device parameter, addressed by timeline::DeviceParameterTarget whose param_id is the device's stable 32-bit host-facing ID — the same state::ParamID a StateStore uses and MidiParameterMap drives. There is no separate engine parameter identity to bridge, so the map already reaches every engine-automatable parameter with no per-controller or per-parameter driver code. Prove it against the engine type directly: source the id the engine would automate from a DeviceParameterTarget, register it in the device store, then learn a CC onto it and drive it through the generic learn/apply loop (full, scaled, and inverted windows). Links pulp::timeline so the proof uses the engine's own parameter identity rather than asserting the equivalence. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TVQHcnbg3t6TvXsdv6gXhS
Add a bounded arrangement example that composes audio and note tracks, document device placements, automation, tempo and meter changes, and SignalGraph delay compensation. The headless and Catch2 proofs assert aligned parallel paths, host latency reporting, transport changes, and allocation-free processing after prepare. Version-Bump: skip reason="bounded example and proof only; no shipped SDK surface changes"
Add a third reaper_smoke mode that sets a loop region on the REAPER timeline, starts playback, and performs scripted seeks (into/out of the loop and across the loop wrap) against a plugin that embeds a sequence. The plugin emits per-block transport markers carrying both the host playhead and its own sequence read position; the scraper asserts the sequence followed the host across every wrap/seek with no dropout — a free-running counter that ignores the host jump is caught as position drift and fails. This is the harness half of Phase-2 DoD Proof #2. Completing the proof additionally needs the embedded-sequence plugin and a real REAPER run; without both the mode degrades to SKIP (REAPER absent) or INCONCLUSIVE (no plugin markers) — never a false PASS. The pure scraper (analyze_seq_loop_log) and mode dispatch are unit-tested with synthetic REAPER logs (no REAPER, no plugin), including negative drift and dropout cases proving the scraper detects a bad loop/seek. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TVQHcnbg3t6TvXsdv6gXhS
Skill-Update: skip skill=playback reason="Windows atomic publication, cache capacity accounting, and host projection guards do not change reusable skill guidance"
Skill-Update: skip skill=playback reason="internal cache storage and capture accounting hardening do not change reusable skill guidance"
Skill-Update: skip skill=playback reason="sequence MIDI scratch sizing is internal runtime capacity enforcement and does not change reusable skill guidance"
Skill-Update: skip skill=playback reason="final converter cache accounting correction does not change reusable skill guidance"
Skill-Update: skip skill=vst3 reason="cross-format transport validity wiring is covered by adapter regression tests and does not change reusable setup guidance"
Skill-Update: skip skill=playback reason="journal recovery and precise external sync boundary fixes are covered by focused regressions and do not change reusable skill guidance"
Skill-Update: skip skill=playback reason="precise MIDI transport boundary behavior is pinned by the focused external-sync regression and does not change reusable skill guidance"
Skill-Update: skip skill=aax reason="AAX loop transport parity is a runtime wiring correction covered by the existing adapter contract and does not change setup guidance"
Skill-Update: skip skill=playback reason="fractional host-loop endpoint clamping is pinned by sequence projection tests and does not change reusable skill guidance"
Skill-Update: skip skill=web-plugins reason="browser playback closure parity and MTC bounds are enforced by existing closure and focused runtime gates without changing reusable browser guidance"
Skill-Update: skip skill=web-plugins reason="portable recording dependencies and journal path identity are enforced by focused closure and durability tests without changing reusable browser guidance"
Skill-Update: skip skill=audio-headless-debug reason="focused materialization and atomic-render regressions close the review findings without changing reusable DAW-debug guidance"
Skill-Update: skip skill=cli-maintenance reason="atomic output metadata preservation changes no CLI syntax, documentation, or reusable command workflow"
Skill-Update: skip skill=cli-maintenance reason="ACL capability handling changes no CLI syntax, documentation, or reusable command workflow"
Skill-Update: skip skill=cli-maintenance reason="private temporary permissions and loop validity change no CLI syntax, documentation, or reusable command workflow"
Skill-Update: skip skill=code-comments reason="public model validation and focused tests do not change reusable comment or documentation guidance"
Skill-Update: skip skill=cli-maintenance reason="atomic destination safety changes no CLI syntax, documentation, or reusable command workflow" Skill-Update: skip skill=auv3 reason="transport validity handling is covered by adapter regression tests and does not change reusable AUv3 setup guidance"
Modularize the timeline renderer, importer, persistence, MCP, and agent layers; enforce bounded and native-path-safe behavior; and expose generated CLI, MCP, SDK, and skill surfaces with focused regression coverage.
Skill-Update: skip skill=clap reason="CLAP bypass flag consistency is a host contract correction covered by focused regression tests; no reusable setup workflow changed"
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Modularize the timeline renderer, importer, persistence, MCP, and agent layers; enforce bounded and native-path-safe behavior; and expose generated CLI, MCP, SDK, and skill surfaces with focused regression coverage.
🔎 Provenance
codexm3Friday-Wrap/Volumes/Workshop/Code/pulp-cte-phase4d-20260723019f9331-3561-7812-9937-500dc43962ecResume
Jump to this tab
Relaunch (any agent)
stamped 2026-07-24 18:19 UTC