M2 — Outcome is measurable
Every new externally-facing endpoint emits a request-outcome metric (success vs. error, broken out by status code or error class) sufficient to compute an error rate.
Python Implementation
M2: every new externally-facing endpoint emits a request-outcome metric (success vs. error, by status code or error class) sufficient to compute an error rate. Same shape and same "not a whitelist" tradeoff as M1 (latency_metric_rule.py) — searches the route handler's body for anything counter/outcome-shaped. Fail-branch confidence retuned from 0.75 to 0.778, per docs/false_positive_rate_study_v1.md — same 5/5 real-code sample and rationale as M1's; pass is untouched (not sampled).
Java Implementation
M2 for Java: every new Spring route handler emits a request-outcome metric. Same shape as latency_metric_rule.py. Fail-branch confidence retuned to 0.778 — see outcome_metric_rule.py (Python) for the full rationale from docs/false_positive_rate_study_v1.md.
Go Implementation
M2 for Go: every new inline HTTP handler emits a request-outcome metric. Same shape and scope as latency_metric_rule.py. Fail-branch confidence retuned to 0.778 — see outcome_metric_rule.py (Python) for the full rationale from docs/false_positive_rate_study_v1.md.