cover-shooter ยท diff

git:20260912.52a2e7d to git:20260913.5fc13a7

23 added, 4 removed. Audit A to A.

---
name: cover-shooter
- description: Cover as a verb. Lean, blind fire, leave. Not a second FPS clock.
+ description: Use when an actor enters, occupies, peeks, fires from, and exits authored cover and needs one cover-session state machine with explicit interruption and ownership handoff.
---
# Cover shooter
- Ask: stick-cover | tap-cover | soft-cover.
- Cover is a move row with enter/exit recover. Shots stay `projectile-hitscan`. Aim stays `aim-assist` / `fps-feel`. Do not grant i-frames for standing in cover unless published.
+ Ask: `stick-cover | tap-cover | soft-cover`.
- Accept: leaving cover has a readable recover. Blind fire uses the same fire confirm as hip fire.
+ ## Ownership
+
+ `cover-shooter` owns the actor's cover-session state. `cover-space` owns valid anchors/capabilities; `projectile-hitscan` owns shots; `aim-assist` / `fps-feel` own aim/handling; `input-design` owns bindings.
+
+ ## Contract
+
+ Publish:
+ - stable `cover_session_id`
+ - actor ID and `cover_anchor_id` + revision
+ - state: enter / attached / peek / fire / exit / aborted
+ - movement-control owner
+ - authored transition/cancel conditions
+ - optional stance/fire-side selected from anchor capabilities
+
+ Exactly one system owns the actor's cover locomotion at a time. Duplicate enter/exit requests for one session are idempotent. Cover state does not imply invulnerability unless another gameplay rule explicitly grants it.
+
+ Blind/peek fire produces a normal shot request with declared origin/direction/handling state; it does not maintain a second shooting truth.
+
+ ## Acceptance
+
+ If the anchor becomes stale, blocked, destroyed, or the actor is interrupted, the session exits or re-resolves without leaving two movement owners. Firing from cover produces one authoritative shot path through `projectile-hitscan`, and exiting cover cannot replay a stale fire input.