# Policy Engine · Simulation Bridge Prep (POLICY-ENGINE-30-002) - **Date:** 2025-11-20 - **Depends on:** Overlay projection (30-001) - **Working directory:** `src/Policy/StellaOps.Policy.Engine` ## Simulation request schema - `tenant` (string) - `rules[]` (string) — ruleIds to simulate; if empty, simulate all active rules. - `overlays[]` (optional) — inline `OverlayProjection` objects to test hypothetical changes without persisting. - `paths[]` — array of `PathScope` inputs. - `mode` (`preview|whatif`) — `preview` returns decisions only; `whatif` also returns delta vs current overlays. - `seed` (int, optional) — for deterministic randomization if simulations sample paths. ## Response schema - `decisions[]` — per PathScope result: `pathScope`, `decision`, `reasons[]`, `ruleId`, `version`, `effectiveAt`. - `deltas[]` (only for `whatif`) — entries with `ruleId`, `baselineDecision`, `candidateDecision`, `diffReason`. - `metrics` — echo of counters: `evaluated`, `allowed`, `denied`, `warned`, `deferred` for quick UI. ## Determinism rules - When `seed` absent, use fixed seed `0xC0DEC0DE` for any randomized sampling. - Responses ordered by input `paths[]` index, then `ruleId`. ## Acceptance for prep completion - Simulation schemas are frozen; downstream UI/CLI harnesses can rely on shapes and ordering. - Delta semantics clarified to unblock change-event publication (30-003).