Please use a larger screen to view this site.
Everything the dashboard forecasts, explained without the math. The detailed methods — every model, every failed attempt, every number's origin — live on the Attacks and Defends pages. Short version: attacks are solved; defends are one dice roll wrapped in mechanics we've fully mapped.
Tracking 5,099 defends and 926 attacks across 160 seasons · live · refreshes hourly
Everything on this page falls into one of two boxes, and the site never mixes them up — one is mechanical (a game rule we measured, worth a real countdown), the other requires actual prediction (a guess that had to beat a pass mark we wrote down before testing, worth a time window at best):
| 🔩 Mechanical (clocks) | 🎲 Statistical (models) | |
|---|---|---|
| What | Assault trigger at full points · 48h assault timeout · counteroffensive fire · defend chain · assault gate | Assault-start ETA (pace) · free-wave timing · which faction is next |
| Typical error | ~0 — minutes (48h timeout: 544/544 exact; counterattack within 10 min: 467/474; replayed against history it beat the statistical model 0.0h to 9.2h during assaults) | Assault ETA: passed the mark (3–4× better than just guessing the average, so it ships as a real ETA). Free waves: ±8h typical on a ~44h cycle — five attempts, mark never met, ships as a window |
| Honest caveat | The counteroffensive is conditional: it fires only if the assault fails (~59% of the time — the pace verdict tells you which way it's leaning) | A window is a window: "~20h (14-32h) · 63% within 24h" — we've checked against history that those percentages actually come true at those rates, and it's never dressed up as a countdown |
A homeworld assault is not random. It fires the moment a faction's campaign bar fills — the instant the last of its 10 sectors completes. We've checked this against every attack across ~160 recorded wars: it's a hard trigger, not a tendency.
That turns "when is the next assault?" into a school problem:
time left = points still needed ÷ how fast points are moving
The dashboard measures the pace over the last 24 hours, corrects for how old the latest reading is and for the weekly rhythm (weekends run faster), and shows the answer as a window rather than a single number — asymmetric on purpose, because arrival = work ÷ pace, and a slowdown delays the arrival more than an equal speedup hastens it. We replayed this forecast against every recorded war as if it were running live, and it beat the pass mark we had written down beforehand — which is why it gets to be a real ETA on the dashboard.
The same division powers the sector ETA on faction cards — aimed one sector boundary early instead of at the campaign's end (details on the Attacks page).
Full method: pace windows, staleness anchoring, why the window is lopsided →
Every live event — a 150-minute defend or a 48-hour assault — resolves one of exactly two ways, and they end at different times: a loss runs out the clock (the countdown on the card is the loss time), a win ends early, the moment the points fill (rule 6 below). So the cards don't show a bare fill ETA; they name the outcome:
The math is one line — at the average pace since the event started, does the bar fill before the deadline? — and it's the same comparison that drives the ▲/▼ pace arrow on the right of the bar, so the two can never disagree (an automated test keeps them locked together). Replayed over every completed event with minute-level progress history (130 events, 2,193 rendered moments), the verdict calls the final outcome correctly 91.6% of the time, and it sharpens as the event ages:
The shaded band is why the cards stay silent for the first quarter of every event: that early, the average pace is still dominated by whatever happened in the opening minutes (~72% accuracy — barely better than a blind guess), so the verdict is hidden rather than shown flickering. Past 60% elapsed it's calling 96–99% correctly.
What the shipped functions say right now:
live · refreshes hourly · computed by the same functions the dashboard cards run
Defend waves look random. Most of the pattern turns out to be machinery, measured across 5,000+ recorded defends:
So the dashboard's Predicted Wave card runs two separate forecasts, because these are two different problems. No assault running: it looks up every moment in ~160 wars that looked like this one and shows the middle estimate with the middle-50% window around it — "~20h (14-32h) · 63% within 24h" — percentages that verifiably come true at those rates, never a fake countdown. Assault running: the dice are paused (mechanic #3), so the band steps aside and the card shows mechanic #2's deterministic clock instead — "counterattack ⟨time⟩" — phrased through the assault's live pace: "behind pace" means expect it, "on pace to succeed" means only if the players falter.
Full story: five attempts, the placebo discipline, the reverse-engineered scheduler →
Every rule below is confirmed against the full recorded history (the exact counts, and the committed script that re-verifies each one, are on the detail pages):
Prior art credited: much of the mechanic set was independently inferred by
the community — notably
this Steam guide
— which we treated as hypotheses and verified against the event log (its
48h/2h30m durations, the assault gate, and the region-9 counterattack all
confirmed; exact numbers on the Defends page). Original findings
(counterattack timing, victory release, the scheduler's gamma shape) are
ours, each reproducible from
scripts/analysis/.
Data, not cleverness — and it matters which data. The game only started recording minute-by-minute event progress a few wars ago, so anything that needs that detailed footage is working from a handful of examples, while everything built on the ~160-war event log is already as good as it can get. Where each forecast stands:
| Forecast | Status | Waiting on |
|---|---|---|
| Counterattack clock | Final — it's a game rule, exact to the minute | Nothing |
| Free-wave window | Final — the randomness is the game's, not ours; five modeling attempts confirmed a tighter window isn't hiding in more cleverness | Nothing — the honest window is the ceiling |
| Outcome verdict (Holds/Falls wording) | Works today (91.6% right, measured on 130 events) | Nothing for the wording itself |
| Verdict → real percentages ("this assault will very likely fail") | Held back — the pattern looks decisive but we've only watched 8 assaults in enough detail, and this project has been fooled by small samples five times | ~30 closely-watched assaults (#487) — grows by ~2 per war, for free |
| Assault-start ETA | Good (3–4× better than guessing) — could sharpen modestly | A few more high-detail wars (#481, #477) |
| Sector ETA | Single estimate only — an honest range needs measuring | More high-detail wars (#484) |
Nothing above gets worse by waiting — the shipped forecasts already use everything the current record supports. The rows marked final are done; the rest upgrade themselves as wars end.
This hub and the detail pages carry live figures refreshed hourly from the
database (labeled as such); backtest verdicts everywhere are static, each
reproducible from a committed script in
scripts/analysis/.