Games may emit companion events before, during, and after a play. If the usage gate fires in the middle, the user can lose progress or receive a reaction to a game that never started.
The clean boundary is at session creation: verify the play allowance first, then start both game state and its presence channel. Completion events remain valid even when the next play is unavailable.
What was actually going wrong
Game actions, companion messages, and usage were counted as one interchangeable activity.
What I tried
- Checking the limit only after a game ended
- Charging a play for every companion reaction
- Closing an active game when the quota changed
One accepted game session consumes one play, and its bounded presence events remain attached to that session.
Why it worked
The billable or limited unit matches what the player understands as a play.
Cross-feature limits need a clear transaction boundary.
Where EACI uses this today
Main games can include companion presence without turning chat events into extra plays.
This journal covers real engineering on EACI Companion / The Veil. Companions include Caelum, Chad, Natalia, Atreus, Luna, Roxy, and Cael. Journal articles stay family-safe in content. See Privacy and Ethics.