neon-sprawl/docs/decomposition
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
..
epics chore: address E1.M3 docs review (Slice 3 anchor, Linear pointers) 2026-04-17 20:48:53 -04:00
milestones Initial project vision and decomposition planning baseline. 2026-03-29 16:09:57 -04:00
modules NEO-24: fix movement-driven target refresh via authoritative_ack signal 2026-04-21 22:35:41 -04:00
tooling chore: add CT content-tooling track and vision plan tooling epic 2026-03-30 23:18:40 -04:00
README.md chore: point docs and rules at Linear NEO issue ids 2026-04-13 13:15:32 -04:00

README.md

Decomposition Workspace

This workspace contains detailed planning artifacts derived from the finalized master plan:

Folder Layout

Working Rules

  1. Do not rewrite baseline vision in these files; link back to the master plan.
  2. Keep slices backlog-ready (clear owner, dependencies, acceptance criteria).
  3. Use stable IDs (E1, E1.M1, etc.) for core game epics; use CT.M1-style IDs for content tooling so tooling stays out of the E1E9 sequence.
  4. Every new slice must reference telemetry and validation where applicable.

Linear alignment

Engineering work is tracked as issues in Linear (team NEO), grouped under projects that mirror epics and modules. Do not recreate a Jira-style Feature issue tier—module- or slice-level grouping is labels on the issue only.

Express that grouping with labels (for example the decomposition module idE1.M1, CT.M2, etc.). Issues belong to a project (e.g. Epic 1, E1.M1, Tech Debt); labels carry scope without a separate Feature work item.

Epic files (E1E9, master plan)

Epic Document
1 - Core Player Runtime epics/epic_01_core_player_runtime.md
2 - Skills and Progression Framework epics/epic_02_skills_and_progression.md
3 - Crafting Economy epics/epic_03_crafting_economy.md
4 - World Topology epics/epic_04_world_topology.md
5 - PvE Combat epics/epic_05_pve_combat.md
6 - PvP Security epics/epic_06_pvp_security.md
7 - Quest / Faction epics/epic_07_quest_faction.md
8 - Social / Guild epics/epic_08_social_guild.md
9 - LiveOps / Integrity epics/epic_09_liveops_integrity.md

Template for new epics or major revisions: epics/_epic_template.md

Cross-cutting tooling (not E1E9)

Track Document Modules (register)
Internal authoring & content pipeline tooling/internal_authoring.md CT.M1M3

Next Actions

  1. Expand slices into Linear issues under epic/module projects; tag module / slice scope with labels (not a duplicate Feature tier). Keep module IDs aligned with the master plan.
  2. Populate modules/module_dependency_register.md as contracts stabilize.
  3. Refine milestones/phase_execution_plan.md with dates and owners when execution starts.