Stage 1 of #338. Game sync needs named places in a song: an event when
the playhead passes one, and a switch that jumps to one. This stage
adds the markers themselves. Games do nothing with them yet.
- A song has markers, each with id, name and tick. A song without
markers stores nothing for them. Two markers may share tick and
name, since nodes will name them by id.
- Markers change neither the sound nor the bake fingerprint.
- The song tab draws a strip under the ruler. A marker has a green
flag with its name and a faint line through the tracks. Tracks and
lanes sit 18 px lower. The ruler of the pattern tab is unchanged.
- Double click on an empty place adds a marker on the grid, with Alt
or Shift on the exact tick. Dragging moves it in one undo step.
- A click on a marker sets the start of playback there. A double click
renames it in the name dialog of the hierarchy groups.
- The context menu offers Play from here, Rename and Delete marker,
on an empty place Add marker. A tooltip shows the full name. The
wheel over the strip zooms time like the ruler.
- New agent commands add_song_marker, change_song_marker and
remove_song_marker. get_asset lists them under markers.
Tests:
- song-markers in core 6 and editor 4, 1 agent test, with the touched
song, agent and MCP tests 175/175
- 9 counter-probes, all compile, all red
- e2e 65 on atx: ALL PASSED, 70 checks, 3 new in 65g3. Counter-probe
where a dragged marker is not taken over: 65g3 red
- gate on atx: CHECK EXIT 0, 332 files, 5093 tests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>