Commit Graph

496 Commits (1900a6fb6982da7b2d151da4ca25549f417adcdb)

Author SHA1 Message Date
VinPropane 1900a6fb69 NEO-29: require pulling main before branching
Add an explicit git-workflow rule to fetch and pull main before creating new story branches, preventing stale-base branch creation.
2026-04-25 23:51:32 -04:00
VinPropane ed032e8bb5 Merge remote-tracking branch 'origin/main' into NEO-29-hotbarloadout-v1-contract-baseline-persistence-path 2026-04-25 23:51:20 -04:00
VinPropane 2d131671c2 NEO-29: add explicit MCP-only GitHub rule in AGENTS
Add a top-level AGENTS.md section that requires user-github MCP for GitHub actions and forbids gh CLI fallback.
2026-04-25 23:44:35 -04:00
VinPropane 01b627cc8a NEO-29: enforce MCP-only GitHub workflow in rules
Strengthen project guidance to require user-github MCP tools for GitHub operations and explicitly prohibit gh CLI fallback in repo-level agent rules.
2026-04-25 23:32:44 -04:00
VinPropane 23da39f7d3 NEO-29: fix main script definition order for hook lint
Move hotbar state/client field declarations above onready definitions for class order compliance, and include a non-behavioral test file restage so client hooks can validate.
2026-04-25 23:28:14 -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 71af7a5942 NEO-29: normalize test formatting across server and client suites
Audit all test files and bring them in line with formatting/style expectations by adding explicit AAA markers across server test methods and fixing GDScript test lint/format issues.
2026-04-25 22:57:05 -04:00
VinPropane 3dccab8edb NEO-29: normalize hotbar API tests to explicit AAA style
Add explicit Arrange/Act/Assert sections to each hotbar API test method to align with the C# test style guide while preserving existing coverage and behavior.
2026-04-25 22:52:03 -04:00
VinPropane e6f3d63318 NEO-29: move AAA enforcement to test authoring time
Remove the AAA pre-commit gate and instead provide write-time scaffolding via C# snippets and a test template, then document those defaults in the C# style and testing expectations rules.
2026-04-25 22:50:03 -04:00
VinPropane 3a2fce2ce0 NEO-29: enforce AAA markers in changed C# tests
Extend the pre-commit guard to fail when staged server test files lack explicit Arrange/Act/Assert markers, so AAA style compliance is checked automatically instead of relying on review memory.
2026-04-25 22:48:49 -04:00
VinPropane 4dc9f76f79 NEO-29: align hotbar persistence test to AAA style
Refactor the Postgres hotbar persistence integration test to explicit Arrange/Act/Assert structure so it matches the team testing style guide.
2026-04-25 22:47:44 -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 c4b71aac0d NEO-29: enforce test coverage checks in git hooks
Add a pre-commit guard that blocks commits missing required client/server test updates and Bruno requests for route/contract changes, and wire hook installers to install both pre-commit and pre-push hooks.
2026-04-25 22:38:24 -04:00
VinPropane b92b86a407 NEO-29: cover hotbar edge paths and add Bruno requests
Add server/client tests for duplicate-slot, schema, missing-player, normalization, and busy/error handling paths, and include Bruno requests for the new hotbar routes with happy and representative failure checks.
2026-04-25 22:36:23 -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 aeb7277120
Merge pull request #53 from ViPro-Technologies/chore/e1m4-doc-linear-backlog
NEO-29: document E1.M4 backlog decomposition and Linear links
2026-04-25 22:15:02 -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 9aaa9cca56
Merge pull request #52 from ViPro-Technologies/NEO-27-e1m3-slice-3-telemetry-hook-sites
NEO-27: add Slice 3 telemetry hook-site documentation
2026-04-25 21:57:52 -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 9894ce0d59 chore: enforce kickoff clarifications gate in story rule
Require clarification questions before plan updates/commits, require AskQuestion for blocking decisions, and mandate a Kickoff clarifications section in plan docs.
2026-04-25 21:56:23 -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 f9d730749b
Merge pull request #51 from ViPro-Technologies/NEO-26-selectionevent-surface-debug-consumer
NEO-26: SelectionEvent surface on TargetSelectionClient
2026-04-25 19:48:41 -04:00
VinPropane 84f053d671 chore: document opening PRs via GitHub MCP instead of gh CLI
commit-and-review: primary path is user-github create_pull_request; owner/repo
from origin; fallback URL + optional gh for humans. Cross-link AGENTS, kickoff,
story-end, linear-git-naming, git-workflow.
2026-04-25 19:46:31 -04:00
VinPropane 96fe4d11f0 NEO-26: gdformat selection_event_client_test.gd 2026-04-25 19:43:25 -04:00
VinPropane 42d0025457 NEO-26: wrap GDScript doc lines for gdlint max-line-length 2026-04-25 19:43:14 -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 5fd0e19af4
Merge pull request #50 from ViPro-Technologies/chore/agent-story-end-linear-askquestion
chore: agent rules — AskQuestion for end-story Linear state
2026-04-24 21:51:53 -04:00
VinPropane 9415ea0a0a chore: AskQuestion multiple choice for end-story Linear state 2026-04-24 21:50:05 -04:00
VinPropane 8226d00130 chore: story-end — require prominent Linear state ask after end story 2026-04-24 21:47:17 -04:00
VinPropane 0f4e69376e
Merge pull request #49 from ViPro-Technologies/chore/bruno-get-interactables-tests
chore: Bruno tests for GET /game/world/interactables
2026-04-24 21:43:16 -04:00
VinPropane 432cc4106b chore: Bruno tests for GET /game/world/interactables 2026-04-24 21:08:23 -04:00
VinPropane eab048770a
Merge pull request #48 from ViPro-Technologies/NEO-25-e1m3-interactable-descriptor-list
NEO-25 e1m3 interactable descriptor list
2026-04-24 21:00:23 -04:00
VinPropane 8be7618e22 chore: story workflow — gh pr create with NEO-* title when user opens PR 2026-04-24 20:59:44 -04:00
VinPropane ac2916bfee NEO-25: satisfy gdlint/gdformat for pre-push hook 2026-04-24 20:56:04 -04:00
VinPropane c17526e611 NEO-25: close code review follow-up (alignment, warning, tests) 2026-04-24 20:54:26 -04:00
VinPropane ba667f1581 NEO-25: queue last-wins interact POST when HTTP client is busy 2026-04-24 20:48:50 -04:00
VinPropane 06d9104157 NEO-25: route E/R interact via main _unhandled_key_input for reliable input 2026-04-24 20:44:43 -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 90bd71d336 NEO-25: fix Vector3 anchor parse (extra paren) in interactable_world_builder 2026-04-24 20:39:29 -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 82f382353d
Merge pull request #47 from ViPro-Technologies/NEO-24-e1m3-client-tab-target-lock-ui-synced-to-server
NEO-24 e1m3 client tab target lock UI synced to server
2026-04-24 20:10:53 -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