feat(analyze): time an event at the step it was detected and report the quartiles

an obligation that never discharges is reported when the run ends, and timing it by the step that armed it recorded a liveness failure flushed at the budget as a violation found on step 1. the survival analysis now measures the detected step, falling back to the origin for campaigns written before the field existed, and says how many events that moved. the report gains the first and third quartiles beside the median.
This commit is contained in:
pj committed 2026-08-16 17:45:20 +05:30
1 parent a28178337c
commit b99da0be0e
9 files changed
+354 -26

No files matched your search

@@ -14,6 +14,7 @@ func violatingRun(seed int64, steps, origin int, properties ...string) classifie
Actions: steps,
MonotonicMillis: 60_000,
OriginStep: origin,
EventStep: origin,
Violated: true,
ViolatedProperties: properties,
}