fix(proactive): PROACTIVE=false means no suggestions, including 'want me to run /X?' (W5.1)

The router forbade suggesting skills when PROACTIVE is false while the preamble
told the model to ask 'want me to run it?'. Decision: false means never
auto-invoke and never suggest, including by asking. The preamble line in
generate-upgrade-check.ts now matches the router, and both quote the value
as `false`, the way gstack-skill-start prints it. Restore with
gstack-config set proactive true.

W7a pin: test/gen-skill-docs.test.ts:4488 used the old quoted sentence as a
preamble-order marker; it now finds the PROACTIVE-false rule with a
quote-tolerant, case-insensitive pattern.
This commit is contained in:
garrytan committed 2026-10-02 23:43:51 +00:00
1 parent c9bd3d69a8
commit b00a0f19b0
3 files changed
+6 -5

No files matched your search

+4 -3
View File
@@ -46,9 +46,10 @@ output echoed:
~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type route --skill gstack --outcome ROUTE_OUTCOME --session-id "SESSION_ID" 2>/dev/null || true
```
If `PROACTIVE` is `false`: do NOT proactively invoke or suggest other gstack skills during
this session. Only run skills the user explicitly invokes. This preference persists across
sessions via `gstack-config`.
If `PROACTIVE` is `false`: do not proactively invoke or suggest other gstack skills during
this session, including by asking whether to run one ("want me to run /X?"). Only run
skills the user explicitly invokes. This preference persists across sessions via
`gstack-config`.
If `PROACTIVE` is `true` (default): **invoke the Skill tool** when the user's request
matches a skill's purpose. Do NOT answer directly when a skill exists for the task.
@@ -8,7 +8,7 @@ import type { TemplateContext } from '../types';
* the fence prose scopes and the model follows.
*/
export function generateUpgradeCheck(ctx: TemplateContext): string {
return `If \`PROACTIVE\` is \`"false"\`, do not auto-invoke or proactively suggest skills. If a skill seems useful, ask: "I think /skillname might help here — want me to run it?"
return `If \`PROACTIVE\` is \`false\`, do not auto-invoke or suggest skills, including by asking whether to run one. Only run skills the user explicitly invokes.
If \`SKILL_PREFIX\` is \`"true"\`, suggest/invoke \`/gstack-*\` names. Disk paths stay \`${ctx.paths.skillRoot}/[skill-name]/SKILL.md\`.`;
}
+1 -1
View File
@@ -4485,7 +4485,7 @@ describe('plan-mode-info resolver (handshake-replacement)', () => {
'utf-8',
);
const planModeIdx = content.indexOf(PLAN_MODE_INFO_MARKER);
const upgradeIdx = content.indexOf('If `PROACTIVE` is `"false"`');
const upgradeIdx = content.search(/If `PROACTIVE` is `"?false"?`/i);
expect(planModeIdx).toBeGreaterThan(0);
expect(upgradeIdx).toBeGreaterThan(0);
expect(planModeIdx).toBeLessThan(upgradeIdx);