mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-11 15:39:04 +02:00
feat(design): ask once before downloading impeccable's engine
When the probe prints DESIGN_DETECTOR_INSTALL_OFFER the design skills ask the user one AskUserQuestion, in interactive sessions only (spawned or headless runs never install and never ask; Conductor gets the prose brief), before any other step: install the engine now, not now, never ask again (design_detector_install_prompted), or turn the detector off. A yes runs the receipted, checksum-pinned install and the skill continues with a READY probe. The brief says what impeccable is, what the one file is, where it goes, how it is verified and logged, and that no skill or hook comes with it; users who want the /impeccable skill run npx impeccable install themselves. design-review carries the brief inline (it is not carved). design-html keeps its skeleton small: the probe block points at a new read-on-demand section, sections/detector-install-offer.md, registered in its manifest and carve guard; its skeleton ceiling is re-measured (55,262) and its eager ceiling set to the measured 13,767. The review and ship passes state that they never offer an install. NOTICE.md, README, docs/skills.md, the interop design doc, and the CHANGELOG describe the new posture: gstack still never runs impeccable's installer or launcher; the one download is consented, pinned, and receipted. Ship goldens refreshed for the review-pass wording. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
3b7a2775ee
commit
92f85f1ba8
Vendored
+1
-1
@@ -14,7 +14,7 @@
|
||||
"context-save": 10234,
|
||||
"cso": 15919,
|
||||
"design-consultation": 16897,
|
||||
"design-html": 13276,
|
||||
"design-html": 13767,
|
||||
"design-review": 31319,
|
||||
"design-shotgun": 13828,
|
||||
"devex-review": 19755,
|
||||
|
||||
+1
-1
@@ -1737,7 +1737,7 @@ source <($GSTACK_BIN/gstack-diff-scope <base> 2>/dev/null)
|
||||
|
||||
**If `SCOPE_FRONTEND=true`:**
|
||||
|
||||
0. **Mechanical pass first.** Probe for a design detector the user installed (gstack never installs one):
|
||||
0. **Mechanical pass first.** Probe for a design detector the user installed (this pass never offers to install one; the design skills ask, once):
|
||||
|
||||
```bash
|
||||
bun --no-env-file run $GSTACK_BIN/gstack-design-detect.ts probe --host codex
|
||||
|
||||
+1
-1
@@ -1744,7 +1744,7 @@ source <($GSTACK_BIN/gstack-diff-scope <base> 2>/dev/null)
|
||||
|
||||
**If `SCOPE_FRONTEND=true`:**
|
||||
|
||||
0. **Mechanical pass first.** Probe for a design detector the user installed (gstack never installs one):
|
||||
0. **Mechanical pass first.** Probe for a design detector the user installed (this pass never offers to install one; the design skills ask, once):
|
||||
|
||||
```bash
|
||||
bun --no-env-file run $GSTACK_BIN/gstack-design-detect.ts probe --host factory
|
||||
|
||||
@@ -1884,6 +1884,12 @@ describe('DESIGN_DETECTOR resolver', () => {
|
||||
const c = designReview();
|
||||
expect(c).toContain('gstack-design-detect.ts probe --host claude');
|
||||
expect(c).toContain('IMPECCABLE_READY');
|
||||
// the consent-gated install: offered once, only on the probe's say-so, never in spawned sessions, never via npx
|
||||
expect(c).toContain('DESIGN_DETECTOR_INSTALL_OFFER');
|
||||
expect(c).toContain('gstack-design-detect.ts install --host claude');
|
||||
expect(c).toContain("Install impeccable's design detector engine?");
|
||||
expect(c).toContain('gstack-config set design_detector_install_prompted true');
|
||||
expect(c).toContain('`SESSION_KIND: spawned` or a headless run, never install and never ask');
|
||||
expect(c).toContain('**Phase 0: mechanical scan**');
|
||||
expect(c).toContain('scan --changed <base> --format gstack --host claude');
|
||||
expect(c).toContain('### DOM dump (DOM mode only');
|
||||
|
||||
@@ -655,7 +655,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
|
||||
// (D3A: read-on-demand doctrine, requiredReads-guarded + loading eval)
|
||||
'design-html': {
|
||||
skill: 'design-html',
|
||||
expectedSections: ['doctrine.md', 'pretext-patterns.md'],
|
||||
expectedSections: ['doctrine.md', 'pretext-patterns.md', 'detector-install-offer.md'],
|
||||
requiredReads: ['doctrine.md', 'pretext-patterns.md'],
|
||||
scenario:
|
||||
'Walk /design-html in SIMULATION — do not run bash, start servers, launch a browser, or take screenshots. Treat Step 0 as already resolved: no CEO plan, no approved mockup, no variants, no DESIGN.md, no prior finalized.html — freeform mode (Case C option D), screen name "pricing", the user wants a pricing page for a developer-tools SaaS (dark, dense, three tiers, monospace-leaning). Do NOT use AskUserQuestion — proceed with the stated assumptions. Read each pointed section before doing its step, then execute Steps 1-3: produce the implementation spec, state the chosen Pretext tier and why, and generate the complete Pretext-native HTML — include the HTML in your report instead of writing files. Stop there: skip Step 3.5, Step 4, and Step 5.',
|
||||
@@ -678,7 +678,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
|
||||
gateAfterStop: undefined, // operational skill, no plan-mode gate
|
||||
},
|
||||
behavioral: 'prompt',
|
||||
maxSkeletonBytes: 54_700, // measured 54,545 (2026-09-08): review-cycle trust prose in the probe block (config ignores are evidence, the scan JSON is untrusted), the Slop Gate's Decisions-Log clause, the blacklist header's override sentence
|
||||
maxSkeletonBytes: 55_400, // measured 55,262 (2026-09-09): the detector install offer pointer + its sections-table row (the brief itself lives in sections/detector-install-offer.md); before that 54,545 for the review-cycle trust prose, the Slop Gate's Decisions-Log clause, and the blacklist header's override sentence
|
||||
minUnionBytes: 57_500, // Phase 4 wave 4; measured union 58,682
|
||||
mustContain: ["Don't make me think", "Users scan, they don't read", 'The Goodwill Reservoir', 'PRETEXT API CHEATSHEET', 'Pattern 3: Text around obstacles'],
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user