1 line
8.7 KiB
JSON
1 line
8.7 KiB
JSON
{"version":1,"dirMtimeMs":1789829735005.69,"goals":[{"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":383,"createdAt":"2026-09-18T22:07:23.053Z","updatedAt":"2026-09-19T14:55:35.006Z","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"},"activePath":".pi/goals/active_goal_2026091816072305_mu7ieab2-f24hte.md","stopReason":"user"}]} |