ReadonlycacheinputTokensCached / inputTokensTotal, clamped to [0, 1]. 0 when
inputTokensTotal === 0. The 2026-05-14 qwen/qwen3.6-flash todo run read
0.0 across all four phases — the cache wasn't doing any work, even
though interfaceSchemaReview re-fed the same schemas 76k tokens × 106
attempts.
Readonlyfailureaggregates.total.metric.validationFailure / aggregates.total.metric.attempt, clamped to [0, 1]. Surfaces whether
the phase's retry loop converged (low failure rate) or thrashed (high
failure rate). The 2026-05-14 todo realize phase landed at 99 / 291 =
0.34; the underlying realizeCorrect sub-loop alone was 0.54 (the
correction step itself was misfiring half the time), but per-sub-loop
visibility is intentionally deferred to a follow-up so this slot stays a
single number.
Readonlyinputaggregates.total.tokenUsage.input.cached. Subset of inputTokensTotal
that the vendor reported as cache hits. 0 when the vendor / SDK did not
surface a cached count (qwen-via-OpenRouter at the 2026-05-14 cutoff
returns zero for every phase).
Readonlyinputaggregates.total.tokenUsage.input.total. Total input tokens fed to the
model across every sub-loop in this phase.
Phase-level cost / quality signals surfaced on IPhaseState.costSignals. Each field is derived from
aggregates.totalso a reader gets the dominant perf observables (cache hit rate, retry failure rate, raw input-token volume) without walking the aggregates payload.The shape is intentionally additive: existing readers ignore the field, new readers gate on its presence (
undefinedcovers legacy archives predating the field, phases that never ran, and the zero-attempt case where the denominator would be0).