Stage 17 #2: Connecting indicator + auto-retry, instead of red toasts
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Has been skipped
CI / integration (pull_request) Has been skipped
CI / ui (pull_request) Successful in 36s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 55s
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Has been skipped
CI / integration (pull_request) Has been skipped
CI / ui (pull_request) Successful in 36s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 55s
Connectivity failures become state, not a toast on every attempt. A global online signal (lib/connection.svelte.ts) flips on a transport unavailable / rate_limited and on the live stream's drop, driving a pure-CSS header spinner + 'Connecting…' in place of the title and softly disabling the in-game server actions (commit / exchange / pass / hint; local board/rack/reset stay live). - transport: exec auto-retries with capped exponential backoff — every op on a rate-limit (rejected before processing, safe), reads only on unavailable (a mutation is never blindly re-sent, to avoid double-applying one whose response was lost; its button is disabled while offline so the player re-issues on reconnect). A reachability watcher (profile.get probe) and any successful traffic clear the signal. - the old red error.unavailable toast is gone (handleError suppresses connection codes; the indicator replaces it). A server-data screen still opens with the spinner and fills on reconnect (global indicator + read auto-retry), so navigation is never dead. - pure retry policy unit-tested (retry.ts); a mock-only window.__conn hook drives a Chromium+WebKit e2e (indicator shows offline, the action disables, both clear on reconnect). Full suite + build green. - docs: ARCHITECTURE transport note, FUNCTIONAL (+ _ru), PLAN tracker (incl. #1 — the bot already drains all updates, no change). Also records #1 as investigated/no-change in PLAN. Other server-action buttons (chat send, profile save, …) still degrade to a safe no-op offline; visual disable is easy to extend.
This commit is contained in:
@@ -1437,6 +1437,28 @@ provided cert) at the contour caddy; prod VPN; rollback.
|
||||
connector. The backend resolves the mover's display name (the score line and result are
|
||||
built per recipient). Covered by notify round-trip, emit, connector-render (en/ru) and
|
||||
routing tests.
|
||||
- **No-op drain of all bot updates (#1, investigated — no change):** confirmed the Telegram bot
|
||||
already long-polls and the library advances the offset for every delivered update (the default
|
||||
handler no-ops anything but `/start`), so the queue never piles up. Telegram withholds only
|
||||
`message_reaction` / `message_reaction_count` / `chat_member` by default, and — being
|
||||
unrequested — those never queue either. Owner chose to leave `allowed_updates` at the default
|
||||
(zero risk) rather than hand-maintain a full whitelist (a wrong/stale type would break
|
||||
`getUpdates` entirely); a specific type will be requested when a concrete handler needs it.
|
||||
- **Reconnect UX — "Connecting…" + soft-disable (#2, shipped):** connectivity failures became
|
||||
**state, not toasts**. A global `online` signal (`lib/connection.svelte.ts`) flips on a
|
||||
transport `unavailable` / `rate_limited` (and on the live stream's drop), driving a pure-CSS
|
||||
header **spinner + "Connecting…"** in place of the title and softly disabling the in-game
|
||||
server actions (commit / exchange / pass / hint; local board/rack/reset stay live). The
|
||||
transport (`exec`) **auto-retries with capped backoff** — every op on a rate-limit, **reads
|
||||
only** on `unavailable` (mutations are not blindly re-sent; their buttons are disabled while
|
||||
offline, so the player re-issues on reconnect — the idempotency caveat the owner accepted). A
|
||||
reachability **watcher** (`profile.get` probe) and any successful traffic clear the signal; the
|
||||
old red `error.unavailable` toast is gone (the indicator replaces it). A server-data screen
|
||||
still **opens with the spinner** and fills on reconnect (global indicator + read auto-retry),
|
||||
so navigation is never dead. Pure policy unit-tested (`retry.ts`); a mock-only `window.__conn`
|
||||
hook drives a Chromium+WebKit e2e (indicator appears offline, the action disables, both clear
|
||||
on reconnect). Other server-action buttons (chat send, profile save, …) are not yet visually
|
||||
disabled but degrade to a safe no-op (the suppressed toast + indicator) — easy to extend.
|
||||
|
||||
## Deferred TODOs (cross-stage)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user