Files
SpaceWanderer/CHANGELOG.md
2026-09-28 21:36:37 +00:00

4.9 KiB

Changelog

v0.3.0 — 2026-09-28 21:35

  • World generation + jump between solar systems (issue #5): the game save, DB schema, turn counter and event writing that all later tabs build on. Single-player by design — one save row, no auth/accounts.
  • New tables (lib/db/schema.ts + DDL in lib/db/client.ts): saves (id/seed/turn/created_at), solar_systems (name, x/y chart position, discovered, is_current), jump_routes (directed pairs, both directions stored for single-row adjacency lookups), events (append-only log: new-game + jump events so far).
  • Seeded world generation (lib/game/world.ts, pure functions): a save's seed deterministically generates the starting system plus a ring of six undiscovered neighbours with jump routes; jumping into an undiscovered system grows the chart with four more neighbours around it, so there is always somewhere to jump and a route back.
  • Save lifecycle (lib/game/save.ts): auto-initializes on first API hit when no save exists, exposes world state, validates jumps (adjacency required — non-adjacent/unknown rejected), sets current, increments the turn counter, writes events, persists durably.
  • New endpoints: GET /api/world → { systems, edges, turn }; POST /api/jump { systemId } → fresh world state (400 malformed body, 404 unknown system, 409 not adjacent). OpenAPI spec in code (lib/openapi.ts) updated for both.
  • WORLD MAP tab now renders REAL data: fetches /api/world on mount, draws the live NodeGraph (current = ACTIVE/CURRENT, discovered = NEUTRAL/DISCOVERED, unknown = OFFLINE/UNKNOWN) with a jump button per adjacent system; placeholder map constants removed for this tab only — other tabs keep their placeholders until their own issues land.

v0.2.2 — 2026-09-28 21:02

  • LOCAL SYSTEM tab: explorable-worlds list now staggers moons under their parent planet (indented rows) — ASHFALL attached under BRIMSTONE, new PALEMOON moon under AURELLE; badges unchanged.

v0.2.1 — 2026-09-28 20:22

  • LOCAL SYSTEM tab: removed the system node graph (star/planets/moons) — the tab now shows only the explorable-worlds list at full panel width. WORLD MAP keeps its node graph; components/ui/node-graph.tsx unchanged and still in use there.

v0.2.0 — 2026-09-28 19:19

  • Game interface template (visual only, zero game logic): the operations panel in components/mission-control.tsx is now seven tabs — WORLD MAP (NodeGraph of 10 placeholder solar systems linked by jump routes), LOCAL SYSTEM (NodeGraph of star + planets/moons plus an explorable-worlds list), CREW (crew cards with name/role and good/bad trait placeholders), SHIP SYSTEMS (system cards with inert EXPAND / UPGRADE / BUILD NEW affordances), SKILL TREE (tech cards unlocking new system builds/upgrades), MISSIONS (previous NEXT MISSION content), EVENT LOG (ship log terminal). All data is local placeholder constants.
  • Left column: VESSEL METRICS progress rings replaced with scificn Progress bracket bars; SHIP SYSTEMS status panel, header stat cards and right column unchanged.
  • New scificn-ui components copied into components/ui/: NodeGraph, Progress (+ @radix-ui/react-progress dependency).

v0.1.0 — 2026-09-28 15:47

  • Initial scaffold (stack proof): base stack copied/adapted from Flight-Ops (../flight) — Next.js 16 App Router + React 19 + TypeScript strict, bun package manager, Node 22 in CI/Docker.
  • Single-player only by design: NO auth/accounts/multiplayer anywhere (Flight-Ops's users/sessions/admin/leaderboard patterns deliberately not copied).
  • Frontend component layer: scificn-ui v0.1.0 integrated copy-paste (Radix + Tailwind v4, SCI-FI theme) — Button, Panel, Badge, Card, Alert in components/ui/; theme tokens in app/globals.css with a brightened --text-muted override (#4A4A40 → #6B6B5C).
  • Interface base: the scificn-ui Mission Control showcase (https://www.scificn.dev/showcase/mission-control) rebuilt as the app's main UI — app/page.tsx renders components/mission-control.tsx (client dashboard: sticky header, stat-card row, 3-column grid of Panel/Tabs/StatusGrid/ProgressRing/BarChart/LineChart/Terminal panels, sticky footer), placeholder ship content only, no game logic; additional upstream components copied into components/ui/ (Tabs, StatCard, Terminal, StatusGrid, ProgressRing, BarChart, LineChart) + @radix-ui/react-tabs dependency.
  • DB plumbing: SQLite via Drizzle ORM + sql.js (WASM) at db/space-wanderer.db, volume-mounted; empty schema placeholder — game tables land with the first game systems.
  • API pattern established: /api/version + OpenAPI 3.x spec generated in code (lib/openapi.ts) served at /api/openapi.
  • CI/e2e/docker pipeline: single "build + unit + e2e" job on the dind runner, isolated stack space-wanderer-ci with static IP 172.39.0.10 (fresh DB volume per run), Playwright e2e (smoke.spec.ts, state.spec.ts) CI-only against that stack; prod compose behind Traefik at https://space-wanderer.dev.kkhost.pl (not deployed yet).