¶ EventHorizon atomic item effects and sensory causality
Date: 2026-07-27
Fixed two turn-resolution defects:
- A prose-confirmed charged-item application could decrement inventory without installing the item's configured effect.
- Private-action perception could expose an isolated click while omitting the directly felt fastening or pressure that identified its cause.
The item evaluator stamped inferred completed-use inventory history with the pre-commit session turn. The later configured-effect pass examined the committed turn, so the inferred use no longer matched. Inventory and deterministic configured effects were also persisted in separate phases, allowing partial state.
The perception projection treated sensory channels independently but did not require evidence from one mechanism to remain causally adjacent. A fastening click could therefore survive while its immediate tactile consequence was dropped.
- Item deltas now preview the next committed turn number.
- Explicit completed item actions and evaluator-confirmed prose-only uses derive configured effects before commit.
- Inventory changes, charge consumption, completed-use history, configured effect/onset, and passive-effect clock are committed in the same turn transaction.
- The background effect pass remains idempotent by using the same application-turn marker.
- Perception review and narration prompts now keep directly available sound and tactile/kinetic evidence from one mechanism together without revealing unavailable visual detail.
- Durable repository requirements REQ-0498 and REQ-0500 were updated.
cargo fmt --all
- Backend test suite: 336 passed, 0 failed
- Frontend WASM check passed
- Requirements JSONL parsed with unique IDs
- Gitea frontend run 2394: success
- Gitea build/deploy run 2393: success
- Source commit:
6d03cf2
- Main merge:
92ffba2
- Production image:
gitea.app.lan/eventhorizon/eventhorizon:sha-92ffba29cbcb
- Deployment: 2/2 replicas ready and available, zero restarts after rollout
/healthz: ok
/readyz: ready; PostgreSQL and Qdrant ready
No paid synthetic roleplay turn was generated. The previously affected game session was not repaired or otherwise mutated, per operator direction.