neon-sprawl/docs/decomposition/modules
VinPropane 435a32b3b3 NEO-24: fix movement-driven target refresh via authoritative_ack signal
Review 2026-04-21 caught that the hybrid soft-lock refresh path is
unreachable during normal WASD locomotion. `main.gd` was wiring
`TargetSelectionClient` to `PositionAuthorityClient.authoritative_position_received`,
which only fires on boot sync and move-rejection resync — successful
`move-stream` 200s are intentionally silent to avoid RTT rubber-banding.
So walking out of an alpha/beta radius never triggered the throttled
`GET /target` the HUD depends on, and validity stayed stuck at `ok`.

Add a separate `authoritative_ack(world)` signal on `PositionAuthorityClient`
emitted from both `BOOT_GET` 200 and successful `move-stream` 200, and
switch `TargetSelectionClient` (+ `main.gd`) to it. The snap signal keeps
its current semantics so rubber-band suppression is untouched; the ack
signal is a pure heartbeat that cooldown-throttled consumers can hook.

Also adds an integration test that wires both real clients together (per
the review's suggestion 1) so renames or mis-wires between the two
scripts fail loudly rather than silently skipping the end-to-end path.

- `client/scripts/position_authority_client.gd`: new `authoritative_ack`
  signal; extracted `_parse_world_from_response` helper to share JSON
  parse across `BOOT_GET` and `STREAM_POST`; emit ack from both.
- `client/scripts/target_selection_client.gd`: rename
  `on_authoritative_position_snap` to `on_authoritative_ack`; drop
  `apply_as_snap` gate (no longer meaningful).
- `client/scripts/main.gd`: connect the new signal.
- `client/test/position_authority_client_test.gd`: assert ack on boot
  200 and stream 200.
- `client/test/target_selection_client_test.gd`: rename tests for new
  handler.
- `client/test/target_refresh_on_locomotion_test.gd`: new integration
  suite wiring real authority + target clients.
- Plan Decision 3 + Tests row + Files-to-modify row updated.
- `docs/reviews/2026-04-21-NEO-24.md`: committed with blocking issue +
  suggestions struck through with `Done.` notes per
  planning-implementation-docs rule.
- `docs/decomposition/modules/documentation_and_implementation_alignment.md`:
  E1.M3 row now reflects NEO-24 landed.
- `client/README.md` + `docs/manual-qa/NEO-24.md`: refreshed signal names
  so the soft-lock refresh description matches the wiring.

Tests: 88/88 GdUnit headless passed locally.
2026-04-21 22:35:41 -04:00
..
CT_M1_ContentValidationPipeline.md chore: CI check for decomposition hybrid vocabulary (suggestion 4) 2026-04-03 21:29:28 -04:00
CT_M2_AuthoringStudioApplication.md chore: add CT content-tooling track and vision plan tooling epic 2026-03-30 23:18:40 -04:00
CT_M3_ContentReferenceAndBundleWorkflows.md chore: add CT content-tooling track and vision plan tooling epic 2026-03-30 23:18:40 -04:00
E1_M1_InputAndMovementRuntime.md NEO-22: add move-stream API and WASD client locomotion 2026-04-17 19:21:33 -04:00
E1_M2_IsometricCameraController.md chore: point docs and rules at Linear NEO issue ids 2026-04-13 13:15:32 -04:00
E1_M3_InteractionAndTargetingLayer.md NEO-23: code review follow-up (E1.M3 docs, GET 404 test, radius bounds) 2026-04-17 21:14:43 -04:00
E1_M4_AbilityInputScaffold.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E2_M1_SkillDefinitionRegistry.md docs: drop classless terminology; rename Epic 2 to skills and progression 2026-04-03 21:33:53 -04:00
E2_M2_XpAwardAndLevelEngine.md docs: drop classless terminology; rename Epic 2 to skills and progression 2026-04-03 21:33:53 -04:00
E2_M3_MasteryAndPerkUnlocks.md docs: drop classless terminology; rename Epic 2 to skills and progression 2026-04-03 21:33:53 -04:00
E2_M4_ProgressionPacingControls.md docs: drop classless terminology; rename Epic 2 to skills and progression 2026-04-03 21:33:53 -04:00
E3_M1_ResourceNodeAndGatherLoop.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E3_M2_RefinementAndRecipeExecution.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E3_M3_ItemizationAndInventorySchema.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E3_M4_SinkAndDurabilityLifecycle.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E3_M5_EconomyBalancePolicy.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E4_M1_ZoneGraphAndTravelRules.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E4_M2_SpawnEcologyController.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E4_M3_SeamlessHandoffAndRegionState.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E4_M4_SecurityTierZoneFlags.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E5_M1_CombatRulesEngine.md docs: PvP × combat engine integration (#4) 2026-03-30 18:55:46 -04:00
E5_M2_NpcAiAndBehaviorProfiles.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E5_M3_EncounterAndRewardTables.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E5_M4_GroupCombatScaling.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E6_M1_PvPEligibilityAndFlagState.md docs: PvP × combat engine integration (#4) 2026-03-30 18:55:46 -04:00
E6_M2_ConsentAndRiskUxSignals.md chore: point docs and rules at Linear NEO issue ids 2026-04-13 13:15:32 -04:00
E6_M3_LossPenaltyAndAntiGriefRules.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E6_M4_RewardParityEnforcer.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E7_M1_QuestStateMachine.md docs: quest scope and party rules (#5) 2026-03-30 18:58:23 -04:00
E7_M2_RewardAndUnlockRouter.md docs: quest scope and party rules (#5) 2026-03-30 18:58:23 -04:00
E7_M3_FactionReputationLedger.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E7_M4_ContractMissionGenerator.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E8_M1_PartyAndMatchAssembly.md docs: quest scope and party rules (#5) 2026-03-30 18:58:23 -04:00
E8_M2_GuildCorpProgressionState.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E8_M3_PlayerTradeAndMarketplace.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E8_M4_ChatModerationAndReporting.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E9_M1_TelemetryEventSchema.md docs: data reload and telemetry operations policy (#6) 2026-03-30 19:00:59 -04:00
E9_M2_KpiDashboardsAndAlerting.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E9_M3_LiveBalanceControlPlane.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
E9_M4_IntegrityAndAbuseResponse.md docs: expand module register to full epic catalog (37 modules) 2026-03-30 18:48:07 -04:00
client_server_authority.md docs: PvP × combat engine integration (#4) 2026-03-30 18:55:46 -04:00
contracts.md docs: documentation vs implementation alignment (#7) 2026-03-30 19:03:03 -04:00
data_and_ops_policy.md docs: tidy data_and_ops_policy table and vision plan links 2026-03-30 19:05:49 -04:00
documentation_and_implementation_alignment.md NEO-24: fix movement-driven target refresh via authoritative_ack signal 2026-04-21 22:35:41 -04:00
module_dependency_register.md NEO-23: code review follow-up (E1.M3 docs, GET 404 test, radius bounds) 2026-04-17 21:14:43 -04:00
pvp_combat_integration.md docs: drop conversation-only (#4)/(#5) from module doc titles 2026-03-30 19:00:06 -04:00
quest_scope_and_party.md docs: drop classless terminology; rename Epic 2 to skills and progression 2026-04-03 21:33:53 -04:00