mirror of
https://github.com/garrytan/gstack.git
synced 2026-10-31 22:14:25 +01:00
One pure failureCauseOf() beside failureClassOf() sets failure_cause (contract > pre_turn_infra > api_error > refusal > provider_stall > session_timeout > observer_timeout > assertion > unknown; no machine-set 'detector') with one bounded evidence line, and failureDetailOf() keeps a Bun matcher's Expected/Received or a judge's failing dimensions in failure_detail. Both record builders (classifyTrialShard, junitCensus) call them and attach the trial's ledger sessions. failure_class, error and TRIAL_ERROR_MAX are computed exactly as before; the new fields are optional, bounded and validated only when present, and a frozen copy of the v1 reader accepts every new record. A provider stall needs partial messages and STALL_WINDOW_MS (120 s, eval-budgets.ts beside HEADROOM_WARN/FAIL) of in-request silence with nothing outstanding; it stays a failure under EVAL_POLICY v1.