VinPropane
40d948ff2c
NEO-108: Bruno elite defeat uses 12 pulses; reset HP baseline.
...
Elite has 200 HP (8 pulses at 25 damage); defeat loop matches C# tests.
Combat-health seq 1 resets dev fixture so currentHp is 100 after prior smokes.
2026-05-31 18:50:29 -04:00
VinPropane
05beec9644
NEO-108: Use bru.sleep in Bruno helper (no setTimeout).
...
Bruno pre-request sandbox does not define setTimeout; pulse waits and
telegraph polls now call bru.sleep via prototype-npc-bruno-helper.
2026-05-31 18:48:22 -04:00
VinPropane
af80b878ad
NEO-108: Bruno move near each NPC and isolate pulse slot.
...
Ranged/elite casts failed out_of_range after melee at (-5,-5); add
prototype-npc-bruno-helper moves and pulse cooldown between chains.
Combat-health uses slot 4 and moves near elite before cast.
2026-05-31 18:46:00 -04:00
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
07ebb9efb8
NEO-108: Add Bruno smokes and document encounter-progress GET.
...
Bruno folder covers inactive default and three-NPC defeat spine; README and
E5.M3 docs mark E5M3-08 landed with plan reconciliation.
2026-05-31 18:37:43 -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
14b623c67f
NEO-103: Add Bruno smoke for encounter-definitions GET.
...
Assert frozen prototype_combat_pocket row and nested reward grants.
2026-05-31 15:40:12 -04:00
VinPropane
04126693e1
NEO-98: Update Bruno for seven abilities and attackAbilityId.
2026-05-30 18:06:42 -04:00
VinPropane
c96fb2d26a
NEO-95: fix Bruno elite attack — multi-poll snapshot timeline
...
AdvanceAll runs only on npc-runtime-snapshot GET with a 5s delta cap;
sleep then combat-health alone never applied telegraph damage.
2026-05-28 23:49:59 -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
0268daa9d3
NEO-94: Fix Bruno require path for CI sandbox context roots.
...
Use ./scripts/ like combat-targets; ../scripts/ is blocked by Bruno CLI path traversal policy in CI.
2026-05-28 23:29:17 -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
Don
494e0f20c3
NEO-91: fix Bruno happy cast HP for ranged archetype
...
prototype_npc_ranged max HP is 80 from behavior catalog, so one pulse
leaves 55 HP — not 75 from the old 100-HP dummy assumption.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 23:53:28 -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
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
adc34e0a9f
NEO-44: Fix Bruno collection ordering and interaction pre-request
...
Remove gig-progression folder seq so defeat spine runs after ability-cast;
run defeat spine at seq 31. Gather until node_depleted in interaction test
so craft spine pollution does not break the depleted-node deny case.
2026-05-25 12:20:30 -04:00
VinPropane
32fbcec766
NEO-44: Fix Bruno defeat spine for CI collection order.
...
Reset prototype target HP before cast chain, use slot 2 to avoid
cooldown pollution, and assert +25 gig XP delta from baseline.
2026-05-25 12:14:29 -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
7d325eec4c
NEO-83: Use slot 1 in Bruno defeat spine to avoid seq 2 cooldown.
...
Combat-targets fixture resets HP only; seq 2 leaves slot 0 on cooldown so the four-pulse spine follows NEO-82 and binds slot 1.
2026-05-25 11:31:02 -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
3e0d370677
NEO-82: Use slot 1 in Bruno defeat spine to avoid cooldown clash.
...
Happy cast (seq 22) leaves slot 0 cooling; defeat spine pre-request casts
were denied with on_cooldown. Slot 1 + pre-request fail-fast on bad cast.
2026-05-25 11:07:59 -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
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
603cc525ad
NEO-79: Fix Bruno cast unknown-ability test setup.
...
Bind slot 0 in pre-request so the cast route reaches unknown_ability
instead of slot_unbound when run before other ability-cast requests.
2026-05-24 22:11:01 -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
2221dc6b4b
NEO-70: Fix Bruno craft assertions for CI wire JSON shape.
...
Expect omitted reasonCode on success, refine XP delta >= 10 when refine
is skipped, and scrap unchanged on invalid_quantity without fixed totals.
2026-05-24 18:10:17 -04:00
VinPropane
db7c443b50
NEO-70: Fix Bruno craft tests for shared Postgres CI state.
...
Clear refined stock for insufficient_materials deny; spine tolerates
node_depleted gathers, reuses persisted scrap, and asserts refine XP delta.
2026-05-24 18:06:26 -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
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
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
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
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
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
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
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
b8ee4b55ee
NEO-55: fix Bruno local module resolution for inventory helper
...
Move helper to scripts/ and whitelist via bruno.json
additionalContextRoots so pre-request require() works in Bruno.
2026-05-23 22:59:58 -04:00
VinPropane
1cbe6302b5
NEO-55: make inventory Bruno tests order-independent
...
Shared inventory-api-helper seeds stock and records baselines in
pre-request scripts; assertions use exact deltas instead of cumulative
at.least checks. Harden C# remove round-trip add assertion.
2026-05-23 22:57:53 -04:00
VinPropane
00ada50b95
NEO-55: fix Bruno GET inventory test for persistent dev player state
...
Assert slot shape rules instead of requiring an all-empty grid when
dev-local-1 already holds items from prior collection runs.
2026-05-23 22:53:50 -04:00