Commit Graph

325 Commits (b233fa040d3c7d95e544e71fcd6b2000f175a080)

Author SHA1 Message Date
VinPropane b60920b2e2 NEO-60: add code review document 2026-05-24 14:48:16 -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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 caa400f43d NEO-42: address review — decomposition docs, plan AC, grant helper, test assert 2026-05-10 19:46:49 -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 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 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 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 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 a0c3599525 NEO-36: address code review (manual QA header, alignment, README, Bruno) 2026-05-04 20:44:52 -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 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 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 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 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 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 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 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 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 c17526e611 NEO-25: close code review follow-up (alignment, warning, tests) 2026-04-24 20:54:26 -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 17f87aa747 NEO-23: code review follow-up (E1.M3 docs, GET 404 test, radius bounds) 2026-04-17 21:14:43 -04:00
VinPropane 7e18ecedb6 NEO-23: Add code review for targeting API branch 2026-04-17 21:12:46 -04:00
VinPropane 7f9fc8e429 chore: address E1.M3 docs review (Slice 3 anchor, Linear pointers) 2026-04-17 20:48:53 -04:00
VinPropane 5bb70efd6c chore: docs review for E1.M3 documentation pass 2026-04-17 20:47:47 -04:00
VinPropane 866c973af7 NEO-22: Cache scrape contact in WASD tick; close review items
run_wasd: one _has_scrape_vertical_contact() before move_and_slide and one
after; fold repeated predicates into wish_active_scrape_vertical_pre and
post_slide_wish_floor_scrape.

Review doc: mark suggestions #2/#4 done; suggestion #1, nits, verification
ledge bullet, and partial doc rows reviewed/deferred with strikethrough notes.
2026-04-17 20:21:13 -04:00
VinPropane c79c58c298 NEO-22: Unit-test WASD locomotion pure helpers
Extract static helpers (floor-ray continuation, median feet Y, micro-slip
XZ projection, wish-aligned horizontal velocity) from the tick path so
GdUnit can cover seam math without physics doubles. Add
player_locomotion_wasd_test.gd, document in README, and update NEO-22
plan/review.
2026-04-17 20:16:25 -04:00
VinPropane 90a17bc43d NEO-22: Extract WASD locomotion for gdlint max-file-lines
Move the WASD physics tick into player_locomotion_wasd.gd so player.gd
stays under the 1600-line CI cap. Fix gdlint class order (enum before
consts), load-constant naming, and wrap long doc lines. Update NEO-22
review and plan; refresh gdlintrc comment.
2026-04-17 20:13:36 -04:00
VinPropane 05f703322d NEO-22: Add code review for WASD locomotion wall-scrape diff 2026-04-17 20:08:26 -04:00
VinPropane 7e17ff563b chore: point docs and rules at Linear NEO issue ids
Migrate Jira NEON-* references to Linear NEO-* and linear.app links in
docs, Cursor rules, READMEs, and traceability comments. Renamed
implementation plans and dated reviews to NEO filenames.

Branch is based on origin/main with this commit only (no NEON-29
gameplay chain). client/README follows main’s district/map copy;
player.gd matches main aside from NEO-14 debug trace prefixes.
2026-04-13 13:15:32 -04:00
VinPropane 398317d64f NEON-28: Dev obstacle smoke, nav reparent on hide, and docs
- Input action dev_toggle_occluder_obstacle (Ctrl+Shift+K): toggle obstacle off nav source via reparent to World, rebake NavigationRegion3D, sync NavigationAgent3D; physics/process/collision hardening unchanged intent.

- Occluder dictionary keys by instance id; related client fixes and README/project input note.

- Plan and review: PARSED_GEOMETRY_BOTH / runtime geometry removal lesson for future mechanics.
2026-04-10 23:55:50 -04:00
VinPropane e225f1c550 NEON-28: sync plan with review (physics tick, occluder handoff) 2026-04-10 22:53:36 -04:00
VinPropane 1f5c1e7619 NEON-16: harden idle jitter follow-up
Harden idle settling so flat ground, obstacle contacts, and rare bump-edge cases stop drifting instead of looping corrective nudges. Also resolves the saved review follow-up items and syncs the runtime docs to the final feet-height and idle-anchor behavior.
2026-04-10 00:46:53 -04:00
VinPropane 6f4f5d4350 NEON-16: code review — idle jitter follow-up branch
docs/reviews/2026-04-10-NEON-16-followup.md: Request changes — two
blocking gdlint issues (export var order, line-length on
vertical_arrival_error) plus suggestions and nits.
2026-04-10 00:39:14 -04:00
VinPropane 1f8c0d04d1 NEON-30: address review — check AC boxes, add manual-check section to README 2026-04-09 23:03:17 -04:00
VinPropane f1b4e50729 NEON-27: finalise review (Approved) + Godot uid files
Review verdict updated to Approved; all blocking issues and suggestions
resolved and documented. Add auto-generated Godot .uid sidecar files for
occlusion_policy.gd and occlusion_policy_test.gd.
2026-04-08 23:55:29 -04:00
VinPropane 71232c36ef NEON-27: address review suggestions — doc alignment pass
- Plan: reconcile null-material prose in "Material override strategy"
  to match implementation (null → new StandardMaterial3D, not skipped)
- module_dependency_register.md: E1.M2 note updated — occlusion shipped,
  only integration hardening (NEON-28) remains
- documentation_and_implementation_alignment.md: add E1.M2 tracking row
  (NEON-25–27 shipped, NEON-28 open)
- Review: strike through both suggestions as Done
2026-04-08 23:52:46 -04:00
VinPropane 5e16fdccc8 NEON-27: restore occluders on all _process early-return paths
Fixes review blocking issue: when the follow target is null (freed,
renamed, or path unresolved) or the Camera3D child is missing,
_restore_all_occluders() is now called before returning so geometry
cannot be left stuck semi-transparent.
2026-04-08 23:50:48 -04:00
VinPropane ae643bc81c NEON-26: refresh review after follow-up fixes 2026-04-08 23:00:10 -04:00
VinPropane ff830813c7 NEON-26: address code review follow-ups (zoom validation, docs) 2026-04-08 22:58:28 -04:00
VinPropane b9ec6ccb0f NEON-26: add code review notes for zoom bands 2026-04-08 22:55:37 -04:00
VinPropane e000da20ee NEON-15: address review nits (shutdown token, plan verification note) 2026-04-08 22:09:12 -04:00
VinPropane adde98e4a8 chore: review follow-up uses strikethrough on suggestions, not extra section 2026-04-08 22:06:17 -04:00
VinPropane 8c3e8c0a03 NEON-15: apply code review doc suggestions (E1.M1 pointers, PR notes) 2026-04-08 21:59:53 -04:00
VinPropane 2617b65f79 NEON-15: add code review (2026-04-08) 2026-04-08 21:58:18 -04:00
VinPropane f4b34316a6 NEON-25: add code review for isometric follow camera 2026-04-07 23:51:46 -04:00
VinPropane fa19ab7337 chore: migrate Jira references from NS-* to NEON-* in docs and rules
Rename implementation plans and dated reviews to NEON issue numbers per
Atlassian project re-key. Update browse URLs, cross-links, module docs,
client/server READMEs, and Cursor rules (project key NEON).
2026-04-07 00:15:06 -04:00
VinPropane 7b11d4e238 NS-24: Eliminate idle jitter and movement QA bumps (Godot client)
Physics: Jolt 3D; physics_interpolation off; 120 TPS. CharacterBody3D idle
path uses dual floor_max_angle, rim/straddle and ridged-contact handling,
rim settle and random-floor-bump lip/wall escape, floor_block_on_wall,
NavigationAgent3D avoidance off, per-node interp off. No global_transform in
_process (avoid render/physics ghosting).

QA geometry: random_floor_bumps.gd (load from main.gd); each bump on its own
StaticBody3D under NavigationRegion3D; random_floor_bump_collision_constants.gd
for collider fudge and RANDOM_FLOOR_BUMP_MESH_GROUP.

Scene: player safe_margin and mesh Y lift; MoveRejectPedestal / MoveRejectFarPad
renamed from NS19*; Mat_player_capsule without polygon_offset (per follow-up).

Docs: NS-24 plan + resolution, client/README manual steps, code review
2026-04-05-NS-24.md; server/README bump height note. Code/scene identifiers
avoid ticket-based ns19_* naming.
2026-04-06 00:32:41 -04:00
VinPropane f412da8f44 docs: Mark NS-23 code review blocking items and suggestions done 2026-04-05 15:04:39 -04:00
VinPropane 14a6813985 NS-23: Document movement tradeoff — no required obstacle auto-nav
Align plan, client/server README, E1.M1 snapshot, and code review note with
the chosen design: descend bypass favors smooth stepped surfaces; multi-click
around obstacles is OK. NS-24 remains for idle jitter.
2026-04-05 14:56:52 -04:00
VinPropane 2891a4553a docs: NS-23 branch code review (2026-04-05) 2026-04-05 14:52:08 -04:00
VinPropane b043e8ac45 NS-18: InteractionRequest, client prototype, Postgres test UX
Server: POST /game/players/{id}/interact, HorizontalReach, prototype registry, DTOs, tests; default spawn (-5,0.9,-5); dev HttpLogging.

Client: terminal, radius glow preview, interaction_request_client (interact/E), main wiring; obstacle moved off center.

Tests: postgres.runsettings, launchSettings, Docker compose auto-start/teardown harness, async-safe init.

Docs: plan AC, E1.M1 snapshot, alignment table, server/client README, code review 2026-04-04.
2026-04-04 20:19:33 -04:00
VinPropane 3d9ea1fc6c chore: mark vision-plan suggestion done in final docs review 2026-04-03 22:58:14 -04:00
VinPropane a0544f4d33 chore: final branch docs review and Epic 2 E2.M2 note fix
Add docs/reviews/2026-04-03-final-branch-docs-review.md. Correct epic
E2.M2 integration note: E5.M1 uses gig progression, not E2.M2 skill XP.
2026-04-03 22:55:21 -04:00
VinPropane 6b7623615d chore: stable Epic 3 slice anchors; deep-links from gather/craft docs
- epic_03: HTML ids epic-3-slice-2 / epic-3-slice-3
- gathering/crafting: where-next and prototype scope use # anchors
- game-design docs review: mark slice nit done; clarify gigs-first nit
2026-04-03 22:14:47 -04:00
VinPropane 1bdc29288d chore: note PEP 668 / venv in docs review verification 2026-04-03 22:13:56 -04:00
VinPropane 0a07f1dec9 chore: mark game-design docs review suggestions done (strikethrough) 2026-04-03 22:02:17 -04:00
VinPropane d1138bfe62 docs: E2.M1 contract column lists allowedXpSourceKinds (nit #2) 2026-04-03 21:34:49 -04:00
VinPropane fe38ebeb4f docs: drop classless terminology; rename Epic 2 to skills and progression
- Rename epic_02_classless_progression.md → epic_02_skills_and_progression.md
- Epic 2 / vision plan: Skills and Progression Framework; clarify gigs vs non-combat skills
- Replace classless prose in README, game-design, E2 modules, reviews, quest_scope
- Plan diagrams: SkillsProgression, SkillXpAndMastery
2026-04-03 21:33:53 -04:00
VinPropane aceb6027bf chore: align Epic 2 title with epic_02 filename (nit #1)
- Rename to Classless Progression Framework in epic, vision plan, README, E2 modules, game-design links
- Update 2026-04-03 review nit status
2026-04-03 21:30:53 -04:00
VinPropane 6599e136d6 chore: CI check for decomposition hybrid vocabulary (suggestion 4)
- Add scripts/check_decomposition_language.py (stdlib); PR gate step
- CT.M1, content README, docs-review-agent, 2026-04-03 review updates
2026-04-03 21:29:28 -04:00
VinPropane d11641159d chore: Epic 2 E2.M1 stub, content CI validation, doc follow-ups
- epic_02: expand E2.M1 module breakdown (non-combat SkillDef, allowedXpSourceKinds)
- PR gate: Python jsonschema validate content/skills vs skill-def.schema.json
- Add scripts/validate_content.py, requirements-content.txt; ignore .venv-content
- CT.M1, E2.M1, internal-content-authoring, content README: document CI spine
- Update 2026-04-03 branch review (suggestions 2–3 done)
2026-04-03 21:27:52 -04:00
VinPropane f9de62b563 chore: branch-wide docs review vs main + Epic 2 objective hybrid wording
- Save docs/reviews/2026-04-03-branch-chore-game-design-docs-vs-main.md
- Epic 2 Objective: skill vs gig progression; link progression + E2.M2
2026-04-03 21:23:36 -04:00
VinPropane dd2fef797d chore: align game-design docs, SkillDef schema, and docs review agent
- Hybrid progression: encounter gig XP, mission skill rewards, Slice 3 split
- SkillDef JSON Schema: stable id, gather/process/make/tech, allowedXpSourceKinds
- Prototype skills: salvage, refine, intrusion; expand E2.M1/E2.M2 contracts
- Add docs-review-agent rule, skills coherence review, AGENTS.md row
- gigs/progression/overview/skills cross-links; explicit HTML anchors in skills.md
2026-04-03 21:21:33 -04:00
VinPropane e2d64a7a57 NS-17: PostgreSQL position persistence and integration tests
Wire IPositionStateStore to Npgsql when ConnectionStrings:NeonSprawl is set,
with versioned DDL under server/db/migrations and a shared PostgresPositionBootstrap
for schema plus dev-player seeding at host startup. In-memory tests override Postgres
registrations when CI sets the connection string globally.

Add GitHub Actions Postgres service for dotnet test, server README updates,
decomposition and implementation-plan docs, code review write-up, and C# brace
conventions in csharp-style rule.
2026-03-30 22:55:17 -04:00
VinPropane 3882b0e2c6 NS-16: MoveCommand → server PositionState, Godot sync, tests
Implement E1.M1 intent → authority: POST /game/players/{id}/move with v1 JSON
MoveCommandRequest (snap + sequence), extend in-memory store and
PositionStateApi. Godot client splits ground_pick and position_authority_client
with thin main.gd; snap_to_server on player.

Tests live under NeonSprawl.Server.Tests/Game/PositionState/ with AAA layout
and MethodName_ShouldExpectedOutcome_WhenScenario naming. Debug builds use
UseAppHost=false so Linux IDEs resolve .NET 10 from a user-local SDK.

Add NS-16 implementation plan, code review doc, godot-client-script-organization
rule, csharp test layout/naming rules, and refresh E1.M1 / alignment docs.
Server and client README updates include move API, prerequisites, and Rider
notes.

Made-with: Cursor
2026-03-30 19:54:17 -04:00
VinPropane f7bfd7cb32 NS-15 implement position state api 2026-03-29 23:08:17 -04:00