review artifacts for PR #32
BIN
pr-32/artifacts/visual-diff/data-library-actual.png
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
pr-32/artifacts/visual-diff/data-library-diff.png
Normal file
|
After Width: | Height: | Size: 120 KiB |
BIN
pr-32/artifacts/visual-diff/data-library-expected.png
Normal file
|
After Width: | Height: | Size: 94 KiB |
57
pr-32/index.html
Normal file
@@ -0,0 +1,57 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>box-box Review Packet - Issue #9 / PR #32</title>
|
||||
<style>
|
||||
:root { color-scheme: dark; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background: #101010; color: #f4f4f4; }
|
||||
body { margin: 0; padding: 32px; }
|
||||
main { max-width: 1180px; margin: 0 auto; }
|
||||
h1 { font-size: 28px; margin: 0 0 8px; }
|
||||
h2 { margin-top: 32px; font-size: 18px; text-transform: uppercase; letter-spacing: .08em; color: #b6b6b6; }
|
||||
.result { display: inline-block; margin: 12px 0 20px; padding: 6px 10px; border: 1px solid #f6c400; color: #f6c400; font-weight: 700; }
|
||||
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 20px; }
|
||||
figure { margin: 0; border: 1px solid #2f2f2f; background: #151515; }
|
||||
img { width: 100%; display: block; }
|
||||
figcaption { padding: 10px 12px; color: #cfcfcf; font-size: 13px; border-top: 1px solid #2f2f2f; }
|
||||
ul { line-height: 1.7; }
|
||||
code { color: #f6c400; }
|
||||
.caveat { border-left: 3px solid #f6c400; padding-left: 12px; color: #dedede; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<h1>Local Review Packet: Issue #9 / PR #32</h1>
|
||||
<div>Reviewer harness: Codex · Implementer harness: Codex · Generated 2026-07-03</div>
|
||||
<div class="result">PASS WITH CAVEATS</div>
|
||||
|
||||
<h2>Gates</h2>
|
||||
<ul>
|
||||
<li>PASS: <code>go test ./internal/live ./internal/web</code></li>
|
||||
<li>PASS: <code>npm run test</code> in <code>frontend/</code> (22 files, 182 tests)</li>
|
||||
<li>PASS: <code>npm run build</code> in <code>frontend/</code></li>
|
||||
<li>PASS: <code>npm run test:e2e</code> (26/26)</li>
|
||||
<li>CAVEAT: <code>npm run test:visual</code> passed 11/12; mobile Data Library snapshot failed by height/image diff.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Track Map Screenshots</h2>
|
||||
<div class="grid">
|
||||
<figure><img src="screenshots/live-track-map-desktop.png" alt="Live track map desktop"><figcaption>Desktop live track map with selected VER telemetry.</figcaption></figure>
|
||||
<figure><img src="screenshots/live-track-map-mobile.png" alt="Live track map mobile"><figcaption>Mobile live track map with selected VER telemetry.</figcaption></figure>
|
||||
</div>
|
||||
|
||||
<h2>Empty State</h2>
|
||||
<div class="grid">
|
||||
<figure><img src="screenshots/live-empty-desktop.png" alt="Live empty desktop"><figcaption>Desktop no live session state.</figcaption></figure>
|
||||
<figure><img src="screenshots/live-empty-mobile.png" alt="Live empty mobile"><figcaption>Mobile no live session state.</figcaption></figure>
|
||||
</div>
|
||||
|
||||
<h2>Visual Diff Caveat</h2>
|
||||
<p class="caveat">The existing visual suite failed only on mobile Data Library, not on the live page. The diff is preserved below for inspection.</p>
|
||||
<div class="grid">
|
||||
<figure><img src="artifacts/visual-diff/data-library-diff.png" alt="Mobile data-library visual diff"><figcaption>Mobile Data Library visual diff from <code>npm run test:visual</code>.</figcaption></figure>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
BIN
pr-32/screenshots/live-empty-desktop.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
pr-32/screenshots/live-empty-mobile.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
pr-32/screenshots/live-track-map-desktop.png
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
pr-32/screenshots/live-track-map-mobile.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
50
pr-32/summary.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# Local Review Packet: Issue #9 / PR #32
|
||||
|
||||
Reviewer harness: Codex
|
||||
Implementer harness: Codex
|
||||
Result: PASS WITH CAVEATS
|
||||
Generated: 2026-07-03
|
||||
|
||||
## Scope Reviewed
|
||||
|
||||
PR #32 implements issue #9: web live track map on `/live`, with SignalR Position/CarData ingestion, a throttled `positions` SSE event, cached track outline bounds, SVG car dots, and tap telemetry.
|
||||
|
||||
## Local Gates
|
||||
|
||||
- PASS: `go test ./internal/live ./internal/web`
|
||||
- PASS: `npm run test` in `frontend/` (22 files, 182 tests)
|
||||
- PASS: `npm run build` in `frontend/` (`tsc --noEmit && vite build`)
|
||||
- PASS: `npm run test:e2e` (26/26)
|
||||
- CAVEAT: `npm run test:visual` passed 11/12; failed existing mobile Data Library snapshot due page-height/image diff. Not specific to the live track-map surface.
|
||||
|
||||
## Acceptance Criteria Review
|
||||
|
||||
- PASS: `/live` renders a track map with outline and team-colored car dots in a mocked live session.
|
||||
- CAVEAT: real live-session overlay alignment remains unverifiable offline; this still needs first-session verification against actual Position.z data.
|
||||
- PASS: selecting a car shows telemetry: speed, throttle, brake, DRS, gear.
|
||||
- PASS: off-track/stopped cars are visually distinguished in the mocked track-map screenshot.
|
||||
- PASS: graceful no-live-session state captured on desktop and mobile.
|
||||
- PASS: source check shows `/api/v1/track-outline` uses cached/local outline data; live path does not add direct OpenF1 calls during active session.
|
||||
|
||||
## Visual Artifacts
|
||||
|
||||
Open the local gallery:
|
||||
|
||||
```bash
|
||||
open /Users/aman/HomeBase/Projects/Personal/box-box/.review/issue-9-pr-32/index.html
|
||||
```
|
||||
|
||||
Screenshots:
|
||||
|
||||
- `/Users/aman/HomeBase/Projects/Personal/box-box/.review/issue-9-pr-32/screenshots/live-track-map-desktop.png`
|
||||
- `/Users/aman/HomeBase/Projects/Personal/box-box/.review/issue-9-pr-32/screenshots/live-track-map-mobile.png`
|
||||
- `/Users/aman/HomeBase/Projects/Personal/box-box/.review/issue-9-pr-32/screenshots/live-empty-desktop.png`
|
||||
- `/Users/aman/HomeBase/Projects/Personal/box-box/.review/issue-9-pr-32/screenshots/live-empty-mobile.png`
|
||||
|
||||
Visual diff artifact:
|
||||
|
||||
- `/Users/aman/HomeBase/Projects/Personal/box-box/.review/issue-9-pr-32/artifacts/visual-diff/data-library-diff.png`
|
||||
|
||||
## Notes
|
||||
|
||||
The ticket-specific visual capture used mocked `/api/v1/live/state`, `/api/v1/live/stream`, and `/api/v1/track-outline` responses. The screenshot verifies the frontend behavior and shape contract, but not actual F1 coordinate alignment.
|
||||