Skip to content

Changelog ​

版本标题附带发布时间(YYYY-MM-DD HH:mm,与发版 commit 本地时区一致)。进行中的变更写在 Unreleased;无待发布条目时写「暂无」。

Unreleased ​

  • 移除伞形 jj-team,保留三个 sibling 引擎:jj-team 是「调一次即预置常驻团队」的总入口——先量可派发项数定花名册规模,之后同会话直接给任务即为团队活。2026-09-22 那次 Grok 实测暴露了它守不住自己的账本:新车道不进 parallelism.lanes、代码已合 dev 而那条任务仍是 in_progress 且 closed_at: null、会话 id 读到了却没有 rebind 命令可落。账本读起来和一份新建的一模一样,而它正是唯一一份在飞记录——这是它最难被察觉的一种坏法。根因不是粗心,是结构性的:每个步骤边界记得去改一段嵌套 JSON 本来就没有宿主守得住,而团队模式把整个产品的正确性都押在这句话上。三个 sibling(jj-team-coordinate / jj-team-lifecycle / jj-team-swarm)是显式按名调用的单轮执行引擎,与伞形的自动预置是两套东西,本次一行未改、继续可用。随之消失的是「常驻团队」这个概念本身、TEAM-* 状态、调用即预置与会话静默 resume,以及 ~/.jj-flow/team/ 兜底目录——移除后没有任何引擎写它,homeLayout.mjs 里那一行承诺因此一并删除,留一句做不到的承诺比没有承诺更糟。设计取舍的推理链移入执行计划完成记录,被删文档的原文索引指向 git 历史。合约:tests/jj-team-skills-contract.test.mjs。
  • jj-end 不再被 .workflow/ 台账阻断收工:批量收工的预览把「未选中的脏路径」整批算作阻断项,而团队运行期间 .workflow/ 底下必然是脏的——那是本产品各引擎共用的状态根。2026-09-22 那次 Grok 团队的收工现场:第一次预览报了 66 个阻断项,预览来回出了三版,一次 commit 被 hook 拦下,最后靠手工 Move-Item 把团队账本挪走才关得过。现在 .workflow/ 路径拆出来进新的 workflow_state_paths[],只报告不阻断;assertClean 同步放过它们,否则预览不拦了、execute 还是会在同一批路径上失败。无关的脏活照旧阻断,由专门用例守着——拆的是阻断条件,不是收工前的检查。合约:tests/end/runner.contract.mjs。
  • docs:check 修好:更新日志改为投影,站点页面不再写 include 指令:docs:check 在 main 上一直是红的——93,032 字节的更新日志页正好在 VitePress 打包阶段的内存墙上,默认 4 GB 堆耗尽,报的是一段看不懂的 native 栈。根因不在页面积,在一行示例代码:docs/design-docs/docs-site-vitepress.md 的文件树清单里写了 include 指令当例子,而 VitePress 的 include 是正则替换、不认代码块;又因为 Windows 的 NTFS 大小写不敏感,../CHANGELOG.md 解析到的就是 docs/changelog.md 自己,那一页再递归包含根 CHANGELOG.md——两页各带一整份更新日志,正是切分要避免的那件事。修法是两件:两页改由 scripts/sync-changelog-pages.mjs 从 CHANGELOG.md 的两个区域投影并签入仓库(CHANGELOG.md 仍是 release-please 的唯一来源,正文一字不改),scripts/check-changelog-split.mjs 查五件事——区域标记成对且闭合顺序对、没有版本标题掉队、两页等于投影、每页在 80,000 字节预算内、站点页面里一行 include 指令都不许有(它能不能解析取决于文件系统大小写敏不敏感,那不该由运气决定)。构建从 OOM 变成 20.96 秒。
  • 两条文档 lint 的扫描面差集第一次被机械计数:lint-doc-pointers.mjs 的文件面取自 git,lint-doc-tables.mjs 取自 documentation_policy,两个面从来不是一样宽,而这个差此前没有任何东西数过。新增 scripts/doc-scan-surface.mjs 对两份面取差,要求差集里每个文件都被一条有名字的规则解释(excluded_paths 或 non_documentation_paths),解释不了的非零即红;docs:check 第 2b 步在构建之前执行它,结构缺陷因此立刻失败,而不是等一个几分钟的 build 之后再失败。固定为不变量的是未解释失败 = 0,而不是差集本身的大小:差集随仓自己增长,每增加一个 skill、每增加一份示例它都变大,把那个数固定为断言的那天就是它过期的那天。反方向(表格 lint 可见而 git 不拥有)没有解释规则——指针 lint 索引不到的文件是它的覆盖缺口,一条 manifest 键会把这道缺口盖住。npm run docs:surfaces 可单独执行该守卫。合约:tests/doc-scan-surface.test.mjs。
  • documentation_policy.current_roots 纳入 skills/,四个手点文件退场:出厂 Markdown 此前只有 docs/ 整树加 8 个手点文件进入扫描集,96 个出厂 .md 一个都没进入过扫描集。现 current_roots 为 ["docs", "skills"],current_files 里四个 skills/*/SKILL.md 随之删除——同一个目录不能既被整树扫描、又被逐个点名,两份声明会各自漂移,而这次漂移的方向正是那 96 个文件从未被审过。合约:tests/doc-scan-surface.test.mjs。
  • documentation_policy 新增 non_documentation_paths 键,并由 harness:check 两条新规则守着:解释规则本身会腐烂。一条指向不存在路径的规则不报错,只让差集里少一条解释,表现是某个新文件突然「未解释」,看起来像别的地方坏了(HNS-DOC-010);一个路径同时是「当前文档」和「不是文档」时,「为什么这个文件不在表格 lint 面里」会有两个答案,等于没有答案(HNS-DOC-011)。schema 的 additionalProperties: false 同步声明该键,manifest 与 schema 不可能各自漂移。合约:tests/harness-check.test.mjs、tests/doc-scan-surface.test.mjs。

0.2.7 — 2026-09-20 14:36 ​

  • Mode S 允许不同仓并行实施:Grok / Claude 默认仍把多个写任务绑在当前协调会话(Mode S),不再把「一次只派一个实施执行人」当成纪律。$jj-same 对独立目标仓(不同 project_id / cwd)应本轮同时派 jj-researcher / jj-implementer;同一仓仍串行。Mode P 仍是「一任务一真实子会话」的可选绑定,不是并行的前提。子代理 id 仍不能 BIND,也不能推进检查点。合约:tests/jj-dispatch-contract.test.mjs、tests/jj-same-contract.test.mjs。
  • 新增 jj-team 团队模式入口:团队模式的总入口(/jj-team、$jj-team),调一次即预置常驻团队——先量可并行度,数字只定花名册规模(implementers = measured lanes),不再否决建队:测得 0 时花名册为 team-lead + reviewer,不生成任何 implementer,数字与每条卡点照报并在报告中点名。起完即常驻:同会话后续裸给任务即为团队活,先分类「新道 / 已有道 / 不是团队活」,第三支直接回答、不生成队友;压缩或跨会话靠 team-session.json + team-snapshot.md 恢复,不从对话记录重新推导花名册。会话绑定:host.session_id 为 join key,Phase 0 按 R1–R6 首个命中即停——同会话静默 resume(resume, do not init,抄 findRalphInitConflict),读到别的会话才 AskUserQuestion(接管 / 并存 / 归档后重建),读不到会话 id 时写 null + session_id_source: "unknown" 并如实说明,绝不编造 handle(同 agent-write-plane.md 的 PENDING 纪律);用户不再手贴会话 id。宿主探测按能力而非品牌(TeamCreate+SendMessage+Task* 存在即 full),修正「仅凭是 Grok 就自报 degraded」把整条 full path 跳掉的问题;degraded 宿主照样预置并跑团队,只是按状态文件逐道串行,不再绕道单轮引擎。团队状态落 ~/.jj-flow/team/<project_key>/(~/.jj-flow/README.md 已定的跨项目状态区;本产品仓 forbidden_paths 含 .workflow、.plans 亦非本仓约定,故落 home),$JJ_FLOW_HOME 可整体覆盖;team/ 与 memory/ 一并补进该 README 的路径表(src/homeLayout.mjs 与 ralph 镜像副本已同步),存量 home 因 writeIfMissing 不回填。不写仓库根 CLAUDE.md——它与 AGENTS.md 会形成第二个真理源头;改为运营手册放 skill references/ 按需加载 + team-snapshot.md 承担压缩恢复。reviewer 固定按四项通用维度评分(RD-1 产品深度 / RD-2 可测试性 / RD-3 性能 / RD-4 API 优雅),任何一项 WEAK 即不能 [OK];不按项目另发明维度。默认不设 custodian(npm run verify 的 11 道机械门禁已覆盖合规)。不推进 ralph/dispatch 检查点;请求本身是单轮时才点名路由到 jj-team-coordinate / jj-team-lifecycle / jj-team-swarm,三个 sibling 引擎一字未改。合约:tests/jj-team-contract.test.mjs(含 inventory 与 package.json files 对齐、命令页九标题骨架、docs/index.md 入口)。设计:docs/design-docs/jj-team.md。未关闭:真机多轮验收、快照陈旧检测未机械化、degraded 路径未实测、0 道预置的可证伪条件(连续 N 个会话未派活则退回「仅 ≥1 道预置」)。

0.2.6 — 2026-09-18 16:55 ​

  • 安装器跨层级去重:用户级与项目级此前互不感知,先后执行 install-skill 与 --project 会让同一资产出现重复入口。现在写入前若另一层级已有同名资产则默认跳过,在 shadowed 中点名 sibling 路径;两层都已存在时由 duplicates 报出并附卸载预览命令(只报告不删除)。--force 可强制装第二份。被跳过的层级不留下空目录与幽灵 ownership manifest。合约:tests/install-skill.test.mjs。

0.2.5 — 2026-09-18 15:37 ​

  • 移除 skill-zh-bridge:删除 docs/skill-zh-bridge/;英文 skill 协议以 skills/ 为唯一 SSOT,中文用户说明仅保留在 docs/commands/ 等站点页。同步 docs/writing-guide.md、design-docs 入口、harness-manifest.json 排除清单与 scripts/check-project.mjs。已完结的 exec-plans / evaluations 历史路径不回溯改写。
  • jj-dispatch 按 skill-design-principles 收敛:Gates / CREATE 决策表详文移入 references/happy-path.md;入口保留紧凑门禁与 Failure recovery。目录配置与 Host contract 改为指针;MUST NOT 收敛为 Hard constraints。real-host 验收横幅说明移至 happy-path。合约:tests/jj-dispatch-contract.test.mjs。
  • jj-end / jj-review 按 skill-design-principles 收敛:jj-end 入口只留 runner 步骤与 Final Response,Integration / Invariants 详表移入 git-policy.md;finish 行模板以 SKILL 为唯一正文。jj-review Red-light 只留独特禁令;host-review.md 以宿主矩阵与映射表为主,操作步骤指向 SKILL 的 Immediate actions。合约:tests/jj-end-contract.test.mjs、tests/jj-review-contract.test.mjs。
  • jj-same 入口按 skill-design-principles 收敛:人设提示词粘贴块只留在 skills/jj-same/SKILL.md;references/onboarding.md 改为指针,并写成「禁止引入外部 team/harness 通道与路径」类规则。Dual gates / closeout / 控制面详表移入 happy-path.md;jj ralph init / ANL-under-home / ensureDispatchRalphRuns 禁令以 Write plane 为唯一正文。合约:tests/jj-same-contract.test.mjs。
  • 客服 spawn 协议收敛到一处:派遣(Announce)、占位(Occupancy)、续接(Resume)、description 人设标签与派单精确路径(含「以现有代码为准」与样本 id 禁令)写在 skills/jj/references/assignment-spawn.md;$jj-ralph / $jj-review / $jj-same、对应斜杠命令、docs/commands 命令页、docs/usage.md、术语表与 docs/maintenance.md 只指向该文件,不再重复派遣原文或标签。产品规则不变。合约:tests/ralph/assets.contract.mjs、tests/jj-review-contract.test.mjs、tests/jj-same-contract.test.mjs、tests/install-skill.test.mjs、tests/docs-site.test.mjs。eval:EP-20260917-assignment-spawn。
  • Ralph / review / same / dispatch 入口去重(产品规则不变):操作步骤以 Immediate actions 为唯一出处;Golden Q&A 与会话样本移入 eval / 合约。jj-ralph 斜杠入口与 analyze-hold / UAT 红灯改为指针。审查步骤交给 $jj-review;人设以命名子代理为准,缺失时才内联。$jj-dispatch 与 $jj-same 边界只保留协议句,不再写入 G-same-1 / 01a08e5b。合约:tests/ralph/assets.contract.mjs、tests/jj-review-contract.test.mjs、tests/jj-same-contract.test.mjs、tests/jj-dispatch-contract.test.mjs。eval:EP-20260911-ralph-lead-spawn、EP-20260911-ralph-docs-not-cli、EP-20260911-p2-resume-teammates、EP-20260911-merchants-persona-spawn、EP-20260910-ralph-assignment-rounds、EP-20260907-grok-review-subagent-waves、EP-20260910-review-assignment-exclusive、EP-20260911-review-docs-not-cli、EP-20260911-same-handoff-assignment。
  • jj-init 提案由 CLI 截短:formatInitPreviewView 最多 12 行项目,cwd 至多 3 个贡献标题,--root 至多 5 个待写入 key;skill 不再复述这些数字。合约:tests/jj-init.test.mjs。
  • init 用户文档不再复述推断算法:命令页只写提案带建议、确认后写入;名称与家族猜测仍只在 CLI。
  • Agent CLI 调用规则一处:skills/jj/references/cli-agent.md 写明如何解析 jj 以及不要把 JSON 贴给用户;jj-init / jj-dispatch 指向该文件。合约:tests/jj-init.test.mjs。

0.2.4 — 2026-09-17 10:46 ​

  • Claude 接上 dispatch(Mode S):新增 /jj-dispatch 斜杠命令与 host_id=claude-code 会话宿主。默认与 Grok 相同:当前对话串行、project-branch、写 attestation;缺多会话能力时降级 Mode S,禁止占位 session。不关闭 Wave 2、不升 A2。合约:tests/jj-dispatch-contract.test.mjs、tests/grok-host-contract.test.mjs、tests/claude-host-adapter.test.mjs、tests/install-skill.test.mjs、tests/skill-inventory.test.mjs。
  • 文档信息架构重组:概念章收敛为五页(Loop 两层图并入证据页、记忆速览并入知识与记忆页),project-plan 与 M6 验收移出站点归档,侧栏「参考」新增折叠的历史验收组。
  • CLI 参考校准:commands/cli.md 按 src/cli.mjs 补齐 agents 安装平台、task status/context、resume/abandon/remediate 与 migrate --prune-archive,旧 tasks/ 路径改为扁平布局,新增 ralph 运维节;jj-ralph 命令页拆分瘦身,CLI 与监控内容迁往 CLI 参考。
  • 用户文档口径统一:首页 / 安装 / 宿主说明补 AGENTS 兼容入口与 .claude/agents,知识库写入改为「主动提出并经确认后」,README 按 docs 新口径重写,维护说明新增文档地图与五端 SSOT 说明。
  • 用户文档整轮重写:开始组 4 页、命令页 11 页、术语表按统一骨架重写(一句话定位 / 写法 / 适用与边界 / 第一次这样用 / 常用说法 / 做完之后 / 记录在哪),踩坑页按阶段分组;jj-dispatch 页补 proposed_mode / base_action 列说明与 attestation 硬门。

0.2.3 — 2026-09-14 08:06 ​

  • install-skill --force 整目录替换:覆盖安装时先删再拷 skill 目录,清掉源里已删的文件(如旧 phases.md)。合约:tests/install-skill.test.mjs。
  • 删掉 Ralph 死骨架:references/ 去掉 archive-manifest.skeleton.json / run.skeleton.json / capability.skeleton.json(引擎用 createRunSkeleton())和重复的 business-map.schema.json(留 ralph-business-map.schema.json,与 schemas/ 同步)。形状仍留 artifact-layout.md / integrations.md。合约:tests/ralph/assets.contract.mjs。
  • 卸掉 skill-en-zh-rewrite:仓库维护 skill 已不需要。删除 skills/skill-en-zh-rewrite/ 与对照页。install-skill 仍从宿主目录清残留。合约:tests/install-skill.test.mjs。
  • 删掉 Ralph 对话 CLI 手册:对话路径已不跑 ralph_ops / jj ralph。删除 skills/jj-ralph/references/ 下 phases.md / ops.md / rollback.md / business-map.md / must-evidence.md / post-complete-continue.md。入口仍禁止打开 references/。文档形状留 artifact-layout.md;身份/热层留 integrations.md。证据类由 evaluateAcceptArchiveGate 执行。机械 CLI / gym / src/cli.mjs 保留。未确认需求细则并进 SKILL Red checkpoints。context 包指向 jj-ralph/SKILL.md。合约:tests/ralph/assets.contract.mjs。
  • Skill 入口去掉 Happy path:对话主线就是入口。jj-same 删掉与 Conversational path 并列的 In→Out 表,把 Ralph-handoff-first / 分支门 / EXECUTION_READY / HANDOFF_READY 并进对话步骤;入口不再链到 references/ 当启动清单。jj-ralph / jj-dispatch 删 ## Happy path。review / evaluated / end 去掉同名标签。references/happy-path.md 与场景 dispatch-happy-path 仍作详表与回放。合约:tests/ralph/assets.contract.mjs、tests/jj-same-contract.test.mjs、tests/install-skill.test.mjs。
  • 术语:单仓 / 单仓闭环 → 任务 / 任务闭环:用户文档、架构说明、skill 描述与 trigger、CLI 帮助等 SSOT 统一为「任务」「任务闭环」/ task / task loop;产品叙述不再用「单仓」指代 ralph / review / end 作用域。已发布 CHANGELOG 段落未改。
  • 文档书面语全库对齐:按 docs/writing-guide.md 统一用户文档、design-docs、exec-plans、evaluations、skill-zh-bridge、ARCHITECTURE.md、AGENTS.md。对话入口、安装说明、角色用语(执行人/人设提示词)、知识库写入确认、斜杠命令入口等口语表述改为书面语;量词与进程表述(上一轮、运行中的审查、全仓 grep 等)一并收敛。npm run docs:check PASS。
  • Ralph 用户文档 marker 对齐书面语:docs/commands/jj-ralph.md 已改为「不要凭猜测推进」后,合约仍锁「不要猜着做」,verify 在 afd298a 红。tests/ralph/assets.contract.mjs 与设计 ralph-skill-slim §9.3 改跟用户文档;派遣进度句按写作规范保留中英空格(派遣 reviewer 审查改动代码)。产品规则不变:确认不了先问。
  • 对话工人装到 Codex / Claude:agents/jj-implementer.toml / jj-reviewer.toml / jj-researcher.toml 写入 ~/.codex/agents(与 dispatch 的 jj-workflow-* 分开)。同一套 agents/jj-*.md 写入 ~/.claude/agents 与 ~/.grok/agents。审查工人 Codex model_reasoning_effort = "high",Grok/Claude md reasoning_effort: high。缺失仍回退 general-purpose。合约:tests/install-skill.test.mjs、tests/jj-review-contract.test.mjs。

0.2.2 — 2026-09-12 14:02 ​

  • 审查工人 reasoning 固定为 high:agents/jj-reviewer.md 写 reasoning_effort: high,不继承、不用最高档 xhigh(Grok model: inherit 在 grok-4.6-build 上常落到 xhigh)。父会话仍保持 high。jj-implementer / jj-researcher 仍继承。install-skill --platform grok|all 写入 ~/.grok/agents。合约:tests/jj-review-contract.test.mjs、tests/install-skill.test.mjs。eval:EP-20260911-reviewer-reasoning。
  • P2 持久队友:同一对话、同一人格、同一 cwd,上一轮工人已结束 → resume_from 该 id,不要每次冷启动(样本 01a08fa6 11×)。换人格或换仓库必须新开(resume_from 继承 cwd,交接目标仓不能复用源仓实施工人)。运行中的工人只用 send_subagent_message 纠偏,不拿来派下一轮。G-ralph-5 / G-review-5 / G-same-3。靶场第三轮:.tmp/persona-flow-p2/ TASK2 resume_from TASK1;审查/调研/交接新开。合约:tests/ralph/assets.contract.mjs、tests/jj-review-contract.test.mjs、tests/jj-same-contract.test.mjs。eval:EP-20260911-p2-resume-teammates。
  • P1 Grok 自定义工人:agents/jj-implementer.md / jj-reviewer.md / jj-researcher.md 替换 general-purpose 的 Start broad。对话路径 spawn jj-implementer / jj-reviewer / jj-researcher(缺失时才回退 general-purpose)。不走内置 explore(会全仓搜索)。审查工人后续固定 reasoning_effort: high(见上条)。install-skill --platform grok|all 写入 ~/.grok/agents。靶场第二轮:.tmp/persona-flow-p1/ TASK1–HANDOFF,工人类型全部命中自定义 agent。合约:tests/install-skill.test.mjs、tests/ralph/assets.contract.mjs、tests/jj-same-contract.test.mjs。eval:EP-20260911-p1-custom-agents。
  • 人格标签 / 反 Start-broad / 运行中审查占位:spawn description 必须以 [implementer] / [reviewer] / [research] 开头(禁止 [reviewer] local changes);prompt 第一段禁止 Start broad / 全库 grep / list_dir;ASSIGNMENT 必须列精确文件(禁止「以现有代码为准」;禁止贴样本 session/commit id,工人会执行 git show);same 派单拆成调研/实施两份;调研派单指定路径,不要「先搜再读」。运行中的 [reviewer] 未结束时 $jj-same 不得再 spawn(占位优先于「本轮必须 spawn」)。G-ralph-4 / G-review-4 / G-same-2。样本 miss:01a08fa6。靶场:.tmp/persona-flow-family/ TASK1–HANDOFF。合约:tests/ralph/assets.contract.mjs、tests/jj-review-contract.test.mjs、tests/jj-same-contract.test.mjs。
  • 派遣前先告诉用户这一步:主进程在 spawn 开发 / 审查 / 调研 / 交接实施子代理之前,先输出一行用户可见进度(如「派遣前端开发实现任务」「派遣 reviewer 审查改动代码」),不要静默等待。Grok 可能把工具调用之后的正文延迟到子代理返回才显示,所以这行必须写在 spawn 之前。G-ralph-2 / G-review-2。样本 miss:01a08fa0。合约:tests/ralph/assets.contract.mjs、tests/jj-review-contract.test.mjs、tests/jj-same-contract.test.mjs。
  • 对话记录按客服文档:$jj-ralph / $jj-same / $jj-dispatch / $jj-review 对话路径不执行 ralph_ops / jj ralph(含 locate / init / deliver-attempt / gate / finalize)。记录写 progress.md + 双写 run.json;归档移动到 completed/ + index.md。G-ralph-3。机械 CLI 仍保留给 CLI 用户。合约:tests/ralph/assets.contract.mjs、tests/jj-same-contract.test.mjs、tests/jj-dispatch-contract.test.mjs。
  • 审查按客服文档约束:对话路径写 ASSIGNMENT-REVIEW + findings.md + REV-n.json(含 run.json.review.reviews[] 与 accept_layers.judgment),不执行 review-record / context --review。HIGH→high。先回复 [OK]/[BLOCK] 再落盘。本轮文案/样式跳过。审查员只读指定文件,禁止全仓 grep。G-review-3(样本 01a08ea0)。命令入口与 strict 门禁错误指向 $jj-review 文档,不引导 CLI。机械 CLI 仍保留。合约:tests/jj-review-contract.test.mjs、tests/ralph/review.contract.mjs、tests/ralph/conversation.contract.mjs、tests/ralph/assets.contract.mjs。
  • 交接按客服派单 + 派单:对话路径 $jj-same 先写本轮 ASSIGNMENT-RESEARCH / ASSIGNMENT-HANDOFF(目标仓调研后再实施),spawn 必须带派单前缀;$jj-dispatch 的 distribution_prompt 只是统筹索引,不是子代理操作说明。G-same-1(样本 01a08e5b d53a16510)。不把 onboarding.md / assignment.md 绑定到 same 入口。合约:tests/jj-same-contract.test.mjs、tests/jj-dispatch-contract.test.mjs。
  • Ralph 入口按客服 team-lead:主对话只对齐需求、写派单、本轮 spawn_subagent(jj-implementer,缺失则 general-purpose),子代理做完再回报;禁止在父会话中改业务代码或把 skill references/ 当作启动清单。删除 tiny-example.md。G-ralph-2(样本 01a08e5b)。$jj-review 同样:父会话不审、不启动读 reference。命令入口也不再引用那五份参考手册。不声称端到端提速百分比。合约:tests/ralph/assets.contract.mjs、tests/jj-review-contract.test.mjs。
  • 派单提示词 + 闭环对齐客服:ASSIGNMENT-TASK / ASSIGNMENT-REVIEW / ASSIGNMENT-FIX 用客服正文(来自 team-lead 的 Task n+1 派单模板:先确认再开工、读这些 / 交付 / 不要改、短句汇报等)。闭环:一轮一派 → 子代理汇报后停止 → 验证通过写改动摘要 → 大功能审查 → [OK]/[WARN] 后用户验收 → accept。小改跳过审查。合约:tests/ralph/assets.contract.mjs。
  • 审查改走客服规范:$jj-review 写 ASSIGNMENT-REVIEW 并 spawn 只读 reviewer;禁止宿主 /review / [reviewer] local changes(含 unbound 与「当前的全部改动」——扩展派单文件列表后仍 spawn)。检查维度:类型安全、null 处理、API 契约、回归。产出 findings.md:HIGH/MEDIUM/LOW + [OK]/[WARN]/[BLOCK];双写 REV-*.json([OK]/[WARN]→PASS,[BLOCK]→NEEDS_CHANGES)。大功能(非 tiny)deliver 后 next=review;tiny 小改跳过审查。G-review-1 follow-up delta 不变。G-review-2。样本:EP-20260910 bound 首次 52–96 次工具调用。合约:tests/jj-review-contract.test.mjs、tests/ralph/conversation.contract.mjs。
  • Ralph 派单文件 + 独立子代理:当前切片写 assignments/ASSIGNMENT-TASK<n>.md(读这些 / 交这些 / 不要改那些 / 做完等下一轮),spawn 只读取该文件,不读取聊天。对话面不再引导机械 --lite 封顶。G-ralph-1。
  • Ralph 对话路径按客服派单:full run 不再用永久 max_iterations 锁死同一 run_id。当前这一轮 = 下一个未勾 Step;scope --replace-in / 从 COMPLETED、ABANDONED、PAUSED resume 开新 progress 轮并重置 attempt 计数,一并重置上一轮遗留 STAGNATION。STAGNATION 仍拦截同一切片连败。机械 --lite 仍封顶 max_deliver_loops。禁止 set-status 伪装上调上限。G-ralph-1。样本:EP-20260910 task-260911-risk-setting。合约:tests/ralph/gates.contract.mjs、tests/jj-ralph-contract.test.mjs。
  • 工作流执行优化:已知 run 直接定位;Ralph 默认输出当前合同、阶段提示、验证尾部与范围预检;review 一次交接并从文件写回;end 固定步骤收敛为 preview / execute。不声称端到端提速百分比。合约:tests/ralph/context.contract.mjs、tests/end/runner.contract.mjs、tests/jj-ralph-contract.test.mjs、tests/jj-end-contract.test.mjs。计划:docs/exec-plans/completed/2026-09-09-workflow-execution-fastpath.md。
  • Host-trial 隔离外部 Trace2:临时 Git 子进程禁用外部 Trace2 消费,避免 Git AI 等后台进程在清理期间重建 .git 导致 EBUSY/ENOTEMPTY。真实 Git/worktree 验证及清理门禁保留,CLI 测试失败展示完整报告。合约:tests/host-trial.test.mjs。
  • Ralph resume 不再写「进行中」占位:progress.md 只追加,占位无法回填。resume 只记原因;appendProgressRound 有真实 result 才写结果行。合约:tests/jj-ralph-contract.test.mjs。
  • Ralph 对话协议精简:入口压缩至 77 行,详细操作下沉 references/ops.md。init 静默推断引擎预算,init/resume 自动检索最多 5 条 CAP;返回结果中的注释不会写入 ledger。对话 gate deliver PASS 先检查 Goal、验收、Step 文件与存疑,再次保存 analyze/plan/deliver;机械 CLI 保留单命令入口及遗留兼容。默认 accept→finalize,审查/提交依证据与授权进行。Ralph 合约按职责拆分,保留 tests/jj-ralph-contract.test.mjs 聚合入口;设计:docs/design-docs/ralph-skill-slim.md。

0.2.1 — 2026-09-08 09:41 ​

  • install-skill 升级补缺失 skill:已有 jj-ralph 等文件时不再整组 target-exists 拒绝。默认补上新 skill(如 jj-init),不覆盖已有文件;--force 才刷新旧副本。场景:全平台装过旧版后对话里没有 /jj-init。合约:tests/install-skill.test.mjs。
  • skill-en-zh-rewrite 不随用户端分发:仓库维护 skill,不打入 npm 包、不随 install-skill 分发;重装时清理宿主目录残留。合约:tests/install-skill.test.mjs。
  • CI:gym pin 升到 L1-S7a lean 合同:loop 75461e1(Goal 改写进 progress,禁 live Landed;含 L1-S9/S10)、family 652d1f5(L2-S7/S8)。ed72b08 overlay 在新 pin 上 no-op。合约:tests/lab-check.test.mjs。
  • CI:loop gym L1-S7a overlay(lean 合同):77f5a6b 合入 lean task_plan 后,pin ed72b08 的 L1-S7a 仍要 live plan 生成 已落地/Landed,verify / lab-windows 报 LAB-ORACLE-FAIL。产品仓无权推 jj-lab-loop,故 lab-check 在旧 marker 存在时拷贝 scripts/lab-overlays/jj-lab-loop/ed72b08-lean-l1-s7a/(改写 Goal,历史进 progress.md 的 ## YYYY-MM-DD — approach change)。gym 合入同逻辑并升 pin 后 overlay 自动 no-op。合约:tests/lab-check.test.mjs。

更早的版本见更新日志归档。