cp.nvim/lua/cp
Barrett Ruth 8398f3428e
feat(race): notification tiers, drift correction, and T=0 retry (#348)
## Problem

Race countdown had three reliability issues:
- Notified every second regardless of remaining time (noisy for
hours-long waits)
- Never re-fetched start times (stale if contest rescheduled)
- No retry on setup failure at T=0 — if the scraper failed at the most
critical moment, the entire countdown was wasted

## Solution

- **Notification tiers**: >1h every 15m, >5m every 1m, >1m every 10s,
≤60s every 1s
- **Drift correction**: re-fetch contest list every 10 minutes, update
`start_time` if changed
- **T=0 retry**: `race_try_setup` calls `scrape_contest_metadata` with
the new `on_error` callback, retrying up to 15 times at 3s intervals
(~45s). Caches metadata on success, then calls `setup_contest` on the
fast (cached) path. Token guard invalidates stale retries after
cancellation.
- **`on_error` for `scrape_contest_metadata`**: optional 4th param,
backward-compatible
2026-03-06 18:43:12 -05:00
..
commands refactor(race): replace :CP race with --race flag (#347) 2026-03-06 18:33:42 -05:00
pickers feat: race countdown support and language version selection (#346) 2026-03-06 18:18:21 -05:00
runner fix(submit): use file path over stdin; fix CF CodeMirror textarea (#305) 2026-03-05 14:34:14 -05:00
ui fix: cancel active process on contest switch (#316) 2026-03-05 17:42:50 -05:00
cache.lua feat: race countdown support and language version selection (#346) 2026-03-06 18:18:21 -05:00
config.lua feat: race countdown support and language version selection (#346) 2026-03-06 18:18:21 -05:00
constants.lua refactor(race): replace :CP race with --race flag (#347) 2026-03-06 18:33:42 -05:00
credentials.lua feat: validate credentials on :CP <platform> login (#310) 2026-03-05 15:12:09 -05:00
health.lua fix: replace deprecated vim.loop with vim.uv 2026-02-26 22:45:07 -05:00
helpers.lua feat(ui): auto-hide source buffer on close 2025-10-24 14:47:12 -04:00
init.lua fix(submit): use file path over stdin; fix CF CodeMirror textarea (#305) 2026-03-05 14:34:14 -05:00
log.lua fix(submit): use file path over stdin; fix CF CodeMirror textarea (#305) 2026-03-05 14:34:14 -05:00
race.lua feat(race): notification tiers, drift correction, and T=0 retry (#348) 2026-03-06 18:43:12 -05:00
restore.lua fix(submit): use file path over stdin; fix CF CodeMirror textarea (#305) 2026-03-05 14:34:14 -05:00
scraper.lua feat(race): notification tiers, drift correction, and T=0 retry (#348) 2026-03-06 18:43:12 -05:00
setup.lua refactor: remove open_url config option in favour of :CP open (#322) 2026-03-05 22:55:43 -05:00
state.lua refactor(run): remove I/O view test navigation keymaps 2026-03-04 00:26:22 -05:00
stress.lua fix: cancel active process on contest switch (#316) 2026-03-05 17:42:50 -05:00
submit.lua feat: race countdown support and language version selection (#346) 2026-03-06 18:18:21 -05:00
utils.lua fix(submit): use file path over stdin; fix CF CodeMirror textarea (#305) 2026-03-05 14:34:14 -05:00
version.lua fix: refactor 2025-09-21 11:19:00 -04:00