ferrum-bench-core — canonical schema, metric aggregation, and
variance reporting for ferrum's bench and bench-serve commands.
Locked by docs/bench/PLAYBOOK.md § 7. Do not invent variants;
producers and consumers (bench, bench-serve, compare-commits,
visualizer, dashboards) all build against the types here.
Quick map
- [
BenchReport] — top-level: one bench cell, aggregated acrossn_repeats - [
Scenario] — closed-loop / open-loop / shared-prefix / cli - [
MetricSet] — p50/p75/p95/p99 of one latency metric - [
ScalarStats] —{mean, stddev, ci95_hw}([stats] module) - [
Env] + [EnvHash] — apples-to-apples cell identity ([env] module) - [
ProfileEvent] — locked structured profile JSONL envelope ([profile] module) - [
compute_metrics] — the one aggregator both bench CLIs call - [
arrivals] module — Poisson inter-arrival times for open-loop
Determinism notes
- JSON keys are emitted in struct field-declaration order; field order is part of the locked schema and should not change.
BTreeMap(notHashMap) for any dynamic key-value bag.- CI95 fields are suppressed when
n_repeats < 3(degenerate).