# Sequencer Recording Mode

Task: `TODOS.phase-72.72.15.2.9`

Sequencer recording mode is a V2Editor TimelineVisualizer auto-key surface for
capturing viewport object movement and edited property values while a recording
take is active. It keeps explicit recording state, arms a target track, and
turns captured viewport/property values into sequencer keyframes at the current
frame.

## Runtime API

- Panel spec: `FV2SequencerRecordingModePanelSpec`
- State: `FV2SequencerRecordingModeState`
- Request: `FV2SequencerRecordingModeRequest`
- Result: `FV2SequencerRecordingModeResult`
- Action enum: `EV2SequencerRecordingModeActionType`
- Issue enum: `EV2SequencerRecordingModeIssueType`

`ApplySequencerRecordingModeRequest` accepts the current sequence, panel spec,
recording state, and an action request. Start/stop/toggle actions update the
recording state. Capture actions require active recording and auto-key, validate
the armed track and binding, then create or replace a keyframe at the current
frame.

## Behavior

- The panel spec targets `TimelineVisualizer`, shows a recording indicator, and
  requires an armed track.
- Viewport transform capture records vector/rotator movement values from the
  editor viewport into the selected track.
- Property capture records scalar, color, bool, name, string, or enum values
  into the selected property track.
- Auto-key creation uses deterministic take/track/frame key ids for new
  keyframes.
- Existing keyframes at the current frame can be replaced when requested, or
  rejected as duplicate frame captures.
- Locked tracks reject capture while still allowing recording state to be
  stopped or toggled.
- Result state tracks recorded keyframe ids so undo/redo and UI selection can
  identify the captured edits.

The default QA fixture uses `Seq.DataModel.CouncilIntro`, take
`Take.Recording.Cassia`, track `Track.Cassia.Transform`, binding
`Binding.Actor.Cassia`, and frame `45` for viewport transform recording. It also
captures a FOV property keyframe on `Track.HeroCamera.FOV`.

## QA Inventory

- State: verify initial stopped state, start recording, active take id, armed
  track, and stop recording.
- Viewport capture: verify moving the selected object creates a vector keyframe
  at the current frame and records the key id in state.
- Replacement: verify capture can replace an existing current-frame keyframe
  without changing keyframe count.
- Property capture: verify property values can create keyframes on a property
  track while recording is active.
- Off-path: reject capture when recording is inactive, auto-key is disabled, a
  duplicate frame is not replaceable, or the target track is locked.

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