A ship whose pilot was resting still showed on the location chips as
available. The chips and the Jobs badge now count only ships a job could
go out on now; the board names who wakes first when none is ready.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A company started from Settings gets its own welcome; Settings -> Help
reopens the cards, ending in Close (decisions 0.5.131, 0.5.132).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Three welcome cards for every new company: Next, Skip, '1 of 3', swipe,
a focus trap, and a slide that reduced motion turns off; closing records
it and goes to Contracts (decision 0.5.131).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A 'Yours for' chip in the first-look window, a 'Catching up on your
fleet' indicator for slow catch-ups, and a per-pilot logbook with company
totals on the away sheet (CR-021).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Buy the Dispatch Office on the Bridge; set hired pilots Independent,
see what they're doing and edit their orders on Pilots; the spending
floor in Settings; an Independent badge on Fleet (CR-021).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CR-020 and Phase 20 went to the Bridge dashboard, recorded first in
another session. Independent Pilots is CR-021 (decisions 0.5.122-0.5.130);
its Steps 20.1-20.5 commits are Steps 21.1-21.5.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The dispatch sheet tells the engine which contract the player has open;
Independent pilots leave it alone, and the loop runs their decisions
while the app is open (decision 0.5.122).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contract cards drop the Too heavy and Too slow badges; an empty board
says no job fits the fleet, with the refresh countdown (decision 0.5.114).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A Fleet card warns Low fuel when the tank can't fly the ship's longest
leg to a discovered place; the fuel sheet lists Manual first as the
default (decisions 0.5.112, 0.5.113).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A one-time tip after the deal and the notification permission prompt,
listing each pilot's unspent skill points, with Go to Pilots and Later
(decision 0.5.109). The engine client exposes the pending permission
prompt as ApiClient.notificationPrompt().
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Pilots tab badge shows the total unspent skill points across all
pilots, hidden at zero (decision 0.5.109).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Io and Europa sit at fixed screen offsets around Jupiter and Venus at
its place. Crowded label families fold into the parent's label with a
"+N" marker (the Jupiter system below zoom 2.5); tapping it or zooming
in shows all three. The haze strip is finer and repeats so it doesn't
streak when zoomed in. The discovery browser test waits for a Mars
first contact now that Venus competes for the slot.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Scatters 220 rocks from the six sliced images across the belt with a
seeded generator (denser in the middle, mostly small, varied rotation
and brightness), keeps them clear of Ceres at every zoom, and draws them
in one non-interactive container. Review screenshots added.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Draws the asteroid belt's haze as a ring mesh between 314M and 494M km
on the map's compressed scale: a strip drawn in code (or belt-haze.png
when provided) wrapped around the ring, static, non-interactive, above
the orbit rings and below routes and bodies. Review screenshots added.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The art script slices belt-asteroids.png into its six separate rocks
(connected regions of visible pixels, each cut out on its own) and
exports them at 64 and 128 px; an optional belt-haze.png strip is
supported. The source images are only read.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Venus Cloud City, Io Sulfur Works and Europa Ice Station join the map
(fixed positions, Io and Europa riding with Jupiter), with their
fuel prices, range factors, shippers and sprites. Each makes a
Standard good so boards work there. The first-purchase balance window
widens to 45-95 minutes (user decision).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The map places every body once and moves only flights; orbit rings
stay as decoration. Reach wording loses its dates: "From Earth: Moon,
Mars", "Out of range (...)", and the Market's "Other dates" line is
gone.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ship cards show a fuel gauge and refuel policy, with a Fuel sheet to
fill or buy an amount, switch policy, and order emergency fuel when it
is offered. The dispatch sheet and deadhead picker show fuel needed,
on board and left after, price fuel at the tank's average, and offer
"Refuel here first". Locations show fuel prices with the cheapest
marked, and delivery summaries list Auto top-ups.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The no-strand rule now asks whether the ship could leave the
destination on a full tank where fuel is sold, or on what is left
after the leg where it isn't. Emergency fuel is offered to an idle
ship that can't reach anywhere when the player can't afford the
shortfall: the cheapest leg's fuel at 2.5x the local price.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
Ships get a tank capacity and a burn rate instead of range and fuel
cost; locations get a fixed fuel price and a sellsFuel flag instead of
the launch cost multiplier. A leg burns burn rate x the economic
distance of (distance / origin factor), and reach is a full tank's
worth. Tanks are sized so every reach answer is unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Positions, distances, range checks, trip times, fuel and the no-strand
rule no longer take a time argument; the 48-hour no-strand margin goes
with it. Tests now check that a route's pay, trip time and fuel are the
same whenever it is offered or flown.
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>
Export save turns the whole save into one code (gzip + base64url
behind a DEADHEAD1. prefix) to copy or share as a file; Import save
takes a pasted code or a file, migrates and validates it, and replaces
the company after confirmation. A bad code is refused and changes
nothing. These replace the backup code. Debug info now gives the save
id, save version and storage type.
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>