get-shit-done 配置键白名单机制解析:workflow._auto_chain_active 为何不再被 config-set 拒绝

发布时间:2026/10/31 11:12:25

get-shit-done 配置键白名单机制解析:workflow._auto_chain_active 为何不再被 config-set 拒绝 get-shit-done 配置键白名单机制解析workflow._auto_chain_active 为何不再被 config-set 拒绝【免费下载链接】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本文以 get-shit-doneGSD的一个 changeset 修复PR #3197为主体讲解gsd-tools config-set workflow._auto_chain_active从被拒绝到被接受的完整过程一个内部运行时状态键RUNTIME_STATE_KEYS因 SDK 与 CJS 双端 schema 未同步而报出 Unknown config key以及修复如何通过三层校验、manifest 单一事实源和 CI 一致性断言从根本上杜绝此类漂移。读完后你能定位 GSD 配置键校验的调用链、理解双端 schema 的同步机制并复现/验证这一回归测试。问题背景一个内部运行时状态键被 config-set 拒绝workflow._auto_chain_active是 GSD 的内部运行时状态键runtime-state key用于追踪「自主链式执行autonomous chaining」是否处于激活状态。它在 GSD 的多个工作流执行链中被反复读写在get-shit-done/references/planning-config.md第 268 行中它被登记为键类型默认值取值说明workflow._auto_chain_activebooleanfalsetrue,falseInternal: tracks whether autonomous chaining is active写入方来自多个 workflow。例如get-shit-done/workflows/discuss-phase/modes/chain.md中的链式推进步骤会执行gsd-sdk query config-set workflow._auto_chain_active true/... false执行器 agent 也会在 执行器定义 中读取它AUTO_CHAIN$(gsd-sdk query config-get workflow._auto_chain_active 2/dev/null || echo false)。它参与检查点checkpoint的自动放行逻辑如get-shit-done/references/checkpoints.md第 11 行所述当workflow._auto_chain_active或workflow.auto_advance为true时human-verify 会自动批准、decision 自动选中第一个选项而 human-action 仍会停止认证门控无法自动化。关键问题在于这类键以下划线前缀_auto_chain_active标记为「内部状态」用户并不期望手动设置它但它必须能被config-set合法写入——否则工作流自身执行到该步骤时就会失败。这正是 PR #3197 要修复的场景。changeset.changeset/fix-3197-gsd-tools-config-whitelist.md记录了缺陷gsd-tools config-set workflow._auto_chain_activeno longer rejected—workflow._auto_chain_activeis an internal runtime-state key written by plan-phase, execute-phase, discuss-phase, and transition workflows. PR #3162 added it toRUNTIME_STATE_KEYSin the SDKsconfig-schema.tsbut did not mirror the change to the CJSconfig-schema.cjsused bygsd-tools.cjs. Users routed throughgsd-tools.cjscontinued to see Unknown config key (#3033).也就是说#3162 在 SDK 侧把该键加入了RUNTIME_STATE_KEYS但没有同步到 CJS 侧的config-schema.cjs于是走gsd-tools.cjs入口的用户仍然撞上 Unknown config key原始缺陷报告为 #3033。配置键校验的三道关卡GSD 对config-set key.path value的校验并非「非黑即白」而是由三个集合依次判定。以最典型的 CJS 校验器为例get-shit-done/bin/lib/config-schema.cjsfunction isValidConfigKey(keyPath) { if (VALID_CONFIG_KEYS.has(keyPath)) return true; // 1. 静态合法键精确匹配 if (RUNTIME_STATE_KEYS.has(keyPath)) return true; // 2. 运行时状态键#3197 新增的判断 return DYNAMIC_KEY_PATTERNS.some((p) p.test(keyPath)); // 3. 动态键正则模式 }三层语义分别是VALID_CONFIG_KEYS— 用户可配置的静态键精确字符串匹配如workflow.auto_advance、git.create_tag、model_profile。RUNTIME_STATE_KEYS— 内部运行时状态键通常不由用户手设但工作流需要config-set写入。当前集合只有workflow._auto_chain_active一项。DYNAMIC_KEY_PATTERNS— 带命名空间的动态键用正则匹配例如agent_skills.agent-type、review.models.cli-name、features.feature_name等。这三个集合的真实取值都来自单一 manifest sdk/shared/config-schema.manifest.json。其中runtimeStateKeys段第 101–103 行为runtimeStateKeys: [ workflow._auto_chain_active ]dynamicKeyPatterns段则列出了agent_skills、review.models、features、claude_md_assembly.blocks、model_profile_overrides、models、dynamic_routing、model_overrides、review.max_prompt_tokens_per_reviewer等正则模式。当isValidConfigKey全部落空时CJS/SDK 侧会抛出Unknown config key: key并附带基于「最长公共前缀」的键名纠错建议见 sdk/src/query/config-mutation.ts 的isValidConfigKey其中CONFIG_KEY_SUGGESTIONS先于 LCP 兜底提供更精确的提示。缺陷的本质就是workflow._auto_chain_active落在第二关RUNTIME_STATE_KEYS应当命中但 CJS 侧的RUNTIME_STATE_KEYS是空的于是掉进了Unknown config key分支。根因SDK 与 CJS 双端 schema 漂移GSD 存在两条config-set的执行路径历史上各自维护一份 schema 字面量路径入口校验器schema 来源#3197 时期CJSget-shit-done/bin/gsd-tools.cjsget-shit-done/bin/lib/config.cjs 调isValidConfigKeyconfig-schema.cjs内联SDKgsd-sdk query config-setsdk/src/query/config-mutation.ts 的configSetconfig-schema.ts内联CJS 路径gsd-tools.cjs→config.cjs的cmdConfigSet第 410 行if (!isValidConfigKey(keyPath))→config-schema.cjs的isValidConfigKey。SDK 路径config-mutation.ts的configSet第 281 行const validation isValidConfigKey(keyPath)→config-schema.ts的isValidConfigKeyPath。PR #3162 只改了 SDK 侧config-schema.ts把workflow._auto_chain_active加进了RUNTIME_STATE_KEYSCJS 侧的config-schema.cjs没有跟随。结果就是同一句config-set workflow._auto_chain_active true走 SDK 入口能成功走gsd-tools.cjs入口却报 Unknown config key——这就是 #3033 的现象也是双端 schema 字面量「漂移」的典型后果。修复方案把 RUNTIME_STATE_KEYS 纳入 CJS 校验changeset 明确列出了 #3197 的四处改动均可在仓库源码中一一对应给config-schema.cjs增加RUNTIME_STATE_KEYS并与VALID_CONFIG_KEYS一同导出get-shit-done/bin/lib/config-schema.cjsmodule.exports { VALID_CONFIG_KEYS, RUNTIME_STATE_KEYS, DYNAMIC_KEY_PATTERNS, isValidConfigKey };更新isValidConfigKey()接受运行时状态键——即在VALID_CONFIG_KEYS命中之后、DYNAMIC_KEY_PATTERNS之前插入if (RUNTIME_STATE_KEYS.has(keyPath)) return true;第 27 行。SDK 的config-mutation.ts改为导入并校验同一集合sdk/src/query/config-mutation.ts 从./config-schema.js导入RUNTIME_STATE_KEYS并在isValidConfigKey第 165 行做RUNTIME_STATE_KEYS.has(keyPath)判断使双端判定逻辑对齐。新增 CI 一致性断言确保两侧的RUNTIME_STATE_KEYS集合保持同步见下节。修复后config-set成功写入的返回值形如config-mutation.ts 第 446–454 行{ data: { updated: true, key: workflow._auto_chain_active, value: true } }值得强调的是取值语义true/false会被parseConfigValue第 208–216 行强制转换为原生布尔避免把字符串true写进config.json。纵深manifest 单一事实源与结构性防漂移#3536changeset 描述的 #3197 是「立即修复」而当前仓库的源码结构显示随后一次重构Phase 2 Cycle 5#3536把这种漂移从「需要 CI 拦截」升级成了「结构上不可能发生」。从当前源码结构看manifest 成为唯一事实源。sdk/shared/config-schema.manifest.json 同时承载validKeys、runtimeStateKeys、dynamicKeyPatterns三份数据其_comment字段说明validKeys是 CJS 与 SDK 两侧并集二者由tests/config-schema-sdk-parity.test.cjs强制集合相等。SDK 侧sdk/src/configuration/index.ts 直接从 manifest 读出VALID_CONFIG_KEYS与RUNTIME_STATE_KEYSexport const VALID_CONFIG_KEYS: ReadonlySetstring new Set(_schemaManifest.validKeys); export const RUNTIME_STATE_KEYS: ReadonlySetstring new Set(_schemaManifest.runtimeStateKeys);而 sdk/src/query/config-schema.ts 已变成一个「薄重导出适配器」不再含任何内联键字面量。CJS 侧get-shit-done/bin/lib/configuration.generated.cjs 是「GENERATED FILE — DO NOT EDIT」同样从 manifest 装载const SCHEMA_MANIFEST loadConfigurationManifest(config-schema.manifest.json); const VALID_CONFIG_KEYS new Set(SCHEMA_MANIFEST.validKeys); const RUNTIME_STATE_KEYS new Set(SCHEMA_MANIFEST.runtimeStateKeys);get-shit-done/bin/lib/config-schema.cjs 则只是require这个生成文件把三个集合透传出去。这样一来#3197 要防的「SDK 加了、CJS 没加」在结构上被消除——两侧都从同一份 manifest 派生不存在两份可独立漂移的字面量。CI 断言tests/config-schema-sdk-parity.test.cjs 的「CJS RUNTIME_STATE_KEYS matches manifest runtimeStateKeys exactly」退化为「确保没人和 manifest 脱钩」的守卫。这也是从源码结构可以推断出的设计意图与其让每个修复去追平两端不如把两端收敛到一个数据源。回归测试与验证针对本次修复的回归测试是 tests/bug-3197-gsd-tools-config-whitelist.test.cjs共三条用例走的是真实的gsd-tools.cjsCJS 路径// 用例 1通过 CJS 路径设置 workflow._auto_chain_activetrue 成功 const result runGsdTools([config-set, workflow._auto_chain_active, true], tmpDir); assert.ok(result.success, config-set workflow._auto_chain_active true should succeed, got:...); // 用例 2/3设置 true / false 后断言 .planning/config.json 中 // config.workflow._auto_chain_active 的确切布尔值三条用例分别验证(1) 不再被拒绝result.success为真(2) 设置true后磁盘config.json中workflow._auto_chain_active true(3) 设置false后为false。测试注释直接点明根因——「RUNTIME_STATE_KEYSwas added to sdk/…/config-schema.ts in #3162 but not to get-shit-done/bin/lib/config-schema.cjs」与上文根因分析一致。配套的一致性守卫 tests/config-schema-sdk-parity.test.cjs 则从 manifest 出发断言CJS 的VALID_CONFIG_KEYS、RUNTIME_STATE_KEYS、DYNAMIC_KEY_PATTERNS与 manifest 完全相等且 SDK 的config-schema.ts是「重导出壳」而非「重新声明的 Set」。相关代码路径速查关注点路径说明本次修复的 changeset.changeset/fix-3197-gsd-tools-config-whitelist.md主体文档PR #3197CJS 入口get-shit-done/bin/gsd-tools.cjsconfig-set命令入口CJS 校验器get-shit-done/bin/lib/config.cjs / config-schema.cjscmdConfigSet调isValidConfigKeyCJS 生成源get-shit-done/bin/lib/configuration.generated.cjs从 manifest 装载三个集合SDK 校验器sdk/src/query/config-mutation.tsconfigSet与isValidConfigKeySDK schema 适配器sdk/src/query/config-schema.ts重导出 isValidConfigKeyPath单一事实源 manifestsdk/shared/config-schema.manifest.jsonruntimeStateKeys在此键的登记与语义get-shit-done/references/planning-config.md / checkpoints.md类型/默认值/自动放行逻辑写入方示例agents/gsd-executor.md / workflows/discuss-phase/modes/chain.md谁在读写该键回归测试tests/bug-3197-gsd-tools-config-whitelist.test.cjs三条用例走 CJS 路径一致性守卫tests/config-schema-sdk-parity.test.cjs双端集合与 manifest 相等版本记录CHANGELOG.md / docs/RELEASE-v1.41.0.md#3197 于 v1.41.0 随版发布小结缺陷workflow._auto_chain_active内部运行时状态键在 #3162 只被加入 SDK 侧RUNTIME_STATE_KEYS未同步到 CJS 侧导致走gsd-tools.cjs的config-set报 Unknown config key#3033。修复#3197CJS 侧config-schema.cjs增加并导出RUNTIME_STATE_KEYSisValidConfigKey()新增运行时状态键判定SDKconfig-mutation.ts对齐校验新增 CI 一致性断言。结构演进#3536sdk/shared/config-schema.manifest.json成为 SDK 与 CJS 双端共同的单一事实源双端集合由其派生从结构上消除了这类「加一端忘另一端」的漂移。验证tests/bug-3197-gsd-tools-config-whitelist.test.cjs功能回归与tests/config-schema-sdk-parity.test.cjs集合一致性共同保证修复不被回退。【免费下载链接】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),仅供参考
延伸阅读

更多相关文章

2026/10/29 23:48:02

从代码补全到研发流水线:MonkeyCode如何将AI嵌入企业开发全流程

放下“代码补全”这个名词,我想聊聊MonkeyCode真正在解决的事情。如果你做过AI编程工具的企业级落地,应该会有同样的感受:给团队装一个能“自动补全”的IDE插件,和把AI真正“焊”进研发流程,中间隔着一条巨大的鸿沟。补…

2026/10/31 11:09:05

内容分析的类目怎么建才站得住?来源举证、试编码与版本留痕

做内容分析,卡住人的常常不是编码软件,而是那张类目表:类目从哪来、两类能不能分开、改过几版谁说得清。这些问题在开题与审稿现场被追问的频率,远高于样本量。下面给出一套可直接照做的动作:来源举证到句子&#xff0…

2026/10/31 11:09:05

K8s -- 启动一主二从节点

前提: 准备三台机器设置固定ip 主节点:192.168.129.135 从节点1:192.168.129.136 从节点3:192.168.129.137 参考 Ubuntu -- 虚拟机配置固定ip-CSDN博客 基本环境搭建 参考K8S -- 集群搭建环境基础-CSDN博客 配置节点 三台机都设置…

2026/10/31 11:09:05

2026光效光晕视频合成素材网站评测

一、引言:光效素材在后期合成中的实际问题在整理光效光晕视频素材时,我发现这类视频虽然都与光线有关,但实际用途存在明显区别。有些素材用于模拟镜头反射,有些用于制作闪光转场,还有一些需要通过透明通道或混合模式叠…

2026/10/31 11:09:05

超低功耗LDO、低噪声LDO、DDR终端稳压器怎么选?DP3703/74401/7172/7151/51200五款国产电源管理芯片选型指南(附参数对照表)

随着新能源汽车电子化率持续提升、AI 服务器与高端 FPGA 加速普及、工业 4.0 与医疗电子对信号精度要求不断加码,电源管理芯片(PMIC/LDO)的设计门槛正变得越来越高: - 汽车待机系统要求 μA 级静态电流,否则电池寿命直…

2026/10/31 11:04:05

AI时代技能折旧加速:收藏这份指南,助你成为不可替代的职场人!

AI正重塑职场,新岗位涌现,传统岗位技能变迁。企业需求从“学过AI的人”转向“能用AI解决业务问题的人”,强调人机协作、专业融合及业务重构能力。AI加速技能折旧,个人需提升学习能力、跨领域理解和工具应用能力。资深职场人应成为…

2026/10/30 20:55:10

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/30 20:55:10

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/30 20:55:09

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/31 0:02:41

猫狗目标检测数据集:VOC/COCO/YOLO三格式一体化实战包

简介:本资源是一套面向计算机视觉初学者与YOLO目标检测实践者的猫狗图像数据集及配套开发工具包,专为快速上手目标检测模型训练而设计。资源包含1000张真实场景高清猫狗图片,标注质量高,同时提供VOC(XML)、…

2026/10/31 0:02:41

HDU2017多校标程复现:算法竞赛工程化真题沙盒

简介:本资源为2017年HDU多校联合训练第一场官方配套资料,面向ACM程序设计竞赛备赛学生、算法爱好者及高校编程集训队成员,旨在提供权威解题参考与完整测试验证环境。压缩包共40个文件,含15份C标程(覆盖全部赛题&#x…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑