VinPropane
93fd8864dc
chore: fix contract catalog analyzer warnings.
...
Primary constructor on ContractTemplateCatalog; concrete List return
types in loader parse helpers; collection spread in NormalizeBundle;
const emptyCatalog in roster gate test.
2026-06-20 19:46:39 -04:00
VinPropane
56bc22c70d
NEO-145: address review findings — tests and decomposition docs.
...
Rename cross-ref unit test; add loader freeze-overflow and missing-schema
negatives; update E7.M4/CT.M1 alignment tables and strike through review.
2026-06-20 19:36:25 -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
3a509d560e
chore: silence IDE0301 and redundant await linter warnings
...
Use static empty bundle grant lists in RewardRouterOperations; drop
redundant await on synchronous GdUnit assert_signal in quest defs test.
2026-06-17 21:19:27 -04:00
VinPropane
e39622893b
chore: use collection expressions for empty grant fallbacks
...
Replace Array.Empty<T>() with [] in RewardRouterOperations (IDE0301).
2026-06-17 21:13:29 -04:00
VinPropane
b4d48f6e36
NEO-141: remove server-only manual QA doc after story end
...
Comment-only infrastructure story — acceptance fully covered by dotnet
test; align with NEO-140 and planning-implementation-docs skip rule.
2026-06-17 19:36:33 -04:00
VinPropane
0a4450a199
NEO-141: address review — backlog wording and class summary
...
Align E7M3-09 in-scope bullet with ops-only hook anchors; pluralize
FactionGateOperations telemetry remark; mark review findings done.
2026-06-17 19:27:27 -04:00
VinPropane
73403622f2
NEO-141: consolidate faction telemetry hook comment sites
...
Complete reputation_delta anchor in ReputationOperations, extend
faction_gate_blocked on both gate deny paths, remove router duplicate
stub, and add README Faction telemetry hooks subsection.
2026-06-17 19:25:25 -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
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
ddaf33ce87
NEO-136: fix rollback applied delta and normalize ids at ops boundary
2026-06-15 20:52:04 -04:00
VinPropane
536f635a11
NEO-136: document ReputationOperations and reconcile plan
2026-06-15 20:48:44 -04:00
VinPropane
8aae9625e7
NEO-136: add ReputationOperations auditable standing apply
2026-06-15 20:48:42 -04:00
VinPropane
94acf57e5b
NEO-135: apply standing deltas from clamped effective value
...
Compute newStanding from previousStanding + deltaAmount so stale
out-of-band persisted values match TryGetStanding before mutation.
2026-06-15 20:35:24 -04:00
VinPropane
2ac804ed6c
NEO-135: validate faction before player gate in in-memory store
...
Match PostgresFactionStandingStore check order so unknown faction ids
return unknown_faction even when the player is not writable.
2026-06-15 20:32:53 -04:00
VinPropane
d5f16f4cf4
NEO-135: address code review findings
...
Update decomposition docs for E7M3-03, add in-memory read-clamp test via
test seed hook, fix empty factionId deny code, AAA integration test,
Postgres FK orchestration notes, and strike review suggestions Done.
2026-06-15 20:27:36 -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
aa3eb3597c
NEO-134: address code review findings
...
Update decomposition tracking docs, add faction loader integration tests,
reorder standing-band gate before freeze, and guard success logging.
2026-06-15 20:11:55 -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
6cb7dfbb46
NEO-133: address code review — roster docs, CI cleanup, band gate
...
Cross-link E7.M1 doc to E7M3 five-quest roster; remove dead
_prototype_e7m1_quest_gate; add faction standing-band CI gate;
clarify server roster error strings; grid-contract loader test asserts.
2026-06-15 19:52:42 -04:00
VinPropane
0948d9d4a8
NEO-133: land faction catalog, quest gate/rep schemas, and CI gates
...
Add two prototype factions, extend quest bundles with reputationGrants
and factionGateRules, freeze five-quest roster in validate_content.py,
and sync minimal server quest roster parity for green startup tests.
2026-06-14 14:54:20 -04:00
VinPropane
1333da2938
NEO-130: Address review feedback on unlock_granted stub.
...
Document E9.M1 durable-emit gating for rollback paths; reconcile plan
bullet for class summary; strike through resolved review items.
2026-06-07 22:49:00 -04:00
VinPropane
c461a822f1
NEO-130: Add comment-only reward telemetry hook sites.
...
Anchor future E9.M1 reward_delivery and unlock_granted events in
RewardRouterOperations; document hooks in server README and module docs.
2026-06-07 22:46:27 -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
28e4a70846
NEO-128: address review — operator-chain delivery and wiring deny tests.
2026-06-07 18:27:10 -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
039672cdac
NEO-127: avoid clobbering winner perks on TryRecord race rollback
...
Track perks unlocked per grant and remove only those on race loss instead
of restoring a full pre-apply snapshot; re-run ReevaluateAfterLevelUp at
post-rollback levels so a concurrent winner's path-auto unlocks survive.
2026-06-07 18:10:56 -04:00
VinPropane
be9bb8f961
NEO-127: restore perk state on TryRecord race rollback
...
Capture pre-skill-apply XP and perk snapshots; on TryRecord loss reverse
each applied skill row via negative delta and restore the perk snapshot so
level-up unlocks from the loser call are reverted without clobbering a
concurrent winner's XP.
2026-06-07 18:04:06 -04:00
VinPropane
71fbf3d628
NEO-127: rollback duplicate grants when TryRecord loses race
...
Mirror EncounterCompletionOperations compensating rollback: concurrent
losers undo item and skill XP applies before returning the winner event.
2026-06-07 17:53:20 -04:00
VinPropane
65ca11171b
NEO-127: address code review test and backlog doc findings
...
Add null-bundle and invalid-id deny tests, fix replay XP assertion,
align E7M2-04 backlog wording with TryApplyGrant, strike review items done.
2026-06-07 17:49:26 -04:00
VinPropane
5b84ffd75a
NEO-127: add RewardRouterOperations for quest completion bundles
...
Apply item grants and mission_reward skill XP with compensating rollback,
idempotent IRewardDeliveryStore recording, and AAA integration tests.
2026-06-07 17:47:32 -04:00
VinPropane
35fa4ad192
NEO-126: address code review — module anchor and casing test
...
Add E7.M2 implementation anchor for the delivery store and assert
mixed-case TryRecord replays are rejected at the store layer.
2026-06-07 17:33:07 -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
766837d7e8
NEO-125: address code review findings for bundle validation
...
Rename freeze-first loader tests, add PrototypeE7M2QuestCatalogRulesTests
for cross-ref paths, align missing skill-def error with Python, and
document bundle schema path resolution in server README.
2026-06-07 15:27:55 -04:00
VinPropane
3924695619
NEO-125: fail-fast quest completionRewardBundle validation at startup
...
Register bundle JSON Schemas, parse bundle DTOs on QuestDefRow, and run
E7M2 prototype gates (presence, freeze table, cross-ref, mission_reward)
with skill catalog input from DI.
2026-06-07 15:25:58 -04:00
VinPropane
88d01778a1
NEO-121: Address review nits for quest telemetry hook sites.
...
Add schemaVersion to quest_start comment, thread playerId/questId into
DenyAccept, and merge duplicate deny snapshot helpers.
2026-06-07 12:33:34 -04:00
VinPropane
705a7cd028
NEO-121: Add comment-only quest telemetry hook sites in QuestStateOperations.
...
Document quest_start, quest_step_complete, quest_complete, and quest_accept_denied
anchors for future E9.M1 ingest with README, manual QA, and module doc updates.
2026-06-07 12:29:52 -04:00
VinPropane
ea3b7cceb5
NEO-120: Address code review test coverage gaps.
...
Add HTTP tests for already_completed deny snapshot and empty {} body;
tighten already_active AAA arrange. Strike through resolved review items.
2026-06-07 12:21:19 -04:00