面试知识库

无人值守自动修复报告 (2026-07-07 03:33 定时任务)#

分支: fix/governance-closedloop-20260707(19 个 commit,未 merge、未 push) 结果: 计划 22 项全部完成(T0.1–T4.4 + 本报告),无跳过、无失败。 测试: 325 passed(新增 ~92 个用例,全部离线 fake/mock,不依赖真实 Redis/Docker/Postgres/飞书)。.env 未改动(仅 .env.example 增占位)。


一、逐项结果#

Tier 0 安全硬化#

Commit改动文件默认策略测试
T0.1 审批超时降级da8059dapp/runtime/approval_timeout.py(新), approvals.py, tool_runner.py, config.pyescalate_then_deny(拍板):超时→催办+续等一轮→二次超时 deny;永不自动放行9 ✅
T0.2 BYPASS 启动断言000c45fconfig.py非 debug 环境配 bypass → Settings 实例化即 raise4 ✅
T0.3 max_iters 优雅收尾a9feb19tool_runner.py撞限→补 pending 占位+裸模型禁工具收尾轮,无半成品4 ✅
T0.4 预算熔断进 loop91a8eebtool_runner.py每轮进门查预算,超限→收尾退出;预算未配置(=0)行为完全不变3 ✅

Tier 1 Agent 基建 + Harness#

Commit要点测试
T1.1 类型化错误8201df7app/runtime/errors.py(新) 5 类异常;classify_error isinstance 优先,字符串兜底保留3 ✅
T1.2 工具熔断器7994b30per-run 连续失败≥3(可配)短路”暂不可用”;成功复位;≤0 关闭5 ✅
T1.3 参数级权限a9cae7atool(param=glob) 语法;deny 强于 ask 且 BYPASS 不豁免;空规则 no-op(默认)8 ✅
T1.4 context 压缩72c8317对话级 auto-compact,阈值 80k 字符(短对话零影响);不拆 tool 配对;失败 fail-open5 ✅
T1.5 Subagent 护栏81fe3dddelegate 并发信号量(默认2) + token_ledger.py(新) ContextVar 台账,子 Agent 花费触发主熔断4 ✅

Tier 2 处置引擎升级#

Commit要点测试
T2.1 多步 Sagab4135c3saga.py(新):已提交栈+逆序补偿;不可回滚/占位未回填拒盲补;4 终态8 ✅
T2.2 锁+幂等8e6e100locks.py(新):URI 级互斥(内存默认/Redis 可选自动降级)+幂等键9 ✅
T2.3 plan-only+钩子4a06d59run_transaction(plan_only=True) 零变更预览(planned);recovery_plan 钩子默认 no-op 绝不自动执行5 ✅
T2.4 回归验证1bfd360regression.py(新):资源态复核(失败判失败)+告警消退(后端抖动 inconclusive 不误判)6 ✅

Tier 3 真闭环接线(核心,按拍板默认开)#

Commit要点测试
T3.1 闭环执行层bdfc0dfclosed_loop.py(新):幂等→锁→事务→回归验证;多步走 Saga;worker 接线,REMEDIATION_CLOSED_LOOP=true(默认),False 回退旧路径9 ✅ (含全链路: 执行→verify失败→逆序补偿)
T3.2 飞书审批通道d767f69approval_notifier.py(新):创建卡+催办卡+跳转按钮;FEISHU_APPROVAL_CHAT_ID 空→仅日志;发送失败绝不阻塞审批5 ✅
T3.3 可观测 stats0d55f16stats.py(新) 纯函数聚合 + GET /api/v1/remediation/stats5 ✅
T3.4 处置去重83fab99find_inflight:同资源/同 incident 进行中→duplicate_inflight;DB 异常 fail-open(锁+幂等兜底)4 ✅
T3.5 经验回灌841f6edingest_remediation:确定性追加到诊断同源 pattern 页”## 处置记录”(成功/回滚教训/回归未通过)5 ✅

Tier 4 文档更新#

Commit产出
T4.1-T4.42fea899内部文档补充

二、新增配置一览(均已写入 .env.example#

配置默认值说明
APPROVALS_TIMEOUT_POLICYescalate_then_deny超时策略(拍板默认)
APPROVALS_ESCALATE_EXTEND_SEC0(=再等一个周期)催办续等时长
APPROVALS_MAX_ESCALATIONS1最多催办轮数
FEISHU_APPROVAL_CHAT_ID待你填:审批群 chat_id (oc_ 开头),空=仅日志
APPROVAL_CENTER_URL卡片跳转地址,空=http://127.0.0.1:<port>/approvals
REMEDIATION_CLOSED_LOOPtrue闭环执行总开关(拍板默认开)
REMEDIATION_REGRESSION_ENABLED / _SETTLE_SECtrue / 3.0回归验证
REMEDIATION_DEDUP_ENABLEDtrueincident/资源级去重
TOOL_CIRCUIT_BREAKER_THRESHOLD3工具熔断阈值
SUBAGENT_MAX_CONCURRENCY2delegate 并发上限
AGENT_CONTEXT_COMPACT_THRESHOLD_CHARS / _KEEP_RECENT80000 / 4对话级压缩
PERMISSION_PARAM_DENY_RULES / _ALLOW_RULES空(=no-op)参数级权限规则

三、需要你醒后处理的清单(按优先级)#

  1. FEISHU_APPROVAL_CHAT_ID.env):审批群 chat_id;并在飞书开放平台确认 自建应用有 im:message 权限、机器人已入群。没填前通知自动降级为日志,不报错。
  2. 验收后决定是否 mergegit diff main...fix/governance-closedloop-20260707 审查, 或先跑一次真实链路(起服务→触发一条处置→看审批卡/催办/闭环执行/stats/wiki 回灌)。
  3. 可调参数拍板:催办续等时长(当前=再等一个 APPROVALS_TIMEOUT_SEC=300s 周期)、 回归验证 settle 3s 是否够(告警评估周期通常 15-60s,建议真实环境调到 ≥30s)。
  4. 已知残留 gap(本次未做,属生产化边界)
    • Redis 锁 release 是 GET+DEL 非原子(生产应换 Lua);
    • 回归验证的告警关联是宽匹配(资源 id 子串),生产应走告警指纹;
    • 飞书卡片内批准(需公网回调)未做,维持”通知+跳转”形态;
    • execute_transaction_with_approval inline 路径仍走旧 wait_for_decision 单轮超时(deep 图 interrupt 模式有自己的等待机制)——escalate-then-deny 已接 tool_runner 同步 ask 路径与解耦 worker 主路径,inline deep 旧路径如需同样策略 可后续一行接入。
  5. 审批页前端APPROVAL_CENTER_URL 默认猜的 /approvals 路由,请确认前端实际路由后配置。

四、执行纪律自查#

  • ✅ 全程在新分支,逐项独立 commit(19 个),main 未动、未 push
  • ✅ 每项 pytest tests/ -x -q 全绿后才 commit(最终 325 passed)
  • ✅ 单测全离线;.env 未改;未开任何 MCP 写闸(DOCKER_ALLOW_WRITE 等保持原样)
  • ✅ 拍板决策照办:escalate-then-deny 默认 / 飞书占位+mock / 闭环默认开
  • ✅ 额度充足,未触发优雅停