Current simulation scope, decisions, and acceptance criteria
Models, sounds, dependencies and source credits.
View →Imported tank and Recognizer files, scales and material adapters.
View →Film stills and visual targets for the maze and vehicles.
View →Listen to sound candidates, compare current effects, and browse future resources.
View →Code review, object ownership and an incremental cleanup plan.
View →Browser checks, measured results and remaining review.
View →Original milestones, earlier plans, and development notes.
View →references/images/cycle explosion frames as the visual reference. Assuming consecutive captures at 24 fps, the main rays occupy nine frames (0.375 s); fragments fade out by one second. Effect animation uses 24 fps samples without changing gameplay simulation cadence.docs/victory.txt continuously at 45 characters/second. This supersedes the earlier no-win-screen direction for this condition only; empty beam lists do not win.min(1.5vw, 2.15vh), 1.12 line height) across opening, death, victory and credits text, without content-dependent sizing.Carrier derezed.mp4 at 2:37–2:38 to replace the carrier’s red rectangle with a softly feathered, translucent blue-white field and faint green rim. September 23 refinement: use a yellow pulsing rim, retain 0.5 base gray opacity at the center, and fade the gray fill to zero before it meets the rim. Add a 7 Hz pulse limited to 22% opacity variation, driven by simulation time so pause/reset remain stable.public/audio/carrier-derez-source.json; add both to the sound library for audition.carrier and solar sailer.mp4 at 1:34–1:46 for direction, silver sails and amber beam.npm run docs generation so Safari local-file viewing does not require a sibling-folder CSS load. Keep upstream colvmn unchanged; author Markdown/JSON and regenerate HTML with the project wrapper.CameraRig; verify both running and paused operation.Design review: Refactoring review and design. The ownership refactor is implemented locally. Keep this checklist as the plan source; the linked review now records the implementation, compatibility boundaries and remaining human checks. No deployment was performed.
Remaining acceptance work: Safari audio-unlock/listening and side-by-side visual review on the user’s hardware. Automated results are recorded in Validation; these checks do not establish artistic fidelity. The seeded replay captures three beams, then holds near 686 seconds; full multi-maze completion remains unresolved.
CARRIER.searchlightsEnabled to false, clearing light tracking/illumination and stopping spotlight-derived radio reports. Recognizer spotlights remain independent.DATA_BEAM.blastEnabled to false. Skip post-capture wave damage and hide its expanding sphere/ring. Keep capture, healing, color transition, camera sequence and transfer-shaft contact behavior. Retain the effect behind this flag for later re-enabling.JEV_HOURLY_BUDGET_USD in .env.local; restart Vite after changes. Persist reservations and settled usage in ignored .local/jev-spend.json. Public Worker quotas remain separate.src/audio/teleport.js.See Jev enemy control for the implemented architecture, input/output examples, scheduling, validation, and current limits.
September 21 hearing: aircraft and ground enemies receive bounded, expiring acoustic observations for engines, cannon fire, impacts and explosions. Use distance attenuation, wall muffling and deterministic bearing/range error; never copy a sound into confirmed sighting memory. Unknown sounds permit local investigation and nearby Jev requests with target: null; friendly sounds are context only. Hearing is independent of player audio volume and pauses with simulation. Range controls are available in development tuning. See Jev enemy control for the report format and limits.
September 21 connected-search follow-up: persist whether the last-known location has been checked, so moving into a branch cannot re-enable a return-to-origin maneuver. Build a bounded graph of tank-passable corridors from the predicted contact point (8 m steps, 160 m path budget, swept wall checks); use its reachable locations instead of nearby open cells across arbitrary walls. Retain completed checks for the search episode, advance both ground and air units on arrival, and share search progress plus each candidate's searchPath with Jev. Aircraft already above the roof search from above instead of descending at every checkpoint; feasible low search routes remain available to settled low aircraft. Regression checks cover an L-shaped route, disconnected pockets, continuous aircraft search and ground progression.
September 21 opening-pursuit correction: above-roof aircraft proceed toward the travel waypoint while turning/climbing, rather than returning to the route origin after inertial drift. Healthy units receive a pursuit/support maneuver and no longer prefer regrouping simply because allies are spread out. Reserve attack spacing only for a nearby strike or active stomp; retain local swept collision checks and knowledge-limited target prediction. A moving-opening regression requires all five pursuers to close distance and exceed Clu’s normal speed.
Design references: the Tetris example measures reachable action outcomes and avoids conflicting directional hints; the Doom example uses structured observations, selected maneuvers and local motor control. This implementation is independently written; no external game code or assets were copied. API shape follows the TypeSafe quick start.
September 21 grid alignment: maze-site origins now snap to the 24 m world grid, with seeded rotations restricted to 0°, 90°, 180° or 270°. The initial maze stays at the origin and unrotated. Rendering, collision, patrol locations, data beams and teleport pads derive from the same site transforms. Preserve the authored diagonal wall ends and blueprint shapes within each site.
September 21 awareness correction: on completing reinforcement materialization or an enemy teleport arrival, synchronize with active airborne and ground allies within the existing 304.8 m three-dimensional radio radius. Copy the freshest recorded sighting and alert state, retain observation timestamps, and share confirmed target destruction. Exclude unconfirmed spotlight acquisitions. Fresh pursuit knowledge suppresses searching spotlights; arriving units still need their own visual observation to set canSee.
September 21 interval follow-up: the shared reinforcement period is now 20 seconds (previously 15). Tactical modes continue to suppress reinforcements. The browser now defaults to Tactical + Jev with the full enemy population; earlier experimental preferences are superseded once, and subsequent explicit selections persist.
Tuning lives in src/game/materialization.js and src/simulation/reinforcements.js. The reusable materialization presenter is first connected to incoming Recognizers; starting vehicles still appear normally. The user endorsed carrier launches, data-beam arrivals and reverse-sweep recalls as further uses; those remain future work.
September 20 moving-target interception: add the observed target velocity along the approach direction to the Recognizer's distance-based arrival speed. Previously, an aircraft approaching from behind settled into speed-matched pursuit short of a valid landing prediction. It now continues closing until folding/fall time and residual braking drift permit a committed stomp. Navigation still uses only its own sighting memory; the committed drop does not track subsequent evasive movement.
September 20 tuning: increase Recognizer cruise speed by 10%, from 27 to 29.7 m/s. The existing pursuit multiplier requests 34.155 m/s, compared with Clu's normal 22 m/s and turbo 55 m/s. Raise forward thrust authority from 22 to 24.2 m/s² so drag does not cap flight below the new pursuit speed. Turning, lift, drag and braking settings remain unchanged; carrier formation speed retains its carrier-relative setting. Verification: npm test passes all 132 checks; a 60-second fixed-step straight-flight calculation reaches 34.155 m/s. Browser driving feel has not been rechecked for this tuning change.
The user's latest direction supersedes the structured chase roadmap below. The purpose is the feeling of being in the 1982 maze: free exploration and independently simulated Recognizers, without an assigned objective or tuned encounter sequence. Goal and ../AGENTS.md record the active requirements.
Run npm run dev and visit http://127.0.0.1:5173. Supporting documents: Assets · References · Validation.
Historical experiment, now superseded by restoring original motion above: maximum yaw rate is 120°/s (one revolution per three seconds at full speed), with 240°/s² acceleration/braking and the normal smooth heading response. All flight uses the same limit, including close attacks. Close-attack speed reduces when a turn needs a tighter radius, avoiding repeated orbits. A turn from rest includes acceleration and settling time, so a backwards-facing attacker can exceed the four-second stomp target. Eight-heading tests verify bounded yaw rate/acceleration and successful stomps; aligned attacks retain the four-second check.
Recognizers can thrust sideways and backward independently of yaw, in local/JEV navigation, Classic navigation and carrier escort flight. The acceleration vector shares the original 24.2 m/s² budget across all directions (no diagonal bonus); drag, braking, speed caps and angular inertia remain unchanged. Tight-corridor planning includes lateral/reverse translations with swept hull clearance. A wall-aligned hull can slide into position without first turning broadside. Existing pursuit-to-stomp opportunity checks and support assignments remain active.
credits_extended.txt, in bounded terminal pages, before the final END OF LINE. Preserve normal credits pacing; print the longer acknowledgments faster.?outerMazes=1; authored/reference scenarios keep their existing layouts.CYCLE_TESTING.startInArena in src/game/light-cycles.js owns this switch; ?cycleStart=0 restores the maze-first game, ?cycleStart=1 explicitly selects the test start. Entry waits safely for deferred arena assets, skips the opening pursuit/camera fly-in, and starts a three-chance player match without marking the beam collected.python3 scripts/extract-cycle-sfx.py; timestamps, source hash, filters and attribution are in public/audio/cycle-source.json. These are picture-selected extracts, not isolated stems; auditory review remains pending.[TRON loading] phase timings and complete copyable reports. tronLoadingReport() returns the current report in Safari's console, including browser, viewport, navigation-to-app delay, maze setup, enemy placement, physics wait, model fetch/decode/adaptation, rendering-world creation, first render submission, opening readiness and deferred arena/player entry. Parallel model durations are labeled non-additive; first render submission is not a GPU completion measurement.?cycleStart=0 maze play still uses the opening terminal. Browser audio gesture restrictions may still require a click/key before sound can play.CYCLE_TESTING.endingsEnabled=false. Player death permits free-camera spectating; Return starts a fresh match immediately. Completed team matches wait for Return, with no attempt limit. The original ending rules remain available through the session setting.ROAD_CYCLE: 18 m/s² nominal drive acceleration, 26 m/s² brake deceleration, 14 m/s² lateral acceleration limit, with drag and steering/lean response. These are an initial superbike-inspired approximation, awaiting driving-feel review.CYCLE_TESTING.startWithBreach opens the far wall straight ahead of the player’s starting lane in each player match, including Return restarts. Set it to false to restore intact starts.CYCLE_TESTING.hideMiddleOpponent, including its occupied starting cell; retain stable cycle IDs and restore other cycles normally on restart.node --test tests/tactical.test.js tests/cycle-player.test.js tests/simulation.test.js — 83/83 passed. Covers stale tactical choices, road-cycle destruction/radio propagation, continued patrol simulation during spectating, and restart awareness. Node simulation checks only; no new browser or visual review.CYCLE_TESTING.startOutsideArena; set it false to restore the arena testing start. ?cycleStart=0 still preserves normal maze-first entry.GameSession checked outside road mode, zero initial speed, maze-wall clearance, forward acceleration and repeatable Return restart. Browser driving-feel review remains pending.node /tmp/tron-cycle-grounding.mjs in headless Chrome on local macOS verified model bottoms at +0.02/−0.06/+0.02 m for inside/outside/inside positions, checked the running game's outside player height, and rendered an inspected low-angle capture at /tmp/tron-cycle-grounding.png. Lean dynamics are unchanged.node --test tests/cycle-road.test.js tests/cycle-player.test.js tests/light-cycles.test.js tests/cycle-camera.test.js — 46/46 passed. node tests/cycle-reentry.mjs — headless Chrome on local macOS, 1280×800, passed actual breach traversal, restored keyboard controls and trail-render checks with no page errors. Inspected test-results/cycle-reentry.png. Manual driving-feel review remains pending.python3 scripts/extract-cycle-sfx.py; record processing and source/use constraints in public/audio/cycle-source.json and the sound catalog.node tests/cycle-audio.mjs passed in headless Chrome on local macOS. Decoded cabin-loop level spread is 0.507 dB across 100 ms windows; stereo loading, event counts, pause/resume and reset cleanup passed with no sample/page errors. This measures playback and level stability; listening approval remains pending.Rejected in listening review: the user found the synthesized tone terrible and irritating. The September 26 rollback below supersedes this experiment.
scripts/cycle_drone.py. Use fixed 367.5 Hz harmonics and exact 120-sample waveform periods, retaining source spectral balance, stereo differences and RMS 0.118. This is a synthesized approximation of the film timbre, not an isolated original engine stem.node tests/cycle-audio.mjs passed in headless Chrome on local macOS. Every decoded waveform period matches exactly; 120 playback updates at constant player speed keep pitch at 1× despite listener motion. Level spread is 0.018 dB; loading, event counts and pause/reset cleanup pass. Listening review of the revised timbre remains pending.src/game/cycle-road.js, with the existing simulation-module export retained for compatibility.npm test — 337/337 passed; npm run build passed (existing large-chunk advisory). node tests/cycle-tuning.mjs — headless Chrome on local macOS, 1440×1000, passed tire-trace rendering, dialog opening/closing, input isolation, pause restoration, settings changes, reload persistence and defaults reset. Inspected test-results/cycle-tuning.png and the close driving-camera test-results/cycle-tire-traces.png. Driver preference for trace intensity and tuned handling remains subject to play review.node --test tests/cycle-tuning.test.js tests/cycle-camera.test.js — 11/11 passed, including live endpoint placement between samples and fade at rest. node tests/cycle-tuning.mjs passed in headless Chrome on local macOS at 1440×1000; inspected the updated close driving-camera capture test-results/cycle-tire-traces.png. User confirmation of flicker on their display remains pending.npm test — 339/339 passed. node tests/cycle-performance.mjs profiles headless Chrome on local macOS at 1280×800 with layout seed 1982. Approximately five-second live-bike samples: simulation CPU 1,572 ms before → 177.5 ms after the combined changes; median step 2.6 → 0.4 ms, p95 4.5 → 0.7 ms. Post-death CPU 639 → 216 ms. Both baseline and updated runs maintained roughly 60 fps locally; this measures CPU headroom, not an established user-device framerate gain. Final measurements ran without the test suite competing for CPU. JSON and CPU profiles are in test-results/cycle-performance.json and test-results/cycle-{alive,dead}.cpuprofile. User-browser confirmation remains pending.npm test — 342/342 passed, including twice-strength braking at low/high speeds, saved-default migration, and S/X arena survival. node tests/cycle-reentry.mjs passed in headless Chrome on local macOS at 1280×800: breach reentry, cardinal turn, turbo, S/X slowing and survival, and trail rendering. npm run build passed (existing large-chunk advisory). The originally reported S/X destruction was not reproduced; its specific cause remains unconfirmed.node --test tests/cycle-camera.test.js passed. In-browser framing at the new closest distance has not been reviewed.npm test — 343/343 passed, including 3D radio boundaries and a three-unit chain that stops at the firsthand observer's neighbors while allowing a new direct sighting to recruit locally. Updated the tank-radio fixture to place its receiver within the reduced range. npm run build passed with the existing large-chunk advisory. No browser encounter-density playtest performed.node --test tests/cycle-road.test.js tests/cycle-tuning.test.js passed, including the revised low-speed radius and continuity at both blend boundaries. Driving feel awaits user play review.> beside the selected choice. Arrow keys select and Return starts; native buttons support mouse, touch, focus and keyboard activation. Update the displayed controls for the selected game.?cycleStart=1 road-testing shortcut separate from menu entry. Update road browser fixtures to request it explicitly. Ending terminals hide the menu.npm test — 344/344 passed. node tests/home-menu.mjs passed in headless Chrome on local macOS at 1280×800 with touch enabled: home waits, arrow selection, Return, mouse click, touch tap, normal maze start, six-bike intact arena and match restart. Inspected test-results/home-menu.png with the terminal font and selection marker. Touch verification uses browser emulation, not physical mobile hardware. npm run build passed with the existing large-chunk advisory.ENCOM SYSTEM, USER ACCESS GRANTED, and SELECT PROGRAM. Remove controls, navigation help, objective copy and project-notes link from the home screen.> selection indicator and keyboard/click/tap behavior.node tests/home-menu.mjs passed in headless Chrome on local macOS, including matching computed typography, no button outline/border, removed help, the post-selection access message, keyboard/mouse/emulated-touch activation and both game starts. Inspected the updated 1280×800 home capture. npm run build passed with the existing large-chunk advisory.git diff --check passed.> marker with the terminal's blinking block cursor beside the selected program. Arrow-key selection moves it between entries. Hide the heading cursor on the home screen; retain access and ending cursors. Honor reduced-motion preference with a steady selection cursor.node tests/home-menu.mjs passed in headless Chrome on local macOS (reduced-motion mode), covering arrow selection, keyboard/mouse/emulated-touch activation and both game starts. git diff --check passed.npm test passed 344/344 before adding the new printer-specific check; node --test tests/victory.test.js then passed 3/3, including human timing, line-break pause and reset. node tests/home-menu.mjs passed in headless Chrome on local macOS: equal terminal top position, partial then complete text, at least two-second hold, frozen simulation time and computed FilmTerminal HUD font, plus keyboard/mouse/emulated-touch entry and intact six-bike arena restart.npm run build passed with the existing large-chunk advisory; git diff --check passed.SPACE PARANOIDS and LIGHT CYCLES directly in the markup and explicitly apply uppercase styling to the buttons rather than relying on inherited terminal styling.index.html; git diff --check passed.display:none during access typing, preventing its selected cursor's explicit visibility from leaking through. Retain the single text cursor beside the access message.node tests/home-menu.mjs passed in headless Chrome on local macOS, including exactly one visible cursor during typing, hidden HUD/control elements until gameplay, and computed uppercase FilmTerminal control labels. npm run build and git diff --check passed.npm test passed 346/346; targeted gunner/mouse checks and production build passed. Regression coverage verifies manual 45-degree saturation, no overhead assisted lock, and retained assistance below the limit.TELEPORTERS.enabled=false. There are no active transfer volumes or rendered floor borders. Keep layout generation, transfer behavior and rendering implementation for possible future use.npm test passed 348/348, including pad-free normal runs and no floor shader modification for an empty layout. Retained teleport behavior passes with explicit test pads.node --test tests/music-selection.test.js passed 7/7, including all four big-maze edge entries with outer mazes enabled and disabled, plus rejection just outside its boundary.node tests/maze-music.mjs passed in headless Chrome at the large labyrinth edge, then through exploration, hidden approach, visible beam, entry, afterglow and pursuit playback transitions.credits_display.txt for 27 concise entries, all five lines or fewer (below the requested eight-line limit). Keep URLs and the full dependency inventory in the unchanged archival credits_extended.txt; omit them on screen. Retain a two-line Cloudflare credit.node --test tests/victory.test.js passed 5/5, covering entry boundaries, URL filtering, a brief Cloudflare mention, and line/length limits. node tests/extended-credits.mjs passed in headless Chrome on local macOS: complete credits progression, immutable retained glyphs with no removed nodes while typing, desktop/mobile equal margins and no horizontal overflow. The longest entry rendered within eight lines. Early/late mean append work measured about 0.018/0.017 ms per frame; this does not measure total GPU painting or establish performance on the user's device. Inspected test-results/extended-credits-layout.png.node tests/home-menu.mjs passed with the restored terminal fade and changing camera coordinates before gameplay controls appear, plus keyboard/click/tap credits dismissal and pad-free game state. npm run build passed with the existing large-chunk advisory; git diff --check passed.npm test passed 351/351 when rerun without concurrent browser/build work. The earlier concurrent run failed one ground-tank patrol-distance assertion; no unrelated simulation code was changed for that retry.LOADING with ENCOM REMOTE ACCESS, DIALING HOST, and AWAITING CARRIER. This is a text-only change; retain the existing terminal presentation and loading behavior.git diff --check passed.node --test tests/cycle-player.test.js tests/light-cycles.test.js tests/cycle-road.test.js passed, covering round resets, arena movement/collisions and road transitions. Updated the collision fixture to assert displacement relative to its starting row.node --test tests/victory.test.js passed 5/5, including the revised typing delays and unchanged victory printing.node tests/home-menu.mjs passed in headless Chrome, including waiting beyond the old countdown with frozen simulation, key/tap/click confirmation, music playback during the camera approach and no forced restart at camera arrival. Production build and whitespace checks passed.node tests/home-menu.mjs passed in headless Chrome, including I zooming in, K zooming out, updated aerial hint, and unchanged zoom when holding I outside V mode. npm run build and git diff --check passed.git diff --check.npm test passed 353/353, including exactly one victory event after central-beam completion, no arena handoff/wait, and continued explicit cycle entry.node tests/cannon-reserve.mjs verifies full startup, real key consumption, progressive fill, paused fill, and all three natural recharges.node tests/home-menu.mjs and production build passed for direct victory without entering the cycle match.npm test passes all 355 tests, including directional flight speed, near-head-on interception, searchlight suppression and reserve timing; npm run build passes (existing chunk-size warning). Recognizer flight feel still needs human play review.node tests/home-menu.mjs verifies held I/K in both chase and aerial views, independent zoom settings, and preserved gunner elevation. npm run build passes with the existing chunk-size warning.node tests/pwa.mjs passes in headless Chrome with a temporary persistent profile: no installability errors, correct subdirectory scope and PNG dimensions, offline Clu and light-cycle launches, ranged cached audio, and a waiting update while gameplay continues. Physical home-screen installation on iOS/Android remains untested.node --test tests/victory.test.js passes all five tests, including two seconds of 60 Hz typing and a simulated two-second frame stall.tests/victory.test.js checks pass, including shared typing speed and the eight-line credit limit.node tests/home-menu.mjs passes. Inspected the 1280×800 menu capture: the first line is centered and the remaining text stays left-aligned below it.public/bit, preserving its MIT license, legacy renderer, models, animation and sounds. Add BIT as the third program, with keyboard, mouse and tap selection. Escape unloads Bit and returns to the home menu.tests/bit.mjs verifies keyboard/mouse/tap selection, rendered Bit, mocked yes/no/unsure responses and repeated Escape returns. tests/home-menu.mjs passes with restored terminal positioning. Production build and Worker dry-run pass; tests/pwa.mjs validates installability, icons, offline Bit entry/Escape, offline tank/cycle starts, audio ranges and waiting updates. Speech was mocked; live microphone/provider responses were not exercised.tests/bit.mjs passes with mocked granted/prompt/denied/unsupported permission cases, deferred permission resolution, cursor visibility, track release, activation and Escape. Production build passes. No live microphone or paid provider calls were used.tests/bit.mjs passes, including centering within one pixel at 1280px and 390px widths for activation, running and permission-denied headings, with aligned following lines.tests/bit.mjs passes, checking exact hint wording, equal computed font sizes and both elements fading to zero after simulated speech.tests/bit.mjs pass. The browser check verifies hidden-before-start/visible-after-start hint behavior, each answer still opaque after 1.6 seconds and subsequently fading to zero, and the hint/instruction fade on simulated speech.tests/cycle-opening.mjs verifies loading coverage, hidden tank mesh, descending camera, held race time, pause/resume, race handoff and reduced-motion bypass. Inspected the arena approach capture. Production build passes.Enter Cycle Arena.m4v. Travel takes 13 seconds; the complete entrance lasts 20 seconds to accommodate the dialogue/transport/startup cues and a smooth handoff. Wall crossing stays above the 50 m rim; the race releases at 92% of the entrance.#343548) while preserving the dark vertical faces and symbols. Apply in the presentation material so existing breach cuts and restores retain the treatment.node tests/cycle-opening.mjs passes for loading coverage, descent, frozen race, pause/resume including mid-dialogue, audio loading, race handoff and reduced-motion bypass. Inspected rim, bank and grid captures against extracted film frames. The reconstruction preserves the existing authored maze and arena geometry; subjective motion and sound review remains with the user.git diff --check passes.node tests/cycle-opening.mjs passes on local macOS, including pause/resume, held countdown, audio loading and reduced-motion bypass. Inspected 3/7/10.5/14-second captures; the 10.5-second view is dominated by the downward-facing grid and the arrival faces the opposite wall. Production build passes with the existing chunk-size advisory; whitespace checks pass. Film-motion fidelity still needs the user's review.node tests/cycle-opening.mjs passes on local macOS, including normal simulation time versus wall-clock time after launch, hidden entrance hints, loading text removal, pause/resume and reduced-motion bypass. Inspected updated turn and downward-grid captures. Production build passes with the existing chunk-size advisory; git diff --check passes. Subjective motion matching remains for user review.tintColor override and createRecognizer(template, {tintColor}) presentation parameter. Default and arena-patrol colors have separate development-panel color pickers with black, green, blue and red presets. Arena patrol uses muted green; other units retain the original dark default. Only solid face materials change; trim and damage flashes remain independent, as do cloned vehicle materials. Tuning reset/export includes the colors.tests/cycle-opening.mjs also passes tint picker/preset/reset checks, verifies independent default and arena colors, and retains normal launch timing, pause/resume and reduced-motion coverage. Production build and whitespace checks pass (existing chunk-size advisory).public/images/encom-app.svg; regenerate public/icons/icon.svg and the 180/192/512 PNG sizes with node scripts/generate-app-icons.mjs. Inspected the rendered 512-pixel icon in Chrome on local macOS.git diff --check passes.tests/home-menu.mjs passes and confirms computed HUD/control font sizes match the terminal in both modes. Inspected desktop label/control captures; production build and whitespace checks pass with the existing chunk-size advisory. The earlier Chrome entrance run also verifies the solid carrier and moving patrol. Human flight-feel review remains pending.tests/assist-marker.mjs passes acquisition, lost alignment, manual gunner and destroyed-target cases; inspected the red V capture. Reserved extra HUD space beside the wider meters. Production build and whitespace checks pass (existing chunk-size advisory).~/Applications/Chrome Apps.localized/Space Paranoids.app, launching http://localhost:5173/. Its app.icns already contains the new E artwork; the Dock's ENCOM TERMINAL entry points to this same bundle. Restarted Dock to refresh its displayed icon. Use localhost when opening this installed app's origin; 127.0.0.1 is a separate origin.tests/assist-marker.mjs passes exact 15 × 6 sizing, three on/off flashes, steady 0.5 opacity without retriggering, fresh flashes after reacquisition, and disappearance on manual gunner/destruction. Production build and whitespace checks pass with the existing chunk-size advisory.tests/bit.mjs passes automatic entry, microphone approval/denial, temporary stream release, heading alignment, answers and Escape return. Production build and whitespace checks pass with the existing chunk-size advisory. No real microphone recording or paid provider requests were used.tests/assist-marker.mjs passes the exact 200 ms period, three flashes and steady state. Chrome tests/cycle-opening.mjs passes entrance, wall clearance, moving patrol, pause and gameplay handoff; inspected opening and carrier-angle captures. Full film-motion fidelity remains subject to visual review.npm test checks pass. Chrome tests/home-menu.mjs verifies maximum-speed cruise, steering, turret movement and firing during Clu's approach; tests/cycle-player.mjs verifies the north-side start, turning, turbo and restart. Target marker and entrance browser checks pass. Production build and whitespace checks pass (existing chunk-size advisory). Chrome headless on macOS; rendered carrier-angle, entrance and formation captures inspected. Human driving/sound and exact film fidelity still require review.git diff --cached --check flags. The earlier whitespace check covered tracked edits; these vendor-format warnings do not affect the passing build/browser checks.tests/cycle-player.mjs confirms gradual turbo/S response with real key events, plus charge, release, pause and restart. Its turning fixture clears the neighboring teammate's trail to isolate controls from the tighter formation's collision. Production build and whitespace checks pass (existing chunk-size advisory). Chrome headless on macOS; final driving feel remains for hands-on review.npm test checks pass. The long-range firing test now requires both hits and misses across deterministic assisted shots instead of assuming one shot always hits. Chrome tests/assist-marker.mjs verifies two flashes; tests/camera-walls.mjs records 389 clear rendered frames through actual maze-wall zoom/turn/gunner transitions. Production build and whitespace checks pass, with the existing chunk-size advisory. Chrome headless on macOS; final camera and shot feel still require human review.tests/cycle-opening.mjs passes entrance, patrol motion, formation, pause, handoff and zoom checks; inspected the rim flyby capture. Production build and whitespace checks pass (existing chunk-size advisory). Chrome headless on macOS; final game feel remains for hands-on review.tests/arena-camera.mjs verifies clearance above the actual gold model during normal follow and both side glances; inspected the close-wall capture showing the complete cycle from above. Production build and whitespace checks pass (existing chunk-size advisory). Chrome headless on macOS; final driving feel remains for hands-on review.tests/cycle-opening.mjs pass, including the formation hold and race handoff. Production build and whitespace checks pass (existing chunk-size advisory). Chrome headless on macOS; pacing remains for user review.tests/autoplay.mjs passes Shift-U activation, full-to-manual mode switching, manual Space firing while driving, and disabling, plus existing autoplay lifecycle checks. Provider responses were mocked; no paid requests. Updated an existing text assertion to accept the uppercase HUD and waited for its render before checking the mode label. Chrome headless on macOS.tests/extended-credits.mjs passes the complete tribute-to-signoff sequence and eight-line page layout checks. Whitespace checks pass.tests/arena-camera.mjs passes model clearance and real K/J zoomed-horizon checks; inspected the rendered horizon capture. The preview server stopped during the first capture attempt and was restarted before the successful run. Whitespace checks pass.npm test checks pass before committing the camera, driving, targeting, manual-fire autoplay, credits and presentation changes. Updated the credits page-count bound for the two requested soundtrack pages and explicitly assert both music credits. Prior targeted Chrome checks and production build results are recorded above.tests/cycle-opening.mjs (including the 1-second starting offset, patrol, audio, pause and handoff), production build and whitespace checks pass. Chrome headless on macOS; existing build chunk-size advisory remains.tests/bit.mjs passes replies, menu/exit and microphone-permission paths with mocked API responses; no paid requests. Production build and whitespace checks pass (existing chunk-size advisory). Chrome headless on macOS.tests/cycle-opening.mjs passes the entrance, held formation, handoff and zoom controls. Inspected the midpoint capture after changing the aim blend to follow a moving look point with world-up orientation. Chrome headless on macOS; final motion feel remains for user review.node tests/exit-confirm.mjs passes Clu, cycles and BIT pause/resume, cursor selection and blink timing, keyboard navigation/confirmation and click return home. Inspected the Clu panel capture; syntax and whitespace checks pass.npm test checks pass. Chrome headless on macOS, node tests/cycle-jev.mjs verifies mocked API requests, accepted arena decisions, human exclusion and paused scheduling. Unit checks cover round changes, visibility, stale replies, local fallback and blocked-cell overrides. Live-provider tactical quality remains unverified. Public deployment must include the updated Worker prompt alongside the client.public/images/encom-social-preview.jpg). Source: user attachment encom-terminal-v0-uxv6f49c6ssh1.png.webp; supplied for this site's preview, no broader license asserted.credentials/** before adding the JEV key. Allow only credentials/Typesafe.txt through Git's ignore rules. Export an owner-readable recovery key outside the repository; document unlocking and secure backup. Keep Cloudflare production secrets independent.unlimited. Preserve request size validation, timeout, short pacing and concurrent-request controls; no cumulative site usage cap remains. Existing usage counters do not block requests under the new configuration. TypeSafe account balance and provider limits govern total usage.runSeed and reference runs remain repeatable.docs/victory.txt.npm test passed 402 tests, including seeded patrol placement/formation preservation and victory cadence at 5–30 fps. Desktop Chrome: node tests/surface-audio.mjs verified left/right channel energy and distance attenuation; node tests/tank-wall-shadows.mjs produced inspected before/after tank captures without shader errors; node tests/wall-shadow-edges.mjs retained zero incorrect pixels in the exact wall fixture. Audible balance and the precise screenshot location still need user play review.node tests/credit-models.mjs passed seven model loads, fade synchronization, narrow-window hiding, reset during loading, disposal, and actual home-menu credit navigation. Inspected model and in-game captures in test-results/credit-model-*.png. node tests/camera-walls.mjs passed 483 rendered frames without wall crossings. node --test tests/camera-collision.test.js passed 10 tests including constant-height two-corner recovery, following a moving tank, and upward fallback with no bounded horizontal route. Victory printer tests also passed.