)
【免费下载链接】gsd-coreGit. Ship. Done - Core项目地址https://gitcode.com/gh_mirrors/ge/gsd-core点击查看免费下载导读本文基于 GSDGit. Ship. Done - Core仓库中的变更记录.changeset/archived/curious-bears-march.mdFixed 类型PR 3012完整还原一次斜杠命令表面整合的收尾修复随着 PR #2824 将 86 个技能整合为约 58 个独立的/gsd-reapply-patches命令被折叠为/gsd-update的--reapply标志但 1.39.1 hotfix 遗漏了若干运行时与文档引用导致用户在安装后点击输出中的旧命令时反复遭遇Unknown command。读完本文你将掌握这次命令折叠的来龙去脉、reportLocalPatches运行时输出的实现细节、各 AI 运行时reapplyCommand的声明方式以及仓库如何用回归测试防止旧命令死灰复燃。一、背景技能表面整合Skill Surface ConsolidationGSD 将大量微技能以斜杠命令形式暴露给各 AI 运行时。为了降低技能列举开销v1.40.0 引入了技能表面整合见 docs/features/skill-surface-consolidation.md把 31 个微技能折叠进 4 个新的分组父技能和 6 个既有父技能所有被移除微技能的行为通过父技能上的标志参数保留实现零功能损失。整合后commands/gsd/*.md从 86 个技能缩减到约 58 个。关键设计约束REQ-CONSOLIDATE-04明确要求被删除的微技能斜杠形式包括gsd-reapply-patches必须解析为Unknown command不得留下任何影子存根。这正是本次 changeset 所涉问题的根源——旧命令被删除后任何仍然推荐它的文本都会把用户引向一条已死的命令。二、命令折叠/gsd-reapply-patches→/gsd-update --reapply/gsd-reapply-patches原本是独立命令其工作流文件仍保留在仓库中gsd-core/workflows/reapply-patches.md 开头明确注明 Invoked by/gsd:update --reapply即它现在只作为更新流程的一个子流程被调用不再有独立的斜杠入口。折叠后的统一入口是/gsd-update。在命令定义 commands/gsd/update.md 中可以看到argument-hint为[--sync | --reapply | --next | --rc]--reapply标志的语义为更新后重新应用本地修改使用三方比较pristine 基线、用户修改备份、新安装版本把用户自定义内容合并回来并运行 reapply-patches 工作流解析逻辑当$ARGUMENTS首 token 为--reapply时剥离标志并执行 reapply-patches 工作流commands/gsd/update.md。三、问题1.39.1 hotfix 遗漏的四处引用changeset 记录PR #2824 完成整合后1.39.1 hotfix#2954只更新了help.md却遗漏了以下引用点导致用户在存在已备份补丁的情况下每次安装后都会遭遇Unknown commandbin/install.js的reportLocalPatches运行时输出——安装器在检测到本地补丁后打印的运行哪条命令来合并提示gsd-core/workflows/update.md的 Step 4——更新工作流中提示用户如何重新应用补丁的步骤英语 zh-CN / ja-JP / ko-KR 文档集——多语言文档中残留的旧命令推荐。在 gsd-core/workflows/update.md 与 gsd-core/workflows/update.md 中可以看到当前统一为/gsd:update --reapply的表述。从仓库结构看这些遗漏集中在一个共性上旧命令以推荐给用户的提示文本形式散布在运行时输出、工作流正文和翻译文档中而 hotfix 只修补了入口文档没有同步所有面向用户的命令字符串。这正是命令删除类变更最典型的风险——命令本体可以一次删除但所有引用它的文本必须同步清理。四、修复实现reportLocalPatches与宿主行为声明修复的核心落在安装器的运行时补丁提示函数reportLocalPatchesbin/install.js。其逻辑为读取补丁目录gsd-local-patches/backup-meta.json若meta.files非空逐条打印被备份的本地修改文件输出提示命令const reapplyCommand _hostBehaviors(runtime).reapplyCommand || /gsd-update --reapply;然后打印Run reapplyCommand to merge them into the new version.关键设计是命令字符串不再硬编码在安装器里而是从宿主行为声明解析_hostBehaviors(runtime)bin/install.js通过_resolveHostBehaviors从能力注册表capabilities/runtime/capability.json的runtime.hostBehaviors读取运行时声明若某运行时未声明reapplyCommand则回退到默认值/gsd-update --reapplyfail-safe 回退。各运行时在capabilities/*/capability.json中声明的reapplyCommand如下可逐一核对运行时声明的 reapplyCommand出处cline/gsd-update --reapplycapabilities/cline/capability.jsoncodex$gsd-update --reapplycapabilities/codex/capability.jsoncopilot/gsd-update --reapplycapabilities/copilot/capability.jsoncursorgsd-update --reapply (mention the skill name)capabilities/cursor/capability.jsonhermesgsd-update --reapply (mention the skill name)capabilities/hermes/capability.jsonkilo/gsd-update --reapplycapabilities/kilo/capability.jsonkimi/skill:gsd-update --reapplycapabilities/kimi/capability.jsonkimi-code/skill:gsd-update --reapplycapabilities/kimi-code/capability.jsonopencode/gsd-update --reapplycapabilities/opencode/capability.jsonclaude未声明使用默认回退capabilities/claude/capability.json从这份声明表可以推断命令字符串按宿主方言适配如 kimi 系列使用/skill:前缀、codex 使用$前缀、cursor/hermes 附加提及技能名的提示未声明者统一回退到默认形式。CHANGELOG 也印证了这一演进方向——Cursor、Cline 等运行时在迁移到 Host-Integration Interface 时reapplyCommand正是被折叠进描述符驱动runtime.hostBehaviors的字段之一见 CHANGELOG.md 相关条目。五、回归防护从 deny-list 到 docs-parity 正向断言changeset 记载的回归测试是tests/bug-3010-reapply-patches-references.test.cjs其扫描范围为bin/install.js、每个 workflow 文件、每个文档排除 CHANGELOG 历史与help.md的弃用通知查找对已删除命令的过时推荐。仓库中该测试文件已不在测试目录取而代之的是演进后的正向断言测试 tests/docs-parity-live-registry.test.cjs#3049。该文件头部明确记载它取代了三个 deny-list 测试其中就包括bug-3010-reapply-patches-references.test.cjs并将测试极性从这些特定死命令必须缺席翻转为**文档中每个斜杠命令 token 必须是已注册的活命令**前者deny-list只针对已知的死命令清单会漏掉活命令被改名但文档未同步这类新故障后者正向断言能同时捕获两类失败文档引用刚被删除的命令无需修改测试文件即可发现、活命令改名但文档未更新。扫描面包括docs/*.md及docs/{ja-JP,ko-KR,zh-CN,pt-BR}/*.md全部本地化文档豁免项仅保留gsd-core/workflows/help.md弃用轨迹说明和CHANGELOG.md历史发布记录不可改写——与 changeset 描述的排除范围一致。六、测试佐证安装器输出的负向断言除文档扫描外安装器行为本身也有直接的单元测试保护。在 tests/copilot-install.test.cjs 中测试构造gsd-local-patches/backup-meta.json含from_version与files调用reportLocalPatches(tmpDir, copilot)/(claude)正向断言输出必须包含/gsd-update --reapply负向断言输出不得包含/gsd-reapply-patches也不得包含/gsd:reapply-patches冒号形式同样禁止。测试注释明确指出/gsd-reapply-patcheswas removed in 1.39 (PR #2824) and folded into a flag on/gsd-update— see #3010负向断言正是防止回归到已删除命令的守护。七、用户视角今天的--reapply用法经过本次修复所有面向用户的入口都统一为/gsd-update --reapply。在实际操作中依据 docs/how-to/update-gsd.md更新并重放补丁/gsd-update --reapply—— 更新后把gsd-local-patches/中备份的本地修改合并回新版本单独重放即使已经是最新版本/gsd-update --reapply也会跳过安装步骤、直接执行补丁合并因此可以安全地单独运行触发条件当你直接修改了 GSD 安装的文件例如调整某个 agent 的系统提示安装器会通过 SHA-256 哈希比较检测到修改把文件备份到gsd-local-patches/并写入backup-meta.json随后替换为新版本——安装完成后的提示文本reportLocalPatches的输出会告诉你运行哪条命令来合并。整个合并流程由 gsd-core/workflows/reapply-patches.md 驱动先检测备份目录覆盖 kilo/opencode/antigravity/codex/claude 等多个运行时配置路径再选择三方比较基线backup-meta.json记录的 pristine 哈希 git 历史优先、gsd-pristine/快照次之、无基线时使用强化启发式的两方比较合并后经过确定性验证门gsd-core/bin/verify-reapply-patches.cjs见 gsd-core/workflows/reapply-patches.md与 Hunk 验证表双层把关最后询问是否清理备份。八、小结本次 changesetPR 3012是一个典型的命令整合收尾修复样本功能层面的折叠早已在 PR #2824 完成真正的风险集中在所有面向用户的命令字符串引用——安装器运行时输出、工作流正文、多语言文档。修复既体现在实现层面reportLocalPatches从capabilities/*/capability.json的hostBehaviors.reapplyCommand解析命令未声明者回退默认值也体现在防护层面先有 deny-list 式回归测试后演进为 docs-parity 正向断言让每个文档中的斜杠命令都必须是活命令成为持续强制的不变式。对使用 GSD 的开发者而言记住一条即可补丁重放只有一条路——/gsd-update --reapply。赞分享【免费下载链接】gsd-coreGit. Ship. Done - Core项目地址https://gitcode.com/gh_mirrors/ge/gsd-core点击查看免费下载相关推荐gsd-core 补丁重放的三方合并基线gsd-pristine/ 填充机制与 reapply-patches 确定性验证gsd core 补丁重放的三方合并基线gsd pristine/ 填充机制与 reapply patches 确定性验证 本篇技术指南聚焦 gsd coreGSD Core 命令整合实践/gsd-plan-phase --research-phase N 研究专属模式与过时引用清理GSD Core 命令整合实践 /gsd plan phase research phase N 研究专属模式与过时引用清理 导读 本篇文章围绕 gsd cgsd-core 更新补丁重放修复/gsd-update --reapply 排除过滤器与安装器提交误判问题详解gsd core 更新补丁重放修复 /gsd update reapply 排除过滤器与安装器提交误判问题详解 导读 本文围绕 gsd core 仓库中的一个创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考