# Sequencer Hotkeys

Task: `TODOS.phase-72.72.15.2.8`

The sequencer hotkey surface is a V2Editor TimelineVisualizer command model for
keyboard-driven timeline editing. It maps validated input chords to named
sequencer actions, resolves commands by action or chord, and returns the
resulting playback, playhead, selection, and sequence mutation state.

## Runtime API

- Binding spec: `FV2SequencerHotkeyBindingSpec`
- Panel spec: `FV2SequencerHotkeyPanelSpec`
- Request: `FV2SequencerHotkeyRequest`
- Result: `FV2SequencerHotkeyResult`
- Action enum: `EV2SequencerHotkeyActionType`
- Issue enum: `EV2SequencerHotkeyIssueType`

`ApplySequencerHotkeyRequest` accepts a sequence, hotkey panel spec, and
request. The request can name an action directly or provide an input chord for
lookup. The result preserves the updated sequence and reports command id,
normalized chord, playhead frame, selection, and mutation flags.

## Default Chords

- `Space`: play/pause
- `Period`: next keyframe
- `Comma`: previous keyframe
- `S`: set keyframe on the selected track at the current frame
- `Delete`: delete selected keyframes or the keyframe under the playhead
- `Ctrl+K`: split the selected track at the current frame

## Behavior

- The panel spec targets `TimelineVisualizer`, shows shortcut hints, and
  validates duplicate input-chord conflicts.
- Play/pause toggles playback state without mutating sequence data.
- Next/previous keyframe navigation can scope to the selected track or search
  all visible keyframes when no track is selected.
- Set keyframe creates a deterministic key id at the current frame, copies the
  nearest keyframe value when available, sorts the track by frame, and selects
  the new keyframe.
- Delete keyframe removes selected keyframes, or the keyframe at the current
  playhead frame when no explicit selection is present.
- Split track partitions keyframes into left and right track rows and selects
  the new right-side track.
- Locked tracks reject set, delete, and split mutations while still allowing
  navigation.

The default QA fixture uses `Seq.DataModel.CouncilIntro`, selected track
`Track.Cassia.Transform`, and frame `45` to prove navigation to frame `90`,
mid-track keyframe insertion, selected-keyframe deletion, and `Ctrl+K` split
behavior.

## QA Inventory

- Bindings: verify every default chord maps to the expected command and
  duplicate chord validation is active.
- Playback: verify play/pause toggles `bPlaying` and does not mutate the
  sequence.
- Navigation: verify next/previous keyframe moves the playhead and selects the
  target keyframe.
- Keyframe mutation: verify set keyframe adds a selected keyframe and delete
  removes selected or playhead keyframes.
- Split track: verify `Ctrl+K` creates a right-side split track with later
  keyframes and selects it.
- Off-path: reject unknown chords, duplicate set-keyframe frames, split without
  a selected track, and locked-track deletion.

`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-hotkeys.py`
- `V2.Editor.Sequencer.Hotkeys`
- `python3 V2/ue/Tools/check-v2-editor-module.py`
- `python3 V2/ue/Tools/check-v2-ci-workflow.py`
