GPT-5 Codex reconstructed 雪屋.litematic procedurally using MCIO, iterating 8 times over ~75 minutes on 2026-07-07.
Contents
Source: 雪屋.litematic (Version=5, 3,616 non-air blocks). Candidate scored against full 15,840-cell volume via mcx diff.
flowchart TD
A([User: recreate 雪屋.litematic]) --> B[MCX: load source]
B --> C[MCX: inspect size / palette / projections]
C --> D[Python: analyze layer maps]
D --> E[Write snow_house.py with MCIO Sketch API]
E --> F[Run generator → snow_house.litematic]
F --> G{mcx diff}
G -->|errors high| H[Identify worst component]
H --> I[Patch generator rule]
I --> F
G -->|errors stable| J[Save intermediate snapshot]
J --> K([Final: snow_house.litematic ✓])
style A fill:#F2E5DA,stroke:#B39A8F,color:#554037
style K fill:#F2E5DA,stroke:#B39A8F,color:#554037
style G fill:#DBC8B8,stroke:#B39A8F,color:#554037
exec_command calls total; MCX diff ran 9 times.| Iter | Change | Correct ↑ | Wrong Occ ↓ | Wrong State ↓ | Total Err ↓ | Delta |
|---|---|---|---|---|---|---|
| 0 | First procedural generator | 12,071 | 2,690 | 1,079 | 3,769 | baseline |
| 1 | Stepped front roof rows | 12,218 | 2,566 | 1,056 | 3,622 | −147 |
| 2 | Add broad dense interior fills | 11,961 | 2,406 | 1,473 | 3,879 | +257 regression |
| 3 | Remove broad filler, keep porch | 12,206 | 2,458 | 1,176 | 3,634 | −245 |
| 4 | Remove noisy leaf blobs | 12,355 | 2,382 | 1,103 | 3,485 | −149 |
| 5 | Add upper front facade rows | 12,402 | 2,279 | 1,159 | 3,438 | −47 |
| 6 | Tune farm crop / water / log pattern | 12,491 | 2,263 | 1,086 | 3,349 | −89 |
| 7 | Remove overly broad roof end-caps | 12,564 | 2,270 | 1,006 | 3,276 | −73 |
Total improvement from iter 0 → 7: −493 total errors (−13.1%). Click column headers to sort.
python and apply_patch hit sandbox /dev/.git mount errors → switched to project virtualenv and perl -0pi for narrow edits.5 intermediate snapshots + final. Each saved after the iteration's generator ran.
v0 — First procedural generator. Broad rectangular roof bands, no interior trim. 3,769 total errors.
v0 (iter 0) — 3,769 errors
v1 (iter 1) — 3,622 errors
v2 (iter 3) — 3,634 errors
v1 — Stepped front roof. v2 — Dense interior added then narrowed (regression recovered).
v1 (iter 1) — 3,622 errors
v2 (iter 3) — 3,634 errors
v3 (iter 4-5) — 3,438 errors
v4 / final — Farm tuning + roof end-cap removal. Best score: 3,276 total errors.
v3 (iters 4-5) — 3,438 errors
v4 / final (iters 6-7) — 3,276 errors
Final — 12,564 / 15,840 correct
| Version | Lines ↑ | Functions | AST Nodes | Loops | Assigns | Wrong Total ↓ |
|---|---|---|---|---|---|---|
| v0 — iter 0 | 438 | 19 | 3,993 | 73 | 72 | 3,769 |
| v1 — iter 1 | 493 | 20 | 4,656 | 93 | 79 | 3,622 |
| v2 — iter 3 | 452 | 20 | 4,156 | 82 | 72 | 3,634 |
| v3 — iter 5 | 492 | 21 | 4,476 | 91 | 83 | 3,438 |
| v4 / final | 520 | 21 | 4,702 | 103 | 83 | 3,276 |
AST nodes measured via ast.walk(ast.parse(src)). Loops = ast.For + ast.While nodes. No hard-coded coordinate arrays; all geometry is procedural.
Shell commands
112
exec_command calls total
MCX diff runs
9
Used to score each generator iteration
Plan updates
2
update_plan + update_goal
mcx clear / load / info / print / query / diff / select — schematic inspection and scoringrg — fast text/file search within reposed — inline file inspectiongit status — workspace state checksPYTHONPATH pointing at local MCIOyapf — code formatting after editsperl -0pi — narrow in-place edits when apply_patch failedpwd, ls — workspace orientationThe agent identified a chimney without any label or metadata in the schematic. The inference came entirely from raw block coordinates and material IDs:
minecraft:bricks blocks found via mcx query blocks --id minecraft:bricks in bbox y=13..21, z=13..17, x=9..12 — a vertical protrusion above the roofline.minecraft:campfire) embedded in the same upper brick stack at y=13..19, z=14..17, x=11..12 — commonly used for chimney smoke/fire detail in Minecraft builds.BBB / B.B brick silhouette capped by brick slabs from y=13 up to y=21 — a classic chimney cross-section.No metadata said "chimney." The agent read material, position, shape, and campfire placement together and produced a spatially-grounded label — the same kind of inference a human builder would make. This suggests LLMs can reason about 3D voxel geometry meaningfully when given the right coordinate-indexed representation.
The generator's resulting add_chimney() function targets exactly z=14–17, x=10–12, confirming the inference was precise enough to produce correct structure.
The agent used mcx as an authoritative loader, inspector, and scorer — but wrote custom Python scripts for the diagnostic loop. Why:
mcx diff produces aggregate counts (wrong_occupancy, wrong_blockstate) — enough to score an iteration, but not enough to answer "which layers got worse?" or "which material category dominates the errors?"mcx print output to fold/truncate; a custom script could collapse blockstates into semantic categories (planks, stone_roof, logs, farm, leaves).Equivalent MCX-native analysis would require many mcx select --bbox + mcx diff calls per layer and per component — more verbose and more brittle than one parameterized script over a 22×30×24 array.
The pattern: LLMs gravitate toward ad-hoc scripts when the built-in tool's output granularity doesn't match the diagnostic question being asked. Richer query interfaces (per-layer diff, semantic block grouping) would reduce this gap.
Key material definitions from snow_house.py (55 unique materials, all via MCIO canvas.material() — no hard-coded blockstate strings in placement code).
The agent avoided brute-force coordinate dumps throughout. Every structural element is expressed as loops, formulas, or helper functions — matching the AGENT.md scoring rubric.