VinPropane
f053ffbb39
NEO-117: Add QuestStateOperations with reason codes and tests.
...
Server-authoritative accept, step advance, and idempotent complete
wrapping IPlayerQuestStateStore with prerequisite enforcement.
2026-06-06 19:26:37 -04:00
VinPropane
fabbdae4c2
NEO-116: Make Postgres TryActivate safe under concurrent insert.
...
Use INSERT ON CONFLICT DO NOTHING so duplicate activations return false
with the existing snapshot instead of raising a primary-key violation.
2026-06-03 23:25:13 -04:00
VinPropane
de611ac294
NEO-116: Address code review findings for quest state store.
...
Fix persistence test AAA layout, empty-id denial theory, frozen id constants,
Postgres rollback/JSONB read, XML doc cref, README Bruno link, and review doc.
2026-06-03 23:19:52 -04:00
VinPropane
395b70c030
NEO-116: Add player quest state store with Postgres persistence.
...
Introduces IPlayerQuestStateStore (in-memory + V008 Postgres), QuestStepState
snapshots, DI wiring, AAA unit tests, and docs for E7M1-05 before NEO-117 ops.
2026-06-03 23:04:50 -04:00
VinPropane
ab315f326b
NEO-115: address code review findings for quest definitions GET.
...
Derive expected quest id order from PrototypeE7M1QuestCatalogRules,
assert refine craft_recipe objective in integration test, and update
module dependency register plus review doc strikethroughs.
2026-06-03 22:22:44 -04:00
VinPropane
31cd67725d
NEO-115: add GET /game/world/quest-definitions API and tests.
...
Expose read-only v1 quest projection from IQuestDefinitionRegistry with
flat objective fields, Bruno collection, and integration coverage.
2026-06-03 22:14:37 -04:00
VinPropane
5d302742f7
NEO-114: Address code review — backlog wording and empty-id test.
2026-06-01 21:49:57 -04:00
VinPropane
cd67810849
NEO-114: Add IQuestDefinitionRegistry adapter and DI registration.
2026-06-01 21:46:59 -04:00
VinPropane
9c2ab5ae4d
NEO-113: address code review — docs, schema and chain terminal tests.
2026-05-31 22:36:26 -04:00
VinPropane
b841b64581
NEO-113: add fail-fast quest catalog load and loader tests.
2026-05-31 22:33:43 -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
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