fix(rust): skip servers known down for a link code, hold syncs while offline (F6, F7) #23

Merged
whitlocktech merged 1 commits from fix/protocol-13-step2-walk into edge 2026-09-27 08:26:45 +00:00
Member

What & why

Two gaps the step-2 player walk found (2026-09-27, org lead in game on both rigs). Tracking: #21. Spec: docs PR (D186, D187).

F6 → D186 (org lead's option b). A code no recent issuer holds — every made-up one — was still asked of every other enabled server, so while any server was down the redeem waited out its whole timeout: 12 s on both rigs. The second pass now skips servers the board poll last saw without a connected game (online: 0); they count as offline without the wait. Issuers are still asked whatever their state, so a good code on a down server still answers "unsure". A failed state read asks everybody (slow, never wrong).

F7 → D187. On Carbon a due audit permission sync went out the moment the sidecar reconnected, 80 s before "Server startup complete". The worldReady hold reads the stored hello, which is still the OLD boot's until the poll reads the new one. reasonToSync now also holds while the stored state says the game is not connected — the poll writes online: 0 the moment a server goes away. titleSync already held on it. A human's "sync now" is still not held.

How it was tested

  • npm test (server): 405/405. New: four link-fleet tests (skip known-down, down issuer still asked → unsure, all-down → offline without asking, failed state read → ask all) and one F7 test (stale old-boot state with online: 0 held; back but loading held; ready → restart; up → audit; forced → requested).
  • Live on the walk core (core :3270, DB rustp16, this branch's two files):
    • made-up code with alpha/beta/gamma/egg-* down: 338 ms; with rust-carbon stopped too: 360 ms (was 12,245 ms).
    • F7: Carbon stopped, its last sync attempt backdated so an audit was due on reconnect, Carbon started. Sidecar back 08:16:12 → no sync; server.initialized 08:17:27; first sync reason: restart at 08:18:12.

Checklist

  • I have read CONTRIBUTING.md.
  • The change builds and existing tests/checks pass locally.
  • I have added or updated tests/docs where it makes sense.
  • My commits are reasonably scoped with clear messages.

AI-assisted contributions (required)

  • No AI tools were used to produce this contribution.
  • AI tools were used. Tool(s): Claude Code (Claude Opus 5.5). I have reviewed and understand
    every change, and take responsibility for it. AI-authored commits are
    marked with a Co-Authored-By / Assisted-By trailer.

License

  • I agree that my contribution is licensed under this project's license
    (GNU GPL v3.0 or later), and I have the right to contribute it.

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

## What & why Two gaps the step-2 player walk found (2026-09-27, org lead in game on both rigs). Tracking: #21. Spec: docs PR (D186, D187). **F6 → D186 (org lead's option b).** A code no recent issuer holds — every made-up one — was still asked of every other enabled server, so while any server was down the redeem waited out its whole timeout: **12 s on both rigs**. The second pass now skips servers the board poll last saw without a connected game (`online: 0`); they count as `offline` without the wait. Issuers are still asked whatever their state, so a good code on a down server still answers "unsure". A failed state read asks everybody (slow, never wrong). **F7 → D187.** On Carbon a due *audit* permission sync went out the moment the sidecar reconnected, 80 s before "Server startup complete". The `worldReady` hold reads the stored hello, which is still the OLD boot's until the poll reads the new one. `reasonToSync` now also holds while the stored state says the game is not connected — the poll writes `online: 0` the moment a server goes away. `titleSync` already held on it. A human's "sync now" is still not held. ## How it was tested - `npm test` (server): **405/405**. New: four link-fleet tests (skip known-down, down issuer still asked → unsure, all-down → offline without asking, failed state read → ask all) and one F7 test (stale old-boot state with `online: 0` held; back but loading held; ready → `restart`; up → `audit`; forced → `requested`). - **Live on the walk core** (core :3270, DB rustp16, this branch's two files): - made-up code with alpha/beta/gamma/egg-* down: **338 ms**; with `rust-carbon` stopped too: **360 ms** (was 12,245 ms). - F7: Carbon stopped, its last sync attempt backdated so an audit was due on reconnect, Carbon started. Sidecar back 08:16:12 → **no sync**; `server.initialized` 08:17:27; first sync `reason: restart` at 08:18:12. ## Checklist - [x] I have read [CONTRIBUTING.md](CONTRIBUTING.md). - [x] The change builds and existing tests/checks pass locally. - [x] I have added or updated tests/docs where it makes sense. - [x] My commits are reasonably scoped with clear messages. ## AI-assisted contributions (required) - [ ] No AI tools were used to produce this contribution. - [x] AI tools were used. Tool(s): `Claude Code (Claude Opus 5.5)`. I have reviewed and understand every change, and take responsibility for it. AI-authored commits are marked with a `Co-Authored-By` / `Assisted-By` trailer. ## License - [x] I agree that my contribution is licensed under this project's license (**GNU GPL v3.0 or later**), and I have the right to contribute it. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 1 commit 2026-09-27 08:19:21 +00:00
fix(rust): skip servers known down for a link code, hold syncs while offline (F6, F7)
All checks were successful
PR Checks / client-build (pull_request) Successful in 23s
PR Checks / frozen-manifest (pull_request) Successful in 47s
PR Checks / server-tests (pull_request) Successful in 7m57s
263be1df45
Two findings of the step-2 player walk (2026-09-27, both rigs).

F6, option (b) of the org lead (D186): a code no recent issuer holds -
every made-up one - was still asked of every other enabled server, and
while any of them was down the redeem waited out its whole timeout
(12 s on both rigs). The second pass now skips the servers the board
poll last saw without a connected game; they count as offline without
the wait. Issuers are still asked whatever their state, so a good code
on a down server stays "unsure". Live on the walk core: 338 ms with five
servers down, 360 ms with a rig stopped as well.

F7 (D187): on Carbon a due audit sync went out the moment the sidecar
reconnected, 80 s before "Server startup complete". The worldReady hold
reads the stored hello, which is the OLD boot's until the poll reads the
new one. reasonToSync now also holds while the stored state says the
game is not connected (online 0), which the poll writes the moment the
server goes away. titleSync already held on it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
whitlocktech merged commit 65b9ccd161 into edge 2026-09-27 08:26:45 +00:00
whitlocktech deleted branch fix/protocol-13-step2-walk 2026-09-27 08:26:45 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RunicGateway/Module-Rust#23
No description provided.