# 开发规范 > 版本: v2.2 | 更新: 2026-07-17 --- ## 核心理念 **"手脚架降低智商要求"** — 不是靠人记住所有规则,而是靠系统让正确路径成为最容易的路径。 三条红线: 1. **先读/写 Spec,再写代码** — 新增功能先写 spec 再实现;修改已有功能先读对应 spec 了解架构和约束再动手。没有 spec 的模块在 dashboard 不可见,视为未完成 2. **部署必验** — 部署后不打开 K Tab 验证 = 部署未完成 3. **不可见即不存在** — 组件不在 dashboard 中显示 = 等于没部署。离线不告警 = 监控缺陷 4. **实现后同步 Spec** — 每轮开发完毕后,必须将 specs/{module}.json 更新为与实际实现一致的状态。文档过期 = 等于没写 --- ## 一、双轨同源规范体系 每新增/修改一个独立功能模块,必须先写 `specs/{module}.json`。 一个来源同时产出两套文档: ``` specs/usage_monitor.json ├── human_help → ? 按钮(人类看说明/排错) └── ai_spec → § 按钮(AI 看接口/约束/依赖) ``` ### 什么算一个模块 满足以下任一条件即视为独立模块,必须写 spec: - 暴露独立的 HTTP API 端点 - 在 Dashboard 上有独立 UI 面板(`?` + `§` 按钮) - 有独立的配置文件 / 数据文件 - 可独立部署(如 bot、gateway、定时任务) ### Spec 字段标准 ```json { "module": "模块名(与 Dashboard 引用名一致)", "version": "1.0", "purpose": "一句话说明这个模块干什么", "human_help": { "title": "面向人类的标题", "description": ["说明段落数组"], "usage": ["使用步骤数组"], "troubleshooting": ["常见问题数组"] }, "ai_spec": { "apis": [ {"method": "GET", "path": "/api/xxx", "returns": "返回值说明"} ], "dependencies": ["依赖的服务或文件"], "constraints": ["AI 必须遵守的约束"], "must_not": ["AI 绝对不能做的事"], "tests": [{"id": "T1", "name": "测试用例名"}], "related_files": ["实现文件路径"] } } ``` ### 当前模块清单 | 模块 | spec 路径 | § 入口 | 状态 | |------|----------|--------|------| | usage_monitor | `gateway/scripts/specs/usage_monitor.json` | Dashboard I Tab → OpenCode Go Usage | ✅ | | easytier | `gateway/scripts/specs/easytier.json` | Dashboard I Tab → EasyTier | ✅ | | rdp | `gateway/scripts/specs/rdp.json` | Dashboard I Tab → RDP | ✅ | | 开发规范本身 | `docs/dev-spec.md` | Dashboard G Tab | ✅ | | (新增模块) | `gateway/scripts/specs/{module}.json` | 待注册 | | --- ## 二、验证闭环 ``` ┌────────────┐ ┌──────────┐ ┌──────────┐ │ G: 规范体系 │────→│ K: 测试 │────→│ F: 健康 │ │ 定义期望 │ │ 验证实现 │ │ 持续监控 │ └────────────┘ └──────────┘ └──────────┘ ↑ │ └────────────────────────────────┘ 发现偏差 → 更新 Spec H: 需求文档 — 双轨体系覆盖不到的架构级/跨模块需求(性能、安全、可用性等) ``` ### G — 开发规范(Dashboard G Tab) - 本文档,展示在 Dashboard G Tab - 包含:双轨同源体系、验证闭环、开发流程 - Dashboard G Tab 底部展示历史版本(`git log`) ### K — 自动测试(Dashboard K Tab) - `tests_api.py` 自动执行 20+ 项系统检测 - Dashboard K Tab 实时展示 PASS/FAIL/EXPECTED - **部署后必做**:打开 K Tab 确认全部通过或已知失败原因 - 新增模块时应在 `ai_spec.tests` 中添加对应的测试标识 ### F — 系统健康度(Dashboard F Tab) - **期望矩阵**:应该运行的服务 vs 实际状态(Dashboard F Tab) - **监控数据**:Tier1(5min)/ Tier2(日报)作为实时状态输入 - **服务拓扑**:所有服务的健康、端口、看门狗状态 ### H — 需求文档(Dashboard H Tab) - 存放于 `docs/PRD.md` - 只描述模块级 spec 覆盖不到的总体性需求(架构约束、可用性、安全、性能基准) - 具体功能需求全部通过双轨体系 `specs/*.json` 描述 - Dashboard H Tab 底部展示历史版本(`git log`) --- ## 三、开发流程 ### 新增功能流程 ``` 确定模块边界 │ ├─ 1. 创建 specs/{module}.json │ human_help + ai_spec │ ├─ 2. 实现功能代码 │ 包含 /health 端点 + PID 锁(proc_guard) │ ├─ 3. 注册到系统 │ - 端口注册(agents.yaml 或硬编码) │ - 添加到期望矩阵(F Tab 自动检测) │ ├─ 4. 编写测试 │ - ai_spec.tests 添加对应测试标识 │ - 或在 tests_api.py 添加测试用例 │ ├─ 5. 同步更新 Spec │ - 将 specs/{module}.json 的 api/constraints/dependencies/architecture │ 更新为与实际实现一致 │ - 删除过时的描述,修正错误的假设 │ - 新增的字段、端点、配置项必须在 spec 中体现 │ └─ 6. 提交 → 部署 → 验证 即以下"操作规范" ``` ### 修改已有功能流程 ``` 识别要修改的模块(查看模块清单确定 module 名) │ ├─ 1. 读 specs/{module}.json │ 重点读 ai_spec 部分: │ - apis:了解接口定义和调用方式 │ - constraints:了解必须遵守的约束 │ - dependencies:了解依赖关系和部署位置 │ - architecture.flow:了解数据流向 │ - must_not:了解绝对不能做的事 │ ├─ 2. 确认理解 │ - 如果 spec 描述与代码实际行为不一致,优先怀疑 spec 过期 │ - 确认后先更新 spec 再做修改 │ ├─ 3. 修改功能代码 │ 只改动需求直接涉及的部分,不顺手优化无关代码 │ ├─ 4. 同步更新 Spec │ - 将 specs/{module}.json 更新为与实际实现一致 │ - api/constraints/dependencies/architecture 逐一核对 │ - 删除过时描述,修正错误假设 │ └─ 5. 提交 → 部署 → 验证 即以下"操作规范" ``` ### Git 操作规范 | # | 规则 | 说明 | |---|------|------| | 1 | 开工前必 pull | `git pull --rebase` 确保基于最新代码 | | 2 | 改完即 commit | 一个逻辑单元一次提交。禁止含密钥 | | 3 | 推前必拉 + 配代理 | push 前 `git pull --rebase`。远程操作前配 `:15000` 代理 | | 4 | 推前自查 | `git status` / `git diff` / `git log --oneline -10` 确认只含预期内容 | | 5 | trunk-based | 日常在 main。仅长周期大改开 `task/xxx` 分支 | | 6 | 例外才问 | 删库、清 session、含密钥 commit 才停下确认。其余 routine 自动走完 | ### 部署规范 ``` 1. git push origin master 2. ssh 246 - cd ~/AgentsMeeting && git pull --rebase - sudo systemctl restart xxx(受影响的服务) 3. 验证: - curl http://127.0.0.1:5803/api/xxx 确认 API 正常 - **打开 Dashboard K Tab → 确认测试通过** ``` --- ## 四、已淘汰的规则 以下内容不再属于本规范,保留在此处说明去向: | 原规则 | 去向 | |--------|------| | 旧 A-K 框架(11 项) | 精简为 G + K + F + H 四项 | | 细碎的操作技巧(弹窗铁律、编码技巧等) | 移入 AGENTS.md + 踩坑记录,不再作为核心规范 | | Phase 计划(1/2/3) | 移除。开发按实际需求迭代,不按阶段计划 | | H 需求驱动流程(全量 PRD) | 精简为纯总体性需求(H Tab),具体需求移入 specs/*.json | | E 元成长回路 | 暂缓。等真遇到"反复犯同一个错"再实现 |