VinPropane
e0d0be65c6
Merge pull request #192 from ViPro-Technologies/NEO-150-e7m4-07-economy-validation-lint-at-issue-time
...
NEO-150: E7M4-07 economy validation lint at issue time
2026-06-28 10:07:33 -04:00
VinPropane
70e3e9a17d
NEO-150: Address code review findings
...
Extract ContractPrototypeTestFixtures, add skill XP over-cap test,
null-guard template, validation-order comment, and NEO-151 handoff note.
2026-06-28 10:01:08 -04:00
VinPropane
e3d8458a66
NEO-150: Add code review for economy validation at issue
2026-06-28 09:56:37 -04:00
VinPropane
d5de4e81ef
NEO-150: Document economy validation at issue and reconcile plan
...
Update server README, E7.M4 module doc, alignment register, and
implementation plan reconciliation for E7M4-07.
2026-06-28 09:20:10 -04:00
VinPropane
3d49230c3c
NEO-150: Add issue-time contract economy validation
...
Introduce ContractEconomyValidation.TryValidateTemplate and wire it
into TryIssue before persist with economy_cap_exceeded and
invalid_reward_bundle deny codes.
2026-06-28 09:20:09 -04:00
VinPropane
039542aa74
NEO-150: Add E7M4-07 economy validation kickoff plan
...
Document issue-time band-cap and cross-ref validation approach,
deny reason codes, file lists, and tests before implementation.
2026-06-28 09:10:59 -04:00
VinPropane
177b316efa
Merge pull request #191 from ViPro-Technologies/chore/cleanup
...
chore: server and test analyzer cleanup
2026-06-27 23:32:04 -04:00
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
2cf8bcd0b9
Merge pull request #190 from ViPro-Technologies/NEO-149-e7m4-06-contract-completion-encounter-wiring
...
NEO-149: E7M4-06 contract completion on encounter clear
2026-06-27 22:05:41 -04:00
VinPropane
c5b8b7a726
NEO-149: re-review after code review follow-ups
2026-06-27 21:58:26 -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
6f735f8643
NEO-149: fix analyzer warnings in encounter wiring
...
RCS1123 parentheses in quest wiring test, CA1873 guarded LogDebug,
CA1859 List parameter for CompensatingRemoveGrants.
2026-06-27 21:52:13 -04:00
VinPropane
68ba26724b
NEO-149: address code review follow-ups
...
Update E7.M4 alignment register, add quest-fixture contract reset
API test, align mark-complete deny codes with instance reason codes,
refactor idempotent replay test AAA, strike review findings done.
2026-06-27 21:51:17 -04:00
VinPropane
d1df940084
NEO-149: add code review for contract completion wiring
2026-06-27 21:50:13 -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
8d9d02fde5
NEO-149: add E7M4-06 implementation plan for contract completion wiring
...
Kickoff plan for ContractCompletionOperations orchestrator, encounter
hook after E5.M3 loot, and integration test coverage; Bruno HTTP loop
deferred to NEO-151.
2026-06-27 21:43:46 -04:00
VinPropane
36ffec94e9
Merge pull request #189 from ViPro-Technologies/NEO-148-e7m4-05-reward-router-contract-completion
...
NEO-148: E7M4-05 contract completion reward router
2026-06-27 21:41:26 -04:00
VinPropane
7268935bc7
NEO-148: address code review doc follow-ups
...
Add E7.M4 alignment register entry, E7.M2 cross-ref, Postgres store-key
migration note, and defer contract fixture reset to NEO-149.
2026-06-27 21:24:12 -04:00
VinPropane
e75ac3932f
NEO-148: add code review for contract reward router
2026-06-27 19:59:31 -04:00
VinPropane
76ce1943c7
NEO-148: add contract completion reward router and delivery store extension
...
TryDeliverContractCompletion reuses the quest grant-apply path with
contract-specific idempotency keys and source-kind-aware delivery store rows.
2026-06-27 19:58:07 -04:00
VinPropane
b20d7d001e
NEO-148: add E7M4-05 implementation plan for contract reward router
2026-06-27 19:54:16 -04:00
VinPropane
52ab7dbec2
Merge pull request #188 from ViPro-Technologies/NEO-147-e7m4-04-contract-generator-try-issue
...
NEO-147: E7M4-04 contract generator TryIssue
2026-06-27 19:50:36 -04:00
VinPropane
c237bead53
NEO-147: guard DenyCreateFailure when create snapshot is null
2026-06-27 19:43:44 -04:00
VinPropane
81f4cde673
chore: remove redundant test namespace using in gate tests
2026-06-27 19:40:13 -04:00
VinPropane
58a188eac0
chore: dedupe faction id constants in gate operation tests
2026-06-27 19:30:28 -04:00
VinPropane
39805ef8e6
chore: fix QuestDefinitionCatalogLoader analyzer warnings
2026-06-27 19:26:52 -04:00
VinPropane
fbb248770f
NEO-147: update decomposition tracking and strike review findings
2026-06-27 19:23:17 -04:00
VinPropane
3549b647a5
NEO-147: add standing and duplicate-seed review follow-up tests
2026-06-27 19:23:17 -04:00
VinPropane
be0525b152
NEO-147: add code review for contract generator TryIssue
2026-06-27 19:21:24 -04:00
VinPropane
c37c3c76a3
NEO-147: use class-level grid faction id in generator tests
2026-06-27 19:18:23 -04:00
VinPropane
44f4e4c3ce
NEO-147: mark faction id locals const in generator tests
2026-06-27 19:15:43 -04:00
VinPropane
60aa0be4f0
NEO-147: document generator operations and reconcile plan
2026-06-27 19:15:14 -04:00
VinPropane
87a0eb25ec
NEO-147: add contract generator unit and integration tests
2026-06-27 19:15:14 -04:00
VinPropane
7f62f43f92
NEO-147: add ContractGeneratorOperations.TryIssue orchestrator
2026-06-27 19:15:11 -04:00
VinPropane
e0efaa3c15
NEO-147: add E7M4-04 contract generator kickoff plan
2026-06-27 19:12:27 -04:00
VinPropane
29bc2423b5
Merge pull request #187 from ViPro-Technologies/NEO-146-e7m4-03-contract-instance-outcome-stores
...
NEO-146: E7M4-03 contract instance and outcome stores
2026-06-24 21:27:51 -04:00
VinPropane
1cf80a4e4e
NEO-146: fix stale active index race in TryGetActiveForPlayer
...
Read the active index under the player lock and remove stale entries
only when the indexed instance id still matches, preventing concurrent
get/complete/reissue from dropping a newer active pointer.
2026-06-24 21:21:02 -04:00
VinPropane
a64f7100a2
NEO-146: update plan reconciliation test count to 874
2026-06-24 21:13:44 -04:00
VinPropane
93bd45d49a
NEO-146: fix in-memory outcome idempotency race and clear parity
...
Lock idempotency keys alongside row ids in TryAppend so concurrent
duplicate keys cannot both succeed; return true from TryClearInstance
when the row is absent to match Postgres idempotent DELETE behavior.
2026-06-24 21:13:42 -04:00
VinPropane
237e39c8ca
NEO-146: simplify using declarations in outcome persistence tests
...
Apply IDE0063 where braced scopes have no name clashes with later blocks.
2026-06-24 21:11:53 -04:00
VinPropane
6c4221072a
NEO-146: fix in-memory create/complete lock ordering
...
Nest player and instance locks in TryCreateActive, TryMarkComplete, and
TryClearInstance so concurrent create and complete cannot leave a stale
active index or mismatched snapshot.
2026-06-24 21:05:56 -04:00
VinPropane
7740d2145f
NEO-146: address Bugbot findings on contract outcome stores
...
Ensure instance schema before outcome DDL, require matching player/instance
on Postgres append, catch unique violations on concurrent duplicates, and
add parity plus concurrency integration tests.
2026-06-24 20:58:17 -04:00
VinPropane
b087c03a47
NEO-146: address re-review in-memory outcome guard parity
...
InMemoryContractOutcomeStore checks IContractInstanceStore.TryGet before
append; add unit test, README/plan updates, and close r2 review items.
2026-06-24 20:52:49 -04:00
VinPropane
a9bc1acaa8
NEO-146: add re-review after cleanup and review follow-up
2026-06-24 20:51:04 -04:00
VinPropane
01e82f38f6
NEO-146: fix record struct docs and collection spread in tests
...
Replace param XML on record struct mutation outcomes with summary cref
docs to avoid Roslynator RCS1263 false positives; apply IDE0305 in
RewardRouterOperationsTests and update style guide guidance.
2026-06-24 20:47:40 -04:00
VinPropane
a4f37db594
NEO-146: restore test layout section in csharp-style guide
...
Fix IDE0270 section that accidentally overwrote the test project layout heading.
2026-06-24 20:46:27 -04:00
VinPropane
b519f4e9eb
NEO-146: fix mutation outcome docs and null-check style
...
Add summary and Kind param XML docs on mutation outcome records, simplify
PostgresDockerHelper null guard with ?? throw, and document RCS1139/IDE0270.
2026-06-24 20:46:23 -04:00
VinPropane
b6b0b87534
NEO-146: fix remaining C# analyzer style warnings
...
Apply using simplification, inline declarations, const locals, and
Lock in PostgresDockerHelper; document RCS1118 and IDE0018 in style guide.
2026-06-24 20:44:30 -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