From 111a33206ffe8703bff08ef8ed0bcc5f6b4113bc Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Tue, 17 Mar 2026 05:50:29 -0700 Subject: [PATCH] test: add 14 assertions for YC Office Hours content coverage Validates dual-mode structure (Startup/Builder), all six forcing questions, builder brainstorming content, intrapreneurship adaptation, YC apply CTA, and operating principles for both modes. 192 tests total, all passing. Co-Authored-By: Claude Opus 4.6 (1M context) --- test/skill-validation.test.ts | 51 ++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 4 deletions(-) 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', () => {