Skip to content

Latest commit

 

History

History
92 lines (74 loc) · 4.61 KB

File metadata and controls

92 lines (74 loc) · 4.61 KB

AGENTS.md - Codex 工作规范

1. 目标与边界

你是 Codex,在本仓库协助完成开发任务。目标是稳定推进任务并保持改动可验证。

硬性边界:

  • 不修改 Claude Code 体系文件:CLAUDE.md.claude/settings.json.claude/settings.local.json
  • 一次只做一个任务,避免顺手重构
  • 仅修改当前任务直接相关文件,保持最小改动

2. 会话启动流程(必须执行)

开始任何编码工作前,按顺序执行:

  1. 阅读 PLAN.md,确认当前里程碑和阶段
  2. 阅读 TASKS.md,确认待办与优先级
  3. 运行 scripts/preflight.sh,检查前置条件和仓库状态
  4. 明确将执行的单一任务,并等待用户确认后再修改代码

3. 开发执行约束

  • 测试优先:新功能或修复必须补充对应测试
  • 类型安全:避免 dynamicas 强转、! 非空断言
  • 小步提交:每次改动保持可运行、可检查
  • 注释规范:新增/修改的核心逻辑应有清晰中文注释(Dart doc comment)
  • 权限与命令:遵循“最小必要命令”原则;禁止执行破坏性命令(如未授权的删除/重置)

4. 任务收尾流程(必须执行)

完成当前任务后,按顺序执行:

  1. 检查测试完整性(unit / widget / integration)
  2. 清理死代码(含未使用测试代码)
  3. 检查新增或修改代码的注释质量
  4. 默认只运行与本次改动直接相关的检查:
    • flutter analyze <改动相关文件>
    • flutter test <改动相关测试文件>
    • 如改动影响 integration 边界,再运行对应 integration 测试
  5. 仅在发版、大范围重构、跨核心模块改动,或用户明确要求时运行 scripts/check.sh
  6. 更新 TASKS.md(勾选任务并记录完成时间)
  7. 如里程碑状态变化,更新 PLAN.md
  8. 输出完成摘要(任务、改动文件、测试、下一步建议)

5. 输出要求

每次任务完成时,输出至少包含:

  • 实现的任务标题
  • 修改文件列表
  • 执行的测试与结果
  • 是否执行 scripts/check.sh;若未执行,说明原因
  • 用户可直接执行的下一步验证方式

6 Flutter 开发原则

6.1 核心原则

  1. 优先保证结构清晰,不要过度设计。
  2. 按职责拆分,不按页面外观拆分。
  3. 保持单向数据流:UI 触发动作,controller 更新 state,UI 根据 state 渲染。
  4. UI 和业务逻辑分离,widget 不承载复杂业务逻辑。
  5. 优先简单、直接、稳定的方案。

6.2 分层职责

  1. Screen/Page 负责页面组装、路由参数、读取 provider、分发回调。
  2. Widget 负责展示和局部交互,尽量保持纯。
  3. Provider/Notifier 负责状态和业务逻辑。
  4. Repository 负责数据获取和持久化,不负责业务流程编排。
  5. Model 表示业务数据,State 表示界面运行状态。Model 不依赖 State,State 可以包含 Model。

6.3 状态管理

  1. Provider 按功能域拆分,不按组件个数拆分,也不按页面外观拆分。
  2. 状态只在一个 widget 树内使用且不需要跨组件共享时,用局部 state;否则用 provider。
  3. 一份真实状态只能有一个单一来源,避免多处维护同一状态。
  4. 状态变更入口要集中,只能通过明确的方法修改状态。
  5. 复杂流程提取为纯 Dart 类编排(可测试、可复用),Provider 负责连接编排层和 UI。

6.4 Widget 设计

  1. 页面负责组装,组件负责展示。
  2. 不要做万能组件,避免大量 if 和模式开关。参数超过 10 个说明职责太广,应该拆分。
  3. build 方法只描述 UI,不做请求、不改状态、不启动副作用。
  4. 子组件只读取自己关心的状态,避免整页无意义刷新。

6.5 可靠性

  1. 异步操作必须防竞态:启动时记录标识(token/sessionId),回调时校验标识是否仍有效,过期则丢弃。
  2. 谁创建谁销毁。资源的生命周期必须和它的所有者绑定,不能由外部隐式管理。
  3. 副作用(网络请求、文件 IO、平台调用)通过接口或回调注入,不在业务逻辑类中直接调用。
  4. 每个异步调用点都要考虑失败情况。沉默吞掉异常是 bug,应该明确处理或向上传播。
  5. 错误、加载、空状态必须显式设计,不要只写成功态。

6.6 可维护性

  1. 命名优先于技巧,名称必须直接表达职责。
  2. 目录结构优先按 feature 组织,再在 feature 内部分层。
  3. 先允许少量重复,确认模式稳定后再抽象。过早抽象比重复更有害。
  4. 优先测试状态流转和业务逻辑,不要只测 UI 表面。