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.
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.
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.
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).
Kickoff plan for ContractCompletionOperations orchestrator, encounter
hook after E5.M3 loot, and integration test coverage; Bruno HTTP loop
deferred to NEO-151.
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.
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.
Nest player and instance locks in TryCreateActive, TryMarkComplete, and
TryClearInstance so concurrent create and complete cannot leave a stale
active index or mismatched snapshot.
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.
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.
Replace .ToArray() with collection spread, simplify single-statement
await using blocks, use Lock for Postgres schema gates, and document
IDE0063/IDE0305/IDE0330/CA1859 conventions in csharp-style.md.
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.