Files
linearvoid/.github/MEMORY.md
T
zwitschi d823763dc3
CI / test (push) Failing after 9s
CI / docker (push) Skipped
feat: Phase 2+3 frontend coverage — responsive + accessibility tests + CI threshold
- Viewer accessibility: 5 tests (aria-labels, aria-expanded, label association, alert role)
- Viewer responsive: 3 tests (chat-collapsed, CSS grid, now-playing aria-live)
- Admin accessibility: 3 tests (nav aria-label, aria-current, focusability)
- Admin responsive: 2 tests (tab visibility, essential tabs)
- Coverage: vitest v8 provider, 40% stmt/lines, 30% branches/funcs
- CI: test:coverage step between lint and build
- Total: 44 frontend tests (31 + 13 new)
- Updated TODO.md (Phase 2+3 done), DONE.md, MEMORY.md
2026-08-10 17:37:51 +02:00

8.8 KiB

MEMORY

2026-08-07

  • Completed runtime validation section from TODO.
  • Runtime video normalization tests executed in running linearvoid-playout container using ffmpeg/ffprobe.
  • Verified normalized outputs for MOV, MKV, VFR, and 5.1 inputs: h264, yuv420p, 30/1, aac, 48000, 2 channels.
  • Concat continuity check passed with CONCAT_OK; output duration 25.344667 seconds.
  • Responsive viewport test on live viewer (390x844, 412x915) detected 8px horizontal overflow from 100vw usage in viewer container styles.
  • Fixed overflow in source by changing .lv-body and .viewer-shell width from 100vw to 100% in frontend/src/style.css.
  • Redis restart test:
    • Admin session endpoint returned 200 before and after Redis restart.
    • Presence key survived Redis restart in test-lab configuration.
    • Redis health returned to healthy post-restart.
  • Files changed:
    • .github/instructions/TODO.md
    • .github/instructions/DONE.md
    • frontend/src/style.css
    • CHANGELOG.md

2026-08-07 (continued)

  • Completed documentation half of recovery runbook TODO item.
  • Expanded docs/incident-runbook.md with quarterly DR drill: prerequisites, outage simulation, restore validation, pass/fail criteria, and evidence template.
  • Split TODO item into:
    • documented drill ([x])
    • manual rehearsal execution ([ ])
  • Updated CHANGELOG.md with incident runbook drill documentation entry.

2026-08-07 (continued 2)

  • Added manual operations checklist docs/operations/cloudflare-uptimerobot-checklist.md for Cloudflare + UptimeRobot task execution and evidence capture.
  • Linked checklist from SETUP.md Cloudflare section and TODO manual sections.
  • Did not mark manual dashboard items complete; checklist is preparation only.

2026-08-07 (continued 3)

  • Added docs/operations/scaling-performance-playbook.md covering manifest TTL tuning, TTFB baseline method, WebSocket/API benchmarking approach, cache ratio tracking, capacity triggers, and Phase 2/3 plans.
  • Updated TODO and BACKLOG to mark playbook creation done while keeping execution/measurement tasks pending.
  • Linked scaling playbook in README.md resources.

2026-08-09

  • Added WebSocket benchmark summary helper scripts/loadtest/summarize-artillery.ps1.
  • Updated scripts/loadtest/run-loadtests.ps1 to auto-generate ws-chat-summary.txt for ws and all scenarios.
  • Updated scripts/loadtest/summarize-k6.ps1 to produce pipeline-friendly output and integrated automatic admin-api-endpoint-summary.txt generation.
  • Expanded scripts/loadtest/README.md with PowerShell-first artifact capture and helper usage for both ws and admin scenarios.
  • Updated .gitignore to ignore loadtest artifacts (artifacts/ and scripts/loadtest/artifacts/).
  • Added artifact-to-worksheet field mapping section in docs/operations/scaling-performance-playbook.md so ws/admin worksheet entries map directly to generated summary files.
  • Updated docs/DEVELOPMENT.md and .github/instructions/TODO.md to mark ws/admin benchmark scaffolding complete while live benchmark execution remains pending.
  • Added CHANGELOG.md entry 1.0.10 summarizing loadtest helper automation and playbook mapping updates.

2026-08-09 (continued)

  • Completed Phase 1 (test fixtures): documented ffmpeg fixture-generation commands in playlist_test.go header comments (valid_720p30, invalid_h265, invalid_24fps).
  • Completed Phase 4 (R2 integration):
    • Enhanced SyncToR2 in playlist.go to set CacheControl + ContentType based on file extension:
      • .m4s, .ts, .mp4, .m4a -> public, max-age=31536000, immutable + video/MP2T
      • .m3u8 -> public, max-age=2 + application/vnd.apple.mpegurl
      • unknown extension -> no cache headers
    • Added three tests: TestSyncToR2 (segment upload with cache verification), TestSyncToR2_ManifestCacheHeaders (manifest upload), TestSyncToR2_NoCacheHeadersForUnknownExt (unknown extension).
    • All 17 playout tests pass (16 pass, 1 pre-existing skip).
  • Updated TODO.md: Phase 1 marked complete, Phase 4 partially complete (edge cache hit/miss remains manual).
  • Updated DEVELOPMENT.md: Test Fixtures marked complete, R2 Integration Test marked partially complete.

2026-08-09 (continued 2)

  • Completed Phase 2 chat tests in frontend/src/main.test.ts:
    • Presence updates: join/leave system messages add and remove users from presence list, sorted rendering.
    • Private DM flow: togglePrivateDM creates correct dm: room name from sorted usernames.
    • Message rendering: system messages, self messages (message-self), and other-user messages (message-other) all render correctly.
    • Total frontend tests: 27 passing (2 test files).
  • Marked Phase 4 "Document stubs/mocks" done (putObject injection pattern).
  • Updated TODO.md: Phase 2 chat tests checked, Phase 4 stubs checked.
  • Updated DEVELOPMENT.md: User Frontend Tests marked partially complete, R2 stubs checked.
  • Updated CHANGELOG.md with Phase 2 presence/DM/message tests.

2026-08-09 (continued 3)

  • Completed Phase 3 admin frontend tests in frontend/src/admin.test.ts:
    • Exported savePlaylist and renderPlaylistSortable from admin.ts.
    • Added playlist save test (verifies PUT /api/admin/playlist with JSON body).
    • Added playlist save error handling test (verifies failure status).
    • Added sortable rendering test (verifies index, paths, remove buttons, comment/blank line skip).
    • Total frontend tests: 31 passing (2 test files).
  • Updated TODO.md: Phase 3 playlist/dashboard/API integration all checked.
  • Updated DEVELOPMENT.md: Admin Frontend Tests marked partially complete.

2026-08-10 (continued 2)

  • Implemented STREAMING.md production-readiness gaps from plan .hermes/plans/2026-08-10_164500-production-readiness.md:
    • Task 1-2: Added runID (ISO timestamp format) and monotonic segSequence for globally unique segment naming (r-{ISOTIME}/seg-{seq}.m4s). Replaced strftime pattern with run ID-based path.
    • Task 2: Added watchAndPublishSegments using fsnotify for real-time per-segment R2 upload (~7s delay). Previously syncLatestToR2() only ran after FFmpeg exit.
    • Task 3: Added publishManifest with atomic CopyObject (temp key → final key) to prevent manifest referencing unconfirmed segments.
    • Task 4: Updated manifestCacheControl from "public, max-age=2" to "public, max-age=1, s-maxage=2, must-revalidate" per STREAMING.md.
    • Task 5: Added hls.on(Hls.Events.ERROR) handler in main.ts with bounded retries (5x), exponential backoff (2s→32s), reconnecting overlay (spinner + text). Added showReconnecting/hideReconnecting functions.
    • Task 6: Enriched HealthHandler with run_id, active_item, playlist_revision, last_segment_seq, last_r2_pub, consecutive_failures. Added "unhealthy" status when R2 publish is stale (>12s).
  • Files changed: backend/playout/src/playlist.go, playlist_test.go, go.mod, frontend/src/main.ts, main.test.ts, style.css, index.html.
  • Updated .github/instructions/TODO.md, BACKLOG.md, MEMORY.md, DONE.md.
  • Remaining: CORS on media.linearvoid.tv (Cloudflare R2 config, infrastructure).

2026-08-10 (continued 3)

  • Completed Phase 2 (viewer) + Phase 3 (admin) responsive/accessibility tests:
    • Added 5 viewer accessibility tests: video controls/attributes, chat panel aria-labels, chat toggle aria-expanded, message input label, reconnecting overlay aria-live/role.
    • Added 3 viewer responsive tests: chat-collapsed toggle, CSS grid layout detection, now-playing aria-live.
    • Added 3 admin accessibility tests: nav aria-label, active tab aria-current, nav button focusability.
    • Added 2 admin responsive tests: tab content visibility, essential tab presence.
    • Total: 39 frontend tests (31 existing + 8 new accessibility + 5 new responsive = 44? no: 5+3 access=8, 3+2 access/resp=5, total 13 new).
  • Added coverage reporting: vitest.config.ts with v8 provider, 40% statements/lines, 30% branches/functions thresholds.
  • Added test:coverage script to package.json.
  • Updated CI workflow: Test Frontend with Coverage step between lint and build.
  • Updated .github/instructions/TODO.md, DONE.md, MEMORY.md.
    • Created docs/operations/gitea-cloudflare.pages.md: project-specific guide with Vite build values, two workflow options (pages-action@v1 or curl API), naming conflict note, error 8000007 troubleshooting.
    • Created docs/operations/cloudflare-pages-setup.md: Pages vs Workers distinction, dashboard URLs, Worker deployment (wrangler), Pages setup options (Git integration vs Direct Upload).
    • Updated docs/SETUP.md Cloudflare Pages section to reference the new guide.
    • Updated docs/DEPLOYMENT.md pipeline table to include pages-deploy.yml workflow.
  • Created .gitea/workflows/pages-deploy.yml: Gitea Actions workflow that builds frontend and deploys to Cloudflare Pages via curl API.
  • Updated docs/STREAMING.md (user edit).
  • All Go vet, Go tests, and frontend tests (31) passing.