Outcome
Give every gameplay mutation one typed, deterministic preflight/commit/cancel path and one bounded event publication model.
Scope and invariants
- Define immutable action requests/context, captured stable identities, authorization, costs, target/shape data, and source attribution.
- Preflight is pure and repeatable; commit is atomic against one simulation owner; cancellation and retry semantics are explicit.
- Order nested events deterministically, bound recursion/fan-out, prevent accidental reentrancy, and attach idempotency keys where external retries occur.
- Separate domain events, durable metrics, client projections, and operational telemetry; consumers cannot mutate the transaction in callbacks.
- Provide common inventory/currency/state effect primitives with rollback-safe error handling.
Acceptance criteria
Dependencies and parallelization
Depends on #32 and #37; persistence/event adapters may be stubbed. Domain systems can design typed requests in parallel once the contract is approved.
Independent implementation
New code and tests are MIT-licensed independent work. Preserve public behavior and issue-level design choices, but do not copy or mechanically translate GPL server/Python implementation or tests. Mixed-license content remains external data with its own notices.
Outcome
Give every gameplay mutation one typed, deterministic preflight/commit/cancel path and one bounded event publication model.
Scope and invariants
Acceptance criteria
Dependencies and parallelization
Depends on #32 and #37; persistence/event adapters may be stubbed. Domain systems can design typed requests in parallel once the contract is approved.
Independent implementation
New code and tests are MIT-licensed independent work. Preserve public behavior and issue-level design choices, but do not copy or mechanically translate GPL server/Python implementation or tests. Mixed-license content remains external data with its own notices.