Performance

Build cost

How many static pages Warconomy prerenders, attributed by route family — computed from the route and static-param registries. Versioned routes dominate; each release adds a fixed number of pages. Reporting only, static and deterministic.

static reference · data June 5, 2026

Warconomy prerenders about 2286 static pages — 558 HTML and 1728 machine-readable. Versioned routes are 57% of the total: each of the 157 materialized versions generates 12 pages, so a release that freezes a version adds roughly 8 pages. The largest families are Versioned machine endpoints (per materialized version), Record history pages, Static machine endpoints + schemas + distributions.

  • 2286 static pages; versioned routes ~57%.
  • 12 pages per materialized version; ~8 added per release.
  • Machine-readable at /performance/build-cost/data.json.

Pages by route family

FamilyItemsHTMLMachineTotalGrowth
Versioned machine endpoints (per materialized version)157012561256per version
Record history pages139139139278per record
Static machine endpoints + schemas + distributions2260226226per feature train
Indicator detail pages5911859177per observation
Static HTML pages (catalog)1601600160per feature train
Source detail pages346834102per source
Versioned HTML detail pages (latest N only)1040040capped
Entity detail pages (chokepoint/commodity/conflict/sanction/dashboard/series)3030030per entity
Methodology contributor guides3336fixed-ish
Dataset example payloads6066fixed
Category JSON endpoints5055per category

Performance report: /performance · machine-readable: /performance/build-cost/data.json.

Static route budget ok

Soft (warn) and hard (fail) budgets per route family and for the overall page count. A warning is a nudge to consolidate; a failure only triggers on an extreme regression (e.g. the versioned-HTML cap being removed). The build fails only on a hard breach — enforced by npm run budget:check and the data audit.

Budget lineActualSoftHardHeadroomStatus
Total static pages2286300060003714ok
Pages per materialized version1212208ok
Pages added per new frozen version88168ok
Versioned machine endpoints (per materialized version)1256240040002744ok
Record history pages2786001200922ok
Static machine endpoints + schemas + distributions226400900674ok
Indicator detail pages177400900723ok
Static HTML pages (catalog)160300700540ok
Source detail pages102300700598ok
Versioned HTML detail pages (latest N only)40448040ok
Entity detail pages (chokepoint/commodity/conflict/sanction/dashboard/series)30150400370ok
Methodology contributor guides6408074ok
Dataset example payloads6408074ok
Category JSON endpoints5408075ok

Validation performance (payload-import pass)

The frozen version payloads (~157 versions) are now lazy-loaded one shard at a time instead of eagerly imported, and metadata-only surfaces read a committed manifest rather than payload bodies. This removed the collect/transform cost that dominated every test run. Figures are representative measured benchmarks (single-worker; machine-dependent), not real-time.

MetricBeforeAfter
Full test suite (wall)~1253s (20.9 min)~162s (2.7 min)
Full test suite (collect/transform)~1058s~46s
Data audit (audit:data, wall)~1235s (20.6 min)~134s (2.2 min)
validate:release (lint+test+audit+build)~46.7 min~11.7 min
Importing dataset.ts (collect)~45.9s~3.2s
test:fast / audit:fastn/a (collect-bound)~12s / ~11s
Static build (prerender)~2.6–3.1 min~2.9 min (unchanged)

Still loads payload bodies (by design): the versioned data.json/diff.json routes, record/provenance history, and the payload-integrity test group (npm run validate:snapshots). The remaining build cost is static prerender (route count), bounded by the route budget above. Next options: precompute record version-appearances and the provenance snapshot summary into the manifest so the record/provenance pages render body-free too.

Related Warconomy pages