Skip to content

feat(gui): add Live Now One Guide view - #202

Merged
Jumpstile merged 5 commits into
mainfrom
feature/issue-200-one-guide-slice2
Oct 1, 2026
Merged

Jumpstile merged 5 commits into
mainfrom
feature/issue-200-one-guide-slice2

Conversation

@Jumpstile

@Jumpstile Jumpstile commented Sep 30, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Add a TV-friendly Live Now screen backed by the versioned, read-only One Guide API, including bounded pagination and fail-closed response checks.
  • Add accessible programme cards, UTC times, keyboard navigation, details/back focus restoration, loading/empty/error/retry states, and no playback or tuning action.
  • Derive One Guide TypeScript output types from the canonical JSON Schema and generate an Ajv standalone validator at development time. The checked-in generated validator uses static imports and no runtime eval/Function, compatible with the WebView CSP.
  • Correct Windows Task Scheduler platform detection to use the runtime platform API rather than $env:OS; add a regression test. This fixed the pinned full-suite run on a Windows host where $env:OS is absent.
  • Record API/UI performance evidence and fixture/hardware caveats in engineering docs.

Closes #200.

Verification

  • Pester 5.7.1 with $env:OS absent: 870 passed, 0 failed.
  • GUI: 96 unit tests passed; TypeScript typecheck and production build passed. Schema drift check passed.
  • Chromium E2E: 10 passed, including axe checks for list/details, GET-only API behavior, pagination, keyboard navigation, details and focus restoration.
  • Production-preview fixture run: first visible content 173.7 ms, full list 179.2 ms; mock API resource durations 6.6 ms and 5.4 ms.
  • Warm in-process API route against a temporary accepted-guide fixture, 40 samples/page: 100-item page p50 80.00 ms / p95 89.48 ms; final 1-item page p50 18.10 ms / p95 22.52 ms. Not HTTP-socket or SER8 measurements.
  • Changed documentation/manifests pass targeted Prettier. The root Prettier command locally also scans ignored Tauri-generated schemas/build output, which fail formatting; the hosted CI run on the clean checkout remains authoritative for that root gate.

Local GUI checks ran under Node 26.10.0, outside gui/package.json's Node >=22 <23 range. .github/workflows/powershell-ci.yml pins Node 22; hosted CI remains the supported-runtime check.

Product intent-fit audit

  • Intended behavior: show currently-airing accepted-guide entries; allow safe details navigation; do not start playback or change state.
  • Entry points: gui/src/App.tsx, gui/src/app/navigation.ts, gui/src/app/oneGuide.ts, gui/src/pages/LiveNowPage.tsx, and the existing versioned /api/one-guide read routes in Get-ChannelForgeWebResponse.
  • Safety boundary: read-only GETs over the accepted One Guide projection. No provider requests, playback/tuning, accepted-state mutation, guide publication, downstream writes, or output-file writes. The client validates full schema fields plus query and cross-page pagination invariants.
  • Redaction: UI displays safe title/category/source/time fields; it does not render raw IDs, hashes, provider URLs, private paths, or backend error details.
  • Disposition: PASS. Performance numbers use fixtures; no SER8 hardware measurement is claimed or required for this UI slice.

…own details requests

- List pages after offset 0 require at+generation cursor; changed accepted generation returns 409 and the browser restarts (max 3 attempts). Opaque X-ChannelForge-Generation token, not an accepted hash.

- D-pad: first arrow after launch focuses the active nav item; Up/Down move, Right enters content, Left from first card column returns.

- Details: only newest request owns the dialog; supersede, Escape, Back abort pending requests.
@Jumpstile
Jumpstile merged commit dac1466 into main Oct 1, 2026
2 checks passed
Jumpstile added a commit that referenced this pull request Oct 1, 2026
Regenerated One Guide types/validator from the merged expanded schema.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

One Guide Slice 2 — read-only Live Now browser view from the versioned guide API

1 participant