Skip to content

fix(studio): resolve flat-inspector review defects#2225

Open
vanceingalls wants to merge 1 commit into
07-10-fix_studio_debounce_flat_slider_drag_commits_to_prevent_rapid-fire_writesfrom
studio-flat-15-review-fixes
Open

fix(studio): resolve flat-inspector review defects#2225
vanceingalls wants to merge 1 commit into
07-10-fix_studio_debounce_flat_slider_drag_commits_to_prevent_rapid-fire_writesfrom
studio-flat-15-review-fixes

Conversation

@vanceingalls

@vanceingalls vanceingalls commented Jul 11, 2026

Copy link
Copy Markdown
Collaborator

Summary

Fixes all 15 confirmed defects from a max-effort adversarially-verified review of the flat-inspector stack (#2120#2190). One commit, stacked on top so the reviewed PRs below stay untouched.

Identity / data-loss cluster

  • "Hide all" no-op + lost-update racehandleHideAllSelected passed bare DOM ids/selectors into a lookup expecting scope-qualified timeline keys, and fired one un-awaited file write per element (last write wins). Now resolves through the canonical resolveTimelineIdForSelection (new timelineKeysForSelections helper) and toggleTimelineElementHidden accepts string[], hiding all keys in ONE atomic write via the existing setElementsHidden batch path.
  • Stale panel state committed onto the wrong elementPropertyPanelFlat was keyed by id ?? selector, colliding for id-less same-selector siblings. Now keyed by the same 4-part identity the legacy ColorGradingSection used (extracted as selectionIdentityKey, deduped at both call sites). Same fix for duplicate React keys in the multi-select list.
  • Variable bindings broken in flat Text — restored the legacy PromotableControl wrappers around Content / text Color / Font family, so var-bound values display from and commit to the variable default, and promote-to-variable ("◇ var") is back.
  • Custom mask destroyed by one click — flat Mask displayed an authored clip-path as "none" with a live reset icon. Now shows "custom" (re-select = guarded no-op), matching the legacy contract.
  • Timing edits shifted clips — while an element's range is inferred from its tweens, editing Duration/End flipped inference off and dropped start to 0; editing Start looked dead. Any edit on an inferred range now pins BOTH data-start and data-duration sequentially.
  • Live 3D-drag hit the wrong elementcreateGsapLivePreview used first-match querySelector; now resolves via selectorIndex.

FlatSlider cluster

  • Disabled slider still committedonPointerUp was missing the disabled guard the other handlers had (plus a draggingRef guard against orphan pointerups).
  • Mid-drag snap-back — the committed prop echoing back mid-drag reset the local draft, yanking the knob backwards; the sync effect now skips while dragging (draggingRef, cleared on up/cancel).
  • Unreachable reset buttons — reset rendered only inside {centerTick && …}; every non-centerTick Grade slider's onReset was dead. Slot now renders for centerTick || onReset.
  • No keyboard access — the pointer-only div now has tabIndex, aria-valuemin/max, and Arrow/Page/Home/End handling (sliderKeyTarget helper).

Smaller

  • HDR banner permanently suppressed — a transient /media/metadata fetch failure cached null forever; failures are no longer cached.
  • Style summary showed opacity 0 as 100%|| 1 falsy-zero bug → Number.isFinite guard.
  • "drag values to scrub" label removed — flat Layout rows have no scrubbing; the label lied.

Tests

  • New regression tests: batch hide (one atomic write, Hide 2 elements label), disabled-release no-commit, keyboard operation, mid-drag echo no-snap-back, non-centerTick reset reachable.
  • Full studio suite: 1689 passed; the 55 failures are the known pre-existing breakage on main (sdkResolverShadow / sdkCutover / etc.), untouched by this stack.

Review provenance: 50-agent max-effort workflow review (6 finder angles → 41 adversarial verifiers), 46/48 candidates confirmed, collapsed to 15 distinct defects — all fixed here.

Copy link
Copy Markdown
Collaborator Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant