feat: wire question-tuning into preamble for tier >= 2 skills

scripts/resolvers/preamble.ts — adds two things:

  1. _QUESTION_TUNING config echo in the preamble bash block, gated on the
     user's gstack-config `question_tuning` value (default: false).
  2. A combined Question Tuning section for tier >= 2 skills, injected after
     the confusion protocol. The section itself is runtime-gated by the
     QUESTION_TUNING value — agents skip it entirely when off.

scripts/resolvers/question-tuning.ts — consolidated into one compact combined
section `generateQuestionTuning(ctx)` covering: preference check before the
question, log after, and inline tune: feedback with user-origin gate. Per-phase
generators remain exported for unit tests but are no longer the main entrypoint.

Size impact: +570 tokens / +2.3KB per tier-2+ SKILL.md. Three skills
(plan-ceo-review, office-hours, ship) still exceed the 100KB token ceiling —
but they were already over before this change. Delta is the smallest viable
wiring of the /plan-tune v1 substrate.

Golden fixtures (test/fixtures/golden/claude-ship, codex-ship, factory-ship)
regenerated to match the new baseline.

Full test run: 1149 pass, 0 fail, 113 skip across 28 files.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Garry Tan
2026-04-17 06:38:46 +08:00
parent a8b8985048
commit f388ed67b7
2 changed files with 76 additions and 143 deletions

View File

@@ -1,5 +1,6 @@
import type { TemplateContext } from './types';
import { getHostConfig } from '../../hosts/index';
import { generateQuestionTuning } from './question-tuning';
/**
* Preamble architecture — why every skill needs this
@@ -53,6 +54,9 @@ _TEL_START=$(date +%s)
_SESSION_ID="$$-$(date +%s)"
echo "TELEMETRY: \${_TEL:-off}"
echo "TEL_PROMPTED: $_TEL_PROMPTED"
# Question tuning (opt-in; see /plan-tune + docs/designs/PLAN_TUNING_V0.md)
_QUESTION_TUNING=$(${ctx.paths.binDir}/gstack-config get question_tuning 2>/dev/null || echo "false")
echo "QUESTION_TUNING: $_QUESTION_TUNING"
mkdir -p ~/.gstack/analytics
if [ "$_TEL" != "off" ]; then
echo '{"skill":"${ctx.skillName}","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true
@@ -767,6 +771,7 @@ export function generatePreamble(ctx: TemplateContext): string {
generateBrainHealthInstruction(ctx),
generateVoiceDirective(tier),
...(tier >= 2 ? [generateContextRecovery(ctx), generateAskUserFormat(ctx), generateCompletenessSection(), generateConfusionProtocol()] : []),
...(tier >= 2 ? [generateQuestionTuning(ctx)] : []),
...(tier >= 3 ? [generateRepoModeSection(), generateSearchBeforeBuildingSection(ctx)] : []),
generateCompletionStatus(ctx),
];