Skip to content

feat(timeline): add automation lane commands with unified reduction#6430

Merged
shipyard-local[bot] merged 1 commit into
mainfrom
feature/timeline-lane-commands
Jul 21, 2026
Merged

feat(timeline): add automation lane commands with unified reduction#6430
shipyard-local[bot] merged 1 commit into
mainfrom
feature/timeline-lane-commands

Conversation

@shipyard-local

@shipyard-local shipyard-local Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds InsertAutomationLane / RemoveAutomationLane transaction commands and unifies the transaction reduction helpers. Second slice of the Creative Timeline Engine Phase 2 attachment replay, stacked on PR-2 (#6428).

  • Both commands 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 emit 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) — a re-authored point differing only in the sign of a zero is not treated as equal.
  • The transaction reduction helpers (target_error, identity insert/deactivate planning, error construction) move into transaction_reduction_support so clip and automation reductions share one implementation; automation command reduction lives in transaction_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_id field and used designated initializers on ItemLocation (now a non-aggregate). Re-based to the canonical parent_id:

  • Identity ownership rides parent_id — a lane's parent is its track, a point's parent is its lane — built via immediate_parent_id (the single parent-computation path).
  • target_error validates a located identity against an expected one whose parent_id is computed the one canonical way (strict on parent_id + coordinates, matching arch-prep's prior inline check); tombstone reactivation reuses ItemLocation::has_same_owner.
  • All checkpoint designated-inits → positional constructors; DeviceParameterTarget::device_placement_id() accessor → the field (PR-2's rename).

Squash + build wiring

  • a4503b18d (commands) squashed with 1d9c1f8c8 (reduction refactor): the refactor deletes the 21 lines a4503b18d added to transaction_internal.hpp, so that file nets back to its main content (verified identical) rather than churning through review.
  • Wired both new sources (transaction_automation_internal.cpp, transaction_reduction_support.cpp) into all four source lists (lib, no-exceptions object lib, WAM, WCLAP) and registered test_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

  • New 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.
  • Full Release build (all targets) green. Timeline + playback suites pass: pulp-test-timeline-commands 10224 assertions / 15 cases, pulp-test-timeline-transactions 4041 / 8, pulp-test-timeline-model 10395 / 25.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TVQHcnbg3t6TvXsdv6gXhS


🔎 Provenance

Agent claude
Machine m3
Tab Timeline v3
Directory /Volumes/Workshop/Code/pulp-pr1
Session c66f4a64-25ea-42e5-b184-d48611a066a2

Resume

claude --resume c66f4a64-25ea-42e5-b184-d48611a066a2

Jump to this tab

cmux surface focus C0B3DA54-39AF-4DAA-8089-AA08DAB71968

Relaunch (any agent)

cmux surface resume get --surface C0B3DA54-39AF-4DAA-8089-AA08DAB71968

Restore URLhttps://claude.ai/code/session_01TVQHcnbg3t6TvXsdv6gXhS

stamped 2026-07-21 12:24 UTC

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
@shipyard-local
shipyard-local Bot enabled auto-merge (squash) July 21, 2026 12:24
@shipyard-local
shipyard-local Bot merged commit 87066cd into main Jul 21, 2026
30 of 43 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant