$ rolloutkit test -c service-b-prestop.yaml
starting the traffic probe
starting the target and waiting for readiness: service-b:latest
measuring the baseline: 25 requests plus keep-alive
sending SIGTERM and observing the shutdown
removing the containers and the network

rolloutkit 0.1.0   run rk_MQ5JCGMLDY
Target: service-b:latest
Profile: kubernetes, grace 30s, preStop sleep 5s, drain prestop -> shutdown budget 25s

STARTUP
  startup resolution                          171ms
  TCP :8000 open                              6.3s
  GET /healthz/ -> 200                        6.74s
  PID 1 signal disposition                    gunicorn, SIGTERM handler installed

BASELINE (before the signal)
  GET /api/subjects/ x25                      25/25 ok -> 200
  request duration p50 / p90                  94ms / 145ms
  sigterm_after (from config)                 300ms

SHUTDOWN TIMELINE
  T2  last new connection accepted            -207ms (±50ms)

CONTRACTS
  SP001 startup                PASS   ready in 6.74s (budget 1m0s)
  SP002 readiness-stability    PASS   readiness returned 200 for all 10 probes (p50 0.57ms, max 
86ms)
  SP003 signal-handling        PASS   shutdown started and the process stopped within budget after 
286ms
        - rolloutkit never enables Docker's --init: tini as PID 1 would change signal routing, and 
the measurement would describe tini, not your app.
  SP004 drain-window           PASS   not_applicable: preStop owns routing removal, so the 
new-connection probe stops at T0 and listener timing is evidence only
        - accept_window is resolved to the 50ms probe interval; it is not a continuous timestamp.
  SP005 inflight-completion    FAIL   3/62 completed, 59 destroyed
        request #35 reset_before_response during awaiting_response +64ms
        request #43 reset_before_response during awaiting_response +64ms
        request #44 reset_before_response during awaiting_response +64ms
        request #45 reset_before_response during awaiting_response +64ms
        request #46 reset_before_response during awaiting_response +64ms
        ... and 54 more destroyed requests (--format json lists every one)
  SP006 shutdown-deadline      PASS   exited in 286ms of 25s
        - Budget is terminationGracePeriod (30s) minus preStop (5s). The hook is spent from the same
window.

  host Darwin 25.5.0 | docker 29.7.2/linux | 11 cpu | load 4.37 | probe sidecar | probe-path jitter 
~0.2ms | teardown not_calibrated
  Timestamps come from monotonic_ns; application-facing observations are precise to about 0.2ms at 
sidecar, not to the nanosecond.
  T4 is the daemon's own kill->die pair (286ms), one clock with no round trip of ours in it. The 
timeline above is drawn on our clock, which saw the exit at 293ms.

Result: 1 FAIL
report-only: exit 0. Use --fail-on error to block CI.
