Workload moves now run over time through one queue you can watch and control. Network and billing figures are corrected throughout: bonds, dead internet lines and unit conversions all read wrong before.
Added
Moving workloads
- Moves happen over time, and you can watch them. A move copies storage to the new server and then switches over, and shows each step as waiting, copying or landing.
- Every move goes through one queue. That covers a move you make by hand, a maintenance drain, a new customer's servers and a failed server's restarts.
- A failed server's workloads jump the queue. They restart ahead of everything else and come back everywhere at once. Only a workload with nowhere to go is lost.
- A move never slows customer traffic. It takes only capacity nothing else is asking for, so a large copy pauses the moment a customer's request needs the line.
- Every move appears in a list as it lands. Each entry names the workload, where it came from, where it went, and why one that could not move stayed put.
Spread rules
- The Deployment tab tells you what one failure would take out. It names the worst case in plain numbers, such as "If Zone 1 fails, 20 of 26 stop", and updates before you commit.
- Every service now spreads by one rule. Virtual machines, Kubernetes workers, object store shards and database copies all follow the stricter of the contract and your own setting.
- You can see a customer's spread request before you sign them. The prospect card states it, and the Deployment tab shows it beside your setting so you can see which one binds.
Hardware
- A 400G security appliance goes on sale at the campus. It forwards a terabit and inspects 400 Gbps, more than double what the border box handles.
Fixed
Moving workloads
- A move that gets refused now tells you. Cordoning a machine while a workload is still copying to it used to stop the move silently. It now reports as stuck, with the reason.
- A move that can find no route tells you as well. It used to give up out of sight after repeated failed attempts, leaving the workload where it started.
Network
- A busy trunk between zones keeps one incident. Its elapsed time used to reset and its load figure jump whenever the busier direction of cross-zone traffic changed over.
- A split port reports the speed its leads can actually carry. A 40 Gbps port fanned into four now reads 10 Gbps per lead rather than 25, so its saturation warnings arrive when they should.
- Traffic now uses every lead in a bond. Server-to-server transfers, Functions traffic and switch-to-switch trunks each used to run over a single cable, so a bonded link moved at one cable's speed.
- A bought line that was never patched in reads dead everywhere. It no longer inflates your totals or growth room, and no longer passes as backup when a carrier cuts your real line.
- Free internet capacity reads right on every line. Two idle lines used to show zero free. The game now reads each line's real capacity directly instead of inferring it.
- Congestion stays where it happens. A full cable no longer alarms workloads that never touched it, a busy server no longer drops a neighbour's requests, and an idle link no longer inherits a switch's load.
- East-west traffic no longer reads zero during an attack. The game used to work it out by subtracting internet traffic from the total, which a blocked flood collapsed. It now measures the traffic directly.
- A switch's traffic chart counts server-to-server traffic. It followed the uplink only, so a switch busy moving traffic between your own servers stayed flat while its ports showed load.
- Traffic under 1 Gbps shows its real number. The wallboard used to round it down to 0.0 no matter how much was moving.
- A security appliance reports the speed it can deliver. Its forwarding readout quoted the raw chip rating even when the internet lines behind it were narrower, so it disagreed with the warning beside it.
- A modular switch's fabric meter counts the cards it has. The bar read the chassis nameplate instead of the fabric cards seated, so it showed room while the switch was already full.
- A breakout trunk can no longer promise more bandwidth than its port carries. The shared pool reported a stale figure that exceeded what the physical cage carries.
- The game now counts both gateways when two land in the same zone. The second one used to disappear from the total instead of adding to it.
- A bond refuses a ninth lead. Adding one more cable than a bundle can carry fails at once, and the game shows you why.
Customers
- Workloads land on separate machines by default. A new customer no longer arrives on one machine with an empty Deployment card, and that default never costs goodwill or leads to probation.
- The game judges a customer only on what their contract asks. Setting a stricter spread yourself no longer marks their requirements unmet or puts them on probation.
- A spread promise counts as a share, not one copy per place. Twenty workloads across two zones means ten each. It used to demand twenty separate zones and report short forever.
- The Deployment tab and the Health page agree. Both read the contract the same way, and an unmet requirement names the spread level in plain words.
- Rebalancing reports what it did. Pressing Apply used to say nothing moved while it was moving them, because two instructions raced each other.
- Workloads move between racks whose networks depend on each other. The move used to stall because it found no route. It now completes, and the tab warns that a failure there takes both.
Billing
- Traffic and billed egress use the correct network unit. Live figures fall about 2.4 percent and billed egress rises about 4.6 percent. You were being under-billed.
- Content delivery, object storage and load balancing now bill correctly too. Their egress was under-charged by about 4.9 percent. Upstream transit cost for the same bytes rises with it.
- A quote matches the bill it turns into. Every service projected its egress with the wrong unit, so quotes read about 4.9 percent under what the meter actually charged.
- A busy service stops inflating your line usage. Demand a machine could never deliver used to reach the upstream meter, so a healthy line could read saturated.
- A service that stops serving bills once more, then nothing. Residual billing used to continue past the point a service went dark, so it charged for traffic that never left.
- Upstream transit cost follows the bytes you deliver. Under congestion, cost stayed high while revenue fell, so your margin read too low. Both now use the same basis.
- Money and time read the same on every panel. Revenue matches between screens, elapsed time reads one way, and a negative amount shows its minus sign before the dollar sign.
Notes
- Your saves load, but new ones do not go back. Saves from v0.1.66 and earlier open normally. The save version is now 57, so a game saved here will not open in an older build.
- Per-device traffic counters left saved games. They never appeared on any screen, so nothing you can see changes.
- Client and server must both be on v0.1.67. The wire moved, so a v0.1.67 server refuses a v0.1.66 client and the other way round.
- Traffic and billed-egress fields changed meaning, not shape. `egress_gbps`, `ingress_gbps` and billed GB now use the network's decimal convention, so the same field can report a different number for identical bytes.
- Upstream transit cost changed basis. `CostKind::TransitEgressGb` now meters bytes that reached the wire rather than the projected figure, so network cost reads differently under saturation.
- `forwarding_ceiling_gbps` now follows the WAN chain for security appliances. It used to read the raw chip rating even when the internet lines behind it were narrower.
- A switch's totals now include its server-to-server half. `total_egress_gbps` and `total_ingress_gbps` add it. `egress_gbps` and `ingress_gbps` are unchanged and stay uplink only.
- A server's network alarm fires only for its own port. `HostNicSaturated` used to fire, and inflate its shortfall, from a bottleneck further downstream.
- A dead link reports no throughput. Every published port and device rate reads absent once traffic stops, where it used to hold a tiny stale value forever.
- New fields for spread and moves. `east_west_gbps`, `edds[].status`, `fault_ask_grain`, `fault_ask_max_share_pct`, `spread_grain_in_force`, `contract_grain`, and `spread_repair.moves[]` carrying `unit_name`, `from_domain`, `state` and `progress_pct`.
- Two new events. `WorkloadMoveLanded` fires when a workload lands, and `WorkloadMoveStuck` fires when one cannot move, with the reason.
- Five unread fields are gone. `switches[].uplink_capacity_gbps`, and `appliances[].wan_ingress_gbps`, `wan_egress_gbps`, `lan_ingress_gbps` and `lan_egress_gbps`. Nothing on any console read them.
- The ninth-lead refusal has a stable code. `lag_max_members`, with the message "A bundle can carry at most 8 leads at once. Unplug one before adding another."
