Why: Main advanced after the first fixed candidate passed CI, changing four component pins and invalidating final admission against the new target. Stage progress must also be referenced outside fixed source to avoid status-driven commits. Evidence: Source-external original receipts preserve the previous clean local test/build, three successful CI jobs on80f5e9a, detection of target advance, the refused transient lock and successful serial synchronization to10d54d5. New combination verification and exact-head CI are pending. Impact: Preserve the merged authoritative component versions; record the expired candidate honestly and replace a temporary stage-status sentence with its authoritative record pointers. No platform protection change or queue activation. Refs: PR #519; main PR #513; implementation plan U1/U3/U4; Issue #518
12 KiB
最终验证与合入调度(候选条文 r1)
状态:approved(r1 条文作为实施计划基线);执行模式:未切换;日期:2026-10-13(Asia/Shanghai);规范采纳负责人:weichen。 r1 条文来源提交为 913b214f2826a50b3dab65f79d9ebf83e84f2519;Documents 实施与测试计划 r1@ba4044d57e38d0887dd425d052abf26b20a28bf4 已于 2026-10-13 获用户「批准」。阶段结论与执行进展按 迭代交付 记录在任务主记录,候选固定后的结论保存在关联 PR 与源码外收据中;规范及计划批准不等于模式已启用。 现行规则仍以根 AGENTS.md、迭代交付、开发门禁 和已采纳 gitlink 为准。 本分支已实施 CLI 同步/恢复及源码外证据基础,自检依据见本任务卡;线上队列、CI 分流、平台保护和当前 gitlink 尚未切换,不承诺自动调度能力已就位。
通用规范与项目职责
通用正文的唯一候选来源是 Development-Guidelines 的 standards/merge-queue.md,
配套模板为该仓 templates/merge-queue.md,候选内容版本 0.1.0-draft.11。
本仓仅细化目标、入口、阶段、预算和采纳条件,不复制通用调度正文。
候选尚未合入,当前 deps/development-guidelines 未包含上述文件;通用候选采纳及工具/平台条件满足前,本文件不标 active。
Dev 目标身份使用实际托管实例、仓库 ID 与 refs/heads/main;其他组件仓各有自己的目标队列。
跨仓组合按任务中的依赖关系先交付组件,再固定父仓组合;保留其他任务已经合入的 gitlink 能力。
队列仅安排工作,受保护分支最终准入继续由 Gitea 或等价受信入口负责。
项目调度记录
采纳后的首版使用每个目标一份 Gitea 调度 Issue,由一个明确协调者维护,标为 manual。 任务卡引用 Issue 条目及尝试标识,原任务仍是授权、需求和阶段的状态权威。 共享记录已建立:Dev main 调度记录 #518,状态准备中、尚无条目/窗口;创建命令及结果见任务卡 SELF 收据。 协调者应在试行启动前指定;当前记录不开放领取,也不自动向其他任务分配工作。
必须记录目标、条目、执行者、源 HEAD、依赖、顺序、尝试、最终 base/head、组件清单、
检查定义及相关配置、实际 CI 链接/身份、Review 对象、真实合入结果和暂停/恢复原因。
平台结果先保存于调度记录;本地命令仍用 make evidence 保存完整 SELF 收据。
候选固定后新增命令收据使用源码之外的唯一绝对 RECEIPT 路径,不立即提交进被测分支。
收据之后按已授权闭合流程原样导入;不能手抄、补写或自行提升来源。
候选固定前完成任务卡、必要收据和其他需提交内容,再推送最终 HEAD。 固定后如果必须提交新内容,即使是任务卡,也建立新尝试并核验新 HEAD 的必需 CI;不复用旧提交状态放行。 合入 SHA 和清理结果在实际发生后回填,不能提前将未来合入或清理标为已完成。 闭合 PR 进入同一队列;可在授权范围内批量闭合已合入任务,保留每个真实主 PR 和结果。
拟替换的启动与同步要求
正式采纳时须一起修订根 AGENTS.md、policy/governance.md 与 scripts/task.sh 的对应入口;
不能仅新增本文就宣布以下能力有效。
| 场景 | 拟采用动作 | 当前实现边界 |
|---|---|---|
| 新任务启动 | 保留唯一 precheck 收据与 task-start,从最新权威 main 建独立工作区 |
现有命令保留 |
| 恢复落后任务的局部工作 | 核对现场、授权和落后状态,记录待最终同步;允许已授权局部编辑 | 已实现显式 local/LOCAL_READY 及 task-resume;默认仍严格,流程待采纳启用 |
| 其他任务合入、排队等待 | 更新落后/依赖提示,不自动同步各分支或触发完整 CI | 无自动调度能力,不能宣称已接线 |
| 领取最终交付窗口 | 成功 fetch,运行 make task-sync,实际合并最新 main、处置冲突、物化固定组件 |
使用真实同步及祖先检查,保留脏状态/远端失败拒绝 |
| 窗口内再次到达验收、审核、合入节点 | 再查最新目标和候选;未变只核验,不创建元数据提交 | 已实现同基线不提交,保留组件核对和完整最终 SHA |
| base/head、组件或相关配置变化 | 保留旧结果对象范围,重新建立尝试并按影响补测/复审 | 当前 HEAD 的全部必需 CI 仍必须实际通过 |
SYNC_REQUIRED 不整体降级为 READY;local 与 delivery 用独立结果和验证用途区分。 已同步启动收据验证、恢复入口及回归,写守卫保留原分支检查,不宣称已校验阶段批准。 共享工作区忙、未知远端和活动 Git 操作继续拒绝相应写入。
幂等化的判据是:成功 fetch、目标已包含、递归组件检查通过时,重复核验不改变 HEAD、索引和提交内容; 仍产生可复核的实际输出。任务真正需要纳入新目标时保留 merge 与对应对象记录。 所有候选身份使用必要记录提交完成后的最终 HEAD,不能把记录提交前的 SHA 当作最终被测对象。
拟调整的交付阶段
人工评审和独立 Review 要求不变;提前审阅可以并行,最终有效性核验和受影响重放在窗口内完成。 入队与领取不构成人工批准,也不授权跳过缺失阶段。
| 原阶段 | 采纳后的调度衔接 |
|---|---|
| 1–6 需求、设计、计划、实施 | 各任务并行推进,在既有授权内局部检查;内容就绪时登记交付条目 |
| 7 正式测试与验收 | 领取窗口后实际同步最新 main,固定候选,完成正式验证并取得必要人工结论 |
| 8 代码 Review | 对同一固定候选核验有效 Review、独立重放和问题闭合;同步或整改后按影响复审 |
| 9 合入 | 保持窗口,核验最新 base/head、全部必需 CI 和平台准入,经 PR 合入并查询真实结果 |
| 10 核验与收口 | 核对合入内容和组件后释放窗口;部署、清理另按原授权,闭合 PR 单独排队 |
等待人工结论超过预算时进入 blocked 并安全释放窗口;再次领取时判断原结论及证据是否仍适用。 窗口不得长期持有等待新的需求或方案批准;必要前置安排应在入队时说明。 普通失败和需要决策只阻塞当前条目及依赖项;未知合入结果则保持该目标在 reconciling,先对账。
CI 资源与检查
本草案只定义后续分配要求;.gitea/workflows/ci.yaml 当前行为保持原样。
后续将局部反馈与最终准入的触发和资源安排区分,不通过跳过必需作业返回绿色来节省成本。
当前 workflow 中的 test、test-pg、svc-realcombo 等作业须按最终已批准集合核验;
平台状态上下文的完整名称、运行身份和被测 SHA 从当次实际运行核对,不从历史文档直接照抄。
建议首轮人工试行预算,待本文件及试行计划获批后使用:
- 每个目标一个最终候选;其独立作业可在实际 runner 能力内并行。
- 最大无进展时间 20 分钟,单次窗口预算 90 分钟;有效进展、延长及原因记入尝试。
- 已知基础设施失败最多额外重试一次;代码失败直接退出整改,不自动重复跑完整 CI。
- 等待队列每 30 分钟复查一次;最终准入优先,但不无限延后其他目标、main 验证或发布检查。
- 全局 runner 并发预算在试行前读取实际容量后登记;未核验容量时按现有资源安排,不凭建议数值调整平台。
预算是试行参数,长期值由真实耗时和等待情况复盘决定。 容量不足时先等待 runner,再领取目标窗口;不得持有另一个仓库窗口去等待组件窗口。 取消仅针对失效且归属明确的当前尝试,其他任务有效的局部检查继续运行。
平台与接管边界
现有 平台准入所有者操作 是历史准备材料,执行前仍需当场重验。 最新只读配置观察、命令和对象由本任务 evidence 收据保存;配置读取属于 SELF,不证明拒绝路径已经有效。 本草案不修改分支保护、批准数或白名单。
人工协调期间,全部正常合入者按窗口约定行动。没有执行端覆盖全部写入者及原子准入的正负例时,能力上限为 manual。 发现外部目标推进,立即判定本轮候选失效,保留结果并建立新尝试;不能以目标锁的本地存在绕过平台拒绝。 自动模式未来必须具备原子持久领取和合入入口的旧执行者拒绝;租约到期不直接授权接管。 合入请求超时先核对 PR 和目标真实状态,旧执行者退出后才能安全重试或释放。
需要调整平台保护时,由 Agent 准备具体配置、回退和隔离验证命令,用户按根 AGENTS.md 双钥匙要求确认并亲手执行。 至少验证合法候选可合入,以及缺检查、失败检查、陈旧候选和无权限推进被拒。 人工首版验证旧执行者确认退出后交接及未知结果对账;自动接管启用前另须验证实际合入入口拒绝旧代次。 当前不运行这些平台试验,也不影响其他进行中任务。
采纳顺序与停止条件
- 人工审阅通用候选、Dev 条文及记录模板;确认同步时机、阶段衔接、预算和恢复边界。
- 在通用仓完成候选修订 Review 与其文档验证,按授权经 PR 合入;宿主采纳完整固定 SHA。
- 另行提交实施计划,覆盖 task-sync 幂等化、恢复/写守卫兼容、源码外收据、CI 分配和能力矩阵。
- 在隔离场景完成治理脚本正负例;涉及脚本必须运行
make test-governance。 - 跨仓 gitlink 正式推进前运行 Dev
make test;最终对象的 CI/构建及平台准入遵循现行规则。 - 完成所有者平台操作和对应验证,登记真实协调者与调度 Issue,才切换新交付模式。
- 用三个就绪任务试行,记录同步轮数、CI 次数/耗时、废弃运行、排队和恢复,复盘后决定扩大。
第 2 步规范文本合入或第 5 步指针推进均不自动将新模式标 active/enforced。 迁移期保留现行准入规则,直到新条文、命令和平台条件一致;未满足时暂停模式切换,已授权局部开发可继续。 回退先停止新领取并对账活动合入,再恢复旧同步流程,保留尝试和证据历史。
| 验收 ID | 需验证的行为 | 本轮状态 |
|---|---|---|
| MQ1 | A/B/C 正常顺序交付;各任务轮到后最终同步一次,无外部推进时不因其他正常合入反复跑最终 CI | NOT_RUN(后续隔离试行) |
| MQ2 | 同目标重复领取被拒,不同目标可在资源预算内并行 | NOT_RUN(后续机制验证) |
| MQ3 | 同步后目标未变,重复核验不改 HEAD;固定后记录不改变候选 | 本地 CLI/证据回归已执行(SELF,原始输出见任务卡);平台试行 NOT_RUN |
| MQ4 | 新 HEAD、base 或组合不能使用旧 CI/Review 直接放行 | NOT_RUN(后续正负例) |
| MQ5 | 冲突、代码失败、等待人工决定超时释放窗口,不阻塞无依赖任务 | NOT_RUN(后续试行) |
| MQ6 | 紧急插队有依据,受影响候选失效;跨仓依赖和组件能力不回退 | NOT_RUN(后续试行) |
| MQ7 | 请求超时、协调者退出先对账;不能仅因租约过期让旧新执行者同时合入 | NOT_RUN(后续恢复验证) |
| MQ8 | 平台拒绝未满足准入者,合法固定候选可合入;manual 能力如实登记,自动接管另验证旧代次拒绝 | NOT_RUN(所有者操作后验证) |
| MQ9 | 文档链接、入口、版本、单一来源、状态与模板字段一致 | 本轮执行;原始输出见任务卡 SELF 收据 |
这些验收 ID 用于实施与验收追溯;本分支已完成可独立实施的 CLI/证据基础、规则与模板准备及临时真实 Git 场景自检。固定规范采纳、实际模式切换、平台正负例和真实 CI/三任务试行仍待各自门禁,未执行项保持 NOT_RUN;当前进展与原始证据统一见任务卡。