地中海别墅 · seed 0
mediterranean_villa · 3 房间 · 6,836 方块

Experiment 20260925T110041 · Codex · xhigh
Hearthwright:用轻量 Python 描述体量、楼层、连接、屋顶和场地,让同一份 library 完成规划、建造、验证与导出。
这次输入来自 runs/exp8 的八种建筑。目标是可组合的建筑语言:新房子由新客户端表达,用户控制 seed,库承担几何与约束。

交付了可组合的共享库。13 个库模块共 2,535 行 Python,13 个示例客户端的目录共 344 行(包含空初始化文件)。Design / Volume / Level / Join / Roof / Site 表达建筑意图;代码中没有按八种建筑名称分派的 library API。名称选择仅发生在用户选择运行哪个示例文件时。
结构覆盖比单一 lodge 更广。浅坡瓦屋顶、树根外壳、水上桩基、内缩底层与悬挑楼层、三翼庭院均有实际样本。八个参考客户端之外,还有运河药剂师住宅、林间书库、果园住宅、山坡工作室、三翼庭院五个新组合。
seed 不等于建筑种类。每个客户端测试 64 个 seed,实际观察到 8–45 个几何签名。26 个保存样本的签名均不同,只说明这批样本没有按该口径重复。没有估算整个组合空间。
浏览器迁移暴露了确定性边界。26 份样本结构签名全部一致,但 17 份吊灯位置随 Python 平台变化。报告保留原程序,并在第 12 节给出逐格比较证据。
测试通过说明实现通过了已有规则与有限样本检查;审美、对参考分布的覆盖程度,以及所有新组合是否成立,仍需分别判断。下方保留参考图、所有样本与剖切,便于直接比较。
点击“探索整个 distribution”,跨八份参考及五个新组合探索:以 13 份声明为先验,进一步采样体量尺寸、层数、侧翼增删与连接、屋顶、分区和场地。候选通过验证后才展示。这是有界、受约束的采样,不代表对所有可表达建筑的均匀或穷尽覆盖。
Python 在浏览器的 Web Worker 中运行。编辑下面的 DESIGN,或加载一个轻量客户端;再调整 seed 和可选参数,点击执行。首次运行需下载 Python 与 NumPy,后续复用运行时。生成成功后可旋转、缩放、剖切,并下载完整建筑。
示例的建筑声明来自原始客户端,载入时移除 CLI 入口,可直接改、增删体量。下方调用负责生成。示例代码的选择不限制 library 能表达的建筑。
运行一次后可选其它体量。空值保留代码中的固定值或 Choice / Span。
例如小体量可能容不下楼梯,hip 与 dormer 也有约束。失败时查看诊断,修改声明或清除覆盖。
探索会重新采样建筑方案与结构,成功后替换编辑器内容并更新参数控件;未勾选时也会随机换 seed。
已载入架空庄园客户端。点击执行,开始真实 Python 生成。
ZIP 包含 building.litematic、验证所需的 building.json 和本次客户端。剖切只影响显示。容器物品写入 NBT;3D 预览不显示库存内容。
尚未执行。
Prompt:proc-8。输入为每种 exp8 建筑各一份最终生成代码和原始参考图,共 8 份代码、8 张图。与前次 proc-lodge 实验 的 ref-1–8 是不同输入集合。
任务要求共享生成与验证库、用户代码高层且轻量、用户控制 seed、注重结构布局多样性;库可以很大,程序长度不是优化目标。明确拒绝建筑家族选择器、参考名称分派与八个隐藏整屋预设。
16 份输入与任务快照逐字节比对一致。历史生成代码用于参考,不能当作正确性标准。参考来源与哈希。
| 记录 | 值 |
|---|---|
| 运行目录 | runs/standard/proc-8/20260925T110041 |
| 模型 / reasoning effort / toolset | gpt-6-astra / xhigh / standard |
| Agent 时间 | 5,038 秒,83 分 58 秒;不含后续独立评分耗时 |
| 请求 / shell 命令 | 110 / 125 |
| 输入 Token(含缓存) | 15,281,964 |
| 缓存输入 / 非缓存输入 | 14,727,168 / 554,796 |
| 输出 Token(含推理) | 146,809,其中 reasoning 58,242 |
| 累计总 Token | 15,428,773;重复上下文在每次请求中累计,不能当成独有源码或新内容 |
| 进程 / 评分 | agent exit 0;harness passed;schematic_valid true;受保护工具栈无修改 |
| 默认产物 | seed 20260925;38 × 35 × 36;6,493 个非空气方块;51 种方块名 |
以上来自 harness report 与 session usage。此次报告没有再次运行模型。
| 层次 | 实现 | 职责 |
|---|---|---|
| 建筑声明 | api.py | 不可变 dataclass,Choice / Span,命名体量、房间功能、屋顶、场地 |
| 规划 | plan.py | 解析 seed;过滤局部不可行选项;有界回溯;体量连接与占地分配 |
| 几何编译 | build.py / roofs.py / site.py | 地形、外壳、屋顶、分区、交通、开口、附属空间、室外道路 |
| 可达与家具 | navigation.py / furnish.py | 预留通道、房间通行、按尺度布置家具、库存、灯具与植物 |
| 方块与输送 | blocks.py | 合法状态、稀疏网格、MCIO 导出、NBT、设计 sidecar、语义读回 |
| 公共验证 | validate.py | 检查实际方块与设计元数据;诊断规则、组件和坐标 |
| 扩展接口 | components.py | 注册共享场地组件与额外验证规则 |
构造次序保护了交通空间:先规划和建立外壳、楼梯、门及道路,再保留通道、摆放家具和植物。Building.export() 调用验证;Building.load() 可将导出文件及相邻 JSON 恢复为可检查对象。
三翼庭院是一个可读的抽象测试:下面全部代码只有建筑声明,没有放方块循环、几何补丁或专属验证器。
扩展也有边界:屋顶公开词汇目前只有 gable / hip;新屋顶算法仍需接入规划与几何模块。SiteComponent 可注册新的场地能力,不能据此宣称所有建筑机制都已经插件化。
存档审计覆盖 13 个客户端 × seed 0–63,共 832 次生成。下图比较实际记录的规划签名和放置几何签名。每个柱子都来自有限样本,没有外推设计空间总数。
| 客户端 | 规划签名 | 几何签名 | 生成次数 |
|---|---|---|---|
| 运河药剂师住宅 | 8 | 8 | 64 |
| 三翼庭院 | 16 | 16 | 64 |
| 山坡工作室 | 31 | 31 | 64 |
| 地中海别墅 | 45 | 31 | 64 |
| 商人庄园 | 45 | 45 | 64 |
| 果园住宅 | 45 | 24 | 64 |
| 红顶农庄 | 31 | 16 | 64 |
| 树根住宅 | 38 | 38 | 64 |
| 砂岩小屋 | 31 | 31 | 64 |
| 水上高脚小屋 | 16 | 8 | 64 |
| 架空庄园 | 31 | 31 | 64 |
| 石砌小屋 | 8 | 8 | 64 |
| 林间书库 | 45 | 31 | 64 |
几何指标的具体口径:Compiler.geometry_signature() 在家具和植物之前取样,在各体量外扩两格的范围内、底层地面以上,记录 solid / glass / stair / slab / door / ladder 等角色以及部分朝向、半部属性,然后哈希。材质颜色被归并,因此比文件哈希更接近结构差异。
仍不是完整的建筑种类判定器。它可能漏掉较远的场地特征、某些树根或外部设施;没有完整的旋转等价归并,也不能度量两个结构“有多不同”。13 个客户端的这些计数不能直接相加作为全局去重结果。
审美上的观察:别墅和三翼庭院的体量、屋顶、附属空间关系可辨;树根住宅形成了独立于普通矩形房屋的外壳。但多个常规建筑仍共享相似的直线体量、山墙和立面节奏。屋顶词汇、分区形式与有限示例域仍限制了变化。增大 seed 数本身不会消除这些限制。
每个客户端保存 seed 0 与 1,均记录声明、解析参数、生成检查和读回检查。下载全部样本和元数据 · 完整 manifest。
| 客户端 | Seed | XYZ | 方块 | 房间 | 几何签名 | 下载 |
|---|---|---|---|---|---|---|
| 地中海别墅 | 0 | 49 × 19 × 41 | 6836 | 3 | 66e0227542e6 | 建筑 · 元数据 |
| 地中海别墅 | 1 | 45 × 18 × 39 | 5792 | 4 | e64bfdb1f1dc | 建筑 · 元数据 |
| 商人庄园 | 0 | 38 × 32 × 54 | 9061 | 6 | 2f08452acf1c | 建筑 · 元数据 |
| 商人庄园 | 1 | 36 × 32 × 52 | 8166 | 7 | 2416f16bd3a7 | 建筑 · 元数据 |
| 红顶农庄 | 0 | 53 × 33 × 34 | 6127 | 2 | 91edcba3c3ce | 建筑 · 元数据 |
| 红顶农庄 | 1 | 51 × 28 × 32 | 5204 | 3 | 36c7a0441237 | 建筑 · 元数据 |
| 树根住宅 | 0 | 37 × 25 × 45 | 7022 | 2 | 5e1a449c0244 | 建筑 · 元数据 |
| 树根住宅 | 1 | 33 × 25 × 40 | 5314 | 2 | 087898ff2dd4 | 建筑 · 元数据 |
| 砂岩小屋 | 0 | 43 × 20 × 41 | 9181 | 3 | 2631cabf77df | 建筑 · 元数据 |
| 砂岩小屋 | 1 | 41 × 20 × 39 | 8034 | 4 | 129a2da964f4 | 建筑 · 元数据 |
| 水上高脚小屋 | 0 | 35 × 17 × 37 | 4888 | 1 | f97c061878dd | 建筑 · 元数据 |
| 水上高脚小屋 | 1 | 33 × 17 × 34 | 4071 | 1 | 126f5ba4f824 | 建筑 · 元数据 |
| 架空庄园 | 0 | 38 × 41 × 38 | 7375 | 4 | 58e319651c41 | 建筑 · 元数据 |
| 架空庄园 | 1 | 36 × 39 × 36 | 6312 | 4 | 985715021f11 | 建筑 · 元数据 |
| 石砌小屋 | 0 | 23 × 19 × 28 | 2216 | 2 | 014895e58bf8 | 建筑 · 元数据 |
| 石砌小屋 | 1 | 21 × 18 × 26 | 1711 | 2 | e92f81eddb39 | 建筑 · 元数据 |
| 运河药剂师住宅 | 0 | 47 × 18 × 39 | 7135 | 2 | cffa054020ca | 建筑 · 元数据 |
| 运河药剂师住宅 | 1 | 45 × 18 × 39 | 6671 | 2 | dd100a10d40c | 建筑 · 元数据 |
| 林间书库 | 0 | 37 × 22 × 40 | 5008 | 3 | 7c1a6ead7f28 | 建筑 · 元数据 |
| 林间书库 | 1 | 35 × 22 × 38 | 4467 | 3 | 1a2b5b888c45 | 建筑 · 元数据 |
| 果园住宅 | 0 | 43 × 20 × 37 | 4866 | 2 | a9a02750037d | 建筑 · 元数据 |
| 果园住宅 | 1 | 41 × 17 × 39 | 4780 | 1 | caaef198a647 | 建筑 · 元数据 |
| 山坡工作室 | 0 | 43 × 17 × 40 | 5443 | 2 | 62bfdf0cf48e | 建筑 · 元数据 |
| 山坡工作室 | 1 | 41 × 19 × 38 | 4934 | 2 | cb3a1b79a689 | 建筑 · 元数据 |
| 三翼庭院 | 0 | 37 × 18 × 37 | 6683 | 5 | 6f509fd9e90e | 建筑 · 元数据 |
| 三翼庭院 | 1 | 35 × 18 × 35 | 5854 | 5 | 68bc1de1bd7d | 建筑 · 元数据 |
26 份样本共 103 张视图,另有默认产物的 4 张视图。每份样本都提供背面与各占用楼层的剖切。剖切中的开口来自展示裁切,不代表导出建筑缺墙。
mediterranean_villa · 3 房间 · 6,836 方块

mediterranean_villa · 4 房间 · 5,792 方块

merchant_manor · 6 房间 · 9,061 方块

merchant_manor · 7 房间 · 8,166 方块

red_roof_farmstead · 2 房间 · 6,127 方块

red_roof_farmstead · 3 房间 · 5,204 方块

root_house · 2 房间 · 7,022 方块

root_house · 2 房间 · 5,314 方块

sandstone_cottage · 3 房间 · 9,181 方块

sandstone_cottage · 4 房间 · 8,034 方块

stilt_water_cabin · 1 房间 · 4,888 方块

stilt_water_cabin · 1 房间 · 4,071 方块

stilted_manor · 4 房间 · 7,375 方块

stilted_manor · 4 房间 · 6,312 方块

stone_cottage · 2 房间 · 2,216 方块

stone_cottage · 2 房间 · 1,711 方块

canal_apothecary · 2 房间 · 7,135 方块

canal_apothecary · 2 房间 · 6,671 方块

woodland_archive · 3 房间 · 5,008 方块

woodland_archive · 3 房间 · 4,467 方块

orchard_house · 2 房间 · 4,866 方块

orchard_house · 1 房间 · 4,780 方块

hillside_studio · 2 房间 · 5,443 方块

hillside_studio · 2 房间 · 4,934 方块

courtyard_house · 5 房间 · 6,683 方块

courtyard_house · 5 房间 · 5,854 方块

独立 harness 在 agent 结束后运行测试:225 passed in 42.30s。agent 存档测试耗时为 42.75 秒,两次结果一致,耗时不同。
| 证据 | 覆盖 | 不能推出 |
|---|---|---|
| 公共 API / corpus | 13 个客户端、固定 seed、signed 64-bit 两端、四层、最大占地与坡度等边界 | 任意未来组合均可生成 |
| 破坏测试 | 楼梯朝向/净空、门与床双半部、桩基、梯背、玻璃、屋顶、灯光、家具、库存、独立不可达区域 | 所有 Minecraft 运行时规则完整模拟 |
| 832 次审计 | 13 个客户端各 64 seed,存档 failures 为空 | 不同 seed 必然是不同建筑;每个参数组合都满足审美 |
| 26 次样本保存/读取 | 完整非空气坐标集合与状态语义;导出后再次几何验证 | 仅凭字符串完全相同就等于语义正确 |
方块状态比较使用解析后的名字与属性映射;仅忽略属性顺序,名称、属性值或显式属性集合变化仍失败。覆盖同一格不是错误本身。这里的检查修复与先前 ref8 的 changed on reload 问题一致。
验证依赖设计 JSON 里的房间、通道和意图,所以元数据随建筑一起下载。没有模拟完整游戏物理、精确光照传播和红石。生成侧提供的意图也可能有遗漏;通过规则不是独立审美认证。832 次审计为原 agent 产物记录,本报告未重新执行该审计。
125 条命令中有 4 条记录了非零退出码。日志尾部与后续检查给出三个明确问题,最终测试和审计通过:
| 证据位置 | 现象 | 最终代码 / 后续证据 |
|---|---|---|
| #041 | 扩大家具后出现 furnishing.changed,13 项测试失败,家具被覆盖 | 家具保护与放置逻辑继续修订;最终家具破坏测试与 corpus 通过 |
| #058–062 | 新增入口照明检查后出现 lighting.approach;测试 31 项失败,审计退出 1 | 最终构造管线显式执行 approach_lighting,完整审计 failures 为空 |
| #110–115 | 树根住宅外侧平台没有接到可通行地形,3 项 reachability.terrain 失败 | 入口通路需越过真实土丘与根系;后续重生成、测试通过 |
以下是归档的命令及输出尾部,不是完整终端逐字记录。某些输出被重定向到文件;exit 0 也不代表输出里没有失败。时间戳与命令编号可定位修复上下文。
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
日志保留的输出末尾
库代码 2,535 行,示例目录 344 行,测试目录 437 行,辅助脚本 154 行;另有默认客户端和渲染脚本。按交付源码统计实际行数,不用行数衡量建筑质量。
输入的八份 references/*/generate.py 保持原样,属于参考资料。harness 的通用代码统计把部分参考文件标为 edited;报告没有把它们算作本次新写的 library。浏览器桥接、控件和本报告由报告阶段添加,不归因给实验 agent。
本轮页面更新新增 分布探索客户端:采样器从原始声明提案,并调用原 library 生成。最多尝试 16 个候选,耗尽时显示诊断;成功后回填独立 Python 声明。此功能由报告阶段添加,不归因给原实验 agent。新增检查覆盖 54 个 seed、全部 13 个起点;另有 13 次浏览器探索、控件回填和独立客户端重放检查。探索验证 · 浏览器记录。结构控件作用于新声明,导出的客户端不依赖网页采样器。
Pyodide 0.27.7 + Web Worker 执行全部 13 个原始 Hearthwright 模块,并加载实验镜像的 MCIO 与 Deprecated 源码。每份运行时文件在加载时检查 SHA-256。生成、验证、MCIO 导出与读回走原库;bridge 负责运行客户端、组织预览方块和下载包。
浏览器 NumPy 2.0.2、tqdm 4.66.2、wrapt 1.16.0 来自该 Pyodide 版本,与容器依赖版本不同,因此下面单独验证兼容性。Pyodide 包加载文档 · 运行时源码哈希 · 浏览器桥接源码。
| 浏览器实测 | 结果 |
|---|---|
| 13 客户端 × 2 seed | 26/26 浏览器生成、完整几何验证与 MCIO 读回验证通过 |
| 与存档的结构对比 | 26/26 规划签名及几何签名相同 |
| 与存档的逐格对比 | 9/26 完全相同;17/26 仅吊灯位置不同,共 50 个坐标 |
| 容器 NBT | 26/26 完全相同,包含库存物品 |
| 结构控件与 Python 编辑 | 宽度控件改变结构;新的双体量客户端成功生成 |
| 确定性 | 同一浏览器、相同输入重复生成的 schematic 字节相同 |
| Seed 边界 | signed 64-bit 两端可运行,超出范围被拒绝;下载 JSON 保留精度 |
| 异常与停止 | 无效屋顶组合返回诊断;停止无限循环后能恢复生成 |
| 下载 | ZIP 包含建筑、验证 JSON 和可运行客户端 |
| 桌面与手机 | 1440px 与 375px 已查看;手机无横向溢出;剖切不改导出 |
| 本机 Python 总耗时 | 26 份样本约 0.24–1.54 秒/份,不含首次加载与 3D 网格 |
| JavaScript 错误 | 交互检查期间未捕获 pageerror;渲染器有已知 builtin/entity 模型警告 |
跨平台细节差异:26 份浏览器结果的规划与几何签名、容器 block entity NBT 均与存档一致。9 份逐格一致,17 份只在吊灯位置有差异,共涉及 50 个方块坐标(移走与新增分别计数);元数据差异仅为 lights。不能声称浏览器完整建筑与存档逐格相同。
对应代码在 furnish.py 中对一个坐标集合按到房间锚点的距离排序,未给等距候选设置坐标作为第二排序键。浏览器 Python 的 hash width 是 32 位,容器是 64 位;这为候选次序变化提供了具体原因。建议将排序键改成距离加坐标元组,再分别验证两种平台。本报告保留原实验代码,未静默修正这一问题。逐样本对比结果。
Seed 以字符串跨越 JavaScript 边界,避免 64 位整数精度损失。停止按钮终止 Worker;失败后保留上一份成功预览。编辑器内容只在点击执行时运行。页面依赖首次下载运行时和本站 Minecraft 材质资源;不是离线安装包。
归档:harness report · usage · commands · 832 次审计 · 测试输出 · 报告统计。
在原实验环境中运行以下命令。离开容器后需安装 MCIO / NumPy 等依赖,并按 GENERATOR.md 设置 MCIO_ROOT 与 MINECRAFT_STATES。网页生成包里的客户端同样依赖该 library。
报告日期:2026-09-25。静态报告及在线执行器遵循 Claude html-report / BrowneUI。保留实验产物,未修改原始生成程序。