# E6.M2 — ConsentAndRiskUxSignals

## Summary

| Field | Value |
|--------|--------|
| **Module ID** | E6.M2 |
| **Epic** | [Epic 6 — PvP Security](../epics/epic_06_pvp_security.md) |
| **Stage target** | Prototype |
| **Status** | Planned (see [dependency register](module_dependency_register.md)) |

## Purpose

Entry warnings, in-zone risk UI, and clear PvP state communication using eligibility from [E6.M1](E6_M1_PvPEligibilityAndFlagState.md) and camera/readability context from [E1.M2](E1_M2_IsometricCameraController.md).

## E1.M2 camera adjacency (NEO-18)

When implementing zone-risk HUD and related **client** presentation, treat [E1.M2](E1_M2_IsometricCameraController.md) as the framing source:

- **May read** the follow rig’s **`camera_state`** snapshot (`client/scripts/camera_state.gd`) — field meanings and refresh cadence: [Consumer contract](E1_M2_IsometricCameraController.md#consumer-contract-neo-18).
- **Not duplicated in `CameraState` today:** occlusion on/off, bound zoom/occlusion resources, `presentation_yaw_deg`, `pitch_elevation_deg` — read **`IsometricFollowCamera`** exports (`client/scripts/isometric_follow_camera.gd`) when needed.
- **If `CameraState.yaw` becomes non-zero** (orbit enabled mid-project per E1.M2 rotation policy), screen-space layouts that assumed a fixed diagonal may need a compass / telegraph pass; keep **gameplay-adjacent** semantics **world-anchored** where possible.
- **Authority:** [Client vs server — E1.M2](client_server_authority.md#e1m2-isometriccameracontroller) — the server must **not** use client-reported camera pose for gameplay checks (targeting, LOS, zone rules).

## Responsibilities

- Show `RiskPrompt` on low-sec entry; drive `ZoneRiskState` / `PvPIndicatorState` in HUD.

## Key contracts

| Contract | Role |
|----------|------|
| `RiskPrompt` | Consent dialog payload and outcomes. |
| `ZoneRiskState` | Display model for current zone risk. |
| `PvPIndicatorState` | Persistent indicator semantics. |

## Module dependencies

- **E6.M1** — PvPEligibilityAndFlagState.
- **E1.M2** — IsometricCameraController.

## Dependents (by design)

- Client UX only; server remains authoritative via E6.M1 / E4.M4.

## Related implementation slices

Epic 6 **Slice 2** — `risk_prompt_shown`, accepted/declined.

## Source anchors

- Master plan: [`neon_sprawl_vision.plan.md`](../../../neon_sprawl_vision.plan.md) — Epic 6.
- [Module dependency register](module_dependency_register.md)
