AutoBE
    Preparing search index...

    Phase-level cost / quality signals surfaced on IPhaseState.costSignals. Each field is derived from aggregates.total so 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 (undefined covers legacy archives predating the field, phases that never ran, and the zero-attempt case where the denominator would be 0).

    interface IPhaseCostSignals {
        cacheHitRate: number;
        failureRate: number;
        inputTokensCached: number;
        inputTokensTotal: number;
    }
    Index

    Properties

    cacheHitRate: number

    inputTokensCached / 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.

    failureRate: number

    aggregates.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.

    inputTokensCached: number

    aggregates.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).

    inputTokensTotal: number

    aggregates.total.tokenUsage.input.total. Total input tokens fed to the model across every sub-loop in this phase.