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 2539 static pages — 702 HTML and 1837 machine-readable. Versioned routes are 52% of the total: each of the 161 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.

  • 2539 static pages; versioned routes ~52%.
  • 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)161012881288per version
Record history pages155155155310per record
Static machine endpoints + schemas + distributions2710271271per feature train
Static HTML pages (catalog)2562560256per feature train
Indicator detail pages5911859177per observation
Source detail pages5010050150per 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 pages2539300060003461ok
Pages per materialized version1212208ok
Pages added per new frozen version88168ok
Versioned machine endpoints (per materialized version)1288240040002712ok
Record history pages3106001200890ok
Static machine endpoints + schemas + distributions271400900629ok
Static HTML pages (catalog)256300700444ok
Indicator detail pages177400900723ok
Source detail pages150300700550ok
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 (~161 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