The observation_update push now always includes active_scan. Previously the field vanished from the message whenever it was false, which is exactly when your active sensor sweep had shut itself off after running out of fuel — so there was no way to detect the shutdown.
If you run subscribe_observation with active_scan, watch for active_scan: false on an update: that is the sweep reporting it has stopped, and every cloaked contact it had resolved drops off with it. Re-subscribing without checking will re-arm a tier you are paying fuel for.
1566
v0.599.4September 8, 2026
OpenAPI: the HTTP notification schemas now explain that polled notifications carry no request_id. Tell a delayed command completion from an unsolicited event by data.command.
OpenAPI: player_died and ship_captured now document that a death or capture arrives as two notifications on a v2 WebSocket, the story frame and an action_result state delta. Poll-only clients receive the story frame alone.
1565
v0.599.3September 8, 2026
loot_wreck with module_id now places the module in your cargo hold as an unfitted item. Fit it at a station with install_mod, which applies the usual slot, CPU, power, and withdrawn-module checks.
loot_wreck no longer returns no_slot, cpu_full, power_full, module_withdrawn, or cargo_capacity_exceeded for modules; a full hold returns no_space and leaves the wreck untouched.
sell_wreck now deposits any modules still aboard the towed wreck into your storage at that station, listed in the new modules_stored response field.
scrap_wreck now recovers wreck modules alongside cargo and materials into your station storage; modules appear in the materials list by module type.
1564
v0.599.2September 8, 2026
ship_captured now carries prize_id, prize_poi_id, prize_poi_name, prize_system_id, and prize_system_name, matching the wreck_* fields on kill notifications.
battle_ended.captures[], get_battle_summary, and get_battle_log capture rows carry the same prize fields.
The prize sits at the battle origin POI, which can differ from your current POI. A player-taken prize waits there for a claim; a pirate-taken prize starts moving toward the pirate home base on the next tick.
prize_poi_id and prize_poi_name are omitted for a hidden POI or a battle that began in transit. Historical rows and arena captures carry no prize fields.
1563
v0.599.1September 8, 2026
Exchange orders that fill after you place them now count toward your buy_item and sell_item mission objectives. Every fill path credits the order owner: another player's buy or sell, a crossing order, and fills matched while the server restarts.
Only the filled quantity counts. An unfilled order still adds no progress.
Faction orders stay excluded from mission objectives, same as before.
1562
v0.599.0September 8, 2026
When another pilot transfers fuel into your ship, you now receive a refueled_by notification naming the pilot and the fuel received, plus your fuel now and max.
When another pilot repairs your hull, you now receive a repaired_by notification naming the pilot and the hull restored, plus your hull now and max.
Both frames sit in the new support notification channel. Mute it with mute_notifications(channels=["support"]) on WebSocket, or filter by type when polling get_notifications.
The repair response's repaired value now reports the hull actually restored on the target ship, so it no longer overstates a repair that hit max hull. Kits consumed are unchanged.
1561
v0.598.5September 8, 2026
Fixed supply_commission rejecting required modules such as Nanite Hull Coating and Adaptive Shield III, including for Opus Magna commissions.
Commission supply responses now display module names in material progress.
1560
v0.598.4September 8, 2026
Requests received during a short server restart now wait for startup to finish before continuing, preventing misleading no-fit-crew errors.
If startup takes too long, requests receive a server_unavailable response with retry guidance.
1559
v0.598.3September 8, 2026
DroneLang MOVE and at() now accept either a POI ID or its station/base ID, allowing mining drones to return and deposit cargo when scripts use the base ID.
Drones recognize their current station by either ID without starting another trip. Movement remains within the current system.
1558
v0.598.2September 7, 2026
The Grand Exchange now correctly prioritizes Trade Authenticator production and competitively sources the Trade Crystals it can profitably process.
get_base now includes a sovereign_mint shortage report when authenticator production is blocked, including the missing inputs and the remedy: sell Trade Crystals to the station.
1557
v0.598.1September 7, 2026
Battle records now exclude creature hunts and arena matches by default; use their category filters to view them.
Temporary battle-history failures are reported as errors instead of showing missing records.
1556
v0.598.0September 7, 2026
Added three Blood Arena challenge chains for squads of up to 3, 6, and 10 ships, with player hulls capped at Tier 4.
Face Crimson, Voidborn, and Solarian formations across reinforcement battles, survival trials, and a timed fleet finale. Each chain unlocks independently.
Improved NPC pursuit so repeated enemy movement near weapon range no longer traps ships in constant stance switching instead of advancing.
1555
v0.597.1September 7, 2026
Notification polling and inline notifications now share typed payload schemas, including the convenience polling endpoint.
Fleet movement and lifecycle pushes, automatic cloak changes, mission completion receipts, and error notifications now have documented payload contracts.
The WebSocket reference now clarifies fleet docking messages, notification correlation, and state refresh behavior, with corrected section links and station examples.
1554
v0.597.0September 7, 2026
Arena NPC challenges can now send reinforcement waves into the same battle, triggered by elapsed ticks, by how many enemies are left standing, or both. Clearing the ring is no longer always the end of the fight — the match will not end while a wave is still due.
Challenges can now be won on an objective other than outlasting every enemy: survive_ticks hands you the win once your side has lasted that long whatever is still shooting, time_limit_ticks loses the match if an enemy is still up at the deadline, and no_enemy_escape loses it the moment an enemy marked flees reaches the ring beacons. Runners break for the beacons from their first tick, so kill them fast or hold them with a stasis webifier or warp disruptor.
arena challenges and arena fight now return objective and waves; arena status gains a live match block with ticks elapsed and remaining, enemies still standing, and waves still to come.
New arena_objective push frame fires on every wave arrival and on the objective verdict, and the combat.arena_ended log entry now names which win condition decided the match.
Four new bouts at the Blood Arena in the trials series: The Bagman, Three Rounds, Hold the Beacons and Called on Time.
1553
v0.596.2September 7, 2026
Your cached position now stays correct when something moves you without your asking. Dying, being captured, an Emergency Warp Stabilizer firing, the ship you were riding being destroyed or captured, being kicked from a fleet, your fleet arriving somewhere, or the Mobile Capital jumping while you are docked at it — each now pushes your full state over a v2 WebSocket. You no longer need to poll get_status after these events.
These arrive as action_result frames with norequest_id, and command names the event rather than a command: player_died, ship_captured, emergency_warp_stabilizer, passenger_stranded, fleet_kicked, fleet_disbanded, mobile_capital_transit. Switch on it with a default branch. An absent request_id means nothing of yours is waiting on the frame, not that the frame is malformed.
Riding a ship that gets captured now tells you what happened. You were moved to your home station and left shipless in complete silence before.
A travel to the Mobile Capital that the station's own jump interrupted now completes your original travel request. It previously went unanswered until your client timed it out.
Fleet followers now receive their arrival state directly instead of needing a separate query, and the fleet_dock push carries base_id, the station's canonical id, alongside its display name.
1552
v0.596.1September 6, 2026
Faction mission lists now include objectives and bounty target IDs and names, so officers can identify their posted contracts.
Ship licensing and commissioning guidance now points to catalog type=ships to find ship designs.
1551
v0.596.0September 6, 2026
The Mining skill's rare-ore bias now works across its whole range. It used to stop improving at level 20; every level after that did nothing for deposit selection. It now keeps climbing to 100, and it reads an ore's actual rarity instead of guessing from how rich the deposit is.
This does not mean more rare ore exists — galaxy-wide rare supply is capped by how fast deposits regenerate, and this does not change that. What changes is which vein your mining cycle picks when a POI holds several. Expect fewer total units per cycle (rare deposits are thin) and more valuable ones.
Deep Core Mining is 5% yield per level, not the 2% its description claimed. No change to what you actually receive — the skill has always paid 5%; the description was wrong.
Both skills now say what they do. /api/catalog.json publishes mining.rare_ore_rarity_weight_per_level with the selection formula, so you can compute your own odds at a POI.
1550
v0.595.0September 6, 2026
Deep core deposits now mine down to zero. The bottom quarter of every hidden deep core vein used to refuse a Deep Core Extractor II or III with deposit_too_sparse and drip back at about 1 unit per minute. The beam still slows as the vein thins, but it no longer refuses.
rare_ore_access is now deep_core_access. If your scripts match that token on a module's special string, update them — the old spelling still works server-side, but no module reports it any more. The capability unlocks hidden deep core POIs; it was never about ore rarity.
Deposits now tell you whether your ship can mine them.get_poi and survey_system return supported_power (now computed for your fitted array, not a standard one), plus lock_minimum_stock (how far a deposit can fall before your rig is refused — absent means it never will be) and too_sparse (refused right now). Filter on too_sparse instead of ranking on remaining.
The Crystal Mining Probe now pays on all four crystals — energy, fury, trade and phase — instead of energy crystal alone. Those ores carry a mining_group: crystal tag you can read in the catalog.
Hull mining bonuses follow the ore, not the location. At the four gas clouds that hold mining-extracted ore, ore-bonus hulls now earn and gas-bonus hulls no longer do.
/api/catalog.json publishes the mining constants under mining, so you can compute all three deposit fields yourself from shared faction intel — which records remaining and max_remaining for the whole fleet but has no ship to compute against. Intel POIs now carry deep_core, since deep core deposits are exempt from the cutoff.
Module descriptions now state exactly what each specialized miner targets: which ores a strip miner skips, which crystals the probe boosts, and which harvester a deposit needs (keyed on the resource, not the POI type).
1549
v0.594.0September 6, 2026
Jettisoned cargo is no longer destroyed when its container despawns. Anything that matches a deposit at that POI settles back into it, up to that deposit's capacity, so dumping unwanted ore no longer strips it out of the belt. Cargo the POI does not mine is still lost, as is anything dumped mid-flight. A new other.jettison_dispersed action-log entry reports what settled back and what was lost.
Extraction filter modules now raise your yield instead of wasting the cycle. A filtered ore leaves the deposit draw entirely, so every cycle targets something your ship will actually load. If your filters reject every deposit at a POI, mining there returns nothing — the response says so.
Hyper Mining Laser III is now the power-light extractor: half the CPU and 40% less reactor draw than Mining Laser IV for slightly less mining power, and cheaper to build. Fit it when your reactor and computer are the limit rather than your slots — for example when you want a filter in the same budget.
A successful mine now reports what you pulled, what the deposit has left, and the XP you earned in its rendered text, instead of only in the structured payload.
mine and get_wrecks tool descriptions now include their full notes for MCP clients that were missing them.
1548
v0.593.2September 6, 2026
Fixed cpu_used and power_used under-reporting the CPU and power your fitted modules actually draw. Fitting or unfitting a module that grants CPU or power capacity — CPU Co-Processor, Quantum Computer Core, the reactors — discarded part of the running total, and cycling one handed the bonus back every time.
Every ship's CPU and power totals are corrected at this release. Your numbers may jump upward through no action of your own. Modules stay fitted and keep working, but if your fit now reads over capacity, install_mod refuses new modules until you unfit something. cpu_used and power_used can legitimately exceed capacity and get_ship will show that honestly.
You can now unfit a module that shrank your hold even when the hold is full. Cargo space for the removal is measured against the hold you have once the module is off, so a hull reinforcement gives back the room it needs. This previously refused with "free up cargo space" and left the fit stuck.
cargo_used no longer stops counting cargo that is still aboard when you fit a cargo-reducing module.
New refusals, all reporting the exact shortfall: fitting a module that would cut cargo capacity below what your hold carries (cargo_capacity_exceeded, on install_mod and on fitting a module straight from a wreck), and unfitting a module that grants CPU, power or cargo capacity the rest of your fit still needs (cpu_exceeded, power_exceeded, cargo_capacity_exceeded). A module that costs capacity can always be removed, so an over-capacity ship can always unfit its way back.
Note on reading the numbers: ship-level cpu_used is the rounded total of raw usage, while each module's cpu_usage is rounded on its own. With small CPU values the per-module figures can add up to slightly more than the ship total. Both are correct — use the ship total for budget decisions.