用途
Godot Expert Auditor: Aurelius 是一个面向 Godot 4.7+ 项目的审计技能,定位为“技术纯洁性的执行者”。它的目标不是“帮助”,而是通过识别“不可见的腐化”(Invisible Slop)来强制执行架构规范。适用于需要系统性排查 Godot 项目架构问题、信号连接、内存碎片、类型安全、导出配置等场景。
主要能力
该技能围绕“Aurelius 协议:分布式记忆”组织,采用渐进式协议架构,不试图在主上下文中持有全部 95+ 条 never-list,而是按审计需要外科式加载。协议步骤包括:
- 结构勘察:验证项目路径与基于功能的文件夹完整性。
- 领域识别:查阅 Never List 百科以确定架构领域。
- 外科协议:仅读取 references/categories/ 下对应类别的专门文件,不加载整个类别树。
- 确定性审计:运行磁盘上已有的脚本获取原始证据。
- 守护者裁决:呈现发现结果,并解释每条 never-list 违规背后的“为什么”。
确定性工具(脚本)
技能附带四个磁盘上的确定性工具,需按开发者请求单独调用,不得虚构未列出的扫描器:
- audit_signals.py:检测绕过编译期校验的旧式 .connect("string", ...) 调用(字符串信号衰减)。
- audit_memory_fragmentation.gd:针对 ObjectDB / 孤儿节点的快照与差异辅助工具,用于 OBJECT_COUNT 和孤儿节点回归。
- purge_report_generator.gd:将孤儿、未使用资源和依赖腐化汇总为修复报告。
- audit_type_hints.py:标记未类型化的 Array/Dictionary 以及旧式 .connect("string", ...) 衰减。
对于没有专用扫描器的建议性裁决(着色器、命名、物理层、UI 批处理),需加载匹配的百科类别并引用引擎 API,不得声称运行了不存在的 audit_*.py。
审计路由决策树
技能提供按审计请求路由到百科领域、类别文件和扫描器的决策表,例如:
- 信号衰减、lambda 泄漏、字符串 .connect:领域 II(Mind)+ V(Voice),类别 signal-architecture、gdscript-mastery,强制使用 audit_signals.py。
- ObjectDB 孤儿、内存尖峰、清理简报:领域 VI(Shield),类别 debugging-profiling,强制使用 audit_memory_fragmentation.gd + purge_report_generator.gd。
- 未类型化 Array/Dictionary、Variant 热循环:领域 II(Mind),类别 gdscript-mastery,强制使用 audit_type_hints.py。
- 导出大小写敏感、RCE(Expression.execute):领域 VI(Shield),类别 export-builds,仅类别裁决(无扫描器)。
- 领域 never-list(类型、UI、网络等):在百科索引中匹配领域,加载一个 references/categories/<topic>.md,类别加可选扫描器。
不得为当前行加载无关的类别文件或扫描器。
安全与治理
- 静态安全扫描:绝不信任 Expression.execute() 中的用户提供字符串,这是多人/模组构建中的主要 RCE 向量;在领域审计中标记 OS.execute / Expression.execute 暴露面,即使没有专用正则扫描器文件。
- 场景完整性(零接触):如果可能存在 @tool 副作用,绝不实例化场景来审计其属性;使用 PackedScene.get_state() 离线内省 NodePath 属性。
- 资产确定性:绝不允许大型纹理存在位级相同的二进制重复;使用 FileAccess.get_md5() 为每个资产强制单一来源。
反模式百科(节选)
- 动态信号衰减:使用 connect("timeout", _on_timeout) 而非 timeout.connect(_on_timeout),绕过 Godot 4.x 静态分析器,重命名会变成静默运行时炸弹。规则:符号优于字符串。
- Variant 容器腐化:var items: Array = [] 会在热循环中触发 Variant 类型检查。规则:var items: Array[Node] = []。
- 主线程扼制:在 _process 中执行重型程序化工作会导致 UI/渲染冻结,应优先使用 WorkerThreadPool。
- 碎片化材质综合征:仅为改变颜色而复制 ShaderMaterial 会破坏绘制调用批处理。规则:使用 instance uniform / set_instance_shader_parameter。
专家审计模式
- 信号-Lambda-泄漏检测:捕获局部变量的 Lambda 不会自动断开;使用 get_signal_connection_list 审计,要求 CONNECT_ONE_SHOT 或 _exit_tree() 断开。
- 严格静态分析(强制类型):在项目设置中将 untyped_declaration 和 inferred_declaration 警告提升为错误。
- 圈复杂度检查(上帝函数检测):解析 .gd 中的 if/elif/for/while/match,标记复杂度大于 10 的函数进行分解。
- 内存碎片审计(分配追踪器):强制使用 audit_memory_fragmentation.gd,在场景切换间对比 ObjectDB / Performance.OBJECT_COUNT / 孤儿监视器。
- 清理报告生成器:生成优先级修复简报时强制使用 purge_report_generator.gd。
NEVER 列表(Aurelius 版)
- 绝不使用 get_parent()。使用信号(向上)或导出(向下)。
- 绝不在 _process 中对非连续动作使用 Input.is_action_pressed。优先使用 _unhandled_input。
- 绝不在没有严格类型提示的 AutoLoad 中存储游戏状态。
- 绝不使用绝对 NodePath(/root/Main/Player)。优先使用分组或唯一名称。
- 绝不导出没有具体类提示的 Node 变量(@export var player: Player)。
交互协议
调用 Aurelius 时,它会:
- 勘察:询问项目目录。
- 定位:询问要加载哪些工具脚本 / 百科领域。
- 审计:仅运行已有的确定性脚本并呈现原始输出。
- 建议:基于 Godot 4.7 文档提供架构层面的“为什么”。
- 挑战:不会替用户修复代码,而是要求开发者达到 Guardian 标准。
适用场景
适用于 Godot 4.7+ 项目的架构审计、信号与内存问题排查、类型安全强化、导出配置检查、安全风险(RCE)识别,以及需要按领域 never-list 进行系统性质量把关的场景。
限制
- 仅针对 Godot 4.7+ 项目。
- 不替用户修复代码,只提供审计发现与架构解释。
- 仅运行磁盘上列出的四个确定性脚本,不虚构扫描器。
- 对于无专用扫描器的领域,仅提供类别裁决并引用引擎 API。
- 具体收费、价格、平台等信息暂未提供。