ui/phase-25: backend turn-cutoff guard + auto-pause + UI sync protocol
Backend now owns the turn-cutoff and pause guards the order tab relies on: the scheduler flips runtime_status between generation_in_progress and running around every engine tick, a failed tick auto-pauses the game through OnRuntimeSnapshot, and a new game.paused notification kind fans out alongside game.turn.ready. The user-games handlers reject submits with HTTP 409 turn_already_closed or game_paused depending on the runtime state. UI delegates auto-sync to a new OrderQueue: offline detection, single retry on reconnect, conflict / paused classification. OrderDraftStore surfaces conflictBanner / pausedBanner runes, clears them on local mutation or on a game.turn.ready push via resetForNewTurn. The order tab renders the matching banners and the new conflict per-row badge; i18n bundles cover en + ru. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2314,9 +2314,10 @@ components:
|
||||
type: string
|
||||
description: |
|
||||
Stable machine-readable failure marker. The closed set is
|
||||
`not_implemented`, `invalid_request`, `unauthorized`, `not_found`,
|
||||
`conflict`, `method_not_allowed`, `internal_error`,
|
||||
`service_unavailable`.
|
||||
`not_implemented`, `invalid_request`, `unauthorized`,
|
||||
`forbidden`, `not_found`, `conflict`, `method_not_allowed`,
|
||||
`internal_error`, `service_unavailable`,
|
||||
`turn_already_closed`, `game_paused`.
|
||||
enum:
|
||||
- not_implemented
|
||||
- invalid_request
|
||||
@@ -2327,6 +2328,8 @@ components:
|
||||
- method_not_allowed
|
||||
- internal_error
|
||||
- service_unavailable
|
||||
- turn_already_closed
|
||||
- game_paused
|
||||
message:
|
||||
type: string
|
||||
description: Human-readable client-safe failure description.
|
||||
|
||||
Reference in New Issue
Block a user