Ships carry fuel: a leg burns from the tank at departure (no credits),
dispatch needs the fuel on board (not-enough-fuel), a leg's fuel cost
is fuel burned x the tank's average price, and Auto top-up refills on
landing with what the credits cover. The save gains tank fields (save
version 2, migration fills every tank). Market ships arrive full; the
deal's ships come with a quarter tank to keep the balance targets.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Locations get fixed polar coordinates (the Moon as an offset from
Earth) and astronomy-engine is removed, so positions now come from
content. Ranges move into CR-015's reach bands for the fixed distances,
and the Lighter's price drops to 36,000 to keep the balance targets.
Date-sampled tests become yes/no.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Removes apps/server (Fastify, Drizzle, pg-boss, Better Auth), the
development Postgres, the backup code routes, the web HTTP client and
the CI database service. Deployment is static hosting with Caddy. A
Playwright test checks that the production build loads only its own
files.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The engine derives the notification schedule from the save after every
saved change (arrivals, rest ending, upgrades; same-minute events
combined) and replaces the platform's schedule. Capacitor
LocalNotifications on iOS/Android, a no-op on the web. Permission is
asked after the deal; Settings has an On/Off toggle.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Root config runs each workspace package as a Vitest project. Adds a
trivial passing test in packages/sim.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Shared root config. sim and content forbid Math.random, Date.now and
argument-less new Date() to keep them pure.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pnpm workspace with apps/web, apps/server, packages/sim, packages/schema
and packages/content, each extending a strict tsconfig.base.json.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>