# ADR 0003: Editor Framework Mission

## Status

Accepted

## Context

The in-process editor (`crates/editor`) started as a level-editing shell for the FPS foundation. It now includes docked panels, scene I/O, undo/redo, asset browser, real play-in-editor (PIE), and BRP. As milestones M3–M8 add networking, weapons, asset maturity, and modding, the editor must evolve from a game-specific tool into a **reusable Bevy editor framework** without forking gameplay code or duplicating rendering/sim logic.

Competing approaches:

1. **Game-only tool** — fastest short-term; blocks reuse and BRP/automation alignment.
2. **Separate preview runtime** — simpler isolation; breaks WYSIWYG and doubles maintenance.
3. **In-process framework** — same `GamePlugin` + `sim` + shared authoring; editor adds UI, PIE, settings, and BRP only.

## Decision

Treat the editor as a **reusable in-process framework** with these commitments:

- **One world, one sim** — PIE runs the real `GamePlugin`; no preview stub.
- **Authoring over runtime** — `shared` components + hydration are the scene source of truth.
- **WYSIWYG rendering** — the active viewport camera uses the project rendering profile (`assets/project.ron` via `settings` crate).
- **Edit-safe infrastructure** — `EditorOnly` marks editor cameras/helpers; excluded from hierarchy, picking, and save.
- **Command-based undo** — structural edits use `EditorHistory`; PIE uses player/sim snapshots, not full-scene rollback when editing during play.
- **Native-first, wasm-safe core** — `rfd`, BRP HTTP, and OS dialogs stay in `editor`; `shared`, `sim`, `protocol`, and `settings` remain usable from a future WASM client.
- **BRP-aligned, not BRP-dependent** — custom egui UX is primary; scene schema follows Bevy ecosystem conventions for future interop.

Mission statement and phased roadmap: [`docs/mission.md`](../mission.md), [`docs/editor/roadmap.md`](../editor/roadmap.md).

## Consequences

- New editor features should be game-agnostic where possible (viewport, PIE, settings, history).
- Game-specific panels register through an extensibility API (`EditorPlugin`) rather than hard-coding in `ui/mod.rs`.
- Project settings live in a dedicated `settings` crate, not scattered consts in `sim` and `game`.
- Documentation updates are required when changing editor behavior (see `.cursor/rules/documentation.mdc`).
- Shipping the editor binary to players remains out of scope; BRP stays editor-only.

## Follow-Ups

- M1.5: project settings, shared camera FX, PIE possess/eject.
- M5: asset database and prefab workflow in editor.
- M6: `EditorPlugin` trait, command registry, BRP automation surface.
