V3 QA — Scenario 4: Probability (Task 5)
==========================================

Test file: experiments/v3/tests/test_probability.py
Result: 12/12 PASSED

Functions:
  - prob_less(forecast, threshold, city_bias, city_mae) → norm.cdf
  - prob_greater(forecast, threshold, city_bias, city_mae) → 1 - norm.cdf
  - prob_between(forecast, floor, city_bias, city_mae) → cdf(upper) - cdf(lower)
  - compute_ci(prob, city_mae, sample_count) → (lower, upper)

Bug Fix Verified:
  - prob_greater uses 1 - norm.cdf() (NOT prob_between formula)
  - Symmetry with prob_less verified
  - loc adjusts for city_bias: loc = forecast - city_bias

Test Coverage:
  - Far above threshold → near zero (prob_less: ~0.98, prob_greater: ~0.02)
  - Moderate above threshold → reasonable probability
  - CI has positive width, clamps to [0, 1]
  - Zero sample count → returns (0.0, 1.0)
  - Larger samples → narrower CI

VERDICT: PASS
