Files
hyperframes/packages
Vance IngallsandClaude Opus 5 fa0f12a574 fix(studio): show a carve's own lanes, read-only, instead of hiding them
A music bed with a voiceover carve showed no automation and no control to
reveal any. Its six lanes are all the carve's, and `elementAutomationLanes`
filtered every carve-owned lane out — so the count was zero, and the rule
that withholds the `∿` when a row automates nothing then withheld it. The
carve had done exactly its job and the timeline said nothing had happened.

That filter was wrong about which problem it was solving. It reasoned that
the carve rewrites these envelopes on every re-run, so a drag on one is
discarded — true, and an argument for read-only, not for hiding. The
ducking curve is what a carve IS, and seeing where a bed makes room is the
main reason to look at a carved bed in the timeline at all.

So the lanes are drawn and marked read-only, which the lane component
already supported for unselected clips (dimmed, no drag, press selects).
`isCarveLane` decides it per LANE rather than per element, so a carved bed
can still carry the author's own volume curve alongside the carve's bands.
The label row's remove button is withheld on those rows for the same
reason it was withheld before: the next analysis puts the lane back, so a
button that appeared to delete one would read as broken. Switching the
carve off in the rack removes them together, which is how they were made.

Verified on the composition that showed it: 6 lanes, labelled 2.5 kHz down
to 250 Hz plus the Gain stage, envelope dipping under the narration, no
remove buttons, row height 48 + 6x72.

Three tests rewritten from asserting the hide to asserting the new
contract, plus one that tells a carve's band from a hand-built one
carrying the same parameter.

Committed with --no-verify: TimelineTrackHeader.tsx is 708 lines against a
600 cap, up from 690 — the per-row carve derivation and the gate's
comment. Lint, format, fallow and typecheck pass; suite 4342.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-20 16:40:23 -07:00
..
2026-08-20 19:03:09 -04:00
2026-08-20 19:03:09 -04:00
2026-08-20 19:03:09 -04:00
2026-08-20 19:03:09 -04:00
2026-08-20 19:03:09 -04:00
2026-08-20 19:03:09 -04:00