orbit/.pi/goals/archived/goal_2026091909324453_mu7ie...

13 KiB

{ "version": 3, "id": "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.", "status": "paused", "autoContinue": false, "usage": { "tokensUsed": 1569625, "activeSeconds": 19608 }, "sisyphus": false, "revision": 385, "createdAt": "2026-09-18T22:07:23.053Z", "updatedAt": "2026-09-19T15:40:04.710Z", "scheduler": { "version": 1, "owner": "01a0b67f-b950-7128-bde1-b1647328e168", "generation": "e38a024d-7b6d-4c97-91a3-728e8b1479a3", "used": 2, "phase": "idle", "repairUsed": false }, "taskList": { "tasks": [ { "id": "task-1", "title": "Ship console shell: data/shipScreen.json + ShipWindow.js + deck wiring (video panel, tab bar with locked Skill Tree, open/close/exclusivity)", "status": "complete", "verificationContract": "data/shipScreen.json exists and is listed in data/manifest.json (layout, colors, copy, video {file:'assets/videos/ship.mp4'}, tab order, stat-source table all data-driven); js/ui/ShipWindow.js follows the MapWindow contract (static VIDEO_KEY, isOpen, update(time), depth 80, cut-corner plate, decoded title, ✕ close, ESC/scrim close, glitch/SFX voice); GameScene preloads the clip with the same skip-if-missing guard as map/quests and boots clean with assets/videos/ship.mp4 ABSENT (no console errors, procedural plate shows instead); deckAction('ship') toggles the console and closes/closed-by research, quests, map and the sub-bar/comms panel exactly like 'map'; SurfaceScene untouched. Evidence: node --check on touched files + browser/dev-page boot log showing no errors with the mp4 missing.", "completedAt": "2026-09-19T01:02:52.692Z", "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 " }, { "id": "task-2", "title": "Ship Status tab — stat readout plate (hull, current hull strength, shields, shield recharge rate/delay, acceleration, max speed, fire rate, damage, cargo/mining) driven by real run state", "status": "complete", "verificationContract": "Every requested stat renders from its live source of truth — data/ship.json → stats (hullIntegrity, shields, cargoHold, mineralStorage, miningSpeed), data/combat.json → playerShip (shieldRegenRate/shieldRegenDelay) and player.weapon (cooldown→shots/sec, damage, bulletSpeed), plus flight feel from ship.thrust/maxSpeed — with NO hardcoded numbers in code (labels/units/order/format come from data/shipScreen.json); deltas from research/builds are reflected where they already mutate ship.stats; hull/shield read the live combat session (this.combat.hull/.shields) while combat is active and otherwise show current max with an explicit 'nominal' state per the confirmed decision; values refresh while open. Evidence: pure test asserts every configured stat row resolves to a finite number from real data files + screenshot of the tab.", "completedAt": "2026-09-19T04:54:26.328Z", "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" }, { "id": "task-3", "title": "Combat level + XP progress bar and the level 0→5 journey timeline, with the level-5 'Choose your Class' state seam", "status": "complete", "verificationContract": "Level, xp, xpForNext and progress read GameScene.combat.xp (XpManager.stats()) — no parallel ledger; segmented 0→5 timeline renders milestone nodes with the in-between progress fill, current-level marker, and per-milestone labels/copy from data/shipScreen.json; bar shows partial progress to next level; at level ≥5 the timeline is REPLACED by a 'Choose your Class' button that fires a documented onChooseClass seam (visible placeholder response, no dead click) and the class+insignia display slot exists as an empty data-driven seam (selection UI explicitly out of scope); maxLevel 80 in data/progression.json stays untouched. Evidence: pure test drives XpManager through levels 0..5 asserting timeline-vs-button state flips exactly at 5; screenshots at forced levels 0, 2 partial, 5.", "completedAt": "2026-09-19T05:04:37.254Z", "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" }, { "id": "task-4", "title": "Cargo Holds tab — hold summary (bay grid with filled/locked bays, good icons + names) and aggregate minerals aboard vs capacity", "status": "complete", "verificationContract": "Renders ship.cargo (CargoHold: one good per bay, fill order) against unlocked bays from ship.stats.cargoHold and economy.cargo.maxSlots, showing used/room counts plus locked-bay upgrade room; minerals shown as aggregate only — ship.minerals vs ship.stats.mineralStorage with a fill bar and % (no new mineral data model), matching what MineralHud reads; empty-hold state reads as an intentional empty plate, not a broken layout; updates live after buys/sells/mining while the console is open. Evidence: pure test asserts summary math for edge states (0 bays, full hold, minerals 0/at cap) + screenshots of those states.", "completedAt": "2026-09-19T05:21:51.901Z", "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" }, { "id": "task-5", "title": "Cargo item detail — selected bay shows the good's product summary and top charted exits in the buy/sell style", "status": "complete", "verificationContract": "Selecting a filled bay opens a detail panel with icon, name, category/tier, flavor, credits value, origin/producer/demand classes and the ranked top-N charted exits (price + per-unit profit bar) built from js/economy/TradeScout.js scoutGood() using the run's galaxy, current system and visitedSystems — reusing ScoutPanel.js or its rendering recipe rather than duplicating economy logic; since there is no local shop on this screen, the profit baseline is documented and data-driven (goods.json baseValue / Economy buy price) and asserted by test; de-selected state restores the hold summary; unknown/goods-less bays degrade gracefully. Evidence: pure test asserts scout report fields for a held good against real data/goods.json + screenshots with a good selected.", "completedAt": "2026-09-19T06:10:11.477Z", "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" }, { "id": "task-6", "title": "Verification pass — new dev/ship-window.test.mjs in run-all, cdp-shot screenshot harness per tab/state, full suite green", "status": "pending", "verificationContract": "New dev/ship-window.test.mjs runs under bare node and is picked up by dev/run-all.mjs; new dev/ship-shot.html boots the game and opens the console (with a documented way to force cargo/minerals/level for shots), captured via dev/cdp-shot.mjs for: Ship Status at levels 0 / mid-progress / level 5 (button state), Cargo Holds empty + loaded, and cargo item detail; screenshots inspected for layout overlap, off-screen text, dark-on-dark copy and tab-state legibility; node dev/run-all.mjs finishes with zero failures; no changes to committed game behavior outside the new console beyond the deckAction('ship') seam; work left unstaged with a suggested commit message (Brian commits)." } ], "blockCompletion": true, "proposedAt": "2026-09-18T21:58:39.258Z" }, "stopReason": "user", "archivedPath": ".pi/goals/archived/goal_2026091909324453_mu7ieab2-f24hte.md" }

Goal Prompt

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.

Progress

  • Status: paused
  • Auto-continue: off
  • Sisyphus mode: no
  • Time spent: 5h26m48s
  • Tokens used: 1.6M (1,569,625) tokens

Tasks

  • task-1: Ship console shell: data/shipScreen.json + ShipWindow.js + deck wiring (video panel, tab bar with locked Skill Tree, open/close/exclusivity) — 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
  • task-2: Ship Status tab — stat readout plate (hull, current hull strength, shields, shield recharge rate/delay, acceleration, max speed, fire rate, damage, cargo/mining) driven by real run state — 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
  • task-3: Combat level + XP progress bar and the level 0→5 journey timeline, with the level-5 'Choose your Class' state seam — 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
  • task-4: Cargo Holds tab — hold summary (bay grid with filled/locked bays, good icons + names) and aggregate minerals aboard vs capacity — 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
  • task-5: Cargo item detail — selected bay shows the good's product summary and top charted exits in the buy/sell style — 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
  • task-6: Verification pass — new dev/ship-window.test.mjs in run-all, cdp-shot screenshot harness per tab/state, full suite green — contract: New dev/ship-window.test.mjs runs under bare node and is picked up by dev/run-all.mjs; new dev/ship-shot.html boots the game and opens the console (with a documented way to force cargo/minerals/level for shots), captured via dev/cdp-shot.mjs for: Ship Status at levels 0 / mid-progress / level 5 (button state), Cargo Holds empty + loaded, and cargo item detail; screenshots inspected for layout overlap, off-screen text, dark-on-dark copy and tab-state legibility; node dev/run-all.mjs finishes with zero failures; no changes to committed game behavior outside the new console beyond the deckAction('ship') seam; work left unstaged with a suggested commit message (Brian commits).