Add built-in Circuit Shift retro game - #31
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (37)
📜 Recent review details⏰ Context from checks skipped due to timeout. (4)
🧰 Additional context used🧠 Learnings (1)📚 Learning: 2026-08-11T02:09:53.271ZApplied to files:
🔇 Additional comments (13)
📝 WalkthroughWalkthroughAdds Circuit Shift as an offline built-in game in the console launcher. The change includes game logic, persistence, controller input, catalog metadata, launcher routing, tests, and refreshed search, conformance, and benchmark evidence. ChangesCircuit Shift game integration
Evidence and benchmark refresh
Estimated code review effort: 4 (Complex) | ~45 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
✨ Simplify code
Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/console-lab/src/launcher/circuit-shift.ts`:
- Around line 70-90: Update restoreCircuitShift to reject parsed boards
containing no charged cells before constructing the restored state. Preserve
existing validation and return undefined for an all-zero board so the component
starts a new game.
- Around line 127-130: Keep merged charges within the domain accepted by
persistence and restoration: in apps/console-lab/src/launcher/circuit-shift.ts
lines 127-130, update the merge logic around current and charged so normal
gameplay cannot create unsupported values; in lines 60-67, ensure
serializeCircuitShift emits only states restoreCircuitShift accepts; and in
lines 152-157, align charge and score validation bounds with every value
gameplay can produce.
In `@apps/console-lab/src/launcher/Launcher.svelte`:
- Line 784: Update the navigation signal positioning logic in Launcher.svelte,
including the paths around showView("retro-game"), to normalize the view name
retro-game to retro before positionSignal() queries the data-view-target
element. Preserve existing behavior for all other view names.
- Line 614: Update isCircuitShiftEntry and the built-in Circuit Shift descriptor
to require the expected version in addition to the ID, runtime, and entrypoint,
so only the embedded 1.0.0 entry matches. Add a test covering a catalog entry
with a different version and verify it is not treated as installed or
launchable.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: ca4c2bd3-fddc-4b47-bb94-6fa2b75f8121
⛔ Files ignored due to path filters (3)
apps/console-lab/src/launcher/catalog.generated.tsis excluded by!**/*.generated.*benchmarks/tv-conformance/windows-x64-chrome-150-launcher-search-empty-query-scroll-activation-1080p.pngis excluded by!**/*.pngbenchmarks/tv-conformance/windows-x64-chrome-150-launcher-search-empty-query-scroll-activation-4k.pngis excluded by!**/*.png
📒 Files selected for processing (47)
apps/console-lab/src/launcher/CircuitShiftGame.svelteapps/console-lab/src/launcher/Launcher.svelteapps/console-lab/src/launcher/circuit-shift.test.tsapps/console-lab/src/launcher/circuit-shift.tsapps/console-lab/src/launcher/types.tsapps/console-lab/tests/console-flow.spec.tsapps/console-lab/tests/tv-conformance.spec.tsbenchmarks/camera-angle/fixed-angle-escalation-evidence-plan-v1.jsonbenchmarks/camera-cabling/cross-tier-camera-cable-plan-v1.jsonbenchmarks/camera-geometry/cross-tier-camera-placement-geometry-plan-v1.jsonbenchmarks/camera-service/camera-replacement-recalibration-plan-v1.jsonbenchmarks/camera-state/physical-shutter-camera-state-experience-plan-v1.jsonbenchmarks/controller-only-usability/cross-tier-controller-only-usability-plan-v1.jsonbenchmarks/cross-tier-reference/pi5-x86-product-contract-plan-v1.jsonbenchmarks/csi-fallback/pi5-camera-module-3-wide-csi-fallback-plan-v1.jsonbenchmarks/depth-comparison/oak-d-pro-w-rgb-depth-comparison-plan-v1.jsonbenchmarks/depth-interference/cross-device-ir-interference-safety-plan-v1.jsonbenchmarks/enclosure/pi5-integrated-enclosure-reference-build-plan-v1.jsonbenchmarks/failure-critical-substitutes/cross-tier-failure-critical-substitute-plan-v1.jsonbenchmarks/first-party-motion-adaptation/first-party-motion-adaptation-ranking-plan-v1.jsonbenchmarks/font-coverage/ocra-font-structural-evidence-v1.jsonbenchmarks/font-coverage/windows-x64-chrome-151-ocra-platform-fallback-v1.jsonbenchmarks/idle-energy/cross-tier-idle-energy-plan-v1.jsonbenchmarks/kiosk-compositor/cross-tier-kiosk-compositor-plan-v1.jsonbenchmarks/lens-calibration/cross-tier-lens-distortion-rectification-plan-v1.jsonbenchmarks/libretro/supervised-libretro-frontend-qualification-plan-v1.jsonbenchmarks/orbbec/gemini-335l-linux-target-plan-v1.jsonbenchmarks/pi5-hdmi-cec/pi5-hdmi-audio-cec-plan-v1.jsonbenchmarks/realsense/d455-linux-target-plan-v1.jsonbenchmarks/room-survey/living-room-play-zone-plan-v1.jsonbenchmarks/shutdown-reserve/pi5-shutdown-reserve-comparison-plan-v1.jsonbenchmarks/steam-machine-os-comparison/steam-machine-steamos-windows-comparison-plan-v1.jsonbenchmarks/system-economics/complete-system-economics-plan-v1.jsonbenchmarks/tv-appliance/cross-tier-tv-appliance-plan-v1.jsonbenchmarks/tv-conformance/windows-x64-chrome-150-launcher-home-tv-conformance-v1.jsonbenchmarks/tv-conformance/windows-x64-chrome-150-launcher-representative-surfaces-tv-conformance-v1.jsonbenchmarks/tv-conformance/windows-x64-chrome-150-launcher-search-tv-conformance-v1.jsonbenchmarks/tv-visual-tokens/physical-tv-visual-token-plan-v1.jsonbenchmarks/visual-robustness/cross-tier-visual-robustness-plan-v1.jsoncatalog/circuit-shift.vcg-game.jsoncatalog/launcher-policy.jsonpackages/launcher-catalog/src/index.tspackages/launcher-catalog/tests/launcher-catalog.test.tsscripts/generate-launcher-search-tv-evidence.mjsscripts/validate-launcher-search-tv-evidence.mjsscripts/validate-launcher-tv-conformance-evidence.mjsscripts/validate-ocra-platform-fallback-evidence.mjs
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
- GitHub Check: node / windows-latest
- GitHub Check: native / windows-latest
- GitHub Check: node / ubuntu-latest
- GitHub Check: e2e / ubuntu-latest
- GitHub Check: pi bring-up script
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2026-08-11T02:09:53.271Z
Learnt from: randroid88
Repo: Randroids-Dojo/VCG-Console PR: 28
File: benchmarks/tv-conformance/windows-x64-chrome-150-launcher-home-tv-conformance-v1.json:0-0
Timestamp: 2026-08-11T02:09:53.271Z
Learning: In TV conformance evidence JSON files under benchmarks/tv-conformance, do not flag the coexistence of the chrome-150 artifact/generator naming with Chrome/151.0.7922.76 browser metadata when a PR only refreshes source or build bindings. Treat this as an established repository-wide convention unless the PR changes the naming or browser-version convention itself.
Applied to files:
benchmarks/tv-conformance/windows-x64-chrome-150-launcher-home-tv-conformance-v1.jsonbenchmarks/tv-conformance/windows-x64-chrome-150-launcher-representative-surfaces-tv-conformance-v1.jsonbenchmarks/tv-conformance/windows-x64-chrome-150-launcher-search-tv-conformance-v1.json
🔇 Additional comments (40)
benchmarks/font-coverage/ocra-font-structural-evidence-v1.json (1)
727-728: LGTM!Also applies to: 870-883, 952-963, 1057-1058, 1271-1277, 1338-1339
benchmarks/font-coverage/windows-x64-chrome-151-ocra-platform-fallback-v1.json (1)
70-71: LGTM!Also applies to: 99-105, 122-123
benchmarks/tv-conformance/windows-x64-chrome-150-launcher-home-tv-conformance-v1.json (1)
6-6: LGTM!Also applies to: 165-166, 204-204, 216-224, 241-242
benchmarks/tv-conformance/windows-x64-chrome-150-launcher-representative-surfaces-tv-conformance-v1.json (1)
6-9: LGTM!Also applies to: 393-394, 433-433, 447-451, 474-475
apps/console-lab/src/launcher/circuit-shift.ts (1)
1-58: LGTM!Also applies to: 96-119, 142-150, 160-167
apps/console-lab/src/launcher/circuit-shift.test.ts (1)
1-57: LGTM!apps/console-lab/src/launcher/CircuitShiftGame.svelte (1)
1-198: LGTM!apps/console-lab/src/launcher/Launcher.svelte (1)
21-21: LGTM!Also applies to: 73-73, 187-187, 516-538, 626-630, 732-742, 752-783, 785-786, 1193-1193, 1219-1224
apps/console-lab/src/launcher/types.ts (1)
3-15: LGTM!catalog/circuit-shift.vcg-game.json (1)
1-32: LGTM!catalog/launcher-policy.json (1)
50-58: LGTM!packages/launcher-catalog/src/index.ts (1)
242-259: LGTM!packages/launcher-catalog/tests/launcher-catalog.test.ts (1)
1-127: LGTM!apps/console-lab/tests/console-flow.spec.ts (1)
338-338: LGTM!Also applies to: 1853-1853, 2049-2049, 2090-2090, 2281-2281, 2296-2329
benchmarks/camera-angle/fixed-angle-escalation-evidence-plan-v1.json (1)
40-40: LGTM!Also applies to: 50-50, 70-75
benchmarks/camera-cabling/cross-tier-camera-cable-plan-v1.json (1)
35-35: LGTM!benchmarks/camera-geometry/cross-tier-camera-placement-geometry-plan-v1.json (1)
32-32: LGTM!benchmarks/pi5-hdmi-cec/pi5-hdmi-audio-cec-plan-v1.json (1)
26-26: LGTM!benchmarks/realsense/d455-linux-target-plan-v1.json (1)
41-41: LGTM!benchmarks/room-survey/living-room-play-zone-plan-v1.json (1)
31-31: LGTM!benchmarks/shutdown-reserve/pi5-shutdown-reserve-comparison-plan-v1.json (1)
57-62: LGTM!benchmarks/steam-machine-os-comparison/steam-machine-steamos-windows-comparison-plan-v1.json (1)
63-68: LGTM!Also applies to: 78-78
benchmarks/camera-service/camera-replacement-recalibration-plan-v1.json (1)
45-55: 🗄️ Data Integrity & IntegrationNo source-digest change is required. All source bindings match the final repository tree, with no digest drift, invalid paths, bare carriage returns, or repeated-path inconsistencies.
> Likely an incorrect or invalid review comment.benchmarks/camera-state/physical-shutter-camera-state-experience-plan-v1.json (1)
51-51: 🗄️ Data Integrity & IntegrationNo source-binding mismatch exists.
All 552 bindings match their source files, and duplicate paths use consistent digests. The proposed validator incorrectly rejects valid structured contract declarations.
> Likely an incorrect or invalid review comment.benchmarks/depth-interference/cross-device-ir-interference-safety-plan-v1.json (1)
22-22: LGTM!Also applies to: 27-27, 32-32
benchmarks/enclosure/pi5-integrated-enclosure-reference-build-plan-v1.json (1)
33-33: LGTM!Also applies to: 43-43, 48-48, 63-63, 68-68, 73-73, 78-78, 83-83, 88-88
benchmarks/failure-critical-substitutes/cross-tier-failure-critical-substitute-plan-v1.json (1)
35-35: LGTM!Also applies to: 40-40, 70-70, 75-75
benchmarks/first-party-motion-adaptation/first-party-motion-adaptation-ranking-plan-v1.json (1)
43-43: LGTM!benchmarks/idle-energy/cross-tier-idle-energy-plan-v1.json (1)
25-25: LGTM!benchmarks/kiosk-compositor/cross-tier-kiosk-compositor-plan-v1.json (1)
47-47: LGTM!benchmarks/lens-calibration/cross-tier-lens-distortion-rectification-plan-v1.json (1)
40-40: LGTM!benchmarks/libretro/supervised-libretro-frontend-qualification-plan-v1.json (1)
78-78: LGTM!benchmarks/orbbec/gemini-335l-linux-target-plan-v1.json (1)
41-41: LGTM!apps/console-lab/tests/tv-conformance.spec.ts (1)
463-463: LGTM!Also applies to: 496-502, 559-559
scripts/generate-launcher-search-tv-evidence.mjs (1)
33-35: LGTM!Also applies to: 102-102, 122-124
scripts/validate-launcher-search-tv-evidence.mjs (2)
70-70: LGTM!Also applies to: 90-92, 353-354, 393-394, 570-573, 676-682
458-461: 🗄️ Data Integrity & IntegrationNo screenshot metadata update is required. The 720p screenshot metadata matches the generated file in both evidence contracts.
> Likely an incorrect or invalid review comment.benchmarks/tv-conformance/windows-x64-chrome-150-launcher-search-tv-conformance-v1.json (1)
6-9: LGTM!Also applies to: 50-50, 70-72, 402-402, 432-439, 959-959, 989-996, 1005-1008, 1036-1037, 1516-1516, 1546-1562, 1593-1594, 1980-1981, 2036-2036, 2052-2060, 2077-2083
scripts/validate-launcher-tv-conformance-evidence.mjs (1)
128-129: LGTM!scripts/validate-ocra-platform-fallback-evidence.mjs (1)
46-47: LGTM!
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
apps/console-lab/src/launcher/Launcher.svelte (1)
777-777: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winMove focus into Circuit Shift after the view transition.
At Line 777,
showView("retro-game")reaches the generic focus branch at Line 483. That branch searches fordata-view-target="retro-game", but the navigation contains only theretrotarget. Focus remains on the removed launch-screen control instead of the game.Make the Circuit Shift root focusable. Expose a focus method from
CircuitShiftGame. Call that method afterawait showView("retro-game").🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/console-lab/src/launcher/Launcher.svelte` at line 777, Make the Circuit Shift root focusable and expose a focus method from the CircuitShiftGame component. Update the launcher flow around showView("retro-game") to invoke that method after the view transition completes, ensuring focus moves from the removed launch-screen control into the game.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@scripts/validate-ocra-platform-fallback-evidence.mjs`:
- Line 47: Update the asset request-count key in the validator’s evidence map to
use the exact production filename `/assets/main-v93HrXkc.js`, matching the
lowercase `k` used by the benchmark and launcher conformance validator.
---
Outside diff comments:
In `@apps/console-lab/src/launcher/Launcher.svelte`:
- Line 777: Make the Circuit Shift root focusable and expose a focus method from
the CircuitShiftGame component. Update the launcher flow around
showView("retro-game") to invoke that method after the view transition
completes, ensuring focus moves from the removed launch-screen control into the
game.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: c2273280-15e0-4228-ae61-796bbd59b4a8
📒 Files selected for processing (37)
apps/console-lab/src/launcher/Launcher.svelteapps/console-lab/src/launcher/circuit-shift.test.tsapps/console-lab/src/launcher/circuit-shift.tsbenchmarks/camera-angle/fixed-angle-escalation-evidence-plan-v1.jsonbenchmarks/camera-cabling/cross-tier-camera-cable-plan-v1.jsonbenchmarks/camera-geometry/cross-tier-camera-placement-geometry-plan-v1.jsonbenchmarks/camera-service/camera-replacement-recalibration-plan-v1.jsonbenchmarks/camera-state/physical-shutter-camera-state-experience-plan-v1.jsonbenchmarks/controller-only-usability/cross-tier-controller-only-usability-plan-v1.jsonbenchmarks/cross-tier-reference/pi5-x86-product-contract-plan-v1.jsonbenchmarks/csi-fallback/pi5-camera-module-3-wide-csi-fallback-plan-v1.jsonbenchmarks/depth-comparison/oak-d-pro-w-rgb-depth-comparison-plan-v1.jsonbenchmarks/depth-interference/cross-device-ir-interference-safety-plan-v1.jsonbenchmarks/enclosure/pi5-integrated-enclosure-reference-build-plan-v1.jsonbenchmarks/failure-critical-substitutes/cross-tier-failure-critical-substitute-plan-v1.jsonbenchmarks/first-party-motion-adaptation/first-party-motion-adaptation-ranking-plan-v1.jsonbenchmarks/font-coverage/ocra-font-structural-evidence-v1.jsonbenchmarks/font-coverage/windows-x64-chrome-151-ocra-platform-fallback-v1.jsonbenchmarks/idle-energy/cross-tier-idle-energy-plan-v1.jsonbenchmarks/kiosk-compositor/cross-tier-kiosk-compositor-plan-v1.jsonbenchmarks/lens-calibration/cross-tier-lens-distortion-rectification-plan-v1.jsonbenchmarks/libretro/supervised-libretro-frontend-qualification-plan-v1.jsonbenchmarks/orbbec/gemini-335l-linux-target-plan-v1.jsonbenchmarks/pi5-hdmi-cec/pi5-hdmi-audio-cec-plan-v1.jsonbenchmarks/realsense/d455-linux-target-plan-v1.jsonbenchmarks/room-survey/living-room-play-zone-plan-v1.jsonbenchmarks/shutdown-reserve/pi5-shutdown-reserve-comparison-plan-v1.jsonbenchmarks/steam-machine-os-comparison/steam-machine-steamos-windows-comparison-plan-v1.jsonbenchmarks/system-economics/complete-system-economics-plan-v1.jsonbenchmarks/tv-appliance/cross-tier-tv-appliance-plan-v1.jsonbenchmarks/tv-conformance/windows-x64-chrome-150-launcher-home-tv-conformance-v1.jsonbenchmarks/tv-conformance/windows-x64-chrome-150-launcher-representative-surfaces-tv-conformance-v1.jsonbenchmarks/tv-conformance/windows-x64-chrome-150-launcher-search-tv-conformance-v1.jsonbenchmarks/tv-visual-tokens/physical-tv-visual-token-plan-v1.jsonbenchmarks/visual-robustness/cross-tier-visual-robustness-plan-v1.jsonscripts/validate-launcher-tv-conformance-evidence.mjsscripts/validate-ocra-platform-fallback-evidence.mjs
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
- GitHub Check: node / windows-latest
- GitHub Check: node / ubuntu-latest
- GitHub Check: pi bring-up script
- GitHub Check: native / windows-latest
- GitHub Check: e2e / ubuntu-latest
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2026-08-11T02:09:53.271Z
Learnt from: randroid88
Repo: Randroids-Dojo/VCG-Console PR: 28
File: benchmarks/tv-conformance/windows-x64-chrome-150-launcher-home-tv-conformance-v1.json:0-0
Timestamp: 2026-08-11T02:09:53.271Z
Learning: In TV conformance evidence JSON files under benchmarks/tv-conformance, do not flag the coexistence of the chrome-150 artifact/generator naming with Chrome/151.0.7922.76 browser metadata when a PR only refreshes source or build bindings. Treat this as an established repository-wide convention unless the PR changes the naming or browser-version convention itself.
Applied to files:
benchmarks/tv-conformance/windows-x64-chrome-150-launcher-representative-surfaces-tv-conformance-v1.jsonbenchmarks/tv-conformance/windows-x64-chrome-150-launcher-home-tv-conformance-v1.jsonbenchmarks/tv-conformance/windows-x64-chrome-150-launcher-search-tv-conformance-v1.json
🔇 Additional comments (12)
benchmarks/tv-conformance/windows-x64-chrome-150-launcher-search-tv-conformance-v1.json (1)
6-9: LGTM!Also applies to: 50-50, 70-72, 402-402, 432-439, 448-451, 959-959, 989-996, 1005-1008, 1036-1037, 1516-1516, 1546-1562, 1593-1594, 1980-1981, 2036-2036, 2052-2060, 2077-2083
scripts/validate-launcher-tv-conformance-evidence.mjs (1)
129-129: LGTM!apps/console-lab/src/launcher/circuit-shift.ts (1)
3-6: LGTM!Also applies to: 25-37, 69-69, 79-81, 98-98, 120-122, 147-147, 172-188
apps/console-lab/src/launcher/circuit-shift.test.ts (1)
5-5: LGTM!Also applies to: 56-90
apps/console-lab/src/launcher/Launcher.svelte (1)
28-28: LGTM!Also applies to: 74-74, 188-188, 517-517, 536-539, 615-615, 627-629, 733-743, 1083-1084
benchmarks/font-coverage/ocra-font-structural-evidence-v1.json (1)
727-728: LGTM!Also applies to: 870-883, 952-963, 1057-1058, 1271-1277, 1338-1339
benchmarks/font-coverage/windows-x64-chrome-151-ocra-platform-fallback-v1.json (1)
70-71: LGTM!Also applies to: 99-105, 122-123
benchmarks/tv-conformance/windows-x64-chrome-150-launcher-home-tv-conformance-v1.json (1)
6-6: LGTM!Also applies to: 165-166, 204-204, 216-224, 241-242
benchmarks/tv-conformance/windows-x64-chrome-150-launcher-representative-surfaces-tv-conformance-v1.json (1)
6-9: LGTM!Also applies to: 393-394, 433-433, 447-451, 474-475
benchmarks/camera-angle/fixed-angle-escalation-evidence-plan-v1.json (1)
40-40: 🗄️ Data Integrity & IntegrationNo source-binding digest mismatch found. All listed
sha256values match their referenced source files.benchmarks/camera-state/physical-shutter-camera-state-experience-plan-v1.json (1)
61-61: 🗄️ Data Integrity & IntegrationNo source-binding changes required. All source bindings in the nine plans match their referenced file contents.
> Likely an incorrect or invalid review comment.benchmarks/depth-interference/cross-device-ir-interference-safety-plan-v1.json (1)
22-22: 🗄️ Data Integrity & IntegrationNo source-binding digest changes are required. All selected bindings match the normalized source files and duplicate paths use consistent digests.
> Likely an incorrect or invalid review comment.
|
Addressed the outside-diff focus finding in 2c45d29: CircuitShiftGame now exposes a focusable root, Launcher moves focus into it after the retro-game transition, and the E2E flow asserts the game owns focus. Local typecheck, full pnpm test, production build, and all 83 E2E tests pass. |
Summary
Verification
Qualification boundary
Browser and synthetic standard-controller behavior are verified. Physical Raspberry Pi, television, and controller behavior remains pending on-device qualification.