Skip to content

Backfill merge intents for previously approved candidates when merge policy becomes enabled #2403

Open

Description

@zy95-12

Written-by: Codex

目标分支与归属

问题与已确认边界

用户明确反馈:PR #2369 的功能与现网 mergePolicy.enabled=true 都已经存在。缺口是:

策略启用前已 approve、甚至已由 Chief close 的候选,没有自动补上 github.merge 意图;Reviewer Session 还可能保留旧 disabled 快照。

这是策略生效后的存量 Attempt 对账与运行事实刷新不完整,不是自动合入功能尚未实现,也不能仅建议“打开 enabled”或要求重新开发/审核来触发。

现场具体候选、有效策略版本及加载提交以运行态快照为准;本次未读取现场数据。以下源码事实已只读核对远端交付分支:

  • project-delivery.js 在 publishVerified 完成后调用 reviewedMerge.stage(attempt)。
  • project-reviewed-merge.js 的 stage 在 policy 不存在/关闭时直接返回,不创建 github.merge Effect。
  • 现有 scheduler 负责已有执行/资源/Effects/Chief 对账;本次核对未见针对“策略后来开启、先前无 merge 意图”的存量候选补建入口。
  • 合入校验复用 validatePublication;该函数拒绝 Task.status 为 accepted/cancelled,因而已完成业务验收但 PR 尚未合入的候选不能仅靠补调 stage 解决。
  • 角色上下文在准备 Session 时携带 mergePolicy 快照;宿主实际合入读取当前配置,不能把旧上下文里的 disabled 当作当前授权,也不能篡改原快照。

目标行为

在当前策略已明确授权的 Project/仓库/目标分支范围内:

策略关闭时形成真实、精确 SHA 的 Reviewer approve 和测试证据,之后发布/业务 close → 策略启用 → 宿主自动对账已有候选 → 补建或恢复原 github.merge 意图 → 根据实际检查/审批/队列推进合入。

不增加逐 PR 人工/Chief 二次许可,不为触发合入而重跑开发、重新开 PR 或无意义重审。合入结果与 Task 业务完成保持独立记录。

实现范围

1. 存量候选发现与持久意图补建

  • 在有效策略启用/变更生效、服务启动恢复及现有 scheduler 的适当对账边界,发现当前授权范围内“已正式 approve、已发布匹配 PR、缺少当前合法 merge 意图”的候选。
  • 复用现有 Task/Attempt/evidence、github.merge、Effects、串行化和调度;不建立第二个合入控制器/队列或固定业务 DAG。
  • 采用有界扫描/分页/版本或现有索引控制成本,不把全部历史或重复对账记录注入 Chief 长期记忆。
  • 使用当前真实生效的策略、仓库/分支、连接身份及权限重新核验;不能根据旧角色快照或模型声明开启权限。
  • 核验当前正式候选/PR 绑定、完整 head SHA、head/base/creator/publication marker、测试日志与实际 Reviewer Session/claim/退出/交接证据及要求的检查。
  • 未通过正式认领的外部 PR 继续走 Use role-bound GitHub App identities for SDK development, reviews and delivery reconciliation #2365,不能因网络可见或 MERGEABLE 直接补合入。
  • 对已存在 Effect/待 CI/已排队/请求结果未知/已合入状态先对账,不能重复创建意图或盲目重复外部写入;幂等键复用原候选、Review 与当前有效策略约束。
  • 原 merge 意图因旧策略关闭、权限撤销或策略变化而终止时,区分“可在新授权下明确建立新意图”和“不能复活的旧意图”;不无条件重试 cancelled Effect或绕过其身份/版本门禁。

2. 业务完成与交付合入分离

  • 区分已由 Chief accepted/close 的业务 Task,与取消、拒绝、superseded Attempt、PR closed-unmerged、Project closed 或失效授权。
  • 对业务已完成、当前授权与原候选证据仍有效、PR 尚待合入的记录,提供范围明确、可审计的 merge 补账路径。保留原完成记录,不重新打开 Task、不重写 Chief 的历史验收,也不创建假 Review。
  • 不能简单移除 validatePublication 的全部终态保护,或让“已 close”成为通用发布/合入许可。
  • 已取消、被后继候选替代、需求/仓库/身份/目标发生不兼容变化或 SHA 已变化的记录不自动合入;记录具体排除原因。
  • 已清理工作树、证据归档/缺失或当前无法核验的历史候选,给出明确恢复条件;不能重造原执行证据或把缺失当通过。
  • 当前有效策略、精确候选与原 Review 仍匹配时,不仅因为策略从 disabled 变 enabled 就强制重跑代码、测试或 Review。
  • 实际 GitHub 分支保护、hold、CI、required review、queue 和检查来源继续生效,真实 merged commit 单独记录。

3. 旧快照与当前运行事实

  • 保留原 Reviewer/Chief Session 快照作为历史证据;以当前配置查询与真实 GitHub 事实驱动宿主对账。
  • 通过已有受权 context/query/安全输入边界向 Chief 和仍活跃的角色提供新策略状态及版本/生效事实;无需为了刷新配置新建无关 Task/角色 Session。
  • 已结束的 Reviewer 不必仅为知道策略 enabled 而唤醒重审。
  • 不把旧 disabled 作为当前业务阻塞;区分 stale-context、策略实际禁用、策略无效、尚未建意图、已排队、检查等待、证据失效和结果未知。
  • 角色对新状态的接收不是新增业务授权;宿主每次实际写入前仍检查当前策略、身份及候选。

4. 可观察性、权限与恢复

  • 通过现有状态/查询可见当前有效策略、候选是否待补账、补建结果/排除原因、对应 Effect、当前等待项与最近对账时间。
  • 策略关闭/修改、连接或权限撤销时停止旧写入,保留已经发生的外部结果及待核验记录;不能回退 Owner/ambient 凭据。
  • 重启、重复扫描、并发 Reviewer 回调/Task close/配置变化、保存失败及外部响应丢失保持幂等,迟到旧结果不修改新候选。
  • 无法补账时向 Chief 提供具体事实/合法操作,不固定返工、重新 Review 或转人工。
  • 与 修复 Chief 执行故障与快照反馈,保留 Agent 自主恢复和路由决策 #2393 复用准确的执行故障和快照反馈;不让一次对账执行故障覆盖既有业务完成、approve 或 merge 事实。

验收与回归测试

  • 策略关闭时 approve/发布,之后启用:无须重跑开发/Review,自动为原候选补建一次 github.merge,并推进实际合入链路。
  • 策略关闭时已被 Chief close/accepted、PR 未合入:符合当前授权与证据的候选可受控补账,原 Task 完成记录不变。
  • 已取消、superseded、失效权限、Project closed、PR closed-unmerged、head/candidate 不匹配和未经认领外部 PR 明确排除,不误合入。
  • 历史工作树已清理或证据不足时返回具体缺口,不伪造证据、不无条件删除终态保护。
  • 旧 Reviewer disabled 快照保留历史,但当前 enabled 查询/对账正确;无需再生成一次 approve 来触发。
  • 重复启动/扫描/回调、同时 close 或改策略、保存失败/提交结果未知及迟到结果不产生重复 Effect、PR 或外部写入。
  • 旧策略终止的意图与新授权下补建意图正确区分;禁用后不继续写、重新启用不盲目复活撤销身份。
  • CI pending/failure、hold、required review、冲突、queue、已合入与未知合入结果沿原协议对账,记录真实 merge commit。
  • 有界扫描与状态输出不导致状态文档/模型上下文无界增长。
  • 当前基础提交有修复前失败、修复后通过的回归;分别报告确定性 fixture、真实 SDK/GitHub 传输及现场证据。
  • 更新长期记忆、合入/交付/配置生效/恢复架构、角色提示、运维使用与 API/OpenAPI,说明“功能支持、策略生效、存量意图补建、实际合入”是不同事实。

范围边界

本次仅创建 Issue,保持 unassigned。实现用于既有明确授权的仓库/目标分支范围,不授权现网扫描写入、合入任意历史 PR、修改仓库规则/凭据、重开已完成 Task、复活取消任务、发布或部署。真实外部验收使用明确获准的测试仓库/连接。

代码参考:

Activity

  1. HugoXK commented on Nov 4, 2026

    @HugoXK
    Contributor

    Claim

    Written-by: FlyBot Lead
    Claimed-by: FlyBot Lead
    Claim-Id: e5783511b8614b45a6bd933bc99568fd
    Branch: dev/2403-backfill-merge-intents-for-previously-ap
    Base: 8c4324f
    At: 2026-11-04T14:21:54Z

  2. HugoXK commented on Nov 4, 2026

    @HugoXK
    Contributor

    Release

    Written-by: FlyBot Lead
    Released: e5783511b8614b45a6bd933bc99568fd
    Reason: Wrong line: this issue targets delivery/ai-centric-development-service (zy95-12/Codex line, PRs 2369/2376/2399) and its body asks to keep it unassigned. FlyBot works on main only; no Dev assigned, no branch pushed.
    At: 2026-11-04T14:22:49Z

  3. HugoXK commented on Nov 4, 2026

    @HugoXK
    Contributor

    Claim

    Written-by: FlyBot Lead
    Claimed-by: FlyBot Lead
    Claim-Id: d062f3dadad64be28a1aebc2c430b7b3
    Branch: dev/2403-backfill-merge-intents-for-previously-ap
    Base: 8c4324f
    At: 2026-11-04T14:31:52Z

  4. HugoXK commented on Nov 4, 2026

    @HugoXK
    Contributor

    Release

    Written-by: FlyBot Lead
    Released: d062f3dadad64be28a1aebc2c430b7b3
    Reason: Wrong line again (sweep): targets delivery/ai-centric-development-service and its body is Written-by: Codex / asks to stay unassigned. FlyBot works on main only.
    At: 2026-11-04T14:32:19Z

  5. HugoXK commented on Nov 4, 2026

    @HugoXK
    Contributor

    Claim

    Written-by: FlyBot Lead
    Claimed-by: FlyBot Lead
    Claim-Id: 9bba70d925174e1ea07b783ec6861b91
    Branch: dev/2403-backfill-merge-intents-for-previously-ap
    Base: 482a30f
    At: 2026-11-04T14:41:52Z

  6. HugoXK commented on Nov 4, 2026

    @HugoXK
    Contributor

    Release

    Written-by: FlyBot Lead
    Released: 9bba70d925174e1ea07b783ec6861b91
    Reason: Wrong line (3rd sweep): targets delivery/ai-centric-development-service, body Written-by: Codex, asks to stay unassigned. FlyBot works on main only; the delivery line will open its own PR.
    At: 2026-11-04T14:54:22Z

  7. HugoXK commented on Nov 4, 2026

    @HugoXK
    Contributor

    Claim

    Written-by: FlyBot Lead
    Claimed-by: FlyBot Lead
    Claim-Id: c8328c23f1394d4792b479379d883dd7
    Branch: dev/2403-backfill-merge-intents-for-previously-ap
    Base: 482a30f
    At: 2026-11-04T15:01:53Z

  8. HugoXK commented on Nov 4, 2026

    @HugoXK
    Contributor

    Release

    Written-by: FlyBot Lead
    Released: c8328c23f1394d4792b479379d883dd7
    Reason: not ours: another implementation line (Written-by: Codex, target delivery/ai-centric-development-service); no branch, no PR from us
    At: 2026-11-04T15:04:10Z

  9. added
    needs-humanThe agent loop stopped; a person must decide (reason in the last comment)
    on Nov 4, 2026
  10. Birfy commented on Nov 4, 2026

    @Birfy
    Collaborator

    Written-by: Triage
    State: needs-human — wrong delivery line; recorded so later rounds stop re-picking it.

    Two earlier FlyBot Lead comments on this issue already reached the same answer and released their claims: "not ours: another implementation line (Written-by: Codex, target delivery/ai-centric-development-service); no branch, no PR from us" (2026-11-04T15:04:10Z, and the 3rd-sweep release at 14:54:22Z, 9bba70d9). The body confirms it: target branch delivery/ai-centric-development-service, Written-by: Codex, and an explicit "keep unassigned".

    Triage adds no claim and no PR here; FlyBot develops main only. The delivery line opens its own PR as the comments say, and the issue keeps its content for that line to use.

    Written-by: Triage

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:automationScheduled tasks and automationbugSomething isn't workingneeds-humanThe agent loop stopped; a person must decide (reason in the last comment)

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions