Skip to content

Exec plan — Dispatch / Ralph 任务回退(rollback) ​

状态:completed

备注:R1–R4 已实现。Ralph R3-3 已由 2026-08-01 无终态冻结 supersede(同 run resume / soft archive / ABANDONED,见 §10)。

负责人:jj-flow dispatch + ralph

开始日期:2026-07-31

完成日期:2026-08-01

关联:

  • jj-dispatch skill · requestRework / abandonDispatchUnknown(src/dispatchControlPlane.mjs)
  • jj-ralph 阶段 · soft archive / resume / ABANDONED
  • 评估负例:docs/evaluations/2026-07-30-acceptor-tag-color-dispatch.md(假 VERIFIED、整支 merge 冲树)

边界:先定义诚实的控制面/ledger 回退语义;默认不自动 git revert / 不自动 unmerge;用户不跑 CLI 时 Agent 可落盘等价操作

1. 背景与动机 ​

现状(2026-07-31 对话结论):

系统已有缺口
Dispatchrework(attempt++)、RECONCILE/abandon UNKNOWN、单目标 FAILED 隔离无正式「回退」动作;无 skill 可见清单;VERIFIED 误标后无标准收口
RalphDELIVER 迭代、gate FAIL/BLOCKED、product-consistency 挡假完成无 phase 回退;无 un-archive;无「撤销最近 gate」合约

用户需要:下一阶段可规划、可验收的回退能力,而不是再靠手改 JSON / 聊天假装未发生。

2. 目标 ​

  1. 定义并实现 Dispatch 回退动作矩阵(控制面状态 + 可选 git 建议,分离)。
  2. 定义并实现 Ralph 回退动作矩阵(run/gate/phase 诚实回退,不时光机擦除 archive 事实)。
  3. Skill 文案 + 合约测试 +(可选)Agent 自检脚本;用户自然语言触发,不强制 CLI。
  4. 与 Mode S / C3 一致:回退本身也要写 evidence,禁止只改聊天。

3. 非目标 ​

  • 一键「整 delivery / 整 run 从未发生」且自动抹 git 历史。
  • 默认自动 git push --force、自动 unmerge integration。
  • Workflow / 聊天 thread 倒放作为控制面权威。
  • 在未过合约测试前提升 autonomy。

4. 架构裁决(本计划锁定) ​

问题裁决
回退改什么?优先控制面 / ralph ledger;代码回退用 git 建议包(commit list + 建议 message),默认不自动执行
VERIFIED 能否回退?允许 → SUPERSEDED / REOPENED 类终端旁路态或新 attempt,保留旧 revision 审计;禁止静默改历史 revision 字段冒充未 VERIFIED
COMPLETED archive?(2026-08-01 修订) 不擦历史 snapshot;同 run resume 可续作/re-archive;新 run 仅真新需求。半途丢弃 → ABANDONED
用户路径自然语言(「回退目标 X」「撤销上次验收」);Agent 写 plane/run;CLI 可选

5. 分波交付 ​

Phase R1 — 规格 + skill 可见(优先) ​

ID项产出
R1-1回退语义表写入 skill referencesjj-dispatch/references/rollback.md、jj-ralph/references/rollback.md(或 phases 专节)
R1-2SKILL 入口 + References 表dispatch / ralph 各一节「回退」
R1-3用户命令页摘要docs/commands/jj-dispatch.md、jj-ralph.md
R1-4负例表手改 VERIFIED 无事件、假 session、已 merge 只改 plane

验收: harness 文档策略通过;Agent 能按表回答「能/不能回退什么」。

Phase R2 — Dispatch 控制面动作 ​

ID项说明
R2-1reopenTarget / supersedeVerified(名可改)自 VERIFIED 或误 EVIDENCE_READY 进入可再派发态;写 events[] + revision++
R2-2包装现有 requestRework / abandonDispatchUnknownskill 路径与错误信息中文化、Grok Mode S 可用
R2-3rollbackIntent(可选)BOUND/PENDING_THREAD → BLOCKED + reason;禁止同 key 再 create 除非 attempt++
R2-4合约测试回退后 validateControlPlane ok;VERIFIED 门仍 fail-closed 直至新 commit
R2-5plane-self-check 扩展检测「VERIFIED 无 commit」建议走 reopen 而非手改

验收: tests/jj-dispatch-contract.test.mjs(或新文件)覆盖 rework / reopen / abandon;npm run verify 绿。

Phase R3 — Ralph ledger 动作 ​

ID项说明
R3-1setGate FAIL + 允许 phase 回退策略✅ 显式 rollbackPhase:相邻边(含 ARCHIVE→ACCEPT soft),写 progress
R3-2PAUSED / BLOCKED 正式入口✅ skill:「暂停任务」「阻塞原因」;另有 ABANDONED
R3-3COMPLETED 不 reopen 旧目录 → superseded2026-08-01:同 run resumeRun / soft COMPLETED;suggestReopenAsNew 仅真新需求可选;abandon 半途丢弃
R3-4合约测试✅ gate 回退;resume 有 progress 事件;re-archive / ABANDONED 禁 map

验收: ralph 合约测试绿;phases.md 与 schema 字段对齐(含无终态冻结)。

Phase R4 — Git 协作包 ​

ID项说明
R4-1rollback-prep✅ src/dispatchRollbackPrep.mjs:buildRollbackPrep / recommendGitStrategy;不执行 git
R4-2与 $jj-end 边界✅ prep 包含 jj_end_boundary;on_integration → 仅 revert/fix-forward
R4-3用户确认后才执行✅ G-menu + user_confirmation_required: true

验收: ✅ tests/dispatch-rollback-prep.test.mjs(readme-pnpm 类 probe → Recommended=reset)

6. 建议状态语义(草案,实现时再进 schema) ​

Dispatch(草案) ​

text
正常:… → EVIDENCE_READY → VERIFIED
回退:VERIFIED --(reopen/supersede)--> RUNNING|EVIDENCE_READY + events
      BOUND/PENDING --(block)--> BLOCKED
      UNKNOWN --(abandon)--> BLOCKED → attempt+1 PREVIEW
返工:NEEDS_CHANGES --(requestRework)--> attempt+1 + 清 approval

禁止:删除 events / 把 revision 调小 / 无 git 证据把 produced_commit 清空却保持 VERIFIED。

Ralph(现行,2026-08-01) ​

text
phase 回退:相邻边(ACCEPT→DELIVER;ARCHIVE→ACCEPT;…)
status:IN_PROGRESS ↔ PAUSED/BLOCKED;COMPLETED/ABANDONED 可 resume 同 run
archive:soft 快照 + map;可 re-archive;不擦旧 snapshot 装成「从未归档」
gate:PASS 可被后续 FAIL 覆盖并记 progress;不得无日志改 gates
新 run:仅真新需求(可选 progress 链)

7. 验收总标准 ​

  • [x] R1 规格在 SSOT skill,用户文档有摘要
  • [x] R2 至少一个 reopen/rework 路径有合约测试
  • [x] R3 至少一个 phase/gate 回退路径有合约测试
  • [x] 无「自动 force push / 自动 unmerge」
  • [x] Grok Mode S:回退不依赖用户 CLI
  • [x] npm run verify PASS

8. 依赖与顺序 ​

  1. 先 R1(低风险、立刻减少 Agent 乱手改 plane) — done
  2. R2 与 R3 可并行,优先 Dispatch reopen — done(reopenTarget / blockDispatchIntent)
  3. R4 — done(prep 库 + 合约测试 + skill)

并行注意:schema 改动须 harness:check + install-skill。本波 未 新增 target status 枚举(用 PENDING + event 审计);closeDelivery 用 BLOCKED + closeout。

9. 下一步 ​

  1. R1–R4 · Ralph 无终态冻结对齐
  2. 可选:DEL-acceptor-tag-color 假 VERIFIED 用正式 reopen 收口(勿伪装历史绿)
  3. 发版 / jj install-skill 按需
  4. 可将本文件移入 docs/exec-plans/completed/(状态已 completed)

10. 决策日志 ​

日期决策原因
2026-07-31回退 = 控制面/ledger 诚实前进,非 git 时光机默认已有 rework/attempt 模型;自动 revert 过险
2026-07-31COMPLETED/VERIFIED 用 supersede/reopen,不擦除审计检查点不可伪造未发生(dispatch VERIFIED 仍适用)
2026-07-31用户不跑 CLI与 Mode S / C3 一致
2026-07-31实现 R1–R3:reopenTarget/blockDispatchIntent/rollbackPhase/setRunStatus;保留 checkpoint 审计满足 reopen 负例与 Mode S 落盘
2026-08-01Ralph R3-3 supersede:无终态冻结;同 run resume;soft archive;ABANDONED;close 弃用任务无法真关死;归档=沉淀非墓碑;见 post-complete-continue.md / commit feat(ralph) no-freeze