docs: 规范三项目并行建单与协同工单顺序 (#1) #2

Merged
ila merged 1 commits from agent/codex/1-collaboration-rules into main 2026-08-12 08:34:20 +08:00
9 changed files with 106 additions and 2 deletions
+15
View File
@@ -1,6 +1,9 @@
## 基本信息
- 类型:需求 / 缺陷 / 重构
- 任务类型:单项目 / 协同
- 主项目:Sense / Brain / Bell / contracts / 根级
- 主 agent:
- 所属 Epic:#
- 所属 MVP / 版本:#
- 阶段:
@@ -18,8 +21,20 @@
- 仅影响的子项目 / 交付单元:
- 是否跨子项目:是 / 否
- 是否修改共享接口或契约:是 / 否;唯一事实来源:
- write_paths:
- 各子项目需要执行的验证:
## 协同接口
<!-- 单项目工单填写“不适用”;协同工单必须完整填写。 -->
- 生产者:
- 消费者:
- 契约/共享事实源:
- 兼容策略:不适用 / 向后兼容 / 发布新版本
- 被阻塞或需要适配的工单:
- 集成顺序:
## 原始需求
- 来源:用户对话 / Gitea / 其他
+12
View File
@@ -179,3 +179,15 @@ MVP 内所有单元任务通过后才能做 MVP 集成验收;MVP 通过后才
- 旧仓库 `D:\OPC\yovision_old` 只读用于需求和证据追溯;不得继承旧任务状态,也不得不经筛选整树复制代码。
- 16 路是默认交付配额,不得成为数据库、数组、循环、分页、批处理或单机容量的硬上限。
- 开始子项目工作前还必须读取对应目录的 `AGENTS.md`;共享契约工作读取 `contracts/AGENTS.md`。
### 三项目并行建单顺序
客户交付需要 Sense、Brain、Bell 并行推进时,固定使用以下顺序:
1. 由三个项目 agent 分别只读分析本项目需求,并行建立本项目的独立功能工单;每个工单只能有一个主项目、一个主 agent 和一组不重叠的 `write_paths`。
2. 三个项目 agent 不在本阶段创建或实施跨项目契约、根级编排和端到端工单;发现协同需求时只记录生产者、消费者、接口目的和依赖建议。
3. 三端独立工单建立后,由主 agent / dispatcher 统一汇总、去重,检查前置依赖、写路径冲突、契约归属和验收闭环。
4. 汇总完成后,再由主 agent 创建共享契约、根级构建/部署和端到端验收等协同工单,并为每个协同工单指定单一协调 agent。
5. 建单顺序不等于实施顺序。实施必须按真实依赖推进;独立骨架可以先并行,依赖共享契约的功能必须等待对应协同工单冻结版本后再实施。
主 agent / dispatcher 对工单集合的一致性负责:不得让三个项目重复实现同一事实源,不得保留重叠写路径,不得通过共享数据库、JWT、Cookie 或复制一份相似契约来绕过协同工单。三个项目 agent 可以提出协同工单草稿,但无权直接取得 `contracts/` 或其他项目目录的写入所有权。
+7
View File
@@ -7,3 +7,10 @@
- 外部事件以 `(producer_id, source_event_id)` 幂等;Bell 不读取 Sense 数据库、摄像头密码或内部文件路径。
- 修改 `contracts/`、Sense connector 或 Brain 输出语义前,必须转为跨项目协调工单。
- Bell agent 默认写路径仅为 `Bell/` 及工单明确列出的共享文件。
## 独立建单职责
- Bell agent 负责建立独立登录/RBAC、外部事件入站、规则、Event/Alert、ack/close、升级恢复、联系人/排班、通知、审计和合成事件验收等 Bell 单项目工单。
- 每个工单必须写明任务类型、主项目 `Bell`、主 agent、精确 `write_paths`、独立运行方式、测试命令和在 Sense/Brain 未启动时使用合成或第三方事件的验收标准。
- 首轮并行建单只创建 Bell 独立工单;发现需要外部事件/证据契约、producer identity、Sense connector、根级部署或端到端测试时,停止扩写本工单,向主 agent 提交协同需求摘要。
- 协同需求摘要至少包含生产者、消费者、接口目的、候选事实源、阻塞的 Bell 工单和建议验证;Bell agent 不直接创建契约实现或取得 `contracts/`、`Sense/`、`Brain/` 的写入权。
+7
View File
@@ -7,3 +7,10 @@
- 模型与规则分层:模型输出观测,版本化规则作业务判定。
- 修改 Sense 源接口、Bell 入站接口或共享契约前,必须转为跨项目协调工单。
- Brain agent 默认写路径仅为 `Brain/` 及工单明确列出的共享文件。
## 独立建单职责
- Brain agent 负责建立输入适配、解码、推理、跟踪/ReID、区域/警戒线判定、事件 mapper、证据生成、容量基线和效果评估等 Brain 单项目工单。
- 每个工单必须写明任务类型、主项目 `Brain`、主 agent、精确 `write_paths`、合成输入、测试命令和不依赖 Sense/Bell 在线的独立验收标准。
- 首轮并行建单只创建 Brain 独立工单;发现需要 Sense→Brain 源/配置契约、Brain→Bell 事件/证据契约、根级 GPU/部署编排或端到端测试时,停止扩写本工单,向主 agent 提交协同需求摘要。
- 协同需求摘要至少包含生产者、消费者、接口目的、候选事实源、阻塞的 Brain 工单和建议验证;Brain agent 不直接创建契约实现或取得 `contracts/`、`Sense/`、`Bell/` 的写入权。
+8
View File
@@ -24,6 +24,14 @@
- Sonnet 严格按照已确认方案和工单实施;发现范围变化时返回主流程重新确认。
- 不同 Agent 复用仍然有效的检查结果;会话、环境或关键前提变化时才重新检查。
## 三项目角色路由
- 用户要求 Sense、Brain、Bell 并行建单时,主 Claude 作为 dispatcher,分别启动 Sense、Brain、Bell 三个项目 agent;公共建单顺序和写路径规则以 `AGENTS.md` 为准。
- Sense、Brain、Bell agent 首轮只分析并创建本项目独立功能工单,不创建跨项目契约或端到端工单,也不修改其他项目目录。
- 三个项目 agent 返回后,主 Claude 负责去重、检查依赖与写路径,再创建协同工单;需要实施共享契约、根级编排或端到端验证时才启动单独的 coordination agent。
- coordination agent 只取得协同工单明确列出的共享写路径。三端适配仍优先拆成各自主 agent 的非重叠工单。
- 建单阶段和实施阶段分开路由;不得因为三个工单已经建立,就忽略尚未冻结的契约依赖而同时实施。
## Haiku 只读约束
- Haiku 子 Agent 只允许使用读取、搜索和只读代码图谱工具。
+7
View File
@@ -7,3 +7,10 @@
- 摄像头凭据只能从仓库外安全配置读取,日志、工单、测试夹具和 URL 不得包含明文凭据。
- 修改 `contracts/`、Brain/Bell 消费接口或根级部署文件前,必须转为跨项目协调工单。
- Sense agent 默认写路径仅为 `Sense/` 及工单明确列出的共享文件。
## 独立建单职责
- Sense agent 负责建立独立登录/RBAC、设备台账、ONVIF/RTSP、MediaMTX、实时监看、区域配置、本地事件、运维中心、容量和本地 Outbox 等 Sense 单项目工单。
- 每个工单必须写明任务类型、主项目 `Sense`、主 agent、精确 `write_paths`、独立运行方式、测试命令和在 Bell/Brain 未启动时的验收标准。
- 首轮并行建单只创建 Sense 独立工单;发现需要 Sense→Brain 源/配置契约、Sense/Brain→Bell 事件/证据契约、根级部署或端到端测试时,停止扩写本工单,向主 agent 提交协同需求摘要。
- 协同需求摘要至少包含生产者、消费者、接口目的、候选事实源、阻塞的 Sense 工单和建议验证;Sense agent 不直接创建契约实现或取得 `contracts/`、`Brain/`、`Bell/` 的写入权。
+17
View File
@@ -208,6 +208,9 @@ def check_task_template(errors: list[str], root: Path = ROOT) -> None:
return
content = path.read_text(encoding="utf-8")
required = (
"- 任务类型:单项目 / 协同",
"- 主项目:Sense / Brain / Bell / contracts / 根级",
"- 主 agent:",
"## 依赖与并行",
"- 前置工单:无 / #编号",
"- 是否允许与前置工单并行:是 / 否",
@@ -216,7 +219,15 @@ def check_task_template(errors: list[str], root: Path = ROOT) -> None:
"- 仅影响的子项目 / 交付单元:",
"- 是否跨子项目:是 / 否",
"- 是否修改共享接口或契约:是 / 否;唯一事实来源:",
"- write_paths:",
"- 各子项目需要执行的验证:",
"## 协同接口",
"- 生产者:",
"- 消费者:",
"- 契约/共享事实源:",
"- 兼容策略:不适用 / 向后兼容 / 发布新版本",
"- 被阻塞或需要适配的工单:",
"- 集成顺序:",
"## 原始需求",
"- 来源:用户对话 / Gitea / 其他",
"- 提出时间:",
@@ -255,6 +266,9 @@ def check_agent_efficiency_rules(errors: list[str], root: Path = ROOT) -> None:
"长期文档必须先修改 Wiki",
"提交只包含当前工单相关文件",
"### 自然语言快捷指令",
"### 三项目并行建单顺序",
"建单顺序不等于实施顺序",
"主 agent / dispatcher",
"`只分析`",
"`建工单`",
"`执行工单 #N`",
@@ -288,11 +302,14 @@ def check_claude_code_entry(errors: list[str], root: Path = ROOT) -> None:
"只修改 `AGENTS.md`",
"## 模型路由",
"## Agent 交接",
"## 三项目角色路由",
"## Haiku 只读约束",
"当前模型足以完成任务时不升级模型",
"Opus 输出方案后必须等待用户确认",
"不让 Haiku 决定最终根因",
"只读必须通过子 Agent 工具权限实现",
"主 Claude 作为 dispatcher",
"coordination agent",
)
for section in missing_sections(content, required):
errors.append(f"CLAUDE.md 缺少:{section}")
+15 -2
View File
@@ -2,8 +2,8 @@
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
wiki_page: Multi-Agent-Collaboration
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Multi-Agent-Collaboration.-
wiki_revision: 29c737b262eac4c850c1edc4c1b51cb07a694291
synchronized_at: 2026-08-11T10:31:01Z
wiki_revision: cc4031224ddd5855250a2441edd53d54baf73b5a
synchronized_at: 2026-08-11T11:00:04Z
<!-- gitea-wiki-mirror:end -->
# 多 Agent 协作
@@ -12,6 +12,19 @@ synchronized_at: 2026-08-11T10:31:01Z
三名主 agent 尽量并行推进 Sense、Brain、Bell 的独立工单;只有跨项目契约、根级构建或端到端流程需要协作时,才建立协调工单并启用新的协调 agent。
## 固定建单顺序
客户交付需要三项目并行时,建单必须分为两个阶段:
1. Sense、Brain、Bell 三个项目 agent 并行只读分析并创建各自独立功能工单。每个工单只有一个主项目、一个主 agent 和一组不重叠的 `write_paths`。
2. 三个项目 agent 只记录协同需求摘要,不在首轮创建共享契约、根级编排或端到端工单,也不取得其他项目或 `contracts/` 的写入权。
3. 三端独立工单返回后,主 agent / dispatcher 统一汇总、去重,检查前置依赖、写路径冲突、事实源归属和验收闭环。
4. 汇总完成后,主 agent 再创建共享契约、根级构建/部署、机器鉴权和端到端验收等协同工单,并指定单一 coordination agent。
建单顺序不等于实施顺序。独立登录、项目骨架和合成输入纵切可以先并行;依赖共享契约的实现必须等待协同工单冻结版本。不得为赶进度共享数据库、JWT、Cookie,或让三个项目各复制一份相似契约。
每个单元工单必须填写任务类型、主项目、主 agent、精确 `write_paths` 和各项目验证。协同工单还必须填写生产者、消费者、契约事实源、兼容策略、被阻塞/适配工单和集成顺序。
## 固定所有权
| 角色 | 默认写路径 | 禁止默认写入 |
+18
View File
@@ -115,6 +115,24 @@ class TaskTemplateTests(unittest.TestCase):
errors,
)
def test_task_template_requires_coordination_fields(self) -> None:
with tempfile.TemporaryDirectory() as directory:
root = Path(directory)
template = root / ".gitea" / "issue_template" / "task.md"
template.parent.mkdir(parents=True)
template.write_text("## 基本信息\n", encoding="utf-8")
errors: list[str] = []
check_task_template(errors, root)
self.assertIn(
"单元任务模板缺少:- 任务类型:单项目 / 协同",
errors,
)
self.assertIn("单元任务模板缺少:- 主 agent:", errors)
self.assertIn("单元任务模板缺少:## 协同接口", errors)
self.assertIn("单元任务模板缺少:- 生产者:", errors)
self.assertIn("单元任务模板缺少:- 消费者:", errors)
self.assertIn("单元任务模板缺少:- write_paths:", errors)
def test_task_template_requires_dependency_fields(self) -> None:
with tempfile.TemporaryDirectory() as directory:
root = Path(directory)