Builds a larger, richer house than Casa del Sol via MCP save_scene (no injection hack), then dispatches 10 parallel verifiers across schema, geometry, dimensions, openings, HTTP, page render, parentage, round-trip, spatial, visual. Villa Azul — 56 nodes, validate_scene=true, 44KB on disk: - 15x10m building envelope (vs Casa del Sol's 12x8) - 9 interior zones (master bed/bath, bed 2/3, shared bath, living/dining, kitchen, entry hall, corridor) - 10 doors + 12 windows (all cut successfully) - 4 exterior zones (pool 8x4 + basin slab at -2m, outdoor kitchen, driveway, back patio) - 5 rail-style fences (vs Casa del Sol's privacy) with 2m entrance gap Verification: 108 checks, 104 PASS, 4 findings: - V1 schema: 56/56 - V2 geometry: 7/7 (perimeter closes, interior T-junctions, no zone overlaps, fence gap verified) - V3 dimensions: 13/13 zone areas exact (1 spec mismatch on site polygon default, not a build bug) - V4 openings: 22/22 dimensional fit, surfaced a tool gap in cut_opening (no adjacency check) + my build packed too tightly - V5 HTTP: 10/10 (GET/PUT/PATCH/DELETE/HEAD, If-Match conflicts) - V6 page: 14/14 (/scene/:id 81KB, /scenes 20KB, 404 fallback) - V7 parentage: surfaced CROSS_CUTTING §2 site->building->level parentId=null (pre-existing in core's loadScene) - V8 round-trip: 10/10 byte-equal, duplicate_level -> 110 nodes - V9 spatial: 12/12 (find_nodes, measure, constraints resource) - V10 visual: HTML fallback (Chrome extension disconnected during run); API layer intact Follow-up tracked: `cut_opening` should check opening-adjacency on the same wall (minimum gap) to catch tight packing during patch construction. Currently returns success and relies on the UI to visualise the overlap. Live at http://localhost:3002/scene/a6e7919eacbe. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.2 KiB
4.2 KiB
Phase 9 Verifier V4 — Openings
Scene: /tmp/pascal-villa/scenes/a6e7919eacbe.json
Summary
- Doors: 10 (expected 10)
- Windows: 12 (expected 12)
- Total openings: 22 (expected 22)
- Failing openings: 2
Perimeter wall opening counts
| Side | Doors (actual / expected) | Windows (actual / expected) | OK |
|---|---|---|---|
| south | 2 / 3 | 4 / 4 | FAIL |
| north | 1 / 1 | 3 / 3 | OK |
| east | 1 / 1 | 2 / 2 | OK |
| west | 0 / 0 | 2 / 2 | OK |
Every opening
| id | type | wallId | wallT | pos(m) | width | height | wallLen | fits? | overlaps? |
|---|---|---|---|---|---|---|---|---|---|
| door_333ygsrz65ijnrqv | door | wall_qgrnmxmo0go9yy3q | 0.900 | 13.500 | 1.000 | 2.100 | 15.000 | yes | no |
| door_slgjz3fagpyg3sh7 | door | wall_2s65apfvekdglbod | 0.750 | 11.250 | 0.900 | 2.100 | 15.000 | yes | no |
| door_d0nqos4zumc0zezd | door | wall_qgrnmxmo0go9yy3q | 0.400 | 6.000 | 2.400 | 2.200 | 15.000 | yes | no |
| door_ytu570mchm7asqeo | door | wall_vnzffl9uhhp7u7ng | 0.750 | 7.500 | 1.800 | 2.200 | 10.000 | yes | no |
| door_6h6nz21yyfivvnsc | door | wall_sl9ngyohpt1ckxrz | 0.250 | 2.500 | 0.800 | 2.050 | 10.000 | yes | no |
| door_2hx5ztbku9sv2a75 | door | wall_k253bcp3cbmvmksf | 0.500 | 1.500 | 0.700 | 2.000 | 3.000 | yes | no |
| door_ybtwqsbolbr0n0gc | door | wall_m7rg6bf7mucmlh4m | 0.120 | 1.200 | 0.800 | 2.050 | 10.000 | yes | no |
| door_ffn9hxnd7564rkvr | door | wall_m7rg6bf7mucmlh4m | 0.880 | 8.800 | 0.800 | 2.050 | 10.000 | yes | no |
| door_omm6j9olsen5odz2 | door | wall_3gthhmi6v5sli2ac | 0.500 | 1.500 | 0.700 | 2.000 | 3.000 | yes | no |
| door_2dd3s6btlze9qog6 | door | wall_icyfprzyd4034us0 | 0.900 | 9.000 | 0.900 | 2.050 | 10.000 | yes | no |
| window_8nqg3fvdnb13c0sx | window | wall_qgrnmxmo0go9yy3q | 0.150 | 2.250 | 1.400 | 1.500 | 15.000 | yes | no |
| window_rjhwcnymvck1ikhp | window | wall_qgrnmxmo0go9yy3q | 0.650 | 9.750 | 2.000 | 1.500 | 15.000 | yes | YES (window_dv570t2x3vbqmqfm) |
| window_q2h2kv4eu0p45vf7 | window | wall_2s65apfvekdglbod | 0.150 | 2.250 | 1.000 | 1.400 | 15.000 | yes | no |
| window_cpw86mxlf92v2im8 | window | wall_2s65apfvekdglbod | 0.550 | 8.250 | 1.400 | 1.400 | 15.000 | yes | no |
| window_2ticoiwkjwa9jpih | window | wall_ohb57u9y7pegelg9 | 0.200 | 2.000 | 1.000 | 1.400 | 10.000 | yes | no |
| window_v3dz9tgb8bydj5aw | window | wall_ohb57u9y7pegelg9 | 0.750 | 7.500 | 0.800 | 0.900 | 10.000 | yes | no |
| window_02mzjx24oqnwh6o9 | window | wall_vnzffl9uhhp7u7ng | 0.150 | 1.500 | 1.000 | 1.400 | 10.000 | yes | no |
| window_2sf6c99wbb2aq23j | window | wall_vnzffl9uhhp7u7ng | 0.400 | 4.000 | 0.900 | 1.400 | 10.000 | yes | no |
| window_hit0ta8v41a678m3 | window | wall_k253bcp3cbmvmksf | 0.200 | 0.600 | 0.600 | 0.600 | 3.000 | yes | no |
| window_749lw7mkz3cus5mp | window | wall_2s65apfvekdglbod | 0.350 | 5.250 | 0.800 | 0.700 | 15.000 | yes | no |
| window_alqegags8luirc9g | window | wall_qgrnmxmo0go9yy3q | 0.220 | 3.300 | 1.200 | 1.500 | 15.000 | yes | YES (window_8nqg3fvdnb13c0sx) |
| window_dv570t2x3vbqmqfm | window | wall_qgrnmxmo0go9yy3q | 0.550 | 8.250 | 1.400 | 1.500 | 15.000 | yes | no |
Failing openings
- window_rjhwcnymvck1ikhp on wall_qgrnmxmo0go9yy3q: width=2.000 height=1.500 wallT=0.650 pos=9.750 wallLen=15.000 wallH=2.800 thk=0.220 minPos=1.000 maxPos=14.000 fitsW=true fitsH=true fitsPos=true overlap=true
- window_alqegags8luirc9g on wall_qgrnmxmo0go9yy3q: width=1.200 height=1.500 wallT=0.220 pos=3.300 wallLen=15.000 wallH=2.800 thk=0.220 minPos=0.600 maxPos=14.400 fitsW=true fitsH=true fitsPos=true overlap=true
Findings
- All 22 openings have width and height that fit within their wall dimensions (no width/height/position-range failures).
- 2 opening(s) violate the 0.2 m minimum gap with a neighbour on the same wall.
- south wall (wall_qgrnmxmo0go9yy3q, 15 m) is crowded with 6 openings (2 doors + 4 windows); overlap cluster around bed-corridor-window / living-patio / living-s-window / living-s-2.
- south wall opening count (2 doors + 4 windows) does not match design (3 doors + 4 windows); build.ts only placed front-door and living-patio on south — a third south door is missing.