Re-lands #1771, which was merged into the branch of #1768 after #1768
itself had been squash-merged and so never reached master:
- Native: the macOS addon, the Windows libmpv addon and the frame-copy
helper observe mpv `chapter-list`; snapshots carry
`chapters: [{ timeSeconds, title? }]`, cleared on every START_FILE.
- Main: `normalizeEmbeddedMpvChapters` validates the field into
`EmbeddedMpvSession.chapters` (older binaries give []).
- Renderer: `buildChapterTimelineSegments` maps chapters to timeline
segments; host catch-up segments keep precedence, and a closing-credits
chapter times the Up next card.
Chapters flow through the same timelineSegments path as catch-up
programmes, so they get #1854's keyboard and screen-reader naming,
bounded label and 3:1 separators; specs and the frame-copy E2E now
assert the chapter name reaches the slider's aria-valuetext. The packaged
Linux smoke registers each media server for cleanup as it starts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>