diff --git a/autoplan/SKILL.md b/autoplan/SKILL.md index abc7b8d04..8be7c8ff0 100644 --- a/autoplan/SKILL.md +++ b/autoplan/SKILL.md @@ -725,7 +725,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/canary/SKILL.md b/canary/SKILL.md index ffaf2e7e9..f39661c19 100644 --- a/canary/SKILL.md +++ b/canary/SKILL.md @@ -717,7 +717,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/codex/SKILL.md b/codex/SKILL.md index 700800497..086d80a83 100644 --- a/codex/SKILL.md +++ b/codex/SKILL.md @@ -720,7 +720,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/context-restore/SKILL.md b/context-restore/SKILL.md index d7436793e..992a9c510 100644 --- a/context-restore/SKILL.md +++ b/context-restore/SKILL.md @@ -721,7 +721,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/context-save/SKILL.md b/context-save/SKILL.md index 274b54d47..1d670f3f9 100644 --- a/context-save/SKILL.md +++ b/context-save/SKILL.md @@ -720,7 +720,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/cso/SKILL.md b/cso/SKILL.md index 804734a45..a450d83fd 100644 --- a/cso/SKILL.md +++ b/cso/SKILL.md @@ -723,7 +723,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/design-consultation/SKILL.md b/design-consultation/SKILL.md index 5f72c9745..680042177 100644 --- a/design-consultation/SKILL.md +++ b/design-consultation/SKILL.md @@ -743,7 +743,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/design-html/SKILL.md b/design-html/SKILL.md index ad85a7eda..c694a8ada 100644 --- a/design-html/SKILL.md +++ b/design-html/SKILL.md @@ -724,7 +724,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/design-review/SKILL.md b/design-review/SKILL.md index 42bc31d6f..2fca39efb 100644 --- a/design-review/SKILL.md +++ b/design-review/SKILL.md @@ -721,7 +721,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/design-shotgun/SKILL.md b/design-shotgun/SKILL.md index 71a6fbe14..f017a39a9 100644 --- a/design-shotgun/SKILL.md +++ b/design-shotgun/SKILL.md @@ -738,7 +738,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/devex-review/SKILL.md b/devex-review/SKILL.md index e1dbb124b..2ffd8deab 100644 --- a/devex-review/SKILL.md +++ b/devex-review/SKILL.md @@ -723,7 +723,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/document-generate/SKILL.md b/document-generate/SKILL.md index 1445c523b..ff48a5dd9 100644 --- a/document-generate/SKILL.md +++ b/document-generate/SKILL.md @@ -723,7 +723,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/document-release/SKILL.md b/document-release/SKILL.md index fc1d7ad90..4796c4978 100644 --- a/document-release/SKILL.md +++ b/document-release/SKILL.md @@ -721,7 +721,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/health/SKILL.md b/health/SKILL.md index bc7fbdc55..233718bbc 100644 --- a/health/SKILL.md +++ b/health/SKILL.md @@ -719,7 +719,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/investigate/SKILL.md b/investigate/SKILL.md index 965b05c81..7330a2e46 100644 --- a/investigate/SKILL.md +++ b/investigate/SKILL.md @@ -758,7 +758,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/ios-clean/SKILL.md b/ios-clean/SKILL.md index 44296897f..55edca190 100644 --- a/ios-clean/SKILL.md +++ b/ios-clean/SKILL.md @@ -721,7 +721,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/ios-design-review/SKILL.md b/ios-design-review/SKILL.md index ff129e2c6..cec18d315 100644 --- a/ios-design-review/SKILL.md +++ b/ios-design-review/SKILL.md @@ -723,7 +723,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/ios-fix/SKILL.md b/ios-fix/SKILL.md index e2e0d0beb..c9b918ee1 100644 --- a/ios-fix/SKILL.md +++ b/ios-fix/SKILL.md @@ -724,7 +724,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/ios-qa/SKILL.md b/ios-qa/SKILL.md index 1eb872dde..baba00f92 100644 --- a/ios-qa/SKILL.md +++ b/ios-qa/SKILL.md @@ -727,7 +727,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/ios-sync/SKILL.md b/ios-sync/SKILL.md index f6f53f8be..b53d568aa 100644 --- a/ios-sync/SKILL.md +++ b/ios-sync/SKILL.md @@ -721,7 +721,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/land-and-deploy/SKILL.md b/land-and-deploy/SKILL.md index d0da0366b..ea67bf1eb 100644 --- a/land-and-deploy/SKILL.md +++ b/land-and-deploy/SKILL.md @@ -716,7 +716,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/landing-report/SKILL.md b/landing-report/SKILL.md index 07a1f52cc..b2872985c 100644 --- a/landing-report/SKILL.md +++ b/landing-report/SKILL.md @@ -718,7 +718,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/learn/SKILL.md b/learn/SKILL.md index cf13ab045..0dbc5bb53 100644 --- a/learn/SKILL.md +++ b/learn/SKILL.md @@ -719,7 +719,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/office-hours/SKILL.md b/office-hours/SKILL.md index 3343c5e41..f3c24d64e 100644 --- a/office-hours/SKILL.md +++ b/office-hours/SKILL.md @@ -754,7 +754,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/pair-agent/SKILL.md b/pair-agent/SKILL.md index 95e8673e3..89b0a50a7 100644 --- a/pair-agent/SKILL.md +++ b/pair-agent/SKILL.md @@ -719,7 +719,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/plan-ceo-review/SKILL.md b/plan-ceo-review/SKILL.md index 20c10d549..7e85637bc 100644 --- a/plan-ceo-review/SKILL.md +++ b/plan-ceo-review/SKILL.md @@ -748,7 +748,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/plan-design-review/SKILL.md b/plan-design-review/SKILL.md index a9fadaaa1..1ffcb53f8 100644 --- a/plan-design-review/SKILL.md +++ b/plan-design-review/SKILL.md @@ -720,7 +720,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/plan-devex-review/SKILL.md b/plan-devex-review/SKILL.md index 9b1b4d453..c599ef4dd 100644 --- a/plan-devex-review/SKILL.md +++ b/plan-devex-review/SKILL.md @@ -726,7 +726,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/plan-eng-review/SKILL.md b/plan-eng-review/SKILL.md index 33bf00829..fba856431 100644 --- a/plan-eng-review/SKILL.md +++ b/plan-eng-review/SKILL.md @@ -724,7 +724,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/plan-tune/SKILL.md b/plan-tune/SKILL.md index 300ed8081..b346c6490 100644 --- a/plan-tune/SKILL.md +++ b/plan-tune/SKILL.md @@ -729,7 +729,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/qa-only/SKILL.md b/qa-only/SKILL.md index d9aeb3464..4986c2ed3 100644 --- a/qa-only/SKILL.md +++ b/qa-only/SKILL.md @@ -719,7 +719,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/qa/SKILL.md b/qa/SKILL.md index 27c17db33..297fbc69f 100644 --- a/qa/SKILL.md +++ b/qa/SKILL.md @@ -725,7 +725,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/retro/SKILL.md b/retro/SKILL.md index b85621bcd..caf3d34aa 100644 --- a/retro/SKILL.md +++ b/retro/SKILL.md @@ -739,7 +739,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/review/SKILL.md b/review/SKILL.md index b1562e3f1..47dbfd945 100644 --- a/review/SKILL.md +++ b/review/SKILL.md @@ -721,7 +721,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/scripts/resolvers/question-tuning.ts b/scripts/resolvers/question-tuning.ts index 5fefc5585..68dc218ff 100644 --- a/scripts/resolvers/question-tuning.ts +++ b/scripts/resolvers/question-tuning.ts @@ -20,9 +20,14 @@ function binDir(ctx: TemplateContext): string { */ export function generateQuestionTuning(ctx: TemplateContext): string { const bin = binDir(ctx); + // Registry path must be interpolated absolute like ${bin} is (#2489): agents + // run with cwd in the USER'S project, where a relative + // `scripts/question-registry.ts` never resolves — the lookup silently fails + // and every question_id gets fabricated via the {skill}-{slug} fallback. + const registry = `${ctx.paths.skillRoot}/scripts/question-registry.ts`; return `## Question Tuning (skip entirely if \`QUESTION_TUNING: false\`) -Before each AskUserQuestion, choose \`question_id\` from \`scripts/question-registry.ts\` or \`{skill}-{slug}\`, then run \`printf '%s' "" | ${bin}/gstack-question-preference --check "" --summary-stdin\` (piped summary feeds the one-way keyword net, #2024). \`AUTO_DECIDE\` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." \`ASK_NORMALLY\` means ask. +Before each AskUserQuestion, choose \`question_id\` from \`${registry}\` or \`{skill}-{slug}\`, then run \`printf '%s' "" | ${bin}/gstack-question-preference --check "" --summary-stdin\` (piped summary feeds the one-way keyword net, #2024). \`AUTO_DECIDE\` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." \`ASK_NORMALLY\` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append \`\` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered \`question_id\`. diff --git a/setup-deploy/SKILL.md b/setup-deploy/SKILL.md index 8908e5c27..7855857ed 100644 --- a/setup-deploy/SKILL.md +++ b/setup-deploy/SKILL.md @@ -720,7 +720,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/setup-gbrain/SKILL.md b/setup-gbrain/SKILL.md index 4c56f258d..35a946f9f 100644 --- a/setup-gbrain/SKILL.md +++ b/setup-gbrain/SKILL.md @@ -719,7 +719,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/ship/SKILL.md b/ship/SKILL.md index a6557356e..2f95d1cc7 100644 --- a/ship/SKILL.md +++ b/ship/SKILL.md @@ -721,7 +721,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/skillify/SKILL.md b/skillify/SKILL.md index 48d6d5a75..ba87d0324 100644 --- a/skillify/SKILL.md +++ b/skillify/SKILL.md @@ -718,7 +718,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/spec/SKILL.md b/spec/SKILL.md index 3303f497e..373d60b5c 100644 --- a/spec/SKILL.md +++ b/spec/SKILL.md @@ -719,7 +719,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/sync-gbrain/SKILL.md b/sync-gbrain/SKILL.md index 0b0cb01ed..b00888003 100644 --- a/sync-gbrain/SKILL.md +++ b/sync-gbrain/SKILL.md @@ -720,7 +720,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/test/fixtures/golden/claude-ship-SKILL.md b/test/fixtures/golden/claude-ship-SKILL.md index a6557356e..2f95d1cc7 100644 --- a/test/fixtures/golden/claude-ship-SKILL.md +++ b/test/fixtures/golden/claude-ship-SKILL.md @@ -721,7 +721,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `~/.claude/skills/gstack/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | ~/.claude/skills/gstack/bin/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/test/fixtures/golden/codex-ship-SKILL.md b/test/fixtures/golden/codex-ship-SKILL.md index 657091927..334e7af45 100644 --- a/test/fixtures/golden/codex-ship-SKILL.md +++ b/test/fixtures/golden/codex-ship-SKILL.md @@ -707,7 +707,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | $GSTACK_BIN/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `$GSTACK_ROOT/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | $GSTACK_BIN/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/test/fixtures/golden/factory-ship-SKILL.md b/test/fixtures/golden/factory-ship-SKILL.md index e37dd542e..5871ea5d9 100644 --- a/test/fixtures/golden/factory-ship-SKILL.md +++ b/test/fixtures/golden/factory-ship-SKILL.md @@ -709,7 +709,7 @@ If you are looping on the same diagnostic, same file, or failed fix variants, ST ## Question Tuning (skip entirely if `QUESTION_TUNING: false`) -Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | $GSTACK_BIN/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. +Before each AskUserQuestion, choose `question_id` from `$GSTACK_ROOT/scripts/question-registry.ts` or `{skill}-{slug}`, then run `printf '%s' "" | $GSTACK_BIN/gstack-question-preference --check "" --summary-stdin` (piped summary feeds the one-way keyword net, #2024). `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask. **Embed the question_id as a marker in the question text** so hooks can identify it deterministically (plan-tune cathedral T14 / D18 progressive markers). Append `` somewhere in the rendered question (the leading line or trailing line is fine; the marker doesn't render visibly to the user when wrapped in HTML-style angle brackets, but the hook strips it). Without the marker the PreToolUse enforcement hook treats the AUQ as observed-only and never auto-decides — so always include it when the question matches a registered `question_id`. diff --git a/test/question-tuning-registry-path.test.ts b/test/question-tuning-registry-path.test.ts new file mode 100644 index 000000000..ec1b2b0d6 --- /dev/null +++ b/test/question-tuning-registry-path.test.ts @@ -0,0 +1,62 @@ +/** + * Question Tuning registry path must be absolute (#2489). + * + * The preamble told agents to choose question_id from a RELATIVE + * `scripts/question-registry.ts` — which never resolves from a user's + * project cwd (the file lives only under the gstack install root). The + * lookup silently failed and agents fabricated ids via the {skill}-{slug} + * fallback (one observed /plan-eng-review session: 21/21 unregistered). + * + * The resolver now interpolates the installed path the same way ${bin} + * paths are interpolated: ctx.paths.skillRoot (a `~`-rooted path on Claude, + * $GSTACK_ROOT on env-var hosts). + */ +import { describe, test, expect } from 'bun:test'; +import * as fs from 'fs'; +import * as path from 'path'; +import { HOST_PATHS } from '../scripts/resolvers/types'; +import type { TemplateContext } from '../scripts/resolvers/types'; +import { generateQuestionTuning } from '../scripts/resolvers/question-tuning'; + +const ROOT = path.join(import.meta.dir, '..'); + +function makeCtx(host: 'claude' | 'codex'): TemplateContext { + return { + skillName: 'test-skill', + tmplPath: 'test.tmpl', + host, + paths: HOST_PATHS[host], + preambleTier: 2, + }; +} + +describe('question-tuning registry path is absolute (#2489)', () => { + test('claude host renders the installed registry path', () => { + const out = generateQuestionTuning(makeCtx('claude')); + expect(out).toContain('`~/.claude/skills/gstack/scripts/question-registry.ts`'); + }); + + test('env-var host renders $GSTACK_ROOT-anchored registry path', () => { + const out = generateQuestionTuning(makeCtx('codex')); + expect(out).toContain('`$GSTACK_ROOT/scripts/question-registry.ts`'); + }); + + test('no host renders a bare relative registry path', () => { + for (const host of ['claude', 'codex'] as const) { + const out = generateQuestionTuning(makeCtx(host)); + // A backtick immediately before `scripts/` means the path renders + // relative — exactly the shape that never resolves from a project cwd. + expect(out).not.toContain('`scripts/question-registry.ts`'); + } + }); + + test('the interpolated path points at a file that exists in the install tree', () => { + expect(fs.existsSync(path.join(ROOT, 'scripts', 'question-registry.ts'))).toBe(true); + }); + + test('rendered SKILL.md carries the absolute path', () => { + const rendered = fs.readFileSync(path.join(ROOT, 'plan-eng-review', 'SKILL.md'), 'utf-8'); + expect(rendered).toContain('~/.claude/skills/gstack/scripts/question-registry.ts'); + expect(rendered).not.toContain('`scripts/question-registry.ts`'); + }); +});