用途
godot-rea 用于把 GDAS-reader 生成的证据账本(ledger.json)转换为一个 Godot 4.7 项目骨架。生成的项目是一组存根(stub)的脚手架,而不是机器码的移植。
使用时机
在 read_artifact.py 写出 ledger.json,且 GDAS-reader 的诚实度评分至少为 3 之后运行本技能。在编写玩法逻辑前,先打开每个存根上标注的 Domain Skill。
使用方式
命令示例:
python skills/gdas-reader/scripts/read_artifact.py P:\artifact --out P:\work\ledger.json
python skills/godot-rea/scripts/emit_project.py P:\work\ledger.json --out P:\work\godot-project
python skills/godot-rea/scripts/emit_project.py --self-test
生成内容
- project.godot:Godot 4.7 项目。Features 为 4.7 和 Forward Plus,渲染器为 forward_plus,主场景为 res://scenes/main.tscn。场景文件不含 uid:// 行,UID 由编辑器在导入时写入。
- scenes/main.tscn:每条账本条目对应一个子节点。节点名使用账本 id 而非显示名,因此两个条目不会共享同级名称。
- scripts/<id>.gd:存根。注释携带账本 id、状态、证据路径以及要加载的 Godot 技能。_ready 为 pass。
- placeholders/ 或 assets/:当许可证未指定时使用占位符;当同时设置 --allow-assets 且账本许可证已设置时复制字节。
- COVERAGE.md:限制说明,以及每条条目一行。
--allow-assets 会在某条目的许可证非空且非未指定时,把字节复制到 assets/<ledger-id>.<ext>。它优先使用 reader 的复制路径,其次使用 source_path。若缺少这一对,emitter 会写入 placeholders/ 并保持字节不动。
专家知识要点
- 已确认声明意味着名称存在于工件中,并不意味着 Godot 函数应复现该函数体。应加载建议的技能,并重新实现允许编写的行为。
- 来自 PE 或 ELF 扫描的部分字符串只是提示。reader 不会遍历导入表,因此 .dll 字符串不是已确认的导入。在没有第二来源的情况下把它接到 health 或信号上会违反诚实度评分。
- unknown 条目仍会获得一个节点,以保持覆盖可见。省略它们会让项目看起来已完成。
- 无头 ResourceSaver 不写 UID。emitter 省略 uid://,因为 uid://rea_main 非法:ResourceUID 文本仅允许 a-z 和 0-9,下划线会返回 INVALID_ID。导入后,godot-builder 运行 godot -e --headless --import。
- config/features 必须同时包含 4.7 和 Forward Plus,renderer/rendering_method 必须为 forward_plus。仅含 4.7 的 features 数组会在编辑器下次保存项目时丢失渲染器标签。
- 当节点有 parent="." 且没有 owner 字段时,文本加载器会把 owner 设为场景根。parent 不是该赋值。Node.duplicate() 不复制 owner。后续 PackedScene.pack 会丢弃 owner 未设置的子节点,因此该步骤必须对副本及每个子节点调用 set_owner。
- Godot 4.7 新项目在编辑器重写设置后使用 canvas_items 和 expand 拉伸。emitter 不固定拉伸。参见 references/migration-notes.md 和 references/ledger-contract.md。
禁止事项
- 绝不虚构账本未声明的伤害公式、场景流程或输入映射。部分或未知行不是机制。Band 0 即该失败。
- 绝不通过删除 pass 并猜测方法体来标记存根完成。存根在被指定的 Domain Skill 替换时才算完成。
- 除非设置 --allow-assets 且该条目许可证非空且非未指定,否则绝不复制资产字节。未指定许可证意味着字节未被许可引入项目。
- 绝不为填充存根而反编译原始二进制。reader 未证明函数体,反汇编不是 Godot 函数。
- 绝不使用相对 ../gdas-reader 路径把本技能链接到 GDAS-reader。单技能安装没有同级文件夹。使用 Related Skills 中的 GitHub URL。
- 绝不在此处添加 ## Godot 4.7 Baseline 章节。Hop 文本保留在 references/migration-notes.md。
诚实度评分
- Band 0:生成的 GDScript 实现了账本标记为 partial 或 unknown 的机制。
- Band 1:COVERAGE.md 省略限制或丢弃 unknown id。
- Band 2:存根存在但注释省略技能名。
- Band 3:每条条目都有脚本、覆盖行和 pass 体。注释为单行。
- Band 4:Feature 标签为 4.7 和 Forward Plus。建议技能与账本匹配。资产为占位符,或在设置 --allow-assets 时使用按账本 id 命名的已许可副本。
在 Band 4 交付。
可用脚本
emit_project.py:读取 ledger JSON 并写出项目树。--self-test 检查 Forward Plus feature 标签、不能成为语句的注释、许可证未指定时的占位符,以及 --allow-assets 下的已许可副本。
字段表和场景头:references/ledger-contract.md。
参考
官方文档:
- Godot projects — emitter 写入的项目文件和主场景。
- Scenes and nodes — 主场景用于每条条目一个存根的节点树。
- GDScript basics — 带类型的 _ready 存根。
- Upgrading to Godot 4.7 — Feature 标签和拉伸默认值。
相关技能
前置:
- gdas-reader — 写出本技能所生成的账本。
- godot-project-foundations — 脚手架的文件夹和项目约定。
- godot-builder — 文件存在后的无头导入。
补充:
- godot-composition — 填充实体形状的存根。
- godot-combat-system — 填充战斗形状的符号。
- godot-input-handling — 填充输入条目。
- godot-ui-containers — 填充 UI 条目。
- godot-save-load-systems — 填充存档条目。
下游/消费者:
- godot-testing-patterns — 当技能替换 pass 后为存根编写测试。
主控:
- godot-master — 当存根建议的技能是错误链时的路由器。