Commit Graph

134 Commits (299de3c79633afef36f0de7b420e31815ec90357)

Author SHA1 Message Date
VinPropane 299de3c796 chore: address cleanup review follow-ups and Postgres test flake
Fix gig persistence integration flake with FakeTimeProvider on the Postgres
host, restore StringComparer.Ordinal on quest counter copies, remove the Bruno
docs block, and record resolved review items.
2026-06-27 23:24:18 -04:00
VinPropane b233fa040d chore: analyzer cleanup for server and tests
Apply Roslyn/dotnet-format fixes across NeonSprawl.Server and
NeonSprawl.Server.Tests: collection expressions, concrete helper
return types, record XML docs, logging guards, quest store refactors,
and removal of redundant usings via GlobalUsings.cs. Extend
csharp-style.md with the recurring patterns.
2026-06-27 22:55:50 -04:00
VinPropane eb6a4fedde NEO-149: fix CraftResult and craft API analyzer warnings
Move CraftResult param docs to primary-constructor summaries (RCS1263),
use CraftIoAppliedJson[] return and collection expression in MapIoRows,
prefer is true for debug log guard (CDT1001), and add MapResponse deny test.
2026-06-27 21:56:52 -04:00
VinPropane bcf6fd2641 NEO-149: wire contract completion on encounter clear
Add ContractCompletionOperations orchestrator (deliver-then-mark,
outcome audit), hook from EncounterCompletionOperations after E5.M3
loot and quest wiring, extend dev fixture reset for contract rows,
Bruno quest-fixture reset request, and cover with tests (904 green).
2026-06-27 21:48:17 -04:00
VinPropane e0877fea7f NEO-146: use collection spread in EncounterProgressApi
Apply IDE0305 to defeated-target ordering, assert stable sort in API
tests, and document sorted defeatedTargetIds in Bruno.
2026-06-24 20:41:40 -04:00
VinPropane ae641a4dd0 NEO-146: add contract instance and outcome stores with Postgres split
Durable per-player contract instances (one active) and append-only
outcome audit rows, mirroring NEO-116/135 store patterns with V011/V012
migrations, AAA tests, README docs, and Bruno health smoke.
2026-06-24 20:27:32 -04:00
VinPropane 5ab5022704 NEO-145: add fail-fast contract template catalog load and registry.
Startup loader mirrors validate_content.py E7M4 gates (roster, freeze,
cross-ref, band caps); IContractTemplateRegistry resolves templates by id.
Bruno health smoke confirms host boot after catalog validation.
2026-06-20 19:31:54 -04:00
VinPropane 7011a56755 NEO-140: address code review — grid-contract rep and wire-level gate test
Add integration coverage for +10 Rust Collective reputationGrants,
JsonDocument omission test for factionGateRules, extend accept Bruno,
fix manual QA link, strike through review findings.
2026-06-17 19:12:33 -04:00
VinPropane 2b4a0d1e34 NEO-140: project faction gates and rep grants on quest HTTP GETs
World quest-definitions expose optional factionGateRules; quest-progress
completionRewardSummary maps GrantedReputation to reputationGrants.
2026-06-17 19:08:37 -04:00
VinPropane 7347b3b3b3 NEO-139: reset faction standing before default Bruno GET.
Seq 2 pre-request clears prototype faction rows so re-runs pass after operator-chain flows leave +15 standing.
2026-06-16 17:50:07 -04:00
VinPropane 329028429d NEO-139: fix Bruno operator-chain helper require path.
Use ./scripts/ from collection root so developer sandbox allows the import.
2026-06-16 17:46:20 -04:00
VinPropane 0dfc17486e NEO-139: fix Bruno default test playerId env lookup.
Use getEnvVar fallback so CI Local environment resolves playerId in test assertions.
2026-06-16 17:41:50 -04:00
VinPropane 0fe182565e NEO-139: address review — trim-path tests and Bruno folder note.
Add whitespace-only 404 and padded-path playerId echo tests; document seq 4 standing side effect in faction-standing folder docs.
2026-06-16 17:26:40 -04:00
VinPropane 3f08812e93 NEO-139: add GET faction-standing snapshot API with tests and Bruno.
Expose client-readable standing for all catalog factions; 404 unknown players via position gate; Bruno asserts +15 after operator chain.
2026-06-16 17:19:50 -04:00
VinPropane 6999eb3303 NEO-138: clear delivery and audit on quest fixture reset.
resetQuestIds now clears IRewardDeliveryStore rows and quest-completion
audit deltas so Bruno re-runs re-apply rep grants after standing reset.
2026-06-15 23:10:58 -04:00
VinPropane 4ee29e867b NEO-138: quest-fixture resetFactionIds for gate deny Bruno.
Clear prototype faction standing in seq 10 pre-request so stale +15 from
prior seq 11 runs does not pass the grid contract gate locally.
2026-06-15 23:00:21 -04:00
VinPropane 2581677dd5 NEO-138: reset grid contract in faction gate deny Bruno.
Clear stale completed progress from prior seq 11 runs so accept
returns faction_gate_blocked instead of already_completed locally.
2026-06-15 22:40:38 -04:00
VinPropane 69c3ad4915 NEO-138: address code review follow-ups.
Fix Bruno grid-contract status expectation, add race rep rollback and
multi-row audit-failure tests, audit-row assertion, and doc comments.
2026-06-15 22:29:36 -04:00
VinPropane 3466f1ee32 NEO-138: reward router reputation grants, Bruno quest-flow, docs.
Apply completionRewardBundle.reputationGrants via ReputationOperations with
compensating rollback; thread faction stores through quest wiring; add operator
chain Bruno helper and grid-contract accept success; update README and E7.M3 docs.
2026-06-15 22:18:27 -04:00
VinPropane 64920792ee chore: address Bruno self-reset review — README, Postgres test, nits.
Document resetQuestIds, resource-node fixture, and cooldown clear in server README; add TryClearProgress Postgres integration test; sync-review doc and Bruno require paths.
2026-06-15 21:53:44 -04:00
VinPropane 95cf5d1f83 chore: add Bruno self-reset dev fixtures for order-independent collection runs.
Extend quest and resource-node fixture APIs so Bruno pre-requests can reset shared dev-local-1 state (cooldowns, nodes, inventory, quest progress) instead of relying on a fresh Postgres baseline.
2026-06-15 21:50:22 -04:00
VinPropane a36e7b56b5 NEO-137: Address review — quest fixture for Bruno CI and test/docs nits.
Add POST …/__dev/quest-fixture to mark quests completed without reward
delivery; wire Bruno pre-request and CI flag. Multi-rule AND unit test,
README notes, gate deny comment, review strikethroughs.
2026-06-15 21:24:21 -04:00
VinPropane 0241cc31e3 NEO-137: Wire FactionGateOperations into quest accept with tests and docs.
Evaluate FactionGateRule rows before TryActivate; deny with faction_gate_blocked
when standing is below minStanding. Integration and Bruno deny smoke included.
2026-06-15 21:11:27 -04:00
VinPropane 4fca45bf7c NEO-135: add faction standing and reputation delta audit stores
Per-player IFactionStandingStore with clamped reads/writes and fail-closed
unknown-faction deny; append-only IReputationDeltaStore; in-memory plus
Postgres V009/V010 when configured. Tests, Bruno health smoke, README.
2026-06-15 20:23:57 -04:00
VinPropane 48bca98467 NEO-134: fail-fast faction catalog load with E7M3 quest gates
Add Game/Factions loader, registry, and CI-parity prototype rules; extend
quest catalog to parse faction gates/rep grants and cross-check at startup.
2026-06-15 20:08:46 -04:00
VinPropane 635f3cccaf NEO-133: fix Bruno quest smokes for five-quest roster
Update quest-definitions and quest-progress default Bruno tests
after prototype_quest_grid_contract landed in the catalog.
2026-06-15 19:58:37 -04:00
VinPropane 5126e82c4a NEO-129: fix Bruno gather interact check (allowed not success).
Tolerate craft-spine partial progress and node_depleted when the quest
is already completed in the shared CI collection run.
2026-06-07 21:16:21 -04:00
VinPropane 9ab3a70796 NEO-129: address review test and Bruno coverage gaps. 2026-06-07 18:48:45 -04:00
VinPropane 78e805e428 NEO-129: add completionRewardSummary to quest-progress GET.
Project IRewardDeliveryStore grant snapshots onto completed quest rows;
extend tests, Bruno gather-intro spine, and docs.
2026-06-07 18:38:37 -04:00
VinPropane da99769ddf NEO-128: wire quest complete to reward router deliver-then-mark.
TryMarkComplete delivers completionRewardBundle before marking complete;
objective wiring and upstream ops thread reward dependencies. Tests cover
bundle delivery, idempotent replay, and inventory-full deny.
2026-06-07 18:24:01 -04:00
VinPropane 2a8fe31b14 NEO-126: add IRewardDeliveryStore for quest completion rewards
In-memory RewardDeliveryEvent store with idempotent TryRecord,
grant summaries for future HTTP projection, DI registration, and tests.
2026-06-07 17:31:45 -04:00
VinPropane 2fa2e35ca6 NEO-120: Add quest accept POST API, tests, and Bruno spine.
Wire QuestStateOperations.TryAccept at POST /game/players/{id}/quests/{questId}/accept
with shared quest row projection, integration tests, and Bruno accept flows.
2026-06-07 12:18:51 -04:00
VinPropane ad906fec40 NEO-119: Tighten quest-progress order and side-effect test coverage. 2026-06-07 12:10:55 -04:00
VinPropane 066d1ff981 NEO-119: Add GET quest-progress API with inventory refresh hook. 2026-06-07 11:56:28 -04:00
VinPropane 71dbdd9a3e NEO-118: Wire quest objectives to gather, craft, and encounter events.
Add QuestObjectiveWiring with auto step advance/complete, hook into
GatherOperations, CraftOperations, EncounterCompletionOperations, and
QuestStateOperations accept/advance for inventory_has_item checks.
2026-06-06 19:54:37 -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 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 b841b64581 NEO-113: add fail-fast quest catalog load and loader tests. 2026-05-31 22:33:43 -04:00
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