mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-11 23:49:01 +02:00
feat: gpt-5.6-sol bounded-scope overlay + scope-aware resolvers
The Sol profile pins the explicit task as the lake: adjacent work is report-only, investigation is bounded, runs terminate on one clean verification pass, and the AskUserQuestion decision-brief format is never trimmed. The overlay wrapper grants scope-interpretation precedence while concrete workflow steps, gates, and skill-mandated re-verification loops still win. Sol-specific Completeness Principle and first-run intro copy. New SETUP_COMMAND resolver renders './setup --host <host>' for every non-claude host so generated upgrade skills reinstall their own host.
This commit is contained in:
@@ -23,7 +23,7 @@ import { generateCommandReference, generateSnapshotFlags, generateBrowseSetup }
|
||||
import { generateDesignMethodology, generateDesignHardRules, generateDesignOutsideVoices, generateDesignReviewLite, generateDesignSketch, generateDesignSetup, generateDesignMockup, generateDesignShotgunLoop, generateTasteProfile, generateUXPrinciples } from './design';
|
||||
import { generateTestBootstrap, generateTestCoverageAuditPlan, generateTestCoverageAuditShip } from './testing';
|
||||
import { generateReviewDashboard, generatePlanFileReviewReport, generateExitPlanModeGate, generateAntiShortcutClause, generateSpecReviewLoop, generateBenefitsFrom, generateCodexSecondOpinion, generateAdversarialStep, generateCodexPlanReview, generateCodexDocReview, generatePlanCompletionAuditShip, generatePlanCompletionAuditReview, generatePlanVerificationExec, generateScopeDrift, generateCrossReviewDedup } from './review';
|
||||
import { generateSlugEval, generateSlugSetup, generateBaseBranchDetect, generateDeployBootstrap, generateQAMethodology, generateCoAuthorTrailer, generateChangelogWorkflow, generateCodexWebSearchFlag } from './utility';
|
||||
import { generateSlugEval, generateSlugSetup, generateBaseBranchDetect, generateDeployBootstrap, generateQAMethodology, generateCoAuthorTrailer, generateChangelogWorkflow, generateCodexWebSearchFlag, generateSetupCommand } from './utility';
|
||||
import { generateLearningsSearch, generateLearningsLog } from './learnings';
|
||||
import { generateConfidenceCalibration } from './confidence';
|
||||
import { generateInvokeSkill } from './composition';
|
||||
@@ -78,6 +78,7 @@ export const RESOLVERS: Record<string, ResolverFn> = {
|
||||
PLAN_COMPLETION_AUDIT_REVIEW: generatePlanCompletionAuditReview,
|
||||
PLAN_VERIFICATION_EXEC: generatePlanVerificationExec,
|
||||
CO_AUTHOR_TRAILER: generateCoAuthorTrailer,
|
||||
SETUP_COMMAND: generateSetupCommand,
|
||||
LEARNINGS_SEARCH: generateLearningsSearch,
|
||||
LEARNINGS_LOG: generateLearningsLog,
|
||||
CONFIDENCE_CALIBRATION: generateConfidenceCalibration,
|
||||
|
||||
@@ -49,12 +49,22 @@ export function generateModelOverlay(ctx: TemplateContext): string {
|
||||
const content = readOverlay(ctx.model);
|
||||
if (!content) return '';
|
||||
|
||||
return `## Model-Specific Behavioral Patch (${ctx.model})
|
||||
|
||||
The following nudges are tuned for the ${ctx.model} model family. They are
|
||||
const precedence = ctx.model === 'gpt-5.6-sol'
|
||||
? `The following instructions disambiguate scope for the ${ctx.model} model.
|
||||
They govern ambiguous completeness words such as \`complete\`, \`full\`, \`every\`,
|
||||
\`exhaustive\`, \`100%\`, and \`Boil 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.`
|
||||
: `The following nudges are tuned for the ${ctx.model} model family. They are
|
||||
**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode
|
||||
safety, and /ship review gates. If a nudge below conflicts with skill instructions,
|
||||
the skill wins. Treat these as preferences, not rules.
|
||||
the skill wins. Treat these as preferences, not rules.`;
|
||||
|
||||
return `## Model-Specific Behavioral Patch (${ctx.model})
|
||||
|
||||
${precedence}
|
||||
|
||||
${content}`;
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ export function generatePreamble(ctx: TemplateContext): string {
|
||||
generatePlanModeInfo(ctx),
|
||||
generateUpgradeCheck(ctx),
|
||||
generateWritingStyleMigration(ctx),
|
||||
generateLakeIntro(),
|
||||
generateLakeIntro(ctx),
|
||||
generateTelemetryPrompt(ctx),
|
||||
generateProactivePrompt(ctx),
|
||||
generateFirstRunGuidance(ctx),
|
||||
|
||||
@@ -2,6 +2,13 @@ import type { TemplateContext } from '../types';
|
||||
|
||||
export function generateCompletenessSection(ctx?: TemplateContext): string {
|
||||
if (ctx?.explainLevel === 'terse') return '';
|
||||
if (ctx?.model === 'gpt-5.6-sol') {
|
||||
return `## Completeness Principle — Boil the Ocean Within Scope
|
||||
|
||||
AI makes completeness cheap, so do the complete thing **inside the user's explicit task boundary**. The requested target, allowed files or systems, and acceptance criteria define the lake. Within that lake, cover the relevant tests, edge cases, and error paths. Related but unnecessary refactors, speculative hardening, cleanup, and migrations are separate scope: report them, do not implement them.
|
||||
|
||||
When options differ in in-scope coverage, include \`Completeness: X/10\` (10 = all relevant in-scope edge cases, 7 = happy path, 3 = shortcut). When options differ in kind, write: \`Note: options differ in kind, not coverage — no completeness score.\` Do not fabricate scores or expand the lake to raise one.`;
|
||||
}
|
||||
return `## Completeness Principle — Boil the Ocean
|
||||
|
||||
AI makes completeness cheap, so the complete thing is the goal. Recommend full coverage (tests, edge cases, error paths) — boil the ocean one lake at a time. The only thing out of scope is genuinely unrelated work (rewrites, multi-quarter migrations); flag that as separate scope, never as an excuse for a shortcut.
|
||||
|
||||
@@ -1,6 +1,17 @@
|
||||
|
||||
import type { TemplateContext } from '../types';
|
||||
|
||||
export function generateLakeIntro(): string {
|
||||
export function generateLakeIntro(ctx: TemplateContext): string {
|
||||
if (ctx.model === 'gpt-5.6-sol') {
|
||||
return `If \`LAKE_INTRO\` is \`no\`: say "gstack follows the **Boil the Ocean** principle — do the complete thing within the user's explicit task boundary when AI makes marginal cost near-zero. Do not widen that boundary to adjacent cleanup or speculative hardening. Read more: https://garryslist.org/posts/boil-the-ocean" Offer to open:
|
||||
|
||||
\`\`\`bash
|
||||
open https://garryslist.org/posts/boil-the-ocean
|
||||
touch ~/.gstack/.completeness-intro-seen
|
||||
\`\`\`
|
||||
|
||||
Only run \`open\` if yes. Always run \`touch\`.`;
|
||||
}
|
||||
return `If \`LAKE_INTRO\` is \`no\`: say "gstack follows the **Boil the Ocean** principle — do the complete thing when AI makes marginal cost near-zero. Read more: https://garryslist.org/posts/boil-the-ocean" Offer to open:
|
||||
|
||||
\`\`\`bash
|
||||
|
||||
@@ -385,6 +385,12 @@ export function generateCoAuthorTrailer(ctx: TemplateContext): string {
|
||||
return hostConfig.coAuthorTrailer || 'Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>';
|
||||
}
|
||||
|
||||
export function generateSetupCommand(ctx: TemplateContext): string {
|
||||
// Every non-claude host must reinstall ITSELF on upgrade — bare `./setup`
|
||||
// defaults to the claude host and would leave the invoking host stale.
|
||||
return ctx.host === 'claude' ? './setup' : `./setup --host ${ctx.host}`;
|
||||
}
|
||||
|
||||
export function generateChangelogWorkflow(_ctx: TemplateContext): string {
|
||||
return `## Step 13: CHANGELOG (auto-generate)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user