**Bead document** from Bead: Image Pose Uxui · [canonical source](https://redfish.acequia.io/guerin/.agents/74c30681-2b0c-48b2-b2a8-9e21190a4926/STATE.md) · discussion: Talk: Image Pose Uxui
**Phase:** BUILD — foundation + solver shipped & deployed; CDP pixel-verify owed. **Last updated:** 2026-06-16.
## Where we are - Bead scaffolded + deployed (first bead-sync live at the canonical URI, auth-gated). - **repo/ on `main`**: `calibrate-3d.html` (BYOK gate · image pane · taos-engine Google-tiles 3D · live pose readout · snapshot-view-as-pose · campanile pins · **solver wired**), `solver.js` (LM bundle-adjust, self-test rms 0.57px), `dashboard.html` + `project.json`, telemetry. - Steps 00–07 done; 08 (deploy) done; **09 (CDP pixel verify on real GPU) PENDING**. - DevOps/orchestration beads mounted: `#shape-up-studio`, `#agentify-bead`, `#agents-dashboard`, `#home-hosting`. solver-agent dispatched + delivered (done).
## Next action CDP pixel-verify the live app on a real GPU (WebGPU never headless). Then UX polish on the pin→3D world-point pick (currently binds to view-centre; wants a true ray→terrain pick).
## Blocking on Stephen - Sample Google Maps Tiles API key, or BYOK-only to start? - Git remote wanted, or WebDAV-synced bead `repo/` only? - The "90s-space" Naimark/Debevec writeup — does a bead hold it, or should we write the note?
## Soft-constraint frame (do not lose) Every pose = current min of a collective error surface. View-match, each UV↔geopoint pin, and the rough 2D placement are all **soft constraints** with weights; the solve relaxes toward least-action coherence; later calibrators reweight. (= bundle adjustment / factor graph; cf. `#nuke-geo-camera`.)