groups:
- name: captchaforge.solver
interval: 30s
rules:
- alert: CaptchaforgeVendorSuccessRateLow
expr: |
(
sum by (vendor) (rate(captchaforge_solve_total{outcome="success"}[10m]))
/
sum by (vendor) (rate(captchaforge_solve_total[10m]))
) < 0.70
for: 5m
labels:
severity: warning
component: captchaforge
annotations:
summary: "captchaforge: {{ $labels.vendor }} success rate < 70%"
description: |
Per-vendor solve success rate dropped to {{ $value | humanizePercentage }}
over the last 10 minutes. Investigate:
- vendor revision change (CF orchestrate hash)
- stealth profile drift (CreepJS / fp.json)
- upstream proxy health
Runbook: https://github.com/santhreal/captchaforge/blob/main/RUNBOOK.md#vendor-success-rate-low
- alert: CaptchaforgeVendorSuccessRateCritical
expr: |
(
sum by (vendor) (rate(captchaforge_solve_total{outcome="success"}[10m]))
/
sum by (vendor) (rate(captchaforge_solve_total[10m]))
) < 0.30
for: 3m
labels:
severity: critical
component: captchaforge
annotations:
summary: "captchaforge: {{ $labels.vendor }} success rate < 30%. BYPASS BROKEN"
description: |
Per-vendor solve success rate collapsed to {{ $value | humanizePercentage }}.
This is a full bypass-failure event. Likely cause: vendor pushed a fix.
- alert: CaptchaforgeSolveP95Slow
expr: |
histogram_quantile(0.95,
sum by (vendor, le) (rate(captchaforge_solve_duration_ms_bucket[10m]))
) > 30000
for: 10m
labels:
severity: warning
component: captchaforge
annotations:
summary: "captchaforge: p95 solve time > 30s for {{ $labels.vendor }}"
description: "p95 is {{ $value | humanizeDuration }}ms"
- alert: CaptchaforgeHardBlockRateHigh
expr: |
(
sum by (vendor) (rate(captchaforge_solve_total{outcome="hard_block"}[15m]))
/
sum by (vendor) (rate(captchaforge_solve_total[15m]))
) > 0.05
for: 10m
labels:
severity: warning
component: captchaforge
annotations:
summary: "captchaforge: {{ $labels.vendor }} hard-block rate > 5%"
description: |
Hard-block rate is {{ $value | humanizePercentage }} of attempts.
Suggests deployment IP / stealth fingerprint is flagged.
- alert: CaptchaforgeSilentFailRateHigh
expr: |
(
sum by (vendor) (rate(captchaforge_solve_total{outcome="silent_fail"}[15m]))
/
sum by (vendor) (rate(captchaforge_solve_total[15m]))
) > 0.10
for: 15m
labels:
severity: warning
component: captchaforge
annotations:
summary: "captchaforge: {{ $labels.vendor }} silent_fail > 10%"
description: |
Solvers are claiming success but the oracle disagrees, our
tokens look right but don't actually verify. Either oracle
is mis-classifying (Recycled / SilentFail false positive)
OR the solver path is broken.
- name: captchaforge.process
interval: 30s
rules:
- alert: CaptchaforgeServeDown
expr: up{job="captchaforge"} == 0
for: 2m
labels:
severity: critical
component: captchaforge
annotations:
summary: "captchaforge serve is down"
description: "Prometheus failed to scrape /metrics for 2 minutes."