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
VinPropane
94b6c67b07
NEO-78: Address code review follow-ups for ability-definitions GET.
...
Update dependency register and E5M1 backlog, tighten tests and Bruno
spot-checks, strike through resolved review items.
2026-05-24 22:26:54 -04:00
VinPropane
44e0056b37
NEO-78: Add GET /game/world/ability-definitions HTTP projection.
...
Expose versioned read-only ability catalog via IAbilityDefinitionRegistry,
with integration tests, Bruno folder, and docs alignment.
2026-05-24 22:22:48 -04:00
VinPropane
0e5bbbff2e
NEO-79: Address code review — docs alignment, null-safe TryNormalizeKnown.
...
Update E5.M1 module page, dependency register, and alignment table for
NEO-79 landed; reconcile plan Bruno note; strike through review findings.
2026-05-24 22:07:37 -04:00
VinPropane
bd4912004a
NEO-79: Add IAbilityDefinitionRegistry and migrate hotbar/cast validation.
...
Injectable registry backed by AbilityDefinitionCatalog; PrototypeAbilityRegistry
keeps id constants only. Bruno smoke for unknown_ability deny paths.
2026-05-24 22:05:27 -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
619089ca40
NEO-77: Add fail-fast ability catalog load at server startup.
...
Load content/abilities/*_abilities.json with CI-parity validation, E5M1
four-id gate, DI registration, AAA loader/host tests, and Bruno health check.
2026-05-24 21:40:58 -04:00
VinPropane
87c27e231b
NEO-70: Emit explicit nulls on CraftResponse optional fields.
...
Serialize reasonCode and xpGrantSummary as null when absent so Bruno
deny tests match inventory POST wire shape; assert JSON nulls in API tests.
2026-05-24 18:13:10 -04:00
VinPropane
8ebe83d701
NEO-70: Fix CI build — restore TestHost import for ConfigureTestServices.
2026-05-24 18:02:43 -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
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
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
e914d5fb96
NEO-69: Add CraftOperations engine with pre-flight and refine XP.
...
Introduces CraftResult orchestration over recipe registry and inventory
operations, including output capacity simulation and XP rollback on failure.
2026-05-24 17:16:59 -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
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
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
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
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
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
e681857778
NEO-63: wire interact to gather engine and expand registry.
...
Four resource_node anchors; gather denies map to InteractionResponse;
integration tests, Bruno gather/inventory and depletion flows.
2026-05-24 15:44:12 -04:00