From 2f80ddfdb16ce20e7f0c90e1c3f69845bc5991fd Mon Sep 17 00:00:00 2001 From: Brian Fertig Date: Tue, 22 Sep 2026 07:19:20 -0600 Subject: [PATCH] Add periodic random ship encounters with neutral ally escorts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - New EncounterDirector (js/combat/Encounters.js): pure, data-driven clock that rolls pirate / neutral / mixed encounters in neutral non-home systems on a ~45–90s interval at 50–60% chance, one at a time with a 30–60s cooldown, never during a live wave run or on a downed player. - Neutral ally ships (js/combat/NeutralShip.js) on spritesheet frames 20–27: escort the player for a per-ship 10–15s window, engage the nearest pirate in mixed fights, then break off and fly off-screen; player-safe by construction (never targeted or damaged by ally bolts/seekers). - Pirate targeting generalized so hostiles can draw aggro onto escorts when the player is out of range; escort and pirate bolts/missiles collide with each other but not the player. - Group size scales with combat level (1–2 low → 4–5 high, bands in data/combat.json); encounter hostiles are one-shots so the fight ends when the sky clears. - New 'volley' weapon pattern (wide staggered-speed fan) and owner-tagged bolts/missiles for ally vs enemy routing in Weapons.js. - Neutral roster config + encounters section added to data/combat.json; EnemyTypes gains neutralTypeConfig/Ids/SheetList. - Tests: dev/encounters.test.mjs (cadence, gate, weights, size bands), dev/neutral.test.mjs (roster, escort AI, targeting, no friendly fire), plus combat/xp test updates; CDP probes and encounter-hud-check for in-browser HUD verification. --- .pi/.goals-pool-snapshot.json | 2 +- .pi/goals/.goal-ledger-checkpoint.json | 2 +- .../goal_2026092206331272_muc162bo-njvm8l.md | 148 ++++ .pi/goals/goal_events.jsonl | 18 + assets/images/ships-enemy.png | Bin 62268 -> 120090 bytes assets/images/ships-enemy.psd | Bin 605479 -> 1122119 bytes data/combat.json | 141 ++++ dev/combat.test.mjs | 54 +- dev/enc-probe2.mjs | 205 ++++++ dev/enc-probe3.mjs | 120 ++++ dev/enc-probe4.mjs | 122 ++++ dev/enc-probe5.mjs | 128 ++++ dev/enc-probe6.mjs | 127 ++++ dev/enc-probe7.mjs | 128 ++++ dev/enc-probe8.mjs | 127 ++++ dev/encounter-hud-check.mjs | 647 ++++++++++++++++++ dev/encounters.test.mjs | 288 ++++++++ dev/graphics-probe.mjs | 121 ++++ dev/hud-probe.mjs | 152 ++++ dev/neutral.test.mjs | 449 ++++++++++++ dev/pixel-probe.mjs | 155 +++++ dev/xp.test.mjs | 8 +- js/combat/CombatSystem.js | 261 ++++++- js/combat/Encounters.js | 213 ++++++ js/combat/EnemyTypes.js | 65 ++ js/combat/NeutralShip.js | 206 ++++++ js/combat/Weapons.js | 74 +- js/scenes/GameScene.js | 71 +- 28 files changed, 4005 insertions(+), 27 deletions(-) create mode 100644 .pi/goals/archived/goal_2026092206331272_muc162bo-njvm8l.md create mode 100644 dev/enc-probe2.mjs create mode 100644 dev/enc-probe3.mjs create mode 100644 dev/enc-probe4.mjs create mode 100644 dev/enc-probe5.mjs create mode 100644 dev/enc-probe6.mjs create mode 100644 dev/enc-probe7.mjs create mode 100644 dev/enc-probe8.mjs create mode 100644 dev/encounter-hud-check.mjs create mode 100644 dev/encounters.test.mjs create mode 100644 dev/graphics-probe.mjs create mode 100644 dev/hud-probe.mjs create mode 100644 dev/neutral.test.mjs create mode 100644 dev/pixel-probe.mjs create mode 100644 js/combat/Encounters.js create mode 100644 js/combat/NeutralShip.js diff --git a/.pi/.goals-pool-snapshot.json b/.pi/.goals-pool-snapshot.json index 7f986f3..072c10c 100644 --- a/.pi/.goals-pool-snapshot.json +++ b/.pi/.goals-pool-snapshot.json @@ -1 +1 @@ -{"version":1,"dirMtimeMs":1789956413250.3848,"goals":[]} \ No newline at end of file +{"version":1,"dirMtimeMs":1790080392798.7607,"goals":[]} \ No newline at end of file diff --git a/.pi/goals/.goal-ledger-checkpoint.json b/.pi/goals/.goal-ledger-checkpoint.json index 620f65d..e386810 100644 --- a/.pi/goals/.goal-ledger-checkpoint.json +++ b/.pi/goals/.goal-ledger-checkpoint.json @@ -1 +1 @@ -{"version":3,"format":"goal-ledger-checkpoint","createdAt":"2026-09-21T02:06:44.443Z","coveredBytes":47128,"coveredEvents":81,"acc":{"goals":[{"goalId":"mu3lln4y-51f5mi","latestStatus":"active","latestFocus":false,"latestAuditorResult":{"verdict":"approved","report":"The dev server (8080) and a CDP browser (9333) are live, so I can verify directly. First, let me look at the committed screenshot evidence and the README combat section.\n\nI've confirmed the screenshots show the combat HUD, reticles, and kill feed elements. Now I'll run the live CDP checks to verify SFX wiring and flight feel in the running dev environment.\n\nAll verification paths are now confirmed. Let me do a final constraint sweep before deciding.\n\n## Audit summary\n\nI verified the executor's claims against the actual repository and ran the live verification contract myself (dev server + CDP browser were available):\n\n**1. Distinct VFX + SFX per event, both contexts**\n- Code: `CombatScene.js` (range) and `CombatSystem.js` (main) both funnel every event through the shared `combatSfx`/`combatSfxEnemyHit` (7 distinct voices — scan/ui_click/solar_buzz/mining_split/thunder×4/deconstruct/discovery, all existing `data/sfx.json` files, all confirmed on disk) and the shared procedural `Fx` (muzzle flash, color-coded shield-cyan/hull-orange hit flash + damage number, kill burst with double ring, DOWN burst, REFORMED bloom — all canvas dots/additive).\n- Live: `node dev/combat.sfxcheck.mjs` → **PASS** in both `/combat` and `index.html?combat`, all seven events through the shared path (I ran it, exit 0).\n\n**2. Readability layer live in both contexts** (my own CDP probes)\n- Range: `lastFlash={kind:shield}`, kill feed entry landed, lock target acquired; gauge-flash overlay live (peak alpha 0.72, decaying).\n- Main: same, with the flash positioned exactly on the `CombatBar.gaugeRect('shield')` track (peak alpha 1.0), bar visible, feed entry, target true.\n- Committed screenshots `dev/shots/combat-range.png` / `combat-main.png` visually show: lock reticle, threat dots, kill feed \"HOSTILE DESTROYED\", damage numbers (\"10\"), kill burst, tracer, combat bar gauges.\n\n**3. Ship handling (range WASD)**\n- `node dev/combat-flycheck.mjs` → **PASS**: 337 ms to 60% maxSpeed, 133 ms to 30° turn, 7.45 rad/s sustained spin, 308 ms stop from 560 px/s.\n- Real keyboard check: actual 'W' keydown accelerated the ship 0→526 px/s; keyup released it.\n- Values live in `data/combat.json` → `combat.player`; pure `handleFeel` in `js/combat/Combat.js`; both contexts read the same file (weapon, armor, readability, bar).\n\n**4. Tests & docs**\n- `node dev/combat.test.mjs` → 96 checks, **0 failures** (exit 0); `sfx.test.mjs` 21/21.\n- `dev/combat-shot.mjs` follows the `dev/cdp-shot.mjs` CDP pattern; README combat section fully documents feel, the VFX set, the SFX map, the readability layer, and all three dev checkers + hooks.\n\n**Constraints honored**: pure rules in `Combat.js` (unit-tested), single tuning surface `data/combat.json`, shared modules across both contexts (no divergent copies), no new binary game assets (only the two evidence screenshots in the diff), hand-rolled circle collision only, skill stubs (`cast()` no-op), energy gauge (regen 0, full), and auto-fire left as-is, Phaser 4 UMD + plain ES6.\n\nEvery explicit success criterion and the verification contract are genuinely satisfied; the executor's claims match the evidence I independently reproduced.\n\n","at":"2026-09-16T09:04:06.559Z"},"createdAt":"2026-09-16T04:26:00.418Z"},{"goalId":"mu4xefwj-ebnq8h","latestStatus":"active","latestFocus":false,"latestAuditorResult":{"verdict":"approved","report":"Fx.js and Bullet.js look substantial. Now the shake module and tuning surface.\n\nNow let me inspect the call sites in both contexts.\n\nThe dev server and headless browser are live. Let me check the debug seams exposed by both contexts, then run a read-only live probe.\n\nI've verified the code paths on both sides. Now I'll run a live probe of both contexts through the dev server to confirm everything's working.\n\nThe two \"FAIL\"s within the range are actually bugs in my probe (scale is 46×10 world px = elongated; -180° ≡ 180°). The main game result needs investigation — let me inspect the actual shape of `__ORBIT_COMBAT__`:\n\nAll checks are now resolved. Final audit summary:\n\n**Verified via code inspection + live CDP probes in both contexts (range `/combat` and `index.html?combat`), with zero console errors:**\n\n1. **Laser bolts (both contexts):** 128×32 canvas bolt texture (fading trail band + bright core streak + head bloom) scaled to 46×10 px player / 54×12 px enemy (elongated 4.6:1, measured), tinted halo (cyan `00e5ff` player, `#ff2d6f` enemy from weapon config), untinted white core dot riding the tip (measured offset 17.25 px ahead of center), directional muzzle flare — bore spike measured at the exact firing angle in both contexts. `fx.muzzle` + `spawnBullet(boltLength/boltWidth)` call sites are symmetric in `CombatScene.js` and `CombatSystem.js`.\n\n2. **Enemy impact reads:** hot white + colored core flash, directional sparks/shards measured within the cone along the bullet's actual travel vector, white craft hit-flash via `tintMode=1` FILL (measured `ffffff`/mode 1 during flash, restored to 0 on expiry — and the previously-flagged ship-destruction defect is fixed: enemy and player ship both survive expiry, verified live), cyan arc ripple at the exact incoming bearing (travel +180°, measured 134.2°/134.2° in range and −42.5°/−42.5° in main) vs orange bolt-textured shards + tight orange ring with **no** arc on hull hits (measured), damage-number pops (measured \"10\"/\"8\").\n\n3. **Shield-sphere strike:** faint full-sphere outline + bright arc segment (1.90 rad, span-keyed texture `__combat_shield_s1.90`) centered exactly on the laser's incoming bearing (measured 135° and 45°), radial ripple from the impact point, outward-biased spark burst, ship white flash, damage-scaled intensity, ~0.5 s decay (config `decayMs: 520`); shield→hull break shows the `ringIn` implosion + shockwave (measured); rams funnel through the same bearing-based `damagePlayer` treatment in both contexts.\n\n4. **Shake:** world camera `shakeEffect` measured running on player hit, enemy kill, and shield-break; `fx-ui` camera measured inactive in both contexts (HUD/bar on the untouched UI pass).\n\n5. **Tuning surface:** `boltLength/boltWidth/muzzle` + `fx.shake` + `fx.shield` knobs in `data/combat.json`, all read via `config.get/section`; live values match config; git diff confirms only visual knobs were added (no gameplay numbers touched).\n\n6. **No regressions:** `node dev/combat.test.mjs` → 146 checks, 0 failures, exit 0; only that suite imports the changed modules; both contexts boot and play (range fully exercised; main game ran a live 3 s auto-fire fight with the pack intact, ship alive); diff confined to `js/combat/*` + `CamShake.js` + `data/combat.json` — no new dependencies, no build step, hand-rolled FX (no emitters), depth discipline (ships 10 / FX 19–22 / HUD 100) holds.\n\nThe eight \"failures\" in my first probe round were all arithmetic/sequencing bugs in my own probe (angle wraparound, aspect-ratio math, a missing target fallback) — each was re-verified individually and passes.\n\n","at":"2026-09-17T05:08:04.224Z"},"createdAt":"2026-09-17T02:44:06.019Z"},{"goalId":"mu7ieab2-f24hte","latestStatus":"paused","latestFocus":true,"latestPauseReason":"user","createdAt":"2026-09-18T22:07:23.053Z","resumedAt":"2026-09-19T04:17:54.636Z"},{"goalId":"mu986lbo-140zqa","latestStatus":"active","latestFocus":false,"latestAuditorResult":{"verdict":"approved","report":"The config file looks complete. Now let me inspect the combat modules and tests.\n\nThe CDP endpoint and dev server are both live. Let me run the browser verification harnesses myself to confirm the claims.\n\nBoth independent browser harnesses pass. Let me verify the change scope didn't touch out-of-scope files and confirm the remaining details.\n\nAll success criteria verified against real artifacts, with independent re-runs of the verification contract:\n\n**1. Seven new types (frames 1–7), distinct stats + patterns, monotonic modest ramp** — `data/combat.json → enemyTypes`: bomber(f1, 80/10, dmg 10, lance), spitter(f2, 90/20, 11, spray 5 bolts/1.1 rad), stinger(f3, 100/25, 12, burst 3 staggered-speed), hunter(f4, 110/30, 13, heat-seeking missile), gunner(f5, 120/40, 14, rapid cd 0.5), barrage(f6, 135/50, 15, ring 8), warden(f7, 150/60, 18+20, combo). Hull 80→90→100→110→120→135→150, shields 10→20→25→30→40→50→60, damage 10→11→12→13→14→15→18 — strictly monotonic, bumps ≤ +15 (no wall). Raider (frame 0) and `pirate_ambunch` untouched (diff confirms only comments/enemyTypes/combat_demo changed).\n\n**2. Weapons implemented on a shared path, missile genuinely new** — `js/combat/Weapons.js` `firePattern` dispatches all 7 patterns; `js/combat/Missile.js` is the only new projectile (canvas art + sprite), rest are bolt loops/config. `homingStep` (capped turn) lives in pure `js/combat/Combat.js`. Missile caps: turn 2.2/2.4 rad/s vs player rotSpeed 6.4 rad/s, speed 170/190 px/s vs player maxSpeed 560 — dodgeable, and the cap is asserted in tests. Both `CombatScene.fireEnemy` and `CombatSystem.fireEnemy` now delegate to `firePattern` (old inline single-bolt code removed), and both run `stepMissiles`/`missilesHitPlayer`.\n\n**3. ?combat rewired** — `GameScene:1050` `this.combat.startWaves('combat_demo')`; `spawnPack` demoted to a practice pack (no longer the boot). `combat_demo` = exactly 7 rolling waves, one single type each in difficulty order, each `count: 6, maxConcurrent: 3, replacePerKill: 1`.\n\n**4. Tests — I ran them** — `node dev/combat.test.mjs` → \"combat rules: all checks passed\" (0 failures), including pure-geometry, all-7 pattern dispatch, missile homing/fuse/consume, and a full 7-wave CombatSystem end-to-end (42 kills, 3-on-screen cap, replacement-per-kill, 7 starts/7 clears). `EnemyTypes.js`/`Waves.js` import only `config/Config.js` (no Phaser).\n\n**5. Browser verification — I re-ran both CDP harnesses** (headless Chromium on :9333, dev server :8080): `dev/combat-demo-check.mjs` → \"seven ships: PASS\" (range: all 7 volleys with correct shape incl. 5-bolt fan, 8-bolt even ring, staggered burst, homing missile; main: 7 waves in order, 3 on screen, replacement per kill, done at 42 kills) and `dev/combat.sfxcheck.mjs` → PASS (range 9/9, main 10/10 events incl. `missile_fire`). The range (`/combat`) shares the firing path and renders all 7 patterns — not broken.\n\nDiff scope is confined to the in-scope files (combat.json, js/combat/*, GameScene, dev tests); no out-of-scope files (XP curve, ship.json, sidequests) touched by this goal's changes.\n\n","at":"2026-09-20T05:06:03.693Z"},"createdAt":"2026-09-20T02:57:00.276Z"},{"goalId":"mu9xzeqf-e5m5ej","latestStatus":"paused","latestFocus":false,"latestPauseReason":"Scheduling paused","createdAt":"2026-09-20T14:59:15.159Z"}],"terminalGoals":[],"focusedGoalId":"mu9xzeqf-e5m5ej","focusGeneration":3,"focusGenByGoal":[["mu7ieab2-f24hte",2],["mu9xzeqf-e5m5ej",3]]},"recentEventsByGoal":[["mu3lln4y-51f5mi",[{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-1","at":"2026-09-16T04:26:15.002Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-1","evidence":"Audit doc at .pi/goals/combat-feedback-audit.md; baseline node dev/combat.test.mjs passes (all checks green)","at":"2026-09-16T04:33:51.611Z"},{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-2","at":"2026-09-16T04:35:30.972Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-2","evidence":"Committed 5949bac: pure handleFeel (exact integration) + combat.player tuning (thrust 2000/drag 1.8/rot 6.4/brake 0.9); WASD fixed (addKeys comma-list bug → event API); dev/combat.test.mjs 0 failures;","at":"2026-09-16T06:19:40.253Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-3","evidence":"Committed: shared js/combat/CombatSfx.js (7 distinct voices from existing sfx.json: fire=scan, impact=ui_click, shield=solar_buzz, hull=mining_split, kill=thunder×4 random, down=deconstruct, respawn=d","at":"2026-09-16T06:48:29.383Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-4","evidence":"Committed ecff203: Fx.js gains damage() (cyan=shield/orange=hull numbers), color-coded hit flashes, enhanced kill burst (delayed 2nd shockwave), down() + respawn() cues, shared FX_COLORS. Both context","at":"2026-09-16T07:07:02.597Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-5","evidence":"Commit 0d51184: CombatHud shared (lock reticle, threat cues, off-screen arrows, kill feed, gauge flash); pickTarget/feedPush/offscreenArrow in Combat.js; resyncAroundShip fixes main-game pack placemen","at":"2026-09-16T08:03:23.498Z"},{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-6","at":"2026-09-16T08:03:51.673Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-6","evidence":"combat.test.mjs 96 checks + sfx.test.mjs 21 checks = 0 failures; sfxcheck PASS both contexts (7 events); gauge-flash/lock/threat/feed verified in both; combat-shot.mjs → dev/shots/combat-range.png + c","at":"2026-09-16T08:59:41.075Z"},{"type":"completion_requested","goalId":"mu3lln4y-51f5mi","at":"2026-09-16T09:00:25.729Z"},{"type":"audit_started","goalId":"mu3lln4y-51f5mi","at":"2026-09-16T09:00:25.730Z"},{"type":"audit_result","goalId":"mu3lln4y-51f5mi","verdict":"approved","report":"The dev server (8080) and a CDP browser (9333) are live, so I can verify directly. First, let me look at the committed screenshot evidence and the README combat section.\n\nI've confirmed the screenshots show the combat HUD, reticles, and kill feed elements. Now I'll run the live CDP checks to verify SFX wiring and flight feel in the running dev environment.\n\nAll verification paths are now confirmed. Let me do a final constraint sweep before deciding.\n\n## Audit summary\n\nI verified the executor's claims against the actual repository and ran the live verification contract myself (dev server + CDP browser were available):\n\n**1. Distinct VFX + SFX per event, both contexts**\n- Code: `CombatScene.js` (range) and `CombatSystem.js` (main) both funnel every event through the shared `combatSfx`/`combatSfxEnemyHit` (7 distinct voices — scan/ui_click/solar_buzz/mining_split/thunder×4/deconstruct/discovery, all existing `data/sfx.json` files, all confirmed on disk) and the shared procedural `Fx` (muzzle flash, color-coded shield-cyan/hull-orange hit flash + damage number, kill burst with double ring, DOWN burst, REFORMED bloom — all canvas dots/additive).\n- Live: `node dev/combat.sfxcheck.mjs` → **PASS** in both `/combat` and `index.html?combat`, all seven events through the shared path (I ran it, exit 0).\n\n**2. Readability layer live in both contexts** (my own CDP probes)\n- Range: `lastFlash={kind:shield}`, kill feed entry landed, lock target acquired; gauge-flash overlay live (peak alpha 0.72, decaying).\n- Main: same, with the flash positioned exactly on the `CombatBar.gaugeRect('shield')` track (peak alpha 1.0), bar visible, feed entry, target true.\n- Committed screenshots `dev/shots/combat-range.png` / `combat-main.png` visually show: lock reticle, threat dots, kill feed \"HOSTILE DESTROYED\", damage numbers (\"10\"), kill burst, tracer, combat bar gauges.\n\n**3. Ship handling (range WASD)**\n- `node dev/combat-flycheck.mjs` → **PASS**: 337 ms to 60% maxSpeed, 133 ms to 30° turn, 7.45 rad/s sustained spin, 308 ms stop from 560 px/s.\n- Real keyboard check: actual 'W' keydown accelerated the ship 0→526 px/s; keyup released it.\n- Values live in `data/combat.json` → `combat.player`; pure `handleFeel` in `js/combat/Combat.js`; both contexts read the same file (weapon, armor, readability, bar).\n\n**4. Tests & docs**\n- `node dev/combat.test.mjs` → 96 checks, **0 failures** (exit 0); `sfx.test.mjs` 21/21.\n- `dev/combat-shot.mjs` follows the `dev/cdp-shot.mjs` CDP pattern; README combat section fully documents feel, the VFX set, the SFX map, the readability layer, and all three dev checkers + hooks.\n\n**Constraints honored**: pure rules in `Combat.js` (unit-tested), single tuning surface `data/combat.json`, shared modules across both contexts (no divergent copies), no new binary game assets (only the two evidence screenshots in the diff), hand-rolled circle collision only, skill stubs (`cast()` no-op), energy gauge (regen 0, full), and auto-fire left as-is, Phaser 4 UMD + plain ES6.\n\nEvery explicit success criterion and the verification contract are genuinely satisfied; the executor's claims match the evidence I independently reproduced.\n\n","at":"2026-09-16T09:04:06.559Z"}]],["mu4xefwj-ebnq8h",[{"type":"task_list_set","goalId":"mu4xefwj-ebnq8h","taskCount":4,"blockCompletion":false,"at":"2026-09-17T02:44:06.019Z"},{"type":"task_started","goalId":"mu4xefwj-ebnq8h","taskId":"task-1","at":"2026-09-17T02:59:45.101Z"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-1","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Bolt texture (128x32 gradient trail+core+bloom) + white core head in js/combat/Bullet.js; fx.muzzle in CombatScene/CombatSystem; boltLength/boltWidth/muzzle knobs in data/combat.json; verified in /com"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-2","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Fx.enemyHit: core flash, dir sparks along travel vector, craft white tintFill flash, cyan arc ripple (shield) vs orange shards (hull), damage-number pop; called identically in CombatScene.collide + Co"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-3","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Fx.shieldImpact: sphere outline + arc centered on bearing (travel+PI), ripple, sparks, k-scaled by damage, 520ms decay; shieldBreak implosion+shockwave; rams use same treatment with bearing; verified "},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-4","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"combatShake on hit/kill/break; live probe: main cam shakeEffect isRunning=true duration=230, fx-ui cam isRunning=false; knobs in data/combat.json fx.shake/fx.shield; node dev/combat.test.mjs = 146 che"},{"type":"completion_requested","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T04:35:11.875Z"},{"type":"audit_started","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T04:35:11.876Z"},{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"disapproved","report":"The headless browser is already up. Let me run my own live probe against both contexts to verify boot, the FX paths, and the camera-shake split.\n\nI found some console errors in the probe (a `setTintFill` deprecation and a `wallClamp` TypeError). Let me investigate both.\n\n## Audit report\n\nI verified the goal against the real artifacts, including live browser probes of both contexts (dev server + CDP). Much of the visual work is genuinely present, but the implementation contains a fatal regression in the shared FX path that breaks \"both contexts boot and play\" and silently fails one explicit success criterion.\n\n### Verified as delivered\n- **Bolts in both contexts** — `js/combat/Bullet.js` builds a 128×32 canvas bolt (fading trail band + core streak + head bloom) with an untinted white core dot riding the tip; tinted cyan (`#00e5ff`) / magenta-pink (`#ff2d6f`) from `data/combat.json` weapon colors; `boltLength/boltWidth` knobs read and applied (live probe: `boltScale [54,12]`, textures present, bolts visible in both committed screenshots).\n- **Directional muzzle flash** — `Fx.muzzle` (bore spike + bloom + cross glint, rotated to firing axis) called at every fire site in `CombatScene.firePlayer/fireEnemy` and `CombatSystem.firePlayerAt/fireEnemy`.\n- **Enemy impact read** — `Fx.enemyHit`: core flash, sparks along the travel vector, cyan arc + ring on shield hits vs orange shards + tight ring on hull, damage-number pop with scale-settle. Live-verified on the range (`arcFlash`, `ring`, 17 sparks, `tintFlash`, `text` all spawned).\n- **Shield-sphere hit from the laser's bearing** — `Fx.shieldImpact`: full-sphere outline + bright arc centered on the bearing (live check: bearing 135° → texture rotated exactly 135°), ripple, bearing-biased sparks, damage-scaled `k`, 520 ms decay; `shieldBreak` collapse cue (implosion + shockwave + shedding) fired on shield→hull break; rams route through the same bearing-based `damagePlayer`. Both contexts call the identical shared methods.\n- **Shake** — `combatShake` on hit/kill/break with `fx.shake` knobs (0.0045/0.007/0.011, 230 ms); live probe: world camera shake running, `fx-ui` camera shake inactive.\n- **Tuning surface, tests, constraints** — all knobs in `data/combat.json`; `node dev/combat.test.mjs` = 146 checks, 0 failures; no new dependencies (Phaser vendored), no build step, hand-rolled FX pattern (no emitters); depths in the 19–22 band, ships 10, HUD ≥60–120.\n\n### Blocking findings (verified live, not speculation)\n1. **`Fx.update` destroys the ships.** The expiry branch unconditionally calls `it.img.destroy()` — but `craftFlash` pushes items whose `img` is the ship itself (`kind:'tintFlash'`, 150–160 ms). Evidence:\n - Unit: real `Fx` class, `shieldImpact` + `fx.update(700ms)` → `shipDestroyedAfterShieldImpactExpire: true`.\n - Range: runtime stack captured `Ship.destroy ← Fx.update (Fx.js:599)`; after one non-lethal hit the enemy craft is gone 150 ms later with `dead:false` (no kill FX, no respawn bookkeeping — a ghost), then `CombatScene.update` throws `TypeError: Cannot read properties of undefined (reading 'velocity')` (`wallClamp`/`updatePlayer`) and the game loop dies. I reproduced this on a fresh page with no interaction beyond letting the pack fight.\n - Main game: the moment `combat.update` stepped, all 21 FX items — including the player ship's `tintFlash` — were consumed/destroyed.\n This contradicts \"both contexts boot and play\", \"no regressions\", and corrupts hit/kill/respawn bookkeeping in both contexts.\n2. **\"Visible white hit-flash on the enemy craft\" is not delivered.** In this vendored Phaser 4.2.1 build, `setTintFill` is a removed no-op that only `console.error`s (verified in `lib/phaser.min.js`: `` setTintFill:function(){console.error(...)}``). So `craftFlash` sets `setTint(0xffffff)` (invisible on an untinted sprite), the FILL mode is never applied, and the fallback bloom never triggers (nothing throws). Every hit spams a console error; the required white craft flash is absent.\n\n### Minor observations\n- Three untracked, unreferenced MP3s under `assets/fx/` (not wired into `data/sfx.json` or `CombatSfx.js`) — noise against the \"audio changes out of scope\" boundary.\n- In my main-game probes the `GameScene.update` loop was idle (tutorial comms hold), and the committed main-game screenshot shows a straight line of static bolts — the \"main game plays\" evidence is weaker than the range evidence, independent of the defects above.\n\nThe laser/impact/shield-sphere visuals are mostly real and well-built, but the shared `Fx` class killing the hit craft on flash expiry is a fatal, reproducible regression in the range (and a latent player-ship destroy in the main game), and the white hit-flash requirement is silently unmet.\n\n","at":"2026-09-17T04:42:45.235Z"},{"type":"completion_requested","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T05:01:50.034Z"},{"type":"audit_started","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T05:01:50.036Z"},{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"approved","report":"Fx.js and Bullet.js look substantial. Now the shake module and tuning surface.\n\nNow let me inspect the call sites in both contexts.\n\nThe dev server and headless browser are live. Let me check the debug seams exposed by both contexts, then run a read-only live probe.\n\nI've verified the code paths on both sides. Now I'll run a live probe of both contexts through the dev server to confirm everything's working.\n\nThe two \"FAIL\"s within the range are actually bugs in my probe (scale is 46×10 world px = elongated; -180° ≡ 180°). The main game result needs investigation — let me inspect the actual shape of `__ORBIT_COMBAT__`:\n\nAll checks are now resolved. Final audit summary:\n\n**Verified via code inspection + live CDP probes in both contexts (range `/combat` and `index.html?combat`), with zero console errors:**\n\n1. **Laser bolts (both contexts):** 128×32 canvas bolt texture (fading trail band + bright core streak + head bloom) scaled to 46×10 px player / 54×12 px enemy (elongated 4.6:1, measured), tinted halo (cyan `00e5ff` player, `#ff2d6f` enemy from weapon config), untinted white core dot riding the tip (measured offset 17.25 px ahead of center), directional muzzle flare — bore spike measured at the exact firing angle in both contexts. `fx.muzzle` + `spawnBullet(boltLength/boltWidth)` call sites are symmetric in `CombatScene.js` and `CombatSystem.js`.\n\n2. **Enemy impact reads:** hot white + colored core flash, directional sparks/shards measured within the cone along the bullet's actual travel vector, white craft hit-flash via `tintMode=1` FILL (measured `ffffff`/mode 1 during flash, restored to 0 on expiry — and the previously-flagged ship-destruction defect is fixed: enemy and player ship both survive expiry, verified live), cyan arc ripple at the exact incoming bearing (travel +180°, measured 134.2°/134.2° in range and −42.5°/−42.5° in main) vs orange bolt-textured shards + tight orange ring with **no** arc on hull hits (measured), damage-number pops (measured \"10\"/\"8\").\n\n3. **Shield-sphere strike:** faint full-sphere outline + bright arc segment (1.90 rad, span-keyed texture `__combat_shield_s1.90`) centered exactly on the laser's incoming bearing (measured 135° and 45°), radial ripple from the impact point, outward-biased spark burst, ship white flash, damage-scaled intensity, ~0.5 s decay (config `decayMs: 520`); shield→hull break shows the `ringIn` implosion + shockwave (measured); rams funnel through the same bearing-based `damagePlayer` treatment in both contexts.\n\n4. **Shake:** world camera `shakeEffect` measured running on player hit, enemy kill, and shield-break; `fx-ui` camera measured inactive in both contexts (HUD/bar on the untouched UI pass).\n\n5. **Tuning surface:** `boltLength/boltWidth/muzzle` + `fx.shake` + `fx.shield` knobs in `data/combat.json`, all read via `config.get/section`; live values match config; git diff confirms only visual knobs were added (no gameplay numbers touched).\n\n6. **No regressions:** `node dev/combat.test.mjs` → 146 checks, 0 failures, exit 0; only that suite imports the changed modules; both contexts boot and play (range fully exercised; main game ran a live 3 s auto-fire fight with the pack intact, ship alive); diff confined to `js/combat/*` + `CamShake.js` + `data/combat.json` — no new dependencies, no build step, hand-rolled FX (no emitters), depth discipline (ships 10 / FX 19–22 / HUD 100) holds.\n\nThe eight \"failures\" in my first probe round were all arithmetic/sequencing bugs in my own probe (angle wraparound, aspect-ratio math, a missing target fallback) — each was re-verified individually and passes.\n\n","at":"2026-09-17T05:08:04.224Z"}]],["mu7ieab2-f24hte",[{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T04:06:34.695Z"},{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"Scheduling paused","source":"agent","at":"2026-09-19T04:06:46.015Z"},{"type":"goal_resumed","goalId":"mu7ieab2-f24hte","reason":"user","at":"2026-09-19T04:17:54.636Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-2","evidence":"dev/ship-window.test.mjs: every configured row resolves finite from real data; fireRate=1/cd, DPS=damage/cd, accel=ship.thrust, recharge=combat.playerShield. Screenshots reviewed: nominal (HULL 100/CU","at":"2026-09-19T04:54:26.329Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-3","evidence":"dev/ship-window.test.mjs drives real XpManager: levels 0-4 → timeline, 5 & 6 → CHOOSE YOUR CLASS door, class on file → class plate (mode flips exactly at data classAt=5; maxLevel untouched). Screensho","at":"2026-09-19T05:04:37.254Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-4","at":"2026-09-19T05:04:55.422Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-4","evidence":"Screenshots reviewed at 1920x1080: empty hold (\"HOLD EMPTY — EVERY BAY IS CLEAN\", EMPTY tiles, +12 LOCKED pips, 0% / NO ORE ABOARD) and loaded (icons+names, MANIFEST tags, \"4/6 BAYS · 2 FREE\", +10 LOC","at":"2026-09-19T05:21:51.901Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-5","at":"2026-09-19T05:22:27.127Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-5","evidence":"Selecting a filled bay opens BAY MANIFEST (js/ui/ShipWindow.js _paintManifest): goods icon frame, name, CLASS/TIER/BASE VALUE chips (labels from data), flavor, MADE IN origin|hub pool + producer class","at":"2026-09-19T06:10:11.478Z"},{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T14:55:34.986Z"},{"type":"goal_focused","goalId":"mu7ieab2-f24hte","reason":"selected","at":"2026-09-19T15:32:31.167Z"},{"type":"goal_focused","goalId":"mu7ieab2-f24hte","reason":"selected","at":"2026-09-19T15:38:35.941Z"}]],["mu986lbo-140zqa",[{"type":"goal_created","goalId":"mu986lbo-140zqa","objective":"=== Goal ===\nObjective: Give the 7 new enemy ships (spritesheet frames 1–7) distinct stats and attack patterns using a mix of weapon types (heat-seeking missiles, spray, plus new ideas), ramping modestly in difficulty frame 1 → 7, and rewire the ?combat demo to send a sequence of rolling waves — one wave per ship type in difficulty order, 6 ships of that type per wave, 3 on screen at a time.\n\nSuccess criteria:\n- data/combat.json → enemyTypes has 7 new types (frames 1–7), each with distinct stats + a distinct weapon pattern; difficulty (hull/shields/damage) climbs monotonically frame 1 → 7 with only modest bumps (not a wall).\n- Weapon types actually implemented and used: heat-seeking missile (dodgeable — capped turn-rate), spray fan, rapid burst, rapid-fire, ring burst, and a heavy/elite combo. The missile is the only genuinely new projectile; the rest are loops/config over the existing bolt.\n- All 7 fire their pattern correctly in BOTH the main-game ?combat boot and the standalone range (shared firing path).\n- The ?combat boot now dispatches a sequence of rolling waves: 7 waves in difficulty order, each wave = 6 ships of that single type, maxConcurrent=3, each kill sending in a replacement (replacePerKill=1).\n- dev/combat.test.mjs still passes (pure Node modules: EnemyTypes/Waves stay Phaser-free).\n\nBoundaries:\n- In scope: data/combat.json (enemyTypes + a new wave script + ?combat wiring), js/combat (new weapon behaviors: EnemyShip firing, a missile projectile, fireEnemy dispatch in both CombatScene and CombatSystem), dev/combat.test.mjs.\n- Out of scope: new art/sprites, player-ship changes, the XP curve, and the existing pirate_ambush quest wave (stays as-is). The pre-existing frame-0 raider stays untouched.\n- New weapons must not break the standalone range (combat.html / dev server /combat) — it shares the firing path.\n\nConstraints (hard rules):\n- Heat-seeking missiles MUST be dodgeable: capped turn-rate + moderate speed, so the player can out-turn them.\n- Each subsequent ship only a LITTLE harder than the previous (modest +hull/+shields/+damage), not a big jump.\n- Keep EnemyTypes.js and Waves.js pure (no Phaser/scene imports) so dev/combat.test.mjs runs in bare Node.\n- ?combat demo: exactly 7 waves, one type each, in difficulty order; rolling; 6 per wave; 3 concurrent; 1 replacement per kill.\n- Don't mutate shared config sections in place (deepMerge already guards this; follow the pattern).\n\nVerification contract:\n- Run dev/combat.test.mjs → 0 failures.\n- grep confirms the new wave script is wired to the ?combat boot (spawnPack replaced) and all 7 frames are referenced in enemyTypes.\n- Manual browser check of ?combat: 7 waves fire in order, 3 on screen at a time, one type per wave; missiles visibly home and can be dodged; spray/burst/ring render correctly.\n- Re-read the 7-ship roster table and confirm each type's pattern + difficulty bump is present.\n\nIf blocked: stop and ask the user.","sisyphus":false,"autoContinue":true,"at":"2026-09-20T02:57:00.276Z"},{"type":"task_list_set","goalId":"mu986lbo-140zqa","taskCount":4,"blockCompletion":true,"at":"2026-09-20T02:57:00.276Z"},{"type":"task_started","goalId":"mu986lbo-140zqa","taskId":"task-1","at":"2026-09-20T02:57:57.911Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-1","evidence":"Node check: 7 types (frames 1–7) resolve; hull 80→150, xp 18→42 monotonic; 7 distinct patterns; combat_demo normalizes to 7 rolling waves (6/3/1 each)","at":"2026-09-20T03:05:24.313Z"},{"type":"task_started","goalId":"mu986lbo-140zqa","taskId":"task-2","at":"2026-09-20T03:05:24.314Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-2","evidence":"Missile.js (capped turn homing, Node-tested) + Weapons.js firePattern dispatch all 7 patterns; both contexts wired (CombatScene/CombatSystem.fireEnemy → firePattern); Node suite green importing EnemyT","at":"2026-09-20T04:21:17.494Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-3","evidence":"GameScene:1050 startWaves('combat_demo') (spawnPack no longer the boot path); combat_demo = 7 rolling waves bomber→warden, 6/3/1 each; Node e2e run passes; browser sfxcheck found live wave ship after ","at":"2026-09-20T04:21:17.495Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-4","evidence":"node dev/combat.test.mjs: all checks passed (0 failures). CDP demo check PASS: range renders all 7 patterns w/ shape; main 7 waves in order, 3 on screen, replacement/kill, 42 kills done. sfxcheck PASS","at":"2026-09-20T05:03:03.769Z"},{"type":"completion_requested","goalId":"mu986lbo-140zqa","at":"2026-09-20T05:03:52.556Z"},{"type":"audit_started","goalId":"mu986lbo-140zqa","at":"2026-09-20T05:03:52.557Z"},{"type":"audit_result","goalId":"mu986lbo-140zqa","verdict":"approved","report":"The config file looks complete. Now let me inspect the combat modules and tests.\n\nThe CDP endpoint and dev server are both live. Let me run the browser verification harnesses myself to confirm the claims.\n\nBoth independent browser harnesses pass. Let me verify the change scope didn't touch out-of-scope files and confirm the remaining details.\n\nAll success criteria verified against real artifacts, with independent re-runs of the verification contract:\n\n**1. Seven new types (frames 1–7), distinct stats + patterns, monotonic modest ramp** — `data/combat.json → enemyTypes`: bomber(f1, 80/10, dmg 10, lance), spitter(f2, 90/20, 11, spray 5 bolts/1.1 rad), stinger(f3, 100/25, 12, burst 3 staggered-speed), hunter(f4, 110/30, 13, heat-seeking missile), gunner(f5, 120/40, 14, rapid cd 0.5), barrage(f6, 135/50, 15, ring 8), warden(f7, 150/60, 18+20, combo). Hull 80→90→100→110→120→135→150, shields 10→20→25→30→40→50→60, damage 10→11→12→13→14→15→18 — strictly monotonic, bumps ≤ +15 (no wall). Raider (frame 0) and `pirate_ambunch` untouched (diff confirms only comments/enemyTypes/combat_demo changed).\n\n**2. Weapons implemented on a shared path, missile genuinely new** — `js/combat/Weapons.js` `firePattern` dispatches all 7 patterns; `js/combat/Missile.js` is the only new projectile (canvas art + sprite), rest are bolt loops/config. `homingStep` (capped turn) lives in pure `js/combat/Combat.js`. Missile caps: turn 2.2/2.4 rad/s vs player rotSpeed 6.4 rad/s, speed 170/190 px/s vs player maxSpeed 560 — dodgeable, and the cap is asserted in tests. Both `CombatScene.fireEnemy` and `CombatSystem.fireEnemy` now delegate to `firePattern` (old inline single-bolt code removed), and both run `stepMissiles`/`missilesHitPlayer`.\n\n**3. ?combat rewired** — `GameScene:1050` `this.combat.startWaves('combat_demo')`; `spawnPack` demoted to a practice pack (no longer the boot). `combat_demo` = exactly 7 rolling waves, one single type each in difficulty order, each `count: 6, maxConcurrent: 3, replacePerKill: 1`.\n\n**4. Tests — I ran them** — `node dev/combat.test.mjs` → \"combat rules: all checks passed\" (0 failures), including pure-geometry, all-7 pattern dispatch, missile homing/fuse/consume, and a full 7-wave CombatSystem end-to-end (42 kills, 3-on-screen cap, replacement-per-kill, 7 starts/7 clears). `EnemyTypes.js`/`Waves.js` import only `config/Config.js` (no Phaser).\n\n**5. Browser verification — I re-ran both CDP harnesses** (headless Chromium on :9333, dev server :8080): `dev/combat-demo-check.mjs` → \"seven ships: PASS\" (range: all 7 volleys with correct shape incl. 5-bolt fan, 8-bolt even ring, staggered burst, homing missile; main: 7 waves in order, 3 on screen, replacement per kill, done at 42 kills) and `dev/combat.sfxcheck.mjs` → PASS (range 9/9, main 10/10 events incl. `missile_fire`). The range (`/combat`) shares the firing path and renders all 7 patterns — not broken.\n\nDiff scope is confined to the in-scope files (combat.json, js/combat/*, GameScene, dev tests); no out-of-scope files (XP curve, ship.json, sidequests) touched by this goal's changes.\n\n","at":"2026-09-20T05:06:03.693Z"}]],["mu9xzeqf-e5m5ej",[{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","at":"2026-09-20T17:43:58.266Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","at":"2026-09-20T20:09:24.838Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","evidence":"GameScene: onKill hands the enemy to handleCombatKill (elite-only witness → haltWaves + bountyDown); _establishBountyHunt rolls plan→route (buildPatrolRoute opts {waypoints:[legs,legs], fork:'bounty'}","at":"2026-09-20T20:27:38.322Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-6","at":"2026-09-20T20:28:26.199Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-6","evidence":"JobBoardWindow.js: _rowState 'locked'; greyed row + LOCKED — REQUIRES LEVEL {level} badge (fillLevel); dossier block (WANTED/epithet/CHARGES/CRAFT) via ui.dossier* with dynamic body-line cap; hunt rou","at":"2026-09-20T22:01:54.072Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-7","at":"2026-09-20T22:14:18.633Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"user","status":"paused","at":"2026-09-21T01:39:37.876Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:40:58.104Z"},{"type":"task_list_set","goalId":"mu9xzeqf-e5m5ej","taskCount":7,"blockCompletion":true,"at":"2026-09-21T01:46:12.634Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:50:36.637Z"},{"type":"task_list_set","goalId":"mu9xzeqf-e5m5ej","taskCount":7,"blockCompletion":true,"at":"2026-09-21T01:52:04.548Z"},{"type":"goal_focused","goalId":"mu9xzeqf-e5m5ej","reason":"selected","at":"2026-09-21T02:06:44.440Z"}]]],"runtimeIndex":[["mu3lln4y-51f5mi",{"recent":[{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-1","at":"2026-09-16T04:26:15.002Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-1","evidence":"Audit doc at .pi/goals/combat-feedback-audit.md; baseline node dev/combat.test.mjs passes (all checks green)","at":"2026-09-16T04:33:51.611Z"},{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-2","at":"2026-09-16T04:35:30.972Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-2","evidence":"Committed 5949bac: pure handleFeel (exact integration) + combat.player tuning (thrust 2000/drag 1.8/rot 6.4/brake 0.9); WASD fixed (addKeys comma-list bug → event API); dev/combat.test.mjs 0 failures;","at":"2026-09-16T06:19:40.253Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-3","evidence":"Committed: shared js/combat/CombatSfx.js (7 distinct voices from existing sfx.json: fire=scan, impact=ui_click, shield=solar_buzz, hull=mining_split, kill=thunder×4 random, down=deconstruct, respawn=d","at":"2026-09-16T06:48:29.383Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-4","evidence":"Committed ecff203: Fx.js gains damage() (cyan=shield/orange=hull numbers), color-coded hit flashes, enhanced kill burst (delayed 2nd shockwave), down() + respawn() cues, shared FX_COLORS. Both context","at":"2026-09-16T07:07:02.597Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-5","evidence":"Commit 0d51184: CombatHud shared (lock reticle, threat cues, off-screen arrows, kill feed, gauge flash); pickTarget/feedPush/offscreenArrow in Combat.js; resyncAroundShip fixes main-game pack placemen","at":"2026-09-16T08:03:23.498Z"},{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-6","at":"2026-09-16T08:03:51.673Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-6","evidence":"combat.test.mjs 96 checks + sfx.test.mjs 21 checks = 0 failures; sfxcheck PASS both contexts (7 events); gauge-flash/lock/threat/feed verified in both; combat-shot.mjs → dev/shots/combat-range.png + c","at":"2026-09-16T08:59:41.075Z"},{"type":"completion_requested","goalId":"mu3lln4y-51f5mi","at":"2026-09-16T09:00:25.729Z"},{"type":"audit_started","goalId":"mu3lln4y-51f5mi","at":"2026-09-16T09:00:25.730Z"},{"type":"audit_result","goalId":"mu3lln4y-51f5mi","verdict":"approved","report":"The dev server (8080) and a CDP browser (9333) are live, so I can verify directly. First, let me look at the committed screenshot evidence and the README combat section.\n\nI've confirmed the screenshots show the combat HUD, reticles, and kill feed elements. Now I'll run the live CDP checks to verify SFX wiring and flight feel in the running dev environment.\n\nAll verification paths are now confirmed. Let me do a final constraint sweep before deciding.\n\n## Audit summary\n\nI verified the executor's claims against the actual repository and ran the live verification contract myself (dev server + CDP browser were available):\n\n**1. Distinct VFX + SFX per event, both contexts**\n- Code: `CombatScene.js` (range) and `CombatSystem.js` (main) both funnel every event through the shared `combatSfx`/`combatSfxEnemyHit` (7 distinct voices — scan/ui_click/solar_buzz/mining_split/thunder×4/deconstruct/discovery, all existing `data/sfx.json` files, all confirmed on disk) and the shared procedural `Fx` (muzzle flash, color-coded shield-cyan/hull-orange hit flash + damage number, kill burst with double ring, DOWN burst, REFORMED bloom — all canvas dots/additive).\n- Live: `node dev/combat.sfxcheck.mjs` → **PASS** in both `/combat` and `index.html?combat`, all seven events through the shared path (I ran it, exit 0).\n\n**2. Readability layer live in both contexts** (my own CDP probes)\n- Range: `lastFlash={kind:shield}`, kill feed entry landed, lock target acquired; gauge-flash overlay live (peak alpha 0.72, decaying).\n- Main: same, with the flash positioned exactly on the `CombatBar.gaugeRect('shield')` track (peak alpha 1.0), bar visible, feed entry, target true.\n- Committed screenshots `dev/shots/combat-range.png` / `combat-main.png` visually show: lock reticle, threat dots, kill feed \"HOSTILE DESTROYED\", damage numbers (\"10\"), kill burst, tracer, combat bar gauges.\n\n**3. Ship handling (range WASD)**\n- `node dev/combat-flycheck.mjs` → **PASS**: 337 ms to 60% maxSpeed, 133 ms to 30° turn, 7.45 rad/s sustained spin, 308 ms stop from 560 px/s.\n- Real keyboard check: actual 'W' keydown accelerated the ship 0→526 px/s; keyup released it.\n- Values live in `data/combat.json` → `combat.player`; pure `handleFeel` in `js/combat/Combat.js`; both contexts read the same file (weapon, armor, readability, bar).\n\n**4. Tests & docs**\n- `node dev/combat.test.mjs` → 96 checks, **0 failures** (exit 0); `sfx.test.mjs` 21/21.\n- `dev/combat-shot.mjs` follows the `dev/cdp-shot.mjs` CDP pattern; README combat section fully documents feel, the VFX set, the SFX map, the readability layer, and all three dev checkers + hooks.\n\n**Constraints honored**: pure rules in `Combat.js` (unit-tested), single tuning surface `data/combat.json`, shared modules across both contexts (no divergent copies), no new binary game assets (only the two evidence screenshots in the diff), hand-rolled circle collision only, skill stubs (`cast()` no-op), energy gauge (regen 0, full), and auto-fire left as-is, Phaser 4 UMD + plain ES6.\n\nEvery explicit success criterion and the verification contract are genuinely satisfied; the executor's claims match the evidence I independently reproduced.\n\n","at":"2026-09-16T09:04:06.559Z"}],"activity":[{"type":"goal_created","goalId":"mu3lln4y-51f5mi","objective":"=== Goal ===\nObjective: Make Orbit's combat both feel and read — sharper ship handling plus clear hit/kill/death feedback (VFX + SFX) and a readability layer (target indicator, damage numbers, kill feed, bar hit-flash), kept in sync across the training range (/combat) and the main-game combat (index.html?combat).\n\nSuccess criteria (observable):\n- In BOTH contexts, each of: firing, bullet impact, shield hit, hull hit, enemy kill, player-down, and player-respawn produces a distinct VFX and a distinct SFX.\n- Readability layer is live in both contexts: damage numbers on every hit (enemy and player), a target/lock indicator on the current target, threat cues for hostiles, a kill feed, and a visible hit-flash on the combat bar's shields/hull gauges.\n- Ship handling feels noticeably better in the range (WASD) — responsive thrust/rotation/brake, all values living in data/combat.json and shared with the main game.\n- node dev/combat.test.mjs passes with 0 failures; CDP screenshots (dev/cdp-shot.mjs pattern) show the new feedback in both /combat and index.html?combat; the README combat section documents the new feedback set and dev hooks.\n\nBoundaries:\n- IN SCOPE: js/combat/* (Combat.js, CombatSystem.js, CombatScene.js, Fx.js, EnemyShip.js, Bullet.js), js/ui/CombatBar.js, data/combat.json, SFX wiring, both combat contexts.\n- OUT OF SCOPE: real skill implementations (the 1–8 seats stay as stubs on the system's cast() stub), new enemy types/AI/behavior variety, waves/difficulty/escalation, permanent death or economy flows, non-combat game systems (map, jump gates, economy), new sprite art.\n\nConstraints:\n- Phaser 4 UMD + plain ES6 modules, no build step; hand-rolled circle collision checks only (no arcade colliders), per the existing combat architecture.\n- No new binary assets: VFX must be procedural (canvas dot textures / additive glows, Fx.js style); SFX must go through the existing data/sfx.json + playSfx() infrastructure using existing sound files only.\n- Pure rules stay in js/combat/Combat.js (pure, unit-tested); ALL tuning numbers live in data/combat.json; the range and the main game must share the same rules and numbers (no divergent copies).\n- Skill seats 1–8, the energy gauge, and the auto-fire model are left as-is (stub/placeholder behavior unchanged).\n\nVerification contract:\n1) node dev/combat.test.mjs → 0 failures. 2) CDP-driven visual checks of BOTH /combat and index.html?combat (dev/cdp-shot.mjs pattern) capturing: damage numbers, target indicator, kill feed, bar hit-flash, kill burst, player-down/respawn cues. 3) Manual flow checklist passed in both contexts: fire → muzzle flash + shot SFX; enemy hit → impact flash + damage number; shield/hull hit → bar flash + appropriate SFX; enemy kill → burst + kill-feed entry + explosion SFX; player down → down cue + respawn cue. 4) Re-read this goal's success criteria and confirm each is addressed before marking complete.\n\nIf blocked: stop and ask the user (default blocker rule).","sisyphus":false,"autoContinue":true,"at":"2026-09-16T04:26:00.418Z"},{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-1","at":"2026-09-16T04:26:15.002Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-1","evidence":"Audit doc at .pi/goals/combat-feedback-audit.md; baseline node dev/combat.test.mjs passes (all checks green)","at":"2026-09-16T04:33:51.611Z"},{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-2","at":"2026-09-16T04:35:30.972Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-2","evidence":"Committed 5949bac: pure handleFeel (exact integration) + combat.player tuning (thrust 2000/drag 1.8/rot 6.4/brake 0.9); WASD fixed (addKeys comma-list bug → event API); dev/combat.test.mjs 0 failures;","at":"2026-09-16T06:19:40.253Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-3","evidence":"Committed: shared js/combat/CombatSfx.js (7 distinct voices from existing sfx.json: fire=scan, impact=ui_click, shield=solar_buzz, hull=mining_split, kill=thunder×4 random, down=deconstruct, respawn=d","at":"2026-09-16T06:48:29.383Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-4","evidence":"Committed ecff203: Fx.js gains damage() (cyan=shield/orange=hull numbers), color-coded hit flashes, enhanced kill burst (delayed 2nd shockwave), down() + respawn() cues, shared FX_COLORS. Both context","at":"2026-09-16T07:07:02.597Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-5","evidence":"Commit 0d51184: CombatHud shared (lock reticle, threat cues, off-screen arrows, kill feed, gauge flash); pickTarget/feedPush/offscreenArrow in Combat.js; resyncAroundShip fixes main-game pack placemen","at":"2026-09-16T08:03:23.498Z"},{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-6","at":"2026-09-16T08:03:51.673Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-6","evidence":"combat.test.mjs 96 checks + sfx.test.mjs 21 checks = 0 failures; sfxcheck PASS both contexts (7 events); gauge-flash/lock/threat/feed verified in both; combat-shot.mjs → dev/shots/combat-range.png + c","at":"2026-09-16T08:59:41.075Z"},{"type":"completion_requested","goalId":"mu3lln4y-51f5mi","at":"2026-09-16T09:00:25.729Z"},{"type":"audit_started","goalId":"mu3lln4y-51f5mi","at":"2026-09-16T09:00:25.730Z"},{"type":"audit_result","goalId":"mu3lln4y-51f5mi","verdict":"approved","report":"The dev server (8080) and a CDP browser (9333) are live, so I can verify directly. First, let me look at the committed screenshot evidence and the README combat section.\n\nI've confirmed the screenshots show the combat HUD, reticles, and kill feed elements. Now I'll run the live CDP checks to verify SFX wiring and flight feel in the running dev environment.\n\nAll verification paths are now confirmed. Let me do a final constraint sweep before deciding.\n\n## Audit summary\n\nI verified the executor's claims against the actual repository and ran the live verification contract myself (dev server + CDP browser were available):\n\n**1. Distinct VFX + SFX per event, both contexts**\n- Code: `CombatScene.js` (range) and `CombatSystem.js` (main) both funnel every event through the shared `combatSfx`/`combatSfxEnemyHit` (7 distinct voices — scan/ui_click/solar_buzz/mining_split/thunder×4/deconstruct/discovery, all existing `data/sfx.json` files, all confirmed on disk) and the shared procedural `Fx` (muzzle flash, color-coded shield-cyan/hull-orange hit flash + damage number, kill burst with double ring, DOWN burst, REFORMED bloom — all canvas dots/additive).\n- Live: `node dev/combat.sfxcheck.mjs` → **PASS** in both `/combat` and `index.html?combat`, all seven events through the shared path (I ran it, exit 0).\n\n**2. Readability layer live in both contexts** (my own CDP probes)\n- Range: `lastFlash={kind:shield}`, kill feed entry landed, lock target acquired; gauge-flash overlay live (peak alpha 0.72, decaying).\n- Main: same, with the flash positioned exactly on the `CombatBar.gaugeRect('shield')` track (peak alpha 1.0), bar visible, feed entry, target true.\n- Committed screenshots `dev/shots/combat-range.png` / `combat-main.png` visually show: lock reticle, threat dots, kill feed \"HOSTILE DESTROYED\", damage numbers (\"10\"), kill burst, tracer, combat bar gauges.\n\n**3. Ship handling (range WASD)**\n- `node dev/combat-flycheck.mjs` → **PASS**: 337 ms to 60% maxSpeed, 133 ms to 30° turn, 7.45 rad/s sustained spin, 308 ms stop from 560 px/s.\n- Real keyboard check: actual 'W' keydown accelerated the ship 0→526 px/s; keyup released it.\n- Values live in `data/combat.json` → `combat.player`; pure `handleFeel` in `js/combat/Combat.js`; both contexts read the same file (weapon, armor, readability, bar).\n\n**4. Tests & docs**\n- `node dev/combat.test.mjs` → 96 checks, **0 failures** (exit 0); `sfx.test.mjs` 21/21.\n- `dev/combat-shot.mjs` follows the `dev/cdp-shot.mjs` CDP pattern; README combat section fully documents feel, the VFX set, the SFX map, the readability layer, and all three dev checkers + hooks.\n\n**Constraints honored**: pure rules in `Combat.js` (unit-tested), single tuning surface `data/combat.json`, shared modules across both contexts (no divergent copies), no new binary game assets (only the two evidence screenshots in the diff), hand-rolled circle collision only, skill stubs (`cast()` no-op), energy gauge (regen 0, full), and auto-fire left as-is, Phaser 4 UMD + plain ES6.\n\nEvery explicit success criterion and the verification contract are genuinely satisfied; the executor's claims match the evidence I independently reproduced.\n\n","at":"2026-09-16T09:04:06.559Z"}],"oracle":[],"lifecycle":{"type":"goal_created","goalId":"mu3lln4y-51f5mi","objective":"=== Goal ===\nObjective: Make Orbit's combat both feel and read — sharper ship handling plus clear hit/kill/death feedback (VFX + SFX) and a readability layer (target indicator, damage numbers, kill feed, bar hit-flash), kept in sync across the training range (/combat) and the main-game combat (index.html?combat).\n\nSuccess criteria (observable):\n- In BOTH contexts, each of: firing, bullet impact, shield hit, hull hit, enemy kill, player-down, and player-respawn produces a distinct VFX and a distinct SFX.\n- Readability layer is live in both contexts: damage numbers on every hit (enemy and player), a target/lock indicator on the current target, threat cues for hostiles, a kill feed, and a visible hit-flash on the combat bar's shields/hull gauges.\n- Ship handling feels noticeably better in the range (WASD) — responsive thrust/rotation/brake, all values living in data/combat.json and shared with the main game.\n- node dev/combat.test.mjs passes with 0 failures; CDP screenshots (dev/cdp-shot.mjs pattern) show the new feedback in both /combat and index.html?combat; the README combat section documents the new feedback set and dev hooks.\n\nBoundaries:\n- IN SCOPE: js/combat/* (Combat.js, CombatSystem.js, CombatScene.js, Fx.js, EnemyShip.js, Bullet.js), js/ui/CombatBar.js, data/combat.json, SFX wiring, both combat contexts.\n- OUT OF SCOPE: real skill implementations (the 1–8 seats stay as stubs on the system's cast() stub), new enemy types/AI/behavior variety, waves/difficulty/escalation, permanent death or economy flows, non-combat game systems (map, jump gates, economy), new sprite art.\n\nConstraints:\n- Phaser 4 UMD + plain ES6 modules, no build step; hand-rolled circle collision checks only (no arcade colliders), per the existing combat architecture.\n- No new binary assets: VFX must be procedural (canvas dot textures / additive glows, Fx.js style); SFX must go through the existing data/sfx.json + playSfx() infrastructure using existing sound files only.\n- Pure rules stay in js/combat/Combat.js (pure, unit-tested); ALL tuning numbers live in data/combat.json; the range and the main game must share the same rules and numbers (no divergent copies).\n- Skill seats 1–8, the energy gauge, and the auto-fire model are left as-is (stub/placeholder behavior unchanged).\n\nVerification contract:\n1) node dev/combat.test.mjs → 0 failures. 2) CDP-driven visual checks of BOTH /combat and index.html?combat (dev/cdp-shot.mjs pattern) capturing: damage numbers, target indicator, kill feed, bar hit-flash, kill burst, player-down/respawn cues. 3) Manual flow checklist passed in both contexts: fire → muzzle flash + shot SFX; enemy hit → impact flash + damage number; shield/hull hit → bar flash + appropriate SFX; enemy kill → burst + kill-feed entry + explosion SFX; player down → down cue + respawn cue. 4) Re-read this goal's success criteria and confirm each is addressed before marking complete.\n\nIf blocked: stop and ask the user (default blocker rule).","sisyphus":false,"autoContinue":true,"at":"2026-09-16T04:26:00.418Z"},"lastActivityEvent":{"type":"audit_result","goalId":"mu3lln4y-51f5mi","verdict":"approved","report":"The dev server (8080) and a CDP browser (9333) are live, so I can verify directly. First, let me look at the committed screenshot evidence and the README combat section.\n\nI've confirmed the screenshots show the combat HUD, reticles, and kill feed elements. Now I'll run the live CDP checks to verify SFX wiring and flight feel in the running dev environment.\n\nAll verification paths are now confirmed. Let me do a final constraint sweep before deciding.\n\n## Audit summary\n\nI verified the executor's claims against the actual repository and ran the live verification contract myself (dev server + CDP browser were available):\n\n**1. Distinct VFX + SFX per event, both contexts**\n- Code: `CombatScene.js` (range) and `CombatSystem.js` (main) both funnel every event through the shared `combatSfx`/`combatSfxEnemyHit` (7 distinct voices — scan/ui_click/solar_buzz/mining_split/thunder×4/deconstruct/discovery, all existing `data/sfx.json` files, all confirmed on disk) and the shared procedural `Fx` (muzzle flash, color-coded shield-cyan/hull-orange hit flash + damage number, kill burst with double ring, DOWN burst, REFORMED bloom — all canvas dots/additive).\n- Live: `node dev/combat.sfxcheck.mjs` → **PASS** in both `/combat` and `index.html?combat`, all seven events through the shared path (I ran it, exit 0).\n\n**2. Readability layer live in both contexts** (my own CDP probes)\n- Range: `lastFlash={kind:shield}`, kill feed entry landed, lock target acquired; gauge-flash overlay live (peak alpha 0.72, decaying).\n- Main: same, with the flash positioned exactly on the `CombatBar.gaugeRect('shield')` track (peak alpha 1.0), bar visible, feed entry, target true.\n- Committed screenshots `dev/shots/combat-range.png` / `combat-main.png` visually show: lock reticle, threat dots, kill feed \"HOSTILE DESTROYED\", damage numbers (\"10\"), kill burst, tracer, combat bar gauges.\n\n**3. Ship handling (range WASD)**\n- `node dev/combat-flycheck.mjs` → **PASS**: 337 ms to 60% maxSpeed, 133 ms to 30° turn, 7.45 rad/s sustained spin, 308 ms stop from 560 px/s.\n- Real keyboard check: actual 'W' keydown accelerated the ship 0→526 px/s; keyup released it.\n- Values live in `data/combat.json` → `combat.player`; pure `handleFeel` in `js/combat/Combat.js`; both contexts read the same file (weapon, armor, readability, bar).\n\n**4. Tests & docs**\n- `node dev/combat.test.mjs` → 96 checks, **0 failures** (exit 0); `sfx.test.mjs` 21/21.\n- `dev/combat-shot.mjs` follows the `dev/cdp-shot.mjs` CDP pattern; README combat section fully documents feel, the VFX set, the SFX map, the readability layer, and all three dev checkers + hooks.\n\n**Constraints honored**: pure rules in `Combat.js` (unit-tested), single tuning surface `data/combat.json`, shared modules across both contexts (no divergent copies), no new binary game assets (only the two evidence screenshots in the diff), hand-rolled circle collision only, skill stubs (`cast()` no-op), energy gauge (regen 0, full), and auto-fire left as-is, Phaser 4 UMD + plain ES6.\n\nEvery explicit success criterion and the verification contract are genuinely satisfied; the executor's claims match the evidence I independently reproduced.\n\n","at":"2026-09-16T09:04:06.559Z"},"completion":{"type":"completion_requested","goalId":"mu3lln4y-51f5mi","at":"2026-09-16T09:00:25.729Z"},"audit":{"type":"audit_result","goalId":"mu3lln4y-51f5mi","verdict":"approved","report":"The dev server (8080) and a CDP browser (9333) are live, so I can verify directly. First, let me look at the committed screenshot evidence and the README combat section.\n\nI've confirmed the screenshots show the combat HUD, reticles, and kill feed elements. Now I'll run the live CDP checks to verify SFX wiring and flight feel in the running dev environment.\n\nAll verification paths are now confirmed. Let me do a final constraint sweep before deciding.\n\n## Audit summary\n\nI verified the executor's claims against the actual repository and ran the live verification contract myself (dev server + CDP browser were available):\n\n**1. Distinct VFX + SFX per event, both contexts**\n- Code: `CombatScene.js` (range) and `CombatSystem.js` (main) both funnel every event through the shared `combatSfx`/`combatSfxEnemyHit` (7 distinct voices — scan/ui_click/solar_buzz/mining_split/thunder×4/deconstruct/discovery, all existing `data/sfx.json` files, all confirmed on disk) and the shared procedural `Fx` (muzzle flash, color-coded shield-cyan/hull-orange hit flash + damage number, kill burst with double ring, DOWN burst, REFORMED bloom — all canvas dots/additive).\n- Live: `node dev/combat.sfxcheck.mjs` → **PASS** in both `/combat` and `index.html?combat`, all seven events through the shared path (I ran it, exit 0).\n\n**2. Readability layer live in both contexts** (my own CDP probes)\n- Range: `lastFlash={kind:shield}`, kill feed entry landed, lock target acquired; gauge-flash overlay live (peak alpha 0.72, decaying).\n- Main: same, with the flash positioned exactly on the `CombatBar.gaugeRect('shield')` track (peak alpha 1.0), bar visible, feed entry, target true.\n- Committed screenshots `dev/shots/combat-range.png` / `combat-main.png` visually show: lock reticle, threat dots, kill feed \"HOSTILE DESTROYED\", damage numbers (\"10\"), kill burst, tracer, combat bar gauges.\n\n**3. Ship handling (range WASD)**\n- `node dev/combat-flycheck.mjs` → **PASS**: 337 ms to 60% maxSpeed, 133 ms to 30° turn, 7.45 rad/s sustained spin, 308 ms stop from 560 px/s.\n- Real keyboard check: actual 'W' keydown accelerated the ship 0→526 px/s; keyup released it.\n- Values live in `data/combat.json` → `combat.player`; pure `handleFeel` in `js/combat/Combat.js`; both contexts read the same file (weapon, armor, readability, bar).\n\n**4. Tests & docs**\n- `node dev/combat.test.mjs` → 96 checks, **0 failures** (exit 0); `sfx.test.mjs` 21/21.\n- `dev/combat-shot.mjs` follows the `dev/cdp-shot.mjs` CDP pattern; README combat section fully documents feel, the VFX set, the SFX map, the readability layer, and all three dev checkers + hooks.\n\n**Constraints honored**: pure rules in `Combat.js` (unit-tested), single tuning surface `data/combat.json`, shared modules across both contexts (no divergent copies), no new binary game assets (only the two evidence screenshots in the diff), hand-rolled circle collision only, skill stubs (`cast()` no-op), energy gauge (regen 0, full), and auto-fire left as-is, Phaser 4 UMD + plain ES6.\n\nEvery explicit success criterion and the verification contract are genuinely satisfied; the executor's claims match the evidence I independently reproduced.\n\n","at":"2026-09-16T09:04:06.559Z"}}],["mu4xefwj-ebnq8h",{"recent":[{"type":"task_list_set","goalId":"mu4xefwj-ebnq8h","taskCount":4,"blockCompletion":false,"at":"2026-09-17T02:44:06.019Z"},{"type":"task_started","goalId":"mu4xefwj-ebnq8h","taskId":"task-1","at":"2026-09-17T02:59:45.101Z"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-1","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Bolt texture (128x32 gradient trail+core+bloom) + white core head in js/combat/Bullet.js; fx.muzzle in CombatScene/CombatSystem; boltLength/boltWidth/muzzle knobs in data/combat.json; verified in /com"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-2","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Fx.enemyHit: core flash, dir sparks along travel vector, craft white tintFill flash, cyan arc ripple (shield) vs orange shards (hull), damage-number pop; called identically in CombatScene.collide + Co"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-3","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Fx.shieldImpact: sphere outline + arc centered on bearing (travel+PI), ripple, sparks, k-scaled by damage, 520ms decay; shieldBreak implosion+shockwave; rams use same treatment with bearing; verified "},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-4","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"combatShake on hit/kill/break; live probe: main cam shakeEffect isRunning=true duration=230, fx-ui cam isRunning=false; knobs in data/combat.json fx.shake/fx.shield; node dev/combat.test.mjs = 146 che"},{"type":"completion_requested","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T04:35:11.875Z"},{"type":"audit_started","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T04:35:11.876Z"},{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"disapproved","report":"The headless browser is already up. Let me run my own live probe against both contexts to verify boot, the FX paths, and the camera-shake split.\n\nI found some console errors in the probe (a `setTintFill` deprecation and a `wallClamp` TypeError). Let me investigate both.\n\n## Audit report\n\nI verified the goal against the real artifacts, including live browser probes of both contexts (dev server + CDP). Much of the visual work is genuinely present, but the implementation contains a fatal regression in the shared FX path that breaks \"both contexts boot and play\" and silently fails one explicit success criterion.\n\n### Verified as delivered\n- **Bolts in both contexts** — `js/combat/Bullet.js` builds a 128×32 canvas bolt (fading trail band + core streak + head bloom) with an untinted white core dot riding the tip; tinted cyan (`#00e5ff`) / magenta-pink (`#ff2d6f`) from `data/combat.json` weapon colors; `boltLength/boltWidth` knobs read and applied (live probe: `boltScale [54,12]`, textures present, bolts visible in both committed screenshots).\n- **Directional muzzle flash** — `Fx.muzzle` (bore spike + bloom + cross glint, rotated to firing axis) called at every fire site in `CombatScene.firePlayer/fireEnemy` and `CombatSystem.firePlayerAt/fireEnemy`.\n- **Enemy impact read** — `Fx.enemyHit`: core flash, sparks along the travel vector, cyan arc + ring on shield hits vs orange shards + tight ring on hull, damage-number pop with scale-settle. Live-verified on the range (`arcFlash`, `ring`, 17 sparks, `tintFlash`, `text` all spawned).\n- **Shield-sphere hit from the laser's bearing** — `Fx.shieldImpact`: full-sphere outline + bright arc centered on the bearing (live check: bearing 135° → texture rotated exactly 135°), ripple, bearing-biased sparks, damage-scaled `k`, 520 ms decay; `shieldBreak` collapse cue (implosion + shockwave + shedding) fired on shield→hull break; rams route through the same bearing-based `damagePlayer`. Both contexts call the identical shared methods.\n- **Shake** — `combatShake` on hit/kill/break with `fx.shake` knobs (0.0045/0.007/0.011, 230 ms); live probe: world camera shake running, `fx-ui` camera shake inactive.\n- **Tuning surface, tests, constraints** — all knobs in `data/combat.json`; `node dev/combat.test.mjs` = 146 checks, 0 failures; no new dependencies (Phaser vendored), no build step, hand-rolled FX pattern (no emitters); depths in the 19–22 band, ships 10, HUD ≥60–120.\n\n### Blocking findings (verified live, not speculation)\n1. **`Fx.update` destroys the ships.** The expiry branch unconditionally calls `it.img.destroy()` — but `craftFlash` pushes items whose `img` is the ship itself (`kind:'tintFlash'`, 150–160 ms). Evidence:\n - Unit: real `Fx` class, `shieldImpact` + `fx.update(700ms)` → `shipDestroyedAfterShieldImpactExpire: true`.\n - Range: runtime stack captured `Ship.destroy ← Fx.update (Fx.js:599)`; after one non-lethal hit the enemy craft is gone 150 ms later with `dead:false` (no kill FX, no respawn bookkeeping — a ghost), then `CombatScene.update` throws `TypeError: Cannot read properties of undefined (reading 'velocity')` (`wallClamp`/`updatePlayer`) and the game loop dies. I reproduced this on a fresh page with no interaction beyond letting the pack fight.\n - Main game: the moment `combat.update` stepped, all 21 FX items — including the player ship's `tintFlash` — were consumed/destroyed.\n This contradicts \"both contexts boot and play\", \"no regressions\", and corrupts hit/kill/respawn bookkeeping in both contexts.\n2. **\"Visible white hit-flash on the enemy craft\" is not delivered.** In this vendored Phaser 4.2.1 build, `setTintFill` is a removed no-op that only `console.error`s (verified in `lib/phaser.min.js`: `` setTintFill:function(){console.error(...)}``). So `craftFlash` sets `setTint(0xffffff)` (invisible on an untinted sprite), the FILL mode is never applied, and the fallback bloom never triggers (nothing throws). Every hit spams a console error; the required white craft flash is absent.\n\n### Minor observations\n- Three untracked, unreferenced MP3s under `assets/fx/` (not wired into `data/sfx.json` or `CombatSfx.js`) — noise against the \"audio changes out of scope\" boundary.\n- In my main-game probes the `GameScene.update` loop was idle (tutorial comms hold), and the committed main-game screenshot shows a straight line of static bolts — the \"main game plays\" evidence is weaker than the range evidence, independent of the defects above.\n\nThe laser/impact/shield-sphere visuals are mostly real and well-built, but the shared `Fx` class killing the hit craft on flash expiry is a fatal, reproducible regression in the range (and a latent player-ship destroy in the main game), and the white hit-flash requirement is silently unmet.\n\n","at":"2026-09-17T04:42:45.235Z"},{"type":"completion_requested","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T05:01:50.034Z"},{"type":"audit_started","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T05:01:50.036Z"},{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"approved","report":"Fx.js and Bullet.js look substantial. Now the shake module and tuning surface.\n\nNow let me inspect the call sites in both contexts.\n\nThe dev server and headless browser are live. Let me check the debug seams exposed by both contexts, then run a read-only live probe.\n\nI've verified the code paths on both sides. Now I'll run a live probe of both contexts through the dev server to confirm everything's working.\n\nThe two \"FAIL\"s within the range are actually bugs in my probe (scale is 46×10 world px = elongated; -180° ≡ 180°). The main game result needs investigation — let me inspect the actual shape of `__ORBIT_COMBAT__`:\n\nAll checks are now resolved. Final audit summary:\n\n**Verified via code inspection + live CDP probes in both contexts (range `/combat` and `index.html?combat`), with zero console errors:**\n\n1. **Laser bolts (both contexts):** 128×32 canvas bolt texture (fading trail band + bright core streak + head bloom) scaled to 46×10 px player / 54×12 px enemy (elongated 4.6:1, measured), tinted halo (cyan `00e5ff` player, `#ff2d6f` enemy from weapon config), untinted white core dot riding the tip (measured offset 17.25 px ahead of center), directional muzzle flare — bore spike measured at the exact firing angle in both contexts. `fx.muzzle` + `spawnBullet(boltLength/boltWidth)` call sites are symmetric in `CombatScene.js` and `CombatSystem.js`.\n\n2. **Enemy impact reads:** hot white + colored core flash, directional sparks/shards measured within the cone along the bullet's actual travel vector, white craft hit-flash via `tintMode=1` FILL (measured `ffffff`/mode 1 during flash, restored to 0 on expiry — and the previously-flagged ship-destruction defect is fixed: enemy and player ship both survive expiry, verified live), cyan arc ripple at the exact incoming bearing (travel +180°, measured 134.2°/134.2° in range and −42.5°/−42.5° in main) vs orange bolt-textured shards + tight orange ring with **no** arc on hull hits (measured), damage-number pops (measured \"10\"/\"8\").\n\n3. **Shield-sphere strike:** faint full-sphere outline + bright arc segment (1.90 rad, span-keyed texture `__combat_shield_s1.90`) centered exactly on the laser's incoming bearing (measured 135° and 45°), radial ripple from the impact point, outward-biased spark burst, ship white flash, damage-scaled intensity, ~0.5 s decay (config `decayMs: 520`); shield→hull break shows the `ringIn` implosion + shockwave (measured); rams funnel through the same bearing-based `damagePlayer` treatment in both contexts.\n\n4. **Shake:** world camera `shakeEffect` measured running on player hit, enemy kill, and shield-break; `fx-ui` camera measured inactive in both contexts (HUD/bar on the untouched UI pass).\n\n5. **Tuning surface:** `boltLength/boltWidth/muzzle` + `fx.shake` + `fx.shield` knobs in `data/combat.json`, all read via `config.get/section`; live values match config; git diff confirms only visual knobs were added (no gameplay numbers touched).\n\n6. **No regressions:** `node dev/combat.test.mjs` → 146 checks, 0 failures, exit 0; only that suite imports the changed modules; both contexts boot and play (range fully exercised; main game ran a live 3 s auto-fire fight with the pack intact, ship alive); diff confined to `js/combat/*` + `CamShake.js` + `data/combat.json` — no new dependencies, no build step, hand-rolled FX (no emitters), depth discipline (ships 10 / FX 19–22 / HUD 100) holds.\n\nThe eight \"failures\" in my first probe round were all arithmetic/sequencing bugs in my own probe (angle wraparound, aspect-ratio math, a missing target fallback) — each was re-verified individually and passes.\n\n","at":"2026-09-17T05:08:04.224Z"}],"activity":[{"type":"goal_created","goalId":"mu4xefwj-ebnq8h","objective":"=== Goal ===\nObjective: A visual overhaul of combat FX in Orbit — visually impressive laser bolts from both the player and enemies, a strong impact read when enemies are hit, and a shield-sphere hit effect that shows the player's shield struck from the laser's incoming bearing with the hit region highlighted — delivered consistently in both combat contexts (the /combat range and the main game's ?combat boot).\n\nSuccess criteria:\n- Player and enemy shots render as elongated glowing bolts: hot-white core, colored halo (cyan player / magenta enemy), a fading motion trail along the flight axis, and a directional muzzle flash on fire — in BOTH the range (js/combat/CombatScene.js) and the main game (js/combat/CombatSystem.js).\n- Enemy hits show impact: a hot core flash at the point of impact, directional sparks along the bullet's travel vector, a visible white hit-flash on the enemy craft, a cyan arc ripple on shield hits vs orange sparks/debris on hull hits, and a polished damage-number pop.\n- Player shield hits read as a sphere being struck: a brief full-sphere outline flash, a bright arc segment centered on the laser's incoming bearing (the highlighted hit region), a radial ripple from the impact point, and a spark burst — intensity scaled with damage, decaying over ~0.5s. A shield→hull break shows a distinct shield-collapse cue. Rams (ship collisions) get the same impact treatment.\n- Subtle world-camera shake on player hits, enemy kills, and shield-break — the separate fx-ui camera keeps the HUD/combat bar perfectly still.\n- New visual parameters (bolt size/trail, muzzle, arc span, shake intensity, etc.) are tunable in data/combat.json, consistent with the project's single-tuning-surface convention.\n- No regressions: dev/combat.test.mjs passes with 0 failures; both contexts boot and play; no new dependencies, no build step.\n\nBoundaries:\n- In scope: js/combat/Bullet.js, js/combat/Fx.js, the FX call sites in js/combat/CombatScene.js and js/combat/CombatSystem.js (firing, collisions, damage, kills), camera shake wiring, and tuning knobs in data/combat.json.\n- Out of scope: gameplay numbers (damage, cooldowns, speeds, hull/shield values), enemy AI, new weapons or skills, audio changes (existing SFX events stay as-is), HUD/combat-bar redesign, and non-combat main-game visuals.\n\nConstraints:\n- Plain ES6 modules, no build step, no new dependencies (Phaser 4.2.1 stays vendored).\n- No particle emitters — this build's emitter velocity semantics are fiddly (documented in js/combat/Fx.js); follow the existing hand-rolled pattern: canvas-generated textures + additive-blended images stepped in update().\n- Keep the FX cheap enough for 60fps with 3+ enemies and auto-fire (small per-hit item counts, shared textures, depth discipline: ships 10, FX 19–22, HUD 100).\n- Implement in the SHARED code (Fx.js / Bullet.js) so the range and the main game stay identical; both contexts' FX call sites must be updated together.\n- Camera shake on the world camera only (the fx-ui UI camera must remain unshaken).\n\nVerification contract:\n- Run `node dev/combat.test.mjs` → 0 failures.\n- Manual pass in the range (/combat via the dev server) AND the main game (index.html?combat): player cannon fires elongated bolt + trail + directional muzzle flash; enemy hits show the impact event with distinct shield (cyan ripple) vs hull (orange debris) reads; an enemy lance landing on the player shows the sphere struck — arc highlight centered on the laser's bearing + ripple + sparks, with a shield-collapse cue when shields break; kills show the burst + subtle shake; HUD stays still throughout.\n- Re-read this goal's requirements (lasers, enemy impact, shield sphere hit from the laser's angle, hit-region highlight, shake) and confirm every item is addressed in both contexts before marking complete.\n\nIf blocked: stop and ask the user.","sisyphus":false,"autoContinue":true,"at":"2026-09-17T02:44:06.019Z"},{"type":"task_started","goalId":"mu4xefwj-ebnq8h","taskId":"task-1","at":"2026-09-17T02:59:45.101Z"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-1","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Bolt texture (128x32 gradient trail+core+bloom) + white core head in js/combat/Bullet.js; fx.muzzle in CombatScene/CombatSystem; boltLength/boltWidth/muzzle knobs in data/combat.json; verified in /com"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-2","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Fx.enemyHit: core flash, dir sparks along travel vector, craft white tintFill flash, cyan arc ripple (shield) vs orange shards (hull), damage-number pop; called identically in CombatScene.collide + Co"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-3","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Fx.shieldImpact: sphere outline + arc centered on bearing (travel+PI), ripple, sparks, k-scaled by damage, 520ms decay; shieldBreak implosion+shockwave; rams use same treatment with bearing; verified "},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-4","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"combatShake on hit/kill/break; live probe: main cam shakeEffect isRunning=true duration=230, fx-ui cam isRunning=false; knobs in data/combat.json fx.shake/fx.shield; node dev/combat.test.mjs = 146 che"},{"type":"completion_requested","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T04:35:11.875Z"},{"type":"audit_started","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T04:35:11.876Z"},{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"disapproved","report":"The headless browser is already up. Let me run my own live probe against both contexts to verify boot, the FX paths, and the camera-shake split.\n\nI found some console errors in the probe (a `setTintFill` deprecation and a `wallClamp` TypeError). Let me investigate both.\n\n## Audit report\n\nI verified the goal against the real artifacts, including live browser probes of both contexts (dev server + CDP). Much of the visual work is genuinely present, but the implementation contains a fatal regression in the shared FX path that breaks \"both contexts boot and play\" and silently fails one explicit success criterion.\n\n### Verified as delivered\n- **Bolts in both contexts** — `js/combat/Bullet.js` builds a 128×32 canvas bolt (fading trail band + core streak + head bloom) with an untinted white core dot riding the tip; tinted cyan (`#00e5ff`) / magenta-pink (`#ff2d6f`) from `data/combat.json` weapon colors; `boltLength/boltWidth` knobs read and applied (live probe: `boltScale [54,12]`, textures present, bolts visible in both committed screenshots).\n- **Directional muzzle flash** — `Fx.muzzle` (bore spike + bloom + cross glint, rotated to firing axis) called at every fire site in `CombatScene.firePlayer/fireEnemy` and `CombatSystem.firePlayerAt/fireEnemy`.\n- **Enemy impact read** — `Fx.enemyHit`: core flash, sparks along the travel vector, cyan arc + ring on shield hits vs orange shards + tight ring on hull, damage-number pop with scale-settle. Live-verified on the range (`arcFlash`, `ring`, 17 sparks, `tintFlash`, `text` all spawned).\n- **Shield-sphere hit from the laser's bearing** — `Fx.shieldImpact`: full-sphere outline + bright arc centered on the bearing (live check: bearing 135° → texture rotated exactly 135°), ripple, bearing-biased sparks, damage-scaled `k`, 520 ms decay; `shieldBreak` collapse cue (implosion + shockwave + shedding) fired on shield→hull break; rams route through the same bearing-based `damagePlayer`. Both contexts call the identical shared methods.\n- **Shake** — `combatShake` on hit/kill/break with `fx.shake` knobs (0.0045/0.007/0.011, 230 ms); live probe: world camera shake running, `fx-ui` camera shake inactive.\n- **Tuning surface, tests, constraints** — all knobs in `data/combat.json`; `node dev/combat.test.mjs` = 146 checks, 0 failures; no new dependencies (Phaser vendored), no build step, hand-rolled FX pattern (no emitters); depths in the 19–22 band, ships 10, HUD ≥60–120.\n\n### Blocking findings (verified live, not speculation)\n1. **`Fx.update` destroys the ships.** The expiry branch unconditionally calls `it.img.destroy()` — but `craftFlash` pushes items whose `img` is the ship itself (`kind:'tintFlash'`, 150–160 ms). Evidence:\n - Unit: real `Fx` class, `shieldImpact` + `fx.update(700ms)` → `shipDestroyedAfterShieldImpactExpire: true`.\n - Range: runtime stack captured `Ship.destroy ← Fx.update (Fx.js:599)`; after one non-lethal hit the enemy craft is gone 150 ms later with `dead:false` (no kill FX, no respawn bookkeeping — a ghost), then `CombatScene.update` throws `TypeError: Cannot read properties of undefined (reading 'velocity')` (`wallClamp`/`updatePlayer`) and the game loop dies. I reproduced this on a fresh page with no interaction beyond letting the pack fight.\n - Main game: the moment `combat.update` stepped, all 21 FX items — including the player ship's `tintFlash` — were consumed/destroyed.\n This contradicts \"both contexts boot and play\", \"no regressions\", and corrupts hit/kill/respawn bookkeeping in both contexts.\n2. **\"Visible white hit-flash on the enemy craft\" is not delivered.** In this vendored Phaser 4.2.1 build, `setTintFill` is a removed no-op that only `console.error`s (verified in `lib/phaser.min.js`: `` setTintFill:function(){console.error(...)}``). So `craftFlash` sets `setTint(0xffffff)` (invisible on an untinted sprite), the FILL mode is never applied, and the fallback bloom never triggers (nothing throws). Every hit spams a console error; the required white craft flash is absent.\n\n### Minor observations\n- Three untracked, unreferenced MP3s under `assets/fx/` (not wired into `data/sfx.json` or `CombatSfx.js`) — noise against the \"audio changes out of scope\" boundary.\n- In my main-game probes the `GameScene.update` loop was idle (tutorial comms hold), and the committed main-game screenshot shows a straight line of static bolts — the \"main game plays\" evidence is weaker than the range evidence, independent of the defects above.\n\nThe laser/impact/shield-sphere visuals are mostly real and well-built, but the shared `Fx` class killing the hit craft on flash expiry is a fatal, reproducible regression in the range (and a latent player-ship destroy in the main game), and the white hit-flash requirement is silently unmet.\n\n","at":"2026-09-17T04:42:45.235Z"},{"type":"completion_requested","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T05:01:50.034Z"},{"type":"audit_started","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T05:01:50.036Z"},{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"approved","report":"Fx.js and Bullet.js look substantial. Now the shake module and tuning surface.\n\nNow let me inspect the call sites in both contexts.\n\nThe dev server and headless browser are live. Let me check the debug seams exposed by both contexts, then run a read-only live probe.\n\nI've verified the code paths on both sides. Now I'll run a live probe of both contexts through the dev server to confirm everything's working.\n\nThe two \"FAIL\"s within the range are actually bugs in my probe (scale is 46×10 world px = elongated; -180° ≡ 180°). The main game result needs investigation — let me inspect the actual shape of `__ORBIT_COMBAT__`:\n\nAll checks are now resolved. Final audit summary:\n\n**Verified via code inspection + live CDP probes in both contexts (range `/combat` and `index.html?combat`), with zero console errors:**\n\n1. **Laser bolts (both contexts):** 128×32 canvas bolt texture (fading trail band + bright core streak + head bloom) scaled to 46×10 px player / 54×12 px enemy (elongated 4.6:1, measured), tinted halo (cyan `00e5ff` player, `#ff2d6f` enemy from weapon config), untinted white core dot riding the tip (measured offset 17.25 px ahead of center), directional muzzle flare — bore spike measured at the exact firing angle in both contexts. `fx.muzzle` + `spawnBullet(boltLength/boltWidth)` call sites are symmetric in `CombatScene.js` and `CombatSystem.js`.\n\n2. **Enemy impact reads:** hot white + colored core flash, directional sparks/shards measured within the cone along the bullet's actual travel vector, white craft hit-flash via `tintMode=1` FILL (measured `ffffff`/mode 1 during flash, restored to 0 on expiry — and the previously-flagged ship-destruction defect is fixed: enemy and player ship both survive expiry, verified live), cyan arc ripple at the exact incoming bearing (travel +180°, measured 134.2°/134.2° in range and −42.5°/−42.5° in main) vs orange bolt-textured shards + tight orange ring with **no** arc on hull hits (measured), damage-number pops (measured \"10\"/\"8\").\n\n3. **Shield-sphere strike:** faint full-sphere outline + bright arc segment (1.90 rad, span-keyed texture `__combat_shield_s1.90`) centered exactly on the laser's incoming bearing (measured 135° and 45°), radial ripple from the impact point, outward-biased spark burst, ship white flash, damage-scaled intensity, ~0.5 s decay (config `decayMs: 520`); shield→hull break shows the `ringIn` implosion + shockwave (measured); rams funnel through the same bearing-based `damagePlayer` treatment in both contexts.\n\n4. **Shake:** world camera `shakeEffect` measured running on player hit, enemy kill, and shield-break; `fx-ui` camera measured inactive in both contexts (HUD/bar on the untouched UI pass).\n\n5. **Tuning surface:** `boltLength/boltWidth/muzzle` + `fx.shake` + `fx.shield` knobs in `data/combat.json`, all read via `config.get/section`; live values match config; git diff confirms only visual knobs were added (no gameplay numbers touched).\n\n6. **No regressions:** `node dev/combat.test.mjs` → 146 checks, 0 failures, exit 0; only that suite imports the changed modules; both contexts boot and play (range fully exercised; main game ran a live 3 s auto-fire fight with the pack intact, ship alive); diff confined to `js/combat/*` + `CamShake.js` + `data/combat.json` — no new dependencies, no build step, hand-rolled FX (no emitters), depth discipline (ships 10 / FX 19–22 / HUD 100) holds.\n\nThe eight \"failures\" in my first probe round were all arithmetic/sequencing bugs in my own probe (angle wraparound, aspect-ratio math, a missing target fallback) — each was re-verified individually and passes.\n\n","at":"2026-09-17T05:08:04.224Z"}],"oracle":[],"lifecycle":{"type":"goal_created","goalId":"mu4xefwj-ebnq8h","objective":"=== Goal ===\nObjective: A visual overhaul of combat FX in Orbit — visually impressive laser bolts from both the player and enemies, a strong impact read when enemies are hit, and a shield-sphere hit effect that shows the player's shield struck from the laser's incoming bearing with the hit region highlighted — delivered consistently in both combat contexts (the /combat range and the main game's ?combat boot).\n\nSuccess criteria:\n- Player and enemy shots render as elongated glowing bolts: hot-white core, colored halo (cyan player / magenta enemy), a fading motion trail along the flight axis, and a directional muzzle flash on fire — in BOTH the range (js/combat/CombatScene.js) and the main game (js/combat/CombatSystem.js).\n- Enemy hits show impact: a hot core flash at the point of impact, directional sparks along the bullet's travel vector, a visible white hit-flash on the enemy craft, a cyan arc ripple on shield hits vs orange sparks/debris on hull hits, and a polished damage-number pop.\n- Player shield hits read as a sphere being struck: a brief full-sphere outline flash, a bright arc segment centered on the laser's incoming bearing (the highlighted hit region), a radial ripple from the impact point, and a spark burst — intensity scaled with damage, decaying over ~0.5s. A shield→hull break shows a distinct shield-collapse cue. Rams (ship collisions) get the same impact treatment.\n- Subtle world-camera shake on player hits, enemy kills, and shield-break — the separate fx-ui camera keeps the HUD/combat bar perfectly still.\n- New visual parameters (bolt size/trail, muzzle, arc span, shake intensity, etc.) are tunable in data/combat.json, consistent with the project's single-tuning-surface convention.\n- No regressions: dev/combat.test.mjs passes with 0 failures; both contexts boot and play; no new dependencies, no build step.\n\nBoundaries:\n- In scope: js/combat/Bullet.js, js/combat/Fx.js, the FX call sites in js/combat/CombatScene.js and js/combat/CombatSystem.js (firing, collisions, damage, kills), camera shake wiring, and tuning knobs in data/combat.json.\n- Out of scope: gameplay numbers (damage, cooldowns, speeds, hull/shield values), enemy AI, new weapons or skills, audio changes (existing SFX events stay as-is), HUD/combat-bar redesign, and non-combat main-game visuals.\n\nConstraints:\n- Plain ES6 modules, no build step, no new dependencies (Phaser 4.2.1 stays vendored).\n- No particle emitters — this build's emitter velocity semantics are fiddly (documented in js/combat/Fx.js); follow the existing hand-rolled pattern: canvas-generated textures + additive-blended images stepped in update().\n- Keep the FX cheap enough for 60fps with 3+ enemies and auto-fire (small per-hit item counts, shared textures, depth discipline: ships 10, FX 19–22, HUD 100).\n- Implement in the SHARED code (Fx.js / Bullet.js) so the range and the main game stay identical; both contexts' FX call sites must be updated together.\n- Camera shake on the world camera only (the fx-ui UI camera must remain unshaken).\n\nVerification contract:\n- Run `node dev/combat.test.mjs` → 0 failures.\n- Manual pass in the range (/combat via the dev server) AND the main game (index.html?combat): player cannon fires elongated bolt + trail + directional muzzle flash; enemy hits show the impact event with distinct shield (cyan ripple) vs hull (orange debris) reads; an enemy lance landing on the player shows the sphere struck — arc highlight centered on the laser's bearing + ripple + sparks, with a shield-collapse cue when shields break; kills show the burst + subtle shake; HUD stays still throughout.\n- Re-read this goal's requirements (lasers, enemy impact, shield sphere hit from the laser's angle, hit-region highlight, shake) and confirm every item is addressed in both contexts before marking complete.\n\nIf blocked: stop and ask the user.","sisyphus":false,"autoContinue":true,"at":"2026-09-17T02:44:06.019Z"},"lastActivityEvent":{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"approved","report":"Fx.js and Bullet.js look substantial. Now the shake module and tuning surface.\n\nNow let me inspect the call sites in both contexts.\n\nThe dev server and headless browser are live. Let me check the debug seams exposed by both contexts, then run a read-only live probe.\n\nI've verified the code paths on both sides. Now I'll run a live probe of both contexts through the dev server to confirm everything's working.\n\nThe two \"FAIL\"s within the range are actually bugs in my probe (scale is 46×10 world px = elongated; -180° ≡ 180°). The main game result needs investigation — let me inspect the actual shape of `__ORBIT_COMBAT__`:\n\nAll checks are now resolved. Final audit summary:\n\n**Verified via code inspection + live CDP probes in both contexts (range `/combat` and `index.html?combat`), with zero console errors:**\n\n1. **Laser bolts (both contexts):** 128×32 canvas bolt texture (fading trail band + bright core streak + head bloom) scaled to 46×10 px player / 54×12 px enemy (elongated 4.6:1, measured), tinted halo (cyan `00e5ff` player, `#ff2d6f` enemy from weapon config), untinted white core dot riding the tip (measured offset 17.25 px ahead of center), directional muzzle flare — bore spike measured at the exact firing angle in both contexts. `fx.muzzle` + `spawnBullet(boltLength/boltWidth)` call sites are symmetric in `CombatScene.js` and `CombatSystem.js`.\n\n2. **Enemy impact reads:** hot white + colored core flash, directional sparks/shards measured within the cone along the bullet's actual travel vector, white craft hit-flash via `tintMode=1` FILL (measured `ffffff`/mode 1 during flash, restored to 0 on expiry — and the previously-flagged ship-destruction defect is fixed: enemy and player ship both survive expiry, verified live), cyan arc ripple at the exact incoming bearing (travel +180°, measured 134.2°/134.2° in range and −42.5°/−42.5° in main) vs orange bolt-textured shards + tight orange ring with **no** arc on hull hits (measured), damage-number pops (measured \"10\"/\"8\").\n\n3. **Shield-sphere strike:** faint full-sphere outline + bright arc segment (1.90 rad, span-keyed texture `__combat_shield_s1.90`) centered exactly on the laser's incoming bearing (measured 135° and 45°), radial ripple from the impact point, outward-biased spark burst, ship white flash, damage-scaled intensity, ~0.5 s decay (config `decayMs: 520`); shield→hull break shows the `ringIn` implosion + shockwave (measured); rams funnel through the same bearing-based `damagePlayer` treatment in both contexts.\n\n4. **Shake:** world camera `shakeEffect` measured running on player hit, enemy kill, and shield-break; `fx-ui` camera measured inactive in both contexts (HUD/bar on the untouched UI pass).\n\n5. **Tuning surface:** `boltLength/boltWidth/muzzle` + `fx.shake` + `fx.shield` knobs in `data/combat.json`, all read via `config.get/section`; live values match config; git diff confirms only visual knobs were added (no gameplay numbers touched).\n\n6. **No regressions:** `node dev/combat.test.mjs` → 146 checks, 0 failures, exit 0; only that suite imports the changed modules; both contexts boot and play (range fully exercised; main game ran a live 3 s auto-fire fight with the pack intact, ship alive); diff confined to `js/combat/*` + `CamShake.js` + `data/combat.json` — no new dependencies, no build step, hand-rolled FX (no emitters), depth discipline (ships 10 / FX 19–22 / HUD 100) holds.\n\nThe eight \"failures\" in my first probe round were all arithmetic/sequencing bugs in my own probe (angle wraparound, aspect-ratio math, a missing target fallback) — each was re-verified individually and passes.\n\n","at":"2026-09-17T05:08:04.224Z"},"completion":{"type":"completion_requested","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T05:01:50.034Z"},"audit":{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"approved","report":"Fx.js and Bullet.js look substantial. Now the shake module and tuning surface.\n\nNow let me inspect the call sites in both contexts.\n\nThe dev server and headless browser are live. Let me check the debug seams exposed by both contexts, then run a read-only live probe.\n\nI've verified the code paths on both sides. Now I'll run a live probe of both contexts through the dev server to confirm everything's working.\n\nThe two \"FAIL\"s within the range are actually bugs in my probe (scale is 46×10 world px = elongated; -180° ≡ 180°). The main game result needs investigation — let me inspect the actual shape of `__ORBIT_COMBAT__`:\n\nAll checks are now resolved. Final audit summary:\n\n**Verified via code inspection + live CDP probes in both contexts (range `/combat` and `index.html?combat`), with zero console errors:**\n\n1. **Laser bolts (both contexts):** 128×32 canvas bolt texture (fading trail band + bright core streak + head bloom) scaled to 46×10 px player / 54×12 px enemy (elongated 4.6:1, measured), tinted halo (cyan `00e5ff` player, `#ff2d6f` enemy from weapon config), untinted white core dot riding the tip (measured offset 17.25 px ahead of center), directional muzzle flare — bore spike measured at the exact firing angle in both contexts. `fx.muzzle` + `spawnBullet(boltLength/boltWidth)` call sites are symmetric in `CombatScene.js` and `CombatSystem.js`.\n\n2. **Enemy impact reads:** hot white + colored core flash, directional sparks/shards measured within the cone along the bullet's actual travel vector, white craft hit-flash via `tintMode=1` FILL (measured `ffffff`/mode 1 during flash, restored to 0 on expiry — and the previously-flagged ship-destruction defect is fixed: enemy and player ship both survive expiry, verified live), cyan arc ripple at the exact incoming bearing (travel +180°, measured 134.2°/134.2° in range and −42.5°/−42.5° in main) vs orange bolt-textured shards + tight orange ring with **no** arc on hull hits (measured), damage-number pops (measured \"10\"/\"8\").\n\n3. **Shield-sphere strike:** faint full-sphere outline + bright arc segment (1.90 rad, span-keyed texture `__combat_shield_s1.90`) centered exactly on the laser's incoming bearing (measured 135° and 45°), radial ripple from the impact point, outward-biased spark burst, ship white flash, damage-scaled intensity, ~0.5 s decay (config `decayMs: 520`); shield→hull break shows the `ringIn` implosion + shockwave (measured); rams funnel through the same bearing-based `damagePlayer` treatment in both contexts.\n\n4. **Shake:** world camera `shakeEffect` measured running on player hit, enemy kill, and shield-break; `fx-ui` camera measured inactive in both contexts (HUD/bar on the untouched UI pass).\n\n5. **Tuning surface:** `boltLength/boltWidth/muzzle` + `fx.shake` + `fx.shield` knobs in `data/combat.json`, all read via `config.get/section`; live values match config; git diff confirms only visual knobs were added (no gameplay numbers touched).\n\n6. **No regressions:** `node dev/combat.test.mjs` → 146 checks, 0 failures, exit 0; only that suite imports the changed modules; both contexts boot and play (range fully exercised; main game ran a live 3 s auto-fire fight with the pack intact, ship alive); diff confined to `js/combat/*` + `CamShake.js` + `data/combat.json` — no new dependencies, no build step, hand-rolled FX (no emitters), depth discipline (ships 10 / FX 19–22 / HUD 100) holds.\n\nThe eight \"failures\" in my first probe round were all arithmetic/sequencing bugs in my own probe (angle wraparound, aspect-ratio math, a missing target fallback) — each was re-verified individually and passes.\n\n","at":"2026-09-17T05:08:04.224Z"}}],["mu7ieab2-f24hte",{"recent":[{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T04:06:34.695Z"},{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"Scheduling paused","source":"agent","at":"2026-09-19T04:06:46.015Z"},{"type":"goal_resumed","goalId":"mu7ieab2-f24hte","reason":"user","at":"2026-09-19T04:17:54.636Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-2","evidence":"dev/ship-window.test.mjs: every configured row resolves finite from real data; fireRate=1/cd, DPS=damage/cd, accel=ship.thrust, recharge=combat.playerShield. Screenshots reviewed: nominal (HULL 100/CU","at":"2026-09-19T04:54:26.329Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-3","evidence":"dev/ship-window.test.mjs drives real XpManager: levels 0-4 → timeline, 5 & 6 → CHOOSE YOUR CLASS door, class on file → class plate (mode flips exactly at data classAt=5; maxLevel untouched). Screensho","at":"2026-09-19T05:04:37.254Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-4","at":"2026-09-19T05:04:55.422Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-4","evidence":"Screenshots reviewed at 1920x1080: empty hold (\"HOLD EMPTY — EVERY BAY IS CLEAN\", EMPTY tiles, +12 LOCKED pips, 0% / NO ORE ABOARD) and loaded (icons+names, MANIFEST tags, \"4/6 BAYS · 2 FREE\", +10 LOC","at":"2026-09-19T05:21:51.901Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-5","at":"2026-09-19T05:22:27.127Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-5","evidence":"Selecting a filled bay opens BAY MANIFEST (js/ui/ShipWindow.js _paintManifest): goods icon frame, name, CLASS/TIER/BASE VALUE chips (labels from data), flavor, MADE IN origin|hub pool + producer class","at":"2026-09-19T06:10:11.478Z"},{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T14:55:34.986Z"},{"type":"goal_focused","goalId":"mu7ieab2-f24hte","reason":"selected","at":"2026-09-19T15:32:31.167Z"},{"type":"goal_focused","goalId":"mu7ieab2-f24hte","reason":"selected","at":"2026-09-19T15:38:35.941Z"}],"activity":[{"type":"goal_created","goalId":"mu7ieab2-f24hte","objective":"Build the Ship Screen console — opened by the command deck's SHIP slot in the main game (GameScene), on the MapWindow bones (left looping video panel reading assets/videos/ship.mp4 via config with a skip-if-missing guard, right column of tabs) — and deliver two fully working tabs now: \"Ship Status\" (a good-looking stat plate covering hull integrity/current hull strength, shields/shield recharge rate & delay, acceleration/max speed, fire rate, damage, cargo bays, mineral storage, mining speed + combat level with a progress bar toward the next level and a timeline-style presentation of the player's journey from level 0 to level 5 that swaps to a \"Choose your Class\" button at level 5) and \"Cargo Holds\" (a summary of goods aboard by bay plus aggregate minerals aboard vs capacity, where selecting a held good shows its product summary and top charted exits in the same style as the planet buy/sell screens); plus a locked/OFFLINE \"Skill Tree\" tab so the final structure is visible. Success = deck-press opens/closes the console exclusively with the other consoles, both live tabs render correct real run data at multiple forced states, screenshots of every tab/state are reviewed, and `node dev/run-all.mjs` passes with a new Ship test registered in it.","sisyphus":false,"autoContinue":true,"at":"2026-09-18T22:07:23.053Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-1","at":"2026-09-18T22:10:43.158Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-1","evidence":"node --check clean on ShipWindow/Model/GameScene/ship-shot; headless boot (mp4 absent) report \"SMOKE OK — no console errors\", video: NO SIGNAL plate, window open/tab switch ok; deckAction exclusivity ","at":"2026-09-19T01:02:52.692Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-2","at":"2026-09-19T01:03:09.694Z"},{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T04:06:34.695Z"},{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"Scheduling paused","source":"agent","at":"2026-09-19T04:06:46.015Z"},{"type":"goal_resumed","goalId":"mu7ieab2-f24hte","reason":"user","at":"2026-09-19T04:17:54.636Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-2","evidence":"dev/ship-window.test.mjs: every configured row resolves finite from real data; fireRate=1/cd, DPS=damage/cd, accel=ship.thrust, recharge=combat.playerShield. Screenshots reviewed: nominal (HULL 100/CU","at":"2026-09-19T04:54:26.329Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-3","evidence":"dev/ship-window.test.mjs drives real XpManager: levels 0-4 → timeline, 5 & 6 → CHOOSE YOUR CLASS door, class on file → class plate (mode flips exactly at data classAt=5; maxLevel untouched). Screensho","at":"2026-09-19T05:04:37.254Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-4","at":"2026-09-19T05:04:55.422Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-4","evidence":"Screenshots reviewed at 1920x1080: empty hold (\"HOLD EMPTY — EVERY BAY IS CLEAN\", EMPTY tiles, +12 LOCKED pips, 0% / NO ORE ABOARD) and loaded (icons+names, MANIFEST tags, \"4/6 BAYS · 2 FREE\", +10 LOC","at":"2026-09-19T05:21:51.901Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-5","at":"2026-09-19T05:22:27.127Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-5","evidence":"Selecting a filled bay opens BAY MANIFEST (js/ui/ShipWindow.js _paintManifest): goods icon frame, name, CLASS/TIER/BASE VALUE chips (labels from data), flavor, MADE IN origin|hub pool + producer class","at":"2026-09-19T06:10:11.478Z"},{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T14:55:34.986Z"}],"oracle":[],"lifecycle":{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T14:55:34.986Z"},"lastActivityEvent":{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T14:55:34.986Z"}}],["mu986lbo-140zqa",{"recent":[{"type":"goal_created","goalId":"mu986lbo-140zqa","objective":"=== Goal ===\nObjective: Give the 7 new enemy ships (spritesheet frames 1–7) distinct stats and attack patterns using a mix of weapon types (heat-seeking missiles, spray, plus new ideas), ramping modestly in difficulty frame 1 → 7, and rewire the ?combat demo to send a sequence of rolling waves — one wave per ship type in difficulty order, 6 ships of that type per wave, 3 on screen at a time.\n\nSuccess criteria:\n- data/combat.json → enemyTypes has 7 new types (frames 1–7), each with distinct stats + a distinct weapon pattern; difficulty (hull/shields/damage) climbs monotonically frame 1 → 7 with only modest bumps (not a wall).\n- Weapon types actually implemented and used: heat-seeking missile (dodgeable — capped turn-rate), spray fan, rapid burst, rapid-fire, ring burst, and a heavy/elite combo. The missile is the only genuinely new projectile; the rest are loops/config over the existing bolt.\n- All 7 fire their pattern correctly in BOTH the main-game ?combat boot and the standalone range (shared firing path).\n- The ?combat boot now dispatches a sequence of rolling waves: 7 waves in difficulty order, each wave = 6 ships of that single type, maxConcurrent=3, each kill sending in a replacement (replacePerKill=1).\n- dev/combat.test.mjs still passes (pure Node modules: EnemyTypes/Waves stay Phaser-free).\n\nBoundaries:\n- In scope: data/combat.json (enemyTypes + a new wave script + ?combat wiring), js/combat (new weapon behaviors: EnemyShip firing, a missile projectile, fireEnemy dispatch in both CombatScene and CombatSystem), dev/combat.test.mjs.\n- Out of scope: new art/sprites, player-ship changes, the XP curve, and the existing pirate_ambush quest wave (stays as-is). The pre-existing frame-0 raider stays untouched.\n- New weapons must not break the standalone range (combat.html / dev server /combat) — it shares the firing path.\n\nConstraints (hard rules):\n- Heat-seeking missiles MUST be dodgeable: capped turn-rate + moderate speed, so the player can out-turn them.\n- Each subsequent ship only a LITTLE harder than the previous (modest +hull/+shields/+damage), not a big jump.\n- Keep EnemyTypes.js and Waves.js pure (no Phaser/scene imports) so dev/combat.test.mjs runs in bare Node.\n- ?combat demo: exactly 7 waves, one type each, in difficulty order; rolling; 6 per wave; 3 concurrent; 1 replacement per kill.\n- Don't mutate shared config sections in place (deepMerge already guards this; follow the pattern).\n\nVerification contract:\n- Run dev/combat.test.mjs → 0 failures.\n- grep confirms the new wave script is wired to the ?combat boot (spawnPack replaced) and all 7 frames are referenced in enemyTypes.\n- Manual browser check of ?combat: 7 waves fire in order, 3 on screen at a time, one type per wave; missiles visibly home and can be dodged; spray/burst/ring render correctly.\n- Re-read the 7-ship roster table and confirm each type's pattern + difficulty bump is present.\n\nIf blocked: stop and ask the user.","sisyphus":false,"autoContinue":true,"at":"2026-09-20T02:57:00.276Z"},{"type":"task_list_set","goalId":"mu986lbo-140zqa","taskCount":4,"blockCompletion":true,"at":"2026-09-20T02:57:00.276Z"},{"type":"task_started","goalId":"mu986lbo-140zqa","taskId":"task-1","at":"2026-09-20T02:57:57.911Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-1","evidence":"Node check: 7 types (frames 1–7) resolve; hull 80→150, xp 18→42 monotonic; 7 distinct patterns; combat_demo normalizes to 7 rolling waves (6/3/1 each)","at":"2026-09-20T03:05:24.313Z"},{"type":"task_started","goalId":"mu986lbo-140zqa","taskId":"task-2","at":"2026-09-20T03:05:24.314Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-2","evidence":"Missile.js (capped turn homing, Node-tested) + Weapons.js firePattern dispatch all 7 patterns; both contexts wired (CombatScene/CombatSystem.fireEnemy → firePattern); Node suite green importing EnemyT","at":"2026-09-20T04:21:17.494Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-3","evidence":"GameScene:1050 startWaves('combat_demo') (spawnPack no longer the boot path); combat_demo = 7 rolling waves bomber→warden, 6/3/1 each; Node e2e run passes; browser sfxcheck found live wave ship after ","at":"2026-09-20T04:21:17.495Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-4","evidence":"node dev/combat.test.mjs: all checks passed (0 failures). CDP demo check PASS: range renders all 7 patterns w/ shape; main 7 waves in order, 3 on screen, replacement/kill, 42 kills done. sfxcheck PASS","at":"2026-09-20T05:03:03.769Z"},{"type":"completion_requested","goalId":"mu986lbo-140zqa","at":"2026-09-20T05:03:52.556Z"},{"type":"audit_started","goalId":"mu986lbo-140zqa","at":"2026-09-20T05:03:52.557Z"},{"type":"audit_result","goalId":"mu986lbo-140zqa","verdict":"approved","report":"The config file looks complete. Now let me inspect the combat modules and tests.\n\nThe CDP endpoint and dev server are both live. Let me run the browser verification harnesses myself to confirm the claims.\n\nBoth independent browser harnesses pass. Let me verify the change scope didn't touch out-of-scope files and confirm the remaining details.\n\nAll success criteria verified against real artifacts, with independent re-runs of the verification contract:\n\n**1. Seven new types (frames 1–7), distinct stats + patterns, monotonic modest ramp** — `data/combat.json → enemyTypes`: bomber(f1, 80/10, dmg 10, lance), spitter(f2, 90/20, 11, spray 5 bolts/1.1 rad), stinger(f3, 100/25, 12, burst 3 staggered-speed), hunter(f4, 110/30, 13, heat-seeking missile), gunner(f5, 120/40, 14, rapid cd 0.5), barrage(f6, 135/50, 15, ring 8), warden(f7, 150/60, 18+20, combo). Hull 80→90→100→110→120→135→150, shields 10→20→25→30→40→50→60, damage 10→11→12→13→14→15→18 — strictly monotonic, bumps ≤ +15 (no wall). Raider (frame 0) and `pirate_ambunch` untouched (diff confirms only comments/enemyTypes/combat_demo changed).\n\n**2. Weapons implemented on a shared path, missile genuinely new** — `js/combat/Weapons.js` `firePattern` dispatches all 7 patterns; `js/combat/Missile.js` is the only new projectile (canvas art + sprite), rest are bolt loops/config. `homingStep` (capped turn) lives in pure `js/combat/Combat.js`. Missile caps: turn 2.2/2.4 rad/s vs player rotSpeed 6.4 rad/s, speed 170/190 px/s vs player maxSpeed 560 — dodgeable, and the cap is asserted in tests. Both `CombatScene.fireEnemy` and `CombatSystem.fireEnemy` now delegate to `firePattern` (old inline single-bolt code removed), and both run `stepMissiles`/`missilesHitPlayer`.\n\n**3. ?combat rewired** — `GameScene:1050` `this.combat.startWaves('combat_demo')`; `spawnPack` demoted to a practice pack (no longer the boot). `combat_demo` = exactly 7 rolling waves, one single type each in difficulty order, each `count: 6, maxConcurrent: 3, replacePerKill: 1`.\n\n**4. Tests — I ran them** — `node dev/combat.test.mjs` → \"combat rules: all checks passed\" (0 failures), including pure-geometry, all-7 pattern dispatch, missile homing/fuse/consume, and a full 7-wave CombatSystem end-to-end (42 kills, 3-on-screen cap, replacement-per-kill, 7 starts/7 clears). `EnemyTypes.js`/`Waves.js` import only `config/Config.js` (no Phaser).\n\n**5. Browser verification — I re-ran both CDP harnesses** (headless Chromium on :9333, dev server :8080): `dev/combat-demo-check.mjs` → \"seven ships: PASS\" (range: all 7 volleys with correct shape incl. 5-bolt fan, 8-bolt even ring, staggered burst, homing missile; main: 7 waves in order, 3 on screen, replacement per kill, done at 42 kills) and `dev/combat.sfxcheck.mjs` → PASS (range 9/9, main 10/10 events incl. `missile_fire`). The range (`/combat`) shares the firing path and renders all 7 patterns — not broken.\n\nDiff scope is confined to the in-scope files (combat.json, js/combat/*, GameScene, dev tests); no out-of-scope files (XP curve, ship.json, sidequests) touched by this goal's changes.\n\n","at":"2026-09-20T05:06:03.693Z"}],"activity":[{"type":"goal_created","goalId":"mu986lbo-140zqa","objective":"=== Goal ===\nObjective: Give the 7 new enemy ships (spritesheet frames 1–7) distinct stats and attack patterns using a mix of weapon types (heat-seeking missiles, spray, plus new ideas), ramping modestly in difficulty frame 1 → 7, and rewire the ?combat demo to send a sequence of rolling waves — one wave per ship type in difficulty order, 6 ships of that type per wave, 3 on screen at a time.\n\nSuccess criteria:\n- data/combat.json → enemyTypes has 7 new types (frames 1–7), each with distinct stats + a distinct weapon pattern; difficulty (hull/shields/damage) climbs monotonically frame 1 → 7 with only modest bumps (not a wall).\n- Weapon types actually implemented and used: heat-seeking missile (dodgeable — capped turn-rate), spray fan, rapid burst, rapid-fire, ring burst, and a heavy/elite combo. The missile is the only genuinely new projectile; the rest are loops/config over the existing bolt.\n- All 7 fire their pattern correctly in BOTH the main-game ?combat boot and the standalone range (shared firing path).\n- The ?combat boot now dispatches a sequence of rolling waves: 7 waves in difficulty order, each wave = 6 ships of that single type, maxConcurrent=3, each kill sending in a replacement (replacePerKill=1).\n- dev/combat.test.mjs still passes (pure Node modules: EnemyTypes/Waves stay Phaser-free).\n\nBoundaries:\n- In scope: data/combat.json (enemyTypes + a new wave script + ?combat wiring), js/combat (new weapon behaviors: EnemyShip firing, a missile projectile, fireEnemy dispatch in both CombatScene and CombatSystem), dev/combat.test.mjs.\n- Out of scope: new art/sprites, player-ship changes, the XP curve, and the existing pirate_ambush quest wave (stays as-is). The pre-existing frame-0 raider stays untouched.\n- New weapons must not break the standalone range (combat.html / dev server /combat) — it shares the firing path.\n\nConstraints (hard rules):\n- Heat-seeking missiles MUST be dodgeable: capped turn-rate + moderate speed, so the player can out-turn them.\n- Each subsequent ship only a LITTLE harder than the previous (modest +hull/+shields/+damage), not a big jump.\n- Keep EnemyTypes.js and Waves.js pure (no Phaser/scene imports) so dev/combat.test.mjs runs in bare Node.\n- ?combat demo: exactly 7 waves, one type each, in difficulty order; rolling; 6 per wave; 3 concurrent; 1 replacement per kill.\n- Don't mutate shared config sections in place (deepMerge already guards this; follow the pattern).\n\nVerification contract:\n- Run dev/combat.test.mjs → 0 failures.\n- grep confirms the new wave script is wired to the ?combat boot (spawnPack replaced) and all 7 frames are referenced in enemyTypes.\n- Manual browser check of ?combat: 7 waves fire in order, 3 on screen at a time, one type per wave; missiles visibly home and can be dodged; spray/burst/ring render correctly.\n- Re-read the 7-ship roster table and confirm each type's pattern + difficulty bump is present.\n\nIf blocked: stop and ask the user.","sisyphus":false,"autoContinue":true,"at":"2026-09-20T02:57:00.276Z"},{"type":"task_started","goalId":"mu986lbo-140zqa","taskId":"task-1","at":"2026-09-20T02:57:57.911Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-1","evidence":"Node check: 7 types (frames 1–7) resolve; hull 80→150, xp 18→42 monotonic; 7 distinct patterns; combat_demo normalizes to 7 rolling waves (6/3/1 each)","at":"2026-09-20T03:05:24.313Z"},{"type":"task_started","goalId":"mu986lbo-140zqa","taskId":"task-2","at":"2026-09-20T03:05:24.314Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-2","evidence":"Missile.js (capped turn homing, Node-tested) + Weapons.js firePattern dispatch all 7 patterns; both contexts wired (CombatScene/CombatSystem.fireEnemy → firePattern); Node suite green importing EnemyT","at":"2026-09-20T04:21:17.494Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-3","evidence":"GameScene:1050 startWaves('combat_demo') (spawnPack no longer the boot path); combat_demo = 7 rolling waves bomber→warden, 6/3/1 each; Node e2e run passes; browser sfxcheck found live wave ship after ","at":"2026-09-20T04:21:17.495Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-4","evidence":"node dev/combat.test.mjs: all checks passed (0 failures). CDP demo check PASS: range renders all 7 patterns w/ shape; main 7 waves in order, 3 on screen, replacement/kill, 42 kills done. sfxcheck PASS","at":"2026-09-20T05:03:03.769Z"},{"type":"completion_requested","goalId":"mu986lbo-140zqa","at":"2026-09-20T05:03:52.556Z"},{"type":"audit_started","goalId":"mu986lbo-140zqa","at":"2026-09-20T05:03:52.557Z"},{"type":"audit_result","goalId":"mu986lbo-140zqa","verdict":"approved","report":"The config file looks complete. Now let me inspect the combat modules and tests.\n\nThe CDP endpoint and dev server are both live. Let me run the browser verification harnesses myself to confirm the claims.\n\nBoth independent browser harnesses pass. Let me verify the change scope didn't touch out-of-scope files and confirm the remaining details.\n\nAll success criteria verified against real artifacts, with independent re-runs of the verification contract:\n\n**1. Seven new types (frames 1–7), distinct stats + patterns, monotonic modest ramp** — `data/combat.json → enemyTypes`: bomber(f1, 80/10, dmg 10, lance), spitter(f2, 90/20, 11, spray 5 bolts/1.1 rad), stinger(f3, 100/25, 12, burst 3 staggered-speed), hunter(f4, 110/30, 13, heat-seeking missile), gunner(f5, 120/40, 14, rapid cd 0.5), barrage(f6, 135/50, 15, ring 8), warden(f7, 150/60, 18+20, combo). Hull 80→90→100→110→120→135→150, shields 10→20→25→30→40→50→60, damage 10→11→12→13→14→15→18 — strictly monotonic, bumps ≤ +15 (no wall). Raider (frame 0) and `pirate_ambunch` untouched (diff confirms only comments/enemyTypes/combat_demo changed).\n\n**2. Weapons implemented on a shared path, missile genuinely new** — `js/combat/Weapons.js` `firePattern` dispatches all 7 patterns; `js/combat/Missile.js` is the only new projectile (canvas art + sprite), rest are bolt loops/config. `homingStep` (capped turn) lives in pure `js/combat/Combat.js`. Missile caps: turn 2.2/2.4 rad/s vs player rotSpeed 6.4 rad/s, speed 170/190 px/s vs player maxSpeed 560 — dodgeable, and the cap is asserted in tests. Both `CombatScene.fireEnemy` and `CombatSystem.fireEnemy` now delegate to `firePattern` (old inline single-bolt code removed), and both run `stepMissiles`/`missilesHitPlayer`.\n\n**3. ?combat rewired** — `GameScene:1050` `this.combat.startWaves('combat_demo')`; `spawnPack` demoted to a practice pack (no longer the boot). `combat_demo` = exactly 7 rolling waves, one single type each in difficulty order, each `count: 6, maxConcurrent: 3, replacePerKill: 1`.\n\n**4. Tests — I ran them** — `node dev/combat.test.mjs` → \"combat rules: all checks passed\" (0 failures), including pure-geometry, all-7 pattern dispatch, missile homing/fuse/consume, and a full 7-wave CombatSystem end-to-end (42 kills, 3-on-screen cap, replacement-per-kill, 7 starts/7 clears). `EnemyTypes.js`/`Waves.js` import only `config/Config.js` (no Phaser).\n\n**5. Browser verification — I re-ran both CDP harnesses** (headless Chromium on :9333, dev server :8080): `dev/combat-demo-check.mjs` → \"seven ships: PASS\" (range: all 7 volleys with correct shape incl. 5-bolt fan, 8-bolt even ring, staggered burst, homing missile; main: 7 waves in order, 3 on screen, replacement per kill, done at 42 kills) and `dev/combat.sfxcheck.mjs` → PASS (range 9/9, main 10/10 events incl. `missile_fire`). The range (`/combat`) shares the firing path and renders all 7 patterns — not broken.\n\nDiff scope is confined to the in-scope files (combat.json, js/combat/*, GameScene, dev tests); no out-of-scope files (XP curve, ship.json, sidequests) touched by this goal's changes.\n\n","at":"2026-09-20T05:06:03.693Z"}],"oracle":[],"lifecycle":{"type":"goal_created","goalId":"mu986lbo-140zqa","objective":"=== Goal ===\nObjective: Give the 7 new enemy ships (spritesheet frames 1–7) distinct stats and attack patterns using a mix of weapon types (heat-seeking missiles, spray, plus new ideas), ramping modestly in difficulty frame 1 → 7, and rewire the ?combat demo to send a sequence of rolling waves — one wave per ship type in difficulty order, 6 ships of that type per wave, 3 on screen at a time.\n\nSuccess criteria:\n- data/combat.json → enemyTypes has 7 new types (frames 1–7), each with distinct stats + a distinct weapon pattern; difficulty (hull/shields/damage) climbs monotonically frame 1 → 7 with only modest bumps (not a wall).\n- Weapon types actually implemented and used: heat-seeking missile (dodgeable — capped turn-rate), spray fan, rapid burst, rapid-fire, ring burst, and a heavy/elite combo. The missile is the only genuinely new projectile; the rest are loops/config over the existing bolt.\n- All 7 fire their pattern correctly in BOTH the main-game ?combat boot and the standalone range (shared firing path).\n- The ?combat boot now dispatches a sequence of rolling waves: 7 waves in difficulty order, each wave = 6 ships of that single type, maxConcurrent=3, each kill sending in a replacement (replacePerKill=1).\n- dev/combat.test.mjs still passes (pure Node modules: EnemyTypes/Waves stay Phaser-free).\n\nBoundaries:\n- In scope: data/combat.json (enemyTypes + a new wave script + ?combat wiring), js/combat (new weapon behaviors: EnemyShip firing, a missile projectile, fireEnemy dispatch in both CombatScene and CombatSystem), dev/combat.test.mjs.\n- Out of scope: new art/sprites, player-ship changes, the XP curve, and the existing pirate_ambush quest wave (stays as-is). The pre-existing frame-0 raider stays untouched.\n- New weapons must not break the standalone range (combat.html / dev server /combat) — it shares the firing path.\n\nConstraints (hard rules):\n- Heat-seeking missiles MUST be dodgeable: capped turn-rate + moderate speed, so the player can out-turn them.\n- Each subsequent ship only a LITTLE harder than the previous (modest +hull/+shields/+damage), not a big jump.\n- Keep EnemyTypes.js and Waves.js pure (no Phaser/scene imports) so dev/combat.test.mjs runs in bare Node.\n- ?combat demo: exactly 7 waves, one type each, in difficulty order; rolling; 6 per wave; 3 concurrent; 1 replacement per kill.\n- Don't mutate shared config sections in place (deepMerge already guards this; follow the pattern).\n\nVerification contract:\n- Run dev/combat.test.mjs → 0 failures.\n- grep confirms the new wave script is wired to the ?combat boot (spawnPack replaced) and all 7 frames are referenced in enemyTypes.\n- Manual browser check of ?combat: 7 waves fire in order, 3 on screen at a time, one type per wave; missiles visibly home and can be dodged; spray/burst/ring render correctly.\n- Re-read the 7-ship roster table and confirm each type's pattern + difficulty bump is present.\n\nIf blocked: stop and ask the user.","sisyphus":false,"autoContinue":true,"at":"2026-09-20T02:57:00.276Z"},"lastActivityEvent":{"type":"audit_result","goalId":"mu986lbo-140zqa","verdict":"approved","report":"The config file looks complete. Now let me inspect the combat modules and tests.\n\nThe CDP endpoint and dev server are both live. Let me run the browser verification harnesses myself to confirm the claims.\n\nBoth independent browser harnesses pass. Let me verify the change scope didn't touch out-of-scope files and confirm the remaining details.\n\nAll success criteria verified against real artifacts, with independent re-runs of the verification contract:\n\n**1. Seven new types (frames 1–7), distinct stats + patterns, monotonic modest ramp** — `data/combat.json → enemyTypes`: bomber(f1, 80/10, dmg 10, lance), spitter(f2, 90/20, 11, spray 5 bolts/1.1 rad), stinger(f3, 100/25, 12, burst 3 staggered-speed), hunter(f4, 110/30, 13, heat-seeking missile), gunner(f5, 120/40, 14, rapid cd 0.5), barrage(f6, 135/50, 15, ring 8), warden(f7, 150/60, 18+20, combo). Hull 80→90→100→110→120→135→150, shields 10→20→25→30→40→50→60, damage 10→11→12→13→14→15→18 — strictly monotonic, bumps ≤ +15 (no wall). Raider (frame 0) and `pirate_ambunch` untouched (diff confirms only comments/enemyTypes/combat_demo changed).\n\n**2. Weapons implemented on a shared path, missile genuinely new** — `js/combat/Weapons.js` `firePattern` dispatches all 7 patterns; `js/combat/Missile.js` is the only new projectile (canvas art + sprite), rest are bolt loops/config. `homingStep` (capped turn) lives in pure `js/combat/Combat.js`. Missile caps: turn 2.2/2.4 rad/s vs player rotSpeed 6.4 rad/s, speed 170/190 px/s vs player maxSpeed 560 — dodgeable, and the cap is asserted in tests. Both `CombatScene.fireEnemy` and `CombatSystem.fireEnemy` now delegate to `firePattern` (old inline single-bolt code removed), and both run `stepMissiles`/`missilesHitPlayer`.\n\n**3. ?combat rewired** — `GameScene:1050` `this.combat.startWaves('combat_demo')`; `spawnPack` demoted to a practice pack (no longer the boot). `combat_demo` = exactly 7 rolling waves, one single type each in difficulty order, each `count: 6, maxConcurrent: 3, replacePerKill: 1`.\n\n**4. Tests — I ran them** — `node dev/combat.test.mjs` → \"combat rules: all checks passed\" (0 failures), including pure-geometry, all-7 pattern dispatch, missile homing/fuse/consume, and a full 7-wave CombatSystem end-to-end (42 kills, 3-on-screen cap, replacement-per-kill, 7 starts/7 clears). `EnemyTypes.js`/`Waves.js` import only `config/Config.js` (no Phaser).\n\n**5. Browser verification — I re-ran both CDP harnesses** (headless Chromium on :9333, dev server :8080): `dev/combat-demo-check.mjs` → \"seven ships: PASS\" (range: all 7 volleys with correct shape incl. 5-bolt fan, 8-bolt even ring, staggered burst, homing missile; main: 7 waves in order, 3 on screen, replacement per kill, done at 42 kills) and `dev/combat.sfxcheck.mjs` → PASS (range 9/9, main 10/10 events incl. `missile_fire`). The range (`/combat`) shares the firing path and renders all 7 patterns — not broken.\n\nDiff scope is confined to the in-scope files (combat.json, js/combat/*, GameScene, dev tests); no out-of-scope files (XP curve, ship.json, sidequests) touched by this goal's changes.\n\n","at":"2026-09-20T05:06:03.693Z"},"completion":{"type":"completion_requested","goalId":"mu986lbo-140zqa","at":"2026-09-20T05:03:52.556Z"},"audit":{"type":"audit_result","goalId":"mu986lbo-140zqa","verdict":"approved","report":"The config file looks complete. Now let me inspect the combat modules and tests.\n\nThe CDP endpoint and dev server are both live. Let me run the browser verification harnesses myself to confirm the claims.\n\nBoth independent browser harnesses pass. Let me verify the change scope didn't touch out-of-scope files and confirm the remaining details.\n\nAll success criteria verified against real artifacts, with independent re-runs of the verification contract:\n\n**1. Seven new types (frames 1–7), distinct stats + patterns, monotonic modest ramp** — `data/combat.json → enemyTypes`: bomber(f1, 80/10, dmg 10, lance), spitter(f2, 90/20, 11, spray 5 bolts/1.1 rad), stinger(f3, 100/25, 12, burst 3 staggered-speed), hunter(f4, 110/30, 13, heat-seeking missile), gunner(f5, 120/40, 14, rapid cd 0.5), barrage(f6, 135/50, 15, ring 8), warden(f7, 150/60, 18+20, combo). Hull 80→90→100→110→120→135→150, shields 10→20→25→30→40→50→60, damage 10→11→12→13→14→15→18 — strictly monotonic, bumps ≤ +15 (no wall). Raider (frame 0) and `pirate_ambunch` untouched (diff confirms only comments/enemyTypes/combat_demo changed).\n\n**2. Weapons implemented on a shared path, missile genuinely new** — `js/combat/Weapons.js` `firePattern` dispatches all 7 patterns; `js/combat/Missile.js` is the only new projectile (canvas art + sprite), rest are bolt loops/config. `homingStep` (capped turn) lives in pure `js/combat/Combat.js`. Missile caps: turn 2.2/2.4 rad/s vs player rotSpeed 6.4 rad/s, speed 170/190 px/s vs player maxSpeed 560 — dodgeable, and the cap is asserted in tests. Both `CombatScene.fireEnemy` and `CombatSystem.fireEnemy` now delegate to `firePattern` (old inline single-bolt code removed), and both run `stepMissiles`/`missilesHitPlayer`.\n\n**3. ?combat rewired** — `GameScene:1050` `this.combat.startWaves('combat_demo')`; `spawnPack` demoted to a practice pack (no longer the boot). `combat_demo` = exactly 7 rolling waves, one single type each in difficulty order, each `count: 6, maxConcurrent: 3, replacePerKill: 1`.\n\n**4. Tests — I ran them** — `node dev/combat.test.mjs` → \"combat rules: all checks passed\" (0 failures), including pure-geometry, all-7 pattern dispatch, missile homing/fuse/consume, and a full 7-wave CombatSystem end-to-end (42 kills, 3-on-screen cap, replacement-per-kill, 7 starts/7 clears). `EnemyTypes.js`/`Waves.js` import only `config/Config.js` (no Phaser).\n\n**5. Browser verification — I re-ran both CDP harnesses** (headless Chromium on :9333, dev server :8080): `dev/combat-demo-check.mjs` → \"seven ships: PASS\" (range: all 7 volleys with correct shape incl. 5-bolt fan, 8-bolt even ring, staggered burst, homing missile; main: 7 waves in order, 3 on screen, replacement per kill, done at 42 kills) and `dev/combat.sfxcheck.mjs` → PASS (range 9/9, main 10/10 events incl. `missile_fire`). The range (`/combat`) shares the firing path and renders all 7 patterns — not broken.\n\nDiff scope is confined to the in-scope files (combat.json, js/combat/*, GameScene, dev tests); no out-of-scope files (XP curve, ship.json, sidequests) touched by this goal's changes.\n\n","at":"2026-09-20T05:06:03.693Z"}}],["mu9xzeqf-e5m5ej",{"recent":[{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","at":"2026-09-20T17:43:58.266Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","at":"2026-09-20T20:09:24.838Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","evidence":"GameScene: onKill hands the enemy to handleCombatKill (elite-only witness → haltWaves + bountyDown); _establishBountyHunt rolls plan→route (buildPatrolRoute opts {waypoints:[legs,legs], fork:'bounty'}","at":"2026-09-20T20:27:38.322Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-6","at":"2026-09-20T20:28:26.199Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-6","evidence":"JobBoardWindow.js: _rowState 'locked'; greyed row + LOCKED — REQUIRES LEVEL {level} badge (fillLevel); dossier block (WANTED/epithet/CHARGES/CRAFT) via ui.dossier* with dynamic body-line cap; hunt rou","at":"2026-09-20T22:01:54.072Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-7","at":"2026-09-20T22:14:18.633Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"user","status":"paused","at":"2026-09-21T01:39:37.876Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:40:58.104Z"},{"type":"task_list_set","goalId":"mu9xzeqf-e5m5ej","taskCount":7,"blockCompletion":true,"at":"2026-09-21T01:46:12.634Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:50:36.637Z"},{"type":"task_list_set","goalId":"mu9xzeqf-e5m5ej","taskCount":7,"blockCompletion":true,"at":"2026-09-21T01:52:04.548Z"},{"type":"goal_focused","goalId":"mu9xzeqf-e5m5ej","reason":"selected","at":"2026-09-21T02:06:44.440Z"}],"activity":[{"type":"goal_created","goalId":"mu9xzeqf-e5m5ej","objective":"Turn the job board's offline `bounty` category into a live **BOUNTY HUNT** side quest: a level-2+ contract posted only in Neutral systems that sends the ship on a strictly sequential 3-waypoint patrol of a pirate leader's known travel lanes, resolving to a hidden-bounty encounter chain (20% at waypoint 1 → else 20% at waypoint 2 → else guaranteed at waypoint 3, with an independent 50% raiders-only skirmish rolled on each pre-bounty leg), culminating in a rolling wave of 9 (8 frame-0 raiders + the named bounty flying its story's frame 1–7 craft at double health / double damage); killing the bounty halts all further deployments, auto-checks the remaining waypoints, and completes the contract for claim — backed by 20 written Neutral leader dossiers, data-driven so levels 6+ can be extended later.\n\nSUCCESS CRITERIA (observable evidence)\n1. Board: a BOUNTY HUNT row appears on Neutral system boards; below combat level 2 it renders greyed/LOCKED with \"REQUIRES LEVEL 2\" and its accept is refused by the scene; at level 2+ it accepts normally. Faction (Apex/MindWeave/Zenith) boards never draw one, and their pool stays a documented empty stub.\n2. Contract readout shows the dossier — title, issuer, wanted leader (name/epithet/crime), payout CR + XP, waypoint progress (\"WAYPOINT 1 OF 3 LOGGED\") — and nowhere reveals which waypoint holds the bounty or a raid wave (no red contact beacon, no contact count line, no spoiler string).\n3. Route: exactly 3 waypoints, built through the existing seeded tether-safe route builder; only the next waypoint in sequence can be logged, and compass/beacon point at that one only.\n4. Encounter chain matches spec over a seeded distribution test: bounty at wp1 ≈20%, wp2 ≈16% (i.e. 20% of the remainder), wp3 = every remaining contract; each pre-bounty leg independently rolls 50% for a raid wave; no raid wave rolls on the bounty leg or after resolution.\n5. Waves: pre-bounty skirmish = one rolling wave, 6 frame-0 raiders, 3 concurrent (replace-per-kill). Bounty engagement = one rolling wave of 9, 3 concurrent — exactly 8 raiders plus 1 elite of the dossier's declared frame (frames 1–7), deployed with the opening group, carrying ×2 hull/shields and ×2 weapon damage, visually distinguished and named in the toast/comms.\n6. Termination: killing the elite stops all further deployments/replacements; surviving on-screen fighters stay hostile and must be killed; when the last one drops, the contract is COMPLETE, every unvisited waypoint is checked off, no further waves fire, and the claim pays credits + XP exactly once (idempotent). Dying or leaving mid-fight re-arms the same engagement at that waypoint (the combatDone precedent).\n7. Patrol missions are untouched: patrol generation, any-order check-ins, contact markers/waves, XP and claims all still pass their existing tests.\n8. Verification evidence exists: `node dev/bounty-hunts.test.mjs` plus every pre-existing `dev/*.test.mjs` pass clean, and an in-browser run (dev server) is recorded with the accepted → locked → hunt → bounty kill → claim path exercised.\n\nBOUNDARIES\nIn scope: data/sidequests.json (bounty category + 20 Neutral dossiers + UI copy), js/quests/SideQuests.js (availability, posting fields, plan derivation, wave scripts, XP, completion rule, SideQuestState record normalization/save), the minimal combat seam for a buffed elite unit and \"stop deployments, keep survivors alive\" (js/combat/Waves.js, CombatSystem.js, EnemyShip.js if needed), js/scenes/GameScene.js hunt wiring, js/ui/JobBoardWindow.js row/dossier/locked states, dev tests, docs/PROJECT_NOTES.md entry.\nOut of scope: faction-voice bounty hunt copy; level 6+ difficulty tuning (data band stubbed, not tuned); new art/audio assets; the delivery and escort categories; reworking patrol rules or its encounter odds; save-format migrations beyond additive route fields; git commits (Brian commits).\n\nCONSTRAINTS\n- Plain ES6 modules, no build step, no packages; third-party stays vendored. Tunable numbers, copy, colors, odds and the 20 dossiers live in data/*.json — code owns behavior only, with config fallbacks so a missing key never throws.\n- Determinism: all draws ride labelled Rng.derive(seed, 'sidequests', , 'bounty', /…) forks; the plan is rolled at accept and fixed on the route record (\"a signed contract is a signed contract\") — re-tuning data never re-rolls a standing contract.\n- Scenes stay thin (no balance numbers in js/scenes/); pure rules exported for Node tests; layers follow docs/PROJECT_NOTES.md.\n- The bounty plan is player-hidden: no UI, map marker, compass entry or toast exposes which leg holds the bounty or a raid wave before it fires.\n- Old saves and old ledgers must load (additive fields only); patrol path stays byte-for-byte behaviorally identical.\n- Reuse existing seams (buildPatrolRoute, CombatSystem.startWaves/cancelWaves, XpManager 'sidequest' grant) rather than duplicating combat or ledger machinery.\n\nVERIFICATION CONTRACT\n- `node dev/bounty-hunts.test.mjs` passes: level gate, Neutral-only availability, locked-posting shape, 20-dossier pool integrity (unique leaders, frames spread across 1–7 and all valid vs data/combat.json enemyTypes), seeded distribution (20/16/64 + 50% skirmish on pre-bounty legs only), determinism across calls/restarts, route-record save round-trip (toJSON/fromJSON preserves the plan), wave-script shapes (skirmish 6/3 raiders; bounty total 9 / concurrent 3 / 8 raiders + 1 elite of the dossier frame with ×2 scales), XP payout, sequential waypoint rule, and completion only via bounty kill.\n- All pre-existing dev tests still pass (`for f in dev/*.test.mjs; do node \"$f\"; done`) — patrol's suite is the regression guard for the shared code.\n- In-browser evidence via `node dev/server.mjs` + the existing CDP/dev-check pattern: locked row at level 1, hunt posted and accepted at level 2+, sequential check-ins, a wp1 bounty and a wp3-guaranteed case, elite buff (visible double tank/damage), no-more-waves-after-kill, completion + single claim.\n- grep confirms no bounty waypoint/index leaks into board/compass/toast copy, and re-read the spec above to confirm every numbered item is addressed before marking tasks done.\n\nIF BLOCKED: stop and ask the user (no silent scope cuts, no committing). Notable risk to flag rather than work around quietly: any combat-engine change that would alter patrol or sandbox fight behavior.","sisyphus":false,"autoContinue":true,"at":"2026-09-20T14:59:15.159Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-1","at":"2026-09-20T15:10:40.471Z"},{"goalId":"mu9xzeqf-e5m5ej","taskId":"task-1","at":"2026-09-20T15:34:27.961Z","type":"task_complete","evidence":"data/sidequests.json parses (node JSON.parse + python json). categories.bounty = {enabled:true,label:\"BOUNTY HUNT\",accent:#ff2d6f,minLevel:2,contexts:[\"neutral\"]}; sidequests.bounty rules block: waypo"},{"goalId":"mu9xzeqf-e5m5ej","taskId":"task-2","at":"2026-09-20T15:34:27.961Z","type":"task_complete","evidence":"descriptions.neutral.bounty = 20 dossiers (Vanturi, Halvardson, Ondaine, Spidleau sisters, Drumm, Vane, Sekh, Marlowe, Nkemdi, Costa, Dax, Ferreira, Adu, Bellamy, Vowell, Fisk, Tui, Vance, Vohl, Alkan"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-3","at":"2026-09-20T15:34:48.946Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-3","evidence":"SideQuests.js: context/level gating (enabledSideQuestCategories('faction')=['patrol'], sideQuestAcceptable locked below lvl2), dossier postings with per-board dedupe, deriveBountyPlan (seeded fork, bo","at":"2026-09-20T17:05:25.436Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-4","at":"2026-09-20T17:05:55.130Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-4","evidence":"Waves.js normalizeWave preserves elite {type,healthScale,damageScale,name}; resolveRoster puts exactly ONE mark at the head of the spawn order (its weight removed from the escort draw) — non-elite wav","at":"2026-09-20T17:43:03.444Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","at":"2026-09-20T17:43:58.266Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","evidence":"GameScene: onKill hands the enemy to handleCombatKill (elite-only witness → haltWaves + bountyDown); _establishBountyHunt rolls plan→route (buildPatrolRoute opts {waypoints:[legs,legs], fork:'bounty'}","at":"2026-09-20T20:27:38.322Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-6","at":"2026-09-20T20:28:26.199Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-6","evidence":"JobBoardWindow.js: _rowState 'locked'; greyed row + LOCKED — REQUIRES LEVEL {level} badge (fillLevel); dossier block (WANTED/epithet/CHARGES/CRAFT) via ui.dossier* with dynamic body-line cap; hunt rou","at":"2026-09-20T22:01:54.072Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-7","at":"2026-09-20T22:14:18.633Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"user","status":"paused","at":"2026-09-21T01:39:37.876Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:40:58.104Z"}],"oracle":[],"lifecycle":{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:50:36.637Z"},"lastActivityEvent":{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:40:58.104Z"}}]]} \ No newline at end of file +{"version":3,"format":"goal-ledger-checkpoint","createdAt":"2026-09-22T12:33:12.718Z","coveredBytes":63601,"coveredEvents":97,"acc":{"goals":[{"goalId":"mu3lln4y-51f5mi","latestStatus":"active","latestFocus":false,"latestAuditorResult":{"verdict":"approved","report":"The dev server (8080) and a CDP browser (9333) are live, so I can verify directly. First, let me look at the committed screenshot evidence and the README combat section.\n\nI've confirmed the screenshots show the combat HUD, reticles, and kill feed elements. Now I'll run the live CDP checks to verify SFX wiring and flight feel in the running dev environment.\n\nAll verification paths are now confirmed. Let me do a final constraint sweep before deciding.\n\n## Audit summary\n\nI verified the executor's claims against the actual repository and ran the live verification contract myself (dev server + CDP browser were available):\n\n**1. Distinct VFX + SFX per event, both contexts**\n- Code: `CombatScene.js` (range) and `CombatSystem.js` (main) both funnel every event through the shared `combatSfx`/`combatSfxEnemyHit` (7 distinct voices — scan/ui_click/solar_buzz/mining_split/thunder×4/deconstruct/discovery, all existing `data/sfx.json` files, all confirmed on disk) and the shared procedural `Fx` (muzzle flash, color-coded shield-cyan/hull-orange hit flash + damage number, kill burst with double ring, DOWN burst, REFORMED bloom — all canvas dots/additive).\n- Live: `node dev/combat.sfxcheck.mjs` → **PASS** in both `/combat` and `index.html?combat`, all seven events through the shared path (I ran it, exit 0).\n\n**2. Readability layer live in both contexts** (my own CDP probes)\n- Range: `lastFlash={kind:shield}`, kill feed entry landed, lock target acquired; gauge-flash overlay live (peak alpha 0.72, decaying).\n- Main: same, with the flash positioned exactly on the `CombatBar.gaugeRect('shield')` track (peak alpha 1.0), bar visible, feed entry, target true.\n- Committed screenshots `dev/shots/combat-range.png` / `combat-main.png` visually show: lock reticle, threat dots, kill feed \"HOSTILE DESTROYED\", damage numbers (\"10\"), kill burst, tracer, combat bar gauges.\n\n**3. Ship handling (range WASD)**\n- `node dev/combat-flycheck.mjs` → **PASS**: 337 ms to 60% maxSpeed, 133 ms to 30° turn, 7.45 rad/s sustained spin, 308 ms stop from 560 px/s.\n- Real keyboard check: actual 'W' keydown accelerated the ship 0→526 px/s; keyup released it.\n- Values live in `data/combat.json` → `combat.player`; pure `handleFeel` in `js/combat/Combat.js`; both contexts read the same file (weapon, armor, readability, bar).\n\n**4. Tests & docs**\n- `node dev/combat.test.mjs` → 96 checks, **0 failures** (exit 0); `sfx.test.mjs` 21/21.\n- `dev/combat-shot.mjs` follows the `dev/cdp-shot.mjs` CDP pattern; README combat section fully documents feel, the VFX set, the SFX map, the readability layer, and all three dev checkers + hooks.\n\n**Constraints honored**: pure rules in `Combat.js` (unit-tested), single tuning surface `data/combat.json`, shared modules across both contexts (no divergent copies), no new binary game assets (only the two evidence screenshots in the diff), hand-rolled circle collision only, skill stubs (`cast()` no-op), energy gauge (regen 0, full), and auto-fire left as-is, Phaser 4 UMD + plain ES6.\n\nEvery explicit success criterion and the verification contract are genuinely satisfied; the executor's claims match the evidence I independently reproduced.\n\n","at":"2026-09-16T09:04:06.559Z"},"createdAt":"2026-09-16T04:26:00.418Z"},{"goalId":"mu4xefwj-ebnq8h","latestStatus":"active","latestFocus":false,"latestAuditorResult":{"verdict":"approved","report":"Fx.js and Bullet.js look substantial. Now the shake module and tuning surface.\n\nNow let me inspect the call sites in both contexts.\n\nThe dev server and headless browser are live. Let me check the debug seams exposed by both contexts, then run a read-only live probe.\n\nI've verified the code paths on both sides. Now I'll run a live probe of both contexts through the dev server to confirm everything's working.\n\nThe two \"FAIL\"s within the range are actually bugs in my probe (scale is 46×10 world px = elongated; -180° ≡ 180°). The main game result needs investigation — let me inspect the actual shape of `__ORBIT_COMBAT__`:\n\nAll checks are now resolved. Final audit summary:\n\n**Verified via code inspection + live CDP probes in both contexts (range `/combat` and `index.html?combat`), with zero console errors:**\n\n1. **Laser bolts (both contexts):** 128×32 canvas bolt texture (fading trail band + bright core streak + head bloom) scaled to 46×10 px player / 54×12 px enemy (elongated 4.6:1, measured), tinted halo (cyan `00e5ff` player, `#ff2d6f` enemy from weapon config), untinted white core dot riding the tip (measured offset 17.25 px ahead of center), directional muzzle flare — bore spike measured at the exact firing angle in both contexts. `fx.muzzle` + `spawnBullet(boltLength/boltWidth)` call sites are symmetric in `CombatScene.js` and `CombatSystem.js`.\n\n2. **Enemy impact reads:** hot white + colored core flash, directional sparks/shards measured within the cone along the bullet's actual travel vector, white craft hit-flash via `tintMode=1` FILL (measured `ffffff`/mode 1 during flash, restored to 0 on expiry — and the previously-flagged ship-destruction defect is fixed: enemy and player ship both survive expiry, verified live), cyan arc ripple at the exact incoming bearing (travel +180°, measured 134.2°/134.2° in range and −42.5°/−42.5° in main) vs orange bolt-textured shards + tight orange ring with **no** arc on hull hits (measured), damage-number pops (measured \"10\"/\"8\").\n\n3. **Shield-sphere strike:** faint full-sphere outline + bright arc segment (1.90 rad, span-keyed texture `__combat_shield_s1.90`) centered exactly on the laser's incoming bearing (measured 135° and 45°), radial ripple from the impact point, outward-biased spark burst, ship white flash, damage-scaled intensity, ~0.5 s decay (config `decayMs: 520`); shield→hull break shows the `ringIn` implosion + shockwave (measured); rams funnel through the same bearing-based `damagePlayer` treatment in both contexts.\n\n4. **Shake:** world camera `shakeEffect` measured running on player hit, enemy kill, and shield-break; `fx-ui` camera measured inactive in both contexts (HUD/bar on the untouched UI pass).\n\n5. **Tuning surface:** `boltLength/boltWidth/muzzle` + `fx.shake` + `fx.shield` knobs in `data/combat.json`, all read via `config.get/section`; live values match config; git diff confirms only visual knobs were added (no gameplay numbers touched).\n\n6. **No regressions:** `node dev/combat.test.mjs` → 146 checks, 0 failures, exit 0; only that suite imports the changed modules; both contexts boot and play (range fully exercised; main game ran a live 3 s auto-fire fight with the pack intact, ship alive); diff confined to `js/combat/*` + `CamShake.js` + `data/combat.json` — no new dependencies, no build step, hand-rolled FX (no emitters), depth discipline (ships 10 / FX 19–22 / HUD 100) holds.\n\nThe eight \"failures\" in my first probe round were all arithmetic/sequencing bugs in my own probe (angle wraparound, aspect-ratio math, a missing target fallback) — each was re-verified individually and passes.\n\n","at":"2026-09-17T05:08:04.224Z"},"createdAt":"2026-09-17T02:44:06.019Z"},{"goalId":"mu7ieab2-f24hte","latestStatus":"paused","latestFocus":false,"latestPauseReason":"user","createdAt":"2026-09-18T22:07:23.053Z","resumedAt":"2026-09-19T04:17:54.636Z"},{"goalId":"mu986lbo-140zqa","latestStatus":"active","latestFocus":false,"latestAuditorResult":{"verdict":"approved","report":"The config file looks complete. Now let me inspect the combat modules and tests.\n\nThe CDP endpoint and dev server are both live. Let me run the browser verification harnesses myself to confirm the claims.\n\nBoth independent browser harnesses pass. Let me verify the change scope didn't touch out-of-scope files and confirm the remaining details.\n\nAll success criteria verified against real artifacts, with independent re-runs of the verification contract:\n\n**1. Seven new types (frames 1–7), distinct stats + patterns, monotonic modest ramp** — `data/combat.json → enemyTypes`: bomber(f1, 80/10, dmg 10, lance), spitter(f2, 90/20, 11, spray 5 bolts/1.1 rad), stinger(f3, 100/25, 12, burst 3 staggered-speed), hunter(f4, 110/30, 13, heat-seeking missile), gunner(f5, 120/40, 14, rapid cd 0.5), barrage(f6, 135/50, 15, ring 8), warden(f7, 150/60, 18+20, combo). Hull 80→90→100→110→120→135→150, shields 10→20→25→30→40→50→60, damage 10→11→12→13→14→15→18 — strictly monotonic, bumps ≤ +15 (no wall). Raider (frame 0) and `pirate_ambunch` untouched (diff confirms only comments/enemyTypes/combat_demo changed).\n\n**2. Weapons implemented on a shared path, missile genuinely new** — `js/combat/Weapons.js` `firePattern` dispatches all 7 patterns; `js/combat/Missile.js` is the only new projectile (canvas art + sprite), rest are bolt loops/config. `homingStep` (capped turn) lives in pure `js/combat/Combat.js`. Missile caps: turn 2.2/2.4 rad/s vs player rotSpeed 6.4 rad/s, speed 170/190 px/s vs player maxSpeed 560 — dodgeable, and the cap is asserted in tests. Both `CombatScene.fireEnemy` and `CombatSystem.fireEnemy` now delegate to `firePattern` (old inline single-bolt code removed), and both run `stepMissiles`/`missilesHitPlayer`.\n\n**3. ?combat rewired** — `GameScene:1050` `this.combat.startWaves('combat_demo')`; `spawnPack` demoted to a practice pack (no longer the boot). `combat_demo` = exactly 7 rolling waves, one single type each in difficulty order, each `count: 6, maxConcurrent: 3, replacePerKill: 1`.\n\n**4. Tests — I ran them** — `node dev/combat.test.mjs` → \"combat rules: all checks passed\" (0 failures), including pure-geometry, all-7 pattern dispatch, missile homing/fuse/consume, and a full 7-wave CombatSystem end-to-end (42 kills, 3-on-screen cap, replacement-per-kill, 7 starts/7 clears). `EnemyTypes.js`/`Waves.js` import only `config/Config.js` (no Phaser).\n\n**5. Browser verification — I re-ran both CDP harnesses** (headless Chromium on :9333, dev server :8080): `dev/combat-demo-check.mjs` → \"seven ships: PASS\" (range: all 7 volleys with correct shape incl. 5-bolt fan, 8-bolt even ring, staggered burst, homing missile; main: 7 waves in order, 3 on screen, replacement per kill, done at 42 kills) and `dev/combat.sfxcheck.mjs` → PASS (range 9/9, main 10/10 events incl. `missile_fire`). The range (`/combat`) shares the firing path and renders all 7 patterns — not broken.\n\nDiff scope is confined to the in-scope files (combat.json, js/combat/*, GameScene, dev tests); no out-of-scope files (XP curve, ship.json, sidequests) touched by this goal's changes.\n\n","at":"2026-09-20T05:06:03.693Z"},"createdAt":"2026-09-20T02:57:00.276Z"},{"goalId":"mu9xzeqf-e5m5ej","latestStatus":"paused","latestFocus":true,"latestPauseReason":"Scheduling paused","createdAt":"2026-09-20T14:59:15.159Z"},{"goalId":"muc162bo-njvm8l","latestStatus":"active","latestFocus":false,"latestAuditorResult":{"verdict":"approved","report":"Tests pass and the data file looks rich. Now let me inspect the actual code implementing these claims.\n\nNow I'll independently run the browser verification harnesses (dev server + headless Chromium via CDP) to confirm the executor's claims.\n\nAll evidence checks pass. Cleaning up the background processes I started:\n\nI've completed a full independent audit. Summary of what I verified against real artifacts (not the claim):\n\n**Tests (ran myself):**\n- `node dev/run-all.mjs` → ALL 66 TESTS PASSED, exit 0 — includes `encounters.test.mjs`, `neutral.test.mjs`, and the neutral-roster block in `combat.test.mjs` (all re-run individually: PASS).\n- `dev/combat-demo-check.mjs` (headless CDP, real browser) → **PASS** independently re-run: 7-pattern range, `?combat` boot, all 7 combat_demo waves.\n- `dev/encounter-hud-check.mjs` → **PASS** independently re-run: mixed encounter (arrows at both pirates' edges px-verified, never at neutrals; threat layer respects data; ally fire + pirate fire; kill feed live; survivors escort → break off → `active` false), neutrals-only (zero arrows/markers, escorts fly near player, never fire, 0 player damage, leave), and the Pirate Problems ambush (drain 3→3→3→2→1→0, state done).\n\n**Data-driven tunables (data/combat.json):** `encounters` section (45–90 s interval, 0.5–0.6 chance, 30–60 s cooldown, weights 1:1:1, bands 0–2→1–2 / 3–5→2–3 / 6+→4–5 with mixed 2–3 pirates + 1–2 neutrals at high end); `neutral` base + `neutralTypes` with 8 crafts on frames 20–27 (sheet is 1280×1280 = 10×10 frames — confirmed), 8 distinct patterns (incl. new `volley` in Weapons.js), monotonic hull/shields ramp, xp = (hull+shields)/5, escort 10–15 s.\n\n**Code seams (read and traced):**\n- Director: `Encounters.js` pure clock (interval/chance/cooldown/one-at-a-time/allowed-gate) + the ms-scaling regression guard; tests cover deterministic cadence, band bounds (45–90 s, 30–60 s at both rng extremes), 2000-run statistical median, even-kind statistics, and size bands.\n- Wiring: `GameScene.js:2562–2576` — `encounterAllowed(ship, isHomeSystem, faction, waveRunLive, playerDown)` + `live: combat.active` + `xpLevel: combat.xp.level`; `_spawnEncounter` materializes both rosters in the `_offscreenRadius` band (past camera edge, tested) with `respawn=false` one-shots.\n- Ally AI: `NeutralShip.js` approach → engage (nearest pirate, shared `firePattern` dispatch, player never a target) → escort (per-ship 10–15 s window) → break (flies off, `gone` when fully out of `visibleView`) → despawn; `active` drops when the last escort is off-screen.\n- No friendly fire: auto-fire and all target picks draw only from `this.enemies`; 'ally' bolts/seekers hit enemies only; 'enemy' bolts/seekers hit player + allies; verified by unit tests and the browser px checks.\n- Pirate targeting: `pickEnemyTarget` = player in range, else nearest in-range escort, else classic chase — pirates-only path unchanged.\n- Kills: `killEnemy` single XP grant (escort kills still bank pirate XP; ally kills bank none).\n\nThe one item not literally observed as a live browser soak (\"no encounters over several minutes in the home system\") is covered exactly as the verification contract prescribes: the gate is pure logic (`encounterAllowed`), millisecond-tested for home/faction/wave-run/downed states, and the production wiring passes the real `isHomeSystem`/`faction`/`waveRun` state. No gaps, no scaffold, no contradicted requirements found.\n\n","at":"2026-09-22T12:33:12.715Z"},"createdAt":"2026-09-22T02:03:56.868Z"}],"terminalGoals":[],"focusedGoalId":"mu9xzeqf-e5m5ej","focusGeneration":3,"focusGenByGoal":[["mu7ieab2-f24hte",2],["mu9xzeqf-e5m5ej",3]]},"recentEventsByGoal":[["mu3lln4y-51f5mi",[{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-1","at":"2026-09-16T04:26:15.002Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-1","evidence":"Audit doc at .pi/goals/combat-feedback-audit.md; baseline node dev/combat.test.mjs passes (all checks green)","at":"2026-09-16T04:33:51.611Z"},{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-2","at":"2026-09-16T04:35:30.972Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-2","evidence":"Committed 5949bac: pure handleFeel (exact integration) + combat.player tuning (thrust 2000/drag 1.8/rot 6.4/brake 0.9); WASD fixed (addKeys comma-list bug → event API); dev/combat.test.mjs 0 failures;","at":"2026-09-16T06:19:40.253Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-3","evidence":"Committed: shared js/combat/CombatSfx.js (7 distinct voices from existing sfx.json: fire=scan, impact=ui_click, shield=solar_buzz, hull=mining_split, kill=thunder×4 random, down=deconstruct, respawn=d","at":"2026-09-16T06:48:29.383Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-4","evidence":"Committed ecff203: Fx.js gains damage() (cyan=shield/orange=hull numbers), color-coded hit flashes, enhanced kill burst (delayed 2nd shockwave), down() + respawn() cues, shared FX_COLORS. Both context","at":"2026-09-16T07:07:02.597Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-5","evidence":"Commit 0d51184: CombatHud shared (lock reticle, threat cues, off-screen arrows, kill feed, gauge flash); pickTarget/feedPush/offscreenArrow in Combat.js; resyncAroundShip fixes main-game pack placemen","at":"2026-09-16T08:03:23.498Z"},{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-6","at":"2026-09-16T08:03:51.673Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-6","evidence":"combat.test.mjs 96 checks + sfx.test.mjs 21 checks = 0 failures; sfxcheck PASS both contexts (7 events); gauge-flash/lock/threat/feed verified in both; combat-shot.mjs → dev/shots/combat-range.png + c","at":"2026-09-16T08:59:41.075Z"},{"type":"completion_requested","goalId":"mu3lln4y-51f5mi","at":"2026-09-16T09:00:25.729Z"},{"type":"audit_started","goalId":"mu3lln4y-51f5mi","at":"2026-09-16T09:00:25.730Z"},{"type":"audit_result","goalId":"mu3lln4y-51f5mi","verdict":"approved","report":"The dev server (8080) and a CDP browser (9333) are live, so I can verify directly. First, let me look at the committed screenshot evidence and the README combat section.\n\nI've confirmed the screenshots show the combat HUD, reticles, and kill feed elements. Now I'll run the live CDP checks to verify SFX wiring and flight feel in the running dev environment.\n\nAll verification paths are now confirmed. Let me do a final constraint sweep before deciding.\n\n## Audit summary\n\nI verified the executor's claims against the actual repository and ran the live verification contract myself (dev server + CDP browser were available):\n\n**1. Distinct VFX + SFX per event, both contexts**\n- Code: `CombatScene.js` (range) and `CombatSystem.js` (main) both funnel every event through the shared `combatSfx`/`combatSfxEnemyHit` (7 distinct voices — scan/ui_click/solar_buzz/mining_split/thunder×4/deconstruct/discovery, all existing `data/sfx.json` files, all confirmed on disk) and the shared procedural `Fx` (muzzle flash, color-coded shield-cyan/hull-orange hit flash + damage number, kill burst with double ring, DOWN burst, REFORMED bloom — all canvas dots/additive).\n- Live: `node dev/combat.sfxcheck.mjs` → **PASS** in both `/combat` and `index.html?combat`, all seven events through the shared path (I ran it, exit 0).\n\n**2. Readability layer live in both contexts** (my own CDP probes)\n- Range: `lastFlash={kind:shield}`, kill feed entry landed, lock target acquired; gauge-flash overlay live (peak alpha 0.72, decaying).\n- Main: same, with the flash positioned exactly on the `CombatBar.gaugeRect('shield')` track (peak alpha 1.0), bar visible, feed entry, target true.\n- Committed screenshots `dev/shots/combat-range.png` / `combat-main.png` visually show: lock reticle, threat dots, kill feed \"HOSTILE DESTROYED\", damage numbers (\"10\"), kill burst, tracer, combat bar gauges.\n\n**3. Ship handling (range WASD)**\n- `node dev/combat-flycheck.mjs` → **PASS**: 337 ms to 60% maxSpeed, 133 ms to 30° turn, 7.45 rad/s sustained spin, 308 ms stop from 560 px/s.\n- Real keyboard check: actual 'W' keydown accelerated the ship 0→526 px/s; keyup released it.\n- Values live in `data/combat.json` → `combat.player`; pure `handleFeel` in `js/combat/Combat.js`; both contexts read the same file (weapon, armor, readability, bar).\n\n**4. Tests & docs**\n- `node dev/combat.test.mjs` → 96 checks, **0 failures** (exit 0); `sfx.test.mjs` 21/21.\n- `dev/combat-shot.mjs` follows the `dev/cdp-shot.mjs` CDP pattern; README combat section fully documents feel, the VFX set, the SFX map, the readability layer, and all three dev checkers + hooks.\n\n**Constraints honored**: pure rules in `Combat.js` (unit-tested), single tuning surface `data/combat.json`, shared modules across both contexts (no divergent copies), no new binary game assets (only the two evidence screenshots in the diff), hand-rolled circle collision only, skill stubs (`cast()` no-op), energy gauge (regen 0, full), and auto-fire left as-is, Phaser 4 UMD + plain ES6.\n\nEvery explicit success criterion and the verification contract are genuinely satisfied; the executor's claims match the evidence I independently reproduced.\n\n","at":"2026-09-16T09:04:06.559Z"}]],["mu4xefwj-ebnq8h",[{"type":"task_list_set","goalId":"mu4xefwj-ebnq8h","taskCount":4,"blockCompletion":false,"at":"2026-09-17T02:44:06.019Z"},{"type":"task_started","goalId":"mu4xefwj-ebnq8h","taskId":"task-1","at":"2026-09-17T02:59:45.101Z"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-1","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Bolt texture (128x32 gradient trail+core+bloom) + white core head in js/combat/Bullet.js; fx.muzzle in CombatScene/CombatSystem; boltLength/boltWidth/muzzle knobs in data/combat.json; verified in /com"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-2","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Fx.enemyHit: core flash, dir sparks along travel vector, craft white tintFill flash, cyan arc ripple (shield) vs orange shards (hull), damage-number pop; called identically in CombatScene.collide + Co"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-3","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Fx.shieldImpact: sphere outline + arc centered on bearing (travel+PI), ripple, sparks, k-scaled by damage, 520ms decay; shieldBreak implosion+shockwave; rams use same treatment with bearing; verified "},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-4","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"combatShake on hit/kill/break; live probe: main cam shakeEffect isRunning=true duration=230, fx-ui cam isRunning=false; knobs in data/combat.json fx.shake/fx.shield; node dev/combat.test.mjs = 146 che"},{"type":"completion_requested","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T04:35:11.875Z"},{"type":"audit_started","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T04:35:11.876Z"},{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"disapproved","report":"The headless browser is already up. Let me run my own live probe against both contexts to verify boot, the FX paths, and the camera-shake split.\n\nI found some console errors in the probe (a `setTintFill` deprecation and a `wallClamp` TypeError). Let me investigate both.\n\n## Audit report\n\nI verified the goal against the real artifacts, including live browser probes of both contexts (dev server + CDP). Much of the visual work is genuinely present, but the implementation contains a fatal regression in the shared FX path that breaks \"both contexts boot and play\" and silently fails one explicit success criterion.\n\n### Verified as delivered\n- **Bolts in both contexts** — `js/combat/Bullet.js` builds a 128×32 canvas bolt (fading trail band + core streak + head bloom) with an untinted white core dot riding the tip; tinted cyan (`#00e5ff`) / magenta-pink (`#ff2d6f`) from `data/combat.json` weapon colors; `boltLength/boltWidth` knobs read and applied (live probe: `boltScale [54,12]`, textures present, bolts visible in both committed screenshots).\n- **Directional muzzle flash** — `Fx.muzzle` (bore spike + bloom + cross glint, rotated to firing axis) called at every fire site in `CombatScene.firePlayer/fireEnemy` and `CombatSystem.firePlayerAt/fireEnemy`.\n- **Enemy impact read** — `Fx.enemyHit`: core flash, sparks along the travel vector, cyan arc + ring on shield hits vs orange shards + tight ring on hull, damage-number pop with scale-settle. Live-verified on the range (`arcFlash`, `ring`, 17 sparks, `tintFlash`, `text` all spawned).\n- **Shield-sphere hit from the laser's bearing** — `Fx.shieldImpact`: full-sphere outline + bright arc centered on the bearing (live check: bearing 135° → texture rotated exactly 135°), ripple, bearing-biased sparks, damage-scaled `k`, 520 ms decay; `shieldBreak` collapse cue (implosion + shockwave + shedding) fired on shield→hull break; rams route through the same bearing-based `damagePlayer`. Both contexts call the identical shared methods.\n- **Shake** — `combatShake` on hit/kill/break with `fx.shake` knobs (0.0045/0.007/0.011, 230 ms); live probe: world camera shake running, `fx-ui` camera shake inactive.\n- **Tuning surface, tests, constraints** — all knobs in `data/combat.json`; `node dev/combat.test.mjs` = 146 checks, 0 failures; no new dependencies (Phaser vendored), no build step, hand-rolled FX pattern (no emitters); depths in the 19–22 band, ships 10, HUD ≥60–120.\n\n### Blocking findings (verified live, not speculation)\n1. **`Fx.update` destroys the ships.** The expiry branch unconditionally calls `it.img.destroy()` — but `craftFlash` pushes items whose `img` is the ship itself (`kind:'tintFlash'`, 150–160 ms). Evidence:\n - Unit: real `Fx` class, `shieldImpact` + `fx.update(700ms)` → `shipDestroyedAfterShieldImpactExpire: true`.\n - Range: runtime stack captured `Ship.destroy ← Fx.update (Fx.js:599)`; after one non-lethal hit the enemy craft is gone 150 ms later with `dead:false` (no kill FX, no respawn bookkeeping — a ghost), then `CombatScene.update` throws `TypeError: Cannot read properties of undefined (reading 'velocity')` (`wallClamp`/`updatePlayer`) and the game loop dies. I reproduced this on a fresh page with no interaction beyond letting the pack fight.\n - Main game: the moment `combat.update` stepped, all 21 FX items — including the player ship's `tintFlash` — were consumed/destroyed.\n This contradicts \"both contexts boot and play\", \"no regressions\", and corrupts hit/kill/respawn bookkeeping in both contexts.\n2. **\"Visible white hit-flash on the enemy craft\" is not delivered.** In this vendored Phaser 4.2.1 build, `setTintFill` is a removed no-op that only `console.error`s (verified in `lib/phaser.min.js`: `` setTintFill:function(){console.error(...)}``). So `craftFlash` sets `setTint(0xffffff)` (invisible on an untinted sprite), the FILL mode is never applied, and the fallback bloom never triggers (nothing throws). Every hit spams a console error; the required white craft flash is absent.\n\n### Minor observations\n- Three untracked, unreferenced MP3s under `assets/fx/` (not wired into `data/sfx.json` or `CombatSfx.js`) — noise against the \"audio changes out of scope\" boundary.\n- In my main-game probes the `GameScene.update` loop was idle (tutorial comms hold), and the committed main-game screenshot shows a straight line of static bolts — the \"main game plays\" evidence is weaker than the range evidence, independent of the defects above.\n\nThe laser/impact/shield-sphere visuals are mostly real and well-built, but the shared `Fx` class killing the hit craft on flash expiry is a fatal, reproducible regression in the range (and a latent player-ship destroy in the main game), and the white hit-flash requirement is silently unmet.\n\n","at":"2026-09-17T04:42:45.235Z"},{"type":"completion_requested","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T05:01:50.034Z"},{"type":"audit_started","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T05:01:50.036Z"},{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"approved","report":"Fx.js and Bullet.js look substantial. Now the shake module and tuning surface.\n\nNow let me inspect the call sites in both contexts.\n\nThe dev server and headless browser are live. Let me check the debug seams exposed by both contexts, then run a read-only live probe.\n\nI've verified the code paths on both sides. Now I'll run a live probe of both contexts through the dev server to confirm everything's working.\n\nThe two \"FAIL\"s within the range are actually bugs in my probe (scale is 46×10 world px = elongated; -180° ≡ 180°). The main game result needs investigation — let me inspect the actual shape of `__ORBIT_COMBAT__`:\n\nAll checks are now resolved. Final audit summary:\n\n**Verified via code inspection + live CDP probes in both contexts (range `/combat` and `index.html?combat`), with zero console errors:**\n\n1. **Laser bolts (both contexts):** 128×32 canvas bolt texture (fading trail band + bright core streak + head bloom) scaled to 46×10 px player / 54×12 px enemy (elongated 4.6:1, measured), tinted halo (cyan `00e5ff` player, `#ff2d6f` enemy from weapon config), untinted white core dot riding the tip (measured offset 17.25 px ahead of center), directional muzzle flare — bore spike measured at the exact firing angle in both contexts. `fx.muzzle` + `spawnBullet(boltLength/boltWidth)` call sites are symmetric in `CombatScene.js` and `CombatSystem.js`.\n\n2. **Enemy impact reads:** hot white + colored core flash, directional sparks/shards measured within the cone along the bullet's actual travel vector, white craft hit-flash via `tintMode=1` FILL (measured `ffffff`/mode 1 during flash, restored to 0 on expiry — and the previously-flagged ship-destruction defect is fixed: enemy and player ship both survive expiry, verified live), cyan arc ripple at the exact incoming bearing (travel +180°, measured 134.2°/134.2° in range and −42.5°/−42.5° in main) vs orange bolt-textured shards + tight orange ring with **no** arc on hull hits (measured), damage-number pops (measured \"10\"/\"8\").\n\n3. **Shield-sphere strike:** faint full-sphere outline + bright arc segment (1.90 rad, span-keyed texture `__combat_shield_s1.90`) centered exactly on the laser's incoming bearing (measured 135° and 45°), radial ripple from the impact point, outward-biased spark burst, ship white flash, damage-scaled intensity, ~0.5 s decay (config `decayMs: 520`); shield→hull break shows the `ringIn` implosion + shockwave (measured); rams funnel through the same bearing-based `damagePlayer` treatment in both contexts.\n\n4. **Shake:** world camera `shakeEffect` measured running on player hit, enemy kill, and shield-break; `fx-ui` camera measured inactive in both contexts (HUD/bar on the untouched UI pass).\n\n5. **Tuning surface:** `boltLength/boltWidth/muzzle` + `fx.shake` + `fx.shield` knobs in `data/combat.json`, all read via `config.get/section`; live values match config; git diff confirms only visual knobs were added (no gameplay numbers touched).\n\n6. **No regressions:** `node dev/combat.test.mjs` → 146 checks, 0 failures, exit 0; only that suite imports the changed modules; both contexts boot and play (range fully exercised; main game ran a live 3 s auto-fire fight with the pack intact, ship alive); diff confined to `js/combat/*` + `CamShake.js` + `data/combat.json` — no new dependencies, no build step, hand-rolled FX (no emitters), depth discipline (ships 10 / FX 19–22 / HUD 100) holds.\n\nThe eight \"failures\" in my first probe round were all arithmetic/sequencing bugs in my own probe (angle wraparound, aspect-ratio math, a missing target fallback) — each was re-verified individually and passes.\n\n","at":"2026-09-17T05:08:04.224Z"}]],["mu7ieab2-f24hte",[{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T04:06:34.695Z"},{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"Scheduling paused","source":"agent","at":"2026-09-19T04:06:46.015Z"},{"type":"goal_resumed","goalId":"mu7ieab2-f24hte","reason":"user","at":"2026-09-19T04:17:54.636Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-2","evidence":"dev/ship-window.test.mjs: every configured row resolves finite from real data; fireRate=1/cd, DPS=damage/cd, accel=ship.thrust, recharge=combat.playerShield. Screenshots reviewed: nominal (HULL 100/CU","at":"2026-09-19T04:54:26.329Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-3","evidence":"dev/ship-window.test.mjs drives real XpManager: levels 0-4 → timeline, 5 & 6 → CHOOSE YOUR CLASS door, class on file → class plate (mode flips exactly at data classAt=5; maxLevel untouched). Screensho","at":"2026-09-19T05:04:37.254Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-4","at":"2026-09-19T05:04:55.422Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-4","evidence":"Screenshots reviewed at 1920x1080: empty hold (\"HOLD EMPTY — EVERY BAY IS CLEAN\", EMPTY tiles, +12 LOCKED pips, 0% / NO ORE ABOARD) and loaded (icons+names, MANIFEST tags, \"4/6 BAYS · 2 FREE\", +10 LOC","at":"2026-09-19T05:21:51.901Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-5","at":"2026-09-19T05:22:27.127Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-5","evidence":"Selecting a filled bay opens BAY MANIFEST (js/ui/ShipWindow.js _paintManifest): goods icon frame, name, CLASS/TIER/BASE VALUE chips (labels from data), flavor, MADE IN origin|hub pool + producer class","at":"2026-09-19T06:10:11.478Z"},{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T14:55:34.986Z"},{"type":"goal_focused","goalId":"mu7ieab2-f24hte","reason":"selected","at":"2026-09-19T15:32:31.167Z"},{"type":"goal_focused","goalId":"mu7ieab2-f24hte","reason":"selected","at":"2026-09-19T15:38:35.941Z"}]],["mu986lbo-140zqa",[{"type":"goal_created","goalId":"mu986lbo-140zqa","objective":"=== Goal ===\nObjective: Give the 7 new enemy ships (spritesheet frames 1–7) distinct stats and attack patterns using a mix of weapon types (heat-seeking missiles, spray, plus new ideas), ramping modestly in difficulty frame 1 → 7, and rewire the ?combat demo to send a sequence of rolling waves — one wave per ship type in difficulty order, 6 ships of that type per wave, 3 on screen at a time.\n\nSuccess criteria:\n- data/combat.json → enemyTypes has 7 new types (frames 1–7), each with distinct stats + a distinct weapon pattern; difficulty (hull/shields/damage) climbs monotonically frame 1 → 7 with only modest bumps (not a wall).\n- Weapon types actually implemented and used: heat-seeking missile (dodgeable — capped turn-rate), spray fan, rapid burst, rapid-fire, ring burst, and a heavy/elite combo. The missile is the only genuinely new projectile; the rest are loops/config over the existing bolt.\n- All 7 fire their pattern correctly in BOTH the main-game ?combat boot and the standalone range (shared firing path).\n- The ?combat boot now dispatches a sequence of rolling waves: 7 waves in difficulty order, each wave = 6 ships of that single type, maxConcurrent=3, each kill sending in a replacement (replacePerKill=1).\n- dev/combat.test.mjs still passes (pure Node modules: EnemyTypes/Waves stay Phaser-free).\n\nBoundaries:\n- In scope: data/combat.json (enemyTypes + a new wave script + ?combat wiring), js/combat (new weapon behaviors: EnemyShip firing, a missile projectile, fireEnemy dispatch in both CombatScene and CombatSystem), dev/combat.test.mjs.\n- Out of scope: new art/sprites, player-ship changes, the XP curve, and the existing pirate_ambush quest wave (stays as-is). The pre-existing frame-0 raider stays untouched.\n- New weapons must not break the standalone range (combat.html / dev server /combat) — it shares the firing path.\n\nConstraints (hard rules):\n- Heat-seeking missiles MUST be dodgeable: capped turn-rate + moderate speed, so the player can out-turn them.\n- Each subsequent ship only a LITTLE harder than the previous (modest +hull/+shields/+damage), not a big jump.\n- Keep EnemyTypes.js and Waves.js pure (no Phaser/scene imports) so dev/combat.test.mjs runs in bare Node.\n- ?combat demo: exactly 7 waves, one type each, in difficulty order; rolling; 6 per wave; 3 concurrent; 1 replacement per kill.\n- Don't mutate shared config sections in place (deepMerge already guards this; follow the pattern).\n\nVerification contract:\n- Run dev/combat.test.mjs → 0 failures.\n- grep confirms the new wave script is wired to the ?combat boot (spawnPack replaced) and all 7 frames are referenced in enemyTypes.\n- Manual browser check of ?combat: 7 waves fire in order, 3 on screen at a time, one type per wave; missiles visibly home and can be dodged; spray/burst/ring render correctly.\n- Re-read the 7-ship roster table and confirm each type's pattern + difficulty bump is present.\n\nIf blocked: stop and ask the user.","sisyphus":false,"autoContinue":true,"at":"2026-09-20T02:57:00.276Z"},{"type":"task_list_set","goalId":"mu986lbo-140zqa","taskCount":4,"blockCompletion":true,"at":"2026-09-20T02:57:00.276Z"},{"type":"task_started","goalId":"mu986lbo-140zqa","taskId":"task-1","at":"2026-09-20T02:57:57.911Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-1","evidence":"Node check: 7 types (frames 1–7) resolve; hull 80→150, xp 18→42 monotonic; 7 distinct patterns; combat_demo normalizes to 7 rolling waves (6/3/1 each)","at":"2026-09-20T03:05:24.313Z"},{"type":"task_started","goalId":"mu986lbo-140zqa","taskId":"task-2","at":"2026-09-20T03:05:24.314Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-2","evidence":"Missile.js (capped turn homing, Node-tested) + Weapons.js firePattern dispatch all 7 patterns; both contexts wired (CombatScene/CombatSystem.fireEnemy → firePattern); Node suite green importing EnemyT","at":"2026-09-20T04:21:17.494Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-3","evidence":"GameScene:1050 startWaves('combat_demo') (spawnPack no longer the boot path); combat_demo = 7 rolling waves bomber→warden, 6/3/1 each; Node e2e run passes; browser sfxcheck found live wave ship after ","at":"2026-09-20T04:21:17.495Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-4","evidence":"node dev/combat.test.mjs: all checks passed (0 failures). CDP demo check PASS: range renders all 7 patterns w/ shape; main 7 waves in order, 3 on screen, replacement/kill, 42 kills done. sfxcheck PASS","at":"2026-09-20T05:03:03.769Z"},{"type":"completion_requested","goalId":"mu986lbo-140zqa","at":"2026-09-20T05:03:52.556Z"},{"type":"audit_started","goalId":"mu986lbo-140zqa","at":"2026-09-20T05:03:52.557Z"},{"type":"audit_result","goalId":"mu986lbo-140zqa","verdict":"approved","report":"The config file looks complete. Now let me inspect the combat modules and tests.\n\nThe CDP endpoint and dev server are both live. Let me run the browser verification harnesses myself to confirm the claims.\n\nBoth independent browser harnesses pass. Let me verify the change scope didn't touch out-of-scope files and confirm the remaining details.\n\nAll success criteria verified against real artifacts, with independent re-runs of the verification contract:\n\n**1. Seven new types (frames 1–7), distinct stats + patterns, monotonic modest ramp** — `data/combat.json → enemyTypes`: bomber(f1, 80/10, dmg 10, lance), spitter(f2, 90/20, 11, spray 5 bolts/1.1 rad), stinger(f3, 100/25, 12, burst 3 staggered-speed), hunter(f4, 110/30, 13, heat-seeking missile), gunner(f5, 120/40, 14, rapid cd 0.5), barrage(f6, 135/50, 15, ring 8), warden(f7, 150/60, 18+20, combo). Hull 80→90→100→110→120→135→150, shields 10→20→25→30→40→50→60, damage 10→11→12→13→14→15→18 — strictly monotonic, bumps ≤ +15 (no wall). Raider (frame 0) and `pirate_ambunch` untouched (diff confirms only comments/enemyTypes/combat_demo changed).\n\n**2. Weapons implemented on a shared path, missile genuinely new** — `js/combat/Weapons.js` `firePattern` dispatches all 7 patterns; `js/combat/Missile.js` is the only new projectile (canvas art + sprite), rest are bolt loops/config. `homingStep` (capped turn) lives in pure `js/combat/Combat.js`. Missile caps: turn 2.2/2.4 rad/s vs player rotSpeed 6.4 rad/s, speed 170/190 px/s vs player maxSpeed 560 — dodgeable, and the cap is asserted in tests. Both `CombatScene.fireEnemy` and `CombatSystem.fireEnemy` now delegate to `firePattern` (old inline single-bolt code removed), and both run `stepMissiles`/`missilesHitPlayer`.\n\n**3. ?combat rewired** — `GameScene:1050` `this.combat.startWaves('combat_demo')`; `spawnPack` demoted to a practice pack (no longer the boot). `combat_demo` = exactly 7 rolling waves, one single type each in difficulty order, each `count: 6, maxConcurrent: 3, replacePerKill: 1`.\n\n**4. Tests — I ran them** — `node dev/combat.test.mjs` → \"combat rules: all checks passed\" (0 failures), including pure-geometry, all-7 pattern dispatch, missile homing/fuse/consume, and a full 7-wave CombatSystem end-to-end (42 kills, 3-on-screen cap, replacement-per-kill, 7 starts/7 clears). `EnemyTypes.js`/`Waves.js` import only `config/Config.js` (no Phaser).\n\n**5. Browser verification — I re-ran both CDP harnesses** (headless Chromium on :9333, dev server :8080): `dev/combat-demo-check.mjs` → \"seven ships: PASS\" (range: all 7 volleys with correct shape incl. 5-bolt fan, 8-bolt even ring, staggered burst, homing missile; main: 7 waves in order, 3 on screen, replacement per kill, done at 42 kills) and `dev/combat.sfxcheck.mjs` → PASS (range 9/9, main 10/10 events incl. `missile_fire`). The range (`/combat`) shares the firing path and renders all 7 patterns — not broken.\n\nDiff scope is confined to the in-scope files (combat.json, js/combat/*, GameScene, dev tests); no out-of-scope files (XP curve, ship.json, sidequests) touched by this goal's changes.\n\n","at":"2026-09-20T05:06:03.693Z"}]],["mu9xzeqf-e5m5ej",[{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","at":"2026-09-20T17:43:58.266Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","at":"2026-09-20T20:09:24.838Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","evidence":"GameScene: onKill hands the enemy to handleCombatKill (elite-only witness → haltWaves + bountyDown); _establishBountyHunt rolls plan→route (buildPatrolRoute opts {waypoints:[legs,legs], fork:'bounty'}","at":"2026-09-20T20:27:38.322Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-6","at":"2026-09-20T20:28:26.199Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-6","evidence":"JobBoardWindow.js: _rowState 'locked'; greyed row + LOCKED — REQUIRES LEVEL {level} badge (fillLevel); dossier block (WANTED/epithet/CHARGES/CRAFT) via ui.dossier* with dynamic body-line cap; hunt rou","at":"2026-09-20T22:01:54.072Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-7","at":"2026-09-20T22:14:18.633Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"user","status":"paused","at":"2026-09-21T01:39:37.876Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:40:58.104Z"},{"type":"task_list_set","goalId":"mu9xzeqf-e5m5ej","taskCount":7,"blockCompletion":true,"at":"2026-09-21T01:46:12.634Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:50:36.637Z"},{"type":"task_list_set","goalId":"mu9xzeqf-e5m5ej","taskCount":7,"blockCompletion":true,"at":"2026-09-21T01:52:04.548Z"},{"type":"goal_focused","goalId":"mu9xzeqf-e5m5ej","reason":"selected","at":"2026-09-21T02:06:44.440Z"}]],["muc162bo-njvm8l",[{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-2","evidence":"dev/neutral.test.mjs 33/33 pass: roster (allies roster, side 'player', frames 20–27), escort window from data (escortMin/Max 10–15 s), escort (no fire at player), break-off fly-off, despawn off-screen","at":"2026-09-22T03:12:28.543Z"},{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-3","evidence":"dev/neutral.test.mjs pirate-targeting block: player preferred in weapon range, nearest in-range escort draws aggro when player out of range, classic chase unchanged with no escort in reach, pirate lan","at":"2026-09-22T03:12:28.547Z"},{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-4","evidence":"js/combat/Encounters.js (pure director) + encounters section in data/combat.json + GameScene wiring (spawn off-screen, one-shot pirates); dev/encounters.test.mjs 48/48 (cadence exact-timing, one-at-a-","at":"2026-09-22T03:43:19.226Z"},{"type":"task_started","goalId":"muc162bo-njvm8l","taskId":"task-5","at":"2026-09-22T05:56:38.431Z"},{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-5","evidence":"encounter-hud-check.mjs PASS exit=0 (×2): threat markers off→0/on→2 pirates px-lit/restore→0; arrows px-verified at both pirates' edges, escorts never; kill feed live text @1262 alpha .95 + ink px abo","at":"2026-09-22T07:16:46.268Z"},{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-6","evidence":"run-all.mjs ALL 66 TESTS PASSED (incl. encounters/neutral/roster new tests); combat-demo-check PASS (sandbox+combat_demo intact); encounter-hud-check 7 consecutive passes (mixed arrows/threat/feed+esc","at":"2026-09-22T10:28:11.553Z"},{"type":"completion_requested","goalId":"muc162bo-njvm8l","at":"2026-09-22T10:28:57.943Z"},{"type":"audit_started","goalId":"muc162bo-njvm8l","at":"2026-09-22T10:28:57.950Z"},{"type":"audit_result","goalId":"muc162bo-njvm8l","verdict":"disapproved","report":"Now let me verify the test suite runs green:\n\nBoth browser regression checks pass. Now verifying the remaining wiring details: `isHomeSystem`, `playerDown`, wave-run gating, and the spritesheet frames.\n\nFrames 20–27 show eight distinct crafts. Let me verify the remaining seams (auto-fire pool, off-screen spawn radius, visibleView, regression test diffs).\n\nThe core artifacts have been verified. Next, I'll investigate the live production wiring (the director gating against actual GameScene state: home vs. neutral vs. wave execution) on a disposable page, without touching the repository files.\n\nI've found a significant discrepancy and need to verify it statistically before concluding. Let me measure the actual roll cadence the production director would produce in-game:\n\nI've completed my inspection. Here's my audit:\n\n**Verified solid (real artifacts, re-run by me):**\n- `data/combat.json`: `neutral` base + `neutralTypes` = 8 distinct crafts on frames 20–27 (I cropped the actual spritesheet — 8 visibly distinct ships), unique patterns (lance/rapid/spray/burst/ring/missile/combo/volley), monotonic hull 60→150 / shields 0→60 / xp 12→42 ramp; `encounters` section ships the required cadence/weights/bands.\n- Roster registry (`EnemyTypes.js` `neutralTypeConfig`/`neutralTypeIds`/`neutralSheetList`) + merge: tests confirm 8 distinct patterns, frames 20–27, player-side.\n- Ally AI (`NeutralShip.js`) approach/escort/engage/break machine, 10–15 s per-ship windows, break-off off-screen despawn; player-safety seams (never targets player, excluded from auto-fire pool — `currentTarget()` picks from `enemies` only, `ally` bolts/seekers skip the player, player bolts only hit `enemies`).\n- Pirate generalization: `pickEnemyTarget` (player preferred in range, else nearest in-range escort, classic chase preserved); pirate bolts/missiles damage escorts; escort kills still bank pirate XP via `killEnemy`.\n- Director gating: home/faction/wave-run/player-down all gated (ambush is a `waveRun`, covered).\n- Browser checks I re-ran: `encounter-hud-check.mjs` PASS (arrows hostiles-only px-verified, threat data-respecting, mixed fight flow, feed, escort lifecycle, neutrals-only zero damage, ambush 3→3→3→2→1→0 done) and `combat-demo-check.mjs` PASS (sandbox + combat_demo). `node dev/run-all.mjs` = ALL 66 PASSED, including the new `encounters`/`neutral` tests.\n\n**Critical defect found (core success criterion broken in the real game):**\n\nIn `js/combat/Encounters.js`, `_intervalMs()` and `_cooldownMs()` double-scale to milliseconds:\n\n```js\nconst min = Math.max(0, Number(this.cfg.rollIntervalMin) || 45) * 1000; // 45000 ms ✔\nconst max = Math.max(min, Number(this.cfg.rollIntervalMax) || 90) * 1000; // Math.max(45000, 90) * 1000 = 45,000,000 ms ✘\n```\n\n`min` is already in ms, so `max` becomes min×1000: the roll interval is actually **45 s … 12.5 h** (not ~45–90 s) and the cooldown **30 s … 8.3 h** (not ~30–60 s). I instrumented `Math.min/max` inside the module to confirm the values reaching `rand`, and ran 5,000 production-rng trials with the shipped config: first-encounter time p10 ≈ 2.0 h, **median ≈ 8.9 h**, p90 ≈ 17.9 h. My independent browser wiring probe on the real GameScene director likewise never fired within 60 s.\n\nThe dev suite is green only because the deterministic cadence tests inject `rng: () => 0`, which always lands on the band's lower bound — the corrupted upper bound is never sampled. So \"encounters trigger periodically (~45–90 s rolls, ~30–60 s cooldown)\" and manual checklist item 2 (encounters appearing at a non-constant but reasonable pace over a session) are **not genuinely satisfied** in the shipped build, even though every test and check passes.\n\nThis is the heart of the feature; a player in a neutral system would wait hours per encounter. Disapproving on that basis.\n\n","at":"2026-09-22T10:38:58.650Z"},{"type":"completion_requested","goalId":"muc162bo-njvm8l","at":"2026-09-22T12:25:09.642Z"},{"type":"audit_started","goalId":"muc162bo-njvm8l","at":"2026-09-22T12:25:09.650Z"},{"type":"audit_result","goalId":"muc162bo-njvm8l","verdict":"approved","report":"Tests pass and the data file looks rich. Now let me inspect the actual code implementing these claims.\n\nNow I'll independently run the browser verification harnesses (dev server + headless Chromium via CDP) to confirm the executor's claims.\n\nAll evidence checks pass. Cleaning up the background processes I started:\n\nI've completed a full independent audit. Summary of what I verified against real artifacts (not the claim):\n\n**Tests (ran myself):**\n- `node dev/run-all.mjs` → ALL 66 TESTS PASSED, exit 0 — includes `encounters.test.mjs`, `neutral.test.mjs`, and the neutral-roster block in `combat.test.mjs` (all re-run individually: PASS).\n- `dev/combat-demo-check.mjs` (headless CDP, real browser) → **PASS** independently re-run: 7-pattern range, `?combat` boot, all 7 combat_demo waves.\n- `dev/encounter-hud-check.mjs` → **PASS** independently re-run: mixed encounter (arrows at both pirates' edges px-verified, never at neutrals; threat layer respects data; ally fire + pirate fire; kill feed live; survivors escort → break off → `active` false), neutrals-only (zero arrows/markers, escorts fly near player, never fire, 0 player damage, leave), and the Pirate Problems ambush (drain 3→3→3→2→1→0, state done).\n\n**Data-driven tunables (data/combat.json):** `encounters` section (45–90 s interval, 0.5–0.6 chance, 30–60 s cooldown, weights 1:1:1, bands 0–2→1–2 / 3–5→2–3 / 6+→4–5 with mixed 2–3 pirates + 1–2 neutrals at high end); `neutral` base + `neutralTypes` with 8 crafts on frames 20–27 (sheet is 1280×1280 = 10×10 frames — confirmed), 8 distinct patterns (incl. new `volley` in Weapons.js), monotonic hull/shields ramp, xp = (hull+shields)/5, escort 10–15 s.\n\n**Code seams (read and traced):**\n- Director: `Encounters.js` pure clock (interval/chance/cooldown/one-at-a-time/allowed-gate) + the ms-scaling regression guard; tests cover deterministic cadence, band bounds (45–90 s, 30–60 s at both rng extremes), 2000-run statistical median, even-kind statistics, and size bands.\n- Wiring: `GameScene.js:2562–2576` — `encounterAllowed(ship, isHomeSystem, faction, waveRunLive, playerDown)` + `live: combat.active` + `xpLevel: combat.xp.level`; `_spawnEncounter` materializes both rosters in the `_offscreenRadius` band (past camera edge, tested) with `respawn=false` one-shots.\n- Ally AI: `NeutralShip.js` approach → engage (nearest pirate, shared `firePattern` dispatch, player never a target) → escort (per-ship 10–15 s window) → break (flies off, `gone` when fully out of `visibleView`) → despawn; `active` drops when the last escort is off-screen.\n- No friendly fire: auto-fire and all target picks draw only from `this.enemies`; 'ally' bolts/seekers hit enemies only; 'enemy' bolts/seekers hit player + allies; verified by unit tests and the browser px checks.\n- Pirate targeting: `pickEnemyTarget` = player in range, else nearest in-range escort, else classic chase — pirates-only path unchanged.\n- Kills: `killEnemy` single XP grant (escort kills still bank pirate XP; ally kills bank none).\n\nThe one item not literally observed as a live browser soak (\"no encounters over several minutes in the home system\") is covered exactly as the verification contract prescribes: the gate is pure logic (`encounterAllowed`), millisecond-tested for home/faction/wave-run/downed states, and the production wiring passes the real `isHomeSystem`/`faction`/`waveRun` state. No gaps, no scaffold, no contradicted requirements found.\n\n","at":"2026-09-22T12:33:12.715Z"}]]],"runtimeIndex":[["mu3lln4y-51f5mi",{"recent":[{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-1","at":"2026-09-16T04:26:15.002Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-1","evidence":"Audit doc at .pi/goals/combat-feedback-audit.md; baseline node dev/combat.test.mjs passes (all checks green)","at":"2026-09-16T04:33:51.611Z"},{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-2","at":"2026-09-16T04:35:30.972Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-2","evidence":"Committed 5949bac: pure handleFeel (exact integration) + combat.player tuning (thrust 2000/drag 1.8/rot 6.4/brake 0.9); WASD fixed (addKeys comma-list bug → event API); dev/combat.test.mjs 0 failures;","at":"2026-09-16T06:19:40.253Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-3","evidence":"Committed: shared js/combat/CombatSfx.js (7 distinct voices from existing sfx.json: fire=scan, impact=ui_click, shield=solar_buzz, hull=mining_split, kill=thunder×4 random, down=deconstruct, respawn=d","at":"2026-09-16T06:48:29.383Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-4","evidence":"Committed ecff203: Fx.js gains damage() (cyan=shield/orange=hull numbers), color-coded hit flashes, enhanced kill burst (delayed 2nd shockwave), down() + respawn() cues, shared FX_COLORS. Both context","at":"2026-09-16T07:07:02.597Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-5","evidence":"Commit 0d51184: CombatHud shared (lock reticle, threat cues, off-screen arrows, kill feed, gauge flash); pickTarget/feedPush/offscreenArrow in Combat.js; resyncAroundShip fixes main-game pack placemen","at":"2026-09-16T08:03:23.498Z"},{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-6","at":"2026-09-16T08:03:51.673Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-6","evidence":"combat.test.mjs 96 checks + sfx.test.mjs 21 checks = 0 failures; sfxcheck PASS both contexts (7 events); gauge-flash/lock/threat/feed verified in both; combat-shot.mjs → dev/shots/combat-range.png + c","at":"2026-09-16T08:59:41.075Z"},{"type":"completion_requested","goalId":"mu3lln4y-51f5mi","at":"2026-09-16T09:00:25.729Z"},{"type":"audit_started","goalId":"mu3lln4y-51f5mi","at":"2026-09-16T09:00:25.730Z"},{"type":"audit_result","goalId":"mu3lln4y-51f5mi","verdict":"approved","report":"The dev server (8080) and a CDP browser (9333) are live, so I can verify directly. First, let me look at the committed screenshot evidence and the README combat section.\n\nI've confirmed the screenshots show the combat HUD, reticles, and kill feed elements. Now I'll run the live CDP checks to verify SFX wiring and flight feel in the running dev environment.\n\nAll verification paths are now confirmed. Let me do a final constraint sweep before deciding.\n\n## Audit summary\n\nI verified the executor's claims against the actual repository and ran the live verification contract myself (dev server + CDP browser were available):\n\n**1. Distinct VFX + SFX per event, both contexts**\n- Code: `CombatScene.js` (range) and `CombatSystem.js` (main) both funnel every event through the shared `combatSfx`/`combatSfxEnemyHit` (7 distinct voices — scan/ui_click/solar_buzz/mining_split/thunder×4/deconstruct/discovery, all existing `data/sfx.json` files, all confirmed on disk) and the shared procedural `Fx` (muzzle flash, color-coded shield-cyan/hull-orange hit flash + damage number, kill burst with double ring, DOWN burst, REFORMED bloom — all canvas dots/additive).\n- Live: `node dev/combat.sfxcheck.mjs` → **PASS** in both `/combat` and `index.html?combat`, all seven events through the shared path (I ran it, exit 0).\n\n**2. Readability layer live in both contexts** (my own CDP probes)\n- Range: `lastFlash={kind:shield}`, kill feed entry landed, lock target acquired; gauge-flash overlay live (peak alpha 0.72, decaying).\n- Main: same, with the flash positioned exactly on the `CombatBar.gaugeRect('shield')` track (peak alpha 1.0), bar visible, feed entry, target true.\n- Committed screenshots `dev/shots/combat-range.png` / `combat-main.png` visually show: lock reticle, threat dots, kill feed \"HOSTILE DESTROYED\", damage numbers (\"10\"), kill burst, tracer, combat bar gauges.\n\n**3. Ship handling (range WASD)**\n- `node dev/combat-flycheck.mjs` → **PASS**: 337 ms to 60% maxSpeed, 133 ms to 30° turn, 7.45 rad/s sustained spin, 308 ms stop from 560 px/s.\n- Real keyboard check: actual 'W' keydown accelerated the ship 0→526 px/s; keyup released it.\n- Values live in `data/combat.json` → `combat.player`; pure `handleFeel` in `js/combat/Combat.js`; both contexts read the same file (weapon, armor, readability, bar).\n\n**4. Tests & docs**\n- `node dev/combat.test.mjs` → 96 checks, **0 failures** (exit 0); `sfx.test.mjs` 21/21.\n- `dev/combat-shot.mjs` follows the `dev/cdp-shot.mjs` CDP pattern; README combat section fully documents feel, the VFX set, the SFX map, the readability layer, and all three dev checkers + hooks.\n\n**Constraints honored**: pure rules in `Combat.js` (unit-tested), single tuning surface `data/combat.json`, shared modules across both contexts (no divergent copies), no new binary game assets (only the two evidence screenshots in the diff), hand-rolled circle collision only, skill stubs (`cast()` no-op), energy gauge (regen 0, full), and auto-fire left as-is, Phaser 4 UMD + plain ES6.\n\nEvery explicit success criterion and the verification contract are genuinely satisfied; the executor's claims match the evidence I independently reproduced.\n\n","at":"2026-09-16T09:04:06.559Z"}],"activity":[{"type":"goal_created","goalId":"mu3lln4y-51f5mi","objective":"=== Goal ===\nObjective: Make Orbit's combat both feel and read — sharper ship handling plus clear hit/kill/death feedback (VFX + SFX) and a readability layer (target indicator, damage numbers, kill feed, bar hit-flash), kept in sync across the training range (/combat) and the main-game combat (index.html?combat).\n\nSuccess criteria (observable):\n- In BOTH contexts, each of: firing, bullet impact, shield hit, hull hit, enemy kill, player-down, and player-respawn produces a distinct VFX and a distinct SFX.\n- Readability layer is live in both contexts: damage numbers on every hit (enemy and player), a target/lock indicator on the current target, threat cues for hostiles, a kill feed, and a visible hit-flash on the combat bar's shields/hull gauges.\n- Ship handling feels noticeably better in the range (WASD) — responsive thrust/rotation/brake, all values living in data/combat.json and shared with the main game.\n- node dev/combat.test.mjs passes with 0 failures; CDP screenshots (dev/cdp-shot.mjs pattern) show the new feedback in both /combat and index.html?combat; the README combat section documents the new feedback set and dev hooks.\n\nBoundaries:\n- IN SCOPE: js/combat/* (Combat.js, CombatSystem.js, CombatScene.js, Fx.js, EnemyShip.js, Bullet.js), js/ui/CombatBar.js, data/combat.json, SFX wiring, both combat contexts.\n- OUT OF SCOPE: real skill implementations (the 1–8 seats stay as stubs on the system's cast() stub), new enemy types/AI/behavior variety, waves/difficulty/escalation, permanent death or economy flows, non-combat game systems (map, jump gates, economy), new sprite art.\n\nConstraints:\n- Phaser 4 UMD + plain ES6 modules, no build step; hand-rolled circle collision checks only (no arcade colliders), per the existing combat architecture.\n- No new binary assets: VFX must be procedural (canvas dot textures / additive glows, Fx.js style); SFX must go through the existing data/sfx.json + playSfx() infrastructure using existing sound files only.\n- Pure rules stay in js/combat/Combat.js (pure, unit-tested); ALL tuning numbers live in data/combat.json; the range and the main game must share the same rules and numbers (no divergent copies).\n- Skill seats 1–8, the energy gauge, and the auto-fire model are left as-is (stub/placeholder behavior unchanged).\n\nVerification contract:\n1) node dev/combat.test.mjs → 0 failures. 2) CDP-driven visual checks of BOTH /combat and index.html?combat (dev/cdp-shot.mjs pattern) capturing: damage numbers, target indicator, kill feed, bar hit-flash, kill burst, player-down/respawn cues. 3) Manual flow checklist passed in both contexts: fire → muzzle flash + shot SFX; enemy hit → impact flash + damage number; shield/hull hit → bar flash + appropriate SFX; enemy kill → burst + kill-feed entry + explosion SFX; player down → down cue + respawn cue. 4) Re-read this goal's success criteria and confirm each is addressed before marking complete.\n\nIf blocked: stop and ask the user (default blocker rule).","sisyphus":false,"autoContinue":true,"at":"2026-09-16T04:26:00.418Z"},{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-1","at":"2026-09-16T04:26:15.002Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-1","evidence":"Audit doc at .pi/goals/combat-feedback-audit.md; baseline node dev/combat.test.mjs passes (all checks green)","at":"2026-09-16T04:33:51.611Z"},{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-2","at":"2026-09-16T04:35:30.972Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-2","evidence":"Committed 5949bac: pure handleFeel (exact integration) + combat.player tuning (thrust 2000/drag 1.8/rot 6.4/brake 0.9); WASD fixed (addKeys comma-list bug → event API); dev/combat.test.mjs 0 failures;","at":"2026-09-16T06:19:40.253Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-3","evidence":"Committed: shared js/combat/CombatSfx.js (7 distinct voices from existing sfx.json: fire=scan, impact=ui_click, shield=solar_buzz, hull=mining_split, kill=thunder×4 random, down=deconstruct, respawn=d","at":"2026-09-16T06:48:29.383Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-4","evidence":"Committed ecff203: Fx.js gains damage() (cyan=shield/orange=hull numbers), color-coded hit flashes, enhanced kill burst (delayed 2nd shockwave), down() + respawn() cues, shared FX_COLORS. Both context","at":"2026-09-16T07:07:02.597Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-5","evidence":"Commit 0d51184: CombatHud shared (lock reticle, threat cues, off-screen arrows, kill feed, gauge flash); pickTarget/feedPush/offscreenArrow in Combat.js; resyncAroundShip fixes main-game pack placemen","at":"2026-09-16T08:03:23.498Z"},{"type":"task_started","goalId":"mu3lln4y-51f5mi","taskId":"task-6","at":"2026-09-16T08:03:51.673Z"},{"type":"task_complete","goalId":"mu3lln4y-51f5mi","taskId":"task-6","evidence":"combat.test.mjs 96 checks + sfx.test.mjs 21 checks = 0 failures; sfxcheck PASS both contexts (7 events); gauge-flash/lock/threat/feed verified in both; combat-shot.mjs → dev/shots/combat-range.png + c","at":"2026-09-16T08:59:41.075Z"},{"type":"completion_requested","goalId":"mu3lln4y-51f5mi","at":"2026-09-16T09:00:25.729Z"},{"type":"audit_started","goalId":"mu3lln4y-51f5mi","at":"2026-09-16T09:00:25.730Z"},{"type":"audit_result","goalId":"mu3lln4y-51f5mi","verdict":"approved","report":"The dev server (8080) and a CDP browser (9333) are live, so I can verify directly. First, let me look at the committed screenshot evidence and the README combat section.\n\nI've confirmed the screenshots show the combat HUD, reticles, and kill feed elements. Now I'll run the live CDP checks to verify SFX wiring and flight feel in the running dev environment.\n\nAll verification paths are now confirmed. Let me do a final constraint sweep before deciding.\n\n## Audit summary\n\nI verified the executor's claims against the actual repository and ran the live verification contract myself (dev server + CDP browser were available):\n\n**1. Distinct VFX + SFX per event, both contexts**\n- Code: `CombatScene.js` (range) and `CombatSystem.js` (main) both funnel every event through the shared `combatSfx`/`combatSfxEnemyHit` (7 distinct voices — scan/ui_click/solar_buzz/mining_split/thunder×4/deconstruct/discovery, all existing `data/sfx.json` files, all confirmed on disk) and the shared procedural `Fx` (muzzle flash, color-coded shield-cyan/hull-orange hit flash + damage number, kill burst with double ring, DOWN burst, REFORMED bloom — all canvas dots/additive).\n- Live: `node dev/combat.sfxcheck.mjs` → **PASS** in both `/combat` and `index.html?combat`, all seven events through the shared path (I ran it, exit 0).\n\n**2. Readability layer live in both contexts** (my own CDP probes)\n- Range: `lastFlash={kind:shield}`, kill feed entry landed, lock target acquired; gauge-flash overlay live (peak alpha 0.72, decaying).\n- Main: same, with the flash positioned exactly on the `CombatBar.gaugeRect('shield')` track (peak alpha 1.0), bar visible, feed entry, target true.\n- Committed screenshots `dev/shots/combat-range.png` / `combat-main.png` visually show: lock reticle, threat dots, kill feed \"HOSTILE DESTROYED\", damage numbers (\"10\"), kill burst, tracer, combat bar gauges.\n\n**3. Ship handling (range WASD)**\n- `node dev/combat-flycheck.mjs` → **PASS**: 337 ms to 60% maxSpeed, 133 ms to 30° turn, 7.45 rad/s sustained spin, 308 ms stop from 560 px/s.\n- Real keyboard check: actual 'W' keydown accelerated the ship 0→526 px/s; keyup released it.\n- Values live in `data/combat.json` → `combat.player`; pure `handleFeel` in `js/combat/Combat.js`; both contexts read the same file (weapon, armor, readability, bar).\n\n**4. Tests & docs**\n- `node dev/combat.test.mjs` → 96 checks, **0 failures** (exit 0); `sfx.test.mjs` 21/21.\n- `dev/combat-shot.mjs` follows the `dev/cdp-shot.mjs` CDP pattern; README combat section fully documents feel, the VFX set, the SFX map, the readability layer, and all three dev checkers + hooks.\n\n**Constraints honored**: pure rules in `Combat.js` (unit-tested), single tuning surface `data/combat.json`, shared modules across both contexts (no divergent copies), no new binary game assets (only the two evidence screenshots in the diff), hand-rolled circle collision only, skill stubs (`cast()` no-op), energy gauge (regen 0, full), and auto-fire left as-is, Phaser 4 UMD + plain ES6.\n\nEvery explicit success criterion and the verification contract are genuinely satisfied; the executor's claims match the evidence I independently reproduced.\n\n","at":"2026-09-16T09:04:06.559Z"}],"oracle":[],"lifecycle":{"type":"goal_created","goalId":"mu3lln4y-51f5mi","objective":"=== Goal ===\nObjective: Make Orbit's combat both feel and read — sharper ship handling plus clear hit/kill/death feedback (VFX + SFX) and a readability layer (target indicator, damage numbers, kill feed, bar hit-flash), kept in sync across the training range (/combat) and the main-game combat (index.html?combat).\n\nSuccess criteria (observable):\n- In BOTH contexts, each of: firing, bullet impact, shield hit, hull hit, enemy kill, player-down, and player-respawn produces a distinct VFX and a distinct SFX.\n- Readability layer is live in both contexts: damage numbers on every hit (enemy and player), a target/lock indicator on the current target, threat cues for hostiles, a kill feed, and a visible hit-flash on the combat bar's shields/hull gauges.\n- Ship handling feels noticeably better in the range (WASD) — responsive thrust/rotation/brake, all values living in data/combat.json and shared with the main game.\n- node dev/combat.test.mjs passes with 0 failures; CDP screenshots (dev/cdp-shot.mjs pattern) show the new feedback in both /combat and index.html?combat; the README combat section documents the new feedback set and dev hooks.\n\nBoundaries:\n- IN SCOPE: js/combat/* (Combat.js, CombatSystem.js, CombatScene.js, Fx.js, EnemyShip.js, Bullet.js), js/ui/CombatBar.js, data/combat.json, SFX wiring, both combat contexts.\n- OUT OF SCOPE: real skill implementations (the 1–8 seats stay as stubs on the system's cast() stub), new enemy types/AI/behavior variety, waves/difficulty/escalation, permanent death or economy flows, non-combat game systems (map, jump gates, economy), new sprite art.\n\nConstraints:\n- Phaser 4 UMD + plain ES6 modules, no build step; hand-rolled circle collision checks only (no arcade colliders), per the existing combat architecture.\n- No new binary assets: VFX must be procedural (canvas dot textures / additive glows, Fx.js style); SFX must go through the existing data/sfx.json + playSfx() infrastructure using existing sound files only.\n- Pure rules stay in js/combat/Combat.js (pure, unit-tested); ALL tuning numbers live in data/combat.json; the range and the main game must share the same rules and numbers (no divergent copies).\n- Skill seats 1–8, the energy gauge, and the auto-fire model are left as-is (stub/placeholder behavior unchanged).\n\nVerification contract:\n1) node dev/combat.test.mjs → 0 failures. 2) CDP-driven visual checks of BOTH /combat and index.html?combat (dev/cdp-shot.mjs pattern) capturing: damage numbers, target indicator, kill feed, bar hit-flash, kill burst, player-down/respawn cues. 3) Manual flow checklist passed in both contexts: fire → muzzle flash + shot SFX; enemy hit → impact flash + damage number; shield/hull hit → bar flash + appropriate SFX; enemy kill → burst + kill-feed entry + explosion SFX; player down → down cue + respawn cue. 4) Re-read this goal's success criteria and confirm each is addressed before marking complete.\n\nIf blocked: stop and ask the user (default blocker rule).","sisyphus":false,"autoContinue":true,"at":"2026-09-16T04:26:00.418Z"},"lastActivityEvent":{"type":"audit_result","goalId":"mu3lln4y-51f5mi","verdict":"approved","report":"The dev server (8080) and a CDP browser (9333) are live, so I can verify directly. First, let me look at the committed screenshot evidence and the README combat section.\n\nI've confirmed the screenshots show the combat HUD, reticles, and kill feed elements. Now I'll run the live CDP checks to verify SFX wiring and flight feel in the running dev environment.\n\nAll verification paths are now confirmed. Let me do a final constraint sweep before deciding.\n\n## Audit summary\n\nI verified the executor's claims against the actual repository and ran the live verification contract myself (dev server + CDP browser were available):\n\n**1. Distinct VFX + SFX per event, both contexts**\n- Code: `CombatScene.js` (range) and `CombatSystem.js` (main) both funnel every event through the shared `combatSfx`/`combatSfxEnemyHit` (7 distinct voices — scan/ui_click/solar_buzz/mining_split/thunder×4/deconstruct/discovery, all existing `data/sfx.json` files, all confirmed on disk) and the shared procedural `Fx` (muzzle flash, color-coded shield-cyan/hull-orange hit flash + damage number, kill burst with double ring, DOWN burst, REFORMED bloom — all canvas dots/additive).\n- Live: `node dev/combat.sfxcheck.mjs` → **PASS** in both `/combat` and `index.html?combat`, all seven events through the shared path (I ran it, exit 0).\n\n**2. Readability layer live in both contexts** (my own CDP probes)\n- Range: `lastFlash={kind:shield}`, kill feed entry landed, lock target acquired; gauge-flash overlay live (peak alpha 0.72, decaying).\n- Main: same, with the flash positioned exactly on the `CombatBar.gaugeRect('shield')` track (peak alpha 1.0), bar visible, feed entry, target true.\n- Committed screenshots `dev/shots/combat-range.png` / `combat-main.png` visually show: lock reticle, threat dots, kill feed \"HOSTILE DESTROYED\", damage numbers (\"10\"), kill burst, tracer, combat bar gauges.\n\n**3. Ship handling (range WASD)**\n- `node dev/combat-flycheck.mjs` → **PASS**: 337 ms to 60% maxSpeed, 133 ms to 30° turn, 7.45 rad/s sustained spin, 308 ms stop from 560 px/s.\n- Real keyboard check: actual 'W' keydown accelerated the ship 0→526 px/s; keyup released it.\n- Values live in `data/combat.json` → `combat.player`; pure `handleFeel` in `js/combat/Combat.js`; both contexts read the same file (weapon, armor, readability, bar).\n\n**4. Tests & docs**\n- `node dev/combat.test.mjs` → 96 checks, **0 failures** (exit 0); `sfx.test.mjs` 21/21.\n- `dev/combat-shot.mjs` follows the `dev/cdp-shot.mjs` CDP pattern; README combat section fully documents feel, the VFX set, the SFX map, the readability layer, and all three dev checkers + hooks.\n\n**Constraints honored**: pure rules in `Combat.js` (unit-tested), single tuning surface `data/combat.json`, shared modules across both contexts (no divergent copies), no new binary game assets (only the two evidence screenshots in the diff), hand-rolled circle collision only, skill stubs (`cast()` no-op), energy gauge (regen 0, full), and auto-fire left as-is, Phaser 4 UMD + plain ES6.\n\nEvery explicit success criterion and the verification contract are genuinely satisfied; the executor's claims match the evidence I independently reproduced.\n\n","at":"2026-09-16T09:04:06.559Z"},"completion":{"type":"completion_requested","goalId":"mu3lln4y-51f5mi","at":"2026-09-16T09:00:25.729Z"},"audit":{"type":"audit_result","goalId":"mu3lln4y-51f5mi","verdict":"approved","report":"The dev server (8080) and a CDP browser (9333) are live, so I can verify directly. First, let me look at the committed screenshot evidence and the README combat section.\n\nI've confirmed the screenshots show the combat HUD, reticles, and kill feed elements. Now I'll run the live CDP checks to verify SFX wiring and flight feel in the running dev environment.\n\nAll verification paths are now confirmed. Let me do a final constraint sweep before deciding.\n\n## Audit summary\n\nI verified the executor's claims against the actual repository and ran the live verification contract myself (dev server + CDP browser were available):\n\n**1. Distinct VFX + SFX per event, both contexts**\n- Code: `CombatScene.js` (range) and `CombatSystem.js` (main) both funnel every event through the shared `combatSfx`/`combatSfxEnemyHit` (7 distinct voices — scan/ui_click/solar_buzz/mining_split/thunder×4/deconstruct/discovery, all existing `data/sfx.json` files, all confirmed on disk) and the shared procedural `Fx` (muzzle flash, color-coded shield-cyan/hull-orange hit flash + damage number, kill burst with double ring, DOWN burst, REFORMED bloom — all canvas dots/additive).\n- Live: `node dev/combat.sfxcheck.mjs` → **PASS** in both `/combat` and `index.html?combat`, all seven events through the shared path (I ran it, exit 0).\n\n**2. Readability layer live in both contexts** (my own CDP probes)\n- Range: `lastFlash={kind:shield}`, kill feed entry landed, lock target acquired; gauge-flash overlay live (peak alpha 0.72, decaying).\n- Main: same, with the flash positioned exactly on the `CombatBar.gaugeRect('shield')` track (peak alpha 1.0), bar visible, feed entry, target true.\n- Committed screenshots `dev/shots/combat-range.png` / `combat-main.png` visually show: lock reticle, threat dots, kill feed \"HOSTILE DESTROYED\", damage numbers (\"10\"), kill burst, tracer, combat bar gauges.\n\n**3. Ship handling (range WASD)**\n- `node dev/combat-flycheck.mjs` → **PASS**: 337 ms to 60% maxSpeed, 133 ms to 30° turn, 7.45 rad/s sustained spin, 308 ms stop from 560 px/s.\n- Real keyboard check: actual 'W' keydown accelerated the ship 0→526 px/s; keyup released it.\n- Values live in `data/combat.json` → `combat.player`; pure `handleFeel` in `js/combat/Combat.js`; both contexts read the same file (weapon, armor, readability, bar).\n\n**4. Tests & docs**\n- `node dev/combat.test.mjs` → 96 checks, **0 failures** (exit 0); `sfx.test.mjs` 21/21.\n- `dev/combat-shot.mjs` follows the `dev/cdp-shot.mjs` CDP pattern; README combat section fully documents feel, the VFX set, the SFX map, the readability layer, and all three dev checkers + hooks.\n\n**Constraints honored**: pure rules in `Combat.js` (unit-tested), single tuning surface `data/combat.json`, shared modules across both contexts (no divergent copies), no new binary game assets (only the two evidence screenshots in the diff), hand-rolled circle collision only, skill stubs (`cast()` no-op), energy gauge (regen 0, full), and auto-fire left as-is, Phaser 4 UMD + plain ES6.\n\nEvery explicit success criterion and the verification contract are genuinely satisfied; the executor's claims match the evidence I independently reproduced.\n\n","at":"2026-09-16T09:04:06.559Z"}}],["mu4xefwj-ebnq8h",{"recent":[{"type":"task_list_set","goalId":"mu4xefwj-ebnq8h","taskCount":4,"blockCompletion":false,"at":"2026-09-17T02:44:06.019Z"},{"type":"task_started","goalId":"mu4xefwj-ebnq8h","taskId":"task-1","at":"2026-09-17T02:59:45.101Z"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-1","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Bolt texture (128x32 gradient trail+core+bloom) + white core head in js/combat/Bullet.js; fx.muzzle in CombatScene/CombatSystem; boltLength/boltWidth/muzzle knobs in data/combat.json; verified in /com"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-2","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Fx.enemyHit: core flash, dir sparks along travel vector, craft white tintFill flash, cyan arc ripple (shield) vs orange shards (hull), damage-number pop; called identically in CombatScene.collide + Co"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-3","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Fx.shieldImpact: sphere outline + arc centered on bearing (travel+PI), ripple, sparks, k-scaled by damage, 520ms decay; shieldBreak implosion+shockwave; rams use same treatment with bearing; verified "},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-4","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"combatShake on hit/kill/break; live probe: main cam shakeEffect isRunning=true duration=230, fx-ui cam isRunning=false; knobs in data/combat.json fx.shake/fx.shield; node dev/combat.test.mjs = 146 che"},{"type":"completion_requested","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T04:35:11.875Z"},{"type":"audit_started","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T04:35:11.876Z"},{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"disapproved","report":"The headless browser is already up. Let me run my own live probe against both contexts to verify boot, the FX paths, and the camera-shake split.\n\nI found some console errors in the probe (a `setTintFill` deprecation and a `wallClamp` TypeError). Let me investigate both.\n\n## Audit report\n\nI verified the goal against the real artifacts, including live browser probes of both contexts (dev server + CDP). Much of the visual work is genuinely present, but the implementation contains a fatal regression in the shared FX path that breaks \"both contexts boot and play\" and silently fails one explicit success criterion.\n\n### Verified as delivered\n- **Bolts in both contexts** — `js/combat/Bullet.js` builds a 128×32 canvas bolt (fading trail band + core streak + head bloom) with an untinted white core dot riding the tip; tinted cyan (`#00e5ff`) / magenta-pink (`#ff2d6f`) from `data/combat.json` weapon colors; `boltLength/boltWidth` knobs read and applied (live probe: `boltScale [54,12]`, textures present, bolts visible in both committed screenshots).\n- **Directional muzzle flash** — `Fx.muzzle` (bore spike + bloom + cross glint, rotated to firing axis) called at every fire site in `CombatScene.firePlayer/fireEnemy` and `CombatSystem.firePlayerAt/fireEnemy`.\n- **Enemy impact read** — `Fx.enemyHit`: core flash, sparks along the travel vector, cyan arc + ring on shield hits vs orange shards + tight ring on hull, damage-number pop with scale-settle. Live-verified on the range (`arcFlash`, `ring`, 17 sparks, `tintFlash`, `text` all spawned).\n- **Shield-sphere hit from the laser's bearing** — `Fx.shieldImpact`: full-sphere outline + bright arc centered on the bearing (live check: bearing 135° → texture rotated exactly 135°), ripple, bearing-biased sparks, damage-scaled `k`, 520 ms decay; `shieldBreak` collapse cue (implosion + shockwave + shedding) fired on shield→hull break; rams route through the same bearing-based `damagePlayer`. Both contexts call the identical shared methods.\n- **Shake** — `combatShake` on hit/kill/break with `fx.shake` knobs (0.0045/0.007/0.011, 230 ms); live probe: world camera shake running, `fx-ui` camera shake inactive.\n- **Tuning surface, tests, constraints** — all knobs in `data/combat.json`; `node dev/combat.test.mjs` = 146 checks, 0 failures; no new dependencies (Phaser vendored), no build step, hand-rolled FX pattern (no emitters); depths in the 19–22 band, ships 10, HUD ≥60–120.\n\n### Blocking findings (verified live, not speculation)\n1. **`Fx.update` destroys the ships.** The expiry branch unconditionally calls `it.img.destroy()` — but `craftFlash` pushes items whose `img` is the ship itself (`kind:'tintFlash'`, 150–160 ms). Evidence:\n - Unit: real `Fx` class, `shieldImpact` + `fx.update(700ms)` → `shipDestroyedAfterShieldImpactExpire: true`.\n - Range: runtime stack captured `Ship.destroy ← Fx.update (Fx.js:599)`; after one non-lethal hit the enemy craft is gone 150 ms later with `dead:false` (no kill FX, no respawn bookkeeping — a ghost), then `CombatScene.update` throws `TypeError: Cannot read properties of undefined (reading 'velocity')` (`wallClamp`/`updatePlayer`) and the game loop dies. I reproduced this on a fresh page with no interaction beyond letting the pack fight.\n - Main game: the moment `combat.update` stepped, all 21 FX items — including the player ship's `tintFlash` — were consumed/destroyed.\n This contradicts \"both contexts boot and play\", \"no regressions\", and corrupts hit/kill/respawn bookkeeping in both contexts.\n2. **\"Visible white hit-flash on the enemy craft\" is not delivered.** In this vendored Phaser 4.2.1 build, `setTintFill` is a removed no-op that only `console.error`s (verified in `lib/phaser.min.js`: `` setTintFill:function(){console.error(...)}``). So `craftFlash` sets `setTint(0xffffff)` (invisible on an untinted sprite), the FILL mode is never applied, and the fallback bloom never triggers (nothing throws). Every hit spams a console error; the required white craft flash is absent.\n\n### Minor observations\n- Three untracked, unreferenced MP3s under `assets/fx/` (not wired into `data/sfx.json` or `CombatSfx.js`) — noise against the \"audio changes out of scope\" boundary.\n- In my main-game probes the `GameScene.update` loop was idle (tutorial comms hold), and the committed main-game screenshot shows a straight line of static bolts — the \"main game plays\" evidence is weaker than the range evidence, independent of the defects above.\n\nThe laser/impact/shield-sphere visuals are mostly real and well-built, but the shared `Fx` class killing the hit craft on flash expiry is a fatal, reproducible regression in the range (and a latent player-ship destroy in the main game), and the white hit-flash requirement is silently unmet.\n\n","at":"2026-09-17T04:42:45.235Z"},{"type":"completion_requested","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T05:01:50.034Z"},{"type":"audit_started","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T05:01:50.036Z"},{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"approved","report":"Fx.js and Bullet.js look substantial. Now the shake module and tuning surface.\n\nNow let me inspect the call sites in both contexts.\n\nThe dev server and headless browser are live. Let me check the debug seams exposed by both contexts, then run a read-only live probe.\n\nI've verified the code paths on both sides. Now I'll run a live probe of both contexts through the dev server to confirm everything's working.\n\nThe two \"FAIL\"s within the range are actually bugs in my probe (scale is 46×10 world px = elongated; -180° ≡ 180°). The main game result needs investigation — let me inspect the actual shape of `__ORBIT_COMBAT__`:\n\nAll checks are now resolved. Final audit summary:\n\n**Verified via code inspection + live CDP probes in both contexts (range `/combat` and `index.html?combat`), with zero console errors:**\n\n1. **Laser bolts (both contexts):** 128×32 canvas bolt texture (fading trail band + bright core streak + head bloom) scaled to 46×10 px player / 54×12 px enemy (elongated 4.6:1, measured), tinted halo (cyan `00e5ff` player, `#ff2d6f` enemy from weapon config), untinted white core dot riding the tip (measured offset 17.25 px ahead of center), directional muzzle flare — bore spike measured at the exact firing angle in both contexts. `fx.muzzle` + `spawnBullet(boltLength/boltWidth)` call sites are symmetric in `CombatScene.js` and `CombatSystem.js`.\n\n2. **Enemy impact reads:** hot white + colored core flash, directional sparks/shards measured within the cone along the bullet's actual travel vector, white craft hit-flash via `tintMode=1` FILL (measured `ffffff`/mode 1 during flash, restored to 0 on expiry — and the previously-flagged ship-destruction defect is fixed: enemy and player ship both survive expiry, verified live), cyan arc ripple at the exact incoming bearing (travel +180°, measured 134.2°/134.2° in range and −42.5°/−42.5° in main) vs orange bolt-textured shards + tight orange ring with **no** arc on hull hits (measured), damage-number pops (measured \"10\"/\"8\").\n\n3. **Shield-sphere strike:** faint full-sphere outline + bright arc segment (1.90 rad, span-keyed texture `__combat_shield_s1.90`) centered exactly on the laser's incoming bearing (measured 135° and 45°), radial ripple from the impact point, outward-biased spark burst, ship white flash, damage-scaled intensity, ~0.5 s decay (config `decayMs: 520`); shield→hull break shows the `ringIn` implosion + shockwave (measured); rams funnel through the same bearing-based `damagePlayer` treatment in both contexts.\n\n4. **Shake:** world camera `shakeEffect` measured running on player hit, enemy kill, and shield-break; `fx-ui` camera measured inactive in both contexts (HUD/bar on the untouched UI pass).\n\n5. **Tuning surface:** `boltLength/boltWidth/muzzle` + `fx.shake` + `fx.shield` knobs in `data/combat.json`, all read via `config.get/section`; live values match config; git diff confirms only visual knobs were added (no gameplay numbers touched).\n\n6. **No regressions:** `node dev/combat.test.mjs` → 146 checks, 0 failures, exit 0; only that suite imports the changed modules; both contexts boot and play (range fully exercised; main game ran a live 3 s auto-fire fight with the pack intact, ship alive); diff confined to `js/combat/*` + `CamShake.js` + `data/combat.json` — no new dependencies, no build step, hand-rolled FX (no emitters), depth discipline (ships 10 / FX 19–22 / HUD 100) holds.\n\nThe eight \"failures\" in my first probe round were all arithmetic/sequencing bugs in my own probe (angle wraparound, aspect-ratio math, a missing target fallback) — each was re-verified individually and passes.\n\n","at":"2026-09-17T05:08:04.224Z"}],"activity":[{"type":"goal_created","goalId":"mu4xefwj-ebnq8h","objective":"=== Goal ===\nObjective: A visual overhaul of combat FX in Orbit — visually impressive laser bolts from both the player and enemies, a strong impact read when enemies are hit, and a shield-sphere hit effect that shows the player's shield struck from the laser's incoming bearing with the hit region highlighted — delivered consistently in both combat contexts (the /combat range and the main game's ?combat boot).\n\nSuccess criteria:\n- Player and enemy shots render as elongated glowing bolts: hot-white core, colored halo (cyan player / magenta enemy), a fading motion trail along the flight axis, and a directional muzzle flash on fire — in BOTH the range (js/combat/CombatScene.js) and the main game (js/combat/CombatSystem.js).\n- Enemy hits show impact: a hot core flash at the point of impact, directional sparks along the bullet's travel vector, a visible white hit-flash on the enemy craft, a cyan arc ripple on shield hits vs orange sparks/debris on hull hits, and a polished damage-number pop.\n- Player shield hits read as a sphere being struck: a brief full-sphere outline flash, a bright arc segment centered on the laser's incoming bearing (the highlighted hit region), a radial ripple from the impact point, and a spark burst — intensity scaled with damage, decaying over ~0.5s. A shield→hull break shows a distinct shield-collapse cue. Rams (ship collisions) get the same impact treatment.\n- Subtle world-camera shake on player hits, enemy kills, and shield-break — the separate fx-ui camera keeps the HUD/combat bar perfectly still.\n- New visual parameters (bolt size/trail, muzzle, arc span, shake intensity, etc.) are tunable in data/combat.json, consistent with the project's single-tuning-surface convention.\n- No regressions: dev/combat.test.mjs passes with 0 failures; both contexts boot and play; no new dependencies, no build step.\n\nBoundaries:\n- In scope: js/combat/Bullet.js, js/combat/Fx.js, the FX call sites in js/combat/CombatScene.js and js/combat/CombatSystem.js (firing, collisions, damage, kills), camera shake wiring, and tuning knobs in data/combat.json.\n- Out of scope: gameplay numbers (damage, cooldowns, speeds, hull/shield values), enemy AI, new weapons or skills, audio changes (existing SFX events stay as-is), HUD/combat-bar redesign, and non-combat main-game visuals.\n\nConstraints:\n- Plain ES6 modules, no build step, no new dependencies (Phaser 4.2.1 stays vendored).\n- No particle emitters — this build's emitter velocity semantics are fiddly (documented in js/combat/Fx.js); follow the existing hand-rolled pattern: canvas-generated textures + additive-blended images stepped in update().\n- Keep the FX cheap enough for 60fps with 3+ enemies and auto-fire (small per-hit item counts, shared textures, depth discipline: ships 10, FX 19–22, HUD 100).\n- Implement in the SHARED code (Fx.js / Bullet.js) so the range and the main game stay identical; both contexts' FX call sites must be updated together.\n- Camera shake on the world camera only (the fx-ui UI camera must remain unshaken).\n\nVerification contract:\n- Run `node dev/combat.test.mjs` → 0 failures.\n- Manual pass in the range (/combat via the dev server) AND the main game (index.html?combat): player cannon fires elongated bolt + trail + directional muzzle flash; enemy hits show the impact event with distinct shield (cyan ripple) vs hull (orange debris) reads; an enemy lance landing on the player shows the sphere struck — arc highlight centered on the laser's bearing + ripple + sparks, with a shield-collapse cue when shields break; kills show the burst + subtle shake; HUD stays still throughout.\n- Re-read this goal's requirements (lasers, enemy impact, shield sphere hit from the laser's angle, hit-region highlight, shake) and confirm every item is addressed in both contexts before marking complete.\n\nIf blocked: stop and ask the user.","sisyphus":false,"autoContinue":true,"at":"2026-09-17T02:44:06.019Z"},{"type":"task_started","goalId":"mu4xefwj-ebnq8h","taskId":"task-1","at":"2026-09-17T02:59:45.101Z"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-1","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Bolt texture (128x32 gradient trail+core+bloom) + white core head in js/combat/Bullet.js; fx.muzzle in CombatScene/CombatSystem; boltLength/boltWidth/muzzle knobs in data/combat.json; verified in /com"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-2","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Fx.enemyHit: core flash, dir sparks along travel vector, craft white tintFill flash, cyan arc ripple (shield) vs orange shards (hull), damage-number pop; called identically in CombatScene.collide + Co"},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-3","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"Fx.shieldImpact: sphere outline + arc centered on bearing (travel+PI), ripple, sparks, k-scaled by damage, 520ms decay; shieldBreak implosion+shockwave; rams use same treatment with bearing; verified "},{"goalId":"mu4xefwj-ebnq8h","taskId":"task-4","at":"2026-09-17T04:34:16.884Z","type":"task_complete","evidence":"combatShake on hit/kill/break; live probe: main cam shakeEffect isRunning=true duration=230, fx-ui cam isRunning=false; knobs in data/combat.json fx.shake/fx.shield; node dev/combat.test.mjs = 146 che"},{"type":"completion_requested","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T04:35:11.875Z"},{"type":"audit_started","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T04:35:11.876Z"},{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"disapproved","report":"The headless browser is already up. Let me run my own live probe against both contexts to verify boot, the FX paths, and the camera-shake split.\n\nI found some console errors in the probe (a `setTintFill` deprecation and a `wallClamp` TypeError). Let me investigate both.\n\n## Audit report\n\nI verified the goal against the real artifacts, including live browser probes of both contexts (dev server + CDP). Much of the visual work is genuinely present, but the implementation contains a fatal regression in the shared FX path that breaks \"both contexts boot and play\" and silently fails one explicit success criterion.\n\n### Verified as delivered\n- **Bolts in both contexts** — `js/combat/Bullet.js` builds a 128×32 canvas bolt (fading trail band + core streak + head bloom) with an untinted white core dot riding the tip; tinted cyan (`#00e5ff`) / magenta-pink (`#ff2d6f`) from `data/combat.json` weapon colors; `boltLength/boltWidth` knobs read and applied (live probe: `boltScale [54,12]`, textures present, bolts visible in both committed screenshots).\n- **Directional muzzle flash** — `Fx.muzzle` (bore spike + bloom + cross glint, rotated to firing axis) called at every fire site in `CombatScene.firePlayer/fireEnemy` and `CombatSystem.firePlayerAt/fireEnemy`.\n- **Enemy impact read** — `Fx.enemyHit`: core flash, sparks along the travel vector, cyan arc + ring on shield hits vs orange shards + tight ring on hull, damage-number pop with scale-settle. Live-verified on the range (`arcFlash`, `ring`, 17 sparks, `tintFlash`, `text` all spawned).\n- **Shield-sphere hit from the laser's bearing** — `Fx.shieldImpact`: full-sphere outline + bright arc centered on the bearing (live check: bearing 135° → texture rotated exactly 135°), ripple, bearing-biased sparks, damage-scaled `k`, 520 ms decay; `shieldBreak` collapse cue (implosion + shockwave + shedding) fired on shield→hull break; rams route through the same bearing-based `damagePlayer`. Both contexts call the identical shared methods.\n- **Shake** — `combatShake` on hit/kill/break with `fx.shake` knobs (0.0045/0.007/0.011, 230 ms); live probe: world camera shake running, `fx-ui` camera shake inactive.\n- **Tuning surface, tests, constraints** — all knobs in `data/combat.json`; `node dev/combat.test.mjs` = 146 checks, 0 failures; no new dependencies (Phaser vendored), no build step, hand-rolled FX pattern (no emitters); depths in the 19–22 band, ships 10, HUD ≥60–120.\n\n### Blocking findings (verified live, not speculation)\n1. **`Fx.update` destroys the ships.** The expiry branch unconditionally calls `it.img.destroy()` — but `craftFlash` pushes items whose `img` is the ship itself (`kind:'tintFlash'`, 150–160 ms). Evidence:\n - Unit: real `Fx` class, `shieldImpact` + `fx.update(700ms)` → `shipDestroyedAfterShieldImpactExpire: true`.\n - Range: runtime stack captured `Ship.destroy ← Fx.update (Fx.js:599)`; after one non-lethal hit the enemy craft is gone 150 ms later with `dead:false` (no kill FX, no respawn bookkeeping — a ghost), then `CombatScene.update` throws `TypeError: Cannot read properties of undefined (reading 'velocity')` (`wallClamp`/`updatePlayer`) and the game loop dies. I reproduced this on a fresh page with no interaction beyond letting the pack fight.\n - Main game: the moment `combat.update` stepped, all 21 FX items — including the player ship's `tintFlash` — were consumed/destroyed.\n This contradicts \"both contexts boot and play\", \"no regressions\", and corrupts hit/kill/respawn bookkeeping in both contexts.\n2. **\"Visible white hit-flash on the enemy craft\" is not delivered.** In this vendored Phaser 4.2.1 build, `setTintFill` is a removed no-op that only `console.error`s (verified in `lib/phaser.min.js`: `` setTintFill:function(){console.error(...)}``). So `craftFlash` sets `setTint(0xffffff)` (invisible on an untinted sprite), the FILL mode is never applied, and the fallback bloom never triggers (nothing throws). Every hit spams a console error; the required white craft flash is absent.\n\n### Minor observations\n- Three untracked, unreferenced MP3s under `assets/fx/` (not wired into `data/sfx.json` or `CombatSfx.js`) — noise against the \"audio changes out of scope\" boundary.\n- In my main-game probes the `GameScene.update` loop was idle (tutorial comms hold), and the committed main-game screenshot shows a straight line of static bolts — the \"main game plays\" evidence is weaker than the range evidence, independent of the defects above.\n\nThe laser/impact/shield-sphere visuals are mostly real and well-built, but the shared `Fx` class killing the hit craft on flash expiry is a fatal, reproducible regression in the range (and a latent player-ship destroy in the main game), and the white hit-flash requirement is silently unmet.\n\n","at":"2026-09-17T04:42:45.235Z"},{"type":"completion_requested","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T05:01:50.034Z"},{"type":"audit_started","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T05:01:50.036Z"},{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"approved","report":"Fx.js and Bullet.js look substantial. Now the shake module and tuning surface.\n\nNow let me inspect the call sites in both contexts.\n\nThe dev server and headless browser are live. Let me check the debug seams exposed by both contexts, then run a read-only live probe.\n\nI've verified the code paths on both sides. Now I'll run a live probe of both contexts through the dev server to confirm everything's working.\n\nThe two \"FAIL\"s within the range are actually bugs in my probe (scale is 46×10 world px = elongated; -180° ≡ 180°). The main game result needs investigation — let me inspect the actual shape of `__ORBIT_COMBAT__`:\n\nAll checks are now resolved. Final audit summary:\n\n**Verified via code inspection + live CDP probes in both contexts (range `/combat` and `index.html?combat`), with zero console errors:**\n\n1. **Laser bolts (both contexts):** 128×32 canvas bolt texture (fading trail band + bright core streak + head bloom) scaled to 46×10 px player / 54×12 px enemy (elongated 4.6:1, measured), tinted halo (cyan `00e5ff` player, `#ff2d6f` enemy from weapon config), untinted white core dot riding the tip (measured offset 17.25 px ahead of center), directional muzzle flare — bore spike measured at the exact firing angle in both contexts. `fx.muzzle` + `spawnBullet(boltLength/boltWidth)` call sites are symmetric in `CombatScene.js` and `CombatSystem.js`.\n\n2. **Enemy impact reads:** hot white + colored core flash, directional sparks/shards measured within the cone along the bullet's actual travel vector, white craft hit-flash via `tintMode=1` FILL (measured `ffffff`/mode 1 during flash, restored to 0 on expiry — and the previously-flagged ship-destruction defect is fixed: enemy and player ship both survive expiry, verified live), cyan arc ripple at the exact incoming bearing (travel +180°, measured 134.2°/134.2° in range and −42.5°/−42.5° in main) vs orange bolt-textured shards + tight orange ring with **no** arc on hull hits (measured), damage-number pops (measured \"10\"/\"8\").\n\n3. **Shield-sphere strike:** faint full-sphere outline + bright arc segment (1.90 rad, span-keyed texture `__combat_shield_s1.90`) centered exactly on the laser's incoming bearing (measured 135° and 45°), radial ripple from the impact point, outward-biased spark burst, ship white flash, damage-scaled intensity, ~0.5 s decay (config `decayMs: 520`); shield→hull break shows the `ringIn` implosion + shockwave (measured); rams funnel through the same bearing-based `damagePlayer` treatment in both contexts.\n\n4. **Shake:** world camera `shakeEffect` measured running on player hit, enemy kill, and shield-break; `fx-ui` camera measured inactive in both contexts (HUD/bar on the untouched UI pass).\n\n5. **Tuning surface:** `boltLength/boltWidth/muzzle` + `fx.shake` + `fx.shield` knobs in `data/combat.json`, all read via `config.get/section`; live values match config; git diff confirms only visual knobs were added (no gameplay numbers touched).\n\n6. **No regressions:** `node dev/combat.test.mjs` → 146 checks, 0 failures, exit 0; only that suite imports the changed modules; both contexts boot and play (range fully exercised; main game ran a live 3 s auto-fire fight with the pack intact, ship alive); diff confined to `js/combat/*` + `CamShake.js` + `data/combat.json` — no new dependencies, no build step, hand-rolled FX (no emitters), depth discipline (ships 10 / FX 19–22 / HUD 100) holds.\n\nThe eight \"failures\" in my first probe round were all arithmetic/sequencing bugs in my own probe (angle wraparound, aspect-ratio math, a missing target fallback) — each was re-verified individually and passes.\n\n","at":"2026-09-17T05:08:04.224Z"}],"oracle":[],"lifecycle":{"type":"goal_created","goalId":"mu4xefwj-ebnq8h","objective":"=== Goal ===\nObjective: A visual overhaul of combat FX in Orbit — visually impressive laser bolts from both the player and enemies, a strong impact read when enemies are hit, and a shield-sphere hit effect that shows the player's shield struck from the laser's incoming bearing with the hit region highlighted — delivered consistently in both combat contexts (the /combat range and the main game's ?combat boot).\n\nSuccess criteria:\n- Player and enemy shots render as elongated glowing bolts: hot-white core, colored halo (cyan player / magenta enemy), a fading motion trail along the flight axis, and a directional muzzle flash on fire — in BOTH the range (js/combat/CombatScene.js) and the main game (js/combat/CombatSystem.js).\n- Enemy hits show impact: a hot core flash at the point of impact, directional sparks along the bullet's travel vector, a visible white hit-flash on the enemy craft, a cyan arc ripple on shield hits vs orange sparks/debris on hull hits, and a polished damage-number pop.\n- Player shield hits read as a sphere being struck: a brief full-sphere outline flash, a bright arc segment centered on the laser's incoming bearing (the highlighted hit region), a radial ripple from the impact point, and a spark burst — intensity scaled with damage, decaying over ~0.5s. A shield→hull break shows a distinct shield-collapse cue. Rams (ship collisions) get the same impact treatment.\n- Subtle world-camera shake on player hits, enemy kills, and shield-break — the separate fx-ui camera keeps the HUD/combat bar perfectly still.\n- New visual parameters (bolt size/trail, muzzle, arc span, shake intensity, etc.) are tunable in data/combat.json, consistent with the project's single-tuning-surface convention.\n- No regressions: dev/combat.test.mjs passes with 0 failures; both contexts boot and play; no new dependencies, no build step.\n\nBoundaries:\n- In scope: js/combat/Bullet.js, js/combat/Fx.js, the FX call sites in js/combat/CombatScene.js and js/combat/CombatSystem.js (firing, collisions, damage, kills), camera shake wiring, and tuning knobs in data/combat.json.\n- Out of scope: gameplay numbers (damage, cooldowns, speeds, hull/shield values), enemy AI, new weapons or skills, audio changes (existing SFX events stay as-is), HUD/combat-bar redesign, and non-combat main-game visuals.\n\nConstraints:\n- Plain ES6 modules, no build step, no new dependencies (Phaser 4.2.1 stays vendored).\n- No particle emitters — this build's emitter velocity semantics are fiddly (documented in js/combat/Fx.js); follow the existing hand-rolled pattern: canvas-generated textures + additive-blended images stepped in update().\n- Keep the FX cheap enough for 60fps with 3+ enemies and auto-fire (small per-hit item counts, shared textures, depth discipline: ships 10, FX 19–22, HUD 100).\n- Implement in the SHARED code (Fx.js / Bullet.js) so the range and the main game stay identical; both contexts' FX call sites must be updated together.\n- Camera shake on the world camera only (the fx-ui UI camera must remain unshaken).\n\nVerification contract:\n- Run `node dev/combat.test.mjs` → 0 failures.\n- Manual pass in the range (/combat via the dev server) AND the main game (index.html?combat): player cannon fires elongated bolt + trail + directional muzzle flash; enemy hits show the impact event with distinct shield (cyan ripple) vs hull (orange debris) reads; an enemy lance landing on the player shows the sphere struck — arc highlight centered on the laser's bearing + ripple + sparks, with a shield-collapse cue when shields break; kills show the burst + subtle shake; HUD stays still throughout.\n- Re-read this goal's requirements (lasers, enemy impact, shield sphere hit from the laser's angle, hit-region highlight, shake) and confirm every item is addressed in both contexts before marking complete.\n\nIf blocked: stop and ask the user.","sisyphus":false,"autoContinue":true,"at":"2026-09-17T02:44:06.019Z"},"lastActivityEvent":{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"approved","report":"Fx.js and Bullet.js look substantial. Now the shake module and tuning surface.\n\nNow let me inspect the call sites in both contexts.\n\nThe dev server and headless browser are live. Let me check the debug seams exposed by both contexts, then run a read-only live probe.\n\nI've verified the code paths on both sides. Now I'll run a live probe of both contexts through the dev server to confirm everything's working.\n\nThe two \"FAIL\"s within the range are actually bugs in my probe (scale is 46×10 world px = elongated; -180° ≡ 180°). The main game result needs investigation — let me inspect the actual shape of `__ORBIT_COMBAT__`:\n\nAll checks are now resolved. Final audit summary:\n\n**Verified via code inspection + live CDP probes in both contexts (range `/combat` and `index.html?combat`), with zero console errors:**\n\n1. **Laser bolts (both contexts):** 128×32 canvas bolt texture (fading trail band + bright core streak + head bloom) scaled to 46×10 px player / 54×12 px enemy (elongated 4.6:1, measured), tinted halo (cyan `00e5ff` player, `#ff2d6f` enemy from weapon config), untinted white core dot riding the tip (measured offset 17.25 px ahead of center), directional muzzle flare — bore spike measured at the exact firing angle in both contexts. `fx.muzzle` + `spawnBullet(boltLength/boltWidth)` call sites are symmetric in `CombatScene.js` and `CombatSystem.js`.\n\n2. **Enemy impact reads:** hot white + colored core flash, directional sparks/shards measured within the cone along the bullet's actual travel vector, white craft hit-flash via `tintMode=1` FILL (measured `ffffff`/mode 1 during flash, restored to 0 on expiry — and the previously-flagged ship-destruction defect is fixed: enemy and player ship both survive expiry, verified live), cyan arc ripple at the exact incoming bearing (travel +180°, measured 134.2°/134.2° in range and −42.5°/−42.5° in main) vs orange bolt-textured shards + tight orange ring with **no** arc on hull hits (measured), damage-number pops (measured \"10\"/\"8\").\n\n3. **Shield-sphere strike:** faint full-sphere outline + bright arc segment (1.90 rad, span-keyed texture `__combat_shield_s1.90`) centered exactly on the laser's incoming bearing (measured 135° and 45°), radial ripple from the impact point, outward-biased spark burst, ship white flash, damage-scaled intensity, ~0.5 s decay (config `decayMs: 520`); shield→hull break shows the `ringIn` implosion + shockwave (measured); rams funnel through the same bearing-based `damagePlayer` treatment in both contexts.\n\n4. **Shake:** world camera `shakeEffect` measured running on player hit, enemy kill, and shield-break; `fx-ui` camera measured inactive in both contexts (HUD/bar on the untouched UI pass).\n\n5. **Tuning surface:** `boltLength/boltWidth/muzzle` + `fx.shake` + `fx.shield` knobs in `data/combat.json`, all read via `config.get/section`; live values match config; git diff confirms only visual knobs were added (no gameplay numbers touched).\n\n6. **No regressions:** `node dev/combat.test.mjs` → 146 checks, 0 failures, exit 0; only that suite imports the changed modules; both contexts boot and play (range fully exercised; main game ran a live 3 s auto-fire fight with the pack intact, ship alive); diff confined to `js/combat/*` + `CamShake.js` + `data/combat.json` — no new dependencies, no build step, hand-rolled FX (no emitters), depth discipline (ships 10 / FX 19–22 / HUD 100) holds.\n\nThe eight \"failures\" in my first probe round were all arithmetic/sequencing bugs in my own probe (angle wraparound, aspect-ratio math, a missing target fallback) — each was re-verified individually and passes.\n\n","at":"2026-09-17T05:08:04.224Z"},"completion":{"type":"completion_requested","goalId":"mu4xefwj-ebnq8h","at":"2026-09-17T05:01:50.034Z"},"audit":{"type":"audit_result","goalId":"mu4xefwj-ebnq8h","verdict":"approved","report":"Fx.js and Bullet.js look substantial. Now the shake module and tuning surface.\n\nNow let me inspect the call sites in both contexts.\n\nThe dev server and headless browser are live. Let me check the debug seams exposed by both contexts, then run a read-only live probe.\n\nI've verified the code paths on both sides. Now I'll run a live probe of both contexts through the dev server to confirm everything's working.\n\nThe two \"FAIL\"s within the range are actually bugs in my probe (scale is 46×10 world px = elongated; -180° ≡ 180°). The main game result needs investigation — let me inspect the actual shape of `__ORBIT_COMBAT__`:\n\nAll checks are now resolved. Final audit summary:\n\n**Verified via code inspection + live CDP probes in both contexts (range `/combat` and `index.html?combat`), with zero console errors:**\n\n1. **Laser bolts (both contexts):** 128×32 canvas bolt texture (fading trail band + bright core streak + head bloom) scaled to 46×10 px player / 54×12 px enemy (elongated 4.6:1, measured), tinted halo (cyan `00e5ff` player, `#ff2d6f` enemy from weapon config), untinted white core dot riding the tip (measured offset 17.25 px ahead of center), directional muzzle flare — bore spike measured at the exact firing angle in both contexts. `fx.muzzle` + `spawnBullet(boltLength/boltWidth)` call sites are symmetric in `CombatScene.js` and `CombatSystem.js`.\n\n2. **Enemy impact reads:** hot white + colored core flash, directional sparks/shards measured within the cone along the bullet's actual travel vector, white craft hit-flash via `tintMode=1` FILL (measured `ffffff`/mode 1 during flash, restored to 0 on expiry — and the previously-flagged ship-destruction defect is fixed: enemy and player ship both survive expiry, verified live), cyan arc ripple at the exact incoming bearing (travel +180°, measured 134.2°/134.2° in range and −42.5°/−42.5° in main) vs orange bolt-textured shards + tight orange ring with **no** arc on hull hits (measured), damage-number pops (measured \"10\"/\"8\").\n\n3. **Shield-sphere strike:** faint full-sphere outline + bright arc segment (1.90 rad, span-keyed texture `__combat_shield_s1.90`) centered exactly on the laser's incoming bearing (measured 135° and 45°), radial ripple from the impact point, outward-biased spark burst, ship white flash, damage-scaled intensity, ~0.5 s decay (config `decayMs: 520`); shield→hull break shows the `ringIn` implosion + shockwave (measured); rams funnel through the same bearing-based `damagePlayer` treatment in both contexts.\n\n4. **Shake:** world camera `shakeEffect` measured running on player hit, enemy kill, and shield-break; `fx-ui` camera measured inactive in both contexts (HUD/bar on the untouched UI pass).\n\n5. **Tuning surface:** `boltLength/boltWidth/muzzle` + `fx.shake` + `fx.shield` knobs in `data/combat.json`, all read via `config.get/section`; live values match config; git diff confirms only visual knobs were added (no gameplay numbers touched).\n\n6. **No regressions:** `node dev/combat.test.mjs` → 146 checks, 0 failures, exit 0; only that suite imports the changed modules; both contexts boot and play (range fully exercised; main game ran a live 3 s auto-fire fight with the pack intact, ship alive); diff confined to `js/combat/*` + `CamShake.js` + `data/combat.json` — no new dependencies, no build step, hand-rolled FX (no emitters), depth discipline (ships 10 / FX 19–22 / HUD 100) holds.\n\nThe eight \"failures\" in my first probe round were all arithmetic/sequencing bugs in my own probe (angle wraparound, aspect-ratio math, a missing target fallback) — each was re-verified individually and passes.\n\n","at":"2026-09-17T05:08:04.224Z"}}],["mu7ieab2-f24hte",{"recent":[{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T04:06:34.695Z"},{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"Scheduling paused","source":"agent","at":"2026-09-19T04:06:46.015Z"},{"type":"goal_resumed","goalId":"mu7ieab2-f24hte","reason":"user","at":"2026-09-19T04:17:54.636Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-2","evidence":"dev/ship-window.test.mjs: every configured row resolves finite from real data; fireRate=1/cd, DPS=damage/cd, accel=ship.thrust, recharge=combat.playerShield. Screenshots reviewed: nominal (HULL 100/CU","at":"2026-09-19T04:54:26.329Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-3","evidence":"dev/ship-window.test.mjs drives real XpManager: levels 0-4 → timeline, 5 & 6 → CHOOSE YOUR CLASS door, class on file → class plate (mode flips exactly at data classAt=5; maxLevel untouched). Screensho","at":"2026-09-19T05:04:37.254Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-4","at":"2026-09-19T05:04:55.422Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-4","evidence":"Screenshots reviewed at 1920x1080: empty hold (\"HOLD EMPTY — EVERY BAY IS CLEAN\", EMPTY tiles, +12 LOCKED pips, 0% / NO ORE ABOARD) and loaded (icons+names, MANIFEST tags, \"4/6 BAYS · 2 FREE\", +10 LOC","at":"2026-09-19T05:21:51.901Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-5","at":"2026-09-19T05:22:27.127Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-5","evidence":"Selecting a filled bay opens BAY MANIFEST (js/ui/ShipWindow.js _paintManifest): goods icon frame, name, CLASS/TIER/BASE VALUE chips (labels from data), flavor, MADE IN origin|hub pool + producer class","at":"2026-09-19T06:10:11.478Z"},{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T14:55:34.986Z"},{"type":"goal_focused","goalId":"mu7ieab2-f24hte","reason":"selected","at":"2026-09-19T15:32:31.167Z"},{"type":"goal_focused","goalId":"mu7ieab2-f24hte","reason":"selected","at":"2026-09-19T15:38:35.941Z"}],"activity":[{"type":"goal_created","goalId":"mu7ieab2-f24hte","objective":"Build the Ship Screen console — opened by the command deck's SHIP slot in the main game (GameScene), on the MapWindow bones (left looping video panel reading assets/videos/ship.mp4 via config with a skip-if-missing guard, right column of tabs) — and deliver two fully working tabs now: \"Ship Status\" (a good-looking stat plate covering hull integrity/current hull strength, shields/shield recharge rate & delay, acceleration/max speed, fire rate, damage, cargo bays, mineral storage, mining speed + combat level with a progress bar toward the next level and a timeline-style presentation of the player's journey from level 0 to level 5 that swaps to a \"Choose your Class\" button at level 5) and \"Cargo Holds\" (a summary of goods aboard by bay plus aggregate minerals aboard vs capacity, where selecting a held good shows its product summary and top charted exits in the same style as the planet buy/sell screens); plus a locked/OFFLINE \"Skill Tree\" tab so the final structure is visible. Success = deck-press opens/closes the console exclusively with the other consoles, both live tabs render correct real run data at multiple forced states, screenshots of every tab/state are reviewed, and `node dev/run-all.mjs` passes with a new Ship test registered in it.","sisyphus":false,"autoContinue":true,"at":"2026-09-18T22:07:23.053Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-1","at":"2026-09-18T22:10:43.158Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-1","evidence":"node --check clean on ShipWindow/Model/GameScene/ship-shot; headless boot (mp4 absent) report \"SMOKE OK — no console errors\", video: NO SIGNAL plate, window open/tab switch ok; deckAction exclusivity ","at":"2026-09-19T01:02:52.692Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-2","at":"2026-09-19T01:03:09.694Z"},{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T04:06:34.695Z"},{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"Scheduling paused","source":"agent","at":"2026-09-19T04:06:46.015Z"},{"type":"goal_resumed","goalId":"mu7ieab2-f24hte","reason":"user","at":"2026-09-19T04:17:54.636Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-2","evidence":"dev/ship-window.test.mjs: every configured row resolves finite from real data; fireRate=1/cd, DPS=damage/cd, accel=ship.thrust, recharge=combat.playerShield. Screenshots reviewed: nominal (HULL 100/CU","at":"2026-09-19T04:54:26.329Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-3","evidence":"dev/ship-window.test.mjs drives real XpManager: levels 0-4 → timeline, 5 & 6 → CHOOSE YOUR CLASS door, class on file → class plate (mode flips exactly at data classAt=5; maxLevel untouched). Screensho","at":"2026-09-19T05:04:37.254Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-4","at":"2026-09-19T05:04:55.422Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-4","evidence":"Screenshots reviewed at 1920x1080: empty hold (\"HOLD EMPTY — EVERY BAY IS CLEAN\", EMPTY tiles, +12 LOCKED pips, 0% / NO ORE ABOARD) and loaded (icons+names, MANIFEST tags, \"4/6 BAYS · 2 FREE\", +10 LOC","at":"2026-09-19T05:21:51.901Z"},{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-5","at":"2026-09-19T05:22:27.127Z"},{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-5","evidence":"Selecting a filled bay opens BAY MANIFEST (js/ui/ShipWindow.js _paintManifest): goods icon frame, name, CLASS/TIER/BASE VALUE chips (labels from data), flavor, MADE IN origin|hub pool + producer class","at":"2026-09-19T06:10:11.478Z"},{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T14:55:34.986Z"}],"oracle":[],"lifecycle":{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T14:55:34.986Z"},"lastActivityEvent":{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T14:55:34.986Z"}}],["mu986lbo-140zqa",{"recent":[{"type":"goal_created","goalId":"mu986lbo-140zqa","objective":"=== Goal ===\nObjective: Give the 7 new enemy ships (spritesheet frames 1–7) distinct stats and attack patterns using a mix of weapon types (heat-seeking missiles, spray, plus new ideas), ramping modestly in difficulty frame 1 → 7, and rewire the ?combat demo to send a sequence of rolling waves — one wave per ship type in difficulty order, 6 ships of that type per wave, 3 on screen at a time.\n\nSuccess criteria:\n- data/combat.json → enemyTypes has 7 new types (frames 1–7), each with distinct stats + a distinct weapon pattern; difficulty (hull/shields/damage) climbs monotonically frame 1 → 7 with only modest bumps (not a wall).\n- Weapon types actually implemented and used: heat-seeking missile (dodgeable — capped turn-rate), spray fan, rapid burst, rapid-fire, ring burst, and a heavy/elite combo. The missile is the only genuinely new projectile; the rest are loops/config over the existing bolt.\n- All 7 fire their pattern correctly in BOTH the main-game ?combat boot and the standalone range (shared firing path).\n- The ?combat boot now dispatches a sequence of rolling waves: 7 waves in difficulty order, each wave = 6 ships of that single type, maxConcurrent=3, each kill sending in a replacement (replacePerKill=1).\n- dev/combat.test.mjs still passes (pure Node modules: EnemyTypes/Waves stay Phaser-free).\n\nBoundaries:\n- In scope: data/combat.json (enemyTypes + a new wave script + ?combat wiring), js/combat (new weapon behaviors: EnemyShip firing, a missile projectile, fireEnemy dispatch in both CombatScene and CombatSystem), dev/combat.test.mjs.\n- Out of scope: new art/sprites, player-ship changes, the XP curve, and the existing pirate_ambush quest wave (stays as-is). The pre-existing frame-0 raider stays untouched.\n- New weapons must not break the standalone range (combat.html / dev server /combat) — it shares the firing path.\n\nConstraints (hard rules):\n- Heat-seeking missiles MUST be dodgeable: capped turn-rate + moderate speed, so the player can out-turn them.\n- Each subsequent ship only a LITTLE harder than the previous (modest +hull/+shields/+damage), not a big jump.\n- Keep EnemyTypes.js and Waves.js pure (no Phaser/scene imports) so dev/combat.test.mjs runs in bare Node.\n- ?combat demo: exactly 7 waves, one type each, in difficulty order; rolling; 6 per wave; 3 concurrent; 1 replacement per kill.\n- Don't mutate shared config sections in place (deepMerge already guards this; follow the pattern).\n\nVerification contract:\n- Run dev/combat.test.mjs → 0 failures.\n- grep confirms the new wave script is wired to the ?combat boot (spawnPack replaced) and all 7 frames are referenced in enemyTypes.\n- Manual browser check of ?combat: 7 waves fire in order, 3 on screen at a time, one type per wave; missiles visibly home and can be dodged; spray/burst/ring render correctly.\n- Re-read the 7-ship roster table and confirm each type's pattern + difficulty bump is present.\n\nIf blocked: stop and ask the user.","sisyphus":false,"autoContinue":true,"at":"2026-09-20T02:57:00.276Z"},{"type":"task_list_set","goalId":"mu986lbo-140zqa","taskCount":4,"blockCompletion":true,"at":"2026-09-20T02:57:00.276Z"},{"type":"task_started","goalId":"mu986lbo-140zqa","taskId":"task-1","at":"2026-09-20T02:57:57.911Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-1","evidence":"Node check: 7 types (frames 1–7) resolve; hull 80→150, xp 18→42 monotonic; 7 distinct patterns; combat_demo normalizes to 7 rolling waves (6/3/1 each)","at":"2026-09-20T03:05:24.313Z"},{"type":"task_started","goalId":"mu986lbo-140zqa","taskId":"task-2","at":"2026-09-20T03:05:24.314Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-2","evidence":"Missile.js (capped turn homing, Node-tested) + Weapons.js firePattern dispatch all 7 patterns; both contexts wired (CombatScene/CombatSystem.fireEnemy → firePattern); Node suite green importing EnemyT","at":"2026-09-20T04:21:17.494Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-3","evidence":"GameScene:1050 startWaves('combat_demo') (spawnPack no longer the boot path); combat_demo = 7 rolling waves bomber→warden, 6/3/1 each; Node e2e run passes; browser sfxcheck found live wave ship after ","at":"2026-09-20T04:21:17.495Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-4","evidence":"node dev/combat.test.mjs: all checks passed (0 failures). CDP demo check PASS: range renders all 7 patterns w/ shape; main 7 waves in order, 3 on screen, replacement/kill, 42 kills done. sfxcheck PASS","at":"2026-09-20T05:03:03.769Z"},{"type":"completion_requested","goalId":"mu986lbo-140zqa","at":"2026-09-20T05:03:52.556Z"},{"type":"audit_started","goalId":"mu986lbo-140zqa","at":"2026-09-20T05:03:52.557Z"},{"type":"audit_result","goalId":"mu986lbo-140zqa","verdict":"approved","report":"The config file looks complete. Now let me inspect the combat modules and tests.\n\nThe CDP endpoint and dev server are both live. Let me run the browser verification harnesses myself to confirm the claims.\n\nBoth independent browser harnesses pass. Let me verify the change scope didn't touch out-of-scope files and confirm the remaining details.\n\nAll success criteria verified against real artifacts, with independent re-runs of the verification contract:\n\n**1. Seven new types (frames 1–7), distinct stats + patterns, monotonic modest ramp** — `data/combat.json → enemyTypes`: bomber(f1, 80/10, dmg 10, lance), spitter(f2, 90/20, 11, spray 5 bolts/1.1 rad), stinger(f3, 100/25, 12, burst 3 staggered-speed), hunter(f4, 110/30, 13, heat-seeking missile), gunner(f5, 120/40, 14, rapid cd 0.5), barrage(f6, 135/50, 15, ring 8), warden(f7, 150/60, 18+20, combo). Hull 80→90→100→110→120→135→150, shields 10→20→25→30→40→50→60, damage 10→11→12→13→14→15→18 — strictly monotonic, bumps ≤ +15 (no wall). Raider (frame 0) and `pirate_ambunch` untouched (diff confirms only comments/enemyTypes/combat_demo changed).\n\n**2. Weapons implemented on a shared path, missile genuinely new** — `js/combat/Weapons.js` `firePattern` dispatches all 7 patterns; `js/combat/Missile.js` is the only new projectile (canvas art + sprite), rest are bolt loops/config. `homingStep` (capped turn) lives in pure `js/combat/Combat.js`. Missile caps: turn 2.2/2.4 rad/s vs player rotSpeed 6.4 rad/s, speed 170/190 px/s vs player maxSpeed 560 — dodgeable, and the cap is asserted in tests. Both `CombatScene.fireEnemy` and `CombatSystem.fireEnemy` now delegate to `firePattern` (old inline single-bolt code removed), and both run `stepMissiles`/`missilesHitPlayer`.\n\n**3. ?combat rewired** — `GameScene:1050` `this.combat.startWaves('combat_demo')`; `spawnPack` demoted to a practice pack (no longer the boot). `combat_demo` = exactly 7 rolling waves, one single type each in difficulty order, each `count: 6, maxConcurrent: 3, replacePerKill: 1`.\n\n**4. Tests — I ran them** — `node dev/combat.test.mjs` → \"combat rules: all checks passed\" (0 failures), including pure-geometry, all-7 pattern dispatch, missile homing/fuse/consume, and a full 7-wave CombatSystem end-to-end (42 kills, 3-on-screen cap, replacement-per-kill, 7 starts/7 clears). `EnemyTypes.js`/`Waves.js` import only `config/Config.js` (no Phaser).\n\n**5. Browser verification — I re-ran both CDP harnesses** (headless Chromium on :9333, dev server :8080): `dev/combat-demo-check.mjs` → \"seven ships: PASS\" (range: all 7 volleys with correct shape incl. 5-bolt fan, 8-bolt even ring, staggered burst, homing missile; main: 7 waves in order, 3 on screen, replacement per kill, done at 42 kills) and `dev/combat.sfxcheck.mjs` → PASS (range 9/9, main 10/10 events incl. `missile_fire`). The range (`/combat`) shares the firing path and renders all 7 patterns — not broken.\n\nDiff scope is confined to the in-scope files (combat.json, js/combat/*, GameScene, dev tests); no out-of-scope files (XP curve, ship.json, sidequests) touched by this goal's changes.\n\n","at":"2026-09-20T05:06:03.693Z"}],"activity":[{"type":"goal_created","goalId":"mu986lbo-140zqa","objective":"=== Goal ===\nObjective: Give the 7 new enemy ships (spritesheet frames 1–7) distinct stats and attack patterns using a mix of weapon types (heat-seeking missiles, spray, plus new ideas), ramping modestly in difficulty frame 1 → 7, and rewire the ?combat demo to send a sequence of rolling waves — one wave per ship type in difficulty order, 6 ships of that type per wave, 3 on screen at a time.\n\nSuccess criteria:\n- data/combat.json → enemyTypes has 7 new types (frames 1–7), each with distinct stats + a distinct weapon pattern; difficulty (hull/shields/damage) climbs monotonically frame 1 → 7 with only modest bumps (not a wall).\n- Weapon types actually implemented and used: heat-seeking missile (dodgeable — capped turn-rate), spray fan, rapid burst, rapid-fire, ring burst, and a heavy/elite combo. The missile is the only genuinely new projectile; the rest are loops/config over the existing bolt.\n- All 7 fire their pattern correctly in BOTH the main-game ?combat boot and the standalone range (shared firing path).\n- The ?combat boot now dispatches a sequence of rolling waves: 7 waves in difficulty order, each wave = 6 ships of that single type, maxConcurrent=3, each kill sending in a replacement (replacePerKill=1).\n- dev/combat.test.mjs still passes (pure Node modules: EnemyTypes/Waves stay Phaser-free).\n\nBoundaries:\n- In scope: data/combat.json (enemyTypes + a new wave script + ?combat wiring), js/combat (new weapon behaviors: EnemyShip firing, a missile projectile, fireEnemy dispatch in both CombatScene and CombatSystem), dev/combat.test.mjs.\n- Out of scope: new art/sprites, player-ship changes, the XP curve, and the existing pirate_ambush quest wave (stays as-is). The pre-existing frame-0 raider stays untouched.\n- New weapons must not break the standalone range (combat.html / dev server /combat) — it shares the firing path.\n\nConstraints (hard rules):\n- Heat-seeking missiles MUST be dodgeable: capped turn-rate + moderate speed, so the player can out-turn them.\n- Each subsequent ship only a LITTLE harder than the previous (modest +hull/+shields/+damage), not a big jump.\n- Keep EnemyTypes.js and Waves.js pure (no Phaser/scene imports) so dev/combat.test.mjs runs in bare Node.\n- ?combat demo: exactly 7 waves, one type each, in difficulty order; rolling; 6 per wave; 3 concurrent; 1 replacement per kill.\n- Don't mutate shared config sections in place (deepMerge already guards this; follow the pattern).\n\nVerification contract:\n- Run dev/combat.test.mjs → 0 failures.\n- grep confirms the new wave script is wired to the ?combat boot (spawnPack replaced) and all 7 frames are referenced in enemyTypes.\n- Manual browser check of ?combat: 7 waves fire in order, 3 on screen at a time, one type per wave; missiles visibly home and can be dodged; spray/burst/ring render correctly.\n- Re-read the 7-ship roster table and confirm each type's pattern + difficulty bump is present.\n\nIf blocked: stop and ask the user.","sisyphus":false,"autoContinue":true,"at":"2026-09-20T02:57:00.276Z"},{"type":"task_started","goalId":"mu986lbo-140zqa","taskId":"task-1","at":"2026-09-20T02:57:57.911Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-1","evidence":"Node check: 7 types (frames 1–7) resolve; hull 80→150, xp 18→42 monotonic; 7 distinct patterns; combat_demo normalizes to 7 rolling waves (6/3/1 each)","at":"2026-09-20T03:05:24.313Z"},{"type":"task_started","goalId":"mu986lbo-140zqa","taskId":"task-2","at":"2026-09-20T03:05:24.314Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-2","evidence":"Missile.js (capped turn homing, Node-tested) + Weapons.js firePattern dispatch all 7 patterns; both contexts wired (CombatScene/CombatSystem.fireEnemy → firePattern); Node suite green importing EnemyT","at":"2026-09-20T04:21:17.494Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-3","evidence":"GameScene:1050 startWaves('combat_demo') (spawnPack no longer the boot path); combat_demo = 7 rolling waves bomber→warden, 6/3/1 each; Node e2e run passes; browser sfxcheck found live wave ship after ","at":"2026-09-20T04:21:17.495Z"},{"type":"task_complete","goalId":"mu986lbo-140zqa","taskId":"task-4","evidence":"node dev/combat.test.mjs: all checks passed (0 failures). CDP demo check PASS: range renders all 7 patterns w/ shape; main 7 waves in order, 3 on screen, replacement/kill, 42 kills done. sfxcheck PASS","at":"2026-09-20T05:03:03.769Z"},{"type":"completion_requested","goalId":"mu986lbo-140zqa","at":"2026-09-20T05:03:52.556Z"},{"type":"audit_started","goalId":"mu986lbo-140zqa","at":"2026-09-20T05:03:52.557Z"},{"type":"audit_result","goalId":"mu986lbo-140zqa","verdict":"approved","report":"The config file looks complete. Now let me inspect the combat modules and tests.\n\nThe CDP endpoint and dev server are both live. Let me run the browser verification harnesses myself to confirm the claims.\n\nBoth independent browser harnesses pass. Let me verify the change scope didn't touch out-of-scope files and confirm the remaining details.\n\nAll success criteria verified against real artifacts, with independent re-runs of the verification contract:\n\n**1. Seven new types (frames 1–7), distinct stats + patterns, monotonic modest ramp** — `data/combat.json → enemyTypes`: bomber(f1, 80/10, dmg 10, lance), spitter(f2, 90/20, 11, spray 5 bolts/1.1 rad), stinger(f3, 100/25, 12, burst 3 staggered-speed), hunter(f4, 110/30, 13, heat-seeking missile), gunner(f5, 120/40, 14, rapid cd 0.5), barrage(f6, 135/50, 15, ring 8), warden(f7, 150/60, 18+20, combo). Hull 80→90→100→110→120→135→150, shields 10→20→25→30→40→50→60, damage 10→11→12→13→14→15→18 — strictly monotonic, bumps ≤ +15 (no wall). Raider (frame 0) and `pirate_ambunch` untouched (diff confirms only comments/enemyTypes/combat_demo changed).\n\n**2. Weapons implemented on a shared path, missile genuinely new** — `js/combat/Weapons.js` `firePattern` dispatches all 7 patterns; `js/combat/Missile.js` is the only new projectile (canvas art + sprite), rest are bolt loops/config. `homingStep` (capped turn) lives in pure `js/combat/Combat.js`. Missile caps: turn 2.2/2.4 rad/s vs player rotSpeed 6.4 rad/s, speed 170/190 px/s vs player maxSpeed 560 — dodgeable, and the cap is asserted in tests. Both `CombatScene.fireEnemy` and `CombatSystem.fireEnemy` now delegate to `firePattern` (old inline single-bolt code removed), and both run `stepMissiles`/`missilesHitPlayer`.\n\n**3. ?combat rewired** — `GameScene:1050` `this.combat.startWaves('combat_demo')`; `spawnPack` demoted to a practice pack (no longer the boot). `combat_demo` = exactly 7 rolling waves, one single type each in difficulty order, each `count: 6, maxConcurrent: 3, replacePerKill: 1`.\n\n**4. Tests — I ran them** — `node dev/combat.test.mjs` → \"combat rules: all checks passed\" (0 failures), including pure-geometry, all-7 pattern dispatch, missile homing/fuse/consume, and a full 7-wave CombatSystem end-to-end (42 kills, 3-on-screen cap, replacement-per-kill, 7 starts/7 clears). `EnemyTypes.js`/`Waves.js` import only `config/Config.js` (no Phaser).\n\n**5. Browser verification — I re-ran both CDP harnesses** (headless Chromium on :9333, dev server :8080): `dev/combat-demo-check.mjs` → \"seven ships: PASS\" (range: all 7 volleys with correct shape incl. 5-bolt fan, 8-bolt even ring, staggered burst, homing missile; main: 7 waves in order, 3 on screen, replacement per kill, done at 42 kills) and `dev/combat.sfxcheck.mjs` → PASS (range 9/9, main 10/10 events incl. `missile_fire`). The range (`/combat`) shares the firing path and renders all 7 patterns — not broken.\n\nDiff scope is confined to the in-scope files (combat.json, js/combat/*, GameScene, dev tests); no out-of-scope files (XP curve, ship.json, sidequests) touched by this goal's changes.\n\n","at":"2026-09-20T05:06:03.693Z"}],"oracle":[],"lifecycle":{"type":"goal_created","goalId":"mu986lbo-140zqa","objective":"=== Goal ===\nObjective: Give the 7 new enemy ships (spritesheet frames 1–7) distinct stats and attack patterns using a mix of weapon types (heat-seeking missiles, spray, plus new ideas), ramping modestly in difficulty frame 1 → 7, and rewire the ?combat demo to send a sequence of rolling waves — one wave per ship type in difficulty order, 6 ships of that type per wave, 3 on screen at a time.\n\nSuccess criteria:\n- data/combat.json → enemyTypes has 7 new types (frames 1–7), each with distinct stats + a distinct weapon pattern; difficulty (hull/shields/damage) climbs monotonically frame 1 → 7 with only modest bumps (not a wall).\n- Weapon types actually implemented and used: heat-seeking missile (dodgeable — capped turn-rate), spray fan, rapid burst, rapid-fire, ring burst, and a heavy/elite combo. The missile is the only genuinely new projectile; the rest are loops/config over the existing bolt.\n- All 7 fire their pattern correctly in BOTH the main-game ?combat boot and the standalone range (shared firing path).\n- The ?combat boot now dispatches a sequence of rolling waves: 7 waves in difficulty order, each wave = 6 ships of that single type, maxConcurrent=3, each kill sending in a replacement (replacePerKill=1).\n- dev/combat.test.mjs still passes (pure Node modules: EnemyTypes/Waves stay Phaser-free).\n\nBoundaries:\n- In scope: data/combat.json (enemyTypes + a new wave script + ?combat wiring), js/combat (new weapon behaviors: EnemyShip firing, a missile projectile, fireEnemy dispatch in both CombatScene and CombatSystem), dev/combat.test.mjs.\n- Out of scope: new art/sprites, player-ship changes, the XP curve, and the existing pirate_ambush quest wave (stays as-is). The pre-existing frame-0 raider stays untouched.\n- New weapons must not break the standalone range (combat.html / dev server /combat) — it shares the firing path.\n\nConstraints (hard rules):\n- Heat-seeking missiles MUST be dodgeable: capped turn-rate + moderate speed, so the player can out-turn them.\n- Each subsequent ship only a LITTLE harder than the previous (modest +hull/+shields/+damage), not a big jump.\n- Keep EnemyTypes.js and Waves.js pure (no Phaser/scene imports) so dev/combat.test.mjs runs in bare Node.\n- ?combat demo: exactly 7 waves, one type each, in difficulty order; rolling; 6 per wave; 3 concurrent; 1 replacement per kill.\n- Don't mutate shared config sections in place (deepMerge already guards this; follow the pattern).\n\nVerification contract:\n- Run dev/combat.test.mjs → 0 failures.\n- grep confirms the new wave script is wired to the ?combat boot (spawnPack replaced) and all 7 frames are referenced in enemyTypes.\n- Manual browser check of ?combat: 7 waves fire in order, 3 on screen at a time, one type per wave; missiles visibly home and can be dodged; spray/burst/ring render correctly.\n- Re-read the 7-ship roster table and confirm each type's pattern + difficulty bump is present.\n\nIf blocked: stop and ask the user.","sisyphus":false,"autoContinue":true,"at":"2026-09-20T02:57:00.276Z"},"lastActivityEvent":{"type":"audit_result","goalId":"mu986lbo-140zqa","verdict":"approved","report":"The config file looks complete. Now let me inspect the combat modules and tests.\n\nThe CDP endpoint and dev server are both live. Let me run the browser verification harnesses myself to confirm the claims.\n\nBoth independent browser harnesses pass. Let me verify the change scope didn't touch out-of-scope files and confirm the remaining details.\n\nAll success criteria verified against real artifacts, with independent re-runs of the verification contract:\n\n**1. Seven new types (frames 1–7), distinct stats + patterns, monotonic modest ramp** — `data/combat.json → enemyTypes`: bomber(f1, 80/10, dmg 10, lance), spitter(f2, 90/20, 11, spray 5 bolts/1.1 rad), stinger(f3, 100/25, 12, burst 3 staggered-speed), hunter(f4, 110/30, 13, heat-seeking missile), gunner(f5, 120/40, 14, rapid cd 0.5), barrage(f6, 135/50, 15, ring 8), warden(f7, 150/60, 18+20, combo). Hull 80→90→100→110→120→135→150, shields 10→20→25→30→40→50→60, damage 10→11→12→13→14→15→18 — strictly monotonic, bumps ≤ +15 (no wall). Raider (frame 0) and `pirate_ambunch` untouched (diff confirms only comments/enemyTypes/combat_demo changed).\n\n**2. Weapons implemented on a shared path, missile genuinely new** — `js/combat/Weapons.js` `firePattern` dispatches all 7 patterns; `js/combat/Missile.js` is the only new projectile (canvas art + sprite), rest are bolt loops/config. `homingStep` (capped turn) lives in pure `js/combat/Combat.js`. Missile caps: turn 2.2/2.4 rad/s vs player rotSpeed 6.4 rad/s, speed 170/190 px/s vs player maxSpeed 560 — dodgeable, and the cap is asserted in tests. Both `CombatScene.fireEnemy` and `CombatSystem.fireEnemy` now delegate to `firePattern` (old inline single-bolt code removed), and both run `stepMissiles`/`missilesHitPlayer`.\n\n**3. ?combat rewired** — `GameScene:1050` `this.combat.startWaves('combat_demo')`; `spawnPack` demoted to a practice pack (no longer the boot). `combat_demo` = exactly 7 rolling waves, one single type each in difficulty order, each `count: 6, maxConcurrent: 3, replacePerKill: 1`.\n\n**4. Tests — I ran them** — `node dev/combat.test.mjs` → \"combat rules: all checks passed\" (0 failures), including pure-geometry, all-7 pattern dispatch, missile homing/fuse/consume, and a full 7-wave CombatSystem end-to-end (42 kills, 3-on-screen cap, replacement-per-kill, 7 starts/7 clears). `EnemyTypes.js`/`Waves.js` import only `config/Config.js` (no Phaser).\n\n**5. Browser verification — I re-ran both CDP harnesses** (headless Chromium on :9333, dev server :8080): `dev/combat-demo-check.mjs` → \"seven ships: PASS\" (range: all 7 volleys with correct shape incl. 5-bolt fan, 8-bolt even ring, staggered burst, homing missile; main: 7 waves in order, 3 on screen, replacement per kill, done at 42 kills) and `dev/combat.sfxcheck.mjs` → PASS (range 9/9, main 10/10 events incl. `missile_fire`). The range (`/combat`) shares the firing path and renders all 7 patterns — not broken.\n\nDiff scope is confined to the in-scope files (combat.json, js/combat/*, GameScene, dev tests); no out-of-scope files (XP curve, ship.json, sidequests) touched by this goal's changes.\n\n","at":"2026-09-20T05:06:03.693Z"},"completion":{"type":"completion_requested","goalId":"mu986lbo-140zqa","at":"2026-09-20T05:03:52.556Z"},"audit":{"type":"audit_result","goalId":"mu986lbo-140zqa","verdict":"approved","report":"The config file looks complete. Now let me inspect the combat modules and tests.\n\nThe CDP endpoint and dev server are both live. Let me run the browser verification harnesses myself to confirm the claims.\n\nBoth independent browser harnesses pass. Let me verify the change scope didn't touch out-of-scope files and confirm the remaining details.\n\nAll success criteria verified against real artifacts, with independent re-runs of the verification contract:\n\n**1. Seven new types (frames 1–7), distinct stats + patterns, monotonic modest ramp** — `data/combat.json → enemyTypes`: bomber(f1, 80/10, dmg 10, lance), spitter(f2, 90/20, 11, spray 5 bolts/1.1 rad), stinger(f3, 100/25, 12, burst 3 staggered-speed), hunter(f4, 110/30, 13, heat-seeking missile), gunner(f5, 120/40, 14, rapid cd 0.5), barrage(f6, 135/50, 15, ring 8), warden(f7, 150/60, 18+20, combo). Hull 80→90→100→110→120→135→150, shields 10→20→25→30→40→50→60, damage 10→11→12→13→14→15→18 — strictly monotonic, bumps ≤ +15 (no wall). Raider (frame 0) and `pirate_ambunch` untouched (diff confirms only comments/enemyTypes/combat_demo changed).\n\n**2. Weapons implemented on a shared path, missile genuinely new** — `js/combat/Weapons.js` `firePattern` dispatches all 7 patterns; `js/combat/Missile.js` is the only new projectile (canvas art + sprite), rest are bolt loops/config. `homingStep` (capped turn) lives in pure `js/combat/Combat.js`. Missile caps: turn 2.2/2.4 rad/s vs player rotSpeed 6.4 rad/s, speed 170/190 px/s vs player maxSpeed 560 — dodgeable, and the cap is asserted in tests. Both `CombatScene.fireEnemy` and `CombatSystem.fireEnemy` now delegate to `firePattern` (old inline single-bolt code removed), and both run `stepMissiles`/`missilesHitPlayer`.\n\n**3. ?combat rewired** — `GameScene:1050` `this.combat.startWaves('combat_demo')`; `spawnPack` demoted to a practice pack (no longer the boot). `combat_demo` = exactly 7 rolling waves, one single type each in difficulty order, each `count: 6, maxConcurrent: 3, replacePerKill: 1`.\n\n**4. Tests — I ran them** — `node dev/combat.test.mjs` → \"combat rules: all checks passed\" (0 failures), including pure-geometry, all-7 pattern dispatch, missile homing/fuse/consume, and a full 7-wave CombatSystem end-to-end (42 kills, 3-on-screen cap, replacement-per-kill, 7 starts/7 clears). `EnemyTypes.js`/`Waves.js` import only `config/Config.js` (no Phaser).\n\n**5. Browser verification — I re-ran both CDP harnesses** (headless Chromium on :9333, dev server :8080): `dev/combat-demo-check.mjs` → \"seven ships: PASS\" (range: all 7 volleys with correct shape incl. 5-bolt fan, 8-bolt even ring, staggered burst, homing missile; main: 7 waves in order, 3 on screen, replacement per kill, done at 42 kills) and `dev/combat.sfxcheck.mjs` → PASS (range 9/9, main 10/10 events incl. `missile_fire`). The range (`/combat`) shares the firing path and renders all 7 patterns — not broken.\n\nDiff scope is confined to the in-scope files (combat.json, js/combat/*, GameScene, dev tests); no out-of-scope files (XP curve, ship.json, sidequests) touched by this goal's changes.\n\n","at":"2026-09-20T05:06:03.693Z"}}],["mu9xzeqf-e5m5ej",{"recent":[{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","at":"2026-09-20T17:43:58.266Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","at":"2026-09-20T20:09:24.838Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","evidence":"GameScene: onKill hands the enemy to handleCombatKill (elite-only witness → haltWaves + bountyDown); _establishBountyHunt rolls plan→route (buildPatrolRoute opts {waypoints:[legs,legs], fork:'bounty'}","at":"2026-09-20T20:27:38.322Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-6","at":"2026-09-20T20:28:26.199Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-6","evidence":"JobBoardWindow.js: _rowState 'locked'; greyed row + LOCKED — REQUIRES LEVEL {level} badge (fillLevel); dossier block (WANTED/epithet/CHARGES/CRAFT) via ui.dossier* with dynamic body-line cap; hunt rou","at":"2026-09-20T22:01:54.072Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-7","at":"2026-09-20T22:14:18.633Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"user","status":"paused","at":"2026-09-21T01:39:37.876Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:40:58.104Z"},{"type":"task_list_set","goalId":"mu9xzeqf-e5m5ej","taskCount":7,"blockCompletion":true,"at":"2026-09-21T01:46:12.634Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:50:36.637Z"},{"type":"task_list_set","goalId":"mu9xzeqf-e5m5ej","taskCount":7,"blockCompletion":true,"at":"2026-09-21T01:52:04.548Z"},{"type":"goal_focused","goalId":"mu9xzeqf-e5m5ej","reason":"selected","at":"2026-09-21T02:06:44.440Z"}],"activity":[{"type":"goal_created","goalId":"mu9xzeqf-e5m5ej","objective":"Turn the job board's offline `bounty` category into a live **BOUNTY HUNT** side quest: a level-2+ contract posted only in Neutral systems that sends the ship on a strictly sequential 3-waypoint patrol of a pirate leader's known travel lanes, resolving to a hidden-bounty encounter chain (20% at waypoint 1 → else 20% at waypoint 2 → else guaranteed at waypoint 3, with an independent 50% raiders-only skirmish rolled on each pre-bounty leg), culminating in a rolling wave of 9 (8 frame-0 raiders + the named bounty flying its story's frame 1–7 craft at double health / double damage); killing the bounty halts all further deployments, auto-checks the remaining waypoints, and completes the contract for claim — backed by 20 written Neutral leader dossiers, data-driven so levels 6+ can be extended later.\n\nSUCCESS CRITERIA (observable evidence)\n1. Board: a BOUNTY HUNT row appears on Neutral system boards; below combat level 2 it renders greyed/LOCKED with \"REQUIRES LEVEL 2\" and its accept is refused by the scene; at level 2+ it accepts normally. Faction (Apex/MindWeave/Zenith) boards never draw one, and their pool stays a documented empty stub.\n2. Contract readout shows the dossier — title, issuer, wanted leader (name/epithet/crime), payout CR + XP, waypoint progress (\"WAYPOINT 1 OF 3 LOGGED\") — and nowhere reveals which waypoint holds the bounty or a raid wave (no red contact beacon, no contact count line, no spoiler string).\n3. Route: exactly 3 waypoints, built through the existing seeded tether-safe route builder; only the next waypoint in sequence can be logged, and compass/beacon point at that one only.\n4. Encounter chain matches spec over a seeded distribution test: bounty at wp1 ≈20%, wp2 ≈16% (i.e. 20% of the remainder), wp3 = every remaining contract; each pre-bounty leg independently rolls 50% for a raid wave; no raid wave rolls on the bounty leg or after resolution.\n5. Waves: pre-bounty skirmish = one rolling wave, 6 frame-0 raiders, 3 concurrent (replace-per-kill). Bounty engagement = one rolling wave of 9, 3 concurrent — exactly 8 raiders plus 1 elite of the dossier's declared frame (frames 1–7), deployed with the opening group, carrying ×2 hull/shields and ×2 weapon damage, visually distinguished and named in the toast/comms.\n6. Termination: killing the elite stops all further deployments/replacements; surviving on-screen fighters stay hostile and must be killed; when the last one drops, the contract is COMPLETE, every unvisited waypoint is checked off, no further waves fire, and the claim pays credits + XP exactly once (idempotent). Dying or leaving mid-fight re-arms the same engagement at that waypoint (the combatDone precedent).\n7. Patrol missions are untouched: patrol generation, any-order check-ins, contact markers/waves, XP and claims all still pass their existing tests.\n8. Verification evidence exists: `node dev/bounty-hunts.test.mjs` plus every pre-existing `dev/*.test.mjs` pass clean, and an in-browser run (dev server) is recorded with the accepted → locked → hunt → bounty kill → claim path exercised.\n\nBOUNDARIES\nIn scope: data/sidequests.json (bounty category + 20 Neutral dossiers + UI copy), js/quests/SideQuests.js (availability, posting fields, plan derivation, wave scripts, XP, completion rule, SideQuestState record normalization/save), the minimal combat seam for a buffed elite unit and \"stop deployments, keep survivors alive\" (js/combat/Waves.js, CombatSystem.js, EnemyShip.js if needed), js/scenes/GameScene.js hunt wiring, js/ui/JobBoardWindow.js row/dossier/locked states, dev tests, docs/PROJECT_NOTES.md entry.\nOut of scope: faction-voice bounty hunt copy; level 6+ difficulty tuning (data band stubbed, not tuned); new art/audio assets; the delivery and escort categories; reworking patrol rules or its encounter odds; save-format migrations beyond additive route fields; git commits (Brian commits).\n\nCONSTRAINTS\n- Plain ES6 modules, no build step, no packages; third-party stays vendored. Tunable numbers, copy, colors, odds and the 20 dossiers live in data/*.json — code owns behavior only, with config fallbacks so a missing key never throws.\n- Determinism: all draws ride labelled Rng.derive(seed, 'sidequests', , 'bounty', /…) forks; the plan is rolled at accept and fixed on the route record (\"a signed contract is a signed contract\") — re-tuning data never re-rolls a standing contract.\n- Scenes stay thin (no balance numbers in js/scenes/); pure rules exported for Node tests; layers follow docs/PROJECT_NOTES.md.\n- The bounty plan is player-hidden: no UI, map marker, compass entry or toast exposes which leg holds the bounty or a raid wave before it fires.\n- Old saves and old ledgers must load (additive fields only); patrol path stays byte-for-byte behaviorally identical.\n- Reuse existing seams (buildPatrolRoute, CombatSystem.startWaves/cancelWaves, XpManager 'sidequest' grant) rather than duplicating combat or ledger machinery.\n\nVERIFICATION CONTRACT\n- `node dev/bounty-hunts.test.mjs` passes: level gate, Neutral-only availability, locked-posting shape, 20-dossier pool integrity (unique leaders, frames spread across 1–7 and all valid vs data/combat.json enemyTypes), seeded distribution (20/16/64 + 50% skirmish on pre-bounty legs only), determinism across calls/restarts, route-record save round-trip (toJSON/fromJSON preserves the plan), wave-script shapes (skirmish 6/3 raiders; bounty total 9 / concurrent 3 / 8 raiders + 1 elite of the dossier frame with ×2 scales), XP payout, sequential waypoint rule, and completion only via bounty kill.\n- All pre-existing dev tests still pass (`for f in dev/*.test.mjs; do node \"$f\"; done`) — patrol's suite is the regression guard for the shared code.\n- In-browser evidence via `node dev/server.mjs` + the existing CDP/dev-check pattern: locked row at level 1, hunt posted and accepted at level 2+, sequential check-ins, a wp1 bounty and a wp3-guaranteed case, elite buff (visible double tank/damage), no-more-waves-after-kill, completion + single claim.\n- grep confirms no bounty waypoint/index leaks into board/compass/toast copy, and re-read the spec above to confirm every numbered item is addressed before marking tasks done.\n\nIF BLOCKED: stop and ask the user (no silent scope cuts, no committing). Notable risk to flag rather than work around quietly: any combat-engine change that would alter patrol or sandbox fight behavior.","sisyphus":false,"autoContinue":true,"at":"2026-09-20T14:59:15.159Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-1","at":"2026-09-20T15:10:40.471Z"},{"goalId":"mu9xzeqf-e5m5ej","taskId":"task-1","at":"2026-09-20T15:34:27.961Z","type":"task_complete","evidence":"data/sidequests.json parses (node JSON.parse + python json). categories.bounty = {enabled:true,label:\"BOUNTY HUNT\",accent:#ff2d6f,minLevel:2,contexts:[\"neutral\"]}; sidequests.bounty rules block: waypo"},{"goalId":"mu9xzeqf-e5m5ej","taskId":"task-2","at":"2026-09-20T15:34:27.961Z","type":"task_complete","evidence":"descriptions.neutral.bounty = 20 dossiers (Vanturi, Halvardson, Ondaine, Spidleau sisters, Drumm, Vane, Sekh, Marlowe, Nkemdi, Costa, Dax, Ferreira, Adu, Bellamy, Vowell, Fisk, Tui, Vance, Vohl, Alkan"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-3","at":"2026-09-20T15:34:48.946Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-3","evidence":"SideQuests.js: context/level gating (enabledSideQuestCategories('faction')=['patrol'], sideQuestAcceptable locked below lvl2), dossier postings with per-board dedupe, deriveBountyPlan (seeded fork, bo","at":"2026-09-20T17:05:25.436Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-4","at":"2026-09-20T17:05:55.130Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-4","evidence":"Waves.js normalizeWave preserves elite {type,healthScale,damageScale,name}; resolveRoster puts exactly ONE mark at the head of the spawn order (its weight removed from the escort draw) — non-elite wav","at":"2026-09-20T17:43:03.444Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","at":"2026-09-20T17:43:58.266Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-5","evidence":"GameScene: onKill hands the enemy to handleCombatKill (elite-only witness → haltWaves + bountyDown); _establishBountyHunt rolls plan→route (buildPatrolRoute opts {waypoints:[legs,legs], fork:'bounty'}","at":"2026-09-20T20:27:38.322Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-6","at":"2026-09-20T20:28:26.199Z"},{"type":"task_complete","goalId":"mu9xzeqf-e5m5ej","taskId":"task-6","evidence":"JobBoardWindow.js: _rowState 'locked'; greyed row + LOCKED — REQUIRES LEVEL {level} badge (fillLevel); dossier block (WANTED/epithet/CHARGES/CRAFT) via ui.dossier* with dynamic body-line cap; hunt rou","at":"2026-09-20T22:01:54.072Z"},{"type":"task_started","goalId":"mu9xzeqf-e5m5ej","taskId":"task-7","at":"2026-09-20T22:14:18.633Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"user","status":"paused","at":"2026-09-21T01:39:37.876Z"},{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:40:58.104Z"}],"oracle":[],"lifecycle":{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:50:36.637Z"},"lastActivityEvent":{"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:40:58.104Z"}}],["muc162bo-njvm8l",{"recent":[{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-2","evidence":"dev/neutral.test.mjs 33/33 pass: roster (allies roster, side 'player', frames 20–27), escort window from data (escortMin/Max 10–15 s), escort (no fire at player), break-off fly-off, despawn off-screen","at":"2026-09-22T03:12:28.543Z"},{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-3","evidence":"dev/neutral.test.mjs pirate-targeting block: player preferred in weapon range, nearest in-range escort draws aggro when player out of range, classic chase unchanged with no escort in reach, pirate lan","at":"2026-09-22T03:12:28.547Z"},{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-4","evidence":"js/combat/Encounters.js (pure director) + encounters section in data/combat.json + GameScene wiring (spawn off-screen, one-shot pirates); dev/encounters.test.mjs 48/48 (cadence exact-timing, one-at-a-","at":"2026-09-22T03:43:19.226Z"},{"type":"task_started","goalId":"muc162bo-njvm8l","taskId":"task-5","at":"2026-09-22T05:56:38.431Z"},{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-5","evidence":"encounter-hud-check.mjs PASS exit=0 (×2): threat markers off→0/on→2 pirates px-lit/restore→0; arrows px-verified at both pirates' edges, escorts never; kill feed live text @1262 alpha .95 + ink px abo","at":"2026-09-22T07:16:46.268Z"},{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-6","evidence":"run-all.mjs ALL 66 TESTS PASSED (incl. encounters/neutral/roster new tests); combat-demo-check PASS (sandbox+combat_demo intact); encounter-hud-check 7 consecutive passes (mixed arrows/threat/feed+esc","at":"2026-09-22T10:28:11.553Z"},{"type":"completion_requested","goalId":"muc162bo-njvm8l","at":"2026-09-22T10:28:57.943Z"},{"type":"audit_started","goalId":"muc162bo-njvm8l","at":"2026-09-22T10:28:57.950Z"},{"type":"audit_result","goalId":"muc162bo-njvm8l","verdict":"disapproved","report":"Now let me verify the test suite runs green:\n\nBoth browser regression checks pass. Now verifying the remaining wiring details: `isHomeSystem`, `playerDown`, wave-run gating, and the spritesheet frames.\n\nFrames 20–27 show eight distinct crafts. Let me verify the remaining seams (auto-fire pool, off-screen spawn radius, visibleView, regression test diffs).\n\nThe core artifacts have been verified. Next, I'll investigate the live production wiring (the director gating against actual GameScene state: home vs. neutral vs. wave execution) on a disposable page, without touching the repository files.\n\nI've found a significant discrepancy and need to verify it statistically before concluding. Let me measure the actual roll cadence the production director would produce in-game:\n\nI've completed my inspection. Here's my audit:\n\n**Verified solid (real artifacts, re-run by me):**\n- `data/combat.json`: `neutral` base + `neutralTypes` = 8 distinct crafts on frames 20–27 (I cropped the actual spritesheet — 8 visibly distinct ships), unique patterns (lance/rapid/spray/burst/ring/missile/combo/volley), monotonic hull 60→150 / shields 0→60 / xp 12→42 ramp; `encounters` section ships the required cadence/weights/bands.\n- Roster registry (`EnemyTypes.js` `neutralTypeConfig`/`neutralTypeIds`/`neutralSheetList`) + merge: tests confirm 8 distinct patterns, frames 20–27, player-side.\n- Ally AI (`NeutralShip.js`) approach/escort/engage/break machine, 10–15 s per-ship windows, break-off off-screen despawn; player-safety seams (never targets player, excluded from auto-fire pool — `currentTarget()` picks from `enemies` only, `ally` bolts/seekers skip the player, player bolts only hit `enemies`).\n- Pirate generalization: `pickEnemyTarget` (player preferred in range, else nearest in-range escort, classic chase preserved); pirate bolts/missiles damage escorts; escort kills still bank pirate XP via `killEnemy`.\n- Director gating: home/faction/wave-run/player-down all gated (ambush is a `waveRun`, covered).\n- Browser checks I re-ran: `encounter-hud-check.mjs` PASS (arrows hostiles-only px-verified, threat data-respecting, mixed fight flow, feed, escort lifecycle, neutrals-only zero damage, ambush 3→3→3→2→1→0 done) and `combat-demo-check.mjs` PASS (sandbox + combat_demo). `node dev/run-all.mjs` = ALL 66 PASSED, including the new `encounters`/`neutral` tests.\n\n**Critical defect found (core success criterion broken in the real game):**\n\nIn `js/combat/Encounters.js`, `_intervalMs()` and `_cooldownMs()` double-scale to milliseconds:\n\n```js\nconst min = Math.max(0, Number(this.cfg.rollIntervalMin) || 45) * 1000; // 45000 ms ✔\nconst max = Math.max(min, Number(this.cfg.rollIntervalMax) || 90) * 1000; // Math.max(45000, 90) * 1000 = 45,000,000 ms ✘\n```\n\n`min` is already in ms, so `max` becomes min×1000: the roll interval is actually **45 s … 12.5 h** (not ~45–90 s) and the cooldown **30 s … 8.3 h** (not ~30–60 s). I instrumented `Math.min/max` inside the module to confirm the values reaching `rand`, and ran 5,000 production-rng trials with the shipped config: first-encounter time p10 ≈ 2.0 h, **median ≈ 8.9 h**, p90 ≈ 17.9 h. My independent browser wiring probe on the real GameScene director likewise never fired within 60 s.\n\nThe dev suite is green only because the deterministic cadence tests inject `rng: () => 0`, which always lands on the band's lower bound — the corrupted upper bound is never sampled. So \"encounters trigger periodically (~45–90 s rolls, ~30–60 s cooldown)\" and manual checklist item 2 (encounters appearing at a non-constant but reasonable pace over a session) are **not genuinely satisfied** in the shipped build, even though every test and check passes.\n\nThis is the heart of the feature; a player in a neutral system would wait hours per encounter. Disapproving on that basis.\n\n","at":"2026-09-22T10:38:58.650Z"},{"type":"completion_requested","goalId":"muc162bo-njvm8l","at":"2026-09-22T12:25:09.642Z"},{"type":"audit_started","goalId":"muc162bo-njvm8l","at":"2026-09-22T12:25:09.650Z"},{"type":"audit_result","goalId":"muc162bo-njvm8l","verdict":"approved","report":"Tests pass and the data file looks rich. Now let me inspect the actual code implementing these claims.\n\nNow I'll independently run the browser verification harnesses (dev server + headless Chromium via CDP) to confirm the executor's claims.\n\nAll evidence checks pass. Cleaning up the background processes I started:\n\nI've completed a full independent audit. Summary of what I verified against real artifacts (not the claim):\n\n**Tests (ran myself):**\n- `node dev/run-all.mjs` → ALL 66 TESTS PASSED, exit 0 — includes `encounters.test.mjs`, `neutral.test.mjs`, and the neutral-roster block in `combat.test.mjs` (all re-run individually: PASS).\n- `dev/combat-demo-check.mjs` (headless CDP, real browser) → **PASS** independently re-run: 7-pattern range, `?combat` boot, all 7 combat_demo waves.\n- `dev/encounter-hud-check.mjs` → **PASS** independently re-run: mixed encounter (arrows at both pirates' edges px-verified, never at neutrals; threat layer respects data; ally fire + pirate fire; kill feed live; survivors escort → break off → `active` false), neutrals-only (zero arrows/markers, escorts fly near player, never fire, 0 player damage, leave), and the Pirate Problems ambush (drain 3→3→3→2→1→0, state done).\n\n**Data-driven tunables (data/combat.json):** `encounters` section (45–90 s interval, 0.5–0.6 chance, 30–60 s cooldown, weights 1:1:1, bands 0–2→1–2 / 3–5→2–3 / 6+→4–5 with mixed 2–3 pirates + 1–2 neutrals at high end); `neutral` base + `neutralTypes` with 8 crafts on frames 20–27 (sheet is 1280×1280 = 10×10 frames — confirmed), 8 distinct patterns (incl. new `volley` in Weapons.js), monotonic hull/shields ramp, xp = (hull+shields)/5, escort 10–15 s.\n\n**Code seams (read and traced):**\n- Director: `Encounters.js` pure clock (interval/chance/cooldown/one-at-a-time/allowed-gate) + the ms-scaling regression guard; tests cover deterministic cadence, band bounds (45–90 s, 30–60 s at both rng extremes), 2000-run statistical median, even-kind statistics, and size bands.\n- Wiring: `GameScene.js:2562–2576` — `encounterAllowed(ship, isHomeSystem, faction, waveRunLive, playerDown)` + `live: combat.active` + `xpLevel: combat.xp.level`; `_spawnEncounter` materializes both rosters in the `_offscreenRadius` band (past camera edge, tested) with `respawn=false` one-shots.\n- Ally AI: `NeutralShip.js` approach → engage (nearest pirate, shared `firePattern` dispatch, player never a target) → escort (per-ship 10–15 s window) → break (flies off, `gone` when fully out of `visibleView`) → despawn; `active` drops when the last escort is off-screen.\n- No friendly fire: auto-fire and all target picks draw only from `this.enemies`; 'ally' bolts/seekers hit enemies only; 'enemy' bolts/seekers hit player + allies; verified by unit tests and the browser px checks.\n- Pirate targeting: `pickEnemyTarget` = player in range, else nearest in-range escort, else classic chase — pirates-only path unchanged.\n- Kills: `killEnemy` single XP grant (escort kills still bank pirate XP; ally kills bank none).\n\nThe one item not literally observed as a live browser soak (\"no encounters over several minutes in the home system\") is covered exactly as the verification contract prescribes: the gate is pure logic (`encounterAllowed`), millisecond-tested for home/faction/wave-run/downed states, and the production wiring passes the real `isHomeSystem`/`faction`/`waveRun` state. No gaps, no scaffold, no contradicted requirements found.\n\n","at":"2026-09-22T12:33:12.715Z"}],"activity":[{"type":"goal_created","goalId":"muc162bo-njvm8l","objective":"=== Goal ===\nObjective: Periodic random ship encounters in every neutral system (except the player's home system) — pirate ships, friendly neutral ships (new spritesheet frames 20–27), or both — where neutral ships escort the player, fight alongside them against pirates, then break off and fly off-screen, with all behavior data-driven and tunable.\n\nSuccess criteria:\n- In a neutral non-home system, while flying with no combat live, encounters trigger periodically (config: roll every ~45–90 s at ~50–60% chance, one at a time, ~30–60 s cooldown after one ends); all tunables live in data/combat.json.\n- Three encounter kinds roll at EVEN odds (~1/3 each, weighted in data/combat.json): pirates-only, neutrals-only, and mixed (pirates + neutrals); ships materialize off-screen and stream in via the existing spawn path (no mid-fight pops).\n- Group size GROWS WITH THE PLAYER'S XP LEVEL: 1–2 ships in a low level, scaling up to 4–5 at higher levels (level bands + per-kind counts in data/combat.json; mixed keeps both kinds present, e.g. 2 pirates + 1–2 neutrals at high end).\n- Neutrals-only: each neutral ship flies near the player for a random 10–15 s, then breaks off and flies off-screen; the encounter ends when the last one is off-screen.\n- Mixed: neutral ships attack the nearest pirate using varied weapon patterns (lance/spray/burst/rapid/ring/missile/combo); pirates attack both the player and neutral ships; when the last pirate is down, surviving neutrals escort the player for 10–15 s, then break off and fly off-screen.\n- Pirates-only: existing chase/lance behavior intact — hostiles fire once in range.\n- Neutral ship types (frames 20–27) are EIGHT DISTINCT crafts — each frame gets its own weapon pattern and a stats ramp (hull/shields/speed/XP), like the pirate roster.\n- Kills of pirates still award existing XP.\n- No encounters ever in the home system or in faction-controlled systems; random encounters never start while the 'Pirate Problems' ambush or any other wave run is in flight.\n\nBoundaries:\n- In scope: neutral ship types + roster config (data/combat.json, EnemyTypes registry), ally AI (escort/assist/depart), pirate target generalization (player or neutrals), the encounter director (trigger/cadence/composition/size-scaling/lifecycle) in GameScene + CombatSystem, combat-HUD readability for these encounters, Node unit tests for new pure logic.\n- Out of scope: encounters in faction systems or the home system; new rewards/economy hooks beyond existing XP; new audio/comms for neutral ships; save persistence of an in-flight encounter (same scene-local rule as the quest ambush); galaxy-map-level encounters; new art (frames 20–27 already exist on assets/images/ships-enemy.png).\n\nConstraints:\n- Neutral ships never target or damage the player, and the player's own shots never damage neutral allies (no friendly fire); the player's auto-fire only targets pirates.\n- Neutral lifecycle state machine: spawn off-screen → (escort 10–15 s | engage pirates until all down) → escort 10–15 s → break off and fly off-screen → despawn off-screen.\n- Reuse existing building blocks: EnemyShip, the EnemyTypes deep-merge registry, Weapons.js patterns, CombatSystem off-screen wave spawn + on-screen fire rule, XpManager level as the size-scaling input; no parallel combat systems.\n- Every new tunable (cadence, weights, size bands, stats, escort duration) in data/combat.json — no magic numbers in code.\n- Existing combat must keep working: the ?combat sandbox, the 'Pirate Problems' ambush, and the combat_demo sequence.\n\nVerification contract:\n- `node dev/run-all.mjs` — 0 failures, including new tests covering the neutral roster config (8 distinct patterns), composition roll (even odds), size-scaling bands, and cadence/cooldown rules (pure logic, Node-only).\n- Manual playthrough checklist in the browser: (1) home system: no encounters over several minutes; (2) neutral system: all three encounter kinds appear roughly evenly over time at a non-constant pace, respecting cooldown; (3) neutrals-only: 10–15 s escort then break-off off-screen; (4) mixed: neutrals visibly shoot pirates, pirates shoot player + neutrals, survivors escort then leave; (5) faction system: no encounters; (6) 'Pirate Problems' ambush and ?combat sandbox unaffected; (7) group size visibly larger at a higher XP level than at level 1.\n\nIf blocked: stop and ask the user (default).\n\nTasks:\n1. Neutral ship roster + config — define neutralTypes (frames 20–27) in data/combat.json: eight distinct crafts, each a unique weapon pattern + stats ramp (hull/shields/speed/XP); register them as player-side types in the EnemyTypes registry; Node tests for roster + config merge.\n2. Ally AI for neutral ships — escort/engage/break-off state machine, target selection (nearest pirate, else escort the player 10–15 s), fire via existing Weapons patterns at pirate targets, excluded from player auto-fire targeting.\n3. Pirate targeting generalization — in mixed encounters pirates target the player and neutral ships (player preferred when in range); their bolts/missiles can damage neutral ships; no behavior change for pirates-only.\n4. Encounter director — GameScene/CombatSystem time-based periodic trigger (neutral non-home systems, interval + chance + cooldown, one at a time, wave-run guard); EVEN-WEIGHTED composition roll (pirates-only / neutrals-only / mixed, ~1/3 each); group size scaled by player XP level (1–2 ships low → 4–5 high, bands in data/combat.json); off-screen spawn + lifecycle/finish; full config section in data/combat.json.\n5. HUD readability + regression — threat markers, off-screen arrows, and kill feed correct for mixed encounters; confirm ?combat sandbox, 'Pirate Problems' ambush, and combat_demo still work.\n6. Verification + tuning — dev/run-all.mjs green, new director/roster tests, manual playthrough checklist (all seven items above), and a balance/tuning pass on cadence, weights, size bands, and neutral stats.","sisyphus":false,"autoContinue":true,"at":"2026-09-22T02:03:56.868Z"},{"type":"task_started","goalId":"muc162bo-njvm8l","taskId":"task-1","at":"2026-09-22T02:04:36.512Z"},{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-1","evidence":"data/combat.json: neutral base + 8 neutralTypes on frames 20–27 (8 distinct patterns incl. new 'volley' in Weapons.js), monotonic hull/shields ramp, xp=(hull+shields)/5; EnemyTypes.neutralTypeConfig/I","at":"2026-09-22T02:24:26.181Z"},{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-2","evidence":"dev/neutral.test.mjs 33/33 pass: roster (allies roster, side 'player', frames 20–27), escort window from data (escortMin/Max 10–15 s), escort (no fire at player), break-off fly-off, despawn off-screen","at":"2026-09-22T03:12:28.543Z"},{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-3","evidence":"dev/neutral.test.mjs pirate-targeting block: player preferred in weapon range, nearest in-range escort draws aggro when player out of range, classic chase unchanged with no escort in reach, pirate lan","at":"2026-09-22T03:12:28.547Z"},{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-4","evidence":"js/combat/Encounters.js (pure director) + encounters section in data/combat.json + GameScene wiring (spawn off-screen, one-shot pirates); dev/encounters.test.mjs 48/48 (cadence exact-timing, one-at-a-","at":"2026-09-22T03:43:19.226Z"},{"type":"task_started","goalId":"muc162bo-njvm8l","taskId":"task-5","at":"2026-09-22T05:56:38.431Z"},{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-5","evidence":"encounter-hud-check.mjs PASS exit=0 (×2): threat markers off→0/on→2 pirates px-lit/restore→0; arrows px-verified at both pirates' edges, escorts never; kill feed live text @1262 alpha .95 + ink px abo","at":"2026-09-22T07:16:46.268Z"},{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-6","evidence":"run-all.mjs ALL 66 TESTS PASSED (incl. encounters/neutral/roster new tests); combat-demo-check PASS (sandbox+combat_demo intact); encounter-hud-check 7 consecutive passes (mixed arrows/threat/feed+esc","at":"2026-09-22T10:28:11.553Z"},{"type":"completion_requested","goalId":"muc162bo-njvm8l","at":"2026-09-22T10:28:57.943Z"},{"type":"audit_started","goalId":"muc162bo-njvm8l","at":"2026-09-22T10:28:57.950Z"},{"type":"audit_result","goalId":"muc162bo-njvm8l","verdict":"disapproved","report":"Now let me verify the test suite runs green:\n\nBoth browser regression checks pass. Now verifying the remaining wiring details: `isHomeSystem`, `playerDown`, wave-run gating, and the spritesheet frames.\n\nFrames 20–27 show eight distinct crafts. Let me verify the remaining seams (auto-fire pool, off-screen spawn radius, visibleView, regression test diffs).\n\nThe core artifacts have been verified. Next, I'll investigate the live production wiring (the director gating against actual GameScene state: home vs. neutral vs. wave execution) on a disposable page, without touching the repository files.\n\nI've found a significant discrepancy and need to verify it statistically before concluding. Let me measure the actual roll cadence the production director would produce in-game:\n\nI've completed my inspection. Here's my audit:\n\n**Verified solid (real artifacts, re-run by me):**\n- `data/combat.json`: `neutral` base + `neutralTypes` = 8 distinct crafts on frames 20–27 (I cropped the actual spritesheet — 8 visibly distinct ships), unique patterns (lance/rapid/spray/burst/ring/missile/combo/volley), monotonic hull 60→150 / shields 0→60 / xp 12→42 ramp; `encounters` section ships the required cadence/weights/bands.\n- Roster registry (`EnemyTypes.js` `neutralTypeConfig`/`neutralTypeIds`/`neutralSheetList`) + merge: tests confirm 8 distinct patterns, frames 20–27, player-side.\n- Ally AI (`NeutralShip.js`) approach/escort/engage/break machine, 10–15 s per-ship windows, break-off off-screen despawn; player-safety seams (never targets player, excluded from auto-fire pool — `currentTarget()` picks from `enemies` only, `ally` bolts/seekers skip the player, player bolts only hit `enemies`).\n- Pirate generalization: `pickEnemyTarget` (player preferred in range, else nearest in-range escort, classic chase preserved); pirate bolts/missiles damage escorts; escort kills still bank pirate XP via `killEnemy`.\n- Director gating: home/faction/wave-run/player-down all gated (ambush is a `waveRun`, covered).\n- Browser checks I re-ran: `encounter-hud-check.mjs` PASS (arrows hostiles-only px-verified, threat data-respecting, mixed fight flow, feed, escort lifecycle, neutrals-only zero damage, ambush 3→3→3→2→1→0 done) and `combat-demo-check.mjs` PASS (sandbox + combat_demo). `node dev/run-all.mjs` = ALL 66 PASSED, including the new `encounters`/`neutral` tests.\n\n**Critical defect found (core success criterion broken in the real game):**\n\nIn `js/combat/Encounters.js`, `_intervalMs()` and `_cooldownMs()` double-scale to milliseconds:\n\n```js\nconst min = Math.max(0, Number(this.cfg.rollIntervalMin) || 45) * 1000; // 45000 ms ✔\nconst max = Math.max(min, Number(this.cfg.rollIntervalMax) || 90) * 1000; // Math.max(45000, 90) * 1000 = 45,000,000 ms ✘\n```\n\n`min` is already in ms, so `max` becomes min×1000: the roll interval is actually **45 s … 12.5 h** (not ~45–90 s) and the cooldown **30 s … 8.3 h** (not ~30–60 s). I instrumented `Math.min/max` inside the module to confirm the values reaching `rand`, and ran 5,000 production-rng trials with the shipped config: first-encounter time p10 ≈ 2.0 h, **median ≈ 8.9 h**, p90 ≈ 17.9 h. My independent browser wiring probe on the real GameScene director likewise never fired within 60 s.\n\nThe dev suite is green only because the deterministic cadence tests inject `rng: () => 0`, which always lands on the band's lower bound — the corrupted upper bound is never sampled. So \"encounters trigger periodically (~45–90 s rolls, ~30–60 s cooldown)\" and manual checklist item 2 (encounters appearing at a non-constant but reasonable pace over a session) are **not genuinely satisfied** in the shipped build, even though every test and check passes.\n\nThis is the heart of the feature; a player in a neutral system would wait hours per encounter. Disapproving on that basis.\n\n","at":"2026-09-22T10:38:58.650Z"},{"type":"completion_requested","goalId":"muc162bo-njvm8l","at":"2026-09-22T12:25:09.642Z"},{"type":"audit_started","goalId":"muc162bo-njvm8l","at":"2026-09-22T12:25:09.650Z"},{"type":"audit_result","goalId":"muc162bo-njvm8l","verdict":"approved","report":"Tests pass and the data file looks rich. Now let me inspect the actual code implementing these claims.\n\nNow I'll independently run the browser verification harnesses (dev server + headless Chromium via CDP) to confirm the executor's claims.\n\nAll evidence checks pass. Cleaning up the background processes I started:\n\nI've completed a full independent audit. Summary of what I verified against real artifacts (not the claim):\n\n**Tests (ran myself):**\n- `node dev/run-all.mjs` → ALL 66 TESTS PASSED, exit 0 — includes `encounters.test.mjs`, `neutral.test.mjs`, and the neutral-roster block in `combat.test.mjs` (all re-run individually: PASS).\n- `dev/combat-demo-check.mjs` (headless CDP, real browser) → **PASS** independently re-run: 7-pattern range, `?combat` boot, all 7 combat_demo waves.\n- `dev/encounter-hud-check.mjs` → **PASS** independently re-run: mixed encounter (arrows at both pirates' edges px-verified, never at neutrals; threat layer respects data; ally fire + pirate fire; kill feed live; survivors escort → break off → `active` false), neutrals-only (zero arrows/markers, escorts fly near player, never fire, 0 player damage, leave), and the Pirate Problems ambush (drain 3→3→3→2→1→0, state done).\n\n**Data-driven tunables (data/combat.json):** `encounters` section (45–90 s interval, 0.5–0.6 chance, 30–60 s cooldown, weights 1:1:1, bands 0–2→1–2 / 3–5→2–3 / 6+→4–5 with mixed 2–3 pirates + 1–2 neutrals at high end); `neutral` base + `neutralTypes` with 8 crafts on frames 20–27 (sheet is 1280×1280 = 10×10 frames — confirmed), 8 distinct patterns (incl. new `volley` in Weapons.js), monotonic hull/shields ramp, xp = (hull+shields)/5, escort 10–15 s.\n\n**Code seams (read and traced):**\n- Director: `Encounters.js` pure clock (interval/chance/cooldown/one-at-a-time/allowed-gate) + the ms-scaling regression guard; tests cover deterministic cadence, band bounds (45–90 s, 30–60 s at both rng extremes), 2000-run statistical median, even-kind statistics, and size bands.\n- Wiring: `GameScene.js:2562–2576` — `encounterAllowed(ship, isHomeSystem, faction, waveRunLive, playerDown)` + `live: combat.active` + `xpLevel: combat.xp.level`; `_spawnEncounter` materializes both rosters in the `_offscreenRadius` band (past camera edge, tested) with `respawn=false` one-shots.\n- Ally AI: `NeutralShip.js` approach → engage (nearest pirate, shared `firePattern` dispatch, player never a target) → escort (per-ship 10–15 s window) → break (flies off, `gone` when fully out of `visibleView`) → despawn; `active` drops when the last escort is off-screen.\n- No friendly fire: auto-fire and all target picks draw only from `this.enemies`; 'ally' bolts/seekers hit enemies only; 'enemy' bolts/seekers hit player + allies; verified by unit tests and the browser px checks.\n- Pirate targeting: `pickEnemyTarget` = player in range, else nearest in-range escort, else classic chase — pirates-only path unchanged.\n- Kills: `killEnemy` single XP grant (escort kills still bank pirate XP; ally kills bank none).\n\nThe one item not literally observed as a live browser soak (\"no encounters over several minutes in the home system\") is covered exactly as the verification contract prescribes: the gate is pure logic (`encounterAllowed`), millisecond-tested for home/faction/wave-run/downed states, and the production wiring passes the real `isHomeSystem`/`faction`/`waveRun` state. No gaps, no scaffold, no contradicted requirements found.\n\n","at":"2026-09-22T12:33:12.715Z"}],"oracle":[],"lifecycle":{"type":"goal_created","goalId":"muc162bo-njvm8l","objective":"=== Goal ===\nObjective: Periodic random ship encounters in every neutral system (except the player's home system) — pirate ships, friendly neutral ships (new spritesheet frames 20–27), or both — where neutral ships escort the player, fight alongside them against pirates, then break off and fly off-screen, with all behavior data-driven and tunable.\n\nSuccess criteria:\n- In a neutral non-home system, while flying with no combat live, encounters trigger periodically (config: roll every ~45–90 s at ~50–60% chance, one at a time, ~30–60 s cooldown after one ends); all tunables live in data/combat.json.\n- Three encounter kinds roll at EVEN odds (~1/3 each, weighted in data/combat.json): pirates-only, neutrals-only, and mixed (pirates + neutrals); ships materialize off-screen and stream in via the existing spawn path (no mid-fight pops).\n- Group size GROWS WITH THE PLAYER'S XP LEVEL: 1–2 ships in a low level, scaling up to 4–5 at higher levels (level bands + per-kind counts in data/combat.json; mixed keeps both kinds present, e.g. 2 pirates + 1–2 neutrals at high end).\n- Neutrals-only: each neutral ship flies near the player for a random 10–15 s, then breaks off and flies off-screen; the encounter ends when the last one is off-screen.\n- Mixed: neutral ships attack the nearest pirate using varied weapon patterns (lance/spray/burst/rapid/ring/missile/combo); pirates attack both the player and neutral ships; when the last pirate is down, surviving neutrals escort the player for 10–15 s, then break off and fly off-screen.\n- Pirates-only: existing chase/lance behavior intact — hostiles fire once in range.\n- Neutral ship types (frames 20–27) are EIGHT DISTINCT crafts — each frame gets its own weapon pattern and a stats ramp (hull/shields/speed/XP), like the pirate roster.\n- Kills of pirates still award existing XP.\n- No encounters ever in the home system or in faction-controlled systems; random encounters never start while the 'Pirate Problems' ambush or any other wave run is in flight.\n\nBoundaries:\n- In scope: neutral ship types + roster config (data/combat.json, EnemyTypes registry), ally AI (escort/assist/depart), pirate target generalization (player or neutrals), the encounter director (trigger/cadence/composition/size-scaling/lifecycle) in GameScene + CombatSystem, combat-HUD readability for these encounters, Node unit tests for new pure logic.\n- Out of scope: encounters in faction systems or the home system; new rewards/economy hooks beyond existing XP; new audio/comms for neutral ships; save persistence of an in-flight encounter (same scene-local rule as the quest ambush); galaxy-map-level encounters; new art (frames 20–27 already exist on assets/images/ships-enemy.png).\n\nConstraints:\n- Neutral ships never target or damage the player, and the player's own shots never damage neutral allies (no friendly fire); the player's auto-fire only targets pirates.\n- Neutral lifecycle state machine: spawn off-screen → (escort 10–15 s | engage pirates until all down) → escort 10–15 s → break off and fly off-screen → despawn off-screen.\n- Reuse existing building blocks: EnemyShip, the EnemyTypes deep-merge registry, Weapons.js patterns, CombatSystem off-screen wave spawn + on-screen fire rule, XpManager level as the size-scaling input; no parallel combat systems.\n- Every new tunable (cadence, weights, size bands, stats, escort duration) in data/combat.json — no magic numbers in code.\n- Existing combat must keep working: the ?combat sandbox, the 'Pirate Problems' ambush, and the combat_demo sequence.\n\nVerification contract:\n- `node dev/run-all.mjs` — 0 failures, including new tests covering the neutral roster config (8 distinct patterns), composition roll (even odds), size-scaling bands, and cadence/cooldown rules (pure logic, Node-only).\n- Manual playthrough checklist in the browser: (1) home system: no encounters over several minutes; (2) neutral system: all three encounter kinds appear roughly evenly over time at a non-constant pace, respecting cooldown; (3) neutrals-only: 10–15 s escort then break-off off-screen; (4) mixed: neutrals visibly shoot pirates, pirates shoot player + neutrals, survivors escort then leave; (5) faction system: no encounters; (6) 'Pirate Problems' ambush and ?combat sandbox unaffected; (7) group size visibly larger at a higher XP level than at level 1.\n\nIf blocked: stop and ask the user (default).\n\nTasks:\n1. Neutral ship roster + config — define neutralTypes (frames 20–27) in data/combat.json: eight distinct crafts, each a unique weapon pattern + stats ramp (hull/shields/speed/XP); register them as player-side types in the EnemyTypes registry; Node tests for roster + config merge.\n2. Ally AI for neutral ships — escort/engage/break-off state machine, target selection (nearest pirate, else escort the player 10–15 s), fire via existing Weapons patterns at pirate targets, excluded from player auto-fire targeting.\n3. Pirate targeting generalization — in mixed encounters pirates target the player and neutral ships (player preferred when in range); their bolts/missiles can damage neutral ships; no behavior change for pirates-only.\n4. Encounter director — GameScene/CombatSystem time-based periodic trigger (neutral non-home systems, interval + chance + cooldown, one at a time, wave-run guard); EVEN-WEIGHTED composition roll (pirates-only / neutrals-only / mixed, ~1/3 each); group size scaled by player XP level (1–2 ships low → 4–5 high, bands in data/combat.json); off-screen spawn + lifecycle/finish; full config section in data/combat.json.\n5. HUD readability + regression — threat markers, off-screen arrows, and kill feed correct for mixed encounters; confirm ?combat sandbox, 'Pirate Problems' ambush, and combat_demo still work.\n6. Verification + tuning — dev/run-all.mjs green, new director/roster tests, manual playthrough checklist (all seven items above), and a balance/tuning pass on cadence, weights, size bands, and neutral stats.","sisyphus":false,"autoContinue":true,"at":"2026-09-22T02:03:56.868Z"},"lastActivityEvent":{"type":"audit_result","goalId":"muc162bo-njvm8l","verdict":"approved","report":"Tests pass and the data file looks rich. Now let me inspect the actual code implementing these claims.\n\nNow I'll independently run the browser verification harnesses (dev server + headless Chromium via CDP) to confirm the executor's claims.\n\nAll evidence checks pass. Cleaning up the background processes I started:\n\nI've completed a full independent audit. Summary of what I verified against real artifacts (not the claim):\n\n**Tests (ran myself):**\n- `node dev/run-all.mjs` → ALL 66 TESTS PASSED, exit 0 — includes `encounters.test.mjs`, `neutral.test.mjs`, and the neutral-roster block in `combat.test.mjs` (all re-run individually: PASS).\n- `dev/combat-demo-check.mjs` (headless CDP, real browser) → **PASS** independently re-run: 7-pattern range, `?combat` boot, all 7 combat_demo waves.\n- `dev/encounter-hud-check.mjs` → **PASS** independently re-run: mixed encounter (arrows at both pirates' edges px-verified, never at neutrals; threat layer respects data; ally fire + pirate fire; kill feed live; survivors escort → break off → `active` false), neutrals-only (zero arrows/markers, escorts fly near player, never fire, 0 player damage, leave), and the Pirate Problems ambush (drain 3→3→3→2→1→0, state done).\n\n**Data-driven tunables (data/combat.json):** `encounters` section (45–90 s interval, 0.5–0.6 chance, 30–60 s cooldown, weights 1:1:1, bands 0–2→1–2 / 3–5→2–3 / 6+→4–5 with mixed 2–3 pirates + 1–2 neutrals at high end); `neutral` base + `neutralTypes` with 8 crafts on frames 20–27 (sheet is 1280×1280 = 10×10 frames — confirmed), 8 distinct patterns (incl. new `volley` in Weapons.js), monotonic hull/shields ramp, xp = (hull+shields)/5, escort 10–15 s.\n\n**Code seams (read and traced):**\n- Director: `Encounters.js` pure clock (interval/chance/cooldown/one-at-a-time/allowed-gate) + the ms-scaling regression guard; tests cover deterministic cadence, band bounds (45–90 s, 30–60 s at both rng extremes), 2000-run statistical median, even-kind statistics, and size bands.\n- Wiring: `GameScene.js:2562–2576` — `encounterAllowed(ship, isHomeSystem, faction, waveRunLive, playerDown)` + `live: combat.active` + `xpLevel: combat.xp.level`; `_spawnEncounter` materializes both rosters in the `_offscreenRadius` band (past camera edge, tested) with `respawn=false` one-shots.\n- Ally AI: `NeutralShip.js` approach → engage (nearest pirate, shared `firePattern` dispatch, player never a target) → escort (per-ship 10–15 s window) → break (flies off, `gone` when fully out of `visibleView`) → despawn; `active` drops when the last escort is off-screen.\n- No friendly fire: auto-fire and all target picks draw only from `this.enemies`; 'ally' bolts/seekers hit enemies only; 'enemy' bolts/seekers hit player + allies; verified by unit tests and the browser px checks.\n- Pirate targeting: `pickEnemyTarget` = player in range, else nearest in-range escort, else classic chase — pirates-only path unchanged.\n- Kills: `killEnemy` single XP grant (escort kills still bank pirate XP; ally kills bank none).\n\nThe one item not literally observed as a live browser soak (\"no encounters over several minutes in the home system\") is covered exactly as the verification contract prescribes: the gate is pure logic (`encounterAllowed`), millisecond-tested for home/faction/wave-run/downed states, and the production wiring passes the real `isHomeSystem`/`faction`/`waveRun` state. No gaps, no scaffold, no contradicted requirements found.\n\n","at":"2026-09-22T12:33:12.715Z"},"completion":{"type":"completion_requested","goalId":"muc162bo-njvm8l","at":"2026-09-22T12:25:09.642Z"},"audit":{"type":"audit_result","goalId":"muc162bo-njvm8l","verdict":"approved","report":"Tests pass and the data file looks rich. Now let me inspect the actual code implementing these claims.\n\nNow I'll independently run the browser verification harnesses (dev server + headless Chromium via CDP) to confirm the executor's claims.\n\nAll evidence checks pass. Cleaning up the background processes I started:\n\nI've completed a full independent audit. Summary of what I verified against real artifacts (not the claim):\n\n**Tests (ran myself):**\n- `node dev/run-all.mjs` → ALL 66 TESTS PASSED, exit 0 — includes `encounters.test.mjs`, `neutral.test.mjs`, and the neutral-roster block in `combat.test.mjs` (all re-run individually: PASS).\n- `dev/combat-demo-check.mjs` (headless CDP, real browser) → **PASS** independently re-run: 7-pattern range, `?combat` boot, all 7 combat_demo waves.\n- `dev/encounter-hud-check.mjs` → **PASS** independently re-run: mixed encounter (arrows at both pirates' edges px-verified, never at neutrals; threat layer respects data; ally fire + pirate fire; kill feed live; survivors escort → break off → `active` false), neutrals-only (zero arrows/markers, escorts fly near player, never fire, 0 player damage, leave), and the Pirate Problems ambush (drain 3→3→3→2→1→0, state done).\n\n**Data-driven tunables (data/combat.json):** `encounters` section (45–90 s interval, 0.5–0.6 chance, 30–60 s cooldown, weights 1:1:1, bands 0–2→1–2 / 3–5→2–3 / 6+→4–5 with mixed 2–3 pirates + 1–2 neutrals at high end); `neutral` base + `neutralTypes` with 8 crafts on frames 20–27 (sheet is 1280×1280 = 10×10 frames — confirmed), 8 distinct patterns (incl. new `volley` in Weapons.js), monotonic hull/shields ramp, xp = (hull+shields)/5, escort 10–15 s.\n\n**Code seams (read and traced):**\n- Director: `Encounters.js` pure clock (interval/chance/cooldown/one-at-a-time/allowed-gate) + the ms-scaling regression guard; tests cover deterministic cadence, band bounds (45–90 s, 30–60 s at both rng extremes), 2000-run statistical median, even-kind statistics, and size bands.\n- Wiring: `GameScene.js:2562–2576` — `encounterAllowed(ship, isHomeSystem, faction, waveRunLive, playerDown)` + `live: combat.active` + `xpLevel: combat.xp.level`; `_spawnEncounter` materializes both rosters in the `_offscreenRadius` band (past camera edge, tested) with `respawn=false` one-shots.\n- Ally AI: `NeutralShip.js` approach → engage (nearest pirate, shared `firePattern` dispatch, player never a target) → escort (per-ship 10–15 s window) → break (flies off, `gone` when fully out of `visibleView`) → despawn; `active` drops when the last escort is off-screen.\n- No friendly fire: auto-fire and all target picks draw only from `this.enemies`; 'ally' bolts/seekers hit enemies only; 'enemy' bolts/seekers hit player + allies; verified by unit tests and the browser px checks.\n- Pirate targeting: `pickEnemyTarget` = player in range, else nearest in-range escort, else classic chase — pirates-only path unchanged.\n- Kills: `killEnemy` single XP grant (escort kills still bank pirate XP; ally kills bank none).\n\nThe one item not literally observed as a live browser soak (\"no encounters over several minutes in the home system\") is covered exactly as the verification contract prescribes: the gate is pure logic (`encounterAllowed`), millisecond-tested for home/faction/wave-run/downed states, and the production wiring passes the real `isHomeSystem`/`faction`/`waveRun` state. No gaps, no scaffold, no contradicted requirements found.\n\n","at":"2026-09-22T12:33:12.715Z"}}]]} \ No newline at end of file diff --git a/.pi/goals/archived/goal_2026092206331272_muc162bo-njvm8l.md b/.pi/goals/archived/goal_2026092206331272_muc162bo-njvm8l.md new file mode 100644 index 0000000..b5ce6af --- /dev/null +++ b/.pi/goals/archived/goal_2026092206331272_muc162bo-njvm8l.md @@ -0,0 +1,148 @@ +{ + "version": 3, + "id": "muc162bo-njvm8l", + "objective": "=== Goal ===\nObjective: Periodic random ship encounters in every neutral system (except the player's home system) — pirate ships, friendly neutral ships (new spritesheet frames 20–27), or both — where neutral ships escort the player, fight alongside them against pirates, then break off and fly off-screen, with all behavior data-driven and tunable.\n\nSuccess criteria:\n- In a neutral non-home system, while flying with no combat live, encounters trigger periodically (config: roll every ~45–90 s at ~50–60% chance, one at a time, ~30–60 s cooldown after one ends); all tunables live in data/combat.json.\n- Three encounter kinds roll at EVEN odds (~1/3 each, weighted in data/combat.json): pirates-only, neutrals-only, and mixed (pirates + neutrals); ships materialize off-screen and stream in via the existing spawn path (no mid-fight pops).\n- Group size GROWS WITH THE PLAYER'S XP LEVEL: 1–2 ships in a low level, scaling up to 4–5 at higher levels (level bands + per-kind counts in data/combat.json; mixed keeps both kinds present, e.g. 2 pirates + 1–2 neutrals at high end).\n- Neutrals-only: each neutral ship flies near the player for a random 10–15 s, then breaks off and flies off-screen; the encounter ends when the last one is off-screen.\n- Mixed: neutral ships attack the nearest pirate using varied weapon patterns (lance/spray/burst/rapid/ring/missile/combo); pirates attack both the player and neutral ships; when the last pirate is down, surviving neutrals escort the player for 10–15 s, then break off and fly off-screen.\n- Pirates-only: existing chase/lance behavior intact — hostiles fire once in range.\n- Neutral ship types (frames 20–27) are EIGHT DISTINCT crafts — each frame gets its own weapon pattern and a stats ramp (hull/shields/speed/XP), like the pirate roster.\n- Kills of pirates still award existing XP.\n- No encounters ever in the home system or in faction-controlled systems; random encounters never start while the 'Pirate Problems' ambush or any other wave run is in flight.\n\nBoundaries:\n- In scope: neutral ship types + roster config (data/combat.json, EnemyTypes registry), ally AI (escort/assist/depart), pirate target generalization (player or neutrals), the encounter director (trigger/cadence/composition/size-scaling/lifecycle) in GameScene + CombatSystem, combat-HUD readability for these encounters, Node unit tests for new pure logic.\n- Out of scope: encounters in faction systems or the home system; new rewards/economy hooks beyond existing XP; new audio/comms for neutral ships; save persistence of an in-flight encounter (same scene-local rule as the quest ambush); galaxy-map-level encounters; new art (frames 20–27 already exist on assets/images/ships-enemy.png).\n\nConstraints:\n- Neutral ships never target or damage the player, and the player's own shots never damage neutral allies (no friendly fire); the player's auto-fire only targets pirates.\n- Neutral lifecycle state machine: spawn off-screen → (escort 10–15 s | engage pirates until all down) → escort 10–15 s → break off and fly off-screen → despawn off-screen.\n- Reuse existing building blocks: EnemyShip, the EnemyTypes deep-merge registry, Weapons.js patterns, CombatSystem off-screen wave spawn + on-screen fire rule, XpManager level as the size-scaling input; no parallel combat systems.\n- Every new tunable (cadence, weights, size bands, stats, escort duration) in data/combat.json — no magic numbers in code.\n- Existing combat must keep working: the ?combat sandbox, the 'Pirate Problems' ambush, and the combat_demo sequence.\n\nVerification contract:\n- `node dev/run-all.mjs` — 0 failures, including new tests covering the neutral roster config (8 distinct patterns), composition roll (even odds), size-scaling bands, and cadence/cooldown rules (pure logic, Node-only).\n- Manual playthrough checklist in the browser: (1) home system: no encounters over several minutes; (2) neutral system: all three encounter kinds appear roughly evenly over time at a non-constant pace, respecting cooldown; (3) neutrals-only: 10–15 s escort then break-off off-screen; (4) mixed: neutrals visibly shoot pirates, pirates shoot player + neutrals, survivors escort then leave; (5) faction system: no encounters; (6) 'Pirate Problems' ambush and ?combat sandbox unaffected; (7) group size visibly larger at a higher XP level than at level 1.\n\nIf blocked: stop and ask the user (default).\n\nTasks:\n1. Neutral ship roster + config — define neutralTypes (frames 20–27) in data/combat.json: eight distinct crafts, each a unique weapon pattern + stats ramp (hull/shields/speed/XP); register them as player-side types in the EnemyTypes registry; Node tests for roster + config merge.\n2. Ally AI for neutral ships — escort/engage/break-off state machine, target selection (nearest pirate, else escort the player 10–15 s), fire via existing Weapons patterns at pirate targets, excluded from player auto-fire targeting.\n3. Pirate targeting generalization — in mixed encounters pirates target the player and neutral ships (player preferred when in range); their bolts/missiles can damage neutral ships; no behavior change for pirates-only.\n4. Encounter director — GameScene/CombatSystem time-based periodic trigger (neutral non-home systems, interval + chance + cooldown, one at a time, wave-run guard); EVEN-WEIGHTED composition roll (pirates-only / neutrals-only / mixed, ~1/3 each); group size scaled by player XP level (1–2 ships low → 4–5 high, bands in data/combat.json); off-screen spawn + lifecycle/finish; full config section in data/combat.json.\n5. HUD readability + regression — threat markers, off-screen arrows, and kill feed correct for mixed encounters; confirm ?combat sandbox, 'Pirate Problems' ambush, and combat_demo still work.\n6. Verification + tuning — dev/run-all.mjs green, new director/roster tests, manual playthrough checklist (all seven items above), and a balance/tuning pass on cadence, weights, size bands, and neutral stats.", + "status": "complete", + "autoContinue": true, + "usage": { + "tokensUsed": 34714474, + "activeSeconds": 34776 + }, + "sisyphus": false, + "revision": 543, + "createdAt": "2026-09-22T02:03:56.868Z", + "updatedAt": "2026-09-22T12:33:12.796Z", + "scheduler": { + "version": 1, + "owner": "01a0c6a8-2a48-73b4-81cc-08edd13c36e9", + "generation": "26da9df5-d3fb-440b-938c-70163b1d3e15", + "used": 7, + "phase": "running", + "repairUsed": false, + "decision": { + "kind": "ready", + "nextAction": "Retry after the provider error and continue pursuing the goal.", + "purpose": "recovery" + }, + "dispatch": { + "id": "dda17093-02e1-44af-a76f-b44843d45148", + "kind": "recovery", + "claimedAt": 1790053931046 + } + }, + "taskList": { + "tasks": [ + { + "id": "task-1", + "title": "Neutral ship roster + config (frames 20–27)", + "status": "complete", + "verificationContract": "neutralTypes present in data/combat.json: 8 distinct crafts (frames 20–27), each with a unique weapon pattern + stats ramp; EnemyTypes registry resolves them as player-side types; Node test (dev/*.test.mjs via dev/run-all.mjs) asserts roster + config merge — 0 failures.", + "completedAt": "2026-09-22T02:24:26.180Z", + "evidence": "data/combat.json: neutral base + 8 neutralTypes on frames 20–27 (8 distinct patterns incl. new 'volley' in Weapons.js), monotonic hull/shields ramp, xp=(hull+shields)/5; EnemyTypes.neutralTypeConfig/I" + }, + { + "id": "task-2", + "title": "Ally AI for neutral ships (escort/assist/depart)", + "status": "complete", + "verificationContract": "Neutral ships escort the player 10–15 s then break off off-screen (neutrals-only); in mixed fights they target the nearest pirate and fire via existing Weapons patterns; never target/damage the player; excluded from player auto-fire; covered by Node logic test.", + "completedAt": "2026-09-22T03:12:28.542Z", + "evidence": "dev/neutral.test.mjs 33/33 pass: roster (allies roster, side 'player', frames 20–27), escort window from data (escortMin/Max 10–15 s), escort (no fire at player), break-off fly-off, despawn off-screen" + }, + { + "id": "task-3", + "title": "Pirate targeting generalization (player + neutrals)", + "status": "complete", + "verificationContract": "In mixed encounters pirates attack the player and neutral ships (player preferred when in range); their bolts/missiles damage neutrals; pirates-only behavior unchanged; covered by Node logic test.", + "completedAt": "2026-09-22T03:12:28.546Z", + "evidence": "dev/neutral.test.mjs pirate-targeting block: player preferred in weapon range, nearest in-range escort draws aggro when player out of range, classic chase unchanged with no escort in reach, pirate lan" + }, + { + "id": "task-4", + "title": "Encounter director (trigger, cadence, composition, size-scaling)", + "status": "complete", + "verificationContract": "Time-based periodic rolls (default ~45–90 s interval, ~50–60% chance, ~30–60 s cooldown, one active at a time) fire only in neutral non-home systems and never during an in-flight wave run; EVEN-WEIGHTED composition (~1/3 pirates-only, ~1/3 neutrals-only, ~1/3 mixed); group size scales with player XP level (1–2 low → 4–5 high, bands in data/combat.json); ships spawn off-screen; lifecycle ends with all ships off-screen; Node tests for cadence/cooldown/composition/size rules — 0 failures.", + "completedAt": "2026-09-22T03:43:19.224Z", + "evidence": "js/combat/Encounters.js (pure director) + encounters section in data/combat.json + GameScene wiring (spawn off-screen, one-shot pirates); dev/encounters.test.mjs 48/48 (cadence exact-timing, one-at-a-" + }, + { + "id": "task-5", + "title": "HUD readability + existing-combat regression", + "status": "complete", + "verificationContract": "Threat markers / off-screen arrows / kill feed render correctly for mixed encounters in-browser; ?combat sandbox, 'Pirate Problems' ambush, and combat_demo verified working.", + "completedAt": "2026-09-22T07:16:46.267Z", + "evidence": "encounter-hud-check.mjs PASS exit=0 (×2): threat markers off→0/on→2 pirates px-lit/restore→0; arrows px-verified at both pirates' edges, escorts never; kill feed live text @1262 alpha .95 + ink px abo" + }, + { + "id": "task-6", + "title": "Verification + tuning pass", + "status": "complete", + "verificationContract": "node dev/run-all.mjs green (0 failures, incl. new tests); manual playthrough checklist complete: home system no encounters, neutral system all three kinds roughly even at a non-constant pace with cooldown, neutrals-only escort+break-off, mixed fight + survivor escort, faction system no encounters, quest ambush/sandbox unaffected, group size larger at higher XP level than level 1; cadence/weights/size bands/neutral stats tuned to feel periodic-not-constant.", + "completedAt": "2026-09-22T10:28:11.546Z", + "evidence": "run-all.mjs ALL 66 TESTS PASSED (incl. encounters/neutral/roster new tests); combat-demo-check PASS (sandbox+combat_demo intact); encounter-hud-check 7 consecutive passes (mixed arrows/threat/feed+esc" + } + ], + "blockCompletion": false, + "proposedAt": "2026-09-22T02:02:03.207Z" + }, + "stopReason": "agent", + "archivedPath": ".pi/goals/archived/goal_2026092206331272_muc162bo-njvm8l.md" +} + +# Goal Prompt + +=== Goal === +Objective: Periodic random ship encounters in every neutral system (except the player's home system) — pirate ships, friendly neutral ships (new spritesheet frames 20–27), or both — where neutral ships escort the player, fight alongside them against pirates, then break off and fly off-screen, with all behavior data-driven and tunable. + +Success criteria: +- In a neutral non-home system, while flying with no combat live, encounters trigger periodically (config: roll every ~45–90 s at ~50–60% chance, one at a time, ~30–60 s cooldown after one ends); all tunables live in data/combat.json. +- Three encounter kinds roll at EVEN odds (~1/3 each, weighted in data/combat.json): pirates-only, neutrals-only, and mixed (pirates + neutrals); ships materialize off-screen and stream in via the existing spawn path (no mid-fight pops). +- Group size GROWS WITH THE PLAYER'S XP LEVEL: 1–2 ships in a low level, scaling up to 4–5 at higher levels (level bands + per-kind counts in data/combat.json; mixed keeps both kinds present, e.g. 2 pirates + 1–2 neutrals at high end). +- Neutrals-only: each neutral ship flies near the player for a random 10–15 s, then breaks off and flies off-screen; the encounter ends when the last one is off-screen. +- Mixed: neutral ships attack the nearest pirate using varied weapon patterns (lance/spray/burst/rapid/ring/missile/combo); pirates attack both the player and neutral ships; when the last pirate is down, surviving neutrals escort the player for 10–15 s, then break off and fly off-screen. +- Pirates-only: existing chase/lance behavior intact — hostiles fire once in range. +- Neutral ship types (frames 20–27) are EIGHT DISTINCT crafts — each frame gets its own weapon pattern and a stats ramp (hull/shields/speed/XP), like the pirate roster. +- Kills of pirates still award existing XP. +- No encounters ever in the home system or in faction-controlled systems; random encounters never start while the 'Pirate Problems' ambush or any other wave run is in flight. + +Boundaries: +- In scope: neutral ship types + roster config (data/combat.json, EnemyTypes registry), ally AI (escort/assist/depart), pirate target generalization (player or neutrals), the encounter director (trigger/cadence/composition/size-scaling/lifecycle) in GameScene + CombatSystem, combat-HUD readability for these encounters, Node unit tests for new pure logic. +- Out of scope: encounters in faction systems or the home system; new rewards/economy hooks beyond existing XP; new audio/comms for neutral ships; save persistence of an in-flight encounter (same scene-local rule as the quest ambush); galaxy-map-level encounters; new art (frames 20–27 already exist on assets/images/ships-enemy.png). + +Constraints: +- Neutral ships never target or damage the player, and the player's own shots never damage neutral allies (no friendly fire); the player's auto-fire only targets pirates. +- Neutral lifecycle state machine: spawn off-screen → (escort 10–15 s | engage pirates until all down) → escort 10–15 s → break off and fly off-screen → despawn off-screen. +- Reuse existing building blocks: EnemyShip, the EnemyTypes deep-merge registry, Weapons.js patterns, CombatSystem off-screen wave spawn + on-screen fire rule, XpManager level as the size-scaling input; no parallel combat systems. +- Every new tunable (cadence, weights, size bands, stats, escort duration) in data/combat.json — no magic numbers in code. +- Existing combat must keep working: the ?combat sandbox, the 'Pirate Problems' ambush, and the combat_demo sequence. + +Verification contract: +- `node dev/run-all.mjs` — 0 failures, including new tests covering the neutral roster config (8 distinct patterns), composition roll (even odds), size-scaling bands, and cadence/cooldown rules (pure logic, Node-only). +- Manual playthrough checklist in the browser: (1) home system: no encounters over several minutes; (2) neutral system: all three encounter kinds appear roughly evenly over time at a non-constant pace, respecting cooldown; (3) neutrals-only: 10–15 s escort then break-off off-screen; (4) mixed: neutrals visibly shoot pirates, pirates shoot player + neutrals, survivors escort then leave; (5) faction system: no encounters; (6) 'Pirate Problems' ambush and ?combat sandbox unaffected; (7) group size visibly larger at a higher XP level than at level 1. + +If blocked: stop and ask the user (default). + +Tasks: +1. Neutral ship roster + config — define neutralTypes (frames 20–27) in data/combat.json: eight distinct crafts, each a unique weapon pattern + stats ramp (hull/shields/speed/XP); register them as player-side types in the EnemyTypes registry; Node tests for roster + config merge. +2. Ally AI for neutral ships — escort/engage/break-off state machine, target selection (nearest pirate, else escort the player 10–15 s), fire via existing Weapons patterns at pirate targets, excluded from player auto-fire targeting. +3. Pirate targeting generalization — in mixed encounters pirates target the player and neutral ships (player preferred when in range); their bolts/missiles can damage neutral ships; no behavior change for pirates-only. +4. Encounter director — GameScene/CombatSystem time-based periodic trigger (neutral non-home systems, interval + chance + cooldown, one at a time, wave-run guard); EVEN-WEIGHTED composition roll (pirates-only / neutrals-only / mixed, ~1/3 each); group size scaled by player XP level (1–2 ships low → 4–5 high, bands in data/combat.json); off-screen spawn + lifecycle/finish; full config section in data/combat.json. +5. HUD readability + regression — threat markers, off-screen arrows, and kill feed correct for mixed encounters; confirm ?combat sandbox, 'Pirate Problems' ambush, and combat_demo still work. +6. Verification + tuning — dev/run-all.mjs green, new director/roster tests, manual playthrough checklist (all seven items above), and a balance/tuning pass on cadence, weights, size bands, and neutral stats. + +## Progress + +- Status: complete +- Auto-continue: on +- Sisyphus mode: no +- Time spent: 9h39m36s +- Tokens used: 35M (34,714,474) tokens +## Tasks + + +- [x] task-1: Neutral ship roster + config (frames 20–27) — evidence: data/combat.json: neutral base + 8 neutralTypes on frames 20–27 (8 distinct patterns incl. new 'volley' in Weapons.js), monotonic hull/shields ramp, xp=(hull+shields)/5; EnemyTypes.neutralTypeConfig/I +- [x] task-2: Ally AI for neutral ships (escort/assist/depart) — evidence: dev/neutral.test.mjs 33/33 pass: roster (allies roster, side 'player', frames 20–27), escort window from data (escortMin/Max 10–15 s), escort (no fire at player), break-off fly-off, despawn off-screen +- [x] task-3: Pirate targeting generalization (player + neutrals) — evidence: dev/neutral.test.mjs pirate-targeting block: player preferred in weapon range, nearest in-range escort draws aggro when player out of range, classic chase unchanged with no escort in reach, pirate lan +- [x] task-4: Encounter director (trigger, cadence, composition, size-scaling) — evidence: js/combat/Encounters.js (pure director) + encounters section in data/combat.json + GameScene wiring (spawn off-screen, one-shot pirates); dev/encounters.test.mjs 48/48 (cadence exact-timing, one-at-a- +- [x] task-5: HUD readability + existing-combat regression — evidence: encounter-hud-check.mjs PASS exit=0 (×2): threat markers off→0/on→2 pirates px-lit/restore→0; arrows px-verified at both pirates' edges, escorts never; kill feed live text @1262 alpha .95 + ink px abo +- [x] task-6: Verification + tuning pass — evidence: run-all.mjs ALL 66 TESTS PASSED (incl. encounters/neutral/roster new tests); combat-demo-check PASS (sandbox+combat_demo intact); encounter-hud-check 7 consecutive passes (mixed arrows/threat/feed+esc + diff --git a/.pi/goals/goal_events.jsonl b/.pi/goals/goal_events.jsonl index c9d00f3..659eaec 100644 --- a/.pi/goals/goal_events.jsonl +++ b/.pi/goals/goal_events.jsonl @@ -82,3 +82,21 @@ {"type":"goal_paused","goalId":"mu9xzeqf-e5m5ej","reason":"Scheduling paused","source":"agent","at":"2026-09-21T01:50:36.637Z"} {"type":"task_list_set","goalId":"mu9xzeqf-e5m5ej","taskCount":7,"blockCompletion":true,"at":"2026-09-21T01:52:04.548Z"} {"type":"goal_focused","goalId":"mu9xzeqf-e5m5ej","reason":"selected","at":"2026-09-21T02:06:44.440Z"} +{"type":"goal_created","goalId":"muc162bo-njvm8l","objective":"=== Goal ===\nObjective: Periodic random ship encounters in every neutral system (except the player's home system) — pirate ships, friendly neutral ships (new spritesheet frames 20–27), or both — where neutral ships escort the player, fight alongside them against pirates, then break off and fly off-screen, with all behavior data-driven and tunable.\n\nSuccess criteria:\n- In a neutral non-home system, while flying with no combat live, encounters trigger periodically (config: roll every ~45–90 s at ~50–60% chance, one at a time, ~30–60 s cooldown after one ends); all tunables live in data/combat.json.\n- Three encounter kinds roll at EVEN odds (~1/3 each, weighted in data/combat.json): pirates-only, neutrals-only, and mixed (pirates + neutrals); ships materialize off-screen and stream in via the existing spawn path (no mid-fight pops).\n- Group size GROWS WITH THE PLAYER'S XP LEVEL: 1–2 ships in a low level, scaling up to 4–5 at higher levels (level bands + per-kind counts in data/combat.json; mixed keeps both kinds present, e.g. 2 pirates + 1–2 neutrals at high end).\n- Neutrals-only: each neutral ship flies near the player for a random 10–15 s, then breaks off and flies off-screen; the encounter ends when the last one is off-screen.\n- Mixed: neutral ships attack the nearest pirate using varied weapon patterns (lance/spray/burst/rapid/ring/missile/combo); pirates attack both the player and neutral ships; when the last pirate is down, surviving neutrals escort the player for 10–15 s, then break off and fly off-screen.\n- Pirates-only: existing chase/lance behavior intact — hostiles fire once in range.\n- Neutral ship types (frames 20–27) are EIGHT DISTINCT crafts — each frame gets its own weapon pattern and a stats ramp (hull/shields/speed/XP), like the pirate roster.\n- Kills of pirates still award existing XP.\n- No encounters ever in the home system or in faction-controlled systems; random encounters never start while the 'Pirate Problems' ambush or any other wave run is in flight.\n\nBoundaries:\n- In scope: neutral ship types + roster config (data/combat.json, EnemyTypes registry), ally AI (escort/assist/depart), pirate target generalization (player or neutrals), the encounter director (trigger/cadence/composition/size-scaling/lifecycle) in GameScene + CombatSystem, combat-HUD readability for these encounters, Node unit tests for new pure logic.\n- Out of scope: encounters in faction systems or the home system; new rewards/economy hooks beyond existing XP; new audio/comms for neutral ships; save persistence of an in-flight encounter (same scene-local rule as the quest ambush); galaxy-map-level encounters; new art (frames 20–27 already exist on assets/images/ships-enemy.png).\n\nConstraints:\n- Neutral ships never target or damage the player, and the player's own shots never damage neutral allies (no friendly fire); the player's auto-fire only targets pirates.\n- Neutral lifecycle state machine: spawn off-screen → (escort 10–15 s | engage pirates until all down) → escort 10–15 s → break off and fly off-screen → despawn off-screen.\n- Reuse existing building blocks: EnemyShip, the EnemyTypes deep-merge registry, Weapons.js patterns, CombatSystem off-screen wave spawn + on-screen fire rule, XpManager level as the size-scaling input; no parallel combat systems.\n- Every new tunable (cadence, weights, size bands, stats, escort duration) in data/combat.json — no magic numbers in code.\n- Existing combat must keep working: the ?combat sandbox, the 'Pirate Problems' ambush, and the combat_demo sequence.\n\nVerification contract:\n- `node dev/run-all.mjs` — 0 failures, including new tests covering the neutral roster config (8 distinct patterns), composition roll (even odds), size-scaling bands, and cadence/cooldown rules (pure logic, Node-only).\n- Manual playthrough checklist in the browser: (1) home system: no encounters over several minutes; (2) neutral system: all three encounter kinds appear roughly evenly over time at a non-constant pace, respecting cooldown; (3) neutrals-only: 10–15 s escort then break-off off-screen; (4) mixed: neutrals visibly shoot pirates, pirates shoot player + neutrals, survivors escort then leave; (5) faction system: no encounters; (6) 'Pirate Problems' ambush and ?combat sandbox unaffected; (7) group size visibly larger at a higher XP level than at level 1.\n\nIf blocked: stop and ask the user (default).\n\nTasks:\n1. Neutral ship roster + config — define neutralTypes (frames 20–27) in data/combat.json: eight distinct crafts, each a unique weapon pattern + stats ramp (hull/shields/speed/XP); register them as player-side types in the EnemyTypes registry; Node tests for roster + config merge.\n2. Ally AI for neutral ships — escort/engage/break-off state machine, target selection (nearest pirate, else escort the player 10–15 s), fire via existing Weapons patterns at pirate targets, excluded from player auto-fire targeting.\n3. Pirate targeting generalization — in mixed encounters pirates target the player and neutral ships (player preferred when in range); their bolts/missiles can damage neutral ships; no behavior change for pirates-only.\n4. Encounter director — GameScene/CombatSystem time-based periodic trigger (neutral non-home systems, interval + chance + cooldown, one at a time, wave-run guard); EVEN-WEIGHTED composition roll (pirates-only / neutrals-only / mixed, ~1/3 each); group size scaled by player XP level (1–2 ships low → 4–5 high, bands in data/combat.json); off-screen spawn + lifecycle/finish; full config section in data/combat.json.\n5. HUD readability + regression — threat markers, off-screen arrows, and kill feed correct for mixed encounters; confirm ?combat sandbox, 'Pirate Problems' ambush, and combat_demo still work.\n6. Verification + tuning — dev/run-all.mjs green, new director/roster tests, manual playthrough checklist (all seven items above), and a balance/tuning pass on cadence, weights, size bands, and neutral stats.","sisyphus":false,"autoContinue":true,"at":"2026-09-22T02:03:56.868Z"} +{"type":"task_list_set","goalId":"muc162bo-njvm8l","taskCount":6,"blockCompletion":false,"at":"2026-09-22T02:03:56.868Z"} +{"type":"task_started","goalId":"muc162bo-njvm8l","taskId":"task-1","at":"2026-09-22T02:04:36.512Z"} +{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-1","evidence":"data/combat.json: neutral base + 8 neutralTypes on frames 20–27 (8 distinct patterns incl. new 'volley' in Weapons.js), monotonic hull/shields ramp, xp=(hull+shields)/5; EnemyTypes.neutralTypeConfig/I","at":"2026-09-22T02:24:26.181Z"} +{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-2","evidence":"dev/neutral.test.mjs 33/33 pass: roster (allies roster, side 'player', frames 20–27), escort window from data (escortMin/Max 10–15 s), escort (no fire at player), break-off fly-off, despawn off-screen","at":"2026-09-22T03:12:28.543Z"} +{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-3","evidence":"dev/neutral.test.mjs pirate-targeting block: player preferred in weapon range, nearest in-range escort draws aggro when player out of range, classic chase unchanged with no escort in reach, pirate lan","at":"2026-09-22T03:12:28.547Z"} +{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-4","evidence":"js/combat/Encounters.js (pure director) + encounters section in data/combat.json + GameScene wiring (spawn off-screen, one-shot pirates); dev/encounters.test.mjs 48/48 (cadence exact-timing, one-at-a-","at":"2026-09-22T03:43:19.226Z"} +{"type":"task_started","goalId":"muc162bo-njvm8l","taskId":"task-5","at":"2026-09-22T05:56:38.431Z"} +{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-5","evidence":"encounter-hud-check.mjs PASS exit=0 (×2): threat markers off→0/on→2 pirates px-lit/restore→0; arrows px-verified at both pirates' edges, escorts never; kill feed live text @1262 alpha .95 + ink px abo","at":"2026-09-22T07:16:46.268Z"} +{"type":"task_complete","goalId":"muc162bo-njvm8l","taskId":"task-6","evidence":"run-all.mjs ALL 66 TESTS PASSED (incl. encounters/neutral/roster new tests); combat-demo-check PASS (sandbox+combat_demo intact); encounter-hud-check 7 consecutive passes (mixed arrows/threat/feed+esc","at":"2026-09-22T10:28:11.553Z"} +{"type":"completion_requested","goalId":"muc162bo-njvm8l","at":"2026-09-22T10:28:57.943Z"} +{"type":"audit_started","goalId":"muc162bo-njvm8l","at":"2026-09-22T10:28:57.950Z"} +{"type":"audit_result","goalId":"muc162bo-njvm8l","verdict":"disapproved","report":"Now let me verify the test suite runs green:\n\nBoth browser regression checks pass. Now verifying the remaining wiring details: `isHomeSystem`, `playerDown`, wave-run gating, and the spritesheet frames.\n\nFrames 20–27 show eight distinct crafts. Let me verify the remaining seams (auto-fire pool, off-screen spawn radius, visibleView, regression test diffs).\n\nThe core artifacts have been verified. Next, I'll investigate the live production wiring (the director gating against actual GameScene state: home vs. neutral vs. wave execution) on a disposable page, without touching the repository files.\n\nI've found a significant discrepancy and need to verify it statistically before concluding. Let me measure the actual roll cadence the production director would produce in-game:\n\nI've completed my inspection. Here's my audit:\n\n**Verified solid (real artifacts, re-run by me):**\n- `data/combat.json`: `neutral` base + `neutralTypes` = 8 distinct crafts on frames 20–27 (I cropped the actual spritesheet — 8 visibly distinct ships), unique patterns (lance/rapid/spray/burst/ring/missile/combo/volley), monotonic hull 60→150 / shields 0→60 / xp 12→42 ramp; `encounters` section ships the required cadence/weights/bands.\n- Roster registry (`EnemyTypes.js` `neutralTypeConfig`/`neutralTypeIds`/`neutralSheetList`) + merge: tests confirm 8 distinct patterns, frames 20–27, player-side.\n- Ally AI (`NeutralShip.js`) approach/escort/engage/break machine, 10–15 s per-ship windows, break-off off-screen despawn; player-safety seams (never targets player, excluded from auto-fire pool — `currentTarget()` picks from `enemies` only, `ally` bolts/seekers skip the player, player bolts only hit `enemies`).\n- Pirate generalization: `pickEnemyTarget` (player preferred in range, else nearest in-range escort, classic chase preserved); pirate bolts/missiles damage escorts; escort kills still bank pirate XP via `killEnemy`.\n- Director gating: home/faction/wave-run/player-down all gated (ambush is a `waveRun`, covered).\n- Browser checks I re-ran: `encounter-hud-check.mjs` PASS (arrows hostiles-only px-verified, threat data-respecting, mixed fight flow, feed, escort lifecycle, neutrals-only zero damage, ambush 3→3→3→2→1→0 done) and `combat-demo-check.mjs` PASS (sandbox + combat_demo). `node dev/run-all.mjs` = ALL 66 PASSED, including the new `encounters`/`neutral` tests.\n\n**Critical defect found (core success criterion broken in the real game):**\n\nIn `js/combat/Encounters.js`, `_intervalMs()` and `_cooldownMs()` double-scale to milliseconds:\n\n```js\nconst min = Math.max(0, Number(this.cfg.rollIntervalMin) || 45) * 1000; // 45000 ms ✔\nconst max = Math.max(min, Number(this.cfg.rollIntervalMax) || 90) * 1000; // Math.max(45000, 90) * 1000 = 45,000,000 ms ✘\n```\n\n`min` is already in ms, so `max` becomes min×1000: the roll interval is actually **45 s … 12.5 h** (not ~45–90 s) and the cooldown **30 s … 8.3 h** (not ~30–60 s). I instrumented `Math.min/max` inside the module to confirm the values reaching `rand`, and ran 5,000 production-rng trials with the shipped config: first-encounter time p10 ≈ 2.0 h, **median ≈ 8.9 h**, p90 ≈ 17.9 h. My independent browser wiring probe on the real GameScene director likewise never fired within 60 s.\n\nThe dev suite is green only because the deterministic cadence tests inject `rng: () => 0`, which always lands on the band's lower bound — the corrupted upper bound is never sampled. So \"encounters trigger periodically (~45–90 s rolls, ~30–60 s cooldown)\" and manual checklist item 2 (encounters appearing at a non-constant but reasonable pace over a session) are **not genuinely satisfied** in the shipped build, even though every test and check passes.\n\nThis is the heart of the feature; a player in a neutral system would wait hours per encounter. Disapproving on that basis.\n\n","at":"2026-09-22T10:38:58.650Z"} +{"type":"completion_requested","goalId":"muc162bo-njvm8l","at":"2026-09-22T12:25:09.642Z"} +{"type":"audit_started","goalId":"muc162bo-njvm8l","at":"2026-09-22T12:25:09.650Z"} +{"type":"audit_result","goalId":"muc162bo-njvm8l","verdict":"approved","report":"Tests pass and the data file looks rich. Now let me inspect the actual code implementing these claims.\n\nNow I'll independently run the browser verification harnesses (dev server + headless Chromium via CDP) to confirm the executor's claims.\n\nAll evidence checks pass. Cleaning up the background processes I started:\n\nI've completed a full independent audit. Summary of what I verified against real artifacts (not the claim):\n\n**Tests (ran myself):**\n- `node dev/run-all.mjs` → ALL 66 TESTS PASSED, exit 0 — includes `encounters.test.mjs`, `neutral.test.mjs`, and the neutral-roster block in `combat.test.mjs` (all re-run individually: PASS).\n- `dev/combat-demo-check.mjs` (headless CDP, real browser) → **PASS** independently re-run: 7-pattern range, `?combat` boot, all 7 combat_demo waves.\n- `dev/encounter-hud-check.mjs` → **PASS** independently re-run: mixed encounter (arrows at both pirates' edges px-verified, never at neutrals; threat layer respects data; ally fire + pirate fire; kill feed live; survivors escort → break off → `active` false), neutrals-only (zero arrows/markers, escorts fly near player, never fire, 0 player damage, leave), and the Pirate Problems ambush (drain 3→3→3→2→1→0, state done).\n\n**Data-driven tunables (data/combat.json):** `encounters` section (45–90 s interval, 0.5–0.6 chance, 30–60 s cooldown, weights 1:1:1, bands 0–2→1–2 / 3–5→2–3 / 6+→4–5 with mixed 2–3 pirates + 1–2 neutrals at high end); `neutral` base + `neutralTypes` with 8 crafts on frames 20–27 (sheet is 1280×1280 = 10×10 frames — confirmed), 8 distinct patterns (incl. new `volley` in Weapons.js), monotonic hull/shields ramp, xp = (hull+shields)/5, escort 10–15 s.\n\n**Code seams (read and traced):**\n- Director: `Encounters.js` pure clock (interval/chance/cooldown/one-at-a-time/allowed-gate) + the ms-scaling regression guard; tests cover deterministic cadence, band bounds (45–90 s, 30–60 s at both rng extremes), 2000-run statistical median, even-kind statistics, and size bands.\n- Wiring: `GameScene.js:2562–2576` — `encounterAllowed(ship, isHomeSystem, faction, waveRunLive, playerDown)` + `live: combat.active` + `xpLevel: combat.xp.level`; `_spawnEncounter` materializes both rosters in the `_offscreenRadius` band (past camera edge, tested) with `respawn=false` one-shots.\n- Ally AI: `NeutralShip.js` approach → engage (nearest pirate, shared `firePattern` dispatch, player never a target) → escort (per-ship 10–15 s window) → break (flies off, `gone` when fully out of `visibleView`) → despawn; `active` drops when the last escort is off-screen.\n- No friendly fire: auto-fire and all target picks draw only from `this.enemies`; 'ally' bolts/seekers hit enemies only; 'enemy' bolts/seekers hit player + allies; verified by unit tests and the browser px checks.\n- Pirate targeting: `pickEnemyTarget` = player in range, else nearest in-range escort, else classic chase — pirates-only path unchanged.\n- Kills: `killEnemy` single XP grant (escort kills still bank pirate XP; ally kills bank none).\n\nThe one item not literally observed as a live browser soak (\"no encounters over several minutes in the home system\") is covered exactly as the verification contract prescribes: the gate is pure logic (`encounterAllowed`), millisecond-tested for home/faction/wave-run/downed states, and the production wiring passes the real `isHomeSystem`/`faction`/`waveRun` state. No gaps, no scaffold, no contradicted requirements found.\n\n","at":"2026-09-22T12:33:12.715Z"} +{"type":"goal_completed","goalId":"muc162bo-njvm8l","archivePath":".pi/goals/archived/goal_2026092206331272_muc162bo-njvm8l.md","at":"2026-09-22T12:33:12.801Z"} +{"type":"goal_archived","goalId":"muc162bo-njvm8l","archivePath":".pi/goals/archived/goal_2026092206331272_muc162bo-njvm8l.md","at":"2026-09-22T12:33:12.803Z"} diff --git a/assets/images/ships-enemy.png b/assets/images/ships-enemy.png index 779248b934657706c61527a439a1fd960db9ab1a..da6cb42d27b4af757fbbfd86e139908e327a838e 100644 GIT binary patch literal 120090 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%0D}NMC0O> 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 Z>9VeaaKvh5QNsnW31XkM+U5RUz(S!{^|UU;&_{ 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 F{{Ya}JVXEh diff --git a/assets/images/ships-enemy.psd b/assets/images/ships-enemy.psd index 09f21a1b63cd5ff30c85ef2d2b5a78590e2c3058..dcf478689d21fb8ffcfd3030563795b76891c527 100644 GIT binary patch literal 1122119 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

9zh^IueYIuT2leXiW;_Uzj}K{paw& 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