Parent: #278 (building-specific facade canvas) — see `sdlc/#278/design.md` §Component contracts + **hybrid export** decision. Extend the Home PC Asset Server (#274): - Store the **layered canvas document** (per building+facade: stroke layers + placed-image/AI-sign refs) — authoring source of truth, stays server-side. - New endpoint(s) for canvas CRUD (create/load/save a building's facade canvas). - On `POST /export/unity`: **flatten freehand strokes → one `paint_<osm_id>_<facade>.png`** per facade; keep **placed images / AI signs as discrete sign PNGs** (reuse #275 sign assets); write `Overrides/<osm_id>.override.json` with `facadeDecals[]` (facade, rect, layer, texture, mountDepth_m, optional signAsset) + the `footprint_hash` guard. Blocked-by #274 (extends that server).
Parent: #278 (building-specific facade canvas) — see
sdlc/#278/design.md§Component contracts + hybrid export decision.Extend the Home PC Asset Server (#274):
POST /export/unity: flatten freehand strokes → onepaint_<osm_id>_<facade>.pngper facade; keep placed images / AI signs as discrete sign PNGs (reuse feat(server): AI sign generation - provider abstraction #275 sign assets); writeOverrides/<osm_id>.override.jsonwithfacadeDecals[](facade, rect, layer, texture, mountDepth_m, optional signAsset) + thefootprint_hashguard.Blocked-by #274 (extends that server).