Commit Graph

19 Commits (bcf6fd2641702482f91b4275c494a7217fc0812d)

Author SHA1 Message Date
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 c237bead53 NEO-147: guard DenyCreateFailure when create snapshot is null 2026-06-27 19:43:44 -04:00
VinPropane 3549b647a5 NEO-147: add standing and duplicate-seed review follow-up tests 2026-06-27 19:23:17 -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 87a0eb25ec NEO-147: add contract generator unit and integration tests 2026-06-27 19:15:14 -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 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 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 b455ff5ad5 NEO-146: apply C# collection and using style fixes
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.
2026-06-24 20:41:25 -04:00
VinPropane 1922900477 NEO-146: address code review findings for contract stores
Add Postgres race/deny tests, duplicate instance id coverage, FK-safe
outcome append, MakeInstanceKey locking, decomposition alignment updates,
and strike-through review doc.
2026-06-24 20:37:16 -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 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