Skip to content

统一渐进式 Warning:替换 SDK/Chief 时间硬截断,提供有证据的自主裁决与代理兜底 #2518

Closed

Description

@zy95-12

Written-by: Codex

目标与分支

目标分支:delivery/ai-centric-development-service。
负责人:@zy95-12。
关联:#2483;复用 #2511 的退出/租约对账、#2514 的显式基线选择。

将不合理的业务时长硬截断改为有证据的 warning。Chief 保持自主裁决;Chief 自身异常由独立的现有通知/个人代理链路兜底。所有 warning 必须共用同一套渐进式披露代码,不能每类 warning 各建一套通知、查询、上下文往返或状态机。

本 issue 是源码实施需求,不授权部署、现场任务/配置/凭据修改或付费推理。

已确认的现状

  • project-harness.js 对 SDK 派发设置总时长计时器:projectExecutionTimeoutMs 默认120秒、上限2小时;持续输出不会续期,到时报告 SDK execution timeout。
  • Chief inspection 默认排队10分钟失败、执行15分钟中断并进入恢复。
  • Codex 与 Claude Agent SDK 原始事件流已进入宿主日志,已有 Session/worker/最近事件等事实;但尚未完整开放给 Chief 做受权、可分页的执行状态查询。不能将“已有日志采集”声称为“Chief 已具备全部诊断能力”。
  • 合入等待默认24小时预算耗尽会 blocked。Chief 已有耗时、心跳、等待和反复交接的检查事实。
  • autonomy 默认4次恢复动作或1小时后提示重新评估;当前有效进展主要识别新的候选 SHA 通过宿主测试,可能漏掉环境修复、定位和阶段性代码进展。

一、各类 warning 的业务语义

1. SDK 执行

  • 同一次执行累计每满1小时提醒 Chief:1h、2h、3h……;持续输出不重置累计时长。
  • 不因总时长自动停止、标记失败、释放占用、取消 Task 或创建 successor。
  • 删除短总时长计时器的干扰,不能改成 warning 后还残留另一层2分钟/2小时硬截断。
  • 提醒绑定 Project/Task/Attempt、worker/执行代次及实际开始时间,重复扫描/重启不重复发送同一小时档位,旧执行不污染新执行。
  • Chief 得到执行状态、进展证据后,自主选择继续、查询、询问、请求停止或合法交接。

2. Chief inspection

  • 排队超过10分钟、执行超过15分钟均改为 warning,不据此直接 failed/interrupted,也不暗中保留同样的硬截断。
  • 接收者为项目明确配置的运维联系人对应个人代理;未配置时走既有受权 Maintainer/Owner 个人代理/本人回退,不伪造联系人或提升代理权限。
  • 发送与查询不得依赖被卡住的 Chief 队列或同一个 Chief 再次执行。Chief 队列自身也应可见该告警。
  • 正常忙碌可继续等待;受权联系人可查看现场、停止本次协调执行、确认退出后重新请求 inspection。
  • 停止单次 Chief 调用不清空常驻 Chief 的逻辑 Session/长期记忆。通知不等于业务 needs-human,也不自动改变 Task 去向。
  • 必须整理/补齐受权的查询、停止本次协调与重新巡检操作;不能依靠手改状态或重启恢复。

3. 旧 DAG

本轮不调整旧 DAG 的步骤期限和行为。

4. GitHub 合入等待

  • 持续等待每满2小时向 Chief warning,不因为等待预算到期就把业务结果判失败/强制阻塞。
  • 保留 required checks、审核、分支权限、精确候选和 provider-confirmed merge 门禁。
  • 查询失败/状态未知与检查失败区分;Chief 判断等待、修复、转交或咨询。

5. 执行过久、心跳缺失、等待过久、反复打回/转交

  • 统一经公共 warning 入口交给 Chief;事实提示不自动选下游、不自动转人工。
  • 复用现有可配置阈值。SDK每小时累计提醒与心跳/无进展异常是不同事实,但可合并展示,避免重复轰炸。
  • 框架提供现场证据和可核验的重复模式,不将未经证实的根因当结论。

6. 原“恢复预算”

取消独立“恢复预算耗尽/恢复截止线”的表达,合并为第5类的“反复恢复但缺少可验证推进”提示。提供恢复动作、耗时和产物变化,不以1小时或动作次数强制结束恢复/升级人工。新的提交、环境修复、测试结果、Review/merge 等事实分开标明;日志活跃不等于项目推进,单一测试通过口径也不能垄断进展判断。

二、给决策者的信息

公共摘要包含:关联身份与版本、触发原因/阈值/时间、当前状态与等待对象、最近事件、最近可验证进展、关键异常、证据完整性/未知项、近期已尝试动作和结果、可展开专题及证据引用。

各类型只提供领域事实/引用,复用已有查询:

  • SDK:Codex/CC、逻辑/物理 Session、绑定资源、连接/进程探测事实、最近事件、正在运行的工具/命令及耗时、脱敏输出摘要、候选/变更/测试/PR变化。缺失信息标 unknown,不推断模型在思考,不收集隐藏思维链。
  • Chief:队列等待、占用者、当前调用活动、inspection 范围、最近成功巡检、受影响 Task、worker/lease/退出证明、已尝试的恢复操作。
  • 合入:仓库/PR/目标分支/精确 SHA、查询来源与时间、Draft/Open/Queued/Merged/Closed、冲突、必需/实际 checks 对照、失败日志引用、审核对应 SHA 和未解决意见、权限/队列问题、历次处理及状态变化。
  • 心跳缺失:最后事件时间/摘要、独立连接与进程探测结果、仍运行的长命令;沉默不等于死亡。
  • 等待过久:谁/什么条件、消息投递/领取/回复、依赖当前状态。
  • 反复打回:角色流转时间线、逐次理由、重复模式、每轮产物变化、前次要求是否解决。

三、同一套渐进式披露实现(强制要求)

一套公共 warning 披露/交互入口:

  1. 第一层主动给裁决摘要,足够判断是否可立即行动。
  2. 第二层按需返回执行/交接/测试/合入等专题详情。
  3. 第三层按精确证据引用,分页读取指定范围的原始事件、日志和审核记录。

统一负责权限与身份校验、版本绑定、摘要封装、脱敏、分页/字节预算、投递/去重/已读与历史状态、同一 Chief Session 的上下文查询往返。类型生产者只负责提供已有领域事实及引用;允许必要的领域适配,不复制整套基础代码。

  • 权限不足、退出未知、候选已变化、必需检查失败等影响合法裁决的事实必须首屏呈现。
  • 标明事实采集时间、来源与未知项;绑定 Attempt/执行代次/候选 SHA,变化后旧详情标历史。
  • 展开是只读行为,不隐式执行停止/重试/路由;应用动作前重新校验权限、当前状态和证据。
  • 有界摘要/分页,未变化且已读内容不重复灌入上下文,原始日志不全量写长期记忆。
  • 复用现有 Chief 结构化上下文请求往返、Effects、Inbox、巡检与调度 reconciliation。不新增监控 Bot、并行调度器、每类独立计时器或固定恢复工作流。
  • Chief 的查询/询问/停止能力必须真实可用;现有 attempt.stop 是取消,不能冒充保留任务的“停止本轮执行”。复用并明确执行级停止边界,只有确认退出后才能继续交接;未知退出保持占用。

四、保留的硬边界与非目标

保留单次外部 I/O、启动/鉴权探测、停止等待的有界调用,以及明确的授权有效期、可续租 claim;具体阈值可按用途配置。等待超时不是退出证明,客户端请求超时不是后台操作失败/取消证明。
测试/准备/长命令使用明确的操作级预算,不能再被更短的通用资源层固定上限截断;超时保持环境/执行/断言失败的正确分类。
不扩大凭据/资源/代理权限,不绕过 GitHub 门禁,不自动接受 Task。旧 DAG 不动。无需新增 UI 产品或独立状态库。

验收与回归

  • Codex/CC 两类适配器均可提供真实受权执行状态及有界详情;已注册 running、事件活跃、命令运行、等待输入、连接断开/进程未知有明确区别。
  • SDK跨1h/2h/3h各一次 warning;持续输出不中断,重复扫描/重启不重复,新执行不收旧告警;无残留短总时长硬终止。
  • Chief排队10min/执行15min只告警,原执行/队列保留;Chief自身不可用时通知仍能送到既有代理/人,覆盖配置联系人、合法回退、权限不足及投递失败。
  • 受权代理可查、停止本次 Chief 调用、确认退出并重新请求巡检;保留长期记忆,未知退出不释放。非受权调用拒绝。
  • 合入等待每2h提供精确现场报告;检查失败、未触发、冲突、待审批、排队、已合入、查询未知和候选变化分别验证。
  • 耗时/心跳/等待/反复交接共用披露入口;缺失证据明确 unknown,正常长任务与无进展重复流转可区分。
  • 摘要→专题→分页原证据在同一逻辑 Chief Session 跑通,覆盖跨项目拒绝、脱敏、字节/分页限制、旧快照标记、裁决前重验、已读去重和重启持久性。
  • 证明不同 warning 使用同一公共封装/投递/查询/上下文往返实现,不出现每种类型独立的一套机制。
  • 恢复1h/动作计数不触发截止或人工升级;不同进展事实正确呈现。
  • 保留操作级硬超时及实际退出证明;测试/准备不被更短的通用资源命令上限误截断;旧 DAG行为不变。
  • 提供未修复基线失败回归、修复后真实隔离执行链路验证;区分模拟/真实SDK与真实模型验收,不冒充独立Review或现场部署。
  • 同步 PROJECT/ROADMAP 长期记忆、所属架构/接口文档、必要的OpenAPI与生成物,遵守现有上下文预算,不靠提高预算或丢弃规则解决。

Activity

  1. self-assigned this
    on Nov 5, 2026
  2. zy95-12 commented on Nov 5, 2026

    @zy95-12
    CollaboratorAuthor

    Written-by: Codex

    已通过 PR #2522 合入 delivery/ai-centric-development-service,merge5ca34860a24d0e6320e4d87cffbf37cf34ffcc06;fetch 后文件树与最终测试 head070d70305c49319cc0cb601b8402ebeca8d14d1b 完全一致。

    本单源码交付:SDK每小时warning、Chief排队/执行阈值只告警并独立送原个人/人工Inbox、合入每2小时warning;旧DAG不动。所有类型复用一个摘要/专题/分页证据/声明已读/投递与动作入口。Chief可查看Codex/CC已观测状态与日志,首屏带Task身份、采集时间、关键阻碍、SDK/lease事实、巡检范围和有界影响列表。显式停止只影响当前执行,保留Task/常驻Session/记忆;未知退出不释放。恢复时间/次数不作为业务截止线。测试、长期记忆、架构、API/OpenAPI及生成物已同步。

    最终同提交全量5,076通过/0失败/0跳过(含8个实际隔离DSH场景),Node24/tests-ok run42015001039通过。16条warning回归、71条warning/原生代理相关检查通过;warning模块100%行/89.46%分支/87.23%函数覆盖,未声称所有组合穷尽。实际HTTP/DSH验证原代理Inbox、重启恢复、受权停止与退出证明;未修复基线的SDK短超时及自审发现的告警缺口均有失败回归。

    本次未部署、未改现场任务/配置/凭据,未调用付费模型。SDK事件进程测试为协议fixture,原生后端使用真实DSH与确定性provider;没有冒充真实Codex/CC模型或OpenToday现场验收。按本单源码范围关单。

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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions