[ARCH] 三Agent工单协作:blocked回流、独立身份、钉钉通知与清单门禁 #7
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
1. 背景和目标
用户提出五项改进:开发正式上报blocked;blocked交回架构;Webhook通过钉钉提醒;不同Agent使用不同Gitea账号;正文完成项及时勾选。此单跟踪设计、现状与实施前置,不是已授权启动的DEV任务。
2. 约束与已确认决策
Hermes architect/code/tester对应Gitea agent-architect/agent-code/agent-tester。复用已有钉钉群机器人,不新增机器人。main单线,不分支/PR/合并;只有code修改代码、正常推送main与不可变注释snapshot/vX.Y.Z。正式版本/部署另批。第一阶段自动化只派送architect,不自动启动code/tester。
3. 系统边界
Gitea为正式合同,角色规则负责执行纪律,接收器负责签名与去重、任务队列负责架构派送,现有bridge负责钉钉。不同账号不等于技术ACL隔离;权限必须实测。通知和任务接收为两个独立结果。
4. 模块与执行合同
5. 数据模型草案
Event:delivery_id/repo/issue/action/actor/status/assignee/blocked_comment_id;Dispatch:event_key/profile/queued-dispatched-acknowledged-failed/attempts/error;Notification:event_key/provider/queued-provider_accepted-unknown-failed/attempts/error。Checklist:稳定条目ID、责任角色、适用性、完成证据、验收版本。
6. API与状态草案
Gitea入站Webhook→签名校验→最新工单GET→持久队列→架构派送、钉钉出站。工单正文更新使用PATCH但只修改任务框;评论/标签/指派每次写后读回。接口事件action、header及Hermes执行入口需按部署版本核实,不猜API。blocked接收不等于已解除。无关正文勾选不得触发blocked重派。
7. 权限/安全/日志
不授站点管理员,最小仓库/token权限实测;凭据仓库外、0600、无输出。入站secret与钉钉secret分离,不复制共享个人凭据。禁止强推、覆盖旧tag、生产配置/Runner改动。架构/验收若平台无法细分代码与工单写权限,必须如实披露。
8. 部署与CI/CD影响
现有/srv/aiball/ci/bridge有dingtalk.py,config.json notify_provider=dingtalk,仓库外凭据文件存在且0600;未实发工单通知。该目录不处于Git仓库,需核实所属源码仓库、服务配置及部署管理。服务/端口/重启/真实发送需对应授权,默认不补投旧消息。通知标题用【工单阻塞】,复用队列但区分事件类型,不改变CI质量结论。
9. 风险
共享helper从~/.git-credentials读取,当前未独立身份;三个目标用户名查询HTTP404。Webhook重复/乱序、评论与标签竞态、架构自评论循环、任务入队被误称接收、钉钉超时重复消息、正文PATCH覆盖并发更改。API缺乏可靠条件更新时需明确并发边界与串行编辑规则。
10. 架构清单与建议开发拆分
建议实现阶段:独立账号与凭据→身份冒烟→Webhook/队列/架构接收→复用钉钉→失败/重复/清单门禁验收。正式代码和测试全部由code负责。
验收标准草案:
11. 当前阶段与待确认
角色规则与试跑单补勾已完成;账号、凭据切换、Webhook、自动派送和工单钉钉通知尚未实现/验证。此单Open、无ready,不是DEV授权。架构文档仅在当前profile本地,不冒充已推送远端文档链接。
用户批准后的交接与真实状态
用户已确认批准独立ci-bridge仓库、三个非管理员账号/最小团队权限以及开发实现范围;确认技术邮箱仅标识、不发送邮件。三个架构前置条目现已完成:ARCH-05源码工作副本和systemd已查清,选用桥持久队列串行调用architect CLI;ARCH-06最小权限方案与安全文件已落实,运行上线/Hook/真实消息明确仍需另批;ARCH-07正式开发交接已创建。这里的勾选表示架构前置完成,不代表Webhook或通知已上线。
独立实现工单:Weknora/ci-bridge#1 ,作者agent-architect,指派agent-code,status:ready。源码仓库私有且空,main由code保存完整本地历史后正常推送。账号/user及两仓读取均HTTP200,三者admin=false、code push=true、架构/验收push=false;完整权限/身份helper/Git接入还需DEV验收实测。
本ARCH单不作为开发领取入口,移除status:ready避免与实现单混淆;保留Open跟踪后续实现,不由架构替tester关闭。未启动code/tester、未部署重启、未启用Hook、未实发钉钉消息。
架构只读核查结果与推荐实施路径
开发和验收均已在独立会话重新读取角色规则并确认,未领取本ARCH单。
已核实事实
推荐方案(草案,尚未实现)
在ci-bridge工作副本扩展独立工单Webhook入口,严格Gitea签名与仓库allowlist;持久化工单事件/架构任务,串行worker以固定profile与固定模板调用hermes -p architect chat -q,只传仓库、工单号、事件标识,不把载荷任意文本拼成shell命令。architect重新读取真实工单,按新角色规则接收处理并写Gitea接收记录。通知复用现有钉钉发送器,但工单事件队列/去重键与CI报告分开;不改变CI report/publish合同。
该路径无需启用architect gateway,不动default消息服务。备选为启用architect仅Webhook gateway并增加必要持久派送保障;不推荐直接改Hermes核心或将CI报告伪装为工单。
建议为ci-bridge建立独立Gitea源码仓库(仓库名需用户批准),把它与knowledge-governance业务仓库分开;不能为让agent-code开发bridge而授予全部仓库权限。需确认账号邮箱/安全创建方式、角色token落点和组织团队权限,三账户均非管理员。
仍未完成、不能打勾的项
ARCH-05:磁盘源码、服务和协议已查清,但接收器/派送工作目录、远端源码仓库归属及实际请求链路尚待最终确定,保持未勾。
ARCH-06:权限方案有API证据,账号未创建、实际最小权限未验证;真实消息和服务变更尚无对应批准,保持未勾。
ARCH-07:尚未进入开发,未创建DEV任务、未启动code/tester,保持未勾。
需用户批准后才实施:独立源码仓库、三个非管理员身份与最小团队权限、开发实现范围;服务部署/重启、Gitea新Hook启用和一条真实钉钉测试消息另明确批准。所有开发/验收完成项须在正文勾选并留证,未完成项不能只因方案提出就勾选。
本轮仅GET、git/systemctl只读核查及本ARCH评论留档,无代码、凭据、账号、权限、hook、服务变更,无消息发送。
已完成用户批准的基础配置:私有空仓Weknora/ci-bridge;三个agent-*非管理员restricted账号及两组按repo单元限制的团队;独立token/user和两仓读取已核实,凭据仅仓库外0700/0600保存,未发送邮件。正式DEV交接已由agent-architect创建于Weknora/ci-bridge#1,指派agent-code且ready。ARCH-05/06/07按各自架构前置证据勾选,不代表运行上线;实现、Git角色接入、权限负例及真实Webhook/钉钉/架构接收尚未验收。此评论真实认证作者agent-architect,不使用个人admin日常接入。移除本ARCH单ready,避免误领,保留Open。服务重启/Hook启用/真实群测试未授权、未执行;未启动Agent。