namespace NeonSprawl.Server.Game.Contracts; /// Append-only contract completion outcome audit log (NEO-146). public interface IContractOutcomeStore { /// First append with a given row Id or IdempotencyKey returns true; duplicates return false. bool TryAppend(ContractOutcomeRow row); bool TryGetByIdempotencyKey(string idempotencyKey, out ContractOutcomeRow row); /// Audit rows for one instance ordered by then Id ascending. IReadOnlyList GetOutcomesForInstance(string contractInstanceId, int? limit = null); /// Dev fixture only — removes outcome rows for one instance; idempotent when none match. bool TryClearForInstance(string contractInstanceId); }