Draft the final verification and merge scheduling policy

Why: prepare a reviewable delivery window and migration contract that reduces repeated synchronization while preserving final CI and approval requirements.

Evidence: SELF precheck, document checks and read-only platform observations are preserved in .task/feature-merge-queue-policy-draft.md; runtime queue and platform trials remain NOT_RUN.

Impact: proposed policy, project entry and task record only; scripts, workflow, platform protection and guideline gitlink are not changed by this draft.

Refs: policy/merge-queue.md; .task/feature-merge-queue-policy-draft.md
This commit is contained in:
2026-10-13 06:05:13 +00:00
parent 4e7bf52a7a
commit be1f2b98f8
3 changed files with 296 additions and 25 deletions
File diff suppressed because one or more lines are too long
+2
View File
@@ -51,6 +51,8 @@ U2 起实施与部署分别评审。
## 验证
规范修订待审:[最终验证与合入调度 r1](policy/merge-queue.md)。方向已确认,通用候选与 Dev 配套条文待文本评审;当前 gitlink、脚本、CI 和平台模式未切换。
`make test` 先核对子模块工作树与固定指针,再运行治理脚本、公开边界、跨仓指针、库及各模块
测试。实际目标以根 Makefile 为准。`make test-governance` 可独立检查开发门禁,使用临时
真实仓库,不访问生产数据;操作与证据要求见 [开发门禁](policy/governance.md)。
+136
View File
@@ -0,0 +1,136 @@
# 最终验证与合入调度(候选条文 r1)
状态:proposed;日期:2026-10-13(Asia/Shanghai);规范采纳负责人:weichen。
本聊天已确认串行交付窗口的设计方向,授权整理通用规范及 Dev 配套条文;本文件具体条文待人工评审。
现行规则仍以根 AGENTS.md、[迭代交付](delivery.md)、[开发门禁](governance.md) 和已采纳 gitlink 为准。
本草案不启动线上队列,不改变脚本、CI、平台保护或当前 gitlink,也不承诺调度能力已就位。
## 通用规范与项目职责
通用正文的唯一候选来源是 Development-Guidelines 的 `standards/merge-queue.md`,
配套模板为该仓 `templates/merge-queue.md`,候选内容版本 `0.1.0-draft.11`。
本仓仅细化目标、入口、阶段、预算和采纳条件,不复制通用调度正文。
候选尚未合入,当前 `deps/development-guidelines` 未包含上述文件;本文件在通用候选采纳前保持 proposed。
Dev 目标身份使用实际托管实例、仓库 ID 与 `refs/heads/main`;其他组件仓各有自己的目标队列。
跨仓组合按任务中的依赖关系先交付组件,再固定父仓组合;保留其他任务已经合入的 gitlink 能力。
队列仅安排工作,受保护分支最终准入继续由 Gitea 或等价受信入口负责。
## 项目调度记录
采纳后的首版使用每个目标一份 Gitea 调度 Issue,由一个明确协调者维护,标为 manual。
任务卡引用 Issue 条目及尝试标识,原任务仍是授权、需求和阶段的状态权威。
当前尚未创建该 Issue,协调者应在试行启动前指定;不得向既有任务或其他执行者自动发送调度消息。
必须记录目标、条目、执行者、源 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 建独立工作区 | 现有命令保留 |
| 恢复落后任务的局部工作 | 核对现场、授权和落后状态,记录待最终同步;允许已授权局部编辑 | 当前 precheck 的 SYNC_REQUIRED 仍阻断写入;需实施后才能启用新模式 |
| 其他任务合入、排队等待 | 更新落后/依赖提示,不自动同步各分支或触发完整 CI | 无自动调度能力,不能宣称已接线 |
| 领取最终交付窗口 | 成功 fetch,运行 `make task-sync`,实际合并最新 main、处置冲突、物化固定组件 | 使用真实同步及祖先检查,保留脏状态/远端失败拒绝 |
| 窗口内再次到达验收、审核、合入节点 | 再查最新目标和候选;未变只核验,不创建元数据提交 | 当前 task-sync 每次追加并提交记录,幂等化属于后续实施 |
| base/head、组件或相关配置变化 | 保留旧结果对象范围,重新建立尝试并按影响补测/复审 | 当前 HEAD 的全部必需 CI 仍必须实际通过 |
SYNC_REQUIRED 不能被整体降级为 READY。后续应明确区分“允许局部工作”和“允许最终交付”,
并同步修改写守卫、启动收据验证、任务恢复入口及回归用例;共享工作区忙、未知远端和活动 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,再领取目标窗口;不得持有另一个仓库窗口去等待组件窗口。
取消仅针对失效且归属明确的当前尝试,其他任务有效的局部检查继续运行。
## 平台与接管边界
现有 [平台准入所有者操作](platform-admission.md) 是历史准备材料,执行前仍需当场重验。
最新只读配置观察、命令和对象由本任务 evidence 收据保存;配置读取属于 SELF,不证明拒绝路径已经有效。
本草案不修改分支保护、批准数或白名单。
人工协调期间,全部正常合入者按窗口约定行动。没有执行端覆盖全部写入者及原子准入的正负例时,能力上限为 manual。
发现外部目标推进,立即判定本轮候选失效,保留结果并建立新尝试;不能以目标锁的本地存在绕过平台拒绝。
自动模式未来必须具备原子持久领取和合入入口的旧执行者拒绝;租约到期不直接授权接管。
合入请求超时先核对 PR 和目标真实状态,旧执行者退出后才能安全重试或释放。
需要调整平台保护时,由 Agent 准备具体配置、回退和隔离验证命令,用户按根 AGENTS.md 双钥匙要求确认并亲手执行。
至少验证合法候选可合入,以及缺检查、失败检查、陈旧候选和无权限推进被拒。
人工首版验证旧执行者确认退出后交接及未知结果对账;自动接管启用前另须验证实际合入入口拒绝旧代次。
当前不运行这些平台试验,也不影响其他进行中任务。
## 采纳顺序与停止条件
1. 人工审阅通用候选、Dev 条文及记录模板;确认同步时机、阶段衔接、预算和恢复边界。
2. 在通用仓完成候选修订 Review 与其文档验证,按授权经 PR 合入;宿主采纳完整固定 SHA。
3. 另行提交实施计划,覆盖 task-sync 幂等化、恢复/写守卫兼容、源码外收据、CI 分配和能力矩阵。
4. 在隔离场景完成治理脚本正负例;涉及脚本必须运行 `make test-governance`。
5. 跨仓 gitlink 正式推进前运行 Dev `make test`;最终对象的 CI/构建及平台准入遵循现行规则。
6. 完成所有者平台操作和对应验证,登记真实协调者与调度 Issue,才切换新交付模式。
7. 用三个就绪任务试行,记录同步轮数、CI 次数/耗时、废弃运行、排队和恢复,复盘后决定扩大。
第 2 步规范文本合入或第 5 步指针推进均不自动将新模式标 active/enforced。
迁移期保留现行准入规则,直到新条文、命令和平台条件一致;未满足时暂停模式切换,已授权局部开发可继续。
回退先停止新领取并对账活动合入,再恢复旧同步流程,保留尝试和证据历史。
| 验收 ID | 需验证的行为 | 本轮状态 |
|---|---|---|
| MQ1 | A/B/C 正常顺序交付;各任务轮到后最终同步一次,无外部推进时不因其他正常合入反复跑最终 CI | NOT_RUN(后续隔离试行) |
| MQ2 | 同目标重复领取被拒,不同目标可在资源预算内并行 | NOT_RUN(后续机制验证) |
| MQ3 | 同步后目标未变,重复核验不改 HEAD;固定后记录不改变候选 | 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 同时用于后续实施追溯;本轮只交付规范文本,不把未来判据写成已通过。