VinPropane
b9644a0453
NEO-79: Reconcile plan and E5M1 backlog for ability registry DI.
2026-05-24 22:05:27 -04:00
VinPropane
8bafec9d79
NEO-79: Add kickoff implementation plan for ability registry + DI.
2026-05-24 22:03:12 -04:00
VinPropane
fd2ffee089
NEO-77: Address code review — Bruno folder, E5M1 gate test, docs.
...
Add ability-catalog folder.bru, extra-id E5M1 gate AAA test, dependency
register NEO-77 note, and strike through resolved review suggestions.
2026-05-24 21:44:02 -04:00
VinPropane
42ea2598c3
NEO-77: Add code review for E5M1-02 server ability catalog load.
2026-05-24 21:42:44 -04:00
VinPropane
7c2697e4cc
NEO-77: Reconcile plan and module docs for E5M1-02 server load.
2026-05-24 21:40:58 -04:00
VinPropane
07444e45ce
NEO-77: Add E5M1-02 server ability catalog load kickoff plan.
2026-05-24 21:34:36 -04:00
VinPropane
866f962583
NEO-76: Fix review findings — duplicate ability row and docs.
...
Remove stray prototype_pulse from catalog; restore Epic 5 table layout,
align E5.M1 In Progress status, and close out code review doc.
2026-05-24 21:17:07 -04:00
VinPropane
6a71e9b6aa
NEO-76: add code review for ability catalog + CI branch.
2026-05-24 21:09:42 -04:00
VinPropane
9b11a521d8
NEO-76: Add prototype ability catalog, schema, and CI gates.
...
Freeze four AbilityDef rows in content with validate_content E5M1
allowlist; document freeze in E5.M1, content README, and CT.M1.
2026-05-24 21:08:16 -04:00
VinPropane
bafaacb963
NEO-76: Add E5M1-01 implementation plan for ability catalog + CI.
...
Lock four frozen AbilityDef rows, schema shape, validate_content gates,
and adopted prototype stat freeze before NEO-77 server load.
2026-05-24 21:06:32 -04:00
VinPropane
510d71113b
NEO-76: decompose E5.M1 prototype backlog (NEO-76–NEO-86, NEO-44).
...
Add full-stack Epic 5 Slice 1 story backlog with Linear issues, blockedBy
graph, and module/epic register cross-links.
2026-05-24 21:02:07 -04:00
VinPropane
7695527a79
NEO-75: address code review doc consistency findings
...
Update E3.M1/M3 status rows, epic Slice 5 completion note, README HUD
paths, E3S5-04 collapse AC, and strike through resolved review items.
2026-05-24 20:35:32 -04:00
VinPropane
cf0ef2d23e
NEO-75: add code review for capstone integration branch
2026-05-24 20:34:36 -04:00
VinPropane
977bcc3b27
NEO-75: capstone manual QA, README loop docs, alignment
...
Add zero-Bruno gather→refine→make checklist, end-to-end README section,
and mark Epic 3 Slice 5 client capstone complete in module docs.
2026-05-24 20:33:51 -04:00
VinPropane
fbae3148d2
NEO-75: add capstone implementation plan (kickoff)
...
Document gather→refine→make capstone scope, HUD collapse, manual QA
script, and module alignment per kickoff clarifications.
2026-05-24 20:32:18 -04:00
VinPropane
2fec42f8f6
NEO-74: Address code review — recipe sync HUD and test uids.
...
Wire recipes_sync_failed to CraftFeedbackLabel, remove unused _scroll
binding, add GdUnit .uid companions, extend recipe client HTTP error
test, strike through review items.
2026-05-24 19:59:00 -04:00
VinPropane
9b6abf093b
NEO-74: add code review for client craft UI branch.
2026-05-24 19:57:28 -04:00
VinPropane
c16b610468
NEO-74: Implement client craft UI, recipe list, and tests.
...
Add recipe-definitions and craft HTTP clients, scrollable recipe panel with
Craft buttons, CraftFeedbackLabel, refine skill HUD row, GdUnit coverage,
manual QA, and plan/module doc reconciliation.
2026-05-24 19:56:38 -04:00
VinPropane
dff58adfe8
NEO-74: Add kickoff implementation plan for client craft UI.
...
Documents E3S5-03 scope, kickoff HUD decisions, and file/test targets
for recipe list, craft POST client, and refine XP visibility.
2026-05-24 19:54:10 -04:00
VinPropane
07ca427f2f
NEO-73: preserve gather finalize across coalesced terminal POST.
...
Use awaiting-inventory flag so R-then-E still paints GatherFeedbackLabel
after inventory sync; only clear session on true orphans (Bugbot #107 ).
2026-05-24 19:42:39 -04:00
VinPropane
d0622701eb
NEO-73: clear orphaned gather pending on coalesced interact.
...
Track pending gather interactable id; drop flag when a different
interact completes (Bugbot PR #107 ). Add GdUnit coalescing test.
2026-05-24 19:24:00 -04:00
VinPropane
d6a80ed775
NEO-73: note review follow-up commit hash in review doc.
2026-05-24 19:09:38 -04:00
VinPropane
434226a069
NEO-73: address code review follow-ups.
...
Emit interaction_request_failed to clear stale gather pending flag;
add deny/HTTP failure tests; update alignment docs and review file.
2026-05-24 19:09:36 -04:00
VinPropane
6cd2c0cdda
NEO-73: add code review for client gather feedback branch.
2026-05-24 19:08:26 -04:00
VinPropane
adca7befe0
NEO-73: add manual QA and reconcile implementation plan.
...
Document gather HUD behavior in client README; mark E3S5-02 AC complete.
2026-05-24 19:07:22 -04:00
VinPropane
4682db48c4
NEO-73: add implementation plan for client gather feedback.
...
Kickoff clarifications: nearest in-range resource node on R, inventory
delta on GatherFeedbackLabel, SkillProgressionLabel for salvage XP.
2026-05-24 19:05:23 -04:00
VinPropane
ab670d0e26
NEO-72: mark review findings addressed in code review doc.
...
Strike through resolved blocking issue, suggestions, and consolidated nit.
2026-05-24 18:43:49 -04:00
VinPropane
e7a61a1b3f
NEO-72: fix HTTP client header types and strengthen tests.
...
Use PackedStringArray for request_completed headers so handlers run;
assert inventory payload shape and display_name_for after sync per review.
2026-05-24 18:43:39 -04:00
VinPropane
15fcc09493
NEO-72: Add code review for client inventory snapshot HUD.
2026-05-24 18:42:40 -04:00
VinPropane
8e44d81537
NEO-72: reconcile plan, E3S5 backlog, and module alignment docs.
...
Mark acceptance criteria complete and document landed client inventory HUD.
2026-05-24 18:41:24 -04:00
VinPropane
751fea3db4
NEO-72: add client inventory snapshot HUD and HTTP clients.
...
Wire GET inventory + item-definitions into InventoryLabel with I-key refresh,
displayName labels, and GdUnit coverage for happy/error paths.
2026-05-24 18:41:24 -04:00
VinPropane
1273296c73
NEO-72: add client inventory snapshot HUD implementation plan.
...
Kickoff clarifications locked displayName lookup, HUD+push_warning errors, and I-key refresh.
2026-05-24 18:37:44 -04:00
VinPropane
5f0f703555
NEO-71: address code review — CraftResult tense and README bullets
2026-05-24 18:32:08 -04:00
VinPropane
2be35c1640
NEO-71: Add code review for craft telemetry hook sites.
2026-05-24 18:30:46 -04:00
VinPropane
2d4751021b
NEO-71: add craft telemetry hook comment sites and docs
...
Place item_crafted and craft_failed TODO(E9.M1) anchors in
CraftOperations.TryCraft; document in server README and mark E3.M2
Slice 3 server backlog complete.
2026-05-24 18:23:35 -04:00
VinPropane
194078dd3b
NEO-71: add implementation plan for craft telemetry hook sites
2026-05-24 18:22:10 -04:00
VinPropane
5a3904c6bc
NEO-70: Address code review findings for craft HTTP.
...
Rename wire DTO to PlayerCraftRequest, add store-missing and default-quantity
API tests, improve Bruno deny isolation, README success sample, and doc nits.
2026-05-24 18:00:26 -04:00
VinPropane
9d6d358956
NEO-70: Add code review for craft HTTP + Bruno spine.
2026-05-24 17:59:04 -04:00
VinPropane
46393b8ca5
NEO-70: Add craft POST HTTP, Bruno spine, and docs.
...
Wire POST /game/players/{id}/craft to CraftOperations with CraftResponse DTOs,
integration tests, gather→refine→make Bruno folder, and module/README updates.
2026-05-24 17:57:55 -04:00
VinPropane
b148db8a61
NEO-70: Add implementation plan for craft HTTP + Bruno spine.
...
Kickoff clarifications: CraftResult-only wire response; no manual QA doc (Bruno + README).
2026-05-24 17:56:01 -04:00
VinPropane
c5115a3a13
NEO-69: Fix output-deny rollback order to prevent item loss.
...
Remove partial outputs before restoring inputs when output grant is
denied, matching StoreMissing and XP-failure compensating paths.
2026-05-24 17:33:27 -04:00
VinPropane
36adfd1897
NEO-69: Fix Bugbot pre-flight and output rollback issues.
...
Simulate input removal before output capacity checks, roll back partial
outputs on store-missing, and add tests for slot-freeing craft success.
2026-05-24 17:28:43 -04:00
VinPropane
51e9f1f5d0
NEO-69: Address code review findings for craft engine.
...
Fix AAA test layout, add batch quantity and simulate-add tests, restore
partial input rollback, and bump E3.M2 register status to In Progress.
2026-05-24 17:18:52 -04:00
VinPropane
b381cadf23
NEO-69: Add code review for craft engine implementation.
2026-05-24 17:17:48 -04:00
VinPropane
308de6b50d
NEO-69: Document craft engine and mark E3M2-05 acceptance complete.
...
Updates server README, module snapshot, alignment register, and backlog
after CraftOperations lands with full automated test coverage.
2026-05-24 17:17:01 -04:00
VinPropane
bba1415d54
NEO-69: Add craft engine implementation plan.
...
Kickoff plan for CraftOperations/CraftResult with pre-flight output
checks, refine XP grant, and unit test coverage before NEO-70 HTTP.
2026-05-24 17:14:44 -04:00
VinPropane
529cb616f5
NEO-68: Update docs and strike through code review findings.
...
Mark E3M2-04 landed, refresh alignment register and README, reconcile plan AC.
2026-05-24 17:08:18 -04:00
VinPropane
1636fdc2cb
NEO-68: Add GET /game/world/recipe-definitions HTTP projection.
...
Wire RecipeDefinitionsWorldApi over IRecipeDefinitionRegistry with schema v1
DTOs, Bruno folder, manual QA, and FrozenEightInIdOrder integration test.
2026-05-24 17:08:15 -04:00
VinPropane
8eccb14898
NEO-68: Add code review for kickoff implementation plan.
2026-05-24 17:06:38 -04:00
VinPropane
6de6a1781f
NEO-68: Add kickoff implementation plan for recipe-definitions GET.
...
Documents scope, DTO shape, tests, Bruno, and manual QA after kickoff clarifications.
2026-05-24 17:05:34 -04:00
VinPropane
95d42803e1
NEO-67: address code review nits on recipe registry
...
Delegate TryGetDefinition to catalog.TryGetRecipe, cache ordered defs at
construction, and assert unknown recipeId in host DI test.
2026-05-24 16:58:38 -04:00
VinPropane
2fc3b8f750
NEO-67: Add code review for recipe definition registry + DI.
2026-05-24 16:58:00 -04:00
VinPropane
81b0e3fc4b
NEO-67: add IRecipeDefinitionRegistry and DI adapter
...
Thin registry over RecipeDefinitionCatalog mirrors NEO-52/59: TryGetDefinition,
GetDefinitionsInIdOrder, AAA unit/host tests, README and alignment doc updates.
2026-05-24 16:57:17 -04:00
VinPropane
7188c5b558
NEO-67: add implementation plan for recipe definition registry
2026-05-24 16:56:06 -04:00
VinPropane
1fb4368a2c
NEO-66: Address code review follow-ups for recipe catalog load.
...
Pin Content:RecipesDirectory in all host test factories, add loader tests
for empty dir/invalid JSON/unknown output itemId, document manual QA skip.
2026-05-24 16:45:36 -04:00
VinPropane
c279eed572
NEO-66: Add code review for recipe catalog fail-fast load.
2026-05-24 16:43:49 -04:00
VinPropane
f209636e7e
NEO-66: Fail-fast server recipe catalog load at startup.
...
Add Game/Crafting loader, Slice 3 gate rules, DI registration, and AAA tests
mirroring item/resource-node catalog patterns; cross-check item and skill ids.
2026-05-24 16:41:48 -04:00
VinPropane
ccf4cf8e5c
NEO-66: Add implementation plan for recipe catalog load.
...
Kickoff plan for fail-fast server startup load of content/recipes with
CI-parity validation; strict split defers IRecipeDefinitionRegistry to NEO-67.
2026-05-24 16:38:40 -04:00
VinPropane
d4a4795eb1
NEO-65: Address code review doc alignment and NEO-66 sync note.
...
Bump E3.M2 module status to In Progress with NEO-65 snapshot; add
PROTOTYPE_SLICE3_RECIPE_IDS kickoff reminder for E3M2-02; strike through
resolved review suggestions.
2026-05-24 16:25:49 -04:00
VinPropane
966c54ac74
NEO-65: Add code review for RecipeDef catalog + CI.
2026-05-24 16:23:25 -04:00
VinPropane
b4f27b4a18
NEO-65: Document recipe catalog CI and mark E3M2-01 complete.
...
Update CT.M1 PR gate, E3.M2 freeze rules, alignment register, and backlog
checkboxes after prototype recipe validation lands.
2026-05-24 16:21:46 -04:00
VinPropane
b4b8536081
chore: codify full-stack epic decomposition policy
...
Add alwaysApply rule, prototype backlog template, epic template updates,
and review/kickoff gates so player-visible slices require client Linear
issues and Godot verification—not Bruno-only deferrals.
2026-05-24 16:19:32 -04:00
VinPropane
2cd17e293a
chore: Epic 3 Slice 5 client backlog and full-stack epic policy
...
Add E3S5-client-prototype-backlog (NEO-72–NEO-75), epic_03 Slice 5,
full-stack epics rule in decomposition README, and cross-links from
E3 module docs and prototype backlogs.
2026-05-24 16:16:51 -04:00
VinPropane
458e9b10e8
NEO-65: E3.M2 Slice 3 decomposition backlog and freeze docs
...
Add E3M2 prototype backlog (NEO-65–NEO-71), eight-recipe freeze table,
content/README Slice 3 CI note, and cross-links in alignment/decomposition docs.
2026-05-24 16:09:50 -04:00
VinPropane
0556d5fa0f
NEO-65: kickoff implementation plan for RecipeDef catalog + CI
...
Lock content shape for eight frozen prototype recipes before server load,
following NEO-50/NEO-57 schema + validate_content.py patterns.
2026-05-24 16:09:38 -04:00
VinPropane
a578d9b684
NEO-64: address code review follow-ups.
...
Nest gather_node_depleted hook in remainingGathers == 0 guard,
add E3M1-08 deny-branch out-of-scope note, and give README NEO-64
its own subsection anchor.
2026-05-24 16:00:02 -04:00
VinPropane
1bcaa1b350
NEO-64: add code review document.
2026-05-24 15:59:16 -04:00
VinPropane
847cda97a3
NEO-64: add gather telemetry hook sites and doc updates.
...
Comment-only resource_gathered and gather_node_depleted anchors in
GatherOperations.TryGather; README, module docs, manual QA, and E3.M1
backlog marked complete.
2026-05-24 15:58:29 -04:00
VinPropane
f39d12a093
NEO-64: add implementation plan for gather telemetry hooks.
2026-05-24 15:57:37 -04:00
VinPropane
0f846f90b9
NEO-63: fix Bruno depletion test node isolation.
...
Use prototype_urban_bulk_delta so earlier alpha gathers in the
collection do not pre-deplete capacity under CI Postgres persistence.
2026-05-24 15:51:32 -04:00
VinPropane
3834b2316a
NEO-63: address code review follow-ups.
...
AAA depletion test layout, source_kind_not_allowed assertion,
HTTP inventory_full deny test, trim duplicate XP test, doc comments.
2026-05-24 15:46:20 -04:00
VinPropane
35381ad749
NEO-63: add code review document.
2026-05-24 15:45:13 -04:00
VinPropane
01dc48a50a
NEO-63: add plan, manual QA, and doc updates.
...
README gather-via-interact section; E3.M1 anchor coords; backlog landed.
2026-05-24 15:44:15 -04:00
VinPropane
f58ab4a2eb
NEO-62: update docs for gather engine landing.
...
README, E3.M1 module doc, alignment table, backlog checkboxes.
2026-05-24 15:41:28 -04:00
VinPropane
acf9fe125f
NEO-62: add gather engine implementation plan.
...
Kickoff clarifications: inventory → XP → depletion commit order;
compensating inventory rollback on XP failure.
2026-05-24 15:30:27 -04:00
VinPropane
0cc5bb8925
NEO-61: address code review follow-ups.
...
Fix AAA layout in depletion tests, add ResourceNodeInstanceIds.Normalize,
throw on failed lazy-init after catalog hit, and update dependency register
footnote plus review doc strikethroughs.
2026-05-24 15:15:25 -04:00
VinPropane
0dfbe769e7
NEO-61: add code review document.
2026-05-24 15:13:51 -04:00
VinPropane
6d2d3c040a
NEO-61: add world node instance depletion store.
...
Split IResourceNodeInstanceStore + ResourceNodeInstanceOperations with
lazy init from catalog maxGathers, atomic decrement, node_depleted and
unknown_node reason codes, V006 Postgres migration, and parity tests.
2026-05-24 15:03:05 -04:00
VinPropane
869d411b6f
NEO-61: add implementation plan for node depletion store.
...
Kickoff clarifications adopt split store/operations, lazy init,
keep depleted rows at zero, and defer interactable registry expansion.
2026-05-24 14:59:48 -04:00
VinPropane
2b66df86b8
NEO-60: address code review — register footnote and Bruno comment
...
Extend E3.M1 dependency register note with NEO-57–NEO-60 landed slices;
add StringComparer.Ordinal comment to Bruno ordinal test for parity.
2026-05-24 14:49:15 -04:00
VinPropane
b60920b2e2
NEO-60: add code review document
2026-05-24 14:48:16 -04:00
VinPropane
97f8f31682
NEO-60: add GET /game/world/resource-node-definitions endpoint
...
Versioned read-only projection backed by IResourceNodeDefinitionRegistry
with nested yield DTOs, integration test, Bruno, manual QA, and docs.
2026-05-24 14:47:23 -04:00
VinPropane
78dbf1c454
NEO-60: add implementation plan for resource-node-definitions GET
...
Kickoff plan mirrors NEO-53 item-definitions pattern with nested yield
projection, Bruno, manual QA, and integration tests on IResourceNodeDefinitionRegistry.
2026-05-24 14:44:04 -04:00
VinPropane
1e1ca5519c
NEO-59: address code review follow-ups
...
Simplify GetDefinitionsInIdOrder to iterate key-value pairs directly,
avoiding the intermediate sorted-keys array and second dictionary lookup.
2026-05-24 14:31:20 -04:00
VinPropane
dc66b5cef4
NEO-59: add code review document
2026-05-24 14:29:46 -04:00
VinPropane
01dec2b6c8
NEO-59: document registry in README, alignment, and backlog
...
Mark acceptance criteria complete in the implementation plan.
2026-05-24 14:26:23 -04:00
VinPropane
4921f2c25b
NEO-59: add implementation plan for resource node registry + DI
2026-05-24 14:23:55 -04:00
VinPropane
44fc8d7b62
NEO-58: address code review follow-ups
...
Document optional Bruno smoke in plan; add empty-catalog file loader tests;
tighten host DI test AAA; strike through resolved review items.
2026-05-24 14:04:42 -04:00
VinPropane
6656853473
NEO-58: add code review for resource-node catalog load
2026-05-24 14:03:19 -04:00
VinPropane
fdaf5b7231
NEO-58: note NEO-57 merged and branch rebased on main
...
Update plan after PR #92 ; precursor content is on main.
2026-05-24 14:01:36 -04:00
VinPropane
0384b63046
NEO-58: add fail-fast resource-node catalog load at startup
...
Loader, Slice 2 gates, DI registration, AAA tests, README and plan updates.
Cross-checks yield itemIds against ItemDefinitionCatalog loaded first.
2026-05-24 14:01:29 -04:00
VinPropane
2de699b7bd
NEO-58: add implementation plan for resource-node catalog load
...
Kickoff plan for E3M1-02: fail-fast server loader mirroring NEO-51/NEO-57,
stacked on NEO-57, catalog-only DI until NEO-59 registry story.
2026-05-24 14:01:29 -04:00
VinPropane
fba6bff24f
NEO-57: align E3.M1 contract table with two-file content layout
...
Update illustrative fields to match landed node + yield row schemas.
2026-05-24 13:54:42 -04:00
VinPropane
f0a4183598
NEO-57: close review follow-ups on E3M1 backlog and review doc
...
Clarify two-file yield layout in backlog; mark review suggestions
resolved and verdict Approve.
2026-05-24 13:54:36 -04:00
VinPropane
ca1a15fce1
NEO-57: align E3M1 backlog with landed content + review follow-ups
...
Mark E3M1-01 acceptance complete, document resource-yield-row schema
choice, and strike through resolved review suggestions.
2026-05-24 13:53:25 -04:00
VinPropane
2584947953
NEO-57: add code review for resource node content + CI
2026-05-24 13:53:04 -04:00
VinPropane
b68d74b0b8
NEO-57: add prototype resource node catalogs, schemas, and CI gates
...
Four frozen ResourceNodeDef rows and per-node yield tables under
content/resource-nodes/ with JSON Schema validation and Slice 2 gates
(four nodeDefIds, gatherLens coverage, scrap_metal_bulk yields only).
2026-05-24 13:49:47 -04:00
VinPropane
b7f29dcd6a
NEO-57: add implementation plan for resource node content + CI
...
Kickoff clarifications: two-file catalog layout, maxGathers in content,
differentiated yield quantities, decomposition docs merged from chore branch.
2026-05-24 13:47:55 -04:00
VinPropane
17daf9a9ca
NEO-57: merge E3.M1 Slice 2 decomposition docs
...
Bring E3M1-prototype-backlog, E3.M1 freeze table, and register notes
from chore/e3m1-slice2-decomposition onto the story branch.
2026-05-24 13:47:55 -04:00
VinPropane
011289a154
chore: decompose E3.M1 Slice 2 gather backlog (NEO-57–64)
...
Epic 3 Slice 2 follows completed E3.M3 inventory work: eight-story
backlog, expanded module doc, register note, and Linear issues for
resource nodes, yields, depletion, and gather integration.
2026-05-24 13:43:23 -04:00
VinPropane
deed0c4314
NEO-56: address code review follow-ups
...
Extend E3.M3 dependency register footnote; expand post-mutation deny hook
comments; clarify Deny payload at call sites; strike review items Done.
2026-05-24 13:40:12 -04:00
VinPropane
b8e0cce582
NEO-56: add code review for inventory telemetry hook sites
2026-05-24 13:33:39 -04:00
VinPropane
dc5141ed03
NEO-56: add inventory telemetry hook comment sites
...
item_created on successful TryAddStack; inventory_transfer_denied on
all Denied paths. README, module docs, manual QA, plan ACs updated.
2026-05-24 13:32:21 -04:00
VinPropane
786513ba56
NEO-56: add implementation plan after kickoff clarifications
...
Engine-only comment hooks for item_created and inventory_transfer_denied;
kickoff decisions recorded in plan.
2026-05-24 13:31:18 -04:00
VinPropane
fddbb95a45
NEO-55: address code review suggestions for inventory HTTP
...
Add remove round-trip and invalid_quantity API tests, Bruno remove request,
dependency register NEO-55 footnote, and strike-through review follow-ups.
2026-05-23 22:51:59 -04:00
VinPropane
d127de7bbb
NEO-55: add code review for inventory GET/POST HTTP and Bruno.
2026-05-23 22:49:31 -04:00
VinPropane
69327f50b4
NEO-55: player inventory GET/POST HTTP, Bruno, and docs
...
Versioned snapshot read and mutationKind add/remove POST backed by
PlayerInventoryOperations; AAA API tests; Bruno happy path + deny case.
2026-05-23 22:45:27 -04:00
VinPropane
db3b80d242
NEO-55: add implementation plan for inventory GET/POST + Bruno
...
Kickoff clarifications: single POST with mutationKind, full fixed slot
arrays, applied response field; no manual QA doc per user choice.
2026-05-23 22:41:05 -04:00
VinPropane
ac3900c194
NEO-54: address code review suggestions for inventory tests and docs
2026-05-23 19:31:26 -04:00
VinPropane
362608ed5f
NEO-54: add code review for inventory store and rules engine.
2026-05-23 19:29:37 -04:00
VinPropane
3724a54f07
NEO-54: note inventory DI chained from item catalog registration
2026-05-23 19:27:06 -04:00
VinPropane
01e391b03a
NEO-54: player inventory store, stack/slot rules engine, and tests
2026-05-23 19:26:57 -04:00
VinPropane
e5ffa1b951
NEO-54: add implementation plan for inventory store and rules engine
2026-05-23 19:20:01 -04:00
VinPropane
52590fa749
NEO-53: address code review suggestions
...
Register footnote NEO-53, Bruno exact id-order test, test indent fix,
review doc strikethroughs.
2026-05-23 19:12:20 -04:00
VinPropane
68c4980e42
NEO-53: Add code review for item-definitions HTTP + Bruno.
2026-05-23 19:11:28 -04:00
VinPropane
08428c4da4
NEO-53: GET world item-definitions, Bruno, docs, and tests
...
Registry-backed read model at /game/world/item-definitions; Bruno
collection, manual QA checklist, README and module alignment updates.
2026-05-23 19:09:46 -04:00
VinPropane
9e2e4ab3a7
NEO-53: add implementation plan for world item-definitions HTTP
...
Kickoff clarifications: required-five JSON fields, /game/world route,
manual QA doc — all adopted per user choices.
2026-05-23 19:08:24 -04:00
VinPropane
0d904527ac
NEO-52: address code review doc suggestions for registry
...
Add NEO-52 registry bullet to E3.M3 module doc, extend dependency
register footnote, and mark review suggestions done.
2026-05-23 18:17:27 -04:00
VinPropane
7bd4064b93
NEO-52: Add code review for item definition registry + DI.
2026-05-23 18:16:17 -04:00
VinPropane
792b38d8a9
NEO-52: add IItemDefinitionRegistry with DI and lookup tests
...
Thin adapter over ItemDefinitionCatalog mirroring NEO-35 skill registry;
registers singleton in AddItemDefinitionCatalog with TryGetDefinition,
GetDefinitionsInIdOrder, and AAA unit + host DI tests.
2026-05-23 18:11:33 -04:00
VinPropane
1e9f1e9a3a
NEO-52: add implementation plan for item definition registry + DI
...
Kickoff plan mirrors NEO-35 skill registry pattern on NEO-51 catalog;
includes GetDefinitionsInIdOrder and TryGetDefinition per kickoff answers.
2026-05-23 18:09:02 -04:00
VinPropane
38f0c56711
NEO-51: Address code review — tests, docs, review strikethroughs.
...
Add Slice 1 role/stackMax and missing-path loader tests; E3.M3 server
load bullet; register footnote; host test temp-dir cleanup.
2026-05-17 22:04:03 -04:00
VinPropane
1c9c93513e
NEO-51: Add code review for item catalog fail-fast load.
2026-05-17 22:01:47 -04:00
VinPropane
d23f6dd8ab
NEO-51: Document item catalog boot and mark plan complete.
...
README, alignment register, and acceptance checklist updated.
2026-05-17 21:56:12 -04:00
VinPropane
b461f3bf47
NEO-51: Record kickoff clarification answers in plan.
...
User confirmed strict NEO-52 split and loader plus host boot tests.
2026-05-17 21:52:15 -04:00
VinPropane
b5674c4150
NEO-51: Add implementation plan for item catalog fail-fast load.
...
Kickoff clarifications adopt strict NEO-52 split, NEO-34 test pattern,
and in-process validation mirroring validate_content.py.
2026-05-17 21:50:50 -04:00
VinPropane
0ce952131a
NEO-50: Address review — equip_stub gate by role, backlog sync.
2026-05-17 21:29:32 -04:00
VinPropane
8fa828daa0
NEO-50: Add code review — Approve for prototype item catalog + CI.
2026-05-17 21:27:59 -04:00
VinPropane
bbc6b20fd3
NEO-50: Document frozen prototype item spine and update alignment.
2026-05-17 21:25:06 -04:00
VinPropane
6616bfbca5
NEO-50: Add implementation plan for prototype ItemDef catalog + CI.
2026-05-17 21:22:55 -04:00
VinPropane
56233bfe2c
NEO-50: Add E3.M3 prototype backlog and decomposition doc links.
...
Documents Epic 3 Slice 1 story order (NEO-50–NEO-56), frozen prototype item ids,
and register/module pointers for ItemizationAndInventorySchema.
2026-05-17 21:15:42 -04:00
VinPropane
e9c02eded7
NEO-48: mark review items resolved — Approve verdict
2026-05-17 20:38:02 -04:00
VinPropane
aba26446d3
NEO-48: address r2 review — atomic fixture, tests, docs
...
Batch skillXp then resetPerkState with XP rollback; 400 for invalid skillXp;
MasteryFixtureApi gate tests; README fixture vs grant semantics; Bruno GET playerId.
2026-05-17 20:37:00 -04:00
VinPropane
2bb02d76e9
NEO-48: add re-review for mastery fixture testing refactor
2026-05-17 20:34:36 -04:00
VinPropane
ffdbed26f2
NEO-48: dev mastery-fixture API for Bruno state setup
...
Replace fixture player ids with POST …/__dev/mastery-fixture (resetPerkState,
absolute skillXp). Bruno deny tests set state in pre-request on dev-local-1.
Gated to Development/Testing or Game:EnableMasteryFixtureApi.
2026-05-17 20:31:26 -04:00
VinPropane
b72201b1f0
NEO-48: Bruno fixture players for deterministic perk deny tests
...
Seed neo48-perk-fresh and neo48-perk-branch via Game:FixturePlayerIds;
level_too_low uses isolated fresh player, branch_already_chosen sets up
neo48-perk-branch in pre-request instead of skipping on shared state.
2026-05-17 20:26:21 -04:00
VinPropane
3ba8300652
NEO-48: address code review — Bruno deny, API deny tests
...
Add self-contained branch_already_chosen Bruno request, HTTP deny smoke
for unknown track/tier/branch and null-body 400, folder docs for level_too_low.
2026-05-17 20:21:42 -04:00
VinPropane
0838e661c9
NEO-48: add code review for perk-state HTTP
2026-05-17 20:16:46 -04:00
VinPropane
39c54c3881
NEO-48: perk-state HTTP, Bruno, tests, and docs
...
GET/POST /game/players/{id}/perk-state with versioned JSON, engine-backed
branch selection, PerkStateApiTests, Bruno collection, README, and E2.M3 alignment.
2026-05-17 20:10:31 -04:00
VinPropane
5290044845
NEO-48: add implementation plan for perk-state HTTP
...
Kickoff plan for GET/POST /game/players/{id}/perk-state, Bruno, and API
tests; records user choices on route path and unlockedEvents on success.
2026-05-17 20:06:52 -04:00
VinPropane
5058bc1963
NEO-49: address code review follow-ups for telemetry hooks
2026-05-17 19:21:21 -04:00
VinPropane
7ce9dc172c
NEO-49: add code review for perk_unlock telemetry hooks
2026-05-17 19:15:17 -04:00
VinPropane
38ef54c238
NEO-49: document perk_unlock hook sites in README, module, and manual QA
2026-05-17 19:10:14 -04:00
VinPropane
f3e48f4077
NEO-49: kickoff implementation plan for perk_unlock telemetry hooks
2026-05-17 19:08:54 -04:00
VinPropane
76e710b491
NEO-47: re-review — follow-ups verified, approve for merge
2026-05-17 18:46:25 -04:00
VinPropane
0a2a6fe45b
NEO-47: address code review follow-ups for perk unlock engine
...
Retroactive path-auto unlock on branch pick, unlock rollback, CanWritePlayer
gate, expanded deny tests, gather-hook smoke, decomposition docs, review strikethroughs.
2026-05-17 18:45:11 -04:00
VinPropane
2520a80b6e
NEO-47: add code review for perk unlock engine
2026-05-17 18:42:28 -04:00
VinPropane
38774a5b39
NEO-47: perk unlock engine, PerkState persistence, and tests
...
Add V004 perk tables, in-memory/Postgres stores, PerkUnlockEngine (tier-1 branch
pick, path-auto tier-2 unlocks), level-up hook in skill XP grants, and AAA tests.
Bruno docs note internal perk reevaluation on level-up (HTTP in NEO-48).
2026-05-17 18:38:41 -04:00
VinPropane
e297b3a023
NEO-47: add implementation plan for perk unlock engine
...
Kickoff clarifications, tier-2 auto-path recommendation, and file/test lists for PerkState persistence and level-up hooks.
2026-05-17 18:34:50 -04:00
VinPropane
07fc566e2c
NEO-46: address code review follow-up.
...
Add loader deny-path and registry enumeration tests, tierIndex 1..N gate
in validate_content.py, E2.M3 handoff doc update, and review strikethroughs.
2026-05-17 18:12:39 -04:00
VinPropane
174c390aa4
NEO-46: fail-fast mastery catalog load at server startup.
...
Mirror validate_content.py gates in MasteryCatalogLoader, expose IMasteryCatalogRegistry, cross-check skillIds against the skill catalog, and enforce tierIndex 1..N per track.
2026-05-17 18:06:50 -04:00
VinPropane
898f935b4f
NEO-46: add implementation plan for mastery catalog boot load.
2026-05-17 18:03:30 -04:00
VinPropane
594287c199
NEO-45: address docs review suggestions for E2.M3 Slice 4.
...
Expand data contract and NEO-46 handoff, gigs.md gig-mastery clarification,
acceptance footnote, and mark docs review items Done.
2026-05-17 13:16:49 -04:00
VinPropane
4a9730c577
NEO-45: address code review doc alignment and CI nits.
...
Align E2.M3 In Progress status, backlog checkboxes, perks map doc;
reject unreferenced PerkDef rows; tier-2 branch displayNames; review Done.
2026-05-16 20:05:51 -04:00
VinPropane
f5f04d8258
NEO-45: lock prototype salvage mastery catalog, schemas, and CI.
...
Add mastery JSON schema and salvage-only Slice 4 catalog with tier/branch
freeze; extend validate_content.py for skillId, perkId, and branch gates;
update E2.M3 decomposition, content README, and implementation plan.
2026-05-16 19:50:09 -04:00
VinPropane
0b16de6d6f
NEO-43: close code review doc follow-ups (alignment + E7 status)
2026-05-15 20:36:08 -04:00
VinPropane
2af9b1c011
NEO-43: mission reward skill XP grant helper and docs
2026-05-15 20:30:43 -04:00
VinPropane
48c59d4560
NEO-43: add implementation plan (kickoff)
2026-05-11 13:03:45 -04:00
VinPropane
caa400f43d
NEO-42: address review — decomposition docs, plan AC, grant helper, test assert
2026-05-10 19:46:49 -04:00
VinPropane
15bf598228
NEO-42: add refine activity XP grant helper and tests
2026-05-10 19:38:30 -04:00
VinPropane
20a141ba37
NEO-42: add implementation plan for craft/refine skill XP
2026-05-10 19:36:04 -04:00
VinPropane
29a6c6d1a7
NEO-41: address code review (E3.M1 status, deny-path test)
2026-05-10 19:13:56 -04:00
VinPropane
05abc47111
NEO-41: add code review for gather XP branch
2026-05-10 19:11:56 -04:00
VinPropane
c1e77280e3
NEO-41: grant salvage activity XP on resource_node interact
2026-05-10 19:10:35 -04:00
VinPropane
650767f16c
NEO-41: add implementation plan for gather interact skill XP
2026-05-10 19:06:45 -04:00
VinPropane
35b666ed60
NEO-40: sync E2.M2 alignment doc; close review feedback
2026-05-10 18:54:17 -04:00
VinPropane
aaffaa7f1d
NEO-40: add code review for telemetry hook sites branch
2026-05-10 18:52:33 -04:00
VinPropane
effd234ee3
NEO-40: add progression telemetry hook comment sites
2026-05-10 18:49:40 -04:00
VinPropane
178ff2b625
NEO-40: add implementation plan for telemetry hook sites
2026-05-10 18:48:18 -04:00
VinPropane
236040a5c2
NEO-39: add data-driven level curve with startup schema validation
...
Replace placeholder XP level math with content-backed thresholds validated in CI and at server boot, and update docs/manual QA/review artifacts to reflect NEO-39 delivery and follow-up fixes.
2026-05-06 23:10:06 -04:00
VinPropane
b2999f3ed9
NEO-38: address review — docs alignment, Bruno deny, README levelUps trim
2026-05-06 22:26:23 -04:00
VinPropane
9ed4034140
NEO-38: add code review (2026-05-06)
2026-05-06 22:24:17 -04:00
VinPropane
2bcde45891
NEO-38: add curl examples to manual QA
2026-05-06 22:20:14 -04:00
VinPropane
33b2e917e4
NEO-38: skill XP POST grant, persistence, level-up response
2026-05-06 22:17:02 -04:00
VinPropane
58b9016d40
NEO-38: add implementation plan for skill XP grant and level-up
2026-05-06 22:11:16 -04:00
VinPropane
c58e716669
chore: smoke-test path-filtered CI skip (docs-only whitespace)
2026-05-06 22:04:39 -04:00
VinPropane
a89aadbb43
NEO-37: re-review notes for unordered skills contract update
2026-05-06 21:54:13 -04:00
VinPropane
a3cbef063c
NEO-37: treat skill progression JSON array order as non-contractual
2026-05-06 21:53:24 -04:00
VinPropane
295eb34c68
NEO-37: reconcile decomposition docs + review feedback
2026-05-06 21:51:44 -04:00
VinPropane
5e180f3aa0
NEO-37: code review snapshot for skill progression API branch
2026-05-06 21:50:37 -04:00
VinPropane
9cd96a72c3
NEO-37: add skill progression snapshot GET API, tests, Bruno, docs
2026-05-06 21:48:17 -04:00
VinPropane
413484000f
NEO-37: add implementation plan for skill progression snapshot API
2026-05-06 21:46:41 -04:00
VinPropane
15ab06f3e7
docs: note canonical GitHub org for Linear and doc links
2026-05-04 21:24:25 -04:00
VinPropane
e2e413f42c
docs: address 2026-04-30 documentation review suggestions
2026-05-04 21:09:05 -04:00
VinPropane
f67bae79d8
chore: add 2026-05-04 documentation review
2026-05-04 21:06:51 -04:00
VinPropane
4236d1ec00
chore: link E2.M2 backlog to Linear NEO-37–NEO-44
2026-05-04 20:57:01 -04:00
VinPropane
a0c3599525
NEO-36: address code review (manual QA header, alignment, README, Bruno)
2026-05-04 20:44:52 -04:00
VinPropane
28fcd52c8c
NEO-36: add curl example to manual QA checklist
2026-05-04 20:37:20 -04:00
VinPropane
ab597ff350
NEO-36: expose GET /game/world/skill-definitions with tests, Bruno, QA doc
2026-05-04 20:36:06 -04:00
VinPropane
044b4f823c
NEO-36: add implementation plan for skill catalog HTTP API
2026-05-04 20:33:53 -04:00
VinPropane
035e915934
NEO-35: address NEO-35 code review (AAA, docs, null id, cleanup)
2026-05-04 19:53:53 -04:00
VinPropane
fb863a457b
NEO-35: add ISkillDefinitionRegistry and lookup tests
2026-05-04 19:50:49 -04:00
VinPropane
c2ca511a35
NEO-35: add implementation plan for skill definition registry
2026-05-04 19:48:34 -04:00
VinPropane
9da5e7dbf5
NEO-34: address code review follow-ups (docs, appsettings, AAA)
...
Update E2.M1 alignment table for landed catalog load; add Content placeholders
to appsettings.json; align implementation plan tests/appsettings notes; expand
manual QA header to project standard; strike review suggestions; tighten host
catalog test Arrange/Act/Assert.
2026-05-02 19:50:02 -04:00
VinPropane
922e81eb0f
NEO-34: add code review for skill catalog startup branch
2026-05-02 19:47:45 -04:00
VinPropane
1a9088c77c
NEO-34: fail-fast skill catalog load at server startup
...
Register SkillDefinitionCatalog from content/skills with JsonSchema.Net validation
mirroring validate_content.py and the prototype Slice 1 gate. Resolve paths via
Content:SkillsDirectory or discovery from AppContext.BaseDirectory. Eager-load
after WebApplication build so bad catalogs block startup. Add unit and host
tests, pin test factories to repo skills, document config in server/README, add
manual QA checklist, and extend Bruno GET /health smoke tests.
2026-05-02 19:44:10 -04:00
VinPropane
6344858541
NEO-34: add implementation plan for skill catalog startup load
2026-05-02 19:35:57 -04:00
VinPropane
9afaad71ca
NEO-33: Apply code review feedback (validate_content, E2.M1)
2026-05-02 19:27:28 -04:00
VinPropane
02cb4d8556
NEO-33: Add code review document (2026-05-02)
2026-05-02 19:25:46 -04:00
VinPropane
583201cc7c
NEO-33: Freeze prototype SkillDef trio in CI and docs
2026-05-02 19:23:47 -04:00
VinPropane
66150ea224
NEO-33: Add implementation plan after kickoff clarifications
2026-05-02 19:21:20 -04:00
VinPropane
753f622602
chore: Document E2.M1 module Linear backlog in decomposition
2026-04-30 22:40:11 -04:00
VinPropane
cdf7c61ce4
NEO-32: defer review suggestion #1 (integration test AAA)
2026-04-30 22:04:11 -04:00
VinPropane
27daef70a7
NEO-32: commit Godot .uid companions; document convention for agents
2026-04-30 22:02:29 -04:00
VinPropane
7d64ed2adc
NEO-32: prune expired cooldown entries on TryGetCooldownEndUtc
2026-04-30 21:58:40 -04:00
VinPropane
7ddfb53219
NEO-32: add pre-merge code review (docs/reviews/2026-04-30-NEO-32.md)
2026-04-30 21:52:14 -04:00
VinPropane
f4ba4cdd92
NEO-32: optional NEON_SPRAWL_API_LOG stdout for ability-cast
2026-04-30 21:37:03 -04:00
VinPropane
ae74f570dc
NEO-32: manual QA step 3 without server console logging
2026-04-30 21:33:08 -04:00
VinPropane
361a6800d2
NEO-32: cooldown snapshot API, on_cooldown deny, client HUD sync
2026-04-30 21:19:32 -04:00
VinPropane
b4b67bccfd
NEO-32: add implementation plan for cooldown snapshot sync
2026-04-30 21:13:17 -04:00
VinPropane
8a9a9bcf78
NEO-30: address code review follow-ups
2026-04-30 21:04:31 -04:00
VinPropane
deec789af3
NEO-30: add code review for cast funnel telemetry hooks branch
2026-04-30 21:02:49 -04:00
VinPropane
b5478782a8
NEO-30: cast funnel telemetry hook sites and docs
2026-04-30 20:59:47 -04:00
VinPropane
0e95918b56
NEO-30: add implementation plan for cast funnel telemetry hooks
2026-04-30 20:53:47 -04:00
VinPropane
c3acbdb373
NEO-28: Add reviewability guideline; mark NEO-28 review suggestions done.
...
Document preferring separate branches/commits for mechanical test-only
churn vs ticket-scoped changes. Strike through resolved bullets in the
saved review file per project convention.
2026-04-27 22:13:11 -04:00
VinPropane
7de8e7ecfd
NEO-28: cast target authority, HUD feedback, tests + docs
2026-04-27 21:03:04 -04:00
VinPropane
479d1e1806
NEO-31: Bruno collection metadata, cast script UIDs, review verification notes
2026-04-27 20:50:53 -04:00
VinPropane
af1fdef816
NEO-31: single authority mirror for hotbar and ability cast clients
2026-04-27 20:45:48 -04:00
VinPropane
cc1c6f711e
NEO-31: request_cast bool for telemetry hook; document cast API in server README
2026-04-27 20:44:40 -04:00
VinPropane
e88e59f3a6
NEO-31: hotbar cast resolver tests, doc alignment, review follow-up
2026-04-27 20:42:36 -04:00
VinPropane
eac95f0c27
chore: group Bruno hotbar-loadout and ability-cast under subfolders
2026-04-27 20:27:53 -04:00
VinPropane
7e97eb4c1d
NEO-31: ability cast POST, client hotbar keys, tests, Bruno
2026-04-27 20:17:57 -04:00
VinPropane
e0e9f90329
NEO-31: plan Bruno requests for ability-cast API parity
2026-04-27 20:14:29 -04:00
VinPropane
e9fcf46b02
NEO-31: add E1M4-02 implementation plan (cast request path kickoff)
2026-04-27 20:13:10 -04:00
VinPropane
cb95876f73
NEO-29: expand manual QA with client-driven checks
...
Add explicit client-side validation steps to the NEO-29 manual QA checklist and include the generated Godot uid file created during client test runs.
2026-04-26 00:03:33 -04:00
VinPropane
9ac4f27ea2
NEO-29: resolve follow-up review regressions
...
Fix the hotbar client test transport body construction so the suite parses and runs again, and normalize AAA marker ordering in the flagged C# tests to restore readability consistency with the test template.
2026-04-25 23:26:25 -04:00
VinPropane
d25d7d0211
NEO-29: apply code review follow-ups
...
Set E1.M4 documentation status to In Progress across decomposition tracking docs and add lower-bound slot validation coverage. Mark the corresponding review suggestions and nit as resolved in the saved review file.
2026-04-25 22:44:58 -04:00
VinPropane
acde9e8145
NEO-29: add HotbarLoadout v1 contract and hydration path
...
Ship a server-owned hotbar loadout API with Postgres-or-memory persistence so slot bindings survive reconnects in configured environments. Wire client boot hydration and add tests/docs/manual QA to keep the prototype contract and policy explicit.
2026-04-25 22:29:52 -04:00
VinPropane
09e160e955
chore: document E1.M4 backlog and Linear issue mapping
...
Capture the E1.M4 vertical slice backlog in-repo and sync module/dependency docs with the created Linear stories so planning and execution references stay aligned.
2026-04-25 22:12:48 -04:00
VinPropane
9c054fbcf2
NEO-27: add Slice 3 telemetry hook-site documentation
...
Map SelectionEvent to target_changed, reserve ability_cast_requested and ability_cast_denied hook locations, and align plan/manual QA/decomposition docs with TODO(E9.M1) telemetry follow-up.
2026-04-25 21:56:28 -04:00
VinPropane
a87556f88b
NEO-27: note NEO-24 blocker removed in Linear (plan risks)
2026-04-25 19:53:37 -04:00
VinPropane
dd948120ff
NEO-27: add implementation plan for Slice 3 telemetry hook sites
2026-04-25 19:52:45 -04:00
VinPropane
1882476fd3
NEO-26: address code review — tracking docs, sequence tests, review strikethrough
...
Align E1.M3 rows with landed SelectionEvent (NEO-26) vs follow-on scope.
Assert selection_event sequence in GdUnit. Mark review suggestions/nits done.
2026-04-25 19:41:46 -04:00
VinPropane
5127fe59a7
NEO-26: emit selection_event from TargetSelectionClient
...
Add selection_event signal when lockedTargetId changes; attribute tab, clear,
and server_correction from POST/GET paths. Optional log_selection_events print.
GdUnit coverage; README, E1.M3 snapshot, manual QA, and plan checklist updated.
2026-04-25 19:33:53 -04:00
VinPropane
acb8ccf3c1
NEO-26: fix D6 rationale — interactables out of scope by ticket shape, not NEO-25 status
2026-04-25 19:28:28 -04:00
VinPropane
ada7630605
NEO-26: record AskQuestion outcomes and planning recommendations
2026-04-25 19:27:17 -04:00
VinPropane
7c2f913757
NEO-26: add implementation plan for SelectionEvent surface
2026-04-25 19:19:16 -04:00
VinPropane
c17526e611
NEO-25: close code review follow-up (alignment, warning, tests)
2026-04-24 20:54:26 -04:00
VinPropane
0e72d98177
NEO-25: move resource_node anchor clear of Obstacle at (6,1,5)
2026-04-24 20:42:12 -04:00
VinPropane
ce54fcc44f
NEO-25: world interactables GET, registry rows, fetch-driven Godot props + glow
2026-04-24 20:36:15 -04:00
VinPropane
6e40af1a1a
NEO-25: add implementation plan (descriptor list + fetch-driven client)
2026-04-24 20:24:00 -04:00
VinPropane
d6ef4fd811
NEO-24: race-free target/select via optional positionHint
...
Followup #5 : after locking alpha, walking into beta's ring, stopping and
pressing Tab could still return `out_of_range` even when client and server
agreed on position (Δ=0). The freshness-kick move-stream POST and the
target/select POST race on separate HTTP connections so the select can be
validated against a stale stored snap.
Extend TargetSelectRequest v1 with an optional positionHint {x,y,z}.
Server uses the hint for the radius check and for the echoed
targetState.validity; the hint is advisory and does not write to the
position store (move-stream stays the sole write path). Client attaches
the hint automatically whenever set_freshness_kick(...) is wired, so
headless unit tests that skip the wiring fall through to the no-hint
behavior. Freshness kick is kept in place to refresh the stored snap for
later validity GETs but is no longer load-bearing for denial correctness.
Server: 3 new tests (hint accepts when stored is stale, hint-far denies,
hint never writes to position store). Client: 1 new test asserting the
hint is in the POST body when wired. All 62 server + 96 client tests
pass.
Plan Decision 8, review follow-up #5 , manual QA section 6, and NEO-23
contract notes updated. New bruno request exercises the hint path.
2026-04-21 23:52:20 -04:00
VinPropane
a7453eb82f
NEO-24: unify prototype target radius at 6 m, overlap rings at origin
...
All prototype targets now share `PrototypeTargetRegistry.SharedLockRadius`
(= 6 m). Anchors moved to alpha `(-3, 0.5, -3)` and beta `(3, 0, 3)` so
the two 6 m rings overlap ~3.5 m wide centered at origin, letting Tab
flip between targets without locomotion. Spawn `(-5, -5)` keeps alpha
in range (~2.83 m) and beta out (~11.31 m) so the existing soft-lock
denial QA path at spawn still holds.
`prototype_target_constants.gd` mirrors the shared radius + new anchors.
The range-aware Tab picker now **skips the currently-locked id** so Tab
always expresses a swap intent — if the only in-range target is already
locked, the fallback picks the next cycle id and the server denies
(preserves NEO-23's "Tab = visible denial when no swap possible" rule).
Tests:
- Server: new `PlayerTargetStateReaderTests.ComputeValidity_AtOrigin_…`
asserts both targets report `Ok` at origin. Existing boundary test
rewritten for the new alpha anchor.
- Client: new `test_tab_from_locked_alpha_at_origin_swaps_to_beta_when_both_in_range`
and `test_tab_when_only_current_lock_is_in_range_falls_back_to_cycle_for_denial`.
Existing in-range/out-of-range positions updated for the new layout.
Server 59/59 and client 95/95 suites pass.
Plan Decision 7, review follow-up #4 , manual QA section 5 (new "Tab-flip
at origin" overlap sanity), and README updated. Per-target radii will
return with real combat design (E5.M1) — this is a prototype stub.
2026-04-21 23:37:42 -04:00
VinPropane
63fecb1099
NEO-24: range-aware Tab cycle skips out-of-range anchors before POST
...
Previously Tab from no-lock always picked `ORDERED_IDS[0]` (alpha), so
standing next to beta and pressing Tab was denied with `out_of_range`
even though the client HUD clearly showed beta in range.
Added `PrototypeTargetConstants.next_in_range_id_after(current, world)`
which walks the cycle and returns the first anchor whose client-side
horizontal distance is within the anchor radius.
`TargetSelectionClient.request_tab_next()` prefers that pick when the
player reference is wired (same path `set_freshness_kick` uses) and
falls back to the plain cycle order when nothing is in range so the
server still owns the denial reason.
Server contract (NEO-23) untouched. Tests cover the beta pick, the
nothing-in-range fallback, and the no-player-ref regression. Plan
Decision 6 + review follow-up #3 + README + manual QA updated.
2026-04-21 23:26:56 -04:00
VinPropane
e31cd2df68
NEO-24: freshen server position before target-select + surface divergence on HUD
...
Fix "Tab says denied even though I'm in range of beta": root cause is the
race between the 20 Hz move-stream sampler and the target-select POST. A
Tab press right after the capsule stops can be validated against the
server's last sampled position, which trails the visible capsule by
several meters.
Client-side fixes (server contract unchanged):
- TargetSelectionClient.set_freshness_kick(authority, player): before each
POST /target/select, submit a move-stream with the current player
position so the server's stored snapshot is as fresh as possible when
the range check runs. Wired in main.gd; optional so tests without the
wiring still pass (regression-covered).
- PlayerPositionLabel now shows a "srv: (x,y,z) Δ=<d>m age=<ms>" line
populated from PositionAuthorityClient.authoritative_ack, so any
residual client/server divergence is visible in the HUD and future
reports can point at it directly.
- Two new tests: select POST kicks exactly one freshness stream with the
current player position before POSTing, and the kick is a no-op when
the wiring is absent.
Docs: plan Decision 5, review follow-up #2 , manual QA section 5 and
section 1, and client README updated to describe the new behaviors.
2026-04-21 23:21:16 -04:00
VinPropane
71ae829482
NEO-24: add visible target-anchor markers + HUD distance lines
...
Players reported targeting "feels inconsistent" because the server
PrototypeTargetRegistry anchors (alpha (-5,-5) r=8, beta (8,8) r=4) have
no visible meshes — the only console visible in the scene is the NEO-9
PrototypeTerminal at origin, which is unrelated to NEO-23/24 targeting.
Adds a display-only mirror of the server registry:
- client/scripts/prototype_target_markers.gd spawns a colored mast +
translucent flat radius ring per anchor so the lock radius is
visible in-world.
- client/scripts/prototype_target_constants.gd gains ANCHORS with
position/radius/color, matching PrototypeTargetRegistry.cs. Marked
display-only; server remains authoritative for validity.
- TargetLockLabel now renders a per-anchor distance line each physics
tick ("<id>: <d> m / <radius> (in|out)") so players can see the
relationship between the visible capsule and the lock radius and
immediately spot client/server position drift.
Also updates README, plan (Decision 4), manual QA (Section 1 boot +
Section 4 locomotion), and the review file's follow-up section to
describe the UX fix.
2026-04-21 23:04:03 -04:00
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
VinPropane
cbcb4e3d63
NEO-24: add manual QA checklist
...
First instance of the new docs/manual-qa/ convention. Covers boot sync,
Tab happy path, out-of-range soft-lock (both by Tab and by locomotion
per Decision 2), swap-to-beta, Esc clear, denial UI hygiene, input
behavior, move-rejection coexistence, transport failure, and no-
regression checks against NEO-7/9/19/22.
2026-04-21 22:21:50 -04:00
VinPropane
e5bbfd3ee7
NEO-24: reconcile plan — tick acceptance criteria shipped
2026-04-21 22:14:49 -04:00
VinPropane
ddfc78a044
NEO-24: lock kickoff decisions (Tab/Esc; hybrid movement-triggered refresh)
2026-04-21 22:02:33 -04:00