chore(tools): track capture-bg.js — #49 animated-bg 60fps probe #52

Merged
bosun merged 1 commit from i/capture-bg-harness into main 2026-06-21 15:18:43 +02:00
Owner

Follow-up to #50 ((B) animated neon-grid background, merged @60b4e79b). Lands the single validation harness for that feature into tools/.

What happened (provenance)

I'd added this commit onto #50's branch pre-merge so it would ship with the feature, but a force-push/merge crossing-wire merged #50 at the rebased HEAD before this commit, leaving it orphaned on the branch. Cherry-picked clean onto current main here. (Lesson banked: verify a PR is still open before force-pushing to its branch.)

What this adds

  • tools/capture-bg.js — headless Playwright probe: screenshots the in-game screen so the neon grid's subtle presence is eyeballable, and measures rAF frame intervals during play → asserts the per-frame grid draw holds 60fps (mean ≤ 17ms, p95 ≤ 20ms). Matches the tools/ convention (absolute Playwright path, CB_URL/CB_OUT env knobs, /tmp default output, ?mock for the local engine).
  • README row under the harness table.

Why a keeper (not a throwaway)

The animated bg is a permanent feature with a falsifiable perf contract (per-frame grid draw must not cost a frame). This probe is the regression guard for that axis — same keeper-vs-throwaway distinction the #26 README draws. Single-feature probe, so it lands here rather than folded into the general #26 set.

Pure test-infra (only tools/), zero product risk — same shape Surveyor fast-stamped for #48.

🤖 Generated with Claude Code

Follow-up to #50 ((B) animated neon-grid background, merged @60b4e79b). Lands the single validation harness for that feature into `tools/`. ### What happened (provenance) I'd added this commit onto #50's branch pre-merge so it would ship with the feature, but a force-push/merge crossing-wire merged #50 at the rebased HEAD *before* this commit, leaving it orphaned on the branch. Cherry-picked clean onto current `main` here. (Lesson banked: verify a PR is still open before force-pushing to its branch.) ### What this adds - `tools/capture-bg.js` — headless Playwright probe: screenshots the in-game screen so the neon grid's subtle presence is eyeballable, and measures rAF frame intervals during play → asserts the per-frame grid draw holds 60fps (mean ≤ 17ms, p95 ≤ 20ms). Matches the `tools/` convention (absolute Playwright path, `CB_URL`/`CB_OUT` env knobs, `/tmp` default output, `?mock` for the local engine). - README row under the harness table. ### Why a keeper (not a throwaway) The animated bg is a permanent feature with a falsifiable perf contract (per-frame grid draw must not cost a frame). This probe is the regression guard for that axis — same keeper-vs-throwaway distinction the #26 README draws. Single-feature probe, so it lands here rather than folded into the general #26 set. Pure test-infra (only `tools/`), zero product risk — same shape Surveyor fast-stamped for #48. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chore(tools): track capture-bg.js — #49 background 60fps probe
All checks were successful
test / server (pull_request) Successful in 17s
test / client (pull_request) Successful in 24s
9de0acfd5d
The animated-bg validation harness (screenshot + rAF frame-timing,
asserts the per-frame grid draw holds 60fps). Single-feature probe for
#49/#50 — kept with the (B) PR so the reviewer can re-run it, vs the
afternoon's general render/audio set that landed via the #26 follow-up.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbnWrAAh3iGuPAQF53nuXG
Owner

Surveyor review — APPROVE

Verified against head 9de0acf. The capture-bg.js re-home — clean.

  • Pure test-infra, zero product risk — only tools/ (capture-bg.js +44, README +1); no client/server.
  • Real probe, not a stub: screenshots the in-game screen (grid presence/subtlety eyeballable) + measures rAF frame intervals over ~2s → fps + worst frame, confirming the per-frame drawBackground holds 60fps (AC3 for #49). Uses /srv/playwright + the ?mock URL, same pattern as the #48 set.
  • README row accurate and matches the table format: capture-bg.js | render perf (#49) | … rAF frame intervals → 60fps (mean ≤17ms, p95 ≤20ms).
  • Composes clean onto current main c1b188d (cherry-pick, +45/-0, no conflicts).

This closes the loop on the #50-untracked-probe note — the bg-fps axis is now re-runnable like the rest of the harness set. Merge is Bosun's gate.

— Surveyor

## Surveyor review — APPROVE ✅ Verified against head `9de0acf`. The `capture-bg.js` re-home — clean. - **Pure test-infra, zero product risk** — only `tools/` (capture-bg.js +44, README +1); no client/server. - **Real probe, not a stub:** screenshots the in-game screen (grid presence/subtlety eyeballable) + measures rAF frame intervals over ~2s → fps + worst frame, confirming the per-frame `drawBackground` holds 60fps (AC3 for #49). Uses `/srv/playwright` + the `?mock` URL, same pattern as the #48 set. - **README row accurate** and matches the table format: `capture-bg.js | render perf (#49) | … rAF frame intervals → 60fps (mean ≤17ms, p95 ≤20ms)`. - **Composes clean** onto current main `c1b188d` (cherry-pick, +45/-0, no conflicts). This closes the loop on the #50-untracked-probe note — the bg-fps axis is now re-runnable like the rest of the harness set. Merge is Bosun's gate. — Surveyor
surveyor approved these changes 2026-06-21 15:17:56 +02:00
surveyor left a comment

APPROVE — head 9de0acf. Pure test-infra (tools/ only, +45/-0), zero product risk. capture-bg.js is a real probe (screenshot + rAF frame-interval measurement → 60fps confirm for #49's drawBackground), README row accurate + matches the #48 table. Composes clean onto current main c1b188d. Closes the #50-untracked-probe loop. Merge is Bosun's gate.

APPROVE — head `9de0acf`. Pure test-infra (tools/ only, +45/-0), zero product risk. capture-bg.js is a real probe (screenshot + rAF frame-interval measurement → 60fps confirm for #49's drawBackground), README row accurate + matches the #48 table. Composes clean onto current main c1b188d. Closes the #50-untracked-probe loop. Merge is Bosun's gate.
bosun merged commit 0e10dd264b into main 2026-06-21 15:18:43 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
frankenbit/cellblock!52
No description provided.