Files
Agent-System-Documents/docs/proposals/2026-10-14-merge-queue-manual-phase2.md
T
weichen a665c2d0b9 Record approval of manual expansion plan
Why: Preserve the owner’s Stage 5 decision and implementation method on the reviewed plan object.

Evidence: Owner approved plan 28c4ceb in the task conversation; git diff --check and relative links passed (SELF).

Impact: Documentation status only; Dev implementation remains subject to Stage 6 and 7 review.

Refs: Agent-System-Documents #105; Agent-System-Dev #518
2026-10-14 14:31:48 +00:00

13 KiB
Raw Blame History

Dev main 合入调度第二轮 manual 扩围设计

状态:阶段 4 方案设计与阶段 5 实施计划均已通过;阶段 6 实施待评审。2026-10-14,负责人 weichen 在本任务会话中对 Documents 草稿 PR #104 的规范稿 aa4d372f01d0473928c570aa69c09ca771f2de45 明确回复“通过阶段 4”,随后对 PR #105 的计划稿 28c4ceb17315e1bb06f8e39c8407eb525effb8fe 回复“通过阶段 5”,选择由当前智能体实施。这些批准不等于启用第二轮窗口或接管其他任务。执行协调者须在每个窗口明确登记。本文只设计 Dev 仓 refs/heads/main 的下一轮人工调度,不启用自动队列。

主记录:Dev 调度 Issue #518;既有规则:Development-Guidelines 固定版合入调度、Dev 项目细化;首轮结果:三任务试行报告。本稿为下一轮范围与验收设计;动态队列状态只维护在 #518,不复制第二份任务进度表。

1. 评审结论与问题

首轮 #489、#488、#486 在同一协调者下顺序合入,每个真实任务只有一次最终 PR CI,三项各自合入后的 main CI 另计;没有因首轮正常顺序合入废弃的最终 CI。首轮报告将 MQ1、MQ5–MQ7 的未覆盖部分及自动原子领取、旧执行者拒绝列为部分满足或 NOT_RUN,不得据此宣布全仓自动约束已就位。

2026-10-14 22:13(Asia/Shanghai)对 #518 当前正文/评论和 Dev PR #539–#548 的只读 API 对照(SELF 观察快照,原始本机文件 /tmp/mq-manual-expansion-audit-20261014.json)显示:这十个 PR 均已合入;#540、#542 有窗口领取与释放记录;#539 只有合入后的事实记录;其余七个在当前 #518 正文与所返回的评论中找不到对应 PR 的窗口记录。这是记录覆盖缺口,不等于断言这些合入未经其他人工协调。它使“所有 Dev main 写入者都受同一 manual 窗口控制”的结论无法成立。

#537 曾取得旧候选绿色 GATE,但 Stage 8 审阅判为 NOT READY,窗口释放,后由用户取消且 PR 未合入;该例证明 CI 与人工阶段结论须分别核验。#542 的归档文字变化使旧候选作废,run 3100 不能放行新 head,run 3107 才属于实际合入对象。两者是应保留的正常失败/恢复事实,不计为“因正常排队 main 移动而浪费的 CI”。

目前 Dev 开放 PR 只有 #482 与 #512:#482 非草稿但落后 main、平台回读不可合入;#512 为草稿。两者的既有绿色状态均属于旧对象,且未取得本轮写者接管确认。因此当前没有可直接领取的第二轮任务,不得为凑满数量生成生产 PR、自动同步它们或把队列扩围理解为接管授权。

平台当前只读回读(SELF):Dev main 禁直推/强推,拒绝落后分支,要求三个 PR 检查上下文 ci / test、ci / test-pg、ci / svc-realcombo,管理员不可绕过合入。它仍不能区分共用账号下的人与智能体,也未把 #518 的窗口写入变成原子锁或执行端 fencing。本轮不变更保护、批准数、CI workflow 或 runner 全局设置。

2. 目标、范围与非目标

**目标:**在保留人工阶段评审和现有平台准入的前提下,将首轮单一协调者的经验扩展为可供多个已授权任务 owner 依次使用的 manual 窗口;在候选固定后减少因正常排队合入而造成的无效同步和完整 CI;准确统计没有节省的成本与退出案例。

**范围:**仅 Dev 仓库 ID=29、托管实例 git-home.u1680832.nyat.app:30319 的 refs/heads/main。普通 PR、任务卡闭合、紧急和机器人目标写入均须出现在同一调度记录;不同组件仓按各自目标协调。候选任务原卡仍是需求、授权、阶段和证据的主记录。第二轮以随后实际就绪的三个已授权真实任务为观察样本,闭卡 PR 单列成本与窗口,不充作三个业务任务。

**非目标:**自动优先级、合并列车、批量/预测合并、复制旧 CI 状态、降低必需检查、调整分支保护、发布/部署、代替其他任务 owner 编写业务代码。#482、#512 和已取消的 #537 不因本设计自动变为就绪或重新授权。

取舍:立即把所有 PR 宣称为受控 manual,管理成本最低,却与七条找不到 #518 窗口记录的实际合入不符;只点名三个任务而放任其他 main 写入,不能解决等待者因外部推进失效的问题;直接建设自动队列需要真实原子领取和执行端旧代次拒绝,超出用户选择的 manual 范围。本设计选择先确认已知写者覆盖与记录完整性,再接收三个真实就绪任务;覆盖不足时诚实标记并暂停,保留以后另立自动机制的边界。

3. 第二轮 manual 协议

3.1 入队与覆盖

任务 owner 在最终同步之前登记目标仓库/分支、任务卡与 PR、授权范围及阶段结论、源 HEAD、依赖/组件、现有写者和预计最小重放集。ready_at 只在依赖已落主干、必要人工结论与写者排他确认均齐备时记录。尚缺任一条件的条目标 blocked,可以继续自己的局部开发,不领取窗口;入队不要求提前合入不断移动的 main。组件仓未交付时不占 Dev 窗口,也不持有一个目标窗口等待另一个目标。

第二轮启用前,协调者核对当时的开放 PR、可推进 main 的工作区 owner、仓库协作者、机器人/webhook 和 workflow 入口,并取得已知目标写者采用同一窗口的确认。普通、闭卡、紧急及机器人合入均须走 #518;仍有未接入写者时如实登记其范围,不能声明全写者覆盖,也不能保证等待任务免于外部 main 移动。

协调者按就绪时间与已批准的紧急理由安排顺序,领取前读回 #518、实际 Dev main/PR、分支保护和 runner 资源。#518 的当前窗口字段只写一个目标尝试;评论保留追加式时间线。领取后再读回核对,无匹配或发现另一执行者时停止。Issue 的 content_version、本地锁和评论均不等于平台原子互斥;本模式依靠明确写者遵约和受保护分支的最终准入。协调者换手时须确认前执行者退出及未知合入结果,不能凭 20 分钟超时自动接管。

3.2 固定、检查与合入

一个窗口以 attempt_id 标识:target, owner/coordinator, claimed_at, last_progress_at, initial_base_sha, source_head_sha, sync_base_sha, frozen_head_sha, 组件清单、检查定义、Review 对象、GATE 运行与真实结果。新增 ready_at 与 queue_entered_at,使任务等待时间和 runner 等待时间分开计算;时间未知时记 NOT_MEASURED,不倒推填造。

窗口领取后执行一次真实 task-sync,处置冲突、物化已合入组件并完成应提交的任务卡/收据;此时才固定父仓候选。目标未变的验收、Review、合入节点只做同基线核验,不生成记录提交或重复完整 CI。最终 CI 仍由现行 workflow 在固定 PR HEAD上运行 test、test-pg、svc-realcombo;独立 Review、人工阶段结论与 CI 分别审查。合入前再次核对最新 base/head、组件、保护和三个 GATE 作业身份与结果;智能体使用固定 head_commit_id、force_merge=false 经 PR 合入,回读实际 main 树、合入 SHA、组件和后续 main push CI。

源 HEAD、目标 base、组件、检查定义或相关环境改变时建立新尝试,并按影响补测/复审。旧结果保留其对象范围;不为减少 CI 次数制造绿色状态。开发期 CI、最终 PR CI、合入后 main CI、组件 CI 和闭卡 CI 分开统计。

3.3 失效、异常与未登记推进

发现 #518 未登记的 main 推进时,协调者先读回目标、PR、运行和活动窗口;将受影响的固定候选标失效,记录缺口来源与对象,暂停本轮新领取,待写者覆盖和影响范围核清后恢复。不得把“记录中没有”推断为平台阻断已生效。代码或 Review 失败、依赖不满足、需要人工决定超时:保存现场与原始证据,受影响条目 blocked 并安全释放;其它目标和局部开发继续。合入请求超时、断连或结果不明:保持目标 reconciling,查询 PR/main 真实状态;未确认旧执行者退出前不重发有副作用的请求,也不移交窗口。

预算沿用首轮:无进展 20 分钟、单窗口 90 分钟、已知基础设施失败最多额外重试一次、等待队列每 30 分钟复核一次。领取前重新核对当时 runner 容量,不把首轮的 capacity=12 当作永久事实;资源不足先等待,不在窗口中空占名额。预算变化必须在实际成本复盘后另行评审。

4. 验收、观察和停止条件

ID 可判定条件 证据与边界
M2-1 第二轮的三个真实任务均有原卡授权、阶段结论、owner 确认和先行组件;等待期间不为追 main 重跑最终 CI 每任务原 R0、入队/就绪/领取时间、固定 base/head、源外收据;缺任务时保持等待,不制造 PR
M2-2 每次 Dev main 实际合入在 #518 可找到同对象的先前领取和事后释放;闭卡、紧急、机器人同样登记 以实际 main merge/PR 列表对照 Issue 正文/时间线;遗漏即覆盖失败,不能声称“全写者受控”
M2-3 稳定候选同基线重复 task-sync 不改 HEAD;对象变化拒用旧 Review/CI 独立重放及精确运行 SHA;本轮记录每次新尝试原因
M2-4 三个真实任务各自取得当前 HEAD 三项必需 GATE 后由智能体合入,实际树与候选一致 PR/run/job/actor/runner 链接及合入后 main 回读;平台仍是最终准入
M2-5 正常已登记任务顺序合入造成的最终 CI 废弃数为 0;候选整改、外部推进和基础设施失败另计 完整列出开发、最终、main push、组件、闭卡运行次数/耗时与废弃原因;无可比基线不报告节省百分比
M2-6 自然发生的 blocked/withdrawn/reconciling 均如实记录并安全处理;某类未发生则标 NOT_RUN 不制造生产故障凑数;#537 历史可作设计参考,不冒充第二轮执行

若有未登记 main 合入、并行窗口、对象不匹配仍合入、伪造来源、旧执行者未退出即接管,立即暂停扩围并先对账;这是试行停止条件,不自动回退已经合入的成果。三个条目及闭卡均核验后形成第二轮报告,人工评审是否保持 manual、调整预算或另立自动准入项目。本轮即使全部满足,也只证明声明范围内的人工协作;自动锁、所有角色的执行端隔离和旧代次 fencing 继续 NOT_RUN。

5. 采纳顺序与阶段 4 决定

  1. 阶段 4 已由用户按规范稿 aa4d372 批准;智能体完成本设计的 Review 与 Documents PR 合入。阶段 5 计划获批前不改 Dev 规则/Issue 状态,不领取新任务。
  2. 另编实施/测试计划:对账 policy/merge-queue.md、policy/adoption.md、policy/tool-adaptation-matrix.md 的首轮历史快照与当前动态入口,确定 #518 第二轮条目模板和只读合入覆盖核对方法;有脚本变更时运行 make test-governance。规范源码、项目采纳及 Issue 记录分别标阶段,不把计划写入视作已启用。
  3. 经计划阶段评审后,按 Dev 首次 precheck、独立工作区、Review、当前 HEAD CI 与智能体 PR 合入流程交付必要规范更新。高后果保护变更若将来必要,仍由用户亲手执行,本设计不要求该动作。
  4. 各真实任务 owner 在自己的授权与阶段下自愿入队;协调者确认全写者覆盖、同目标唯一窗口和资源,再领取。当前 #482/#512 不满足这一步。
  5. 第二轮达到三个真实任务或触发停止条件后,按本设计 M2 指标复盘;由用户作继续、调整或回退的阶段决定。

**阶段 4 决定:**用户已批准以“先补全 Dev main 合入记录覆盖、后接收三个真实就绪任务”的受控扩围作为第二轮设计,遗漏目标推进立即暂停、现有预算不变、闭卡单列成本,当前无就绪任务时保持 waiting。这一决定只批准设计;#518 与仓库规则的第二轮启用仍受阶段 5–7 评审及实际写者覆盖核验约束。