diff --git a/docs/superpowers/specs/2026-09-06-epg-guide-m3u-design.md b/docs/superpowers/specs/2026-09-06-epg-guide-m3u-design.md index 18425a4da..73c98946f 100644 --- a/docs/superpowers/specs/2026-09-06-epg-guide-m3u-design.md +++ b/docs/superpowers/specs/2026-09-06-epg-guide-m3u-design.md @@ -87,7 +87,7 @@ interface EpgGuideScope { } interface EpgGuideWindow { - channels: EpgGuideChannel[]; + channels: readonly EpgGuideChannel[]; fromMs: number; // provider-clock instants (display offset already removed) toMs: number; } @@ -101,7 +101,9 @@ interface EpgGuideSource { loadCoverage(window: EpgGuideWindow): Promise>; // channel.ids with ≥1 programme readonly activeChannelId: Signal; activate(channelId: string): void; // switch playback; the guide stays open - searchPrograms?(query: string): Promise; // toolbar search hidden when absent + searchPrograms?(query: string): Promise; // toolbar search hidden when absent + // EpgGuideSearchHit = { channelId: string | null; program: EpgProgram } — the host + // supplies the row id when it can resolve one, so a hit can be highlighted later catchUp?: { canWatch(channel: EpgGuideChannel, program: EpgProgram): boolean; watch(channel: EpgGuideChannel, program: EpgProgram): void;