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>
Commands and the resolution loop replay arrivals and Independent
pilots' decisions in time order, at most 7 days, in chunks with
progress; the same time always gives the same save (decision 0.5.125).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Commands to buy the Dispatch Office, set a pilot's mode and orders, and
set the spending floor; save version 5 starts every pilot on Manual
(decisions 0.5.118-0.5.120).
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>
Location boards are generated for the qualifying fleet and store it;
reads hide jobs it can no longer complete. Save version 4 drops stored
boards (decisions 0.5.115, 0.5.117).
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>
New ships (deal or Market) come full on Manual refueling; save version
3 puts every existing ship on Manual. The balance simulator refuels only
when a job needs it (decisions 0.5.111, 0.5.112).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Base fuel price 10 -> 5 cr/fu. No route is above 25% of the median
fitting payout but the Clipper's Mars -> Earth; the first purchase
window is now 30-95 min (user decisions, 0.5.110).
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>