Commit Graph

156 Commits (d1a67a89bd3eb9db2db61fecb1db95fa33130182)

Author SHA1 Message Date
VinPropane a5182a4c14 NEO-108: Fix Bruno encounter-progress and combat-health smokes.
Use collection-relative ./scripts require path; reset encounter stores in
combat-targets dev fixture for inactive GET; combat-health uses slot 3.
2026-05-31 18:43:50 -04:00
VinPropane 25f3714554 NEO-108: Address code review findings for encounter-progress GET.
Add BuildSnapshot invariant tests, whitespace 404, idempotent second GET,
grant-order assertions; dedupe MapRow progress lookup; strike review items.
2026-05-31 18:39:52 -04:00
VinPropane c1fd2053d0 NEO-108: Add GET encounter-progress API and integration tests.
Projects progress, completion, and event stores into versioned per-player
rows with inactive/active/completed state and commit-time grant summary.
2026-05-31 18:37:42 -04:00
VinPropane f51617f8b5 NEO-107: Address code review findings for event store persistence.
Update E5.M3 module summary and NEO-105 snapshot, fix store test AAA
layout, add empty encounter id fail-closed test, strike through review items.
2026-05-31 18:27:28 -04:00
VinPropane a02496c6bc NEO-107: Persist EncounterCompleteEvent and wire E7.M2 hook stub.
Add IEncounterCompleteEventStore with in-memory implementation, record
events on successful TryCompleteAndGrant, and expand reward_delivery
hook comments for future QuestRewardBundle routing.
2026-05-31 18:26:11 -04:00
VinPropane 9c74933e6e NEO-106: Address code review findings for combat encounter wiring. 2026-05-31 18:10:41 -04:00
VinPropane f581cf412c NEO-106: Wire encounter progress and completion from ability cast. 2026-05-31 18:08:28 -04:00
VinPropane cbb6f137fd NEO-105: Address code review findings for encounter completion.
Add apply-phase rollback test, E9.M1 deny hook comment, inventory
reason passthrough, and tighten idempotent replay assertions.
2026-05-31 17:02:32 -04:00
VinPropane 0cf82b9c0a NEO-105: Add encounter completion operations and inventory grants.
TryCompleteAndGrant applies reward-table fixed grants with pre-flight
simulate, compensating rollback, and idempotent completion marking.
Returns EncounterCompleteEvent payload for NEO-107 persistence.
2026-05-31 16:57:53 -04:00
VinPropane 0289930897 NEO-104: Use subset check for all-targets-defeated predicate.
Matches documented semantics; extra defeated ids via direct store
calls no longer block completion readiness (Bugbot PR #143).
2026-05-31 16:44:48 -04:00
VinPropane 91f74b7d6e NEO-104: Address code review findings for encounter stores.
Normalize encounter ids in IsAllRequiredTargetsDefeated, document TryActivate
completion gating, lock IsCompleted reads, add operations tests, and update
plan and review doc.
2026-05-31 16:37:22 -04:00
VinPropane aaccbbbcaf NEO-104: Add encounter progress and completion stores.
In-memory IEncounterProgressStore and IEncounterCompletionStore with
EncounterProgressOperations for activation, defeat tracking, and
all-targets-defeated checks; unit tests and docs.
2026-05-31 16:18:56 -04:00
VinPropane e4e75f5dc7 NEO-103: Address code review follow-ups.
Mark E5M3-04 landed in module Summary, assert fixedGrants order in
C# test, add Bruno ordinal comment, strike through review items.
2026-05-31 15:43:37 -04:00
VinPropane 9b48ec5f39 NEO-103: Add GET /game/world/encounter-definitions API.
Expose schema v1 encounter list with nested completionCriteria and
rewardTable summary via encounter and reward-table registries.
2026-05-31 15:40:12 -04:00
VinPropane 734876cde9 NEO-102: add encounter and reward-table definition registries + DI
Thin IEncounterDefinitionRegistry / IRewardTableDefinitionRegistry adapters
over NEO-101 catalogs with TryNormalizeKnown, DI registration, and 18 AAA tests.
2026-05-31 00:38:38 -04:00
VinPropane 21749e7977 NEO-101: Address code review — schema tests, module snapshot, host boot.
Adds row-level JsonSchema violation tests for both loaders, symmetric empty reward-tables host boot test, and E5.M3 implementation snapshot; review doc marked Done.
2026-05-31 00:08:41 -04:00
VinPropane f921095fb0 NEO-101: Fail-fast encounter and reward-table catalog load at startup.
Adds Game/Encounters loaders mirroring validate_content.py E5M3 gates, DI registration with reward-tables-before-encounters load order, 19 AAA tests, and server README catalog sections.
2026-05-31 00:05:57 -04:00
VinPropane 04126693e1 NEO-98: Update Bruno for seven abilities and attackAbilityId. 2026-05-30 18:06:42 -04:00
VinPropane 44fb4adbe5 NEO-98: Set melee strike to 2 m and elite slam to 4 m. 2026-05-30 17:55:10 -04:00
VinPropane b9e2d2f4c9 NEO-98: Shorten NPC melee strike maxRange to 1 m. 2026-05-30 17:53:14 -04:00
VinPropane 3169106f28 NEO-98: Resolve NPC telegraph hits via attack ability maxRange.
Telegraph damage now looks up behavior attackAbilityId for baseDamage and
maxRange instead of using aggroRadius. Adds three NPC attack abilities, maxRange
on AbilityDef, attackAbilityId on NpcBehaviorDef, and cross-ref validation.
2026-05-30 17:49:21 -04:00
VinPropane 332cd4445f NEO-98: stop defeated NPC aggro and runtime attacks
Clear threat holder and reset runtime to idle when combat-target HP
is defeated — on cast accept and as an AdvanceOne guard so telegraph
cycles cannot continue after the killing blow.
2026-05-30 17:38:27 -04:00
VinPropane 5efa5a4ad8 NEO-95: address code review — alignment docs and API nits
Append NEO-95 landed to E5.M2 tracking; echo route playerId on
combat-health GET; AttackExecute comment; tighten elite test AAA.
2026-05-28 23:45:07 -04:00
VinPropane b702d9fb6f NEO-95: add tests, Bruno smoke, and docs for player combat HP
Cover elite telegraph damage, fixture reset, and combat-health GET
verification; update E5M2 backlog and server README.
2026-05-28 23:42:20 -04:00
VinPropane 798c601bc5 NEO-94: Address code review — alignment doc and AAA test layout.
Append NEO-94 landed to E5.M2 tracking row; move ReadFromJsonAsync to Assert in snapshot integration tests.
2026-05-28 23:23:19 -04:00
VinPropane a68d8aa782 NEO-94: Add GET /game/world/npc-runtime-snapshot with lazy AdvanceAll.
Expose versioned NPC runtime rows and nested activeTelegraph DTOs for client poll; wire route, AAA integration tests, Bruno smoke, and docs.
2026-05-28 23:17:57 -04:00
VinPropane e4f08b2015 NEO-93: Preserve LastAdvancedUtc on clock regression and guard zero timings.
Do not move the lazy-tick marker backward when nowUtc regresses; reject
non-positive catalog durations and break the phase loop when cursor stalls.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 23:44:13 -04:00
VinPropane 83d1bb13e4 NEO-93: Reset LastAdvancedUtc on dev fixture runtime clear.
Fixture reset cleared NPC rows but left a stale lazy-tick marker, causing
catch-up bursts after re-acquire. Reset to MinValue with prototype rows.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 23:26:17 -04:00
VinPropane 056b0e77f0 NEO-93: Fix delta cap LastAdvancedUtc to preserve gradual catch-up.
When simulation is capped, advance LastAdvancedUtc to windowEnd instead
of nowUtc so subsequent polls do not burst through missed NPC cycles.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 23:16:35 -04:00
VinPropane d3f178b5fb NEO-93: Address code review — AAA tests, single-call advance, windup fix.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 23:08:34 -04:00
VinPropane 48813998d7 NEO-93: Add NPC runtime state machine and lazy tick advance.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 22:02:39 -04:00
VinPropane 843abf7126 NEO-92: Add threat store and aggro acquire/leash-clear wiring.
Introduce IThreatStateStore with first-hit acquire on damaging casts
and deterministic leash clears on player move and pre-acquire checks.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 21:45:57 -04:00
Don 047237e651 NEO-91: address code review follow-ups
Add legacy alpha targeting integration test, elite HP assertion, AAA fix,
Bruno docs refresh, and module/alignment doc updates. Strike through
resolved items in the NEO-91 review.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 23:46:39 -04:00
Don fa9acc85ac NEO-91: migrate combat targets to three NPC instances
Replace alpha/beta dummies with PrototypeNpcRegistry (melee/ranged/elite),
per-archetype max HP from INpcBehaviorDefinitionRegistry, and updated
server tests + Bruno smokes. Documents breaking client change for NEO-97.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 23:42:31 -04:00
VinPropane d3e765fb8f NEO-90: add GET /game/world/npc-behavior-definitions projection.
Expose read-only npcBehaviors envelope backed by INpcBehaviorDefinitionRegistry,
with integration tests, Bruno smoke, and doc reconciliation.
2026-05-25 17:49:01 -04:00
VinPropane 3134bb6ff6 NEO-89: Address code review — E5.M2 module doc and case-id test. 2026-05-25 17:28:46 -04:00
VinPropane 70dc293246 NEO-89: Add INpcBehaviorDefinitionRegistry and DI registration. 2026-05-25 17:27:14 -04:00
VinPropane 83282e76f0 NEO-88: Fail-fast NPC behavior catalog load at server startup.
Mirror NEO-77 ability loader: JsonSchema.Net validation, E5M2 three-id
gate, leash > aggro numeric gate, DI singleton, Bruno health smoke, and
16 AAA loader/host tests.
2026-05-25 17:08:40 -04:00
VinPropane 9d9b53332f NEO-44: Address code review — docs, debug log, Bruno playerId.
Update E5.M1/E2.M2 module docs for gig XP path; LogDebug on failed
gig store write; Bruno defeat spine uses {{playerId}}; strike review items.
2026-05-25 12:08:21 -04:00
VinPropane 71a6761f3c NEO-44: Grant gig XP on combat defeat via dedicated store.
Add IPlayerGigProgressionStore (in-memory + Postgres V007), GET
/gig-progression snapshot, and CombatDefeatGigXpGrant on cast accept
when targetDefeated — 25 XP to breach, outside E2.M2 skill XP.
Includes tests, Bruno, README, manual QA, and plan reconciliation.
2026-05-25 12:04:40 -04:00
VinPropane ea13b05196 NEO-83: Fix Bruno CI combat-targets HP state pollution.
Add dev combat-targets fixture reset endpoint, Bruno pre-request helper, and enable fixture in CI Bruno step so combat-targets tests run after ability-cast defeat spine.
2026-05-25 11:28:13 -04:00
VinPropane 50a2c9ca9d NEO-83: Address code review follow-ups for combat-targets GET.
Fail fast on health store TryGet miss, tighten one-pulse integration test assertions, add fast Bruno cast→GET smoke, update review doc.
2026-05-25 11:23:32 -04:00
VinPropane 52b1d4d206 NEO-83: Add GET /game/world/combat-targets HP snapshot.
Wire CombatTargetsWorldApi backed by ICombatEntityHealthStore, Bruno happy + cast defeat spine, integration tests, README and module tracking docs.
2026-05-25 11:20:13 -04:00
VinPropane 52bf9fc4bf NEO-82: Fix cast definition lookup order and Bruno target isolation.
Load ability definition before TryResolve so cooldown lookup cannot deny
after HP mutation (Bugbot). Happy Bruno cast uses beta; defeat spine keeps
alpha; bump spine seq and cooldown sleep margin for CI.
2026-05-25 11:04:55 -04:00
VinPropane 322798b2ef NEO-82: Address code review doc sync and test AAA follow-ups.
Update E5.M1 module doc, dependency register, and alignment table for
NEO-82 landed; Bruno defeat spine HP stepping; refactor four-pulse cast
test Arrange/Act/Assert; strike through resolved review items.
2026-05-25 10:45:31 -04:00
VinPropane e8be100f80 NEO-82: Wire cast POST into combat engine and cast response.
Invoke CombatOperations.TryResolve after E1 gates; nested combatResolution
on accept; per-ability catalog cooldown; target_defeated deny without
cooldown. Tests, Bruno defeat spine, README and module docs updated.
2026-05-25 10:36:42 -04:00
VinPropane c7aa75ebc5 NEO-81: Address code review doc sync and test follow-ups.
Update module tracking and E5M1 backlog for NEO-81 landed; tighten AAA
in four-pulse test, add guard/dash deny parity and dash smoke test.
2026-05-25 10:20:09 -04:00
VinPropane ca15e7a689 NEO-81: Add CombatOperations.TryResolve and CombatResult.
Pure server combat resolution applies catalog damage via the health store,
denies re-hits on defeated targets, and validates unknown ability/target ids.
2026-05-25 10:16:24 -04:00
VinPropane bfb0eb9306 NEO-80: Address code review follow-ups for health store. 2026-05-24 22:42:33 -04:00
VinPropane b060b9dffd NEO-80: add combat entity health store for prototype dummies.
Server-owned in-memory HP for prototype_target_alpha/beta with lazy
init at 100 HP, damage floor at zero, defeated flag, and DI registration.
2026-05-24 22:37:57 -04:00