Files
EscapistsReintroduced/docs/mortar-expiry-evidence.md
T

12 lines
2.6 KiB
Markdown

# Mortar expiry evidence boundaries
The WORKBENCH fixture observes the existing production commitment boundary by overriding `ERR_MortarBattery.ReserveShellAirspace(float now)` and delegating unchanged to `super` before recording evidence. Production calls this immediately after setting `Released`, following successful final authorization, and before invoking native shell transfer. The record therefore exists even if native transfer emits its projectile callback synchronously. No production authorization, timestamp, shell or barrel state is modified by the observer.
Each commit must retain the original report message and exact `ObservedAt`, current order/shot, open/released state and fresh aim, and occur within the original 60-second observation lifetime. A native projectile must match one outstanding recorded commit and its current order/shot. Report freshness is checked at commitment: a projectile emerging after expiry is legitimate if its commitment was fresh. The observer adds no second expiry or retraction policy to a committed physical shell; its existing overall scenario deadline still bounds the test.
A WORKBENCH `Cancel(string reason)` wrapper records the first active order closure before unchanged native/successor cancellation clears its report. The expiry case requires either all eight physical salvo projectiles or an explicit expired-report authorization failure after the original expiry boundary. An unrelated early activity failure, premature battery Stop, changed observation timestamp or later projectile lacking a recorded commit fails the fixture. The HQ continues normally through the post-expiry observation interval and is explicitly stopped only at successful cleanup.
Closure classification currently recognizes the existing production diagnostics `delivered target report expired` and `observation older than 60s`. A different generic failure is deliberately insufficient evidence of expiry; investigate a failing native run rather than broadening this to every canceled order. Completion checks also require commitments equal observed projectile events and no outstanding committed shell.
`tests/test_native_mortar_probe.py` executes the actual commit, event and closure policy/method bodies with synthetic native inputs. It tests immutable timestamps, the exact 60-second boundary, late but legitimately committed emission, duplicate/missing commits, changed order/shot, native event identity, unrelated closure, premature Stop and full finite completion. These are observer-policy regressions, not proof of actual engine projectile timing. Native `mortar-fire` and `mortar-expiry` runs remain required after integration.