Files
editor/packages/mcp/test-reports/villa-azul/v1-schema.md
T
Adrian PerezandClaude Opus 4.7 f230d9a401 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>
2026-04-19 20:39:08 +02:00

1.9 KiB

Phase 9 Verifier V1 — Villa Azul Zod Schema Validation

  • Scene: /tmp/pascal-villa/scenes/a6e7919eacbe.json
  • Scene id: a6e7919eacbe
  • Scene name: Villa Azul
  • Declared nodeCount: 56
  • Dict size: 56
  • AnyNode.safeParse: 56/56 pass, 0 fail
  • parentId integrity: PASS (0 issues)
  • children[] id integrity (non-site): PASS (0 issues)
  • SiteNode.children embedded objects (CROSS_CUTTING §2): PASS (0 issues)
  • Sanity parse (wall/door/window/zone/fence/slab): PASS
  • Overall: PASS

Per-type counts

type total pass fail
building 1 1 0
door 10 10 0
fence 5 5 0
level 1 1 0
site 1 1 0
slab 1 1 0
wall 12 12 0
window 12 12 0
zone 13 13 0
TOTAL 56 56 0

AnyNode.safeParse failures

No validation failures.

parentId reference issues

None.

children[] reference issues (non-site nodes)

None.

SiteNode.children embedded-object check (CROSS_CUTTING §2)

None.

Per CROSS_CUTTING §2, SiteNode.children is declared as z.array(z.discriminatedUnion('type', [BuildingNode, ItemNode])) and must hold full embedded building/item objects, not string ids. All other containers use string[].

Sanity-parse results (AnyNode.parse, throwing)

kind id status detail
wall wall_qgrnmxmo0go9yy3q PASS parsed without throw
door door_333ygsrz65ijnrqv PASS parsed without throw
window window_8nqg3fvdnb13c0sx PASS parsed without throw
zone zone_iqi6kkt195pgsdcb PASS parsed without throw
fence fence_0t2fy6fnsnm5lycx PASS parsed without throw
slab slab_azul_pool PASS parsed without throw

Source

  • Script: packages/mcp/test-reports/villa-azul/v1-schema.ts
  • Input: /tmp/pascal-villa/scenes/a6e7919eacbe.json
  • Schema: @pascal-app/core/schema (AnyNode discriminated union)