ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

get-shit-done 本地补丁重放命令的收敛实践:从 `/gsd-reapply-patches` 到 `/gsd-update --reapply` 的一致性修复

get-shit-done 本地补丁重放命令的收敛实践:从 `/gsd-reapply-patches` 到 `/gsd-update --reapply` 的一致性修复 get-shit-done 本地补丁重放命令的收敛实践从/gsd-reapply-patches到/gsd-update --reapply的一致性修复【免费下载链接】get-shit-doneA light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code by TÂCHES.项目地址: https://gitcode.com/GitHub_Trending/getshi/get-shit-done本文以 .changeset/curious-bears-march.md 记录的 Fixed 型变更PR #3012为主线剖析 get-shit-done 在技能整合后如何把被移除的/gsd-reapply-patches命令收敛为/gsd-update --reapply标志并修复安装器运行期提示、升级工作流与多语言文档中的陈旧命令引用。读完本文你将理解该项目的命令收敛机制、补丁重放reapply patches的完整调用链以及维护“命令引用一致性”所需的回归测试思路。一、背景技能整合与命令的“flag 化”get-shit-done 曾有一次大规模技能整合据 changeset 描述PR #2824 将 86 个技能收敛为约 58 个当前仓库多语言 README 中体现的口径为 4 个分组技能吸收 31 个微技能、最终约 59 个各发布文档的计数表述略有差异但方向一致例如 README.zh-CN.md 明确写道4 个新分组技能capture、phase、config、workspace吸收了 31 个微技能。6 个已有父技能将收尾与子操作合并为标志update --sync/--reapply、sketch --wrap-up、spike --wrap-up、map-codebase --fast/--query、code-review --fix、progress --do/--next。功能无损失。其中关键的一处收敛是独立的微技能命令/gsd-reapply-patches被删除重放本地补丁的能力被折叠为/gsd-update --reapply标志。docs/FEATURES.md的 REQ-CONSOLIDATE-03 记录了这类约束——被删除的微技能斜杠形式如gsd-reapply-patches、gsd-settings-advanced、gsd-code-review-fix等必须解析为 “Unknown command”不允许保留影子存根shadow stubs。这意味着任何仍会引导用户执行旧命令的文本都会直接把用户带进死胡同。二、问题暴露遗留推荐与 “Unknown command” 报错命令删除后凡是仍推荐旧命令的位置都会让用户踩坑。changeset 指出1.39.1 热修复#2954只更新了help.md却遗漏了以下三处bin/install.js的reportLocalPatches运行期提示器——每次安装后只要检测到备份过的本地补丁就会打印“如何重放补丁”的建议get-shit-done/workflows/update.md 第 4 步——升级工作流中提示用户处理备份补丁的段落英文 zh-CN / ja-JP / ko-KR 的多语言文档集。后果是用户每次安装且存在备份补丁时都会收到一条指向已删除命令的提示执行后得到 “Unknown command”体验断裂。这是典型的“命令面command surface重构后文档与运行期输出未同步”的连锁故障也解释了为什么本项目会把这类一致性检查固化成回归测试。三、新形态解析/gsd-update如何承载--reapply要理解修复目标先要看清收敛后的规范形态。当前 commands/gsd/update.md 是/gsd-update命令的权威定义其 argument-hint 为[--sync | --reapply]并把三个分支描述得很清楚调用形态行为/gsd-update无标志标准更新检查新版本、展示 changelog、确认后安装/gsd-update --sync更新后跨运行时根同步受管技能执行 sync-skills 工作流/gsd-update --reapply更新后重放本地改动基于三方比较pristine 基线、用户改动备份、新安装版本把用户定制合并回来执行 reapply-patches 工作流其process规定解析$ARGUMENTS的第一个 token若是--reapply就去掉该标志并执行 reapply-patches 工作流相应工作流文件通过~/.claude/get-shit-done/workflows/reapply-patches.md注入执行上下文。也就是说--reapply在语义上完全继承了原/gsd-reapply-patches命令的能力——这正是“以标志替代命令、功能无损失”这一收敛原则的落地体现。升级工作流 get-shit-done/workflows/update.md 中对用户直接改动过的 GSD 文件会自动备份到gsd-local-patches/随后用/gsd:update --reapply引导合并——这也印证了 changeset 所描述的“Step 4 引用需同步更新”的修复对象。四、修复核心reportLocalPatches运行期分支统一输出修复的关键在安装器 bin/install.js 的reportLocalPatches。该函数在安装完成后读取补丁目录gsd-local-patches/下的backup-meta.json若不存在或无法解析该元数据文件直接返回空数组不输出任何提示若存在补丁文件列表则按运行时runtime生成对应的“重放命令”并打印本地补丁清单与指引。当前实现中重放命令的生成逻辑体现了各 AI 编码助手对命令前缀/语法约定的差异const reapplyCommand (runtime opencode || runtime kilo || runtime copilot) ? /gsd-update --reapply : runtime gemini ? /gsd:update --reapply : runtime codex ? $gsd-update --reapply : runtime cursor ? gsd-update --reapply (mention the skill name) : /gsd-update --reapply;汇总如下运行时安装后提示的重放命令说明claude/gsd-update --reapply默认斜杠形态opencode / kilo / copilot/gsd-update --reapply同一形态gemini/gsd:update --reapply冒号分隔命名空间codex$gsd-update --reapply$前缀形态cursorgsd-update --reapply (mention the skill name)要求提及技能名以便路由随后打印如下文案这是每次“带备份补丁安装”后用户实际看到的提示即本 changeset 修复的“运行期发射器”Local patches detected (from vfrom_version): 备份文件路径列表 Your modifications are saved in gsd-local-patches/ Run reapplyCommand to merge them into the new version. Or manually compare and merge the files.从源码结构看安装器还负责在检测到补丁时填充gsd-pristine/pristine 基线为 reapply 阶段的三方合并做准备对应 changeset 引用的 #2998 相关能力失败时软降级回退。因此reportLocalPatches中任何一处指向旧命令的字符串都会直接出现在每一位受影响用户的终端上——这也是本修复把重心放在这一函数上的原因。五、回归防线扫描安装器、工作流与多语言文档changeset 明确指出#3010 对应的问题还要求一套回归测试扫描目标包括bin/install.js、每个工作流文件以及每个文档CHANGELOG 历史与 help.md 中的弃用说明除外确保没有任何“陈旧推荐”再溜进用户可见面。在当前仓库可以找到这些断言的直接落地。例如 tests/copilot-install.test.cjs 的reportLocalPatches测试组会构造带backup-meta.json的临时补丁目录并断言输出包含规范的/gsd-update --reapply分别针对 Copilot、Claude 运行时反向断言输出绝不包含/gsd-reapply-patches或/gsd:reapply-patches以此防住对“已删除命令”的回归。从整个测试面看tests/下还有reapply-patches.test.cjs、bug-2969-verify-reapply-patches.test.cjs、bug-2994-verify-reapply-patches-installed-path.test.cjs、enh-2790-skill-consolidation.test.cjs等一系列用例覆盖补丁基线检测、验证脚本、安装路径等场景。这意味着“删除命令 → 收敛为标志”不只是改一处字符串而是一整套可验证的命令面契约command contract改动。六、给用户与维护者的实操建议作为用户安装后如何正确重放本地补丁若某次安装/升级后收到 “Local patches detected” 提示说明你对 GSD 文件的直接改动已被备份到gsd-local-patches/执行提示中给出的规范命令Claude 等场景即/gsd-update --reapply工作流会基于 pristine 基线、你的备份与新装版本做三方合并若合并遇到内容丢失风险重放验证器会以逐文件诊断的方式指出缺失并中止工作流供你人工核对也可以进入gsd-local-patches/手动对比、合并备份文件。对应的疑难解答在 docs/USER-GUIDE.md 中也有登记“Update broke local changes →/gsd-update --reapply”而 docs/COMMANDS.md 与 docs/ARCHITECTURE.md 则分别记录了该命令的参数表与“v1.17 起补丁备份 →/gsd-update --reapply”的架构演进。若升级文档或安装提示再出现 “Unknown command”优先怀疑命令面已收敛而引用未同步可对照上述规范命令核对。作为维护者让命令重构不留尾巴每次删除/重命名命令时把安装器运行期输出、命令定义文件、工作流脚本与多语言文档视为同一“命令面”一并排查用回归测试做正向 反向断言既断言新形态存在也断言旧形态绝不出现如tests/copilot-install.test.cjs的做法将扫描范围固定为bin/install.js、全部工作流与全部文档并对 CHANGELOG 历史与带弃用说明的 help 页面设置豁免避免误报——这正是 #3010 回归测试的设计思路。结语从一个 “Fixed” 变更集出发可以看到get-shit-done 的/gsd-reapply-patches → /gsd-update --reapply并非简单的字符串替换它涉及技能整合策略flag 化收敛、运行期提示的分运行时适配claude / opencode / kilo / copilot / gemini / codex / cursor、工作流第 4 步的同步以及覆盖英文与中/日/韩多语言文档的回归扫描。理解这一条修复链也就理解了该项目如何在高频重构中保住用户可见命令面的一致性。【免费下载链接】get-shit-doneA light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code by TÂCHES.项目地址: https://gitcode.com/GitHub_Trending/getshi/get-shit-done创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表