- Added `scripts/with-pi-root.sh` to resolve `PI_ROOT` from an explicit checkout, `/work/pi`, or an auto-cloned cache directory, with env knobs for repo, ref, cache path, and auto-update behavior.
- Updated `pi-artifacts`, `rebuild`, and `up` to execute through the new wrapper so Docker build and compose startup share the resolved oh-my-pi root.
- Documented the new resolution flow in `.env.example` and `README.md`, added cache ignore entries, and kept build/runtime config aligned with the resolved root.
- Added a Bun/Vite dashboard frontend with App views for status, issues, events, logs, triggers, and working queue.
- Added dashboard backend support by mounting `/static`, serving package assets, and injecting replay config into `index.html`.
- Added client API/state modules for polling, retry, cancel, browse filtering, and config validation in the SPA.
- Replaced `justfile` task orchestration with bun scripts, updating README/AGENTS and command docs.
- Added Docker, Bun config, and ignorefiles to build web assets, copy them into runtime static data, and prune artifacts.
- Added webhook ping helper plus dashboard test fixtures for bootstrap HTML and replay-token substitution.