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

+1 -6
View File
@@ -67,12 +67,7 @@ func kaplanMeier(observations []observation) []survivalPoint {
// and the second return value says so: substituting a mean there would report a
// number the data does not contain.
func medianSurvival(curve []survivalPoint) (float64, bool) {
for _, point := range curve {
if point.Survival <= 0.5 {
return point.Steps, true
}
}
return 0, false
return quantileSurvival(curve, 0.5)
}
func distinctSteps(observations []observation) []float64 {