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:
co-authored by
Claude Opus 4.7
parent
0b84e7b7b1
commit
f230d9a401
@@ -0,0 +1,66 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user