Merge authoritative main into the documents task branch
Why: the r2 revision must sit on the current documents baseline before Dev sync. Evidence: fetched origin/main=d668a3e0ac345dc80a72d15469f25918c4535ee6. Impact: integrate upstream documents without rewriting task history. Refs: feature/fast-slow-r2-nonblocking
This commit is contained in:
@@ -17,6 +17,7 @@ execution: code
|
||||
- owner 已批准 r0.1 的需求、方案和实施计划并授权 U1–U6 按阶段推进,另批准 E1-R1 隔离追加试验。U1 当前增量已走完阶段 6–10:阶段 6/7 获 owner 人工结论,独立 Review 闭合整改,最终 HEAD 的 GATE 与独立重放核验记录在案,三份交付 PR 均已合入。
|
||||
- RDM 已封装 44 个逻辑原件,owner 分别接受项目建议书、F01、F02、DI 四份确切四哈希包(内容与版式接受,正式发布授权仍未给出);全部 44 项仍 `needs-review`,正式发布数 0。E1/E1-R1 使 14 DOC 均有转换候选,但逐项 Word 保真 **NOT_PASSED**;其余 40 项待包级裁定。F01/F02 的正式类型/存量字典升级及 U2–U6 真实产品流程仍未完成。
|
||||
- U1 当前增量的终态以归档任务卡为准:Dev 仓 `.task/archive/feature-dhf-template-pipeline-plan.md`(随 Dev #542 归档合入)。合入记录:[Documents #102](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/102) merge `9062445db808`、[RDM #365](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/365) merge `57d2214feb0a`、[Dev #540](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/540) merge `11aa76a3bc1c`,三个 main 树各自与受测 head 一致。U1 剩余 40 项包级裁定、14 DOC 保真对照、类型合同与 U2–U6 按本方案顺序继续;此前 WIP/待整改表述与旧 GATE 不再作为放行依据。
|
||||
- **2026-10-14 收口(本轮)**:批量 1–5 包级裁定获 owner「全部按推荐」批复并落档(RDM `docs/records/dhf/package-review-decision-2026-10-14.md`);其余 DOC 11 份(#377)与 DOCX 17 份(#381)四哈希候选包合入,44/44 具备候选包;owner 同轮授权 catalog 翻转,#383 将 44 项全部置 `published`+confirmed+绑定四哈希+issues 全清。U5 交付命令接线与实例播种随 #385 落地,真实产品二进制全链路试点 PASS;U6 逐项验收矩阵随 #387 完成——44/44 入账=41 PASS+2 EXPECTED_BLOCKED(F01/F02 字典门禁,owner 裁定暂缓)+1 EXPECTED_LIMITED(无槽位确认报告,空填充 fail-closed 拒绝实测),0 FAIL;过程中修复 F05/F06 封面双层嵌套缺陷并补登记 11 个批量裁定 docType。卡片 #379/#382/#384/#386/#388/#390/#392 全部归档,RDM main `c5ea0f5`。交接文档 [u6-replay-handoff.md](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/branch/main/docs/records/dhf/u6-replay-handoff.md) 固化 owner 侧三项动作:①部署发布包+三用户真实试点(回传导出 Word SHA256 与审签元数据);②独立审阅者以一键驱动 `scripts/dhf-u6-replay.sh` 完成 R1–R4 重放并签署(作者 SELF 试运行全绿,审阅者重跑方为 REPLAY);③提供带附件/页眉页脚的真实原件路径以启动 U4。独立 REPLAY 与真实环境试点完成前,本方案 DoD 的「试点交付/全量交付」两项维持 owner 阻塞态。
|
||||
|
||||
修订 r0.1;需求负责人 weichen;方案编制 Codex;各仓实施负责人待立项指定。
|
||||
本文件是 DHF 接入专项的评审草案,授权终点为源码/资产调查、方案和计划文档、记忆归档。
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
# Dev main 第二轮 manual 合入调度实施与测试计划
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** 让第二轮三个已授权真实任务在同一人工窗口中按序完成最终同步、审核、CI 与智能体合入,同时把所有已知 Dev main 写入及失败退出记录在唯一调度 Issue;正常排队推进不使等待分支反复重跑最终 CI。
|
||||
|
||||
**Architecture:** 保留现有 Gitea 分支保护、三项 PR 检查和 `task-sync`;Dev `policy/` 仅说明项目采纳、写者覆盖、记录字段及停止条件。Issue #518 是动态窗口唯一来源,原任务卡保留授权与阶段结论。只读对账从实际 main PR/合入列表反查 #518 的先前领取与事后释放;无原子锁、无自动调度服务。
|
||||
|
||||
**Tech Stack:** Git/Gitea 1.27 API、Dev `make precheck`/`make evidence`/`make task-sync`、Markdown 规范与 JSON 收据、现有 `.gitea/workflows/ci.yaml`。
|
||||
|
||||
**Spec:** [已批准的阶段 4 设计](2026-10-14-merge-queue-manual-phase2.md),Documents PR #104(合入 `8e3b5b0d2838f89430683ec731a15b32b4fa5eae`);[首轮报告](../records/2026-10-14-merge-queue-trial.md)与 Dev #518 是历史与动态证据,不能以本计划代替实时回读。
|
||||
|
||||
## Global Constraints
|
||||
|
||||
- 范围仅为 Dev 仓库 ID=29、`refs/heads/main`;普通、闭卡、紧急和机器人目标写入都纳入同一记录。组件仓按自身目标协调。
|
||||
- 第二轮样本为**随后实际就绪的三个已授权真实任务**;闭卡单列。#482、#512、#537 不因本计划自动取得接管或合入授权。
|
||||
- 现有 Gitea 保护、必需检查、CI workflow 和 runner 全局配置保持不变;最终 PR HEAD 的 `test`、`test-pg`、`svc-realcombo` 均须取得真实 GATE。
|
||||
- 采用单一协调者维护的 `manual` 窗口。Issue 编辑、评论、`content_version` 和本地锁都不是平台原子互斥;旧执行者未确认退出时不得接管。
|
||||
- 无进展 20 分钟、单窗口 90 分钟、已知基础设施失败最多额外重试一次、队列每 30 分钟复核;领取前当场核对 runner 容量。
|
||||
- 阶段 5–7 依 `policy/delivery.md` 分别取得人工结论;阶段 8–9 由智能体审阅、核验精确 HEAD 与平台准入并合入。阶段 5 批准不等于第二轮已启用。
|
||||
- 所有通过断言区分 GATE、REPLAY、SELF;本地输出经 `make evidence` 写入,固定后收据置于源码外;未知结果先读回,不盲目重复副作用请求。
|
||||
|
||||
## Review Focus
|
||||
|
||||
1. **已知写者仍从另一入口推进 main:**任务 2 的对账应查到实际合入但缺先前领取,暂停新领取并标记受影响候选失效。
|
||||
2. **Issue 中只有事后补记:**任务 2 的对账应区分先前领取与事后释放;#539 不能被算作合格覆盖。
|
||||
3. **候选固定后内容或 base 变化:**任务 3 的核验应建立新尝试,并拒用旧 Review/CI;同基线重复 `task-sync` 应保持 HEAD 不变。
|
||||
4. **合入响应未知或协调者失联:**任务 3 应先回读 PR/main 并保持 `reconciling`,确认前执行者退出后才释放/交接。
|
||||
5. **没有三个已就绪任务:**任务 4 应保持 `waiting`,不接管 #482/#512 或制造生产 PR,不把缺样本写为通过。
|
||||
|
||||
| 设计验收 | 计划中的主要验证 |
|
||||
|---|---|
|
||||
| M2-1 | 任务 2 入队字段、任务 4 三个真实任务与等待期间最终 CI 清单 |
|
||||
| M2-2 | 任务 2 的逐合入只读对账、任务 4 每次 main 推进后的覆盖核对 |
|
||||
| M2-3 | 任务 3 的同基线无变更与变更后新尝试重放 |
|
||||
| M2-4 | 任务 3 的精确 HEAD 三项 GATE/智能体合入、任务 4 的每任务对象记录 |
|
||||
| M2-5 | 任务 4 对正常排队造成的最终 CI 废弃数和所有 CI 成本分类 |
|
||||
| M2-6 | 任务 2/3 的异常决策表与任务 4 的自然退出/`NOT_RUN` 记录 |
|
||||
|
||||
---
|
||||
|
||||
### Task 1: 固定实施范围与 Dev 规范入口(M2-1、M2-3)
|
||||
|
||||
**Files:**
|
||||
- Modify: Dev `policy/merge-queue.md` 的状态、项目调度记录、启动与同步、采纳顺序及验收表。
|
||||
- Modify: Dev `policy/adoption.md` 中合入调度采纳行。
|
||||
- Modify: Dev `policy/tool-adaptation-matrix.md` 的 A10/A11 行。
|
||||
- Read only: Dev `AGENTS.md`、`policy/delivery.md`、`policy/governance.md`、Guidelines 固定版 `standards/merge-queue.md`。
|
||||
|
||||
**Interfaces:** 仅细化已固定通用规范,不改 `task-sync`、`make evidence` 或 CI 接口。规范链接指向 Documents 阶段 4 设计和 #518;`policy/adoption.md` 区分“规范已合入”“第二轮待启用”“manual 能力”;A10 说明 Issue 协作与平台准入的不同强度。
|
||||
|
||||
- [ ] 在 Dev 当前 main 创建未占用收据路径,运行下列启动门禁并确认 READY;按输出读必读规范。新任务用同一收据建独立工作区,记录 R0 与写者归属;若任务已登记则在原 worktree 改用 `make task-resume PRECHECK_RECEIPT="$mq_receipt"`,不重复开卡。BUSY、SYNC_REQUIRED、REMOTE_UNVERIFIED 先排除。
|
||||
|
||||
```bash
|
||||
mq_receipt="/tmp/mq-phase2-stage6-precheck-$(date -u +%Y%m%dT%H%M%SZ)-$$.json"
|
||||
RECEIPT="$mq_receipt" CMD='make precheck' make evidence
|
||||
make task-start NAME=feature/merge-queue-manual-phase2 PRECHECK_RECEIPT="$mq_receipt"
|
||||
```
|
||||
- [ ] 对照当前 Dev main、Guidelines gitlink、#518 与已合入设计。把 `policy/merge-queue.md` 首轮“本轮三个任务待完成”“本分支”等已过期时态改为历史结果,把第二轮规则明确标为 `approved/pending-activation`,并逐项写明 `ready_at`、`queue_entered_at`、`attempt_id`、`initial_base_sha`、`source_head_sha`、`sync_base_sha`、`frozen_head_sha`、组件/检查定义、Review 与 GATE、实际合入/释放。动态值只在 #518,不复制静态队列表。
|
||||
- [ ] 在 `policy/adoption.md` 与 A10/A11 中指向同一设计及项目规则:保留首轮原始证据范围;第二轮标 `manual`、`pending-activation`,不可升级成 `enforced` 或声称自动互斥;现有源码外收据能力保持原样。
|
||||
- [ ] 检查 `AGENTS.md` 与 `policy/delivery.md` 对合入窗口及阶段 7–9 的指向。若现有入口已覆盖,只记录无需修改;若确有入口断链,按文档范围补链接并将变化列入 Review。
|
||||
- [ ] 运行 `git diff --check`、Markdown 相对链接检查和规则一致性检查:阶段 5 批准后尚未启用、缺写者覆盖时必须保持 waiting、三个必需检查没有删减。若动到治理脚本或任务卡模板,另运行 `CMD='make test-governance' make evidence`;纯文档不制造新脚本测试。
|
||||
- [ ] 将本单元源码与 SELF 检查收据写入原任务卡并提交;阶段 6 人工评审前不把 #518 标为第二轮 active。
|
||||
|
||||
### Task 2: 建立 #518 入队模板与只读覆盖对账(M2-1、M2-2、M2-6)
|
||||
|
||||
**Files:**
|
||||
- Modify: Dev `policy/merge-queue.md` 的记录示例、写者覆盖、异常与暂停规则。
|
||||
- Prepare then update after Stage 6 approval: Gitea Dev Issue #518 正文的第二轮入口与追加式评论模板;不建立第二份队列状态文件。
|
||||
- Save outside source: 每次只读 Gitea API 对账的原始脱敏 JSON/`make evidence` 收据;必要结论只引用对象和链接。
|
||||
|
||||
**Interfaces:** #518 条目至少包含 `entry_id`、目标、PR/任务卡、owner/协调者、授权与阶段版本、依赖、`queue_entered_at`、`ready_at`、状态;领取评论补 Task 1 的 attempt 字段;释放评论补实际 PR/main SHA、合入结果及 GATE 链接。`ready_at` 未知标 `NOT_MEASURED`,不足条件标 `blocked`。
|
||||
|
||||
- [ ] 只读查询 Dev 当前 main SHA、开放 PR、仓库协作者、可写工作区 owner、机器人/webhook/workflow 入口、#518 正文与评论,生成带观察时间和对象 SHA 的 SELF 清单;无法查到的写者类别标“未核验”,不推断不存在。
|
||||
- [ ] 在 Task 1 规范中给出普通、闭卡、紧急、机器人共同的入队/领取/释放字段,规定 `blocked` 不占窗口;跨仓组件未就绪不占 Dev 窗口。未知来源与旧执行者未退出必须暂停或 `reconciling`,不得靠 20 分钟超时接管。
|
||||
- [ ] 固定只读对账步骤:枚举观察区间内实际合入 Dev main 的 PR/merge SHA;逐个在 #518 找**合入前**同目标同 attempt 的领取和**合入后**释放;同时反查 Issue 中仍占用但 PR 已关闭/合入的窗口。分列“合格、仅事后补记、未找到、结果不明”,保留 API 原始响应与分页范围。
|
||||
- [ ] 用 [阶段 4 SELF 快照](../records/2026-10-14-manual-phase2-source-audit.json) 回放对账口径:#539 属“仅事后补记”,#540/#542 能找到领取/释放,其余七个仅可记“在该次 #518 观察中未找到”;不得倒推出其他渠道绝无协调。源记录更新后另取实时快照,不用历史快照证明当前覆盖。
|
||||
- [ ] 将模板与覆盖清单先作为 Dev PR/任务卡可审附件;Stage 6 人工确认后才更新 #518 的**待启用**入口。写入前读回 `content_version` 与活动窗口,遇到别人更新先重算差异;请求结果未知先 GET 对账,不重复 PATCH/POST。
|
||||
- [ ] 当场向每位**已知目标写者**核实采用同一窗口的确认;未确认类别逐项留记录。没有全体已知写者覆盖,不转 active、不领取三个样本。人工确认不等于 Gitea 执行端隔离。
|
||||
|
||||
### Task 3: 用现有门禁交付 Dev 规则并验证异常边界(M2-3、M2-4)
|
||||
|
||||
**Files:**
|
||||
- Modify: Task 1/2 的 Dev 规则差异及原任务卡(仅在候选固定前)。
|
||||
- Save outside source: 最终 precheck、task-sync、直接相关检查、Review 和 CI 的原始收据及对象索引。
|
||||
|
||||
**Interfaces:** 复用 `make task-sync`、`make evidence`、Gitea PR/Actions 与现有分支保护;不新增自动队列或跳过 CI 的入口。
|
||||
|
||||
- [ ] 在阶段 6 人工通过后,正式测试前对 Dev 规则 PR 执行一次 `make task-sync`,处理真实冲突、确认组件不回退,先写完任务卡和需提交证据,再固定并推送 PR HEAD。若有脚本/模板改动跑 `make test-governance`,Dev 组合按变更影响跑 `make test`/`make build`,由 `make evidence` 保存完整 SELF 输出。
|
||||
- [ ] 在临时真实 Git 场景复核同 base/head 重复 `task-sync` 的 HEAD、索引和组件不变;目标前进或候选内容变时,新 attempt 的 base/head 与旧 CI/Review 不同,旧结果不能放行。若本增量未改同步脚本,引用现有治理回归并做最小重放,不重复整个历史试行。
|
||||
- [ ] 用只读或隔离模拟验证异常决策表:未登记 main 推进→暂停及候选失效;合入 API 超时/断连→`reconciling` 并先读 PR/main;代码/Review 失败→当前条目 blocked 并安全释放;未发生真实生产故障的路径只标模拟或 `NOT_RUN`。
|
||||
- [ ] 阶段 7 人工审阅固定候选与测试映射后,由智能体完成阶段 8 Review 与影响重放;阶段 9 合入前再次同步核对最新 base/head/组件及当次要求的 GATE 身份、SHA、三项结果。合入请求固定 `head_commit_id` 且 `force_merge=false`,回读 PR/main 树与合入 SHA。若候选改变,重新测试及受影响评审,不沿用旧绿灯。
|
||||
- [ ] 把实际阶段 6/7/8/9 结果及 GATE/REPLAY/SELF 来源写入原任务记录;规则 PR 合入并不自动启用第二轮任务窗口。
|
||||
|
||||
### Task 4: 第二轮启用、三任务试行与收口(M2-1–M2-6)
|
||||
|
||||
**Files:**
|
||||
- Update dynamically: Gitea Dev Issue #518 与每个**原任务**的任务卡/PR。
|
||||
- Create after actual observation: Documents `docs/records/<实际日期>-merge-queue-manual-phase2-trial.md`;与 #518 互链,不复制动态队列状态。
|
||||
- Update only after result review: Dev `policy/adoption.md`、`policy/tool-adaptation-matrix.md` 的实际能力和状态(若有变化)。
|
||||
|
||||
**Interfaces:** Task 2 的 #518 模板;每个任务原有人工阶段与接管授权;固定 PR HEAD 的三项 GATE;智能体合入入口。此任务不承担其他任务业务代码实现。
|
||||
|
||||
- [ ] 在规则 PR 合入、#518 模板已登记、已知目标写者确认覆盖、无活动/未知窗口、runner 容量当场核验后,由负责人审阅启用条件与当前清单,再把第二轮从 `pending-activation` 切为 `manual active`。缺任何条件保持 `waiting`,继续独立局部开发。
|
||||
- [ ] 只让三个**实际就绪且已有自身实施/合入授权**的任务依 `queue_entered_at`/`ready_at` 顺序入队;协调者在领取前核对原卡阶段结论、PR head、依赖、组件与其他写者退出。#482/#512 只有重新满足这些条件才可参与,不能因本计划自动接管。
|
||||
- [ ] 每次领取后按 Task 3 固定并通过当前 HEAD 必需检查、Review 与人工阶段结论,智能体串行合入并释放;闭卡 PR 使用独立窗口,成本单列。每 30 分钟复查等待队列,记录 runner 等待与人的依赖/准备等待;时间缺失记 `NOT_MEASURED`。
|
||||
- [ ] 每次 main 实际推进后运行 Task 2 只读覆盖对账;发现未登记合入、并行窗口、对象不符、旧执行者未退出接管或来源伪造时立即暂停新领取,先核清受影响候选和写者。未知合入结果不重发 POST。已合入成果不自动回退。
|
||||
- [ ] 三项完成或触发停止条件时,按 M2-1–M2-6 列每个真实任务的最终 base/head、同步/新尝试原因、Review、GATE、合入树、开发/最终/main push/组件/闭卡 CI 次数与耗时、废弃原因;仅正常已登记顺序推进造成的最终 CI 废弃数作为目标指标。没有可比历史基线时不报告节省百分比,未发生的退出路径记 `NOT_RUN`。
|
||||
- [ ] 用户评审第二轮报告后决定继续 manual、调整预算、停止或另立自动准入;仅实际合入与经核验的能力可更新 Dev 采纳/矩阵。阶段 10 的安全回收按工作区 owner 和 `task-finish` 现场检查执行,任务闭合经有授权的 `task-close` 与智能体 PR 合入;保留所有原始收据。
|
||||
|
||||
## Stage 5 decision and stop rule
|
||||
|
||||
2026-10-14,负责人 weichen 在本任务会话中对 Documents 草稿 PR #105 的计划稿 `28c4ceb17315e1bb06f8e39c8407eb525effb8fe` 回复“通过阶段 5”,并选择由当前智能体逐项实施。批准覆盖本计划的阶段 6 候选编制与自检,不替代阶段 6–7 的人工结论,也不等于 #518 第二轮 active。任何实施中发现原子互斥、角色隔离或执行端 fencing 被要求为通过条件,应停止扩围并回到阶段 4 重设计,不能靠文字提升 `manual` 能力。
|
||||
@@ -0,0 +1,74 @@
|
||||
# Dev main 合入调度第二轮 manual 扩围设计
|
||||
|
||||
状态:**阶段 4 方案设计与[阶段 5 实施计划](2026-10-14-merge-queue-manual-phase2-implementation-plan.md)均已通过;阶段 6 实施待评审**。2026-10-14,负责人 weichen 在本任务会话中对 Documents 草稿 PR #104 的规范稿 `aa4d372f01d0473928c570aa69c09ca771f2de45` 明确回复“通过阶段 4”,随后对 PR #105 的计划稿 `28c4ceb17315e1bb06f8e39c8407eb525effb8fe` 回复“通过阶段 5”,选择由当前智能体实施。这些批准不等于启用第二轮窗口或接管其他任务。执行协调者须在每个窗口明确登记。本文只设计 Dev 仓 `refs/heads/main` 的下一轮人工调度,不启用自动队列。
|
||||
|
||||
主记录:[Dev 调度 Issue #518](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/issues/518);既有规则:[Development-Guidelines 固定版合入调度](https://git-home.u1680832.nyat.app:30319/weichen/Development-Guidelines/src/commit/2f5b19872be2a4597838a4131ad75d1be089ee5e/standards/merge-queue.md)、[Dev 项目细化](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/src/branch/main/policy/merge-queue.md);首轮结果:[三任务试行报告](../records/2026-10-14-merge-queue-trial.md)。本稿为下一轮范围与验收设计;动态队列状态只维护在 #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 观察快照](../records/2026-10-14-manual-phase2-source-audit.json),原始本机文件 `/tmp/mq-manual-expansion-audit-20261014.json`)显示:这十个 PR 均已合入;[#540](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/540)、[#542](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/542) 有窗口领取与释放记录;#539 只有合入后的事实记录;其余七个在当前 #518 正文与所返回的评论中找不到对应 PR 的窗口记录。这是**记录覆盖缺口**,不等于断言这些合入未经其他人工协调。它使“所有 Dev main 写入者都受同一 manual 窗口控制”的结论无法成立。
|
||||
|
||||
[#537](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/537) 曾取得旧候选绿色 GATE,但 Stage 8 审阅判为 `NOT READY`,窗口释放,后由用户取消且 PR 未合入;该例证明 CI 与人工阶段结论须分别核验。[#542](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/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 评审及实际写者覆盖核验约束。
|
||||
@@ -0,0 +1,80 @@
|
||||
# svc 插件组合部署(--with)方案 r1
|
||||
|
||||
状态:**待评审**。日期:2026-10-14。负责人:weichen。
|
||||
任务卡:Dev `.task/feature-svc-plugin-compose.md`。
|
||||
需求来源:部署时用交互或参数选择把哪些插件与基座编译成同一个二进制服务,并在服务中激活这些插件。
|
||||
|
||||
## 1. 范围
|
||||
|
||||
做:
|
||||
|
||||
- 每次 `svc.sh` 的 agent deploy 可以选择零个或多个已登记插件。
|
||||
- 被选中的插件与 `--from` 指定的 Dev 基座编译成一个仍名为 `agent-system` 的二进制。
|
||||
- 部署后校验这些插件已注册且命令面处于启用;失败走现有 release 回退。
|
||||
- 插件清单来自 Dev 仓 `plugins/registry.json`,不自动发现。
|
||||
|
||||
不做:
|
||||
|
||||
- 不做 sidecar,不把插件部署成独立服务。
|
||||
- 不让插件自带基座 pin。基座就是本次 `--from` 的 Dev 提交;对不上就构建失败并报原因。
|
||||
- 第一版最多一个带静态工作台(`web`)的插件。
|
||||
- 不删除旧的 `--from rdm`。它仍用 RDM 仓自己的 `pins/` 构建,与 `--with` 互斥。
|
||||
|
||||
## 2. 步骤 0 试验结论(不留代码)
|
||||
|
||||
2026-10-14 在 `/tmp/svc-compose-spike` 复制当前 Dev 的 backend 模块,空白导入
|
||||
`agent-system-rdm/plugins/rdm`(指向 `~/.cache/agent-system-svc/rdm-src`),
|
||||
`go mod edit -require/-replace` 后执行 `CGO_ENABLED=0 go build -mod=mod`。
|
||||
|
||||
- 构建成功。产物约 40MB,`version` 仍是基座的 `agent-system 0.1.0-dev`。
|
||||
- `go version -m` 显示主模块 `agent-system-backend`,依赖 `agent-system-rdm v0.0.0`。
|
||||
- 二进制内可见 `rdm.project.create` 与 `rdm.ping`。
|
||||
- 聚焦依赖(`golang.org/x/*`、`github.com/jackc/*`、`modernc.org/sqlite`、`gopkg.in/yaml`)版本无变化。
|
||||
- 新增模块只有 `agent-system-rdm`、`github.com/kr/text`、`github.com/rogpeppe/go-internal`。
|
||||
- 默认 `-mod=readonly` 会拒绝更新 `go.mod`/`go.sum`,组合构建必须使用 `-mod=mod`。
|
||||
- 依赖模块自己的 `replace` 不生效,插件按主模块(Dev 基座)解析 `agent-system-backend`。这正是“基座以 Dev 提交为准”所要的结果。
|
||||
|
||||
试验目录是一次性的,不进入任何仓库。
|
||||
|
||||
## 3. 行为
|
||||
|
||||
### 3.1 选择
|
||||
|
||||
- `--with rdm,foo` 选择插件;`--with rdm@<sha>` 钉住单个插件提交;`--with none` 明确不带插件。
|
||||
- 标准输入是终端且没有 `--with` 时,按登记表给出编号勾选。默认勾选上次 `svc.env` 的 `plugins=`;第一次默认不选。回车接受默认,`none` 清空。
|
||||
- 非交互且没有 `--with`:沿用上次选择,没有则不带插件。已有脚本和 CI 的行为不变。
|
||||
- `--dry-run` 打印基座提交和每个插件的提交,不构建。
|
||||
- `--from rdm` 与 `--with`(除 `none`)互斥。`--from release` 不能再注入插件。
|
||||
|
||||
### 3.2 构建
|
||||
|
||||
1. 物化 Dev 提交的隔离 worktree,并完成前端构建,使嵌入资源就绪。`--from local` 不改主检出的 `go.mod`:把 backend 模块复制到 `runtime/.worktrees/` 再构建。
|
||||
2. 每个插件使用独立源仓缓存(`~/.cache/agent-system-svc/plugin-<id>`,`repoEnv` 可覆盖克隆地址)并物化 worktree。
|
||||
3. 在这份一次性 backend 副本里生成 `cmd/agent-system/zz_plugins_gen.go`(空白导入 `entryPackage`),并用 `go mod edit` 增加 `require` 与 `replace`。
|
||||
4. `go build -mod=mod` 产出 `agent-system`。基座的 `version`、身份和 `user` 等子命令保持不变。
|
||||
5. 测试可设 `SVC_COMPOSE_STUB=1`,跳过真实 `go build`,只记录插件选择。这不是生产路径。
|
||||
|
||||
### 3.3 激活与记录
|
||||
|
||||
- `GET /api/plugins` 与 `GET /api/registry` 的 `compiled` 列表必须包含每个所选插件。
|
||||
- `GET /api/commands` 中该插件 `commandPrefix` 下至少有一条 `enabled` 命令。
|
||||
- 插件在而命令全部禁用时,用与设置播种相同的临时管理员 key 调用 `POST /api/plugins/{id}/enabled`,再复查。失败则 `svc_rollback_deploy`。
|
||||
- `svc.env` 写 `plugins=id@sha,id@sha`。`source` 形如 `dev@<sha>+rdm@<sha>`。release 目录的 `release.json` 带同一 `plugins` 字段。
|
||||
- `update` 把基座升到远端最新,并原样带上已记录的 `--with`,不再询问。`recover` 只拉起已有二进制,不重新选择。
|
||||
- 插件 id 集合变化(含从无到有、从有到无)与源种类变化一样,需要 `--allow-source-switch`。只改提交不需要。
|
||||
|
||||
### 3.4 工作台
|
||||
|
||||
登记表里 `web` 非空的插件,沿用现有伴生 static 服务(`<name>web`)。多于一个带 `web` 的插件直接拒绝。
|
||||
|
||||
## 4. 跨仓
|
||||
|
||||
- Backend:`extension.InProc` 增加可选 `HostOptions` 与 `CLI`。布尔默认按“任一为 true”合并,不覆盖显式 serve 旗标。`GET /api/registry` 增加 `compiled`。
|
||||
- RDM:`plugins/rdm` 在 `InProc` 上声明 `HostOptions`(含关闭上传自动索引、会话卡镜像、执行原语)和 `-bootstrap-admin` 钩子。RDM 自己的 `main.go` 继续可用,旧 `--from rdm` 不依赖这次钩子。
|
||||
- Dev:`scripts/svc.sh`、`plugins/registry.json`、`docs/svc.md`、`help plugins`、`tests/test_svc_plugins.py`,并推进 backend 与 documents 的 gitlink。
|
||||
|
||||
## 5. 验收
|
||||
|
||||
- 登记、选择、换源门禁、dry-run、stub 部署与激活走 `tests/test_svc_plugins.py`。
|
||||
- Backend 的合并与 CLI 钩子走 `go test ./pkg/extension/`。
|
||||
- 真实 `go build` 组合(Dev 提交 + RDM 提交)在步骤 0 已证实可编译。带网络的完整 `svc deploy --with rdm` 与 `make test-lifecycle` 不在本增量的 stub 套件里,未在本机再跑时标 NOT_RUN。
|
||||
@@ -4,6 +4,8 @@
|
||||
本索引负责导航与差异提示,规划正文、批准范围和验收条件仍以链接的主记录及其批准版本为准。
|
||||
合入授权不批准新方向、不调整里程碑范围、不启动新的业务任务。
|
||||
|
||||
待评审(收录不是批准):[svc 插件组合部署(--with)方案 r1](2026-10-14-svc-plugin-compose-deploy.md)。
|
||||
|
||||
## 先看哪一份
|
||||
|
||||
- [IAM I1 权限边界与公开扩展合同 r1](2026-10-13-iam-i1-permission-contract.md):
|
||||
|
||||
@@ -0,0 +1,210 @@
|
||||
{
|
||||
"source": "SELF",
|
||||
"observed_at_utc": "2026-10-14T14:13:54.776253+00:00",
|
||||
"repo": "weichen/Agent-System-Dev",
|
||||
"main_sha": "e1bc2602e18a89e4d75a4bf6cd80bc7f9b4d2164",
|
||||
"queue_issue": 518,
|
||||
"issue_content_version": 34,
|
||||
"issue_updated_at": "2026-10-14T13:41:21Z",
|
||||
"active_window": "- 当前窗口:无(mq-dev-20261014-537-01 因独立 Stage 8 Review 的三项 Important 整改与安全设计重审,于 2026-10-14T06:06:23.872984+00:00 主动释放)。旧固定 head=6a2f7cd3e610a263b6348efe9084e386dc88f30c / base=4f84c2e1630cd0311643529fae1c3a99f1dd5d64 的 GATE run3076/3077、阶段7人工批准均只对应旧对象;PR #537 已按用户撤销指示关闭,迁移专用远端与本地分支已删除;该任务不再排队。旧 GATE 和阶段结论仅为历史记录。",
|
||||
"branch_protection": {
|
||||
"enable_push": false,
|
||||
"enable_force_push": false,
|
||||
"block_on_outdated_branch": true,
|
||||
"enable_status_check": true,
|
||||
"status_check_contexts": [
|
||||
"ci / test (pull_request)",
|
||||
"ci / test-pg (pull_request)",
|
||||
"ci / svc-realcombo (pull_request)"
|
||||
],
|
||||
"required_approvals": 0,
|
||||
"block_admin_merge_override": true
|
||||
},
|
||||
"post_trial_prs": [
|
||||
{
|
||||
"number": 539,
|
||||
"merged": true,
|
||||
"merge_sha": "d40579ed7fe3bbca68d3c6fcd1bce6707688d59e",
|
||||
"merged_at": "2026-10-14T06:40:54Z",
|
||||
"head_sha": "3b0e100fba149dbb29066c2ca3d2a74bbe1d4443",
|
||||
"issue_body_ref": false,
|
||||
"issue_comment_refs": [
|
||||
{
|
||||
"id": 6017,
|
||||
"created_at": "2026-10-14T06:42:12Z",
|
||||
"head": "<!-- facts-539-merge-record-20261014T0700Z -->"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"number": 540,
|
||||
"merged": true,
|
||||
"merge_sha": "11aa76a3bc1c5047791f9a2de154e451634b6567",
|
||||
"merged_at": "2026-10-14T08:08:07Z",
|
||||
"head_sha": "889f64f88167a5314ebfa42a41f9c7a57f91b404",
|
||||
"issue_body_ref": false,
|
||||
"issue_comment_refs": [
|
||||
{
|
||||
"id": 6025,
|
||||
"created_at": "2026-10-14T07:02:56Z",
|
||||
"head": "<!-- dhf-u1-stage7-wip-20261014-01a137f8 -->"
|
||||
},
|
||||
{
|
||||
"id": 6059,
|
||||
"created_at": "2026-10-14T08:04:24Z",
|
||||
"head": "<!-- mq-dev-20261014-dhf-u1-01-claim -->"
|
||||
},
|
||||
{
|
||||
"id": 6066,
|
||||
"created_at": "2026-10-14T08:09:12Z",
|
||||
"head": "<!-- mq-dev-20261014-dhf-u1-01-release -->"
|
||||
},
|
||||
{
|
||||
"id": 6097,
|
||||
"created_at": "2026-10-14T08:32:38Z",
|
||||
"head": "<!-- mq-dev-20261014-dhf-cardclose-01-claim -->"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"number": 541,
|
||||
"merged": true,
|
||||
"merge_sha": "d23fb4363dcc0a206e71e47f9cd23a644c7e1c70",
|
||||
"merged_at": "2026-10-14T07:33:18Z",
|
||||
"head_sha": "221afaeb169b826ecd38567296319c20c0e94b18",
|
||||
"issue_body_ref": false,
|
||||
"issue_comment_refs": []
|
||||
},
|
||||
{
|
||||
"number": 542,
|
||||
"merged": true,
|
||||
"merge_sha": "7e9ebdea5055a63c713ccc0fb1f938ffe35a6b9d",
|
||||
"merged_at": "2026-10-14T08:46:12Z",
|
||||
"head_sha": "60d48e0580a36b2e6f93c77bb1edbe9bd0be342e",
|
||||
"issue_body_ref": false,
|
||||
"issue_comment_refs": [
|
||||
{
|
||||
"id": 6097,
|
||||
"created_at": "2026-10-14T08:32:38Z",
|
||||
"head": "<!-- mq-dev-20261014-dhf-cardclose-01-claim -->"
|
||||
},
|
||||
{
|
||||
"id": 6106,
|
||||
"created_at": "2026-10-14T08:35:39Z",
|
||||
"head": "<!-- mq-dev-20261014-dhf-cardclose-02-replacement -->"
|
||||
},
|
||||
{
|
||||
"id": 6117,
|
||||
"created_at": "2026-10-14T08:47:12Z",
|
||||
"head": "<!-- mq-dev-20261014-dhf-cardclose-02-release -->"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"number": 543,
|
||||
"merged": true,
|
||||
"merge_sha": "da93edf23408ca871ae489ac2123e10734c24413",
|
||||
"merged_at": "2026-10-14T09:24:42Z",
|
||||
"head_sha": "deac1025f1810d7a535c44a16dd6368eb652c979",
|
||||
"issue_body_ref": false,
|
||||
"issue_comment_refs": []
|
||||
},
|
||||
{
|
||||
"number": 544,
|
||||
"merged": true,
|
||||
"merge_sha": "2dbe11c5d970e7d6a71d0ce1a00eb399bfbbd427",
|
||||
"merged_at": "2026-10-14T09:00:43Z",
|
||||
"head_sha": "b926c701f261995b6e1acabf277bbfdfa47829ca",
|
||||
"issue_body_ref": false,
|
||||
"issue_comment_refs": []
|
||||
},
|
||||
{
|
||||
"number": 545,
|
||||
"merged": true,
|
||||
"merge_sha": "c8eead49c5e68b2e295927c0e82cc57bcb04bad5",
|
||||
"merged_at": "2026-10-14T09:10:29Z",
|
||||
"head_sha": "00b35c5e6f5e0a0bc8072ff5c8c56378e6641d85",
|
||||
"issue_body_ref": false,
|
||||
"issue_comment_refs": []
|
||||
},
|
||||
{
|
||||
"number": 546,
|
||||
"merged": true,
|
||||
"merge_sha": "3538d40f45ad5a7c779426eb3322f79751db380c",
|
||||
"merged_at": "2026-10-14T09:40:57Z",
|
||||
"head_sha": "4a15fa0ceadf716fb93cc2966f099f3915b5f9d9",
|
||||
"issue_body_ref": false,
|
||||
"issue_comment_refs": []
|
||||
},
|
||||
{
|
||||
"number": 547,
|
||||
"merged": true,
|
||||
"merge_sha": "bcf225d0b981dcd69f8c736010c69b6a92d04341",
|
||||
"merged_at": "2026-10-14T09:53:34Z",
|
||||
"head_sha": "8522502e6e6db7a438a8f6fd391e1aa334c7a161",
|
||||
"issue_body_ref": false,
|
||||
"issue_comment_refs": []
|
||||
},
|
||||
{
|
||||
"number": 548,
|
||||
"merged": true,
|
||||
"merge_sha": "e1bc2602e18a89e4d75a4bf6cd80bc7f9b4d2164",
|
||||
"merged_at": "2026-10-14T10:05:47Z",
|
||||
"head_sha": "b89dd1c20ef4aa5c93a144f00e722a81dee87a50",
|
||||
"issue_body_ref": false,
|
||||
"issue_comment_refs": []
|
||||
}
|
||||
],
|
||||
"open_prs": [
|
||||
{
|
||||
"number": 512,
|
||||
"draft": true,
|
||||
"mergeable": false,
|
||||
"head_sha": "89125b8dda5f8f988a8a760ed64bf00827e1de5c",
|
||||
"base_sha": "e1bc2602e18a89e4d75a4bf6cd80bc7f9b4d2164",
|
||||
"title": "[WIP] Deliver progressive U2/U3 work with reliable sourced checkpoints"
|
||||
},
|
||||
{
|
||||
"number": 482,
|
||||
"draft": false,
|
||||
"mergeable": false,
|
||||
"head_sha": "d5e8d6ab7a368f08b29e968b6f65f8898f2b28f5",
|
||||
"base_sha": "e1bc2602e18a89e4d75a4bf6cd80bc7f9b4d2164",
|
||||
"title": "Pin the SQLite activity guard and document its refusals"
|
||||
}
|
||||
],
|
||||
"selected_runs": [
|
||||
{
|
||||
"run": 3088,
|
||||
"head_sha": "6463ef430640c56940b82776adb504ee272f030c",
|
||||
"status": "completed",
|
||||
"conclusion": "success",
|
||||
"started_at": "2026-10-14T07:02:04Z",
|
||||
"completed_at": "2026-10-14T07:09:41Z"
|
||||
},
|
||||
{
|
||||
"run": 3092,
|
||||
"head_sha": "889f64f88167a5314ebfa42a41f9c7a57f91b404",
|
||||
"status": "completed",
|
||||
"conclusion": "success",
|
||||
"started_at": "2026-10-14T07:49:37Z",
|
||||
"completed_at": "2026-10-14T07:58:00Z"
|
||||
},
|
||||
{
|
||||
"run": 3100,
|
||||
"head_sha": "7dd8d0f52ed930fbcabc05f5c4b1fb2b41b10bc5",
|
||||
"status": "completed",
|
||||
"conclusion": "success",
|
||||
"started_at": "2026-10-14T08:28:25Z",
|
||||
"completed_at": "2026-10-14T08:43:31Z"
|
||||
},
|
||||
{
|
||||
"run": 3107,
|
||||
"head_sha": "60d48e0580a36b2e6f93c77bb1edbe9bd0be342e",
|
||||
"status": "completed",
|
||||
"conclusion": "success",
|
||||
"started_at": "2026-10-14T08:33:36Z",
|
||||
"completed_at": "2026-10-14T08:45:31Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user