v0.1.25 (Early Access)
New
Security
- The border security gateway is back on sale, and it is all hundred-gig now. The biggest inline firewall you can buy was pulled from the shop a while back because it had no model to render, so the best box actually available to you was the twenty-five-gig one — eight of them to cover a full colo. Its model is finished, so it is back, and it has been rebuilt as four hundred-gig ports rather than a mix of hundred-gig on the internet side and ten-gig on the fabric side. Both sides now bond to two hundred gig, so nothing is throttled by the slow half of the box; deep inspection runs at one hundred and sixty gig, and that is the number to size against. It unlocks with the Data Center in both the campaign and The ARM Race.
Fixed
Graphics
- Fixed a hard freeze on AMD graphics cards at Ultra. The game already knew that this family of card can lock up under the highest global-illumination setting, and already had a guard to step it down a notch. The guard only recognised the open-source Linux driver by name, so on Windows it never once fired: the same card, running the ordinary driver, was handed the exact setting the guard exists to prevent. It now recognises the card by its maker instead of by one driver's name. If you were picking Ultra and the game stopped responding until you restarted it, that was this. The same setting is the most likely cause of the flickering some of you saw on loading a save or turning the lights off, so that should improve too.
Cables
- A cable you pick is now the cable you get when splitting a fast port into slower ones. Running from a 100G port to a 25G one splits the fast port into lanes, and that path threw away your choice of cable and quietly picked its own cheapest option. Choose an optical cable and you would watch it commit as direct-attach copper, in the colour you asked for, with the description changed underneath you. Your colour survived because only the cable type was being discarded. If the cable you have picked cannot carry the speed or reach the distance, you are now told so rather than handed a different one without a word.
Internet handoffs
- A handoff port with no circuit no longer shows as live. You can patch the first handoff before you subscribe to anything, and once patched it lit up and reported traffic as though it were carrying your internet, because the indicator only ever asked whether the far end was powered. Buying a line is what makes a handoff live, and that is now what the port shows. The same applies across a whole box: subscribing one circuit no longer lights every port on it, which is what you would see in a second zone part-way through being built.
The ARM Race
- GPU customers no longer turn up in a run that cannot buy a GPU machine. The ARM-only rule filters customers by the processor they need, and a customer wanting a graphics card usually does not mind which processor it sits beside, so those enquiries sailed straight through. Every GPU machine in the catalogue is hidden by that same rule, so the run was generating work it also forbade you from ever taking on. Loading an existing save clears any such enquiry still waiting in your list, and lets go of any GPU customer you had already signed, free of charge: no termination fee and no hit to your reputation, since the run offered you a contract it was never going to let you fulfil.
Servers and racks
- PSU status lights now follow the cord you actually plugged. Each power supply has its own light, but they were driven by a count of how many cords were connected rather than by which inlets those cords were in. So one cord always lit the first light no matter which supply you plugged, and cording the second one lit the first anyway. Each light now reads its own inlet.
Storage
- A customer who buys object storage and a managed database no longer loses their storage every time you load. A managed database keeps its own automatic backup, and the object storage you sell is a separate product. Older saves kept the two in the same place, so loading a save runs a step that pulls them apart. That step was running on every save rather than only on the old ones that still needed it. On a current save there was nothing left to separate, so it took the customer's real object storage and filed it as the database's backup, overwriting the backup already sitting there, and the game then built them replacement storage from nothing. Only customers holding both services at once were affected. If a tenant's object storage looked like it kept resetting itself, or the machines listed as holding their data never matched what you had set up, that was this. The step now runs only on saves old enough to need it.
The ops console
- Clicking inside the console no longer throws your cursor to the middle of the screen. Clicking a concept in the codex, or a network in Isolation, could snatch the pointer back into mouselook and drop it dead centre, in the middle of whatever you were doing. Two separate bits of code recapture the mouse when you click back into the world, and only one of them was checking whether a panel was open first. A click that landed on a live button was fine; one that landed a few pixels off it, on the padding or the row behind it, fell through to the other one. Both now check.
Where your services run
This one is a rebuild rather than a fix. Deciding which machine a workload runs on was done seven different ways depending on the service, and each one had drifted from the others. Everything now goes through a single path, which is what makes the rest of this list possible.
- When something will not fit, the game now tells you what is actually blocking it. If a customer needs their copies on separate machines and you do not have enough separate machines, it says so, with the numbers: "needs 7 separate machines, only 4 available". Previously it reported free memory or disk instead, so you would look at a fleet with plenty of room, conclude the game was broken, and buy hardware that did not help. This was the single most common complaint and it was the same underlying bug in five different places.
- "No room" now distinguishes no room anywhere from no room in that customer's segment. If a tenant is confined to three machines and all three are full, it says so and names the rest of the fleet as unavailable to them, instead of telling you the roomiest server has 2 GB while a 200 GB box sits idle two racks over. Those are different problems with different fixes.
- Copies stay spread out when you move things. Anti-affinity was only ever applied when a workload was first placed. Migrating one by hand, draining a machine, or losing one to a failure could quietly pile a customer's copies back onto a single box, with nothing said. It is now honoured everywhere. It still never blocks you: if the only place left is beside a sibling, the move happens and the customer is flagged as no longer fully spread, rather than the workload being stranded.
- Fault domains follow your actual cabling. "Separate racks" was a guess that two machines in different racks did not share a failure. Your own cabling makes that untrue: a host can be wired to a switch in another rack. Spread is now worked out from the real network path and the real power feed, so two copies that would die together are treated as together no matter which racks they sit in. The wording changed with it, from rack jargon to what actually survives: separate machines, separate switches, separate power, separate zones.
- Losing a machine now moves everything on it, not just the virtual machines. Object storage shards, CDN points of presence, Kubernetes workers and load balancers used to stay attached to a dead server, still counted against its capacity, until an unrelated sweep noticed up to an hour later.
- Machines can no longer be quietly overfilled. Every service needs a small agent on each machine it runs on, and that agent was added after the placement decision rather than counted as part of it, so a server could end up committed past its own capacity with nothing said. Control-plane placement had no capacity check at all and could be put on a completely full machine.
- Serverless now shows up in a machine's usage. Warm function containers consume real memory and CPU but were counted against a fleet-wide total rather than the machine they were on. A host fully occupied by them read as empty in the usage bars, in the contention warnings, and to the placer about to put something else there. It also meant they drew no power.
- Load balancers spread across your fleet. They were ranked by free disk space, which they do not use, so one machine won every time and sat pegged while the rest idled.
- Maintenance mode now actually stops new work arriving. Cordoning a machine was respected for virtual machines and Kubernetes, but object storage, CDN, load balancers and serverless carried on being placed onto it while the drain you had just started was moving that same work off.
- Moving storage no longer leaves the old machine claiming the customer, and a CDN point of presence can no longer be moved on top of another one in the same region.
- The reserved headroom setting moved to the Capacity page, where it belongs, and is now a property of each machine rather than a virtual-machine setting that happened to govern the whole fleet. Your existing setting is carried over.
- Serverless work is placed like everything else. Containers were put on machines by their own separate rule that counted how many containers a machine was already running rather than how full it actually was, and checked room against the whole fleet instead of against the machine it was about to use. So a box could be pushed past its own memory while the fleet looked fine. Selling a machine could also silently change where later containers landed.
- A machine reserved for one service no longer quietly takes another's data. If you set machines aside to run a particular service, object storage was the one thing that ignored you and put shards there anyway.
Deciding whether to take a customer
- "Can you serve it?" now actually works it out. The enquiry card showed "After accepting: vCPU 0%, Memory 0%" and told you nothing was in the way, for any customer who was not buying plain virtual machines. It only ever sized virtual machines; a database, Kubernetes, object storage, CDN, serverless or load balancer customer was measured as needing nothing at all, so the card said yes to everyone. It now sizes every service in the bundle.
- The card counts the copies you are actually promising. A customer asking for replicated service needs two of everything, and the card was quoting you the price of one.
- There is a disk meter. A customer asking for 821 GB was shown two meters, neither of which was disk, and the verdict never changed no matter how full your storage was.
- Memory and processor headroom are measured the same way. The processor reading counted only machines that were actually up and usable; the memory reading counted every machine you owned, including ones that were switched off or not cabled up. So memory always looked healthier than it was.
- "Comfortable" is no longer printed in red. The words and the colour were worked out from two different things, so they could disagree. They now come from one answer, and both are the engine's, not the screen's own guess.
Moving a workload
- The list of machines you can move to is now the engine's answer, not the screen's guess. The picker worked out eligibility itself and checked about three of the thirteen things the engine checks, so it offered machines that were then refused, and it hid machines that would have been fine. It now asks the engine about every candidate and shows you what it said.
- A machine that cannot take the workload tells you why, in the same words the customer page uses, instead of being silently missing from the list.
- A move that would put two copies on one machine is offered in amber rather than hidden. You named the target, so you are told what it costs rather than refused.
Diagnose and customer pages
- Diagnose and the customer page no longer disagree about how much of a service is running. Diagnose read a figure that only refreshed for virtual machines and databases, so for object storage, CDN, load balancers and Kubernetes it could be hours out of date while the customer page two clicks away showed the live one.
- A service short of capacity no longer describes itself as fine. The counts on a service row were read live but the wording beside them came from that stale figure, so a row could read "3 short" and "Ok" at the same time.
- Diagnose no longer reports a customer as all clear while one of its own checks is failing. All clear was decided by whether Diagnose had managed to name a single most-likely cause, not by whether anything was wrong, so a customer with a red failing-requests line could still be counted as healthy.
- Migrating a workload no longer breaks the picker. Opening the migrate list crashed outright for any machine without an accelerator.
- The customer page now shows what is wrong with the numbers attached. Problems were written out as finished sentences by the engine, so the page could only repeat them. It now receives the facts (what is needed, what there is) and writes the line itself, which is also what lets it be translated.
- A security breach is no longer reported as an uptime failure. The two share nothing: a compromised customer can be perfectly available, and an unavailable one need not have been broken into. Diagnose was reading the intrusion flag and calling it an SLA breach.
Customers and contracts
- Customers who need more storage than one copy are sized correctly before you sign them. A customer wanting triple-redundant storage was checked against the space for a single copy, so they read as comfortable, signed, and immediately raised an under-replication alert.
- A customer who requires multiple zones now actually gets placed across them. The requirement was checked when you signed them and then never used again, so the contract line stayed red with nothing you could do about it.
- Archetype redundancy preferences are now real. They were authored throughout the game's content and never read by anything. They are a preference, not a rule: you can knowingly run a customer below their preferred redundancy and be told, rather than being blocked.
Incidents
- Contention and MAC-flapping alerts can now clear after a reload. Both were tracked in memory that is rebuilt on load, so an alert saved while one was active could never resolve and sat in the alarm strip permanently.
- A failed component now clears when the component is repaired, rather than when the whole machine goes down, which for a disk or a fan it never does.
- Incidents no longer overwrite each other after loading an older save. The incident numbering restarted from zero on load and silently replaced open incidents that already held those numbers.
- Alerts stop flapping at the capacity line. A load sitting exactly at capacity opened and closed the same incident on alternating ticks, each cycle posting to the channel and writing a codex entry.
- Tearing down a facility now closes its incidents properly instead of discarding them, so the post-mortem and history survive.