[DEV] 三Agent文档交接闭环试跑:main提交、版本tag、推送与独立验收 #6
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?
批准记录与目标
用户在架构会话明确回复‘批准’,授权本次文档试跑。不是#4的继续开发授权,不授权生产配置、数据库、部署或清理历史。目标是用真实文档变更验证:ready → developing → review → accepted → Closed,以及失败时rework/blocked的处理。
已核查事实
模块边界与明确不做
只新增或更新docs/architecture/three-agent-handoff-workflow.md。若已有该文件,先完整读取再修改。不得修改业务代码、测试、依赖、锁文件、CI/CD、Runner、数据库或secret,不清理旧分支/worktree/tag。
不创建分支、PR、worktree,不执行合并。不自动启动其他Agent。不故意引入错误测试退回。架构只维护此工单;code写项目文档并交付;tester只读差异和版本信息并验收关单。
文档内容合同
数据模型/API草案
无需修改业务模型/API。交接模型:Issue正文=目标/范围/标准;status标签=阶段;评论=证据;commit/tag=版本。使用既有Gitea /api/v1/issues、comments、labels接口完成状态流转,并每次读回。标签ID按仓库实时读取,不能跨仓库复用。
code执行清单
tester验收矩阵
风险与版本修复
main推送可能触发既有流水线,须先核查。历史遗留不得混入。新版本验收失败后,开发修复、自测并创建下一snapshot补丁版本;不得移动snapshot/v0.1.1。无需刻意制造失败。共享Gitea管理员凭据不构成角色级技术隔离。
交付物与完成条件
远端main中的指定文档;不可变tag;完整commit差异;开发自测证据;tester独立验收矩阵和关单记录。本任务不要求生产部署,也不授权架构自行推送或启动Agent。
阻塞解除决策:用户选A
用户明确选择开发快照与正式版本分离。原评论#107所述冲突已通过修改tag语义解除,不扩大文件范围。
领取(开发 Agent,2026-10-14)
工单 #6:
status:ready→status:developing(标签 id 按本仓库实时读取 = 3)。起始 SHA:
9a8a3e77956149d116360bbb561efd67e20fb062(远端 main;与开单时记录一致,未回退、未强推)。本轮实际只做只读核查(工单与评论、
/branch_protections、workflow、tag 占用、CHANGELOG 版本门禁、工作区/分支现场),未修改任何文件、未 commit、未打 tag、未推送。核查中发现与工单范围冲突的阻塞项,见下一条评论;随后本工单置
status:blocked。阻塞(开发 Agent):
v0.1.1与本仓 CI 版本门禁冲突,需先修订工单范围 —— 本轮零产出结论:按工单正文(只改
docs/architecture/three-agent-handoff-workflow.md一个文件)并打v0.1.1,会让 main 的 CI 立即变红,且此后每次推 main 都红。故本轮未产出任何提交/推送。原因(实测,非推测)
make verify→scripts/check_changelog.py --tagsMakefile:27、scripts/ci_checks.py:254vX.Y.Ztag 指到的提交里,CHANGELOG 顶部正式版本必须 == tag 版本;且必须是注释 tag(轻量 tag 判红)scripts/check_changelog.py:257-278## [0.1.0] - 2026-10-13(其上为[Unreleased])CHANGELOG.md:62ls-remote --tags写入.ci-remote-tags并fetch --tags;CI=true时拿不到清单直接判红.gitea/scripts/ci_checkout.sh:122,1270.1.0+ 注释 tagv0.1.1⇒ 判红;同一条把顶部改为0.1.1⇒ 绿;轻量 tag ⇒ 判红冲突点:工单把
v0.1.1当"代码快照 tag",但本仓约定里vX.Y.Z是正式发布版本,打它必须同步把该版本记进 CHANGELOG。二者只能二选一;扩大文件范围属工单范围变更,开发无权自行处理(也不降验标准)。已核销的其他前置项(不构成阻塞)
v0.1.1本地与远端均未占用(远端仅v0.1.0→6de5d52,无对应 Release)。GET /branch_protections=[]⇒ 直推 main 服务端不会拒;AGENTS.md 第 18/24 行"main 已受保护、必须走 PR"为过期描述(~/eng-standards/01-规范…§1.3:默认不开保护,以直推为主)。建议架构侧另行更正 AGENTS.md(本工单不动)。build.yml:on: push: branches: "**",头部注释明确只做 CI 不做 CD,无 deploy 作业 ⇒ 推 main 无自动生产部署/正式发布风险。9a8a3e7,本地 main 与之一致;工作区干净;#4分支与成果(feat/dobotai-ops-readonly-phase1@3802d86)原样保留、未混入。阻塞要素(按工单约定)
v0.1.1与本仓 CI 版本门禁冲突(见上)。CHANGELOG.md增## [0.1.1] - 2026-10-14段",并同步改掉 tester 矩阵"完整 diff 仅指定文档"一条;② 工单把本轮 tag 语义改为非vX.Y.Z形式,或明确本轮不建 tag。status:developing(解除后恢复此状态,再由开发执行)。证据(可复现,全程只读)
探针真实输出(节选):
工单保持 Open +
status:blocked;解除后恢复status:developing。用户选择方案A,解除#107版本语义阻塞:本轮目标改为注释开发快照tag snapshot/v0.1.1,不创建正式v0.1.1,不改CHANGELOG/CI,文件范围仍仅docs/architecture/three-agent-handoff-workflow.md。修复后下一快照snapshot/v0.1.2。已核查正式版本校验与识别逻辑不把snapshot前缀当作正式版本;开发仍需实际运行版本门禁,不能仅凭架构静态核查宣告CI成功。恢复原状态status:developing;未启动Agent。
交接(开发 Agent,工单 #6 首轮)—— 快照 tag
snapshot/v0.1.1已推送并核实版本锚点
9a8a3e77956149d116360bbb561efd67e20fb062(动手前远端 main)c1d49adb622f3bf18e51bddb415795a894ed227esnapshot/v0.1.1,注释 tag(tag 对象ff977bb7bbfc5968916fce4450d5865efe4e1d8f)c1d49adb622f3bf18e51bddb415795a894ed227e== 结束 SHA ✅v0.1.1、不改 CHANGELOG/CI)实现摘要与文件清单
三个会话(架构/开发/验收)在同一
main上串行协作缺一份可核对的书面契约:状态标签命名不统一、快照 tag 曾被当正式版本用、验收缺独立判据。本文件把契约写死为 8 节:角色边界、main 单线串行、六个状态名与 blocked 要素、快照 tagsnapshot/vX.Y.Z与正式版本vX.Y.Z分线、不可变与回退规则、开发/验收交接模板、关单条件、安全边界;并在第 0 节给出「工单合同条目 → 本文位置」索引,便于独立逐条核对。起始→结束完整 diff 只有这 1 个文件(
git diff --name-status 9a8a3e7..c1d49ad实测:仅A docs/architecture/three-agent-handoff-workflow.md),无 #4 代码/配置/secret 混入。未改 CHANGELOG、CI、Runner、业务代码、测试、依赖、锁文件、数据库、secret。自测与远端核实(真实命令 + 真实结果)
前置核查(推送前,全部只读)
snapshot/v0.1.1占用ls-remote "refs/tags/snapshot/*"命中 0 行 ⇒ 未占用v0.1.1v0.1.0),符合本轮语义GET /branch_protections=[]build.yml头部明确「只做 CI,不做 CD」,无 deploy 作业 ⇒ 无自动部署/正式发布feat/dobotai-ops-readonly-phase1@3802d86安全切到main,#4分支与成果原样保留、未混入「为何快照必须用 snapshot 前缀」的实测证据(临时仓库跑仓内真脚本,不触碰本仓)
已知问题 / 未做项(均在本轮授权范围外,未擅自处理)
AGENTS.md:18,24写「main 已受保护、必须走 PR」与实际不符(实测保护列表为空);建议架构侧单独处理,本工单未改。status/working(/而非:)不符合六状态命名;已在文档 §3 写明归一为status:developing,但未改动任何工单标签。~/.config/knowledge-governance/secrets/dobotai_ops_ro.env,0600、仓库外、未被 Git 跟踪)——按工单要求保留未动。~/.hermes/profiles/code/cache/scratch/(仓库外),仅作为可复现证据,不随交付推送。v0.1.1、Release、CHANGELOG/CI 修改、分支/PR/worktree/合并、清理旧分支与 tag。剩余完成项
本轮范围内:无。等待独立验收(tester)按矩阵逐项核对;工单保持 Open,状态置
status:review。开发停止修改代码,不关单、不置accepted、不启动 tester。独立验收完成(tester,非开发自测或 CI 代替验收)
版本:snapshot/v0.1.1(注释 tag)
起始 SHA:9a8a3e77956149d116360bbb561efd67e20fb062
结束 SHA:c1d49adb622f3bf18e51bddb415795a894ed227e
tag 对象:ff977bb7bbfc5968916fce4450d5865efe4e1d8f
现场:/home/zheromiku/knowledge-governance,main,HEAD=结束 SHA,验收前后 git status --porcelain=v1 为空。
已完整读取工单正文、全部 4 条交接评论(含 #110 决策与 #113),审查完整起始→结束 diff。
必要复验命令与真实结果
9a8a3e7795c1d49adb62→ 0。结论与完成条件
独立结论:PASS,绑定上述snapshot/tag与完整结束SHA;本轮范围内无失败、无阻塞、无剩余完成项。远端文档/commit/注释tag/开发交接/本验收矩阵均齐全,可以accepted→清除状态标签→Closed,每次写后读回。
没有运行完整make verify:该入口会写项目目录、安装依赖并构建;本轮按单文档风险执行不写项目文件的针对性复验,未把开发自测冒充独立全量复验。CI真实日志已另外读回核实。
交接列出的AGENTS.md过期PR描述、历史status/working及#4现场属于范围外治理事项:本轮不修改,由架构另行评估;不构成本单阻塞。未修改任何项目文件、未commit/tag/push/checkout/reset、未启动Agent或CI/CD、未部署或正式发布。此结论不覆盖#4,也不把#5 API演练视为代码验收。
【架构事后补录清单,不重新验收】用户指出工单关闭后正文仍未勾选。本次依据已有开发交接评论#113、独立验收评论#117,以及已核实Closed/无状态标签的最终状态,将原code执行清单8项、tester验收清单7项任务框补勾;仅改变[ ]为[x],没有改变任务目标、范围、验收标准、版本或代码。使用的是当前架构会话的既有共享接入身份,不冒称agent-code或agent-tester执行。新规则要求责任角色逐项完成同步勾选并留证,关单后收尾项应在读回Closed成功后补勾。未触碰其他工单。