feat(timeline): add automation lane commands with unified reduction#6430
Merged
Conversation
Add InsertAutomationLane / RemoveAutomationLane transaction commands. Both validate their targets (sequence, track, and — for insert — the referenced device placement) before staging, allocate the lane and its points as owned Project identities, and produce inverse commands so undo/redo and journal replay restore the lane, its points, and their tombstone ownership exactly. Automation lane payloads compare bit-exactly (float bits via std::bit_cast), so a re-authored point that differs only in the sign of a zero is not treated as equal. Unify the transaction reduction helpers (target_error, identity insert / deactivate planning, error construction) into transaction_reduction_support so clip and automation reductions share one implementation, and move automation command reduction into transaction_automation_internal. Automation identities ride the canonical parent_id (a lane's parent is its track, a point's parent is its lane); target_error validates a located identity against an expected one whose parent_id is computed the single canonical way via immediate_parent_id, and tombstone reactivation reuses ItemLocation::has_same_owner. Skill-Update: skip skill=web-plugins reason="core/timeline automation-command sources wired into WAM/WCLAP source lists per the skill's existing source-closure discipline; no new web-plugins concern" Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TVQHcnbg3t6TvXsdv6gXhS
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.
Summary
Adds
InsertAutomationLane/RemoveAutomationLanetransaction commands and unifies the transaction reduction helpers. Second slice of the Creative Timeline Engine Phase 2 attachment replay, stacked on PR-2 (#6428).std::bit_cast) — a re-authored point differing only in the sign of a zero is not treated as equal.target_error, identity insert/deactivate planning, error construction) move intotransaction_reduction_supportso clip and automation reductions share one implementation; automation command reduction lives intransaction_automation_internal.Re-based onto arch-prep's identity model (replay by intent)
Same as PR-2, this is a replay-by-intent, not a raw cherry-pick. The checkpoint threaded the dropped
automation_lane_idfield and used designated initializers onItemLocation(now a non-aggregate). Re-based to the canonicalparent_id:parent_id— a lane's parent is its track, a point's parent is its lane — built viaimmediate_parent_id(the single parent-computation path).target_errorvalidates a located identity against an expected one whoseparent_idis computed the one canonical way (strict on parent_id + coordinates, matching arch-prep's prior inline check); tombstone reactivation reusesItemLocation::has_same_owner.DeviceParameterTarget::device_placement_id()accessor → the field (PR-2's rename).Squash + build wiring
a4503b18d(commands) squashed with1d9c1f8c8(reduction refactor): the refactor deletes the 21 linesa4503b18dadded totransaction_internal.hpp, so that file nets back to its main content (verified identical) rather than churning through review.transaction_automation_internal.cpp,transaction_reduction_support.cpp) into all four source lists (lib, no-exceptions object lib, WAM, WCLAP) and registeredtest_timeline_automation_commands.cpp. In the original checkpoint split,transaction_automation_internal.cpp's wiring landed in a later commit; wiring it here keeps PR-3 self-contained and building.Tests
test_timeline_automation_commands.cpp(6 cases): command compare/retain, float-bits collision, atomic insert publishing owned identities, insert undo/redo/replay preserving tombstone ownership, remove undo/redo/replay.pulp-test-timeline-commands10224 assertions / 15 cases,pulp-test-timeline-transactions4041 / 8,pulp-test-timeline-model10395 / 25.🤖 Generated with Claude Code
https://claude.ai/code/session_01TVQHcnbg3t6TvXsdv6gXhS
🔎 Provenance
claudem3/Volumes/Workshop/Code/pulp-pr1c66f4a64-25ea-42e5-b184-d48611a066a2Resume
Jump to this tab
Relaunch (any agent)
Restore URL — https://claude.ai/code/session_01TVQHcnbg3t6TvXsdv6gXhS
stamped 2026-07-21 12:24 UTC