Every part the game is built from lives in one catalog on this server, and this is where it is edited.
A change takes effect at once and there is no history: a vessel already in orbit is flown and stepped with the definition
as it stands here, so halving an engine's electricity draw slows the drain of every ship already carrying one.
Each part carries a hash of its own values; a rocket records the hashes it was built from, which is how the
built from column on the world page can say a ship was assembled against older parts.
Games download the catalog at startup and cache it, so an edit reaches a player on their next launch.
Part
Id
Category
Mass
Cost
Hash
Actions
Achievements
One entry is a trigger on a game event plus the reward it pays. The game asks for the enabled list when it
starts (GET /achievements) and checks every entry against the events a flight raises, so an entry added here is
earnable on the player's next launch — and a reward edited here is paid at the new figure from then on, never retroactively
to the players already holding it. Disabling an entry hides it from the game but leaves it standing on the records of
everyone who earned it. Who holds what is granted and revoked one player at a time, from the Achievements column on
the world page.
Triggers and conditions — what an entry can ask for
Id
Title
Description
Reward
Trigger
Flags
Actions
Contracts
One template is a job a company offers: every goal met in ONE flight, for an advance paid on
accepting and a reward paid on completing. The game asks for the enabled list when it starts
(GET /contracts) and every player's board is drawn from it, so a template added here is on the boards its
tier allows within seconds — and a price edited here applies to the offers drawn from then on, never to a contract a
player has already signed, which carries the figures it was accepted at. Disabling one takes it off every board and
out of every future draw; contracts already under way run to their deadline. The boards themselves — who has accepted
what, and what it is costing them — live on each player's record, in the Contracts column on the world page.
Goals, money and the board — what a template can ask for
Id
Title
Client
Description
Tier
Money
Clocks
Weight
Goals
Flags
Actions
TestFlight releases
Every build shipped to testers, newest first, with the name it went out under and the exact
What's New its testers read. Both are written at ship time from CHANGELOG.md
(tools/release_notes.mjs) and posted onto the build in App Store Connect, which keeps one free-text field per
build behind an API key — so this is the readable copy: the pipeline pushes each build here
(tools/publish_releases.mjs → POST /releases) once the notes are on it, and the log lives in the
server's own data directory, which no deploy overwrites. An entry marked from the changelog was reconstructed from
the testflight-* tags rather than read back off the build, so its wording may differ from what testers saw;
pushing the same build number again replaces it.
Add image puts one picture on a release — a screenshot of what that build was about. It is stored on this server
beside the log (PUT /releases/<build>/image: one per build, PNG / JPEG / WebP / GIF up to 3 MB, anything
larger shrunk here before it is sent) and shows in this list from then on. The picture belongs to the server, so recording
the build again from the pipeline never touches it.