Files
GaCy-GO/docs/currency-wars-response-boundary.md
T

43 lines
2.4 KiB
Markdown
Raw Normal View History

2026-10-28 18:54:43 +07:00
# CW typed response boundary
## Source correction, 2026-10-25
The shared typed dispatcher sends its response only when the registered function
returns nil (or the handler has already sent the response explicitly). Several CW
paths returned resource, validation or save errors directly. Those paths therefore
left the Client waiting instead of receiving the revision's typed error response.
CW registrations now use `cwHandle` / `cwHandleNamed`, which still resolve request
and response IDs by their names through the existing protocol table. When a CW
operation returns an application error, the wrapper preserves a nonzero retcode
already selected by that handler, or assigns `RET_GRID_FIGHT_CONF_MISS` if it was
still zero. It logs the error and returns control to the dispatcher to send exactly
one typed response. It never converts an unsupported operation into success or
replays a failed transaction.
Every explicit packet send within these registered handlers uses `cwSend` to mark
any send error, including serialization or projection failures. The wrapper
propagates that error, network/EOF/closed-connection errors, and
`errResponseAlreadySent` unchanged. It does not attempt an additional packet in
those cases. The former pending-action-specific error defer was removed because
it swallowed send errors as though they were application failures.
`GridFightUpdatePos` also rejects position changes while `CURRENT_BATTLE` is
active, matching the existing Preparation-only mutation boundary used by shop,
equipment and grants. This does not remove or settle the active battle.
## Validation and limits
- `go build ./internal/gameserver` succeeded. No tests were run.
- No executable was replaced, no server restarted, no live save changed and no
probe was staged by this change.
- This closes a source-level missing-response path. Client behavior is not yet
verified, and Tea Break choices, automatic Orb drops/opening and later route
recipes are still incomplete.
- The existing `GridFightEnterBonfire` handler's success-only navigation response
is not proof of a working Tea Break. Its game-event consumer and the associated
current revision's choices/effects still need runtime evidence before new
pending state can be implemented.
The static inventory scanner recognizes both CW wrappers, so registration reports
continue to distinguish present handlers from actual gameplay support.