cc-ultrav-1 7cf94f8a3a Fix: two-phase backoff — each slot gets independent retry window
CRITICAL BUG FIX: skew_retries_exhausted was a global skip gate — once
first slot exhausted retries, ALL subsequent slots skipped retries.
Later slots could miss the midnight transition during their own window.

New design:
- Two-phase pseudo-exponential backoff PER SLOT (not global):
  Phase 1 (aggressive): 43ms x 1.5^n for first 6 retries
  Phase 2 (gradual): 330ms x 1.15^n after 6 (less bot-spammy)
- 2.5s time budget per slot (covers NTP skew up to ~2s + lift)
- skew_retries_exhausted is now diagnostics-only (set but NOT used to skip)
- _skew_delay() helper computes two-phase delays
- Only 'Hora no permitida' certifies a slot as taken
- 'Fecha posterior' never a give-up reason — server date not rolled yet

Tests: 57 passed
Live: 8 retries on 15:15, all 9 slots still free post-test
2026-10-03 21:40:33 +02:00
Description
Municipal cita previa booking automation
412 KiB
Languages
Python 68.7%
JavaScript 29.4%
Shell 1.9%