test(mcp): Villa Azul + 10-agent deep verification

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>
This commit is contained in:
Adrian Perez
2026-04-19 20:39:08 +02:00
co-authored by Claude Opus 4.7
parent 0b84e7b7b1
commit f230d9a401
22 changed files with 4134 additions and 0 deletions
@@ -0,0 +1,63 @@
# V6 — Next.js Page Render Verification
- Scene ID: `a6e7919eacbe`
- Base URL: `http://localhost:3002`
- Generated: 2026-04-19T18:34:29.221Z
- Overall: PASS (14/14)
## Request summary
| Path | Status | Bytes | Time (ms) |
|---|---|---|---|
| `/scene/a6e7919eacbe` | 200 | 81737 | 58.3 |
| `/scene/nope` | 200 | 31713 | 23.8 |
| `/scenes` | 200 | 20022 | 20.9 |
## Checks
| Result | Check | Detail |
|---|---|---|
| PASS | scene: 200 status | got 200 |
| PASS | scene: HTML >= 10 KB | 81737 bytes |
| PASS | scene: contains 'SceneLoader' | |
| PASS | scene: contains sceneId 'a6e7919eacbe' | |
| PASS | scene: contains 'Villa Azul' | |
| PASS | scene: references editor or viewer chunks | editor=true viewer=true |
| PASS | scene: no obvious error strings | clean |
| PASS | nope: 404 or Scene-not-found page | status=200 hasFallback=true |
| PASS | nope: does NOT initialize SceneLoader | not found |
| PASS | nope: does NOT contain Villa Azul | |
| PASS | scenes: 200 status | got 200 |
| PASS | scenes: contains link /scene/a6e7919eacbe | |
| PASS | scenes: contains 'Villa Azul' | |
| PASS | scenes: >=1 <a href="/scene/..."> link | count=1 |
## Strings-found snapshot
### `/scene/a6e7919eacbe`
- SceneLoader present: true
- sceneId 'a6e7919eacbe' present: true
- 'Villa Azul' present: true
- editor chunk reference: true
- viewer chunk reference: true
- error strings found: none
### `/scene/nope`
- status: 200
- 'Scene not found' fallback: true
- SceneLoader NOT present: true
- 'Villa Azul' NOT present: true
### `/scenes`
- '/scene/a6e7919eacbe' link present: true
- 'Villa Azul' present: true
- <a href="/scene/..."> link count: 1
## Response times
- /scene/a6e7919eacbe: 58.3 ms
- /scene/nope: 23.8 ms
- /scenes: 20.9 ms