Appearance
Performance Budgets
Recorded numbers and the budgets enforced against them for R-026.
| Record | Purpose |
|---|---|
| Budgets | Separate deterministic regression gates from controlled-host timing |
Measured
Node 24.19.0, built output, warm — one unrecorded warm-up followed by one recorded sample on the release development machine, in milliseconds. These legacy tests intentionally enforce regression ceilings rather than statistical latency claims.
| Nodes | Parse | SVG | |
|---|---|---|---|
| 100 | 0.7 | 0.8 | 0.9 |
| 500 | 7.0 | 2.2 | 3.6 |
| 2000 | 13.2 | 4.5 | 12.2 |
Each graph is fully connected in a chain, with a position and a labelled edge per node, so the numbers cover the geometry and attribute paths rather than bare declarations.
Enforced
| Operation | 100 | 500 | 2000 |
|---|---|---|---|
| Parse | 100 ms | 400 ms | 2000 ms |
| 100 ms | 400 ms | 2000 ms | |
| SVG | 200 ms | 600 ms | 3000 ms |
The budgets sit far above the measurements on purpose. CI timing is noisy and a flaky budget gets deleted rather than fixed, so these are sized to catch an order-of-magnitude regression — an accidental quadratic in the id allocator, say — not to police milliseconds. Two shape assertions do the finer work: a tenfold increase in node count must cost well under a hundredfold, and a document whose labels all derive the same id must not degrade, which is the case that would expose a bad allocator.
Shared ELK and editor interaction gates (0.2.4)
The shared layout engine has separate 20-sample cold and warm series for connected 100, 500, and 2000-node fixtures. Both series enforce nearest-rank p95 ceilings of 500 ms, 2 s, and 10 s respectively; a 200-to-2000 warm-series growth ratio must remain below 30. A separate production Playwright path uses 500 positioned nodes and no edges, one warm-up, then 20 equivalent-state node drag and 20 zoom samples. Both input-to-double-animation-frame p95 values must remain at or below 50 ms. The controlled-machine performance gate is serial and has zero retries; GitHub-hosted shared runners are non-authoritative for these hard timing limits.
The exact fixture, raw samples, environment, and calibration rationale are in dev/archive/releases/0.2.4/slice-60/performance-calibration.md in the repository.
What is not budgeted
Selection, connection, waypoint, keyboard-authoring, and text-edit timing have no hard budget; their behavior stays covered by functional tests. Public viz, Node, and MCP layout remain direct calls. Only reference-editor initial/reflow layout uses the abortable worker, so this release does not imply a new public asynchronous or cancellation contract.
Run the legacy gates with npm test -w @coral-viz/language and npm test -w @coral-viz/render. Run the focused gates with the render layout-performance.test.ts and root test:e2e:performance commands on the recorded controlled release machine. Deterministic functional CI remains separate.