diff --git a/test/skill-validation.test.ts b/test/skill-validation.test.ts index 762a3fb1..fc48baec 100644 --- a/test/skill-validation.test.ts +++ b/test/skill-validation.test.ts @@ -204,7 +204,7 @@ describe('Update check preamble', () => { 'ship/SKILL.md', 'review/SKILL.md', 'plan-ceo-review/SKILL.md', 'plan-eng-review/SKILL.md', 'retro/SKILL.md', - 'brainstorm/SKILL.md', 'debug/SKILL.md', + 'office-hours/SKILL.md', 'debug/SKILL.md', 'plan-design-review/SKILL.md', 'qa-design-review/SKILL.md', 'design-consultation/SKILL.md', @@ -513,7 +513,7 @@ describe('v0.4.1 preamble features', () => { 'ship/SKILL.md', 'review/SKILL.md', 'plan-ceo-review/SKILL.md', 'plan-eng-review/SKILL.md', 'retro/SKILL.md', - 'brainstorm/SKILL.md', 'debug/SKILL.md', + 'office-hours/SKILL.md', 'debug/SKILL.md', 'plan-design-review/SKILL.md', 'qa-design-review/SKILL.md', 'design-consultation/SKILL.md', @@ -546,13 +546,56 @@ describe('v0.4.1 preamble features', () => { // --- Structural tests for new skills --- -describe('brainstorm skill structure', () => { - const content = fs.readFileSync(path.join(ROOT, 'brainstorm', 'SKILL.md'), 'utf-8'); +describe('office-hours skill structure', () => { + const content = fs.readFileSync(path.join(ROOT, 'office-hours', 'SKILL.md'), 'utf-8'); + + // Original structural assertions for (const section of ['Phase 1', 'Phase 2', 'Phase 3', 'Phase 4', 'Phase 5', 'Phase 6', 'Design Doc', 'Supersedes', 'APPROVED', 'Premise Challenge', 'Alternatives', 'Smart-skip']) { test(`contains ${section}`, () => expect(content).toContain(section)); } + + // Dual-mode structure + for (const section of ['Startup mode', 'Builder mode']) { + test(`contains ${section}`, () => expect(content).toContain(section)); + } + + // Mode detection question + test('contains explicit mode detection question', () => { + expect(content).toContain("what's your goal"); + }); + + // Six forcing questions (startup mode) + for (const question of ['Demand Reality', 'Status Quo', 'Desperate Specificity', + 'Narrowest Wedge', 'Observation & Surprise', 'Future-Fit']) { + test(`contains forcing question: ${question}`, () => expect(content).toContain(question)); + } + + // Builder mode questions + test('contains builder brainstorming questions', () => { + expect(content).toContain('coolest version'); + expect(content).toContain('delightful'); + }); + + // Intrapreneurship adaptation + test('contains intrapreneurship adaptation', () => { + expect(content).toContain('Intrapreneurship'); + }); + + // YC callout + test('contains YC apply CTA', () => { + expect(content).toContain('ycombinator.com/apply'); + }); + + // Operating principles per mode + test('contains startup operating principles', () => { + expect(content).toContain('Specificity is the only currency'); + }); + + test('contains builder operating principles', () => { + expect(content).toContain('Delight is the currency'); + }); }); describe('debug skill structure', () => {