Raxx · internal docs

internal · gated

RCA — Cron re-verify-and-enable batch (#4477/#4478/#4479): all three found real drift, none enabled

Incident ID: 2026-08-12-cron-reverify-batch-e2e-warm-waf Date: 2026-08-12 Severity: SEV-3 (non-blocking degradation — three WP crons remain silently disabled; no customer-facing impact, no data-integrity impact) Duration: N/A — this is a verification pass, not a live-incident recovery. Underlying drift durations: e2e-smoke-nightly lockfile has been broken since 2026-05-27 (PR #2917); warm_historical_bars_1min.py's missing init_engine() bootstrap has been latent since 2026-05-29; waf-synthetic-probe verification was not completed (blocked, not drift). Blast radius: CI/ops tooling only. e2e-smoke-nightly, historical-bars-warm-nightly, and waf-synthetic-probe WP crons (ids 18, 20, 25) remain disabled after this pass, same as before it. No production traffic affected. Author: sre-agent

Summary

Three sibling cards (#4477, #4478, #4479 — split from #4469) asked sre-agent to re-verify and enable three WP crons that PR #4091 (2026-07-08) claimed were "functioning correctly" but never actually enabled (enabled:false default gotcha, documented in docs/ops/runbooks/ci-woodpecker.md §v3.x API changes). Following the

4450/#4429 precedent (never trust a month-old "functioning correctly"

claim blind — re-verify against current app behavior via a real scoped trigger), all three crons were triggered via POST /api/repos/1/cron/{id} (never a bare manual dispatch) and their results inspected in full.

Result: none were enabled. Two found genuine, pre-existing product bugs (not new drift, but never actually validated by PR #4091 either): e2e-smoke-nightly's Playwright job fails on npm ci due to an incomplete frontend/raxx-next/package-lock.json; and historical-bars-warm-nightly's warm job false-succeeds every time because warm_historical_bars_1min.py never bootstraps the SQLAlchemy engine before using it. Both are out of sre-agent's edit remit (product application code) and were filed precisely for feature-developer (#4488, #4489) rather than fixed directly. The third (waf-synthetic-probe) was independently confirmed side-effect-free but the live trigger itself was blocked by this session's own safety classifier as a security-adjacent production action; escalated to the operator (comment on #4479) rather than worked around.

A fourth, tangential finding (ci-boundary unexpectedly co-triggered by both cron endpoints despite its own when: filter not matching) was filed as #4490 and partially cross-referenced against an already-tracked same-day RCA (docs/incidents/2026-08-12-ci-boundary-gitleaks-scan-scope.md).

Timeline (all times UTC)

Impact

What went well

What didn't go well

Root cause analysis

Detection

Resolution

Action items

# Action Owner Due Issue
1 Regenerate frontend/raxx-next/package-lock.json (byte-consistent, inside the CI image) and resolve the next@15.5.18 vs. @cloudflare/next-on-pages@1.13.16 peer conflict; re-trigger cron 18 and enable once green feature-developer 2026-08-19 #4488
2 Add init_engine() bootstrap to warm_historical_bars_1min.py matching the sibling-command pattern; harden the swallowed-exception path; add a non-monkeypatched test; re-trigger cron 20 and enable once real warm output confirmed feature-developer 2026-08-19 #4489
3 Investigate why the scoped cron-trigger endpoint includes ci-boundary despite its own when: filter not matching; confirm whether this is a WP v3.16.0 bug or a YAML-shape issue on our side sre-agent 2026-08-26 #4490
4 Authorize/run the waf-synthetic-probe (cron 25) scoped trigger directly, or grant sre-agent explicit permission for WP-cron-trigger actions against security-adjacent probes operator n/a — needs operator decision #4479
5 Once #4488/#4489 land and re-verification is green, apply PATCH /api/repos/1/cron/{18,20} {"enabled":true} and confirm forward-moving next_exec sre-agent tracked against #4488/#4489, no fixed date #4477 / #4478

References