mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-10 15:09:00 +02:00
fix(gen): preamble tiers are explicit; silent ?? 4 default becomes an error; spec stops rendering its preamble twice
Eight skills (scrape, diagram, spec, skillify, pair-agent, landing-report,
open-gstack-browser + its connect-chrome symlink) silently received the
HEAVIEST tier-4 preamble because a missing frontmatter field defaulted to 4.
Tiers are now declared in every {{PREAMBLE}} template's frontmatter and a
missing declaration throws at generation time with the template path (the 5
templates without {{PREAMBLE}} never invoke the resolver). The stale
hand-written tier-map comment (wrong in 3 of 4 rows) is gone.
Bonus bug fixed: spec/SKILL.md.tmpl mentioned {{PREAMBLE}} in prose, so the
generator inlined the ENTIRE preamble a second time — spec/SKILL.md shrinks
127,462 -> 80,924 bytes (-46,538) from de-duplication alone. skill-size-budget
gains a reasoned INTENTIONAL_SHRINKS entry (its frozen baseline had measured
the doubled-preamble bug). New tests: missing-tier throw carries the path;
every {{PREAMBLE}} template declares a tier. (Carries chunk-23 edits in the
shared test/gen-skill-docs.test.ts.)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
9124559810
commit
85388c66a5
@@ -71,13 +71,17 @@ export { generateTestFailureTriage } from './preamble/generate-test-failure-tria
|
||||
// T3: T2 + repo-mode + search
|
||||
// T4: (same as T3 — TEST_FAILURE_TRIAGE is a separate {{}} placeholder, not preamble)
|
||||
//
|
||||
// Skills by tier:
|
||||
// T1: browse, setup-cookies, benchmark
|
||||
// T2: investigate, cso, retro, doc-release, setup-deploy, canary, context-save, context-restore, health
|
||||
// T3: autoplan, codex, design-consult, office-hours, ceo/design/eng-review
|
||||
// T4: ship, review, qa, qa-only, design-review, land-deploy
|
||||
// Which skill gets which tier lives in each template's frontmatter
|
||||
// (`preamble-tier: N`). Every template that resolves {{PREAMBLE}} must
|
||||
// declare it — there is no default.
|
||||
export function generatePreamble(ctx: TemplateContext): string {
|
||||
const tier = ctx.preambleTier ?? 4;
|
||||
const tier = ctx.preambleTier;
|
||||
if (tier === undefined) {
|
||||
throw new Error(
|
||||
`Missing preamble-tier frontmatter in ${ctx.tmplPath}: every template that ` +
|
||||
`resolves {{PREAMBLE}} must declare 'preamble-tier: N' (1-4).`
|
||||
);
|
||||
}
|
||||
if (tier < 1 || tier > 4) {
|
||||
throw new Error(`Invalid preamble-tier: ${tier} in ${ctx.tmplPath}. Must be 1-4.`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user