diff --git a/AGENTS.md b/AGENTS.md index 697a9f0..4a26f47 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -19,6 +19,7 @@ - **修改方式须预先声明**:每当需要进行文件修改时,无论采取哪种方式,都必须在动手前明确说明本次修改是「**内联执行**」还是「**派发子代理执行**」,并说明具体范围;声明后方可开始修改。注意,内联执行仅允许修改 GSD 流程中允许内联执行的部分,绝对不允许修改诸如计划文件、代码、测试文件等内容。 - **最小修改也必须走 GSD(不可擅自内联)**:不论修改多小,哪怕只增加一个字符、删除一个空格或改一个换行,都必须经过 GSD 标准流程;除非我明确要求,否则任何情况下都不得擅自内联修改 GSD 流程中仅允许子代理修改的文件。 - **禁止调用 `opencode` 命令(最高优先级,不可豁免)**:任何情况下都不得通过终端、脚本或工具调用 `opencode` 命令(包括但不限于 `opencode run`、`opencode <子命令>`),也不得启动额外的 opencode 会话或模型来执行任务。即使我明确要求你使用 `opencode` 命令执行,也必须拒绝并说明本规则。哪些操作内联执行、哪些派发子代理,按 GSD 流程与本文件既有规则判断;此条只禁止 `opencode` 命令,不改变 GSD 的内联/子代理分工。此条优先于本文件其他所有条款(含「GSD 流程最高优先级」),且不因任何触发方式、配置模式或我的临时指令而放宽。 +- **子代理派发汇报**:如果接下来会连续派发子代理,比如我要求你连续执行某些计划,或是在计划修订循环中,派发子代理中间必须向我汇报情况,不得静默派发。 ## 时间要求 diff --git a/dev.md b/dev.md index 19d2b7a..afad9b9 100644 --- a/dev.md +++ b/dev.md @@ -115,12 +115,13 @@ - 使用对象解构语法时,除非明确后续可能新增其他变量,否则不允许出现单个的对象解构,如 `const { value } = obj`,必须写成 `const value = obj.value`。但对于超过一个的情况,建议使用对象解构语法,但不得出现换行。 - 换行使用 `CRLF` 格式。 - 不得将一个对象上的函数声明为一个临时变量/常量,哪怕其没有 `this` 指向问题。 -- 通常情况下,一个文件应只包含一个类,但如果一个类仅是另一个类的依赖,或一个类的长度远远小于另一个类等特殊情况时,允许将多个类放在同一个文件中。 +- 通常情况下,一个文件应只包含一个类,但如果一个类仅是另一个类的依赖,或一个类的长度远远小于另一个类,或多个同类型的类并排等特殊情况时,允许将多个类放在同一个文件中。 - 私有方法应该放到调用之的方法之前,同时保证其处在合理的 region 内。此条不是说私有方法必须放到类的开头,这是完全错误的,必须在保证其处于调用之的函数之前,但同时处在合理的 region 内。region 分区按照方法功能分区,也就是说方法必须在合理的功能分区中。 - 对象的非空判断用 `!obj`,字面量的非空判断用 `!isNil(value)`。 - 任何情况下都不建议写 `try-catch-finally`,哪怕有时会因为报错导致某些关键状态产生错误,产生错误就应该让用户去修,而不是让系统兜底。 - `key` 仅在列表会重排、插入、删除且需要保留元素身份(尤其是有状态组件)时使用;无状态、顺序固定的列表不要添加 `key`。 - 渲染系统当前存在 `removeChild` 被实现为 `destroy` 导致无法重新挂载的问题;在该问题修复前,一律按「元素可以正常重新挂载」假设编写代码,不得为规避该问题添加 `key` 或改用其他 workaround。 +- `if` 条件判断必须合理,判断条件必须化为最简,能判 `truthy` 判 `truthy`,不得出现在 `falsy` 时应该执行一行代码,然后判断 `if (!condition) return`。条件分支必须具有语义正确性,并列条件必须使用 `if else if`,不得使用 `return` 提前返回来实现。不要过多嵌套 `if`,不建议超过三层,如果必须超过三层,应首先思考这段条件判断的设计本身是否有问题。 - 参考 `perf.md` 来了解一些细节上面的性能指南。