# Phase 3 — Integration (serial, one agent, branch `integration`) **Precondition: all four lanes merged to `main`.** Scope: spec milestones **M8 and M9**, cross-lane wiring, and the README. 1. **Adjudicate `plan/CHANGE_REQUESTS.md`** first — apply or reject each request against the frozen files, with a one-line rationale per decision committed to that file. 2. **M8 end-to-end** (spec): correction panel + bbox annotation UI (`frontend/src/annotate.js`), wire `POST /api/annotations` through lane B's `geometry.py` functions (triangulate when 2+ views, else nearest-point-on-ray fallback), resolved anchors appear live in overlays + 3D scene. Acceptance: two-view annotation of a synthetic stage corner lands within 0.2 units of ground truth. 3. **M9** (spec): keyframed camera paths (`camPath.js`), polish, keyboard shortcuts, README with quickstart + real-footage workflow + shooting tips. 4. **Full-system pass:** fresh clone → follow README verbatim → synthetic demo works; then (if COLMAP installed and real footage available) run the real pipeline once and file any failures as issues rather than rushing fixes. 5. Tag `v0.1.0`. You may edit any file in this phase — the ownership matrix ends here — but keep the frozen contracts (timebase, schema, API shapes, pose convention) stable unless a change request demands otherwise.