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会形成第二个真理源头;改为运营手册放 skillreferences/按需加载 +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.jsonfiles 对齐、命令页九标题骨架、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-reviewRed-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:checkPASS。 - 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。审查工人 Codexmodel_reasoning_effort = "high",Grok/Claude mdreasoning_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(Grokmodel: 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,不要每次冷启动(样本01a08fa611×)。换人格或换仓库必须新开(resume_from继承 cwd,交接目标仓不能复用源仓实施工人)。运行中的工人只用send_subagent_message纠偏,不拿来派下一轮。G-ralph-5 / G-review-5 / G-same-3。靶场第三轮:.tmp/persona-flow-p2/TASK2resume_fromTASK1;审查/调研/交接新开。合约: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。对话路径 spawnjj-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(样本01a08e5bd53a16510)。不把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),子代理做完再回报;禁止在父会话中改业务代码或把 skillreferences/当作启动清单。删除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-20260910bound 首次 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、PAUSEDresume开新 progress 轮并重置 attempt 计数,一并重置上一轮遗留STAGNATION。STAGNATION仍拦截同一切片连败。机械--lite仍封顶max_deliver_loops。禁止set-status伪装上调上限。G-ralph-1。样本:EP-20260910task-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)、family652d1f5(L2-S7/S8)。ed72b08overlay 在新 pin 上 no-op。合约:tests/lab-check.test.mjs。 - CI:loop gym L1-S7a overlay(lean 合同):
77f5a6b合入 leantask_plan后,pined72b08的 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。
更早的版本见更新日志归档。