# Sequencer Curve Editor

Task: `TODOS.phase-72.72.15.2.4`

The sequencer curve editor is represented by a V2Editor TimelineVisualizer panel
spec and deterministic sampled model. It visualizes interpolation curves from
`FV2SequencerTrackSpec` keyframes and `FV2SequencerInterpolationSpec` presets,
then exposes sampled points, tangent handles, and preset curves for editor UI
rendering.

## Runtime API

- Panel spec: `FV2SequencerCurveEditorPanelSpec`
- Viewport spec: `FV2SequencerCurveEditorViewportSpec`
- Sampled point: `FV2SequencerCurvePoint`
- Tangent handle: `FV2SequencerCurveHandleSpec`
- Preset: `FV2SequencerCurvePresetSpec`
- Model: `FV2SequencerCurveEditorModel`
- Issue enum: `EV2SequencerCurveEditorIssueType`

`BuildSequencerCurveEditorModel` samples evaluated interpolation values across
the focused track's first-to-last keyframe span, maps those values into graph
coordinates, and attaches tangent handle positions derived from the resolved
interpolation spec.

## Behavior

- Curve visualization samples `EvaluateSequencerKeyframeInterpolation` into
  stable `CurvePoints`.
- Tangent handles expose arrive/leave control points and graph-space handle
  positions for each keyframe.
- Preset curves include linear, step, cubic ease-in-out, and custom camera ease.
- Selected keyframe focus resolves the interpolation spec that should drive the
  curve display.
- Validation reports invalid sequences, missing tracks, missing keyframes,
  unsupported value types, bad value bounds, and invalid sample counts.

The default QA fixture uses `Seq.DataModel.CouncilIntro`,
`Track.HeroCamera.FOV`, nine samples, midpoint frame `60`, and four preset
curves.

## QA Inventory

- Visualization: sample the camera FOV curve into nine viewport-mapped points
  and verify the midpoint sample.
- Tangent handles: expose one handle per keyframe using resolved cubic control
  points.
- Presets: expose linear, step, cubic ease-in-out, and custom camera ease.
- Off-path: reject invalid sample counts, missing tracks, missing keyframes, and
  unsupported event/name curves.

`js_repl` Playwright interaction was unavailable in this session and the
affected surface is Unreal editor data rather than browser-rendered UI, so
verification is through UE editor automation and contract gates.

## Verification

- `python3 V2/ue/Tools/check-v2-sequencer-curve-editor.py`
- `V2.Editor.Sequencer.CurveEditor`
- `python3 V2/ue/Tools/check-v2-editor-module.py`
- `python3 V2/ue/Tools/check-v2-ci-workflow.py`
