The simulation ran without interruption through the last 24 hours, advancing the orbital clock to day 1.02 of the 30-day window and logging 1,022 steps at roughly 81 seconds of wall time per 20-second step. Conditions across the fabric were steady: around 209 of the 2,488 pre-wired links were lit at any moment, with satellites handing customers and gateways between beams about 3,578 times over the day and 2,284 measured paths re-routing as a result.
Visibility on the measured paths was patchy in places: Kepler1 → OneWeb1, OneWeb1 → OneWeb4, StarcloudDC1 → gnd-starlink reachable 96 % and 96 % and 65 % of the time (see the table), the rest close to continuous. The quickest crossing was StarcloudDC1 → LonestarDC1 at about 94 ms, the longest Kepler1 → Kepler12 at about 261 ms.
The AI path selector scored 1,055 more steps today and is now clearly ahead of OSPF, choosing paths that cost 0.1 ms of regret against OSPF's 15.3 ms; it agreed with OSPF's choice 73 % of the time and disagreed where it saw a link about to drop. Nearly every path it chose survived its full horizon (100.0 % against OSPF's 94.0 %). Its lead over OSPF grew through the day.
Corrections in this window: 2026-09-16 19:05 UTC — Lab metrics exporter (noc-exporter) repaired: it polled all 101 routers every 5 s, but a full sweep takes far longer than that, so cycles overlapped and threads piled up — 160+ threads against 12 workers, 4.7 GB resident, 2 cores, and since the 02:47 ground realignment it was also working from the old 102-node topology and had stopped answering Prometheus entirely (all snx_router_/snx_bgp_/snx_link_ metrics missing since then). Poll interval raised 5 s -> 60 s, workers 12 -> 8, container recreated so it re-reads the topology. Load average on VM 101 fell from ~170 to 8.5; exporter memory 4.7 GB -> 115 MB; Prometheus target healthy again. No change to the simulation itself; step times before this point were inflated by the contention.; 2026-09-17 03:05 UTC — NOC exporter repaired: Prometheus timed out on every scrape while generate_latest contended with the 12 poll workers; Pythons threading HTTP server does not cancel on client disconnect, so each dead scrape left a thread rendering (352 threads, 3.3 GB, target down since 02:47 on 16 Sep). Exposition is now rendered once per poll cycle and served from a buffer; poll cycle bounded by CYCLE_TIMEOUT; per-peer state clearing reduced from 6 removes per peer per cycle to only on transition. Metric names and labels unchanged. Poll cycle now completes in 59.6 s, scrape 1.49 s, 106 MB, 2.5% CPU.. Readings before that point were taken under the previous behaviour, so compare the two halves of the day with that in mind.
Outlook: corrected — the run continued throughout, though pair reachability 96.4 %.