Modern QA2026Surface 5: Evaluating Non-Determinism with pass^k — tiles
Log inJoin
105 / 108 · 03 Agentic Testing Architectures · Testing Agentic Systems: MCP, A2A, and Agent Evals← prev⊞ allnext →☰ Read as one page

14.6Surface 5: Evaluating Non-Determinism with pass^k

A single passing run of an agentic scenario means almost nothing. The standard as of July 2026 is repeat-run evaluation: run each scenario k times and report both the pass rate and pass^k -- whether all k runs passed.

def evaluate_scenario(scenario, k: int = 10) -> ScenarioReport:
    results = [run_in_sandbox(scenario) for _ in range(k)]
    passes = sum(1 for r in results if r.passed)
    return ScenarioReport(
        scenario=scenario.name,
        pass_rate=passes / k,          # capability signal
        pass_all_k=(passes == k),      # reliability signal
        failure_modes=cluster_failures([r for r in results if not r.passed]),
    )

The two numbers answer different questions:

  • pass rate (capability): can the agent do this at all?
  • pass^k (reliability): can you depend on it?

The gap between them is brutal at realistic reliability levels. A per-run pass rate of 90% collapses to a 35% chance of 10 consecutive passes (0.9^10); even 99% per-run gives only ~90% for pass^10. Interviewers probe exactly this: an agent that "works in the demo" and an agent you can put in front of customers are separated by an order of magnitude of reliability engineering.

Practical policy: gate releases on pass^k for the scenarios that matter (k sized to your risk tolerance), track pass rate over time to catch capability regressions, and always cluster the failures -- three failures with one root cause is a bug; three unrelated failures is a reliability profile.