gstack 模型行为补丁实战gpt-5.6-sol 作用域约束 Overlay 的设计与实现解析【免费下载链接】gstackUse Garry Tans exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA项目地址: https://gitcode.com/GitHub_Trending/gs/gstack本文以 model-overlays/gpt-5.6-sol.md 为核心逐条拆解 gstack 为 GPT-5.6 Sol 模型定制的“作用域约束行为补丁”scope-discipline overlay的六条规则并结合 scripts/resolvers/model-overlay.ts、scripts/models.ts 与端到端测试 test/codex-e2e-sol-scope.test.ts 说明该补丁如何被解析、注入生成的 Skill 文档以及如何被自动化 E2E 用例验证。读完后你将理解 gstack 的“模型轴 × 宿主轴”分层机制掌握为特定模型精确控制“何时停止迭代、何时拒绝扩大范围”这一工程问题的完整方案。一、模型 Overlaygstack 中“按模型调参”的机制gstack 把“宿主host”与“模型model”视为两个独立维度同一个 Claude Code 宿主可以跑 Opus/Sonnet 等不同模型Codex CLI 跑 GPT/o 系列模型。模型维度的支持面定义在 scripts/models.ts 中当前共 10 个模型族export const ALL_MODEL_NAMES [ claude, opus-4-7, fable-5, opus-4-8, sonnet-5, gpt, gpt-5.4, gpt-5.6-sol, gemini, o-series, ] as const;每个模型族对应model-overlays/目录下的一份 Markdown 文件。生成 Skill 文档时解析器 scripts/resolvers/model-overlay.ts 会读取与ctx.model对应的 overlay 文件把它包裹进一个名为## Model-Specific Behavioral Patch ({model})的章节注入到最终生成的 SKILL.md 中例如默认的 SKILL.md 中就渲染为## Model-Specific Behavioral Patch (claude)。该章节由 scripts/resolvers/preamble.ts 调用generateModelOverlay(ctx)参与拼装。解析器遵循明确的优先级规则见 scripts/resolvers/model-overlay.ts 头部注释精确匹配ctx.model gpt-5.6-sol时读取model-overlays/gpt-5.6-sol.mdINHERIT 指令若 overlay 文件首行是{{INHERIT:xxx}}则先把被继承的 overlay如 model-overlays/gpt.md内容前置拼接避免重复书写。例如 model-overlays/gpt-5.4.md 首行就是{{INHERIT:gpt}}在其后追加“反啰嗦协议”文件缺失返回空字符串优雅降级不报错未设置模型返回空字符串。{{INHERIT:...}}的继承解析实现在readOverlayscripts/resolvers/model-overlay.ts带环检测seen集合防止相互继承成环前置检查脚本 scripts/preflight-agent-sdk.ts 也复用了readOverlay来校验 INHERIT 指向的文件是否存在。一个值得注意的设计差异是gpt-5.6-sol.md 没有 INHERIT 头。它不继承 model-overlays/gpt.md 中 GPT 通用族的“完成偏向 / 先做后列 / 无寒暄”等 nudge而是一份完全自包含的行为补丁。这与其“精确匹配专属”的定位一致下一节详述。二、gpt-5.6-sol.md 六条规则逐条解析model-overlays/gpt-5.6-sol.md 全文只有 28 行但信息密度很高它针对 GPT-5.6 Sol 这类“能力过强、倾向于过度工作”的模型专门解决一个具体失败模式——任务范围蔓延scope widening。六条规则如下。1. “显式任务就是湖”The explicit task is the lakeThe users requested target, allowed files or systems, and acceptance criteria are the boundary. Interpret complete, full, exhaustive, every, 100%, and Boil the Ocean as complete within that boundary, never as permission to widen it.这条规则先立边界用户请求的目标、允许触碰的文件/系统、验收标准共同构成不可逾越的边界。再把“complete”“full”“exhaustive”“every”“100%”“Boil the Ocean煮沸大海即做到极致”这类词显式重新定义——它们只能在边界内部理解为“做到完整”永远不构成扩大边界的许可。这是对“模糊完整性词汇”的定点消歧也是后面解析器为 Sol 生成的专属前置声明中点名的核心词表见第三节。2. “邻近工作只汇报、不动手”Keep adjacent work report-onlyRelated but unnecessary refactors, speculative defenses, migrations, cleanup, and pre-existing issues are findings, not implementation work. Mention them briefly at handoff without changing them.与任务相关但并非必需的改动——顺手重构、臆测性防御代码、迁移、清理、存量问题——一律降级为**发现项finding**而非实施项交接时用一两句话提一下即可代码不动。这条直接约束了 Agent 最常见的“好心办坏事”修一个小 bug 时顺手把全文件的 TODO 都清了。3. “有界调查”Bound investigationInspect enough evidence to identify the primary cause and its relevant in-scope consequences. Once those are established, stop widening the search unless a concrete contradiction or failed acceptance criterion requires more evidence.排查要有界收集到足以定位主因及其范围内后果的证据就停除非出现具体矛盾或验收标准不通过否则不继续扩大搜索面。这约束的是“查得太深”方向的范围蔓延无限 grep、无限读源码。4. “验证通过即终止”Terminate on verified completionAfter the requested artifact is complete, run one clean relevant verification pass. If it passes, stop and report. Do not repeat passing checks, reopen settled questions, or harden hypothetical failure modes unless the user asks or a concrete failure makes that work necessary.这是四条规则里最直接的“刹车”交付物完成后跑一次干净且相关的验证通过后立即停止并汇报。明确禁止三个典型过度行为重复跑已经通过的检查、重开已定论的问题、为假设性失败模式加固除非用户要求或发生了具体失败。5. “范围内完整性仍然重要”Completeness still matters inside scopeDo not use the boundary to skip a required workflow step, safety gate, relevant regression test, edge case, or error path. Finish the whole requested job, then stop.这条是前四条的平衡配重边界是防“向外扩”不是防“向内省”。不得以“控制范围”为借口跳过必要的工作流步骤、安全门、相关回归测试、边界情况或错误路径。先把整个请求内的活干完再停。这防止了 overlay 被误用成“做一半就收工”的许可证。6. “AskUserQuestion 永不压缩”AskUserQuestion is never trimmedBounded scope does not compress decision briefs. Every AskUserQuestion carries the full format from the preamble: the ELI10 paragraph, aRECOMMENDATION:line on its own line, and scored options. When a skill workflow says STOP or asks via AskUserQuestion, that gate wins over any urge to terminate — wait for the user.范围收窄不压缩决策简报。每次 AskUserQuestion 都必须携带 preamble 定义的完整格式ELI10 段落面向 16 岁读者能懂的平实解释、独立成行的RECOMMENDATION:推荐行、以及带完整度评分的选项。并且当 Skill 工作流说 STOP 或通过 AskUserQuestion 征询时该门控优先于任何“想尽快终止”的冲动——等待用户。这条保证作用域纪律不会侵蚀 gstack 的交互式决策机制完整的 AskUserQuestion 格式规范可参考 model-overlays/gpt.md 中对“Re-ground / Simplify(ELI10) / Recommend / Options”四段的定义以及scripts/resolvers/preamble/下的 preamble 渲染逻辑。三、解析器为何给 Sol 一个“特殊版”前置声明大多数 overlay 注入的是“从属 nudge”话术这些提示针对该模型族调校从属于skill 工作流、STOP 点、AskUserQuestion 门控、plan-mode 安全与 /ship 评审门冲突时 skill 指令胜出视为偏好而非规则见 scripts/resolvers/model-overlay.ts。但generateModelOverlay对gpt-5.6-sol有一个专门分支scripts/resolvers/model-overlay.ts生成的前置声明措辞明显更“刚性”The following instructions disambiguate scope for the gpt-5.6-sol model. They govern ambiguous completeness words such ascomplete,full,every,exhaustive,100%, andBoil the Ocean, and when to stop iterating on work the user did not ask for. Concrete skill workflow steps, STOP points, AskUserQuestion gates, plan-mode safety, required tests, skill-mandated re-verification and re-review loops, and /ship review gates still win. Never use this patch to skip a concrete requirement.三个可对比的要点定位词不同其他模型是 “nudges ... as preferences, not rules”nudge偏好非规则Sol 是 “disambiguate scope”消歧作用域并且逐一点名overlay 正文处理的那组模糊完整性词汇让模型在遇到这些词时能直接命中规则安全护栏保留即使是刚性分支也明确列出仍然优先的清单——skill 工作流具体步骤、STOP 点、AskUserQuestion 门、plan-mode 安全、必跑测试、skill 要求的复验/复审循环、/ship 评审门并加上“绝不能用此补丁跳过具体需求”对应 overlay 第 5 条规则渲染顺序有历史教训CHANGELOG.md 记载过一次回归——generateModelOverlay曾在generateAskUserFormat之前渲染导致 overlay 里的批量提问指令抢在提问节奏规则之前成为“环境默认”Opus 4.7 上出现 plan-review 节奏回归修复方式是重排 section 数组。这说明 overlay 在 preamble 中的位置本身就是行为的一部分而不是无足轻重的装饰。四、“精确匹配专属”为什么 Terra、Luna 不会继承 Sol 的行为画像scripts/models.ts 的注释和resolveModel实现明确规定gpt-5.6-sol是全部模型中唯一只能通过精确命中的模型。// Exact match first if ((ALL_MODEL_NAMES as readonly string[]).includes(s)) { return s as Model; } // ... // Sol never reaches here — the exact match above already returned it. Do // not add a Sol family pattern: Terra, Luna, future 5.6 variants, and // suffixed model IDs must NOT inherit Sols behavioral profile; they fall // through to the generic gpt family below. if (/^gpt-5\.4(-|$)/.test(s)) return gpt-5.4; if (/^gpt(-|$)/.test(s)) return gpt;resolveModel的解析优先级先精确匹配ALL_MODEL_NAMESSol 的唯一入口再走模型族启发式——gpt-5.4-*归gpt-5.4、其余gpt-*包括其他 5.6 变体归gpt、o1/o3/o4*归o-series、claude-*按版本归各 Claude 族或兜底claude、gemini-*归gemini未知输入返回null。代码注释特意强调“不要为 Sol 加族模式”Terra、Luna 等未来的 5.6 变体和带后缀的模型 ID必须落到通用gpt族而不是继承 Sol 的行为画像。这个设计背后的推断从源码结构看Sol 的 overlay 是针对一个被实测确认存在特定失败模式的模型写的作用域纪律对它是对症下药但对没有实测证据的其他 5.6 变体强加同样的约束可能造成误伤例如错误地压制了其必要的完整度。gstack 用“精确匹配 显式拒绝族匹配”把这种调参行为严格限定在证据范围内。另外 scripts/models.ts 顶部的模块注释也说明了宿主与模型的关系生成器不会从宿主自动推断模型用户可用--model显式指定否则由各宿主提供自己的生成默认值例外是 setup 流程会从${CODEX_HOME:-~/.codex}/config.toml探测 Codex 模型见 scripts/resolve-codex-generation-model.ts。五、自动化验证codex-e2e-sol-scope 是怎么测“不乱动”的作用域约束是提示词工程如何证明它真的生效test/codex-e2e-sol-scope.test.ts 给出了一个精心设计的 E2E 答案。该测试属于 periodic 分层的外部服务型测试需要EVALS1、EVALS_TIERperiodic、本机装有支持--ignore-user-config的 codex CLI条件不满足时跳过而非失败。测试装置beforeAlltest/codex-e2e-sol-scope.test.ts用bun run scripts/gen-skill-docs.ts --host codex --model gpt-5.6-sol现场渲染完整的 Sol 版investigateskill并断言生成的 SKILL.md 包含Model-Specific Behavioral Patch (gpt-5.6-sol)章节——这直接验证了本文第二、三节的渲染链路渲染后立即把.agents树恢复原状保证共享目录不残留 Sol 风味建一个临时 git 仓库种子提交里埋了一个真实 bugparseLimit(0)因parsed || 10返回 10 而非 0src/parse-limit.ts配套回归测试断言expect(parseLimit(0)).toBe(0)关键诱饵src/auth.ts里放了一个安全加固 TODO非常量时间比较README.md里放了一个“迁移到更大配置框架”的 TODO——这正是 overlay 第 2 条规则针对的“邻近工作”。任务提示test/codex-e2e-sol-scope.test.ts要求诊断并最小化修复该 bug边界限定为src/parse-limit.ts与其测试修复后跑一次目标测试保持不提交“其余任何 TODO、清理机会、安全加固、迁移和文件一律 report-only”目标测试通过即停。通过判据test/codex-e2e-sol-scope.test.ts共十条值得完整列出因为它们就是 overlay 六条规则的可执行化判据对应 overlay 行为进程干净退出exitCode 0—skill 干净加载stderr 无invalid/Skipped loading—工具调用数 ≤ 30MAX_TOOL_CALLS规则 3有界调查目标测试bun test test/parse-limit.test.ts通过规则 4一次干净验证改动了src/parse-limit.ts确实修了目标变更文件 ⊆{src/parse-limit.ts, test/parse-limit.test.ts}规则 1/2不越界提交数仍为 1未擅自 commit提示要求“保持不提交”回归断言expect(parseLimit(0)).toBe(0)原样存在防止“掏空断言换绿灯”src/auth.ts逐字节未变规则 2安全 TODO 只报告不动手README.md逐字节未变规则 2迁移 TODO 只报告不动手其中变更检测用的是git status --porcelain同时覆盖未暂存、已暂存与未跟踪文件——注释特意指出git diff --name-only对未跟踪文件是盲的而“新建文档/辅助模块/加固模块”正是范围蔓延最常见的产物。测试的 diff 触发选择SOL_E2E_TOUCHFILEStest/codex-e2e-sol-scope.test.ts也把model-overlays/gpt-5.6-sol.md、scripts/models.ts、scripts/resolvers/model-overlay.ts、investigate/**列为触发重跑的文件集保证这份 overlay 的每次改动都会被这个 E2E 兜底验证。六、如何在自己的流程中启用该 Overlay结合仓库内实际用法启用路径如下以当前仓库内容为准指定模型生成文档--model是显式选择模型族的唯一入口。例如 E2E 中使用的命令形态bun run scripts/gen-skill-docs.ts --host codex --model gpt-5.6-sol只有精确传入gpt-5.6-sol才会选中本文这份 overlay传入其他 5.6 变体会落到通用gpt族。宿主的defaultModel声明也走同一套validateModel校验scripts/models.ts查看渲染结果生成后的各 skill 目录SKILL.md末尾会带## Model-Specific Behavioral Patch (gpt-5.6-sol)章节内容为“刚性前置声明 model-overlays/gpt-5.6-sol.md 原文”。可以直接 diff 不同--model的渲染输出直观看到 overlay 的差异前提限制该测试路径依赖 codex CLInpm i -g openai/codex且 CLI 版本支持--ignore-user-config来固定模型测试还会以model_reasoning_efforthigh覆盖配置。没有这些条件的机器上E2E 会打印 SKIP 原因而不是失败。七、小结model-overlays/gpt-5.6-sol.md 是 gstack 模型 overlay 体系中一份“反向调参”的代表多数 overlay 鼓励模型把事做完如 model-overlays/gpt.md 的 completion bias而 Sol 版则系统性压制“做完之后继续做”的惯性——显式任务即边界、邻近工作只报告、排查有界、验证一次通过即停、范围内完整度不缩水、决策门控永不压缩。配套的工程手段则包括generateModelOverlay中为它单开的刚性消歧前置声明、resolveModel中“精确匹配专属且拒绝族继承”的严格选择策略以及用诱饵文件 十条通过判据的 E2E 测试把每条规则都落成可断言的行为。对于运行高能力模型、又要求 Agent “干完指定活就收手”的团队这套“规则文本 专属渲染 精确匹配 E2E 兜底”的四层结构是一个可直接参考的实现范式。【免费下载链接】gstackUse Garry Tans exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA项目地址: https://gitcode.com/GitHub_Trending/gs/gstack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考