diff --git a/autoplan/SKILL.md b/autoplan/SKILL.md index a8e480914..35d4f7355 100644 --- a/autoplan/SKILL.md +++ b/autoplan/SKILL.md @@ -1079,6 +1079,7 @@ Read each file using the Read tool: **Section skip list — when following a loaded skill file, SKIP these sections (they are already handled by /autoplan):** - Preamble (run first) +- Scope gate (the plan under review is already the target) - AskUserQuestion Format - Completeness Principle — Boil the Ocean - Search Before Building diff --git a/autoplan/SKILL.md.tmpl b/autoplan/SKILL.md.tmpl index b2eaca9fd..0f054dacf 100644 --- a/autoplan/SKILL.md.tmpl +++ b/autoplan/SKILL.md.tmpl @@ -215,6 +215,7 @@ Read each file using the Read tool: **Section skip list — when following a loaded skill file, SKIP these sections (they are already handled by /autoplan):** - Preamble (run first) +- Scope gate (the plan under review is already the target) - AskUserQuestion Format - Completeness Principle — Boil the Ocean - Search Before Building diff --git a/test/skill-validation.test.ts b/test/skill-validation.test.ts index 99d4eb83b..edd45c288 100644 --- a/test/skill-validation.test.ts +++ b/test/skill-validation.test.ts @@ -134,6 +134,15 @@ describe('SKILL.md command validation', () => { const result = validateSkill(skill); expect(result.snapshotFlagErrors).toHaveLength(0); }); + + test('autoplan section skip list includes the scope gate', () => { + // autoplan Step 3 reads plan-eng-review / plan-design-review SKILL.md + // verbatim; without this skip-list entry it ingests their scope gate — a + // hard-STOP AskUserQuestion that contradicts autoplan's auto-decide + // contract. Nothing else pins the skip-list contents. + const md = fs.readFileSync(path.join(ROOT, 'autoplan', 'SKILL.md'), 'utf-8'); + expect(md).toContain('- Scope gate (the plan under review is already the target)'); + }); }); describe('Command registry consistency', () => {