决策报告 · 工作流改进方案 v2.0(五轮双审定稿)

日期:2026-09-11 | 状态:五题已拍板,待开工 session 执行 | 关联:ADR-0010(unbound wake)、ADR-0003、ADR-0009、docs/ablation.md 账本 #5(A' 缓刑)

§1 背景与账本

§2 五轮双审战果(每轮=独立新会话评审员第二审 + 主线程第一审轮间修订)

lens 关键击穿点
R1 事实核查 账本数字全部可复算(±1.2%);非高峰=仅工作日 14-18 高峰(原表述「夜间+周末」过窄);GitHub MCP 实为 245 次
R2 机制有效性 「每步收尾→下班 wake 开新会话」是假的:wake 被 target_task_id 钉死回同一会话;Stop 池 2-3 次 vs 实证 1054 请求 → 续命真面=调度 wake(无限次、不经 Stop 池);空 target=每 run createTask(宿主代码实证)
R3 质量门可测性 四指标中 ①②③ 现状不可测(finish 拒绝不落盘、goal.json 单快照覆盖写、附件同名覆盖冲历史);②③④ 会被改动本身机械性推高;n=3「任一恶化即回滚」统计无效
R4 失效模式 C-check 原判据可被 rebinding 机械刷进度(质量门自产造假激励);任期制全局化误伤交互会话;换会话缓存经济学 breakeven ≈3-10k tok(第一步即超)
R5 红队总攻 A' 任期制整体缓刑(unbound 后边际保护≈0,认知负荷最高、spec 洞最多、与 wake 模板「不做完不停」字面打架);wake 加密 20-30min 违反 ADR-0003 且空转比 4:1,否决;Phase 0 探针验证后不得删除(转 canary)

评审元成本:五轮 subagent 合计 ≈550 万 input token(免费窗口执行)。

§3 拍板记录(2026-09-11,逐题确认)

# 议题 结论
Q1 A' 任期制 接受缓刑:不进 Phase 1,入 ablation 账本 #5;四复活前置见 §4-缓刑条款
Q2 Phase 0/1.5 分工 授权代劳+文档指引:探针/canary 由评审会话代建;wake automation 重建只能由人在 App 自动化管理界面做(会话内创建即自绑定,开工 session 也不行)
Q3 Phase 2 排期 全量一次做:埋点+cost 报表+tripwire+doctor 检查,开工 session 一次交付
Q4 开工顺序 代码先行、切换收尾:Phase 2 代码 → Phase 1 提示词层 → App UI 切换收尾;切换后第一个目标即入 veto 基线
Q5 归档 三处:ADR-0010 + 本报告 + ablation.md #5;五轮双审流程不制度化(按需手动触发)

拍板补录(2026-09-13,开工 session 逐题确认)

# 议题 结论
Q6 水位阈值语义 常数 + env 覆盖:初值按本机实测(近 14 天滚动 5h 积分 p95≈1576)上取整写死 1600,LZY_WATERLINE_POINTS 覆盖;部件更名「水位警戒线」(「水位 tripwire」与既有 tripwire.js 空转绊线撞名)
Q7 cost 系数口径 常设系数 + 促销 overlay:官方常设规则为底,活动条款走带日期区间 overlay(夜间活动细节本就在 ratelimit.js 维护注释:Flash 不限量/其他翻倍 23–09,至 9/20),退役自然回落常设;实扣为主输出
Q8 veto 基线起点 落地即起算:埋点上线后第 1 个目标入基线,观测 2 个后 veto 武装;与复挂解耦(09-13 全清后原「切换后起算」语义失去锚点);db 存量回填积分/步仅作对照
Q9 版本边界 0.0.3 不发布,直接迭代 0.0.4:0.0.3 节并入 0.0.4(unreleased),Phase 2 全量计入;npm publish/tag 仍归业主

§4 方案 v2.0 终稿

Phase 0 影子验证 + canary(评审会话代办部分已完成,2026-09-11)

Phase 1 提示词层(改 zw SKILL.md,开工 session 执行)

Phase 1.5 调度切换(人肉 App UI,收尾动作)

Phase 2 代码(lazyzcode 仓库,开工 session 第一批全量交付)

  1. 埋点最小集(复用 incMetrics 管线):finish_attempts / finish_rejects{pending|stale|unbound}(loop.js 两 reject 分支 + doFinishLoop 入口);证据 rebind 痕迹(append-only,附件名加 rebind 序号或 evidence 节点留 rebindOf 链);wake step-delta(sessions/.json 或 incMetrics('wake_noop'))。
  2. lzy loop cost:积分/目标 = Σ(tokens×系数)(人工系数表,对齐 ratelimit.js PEAK_WINDOWS 维护模式);归因 = startedAt/finishedAt 时间窗 ∩ session.directory ∪ 认领旗标(简化 OR 归因+人工复核,红队否决了过巧的混合 ∩/∪ 公式);按步数归一;对 db.sqlite 只读 spawn 声明为 loop.js「零 spawn」纪律的显式豁免。
  3. 水位 tripwire:stop hook 读本地 token 用量,超阈值注 nudge(上下文卫生的机械信号,替代 A' 缓刑期间的人格化水位判断)。
  4. orphan-wake doctor 检查:只读 JOIN automations.workspace_path ↔ 该路径 goal 状态,连续 N 次干净退出即报 orphan。
  5. handoff 加固lzy loop handoff 增 7 字段快照 lint;mtime 上限 24h→2h;认领文件 48h TTL。
  6. trigger.js 哨兵旗标:wake prompt 含「无人值守」→ 写 unattended: true 入会话状态(为 A' 复活预置技术强制)。

质量门

缓刑与否决

§5 开工 session 任务清单(按序)

  1. Phase 2 全量代码(§4-Phase 2 六项)——第一批,纯增量观测先行。
  2. Phase 1 提示词层(§4-Phase 1 三组)——C/D/卫生规则落 SKILL.md 与 plan-reviewer.md。
  3. 收尾:提示用户执行 §6 App UI 切换;切换后 automation_runs 验收(≥3 班异会话)。
  4. 验收门:切换后第 1-2 个目标 = 纯埋点基线期;此后 veto 规则生效。
  5. 全程遵守:证据 tree-hash 门、plan-reviewer 门、认领纪律零让步。

§6 App UI 重建步骤(人工;as-built 2026-09-11 已完成,见附记)

as-built 附记:App GUI 调度编辑器为单行「每天 HH:mm」表单(无法表达跨午夜每小时区间),故按路线 3 落地为 10 颗独立 automation「unbound 版 zw wake {23,00,01,…,08}」,每颗 0 H * * *、空 target、workspace=lazyzcode、prompt 同原文;另建周频 canary(周一 11:00,zcode 工作区,空 target)。2026-09-11 验收:计数 10、小时集合 {23,0-8}、全量 unbound、旧 automation-a8aba356 已删、心跳未动。语义落点验证待首个夜间窗口后以 automation_runs 落点互异性收口。以下原始步骤留档:

  1. App → 自动化管理 → 停用/删除「每天 23:00–08:00 整点 zw 继续无人值守」(automation-a8aba356)。✅
  2. 同界面新建:cron 0 23,0-8 * * *、工作区 /Users/acfufu/Codehub/lazyzcode、prompt 沿用「zw 继续(无人值守:只推进 executing 目标;无目标或 planning 态则干净退出并说明;不做完不停)」、不选择/不绑定任何已有任务或会话
  3. 建成后回验:sqlite3 "file:$HOME/.zcode/v2/tasks-index.sqlite?mode=ro" "SELECT target_task_id FROM automations ORDER BY rowid DESC LIMIT 1" 应为空;次夜看 automation_runs 落点 session 各不相同。
  4. 同法建周频 canary:任意错峰时刻(如周一 11:00)、prompt「只回复 done」、不绑定 task;每周核对 automation_runs 落点 session 互异。若某周落点固定/不派发 ⇒ 宿主 dispatch 语义漂移,先查 wake 再看账单。
  5. 若 App 界面强制绑定 task(新建即有 target):停在这里,把 ADR-0010 的「宿主 feature request」提上日程(unbound 选项或 cron 派生 task 归组),勿退回钉定形态。

引擎护栏(2026-09-11 探针实证):会话内创建 automation 必然绑定该会话,且一个会话只能拥有一颗 automation(第二次创建直接报错)。所以本节所有创建动作都不能在 zw/目标会话里做。

§7 风险与边界

附记(2026-09-13):§6 as-built 的挂载物已全清

10 颗 unbound wake + canary 于 09-13 经业主拍板全部下线(canary 在 zcode 工作区,留业主 App 界面手动删)——语义验收(两夜 13 run/13 互异 session)通过后仍予清退,理由与开关语义见 ADR-0010 附记。§6 重建步骤继续有效,作为复挂配方存档;Phase 2-4 orphan-wake doctor 检查的优先级随之下降(无挂载即无 orphan 空转面),六项清单本身不改。