Address code-review findings on the webhook retry / executor-resolution
work:
- Webhook retry docs and the backoff comment described the worst-case
bound as ~180s; backoff checks max_time against the time elapsed
before each attempt, so the final request can start just under the
limit and run its full 60s timeout — worst case ~210s.
- Drop the unused executor `username` unpacking in `_get_screenshots`.
- Clarify the Slack v2 atomic-revert comment (restoring in-memory
values keeps a later commit from persisting a half-migrated set).
- Fix a stale "four call sites" -> "three call sites" docstring and a
freezegun/backoff elapsed-clock comment in the tests.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Migrate webhook backoff tests off the hand-rolled _FakeBackoffDatetime
monkeypatch onto freezegun.freeze_time. Persistent-fail and recovering
tests use auto_tick so max_time is genuinely engaged; assertions are
property-based (range / governed-by-mock) rather than pinned tick counts.
- Fall back to "(unknown)" for ReportScheduleExecutorNotFoundError when no
username is available, avoiding a double-space in the message; add a
regression test and a class docstring.
- Document the ~120s cumulative wall-clock retry bound (worst case ~180s)
in the alerts-reports admin docs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>