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. |
||
|---|---|---|
| .. | ||
| epics | ||
| milestones | ||
| modules | ||
| tooling | ||
| README.md | ||
README.md
Decomposition Workspace
This workspace contains detailed planning artifacts derived from the finalized master plan:
- Source of truth:
neon_sprawl_vision.plan.md— design axioms (fun + distinctly cyberpunk theme) live under Design axioms (governing) in that file. - Tech stack baseline:
docs/architecture/tech_stack.md - Scope here: executable decomposition (epics, modules, milestones)
Folder Layout
epics/- One file per player-facing epic (E1–E9) with implementation slices.tooling/- Cross-cutting operator tracks (e.g. content authoring) that are not numbered with the nine core epics; same slice style, separate CT.* module IDs.modules/- Contract definitions, client vs server authority, PvP × combat engine, quest scope × party, data reload × telemetry ops, docs vs implementation, full module dependency register (E1–E9 and CT modules), per-module docs, and interface notes.milestones/- Phase-gated implementation tracks and pass/fail checklists.
Working Rules
- Do not rewrite baseline vision in these files; link back to the master plan.
- Keep slices backlog-ready (clear owner, dependencies, acceptance criteria).
- Use stable IDs (
E1,E1.M1, etc.) for core game epics; useCT.M1-style IDs for content tooling so tooling stays out of the E1–E9 sequence. - 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 id — E1.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 (E1–E9, 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 E1–E9)
| Track | Document | Modules (register) |
|---|---|---|
| Internal authoring & content pipeline | tooling/internal_authoring.md | CT.M1–M3 |
Next Actions
- 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.
- Populate
modules/module_dependency_register.mdas contracts stabilize. - Refine
milestones/phase_execution_plan.mdwith dates and owners when execution starts.