- Add Claude API client with Anthropic SDK - Retry logic with exponential backoff (3 attempts) - Handle auth errors, rate limits, and server errors - Architecture classification with JSON parsing - Research query generation from architecture - Add Perplexity API client with native fetch - Retry logic with exponential backoff - Parse responses with sources and citations - Execute multiple research queries - Add prompt templates for architecture classification - Add default query generation as fallback - Add ArchitectureGenerator combining Claude + Perplexity - Add 44 new tests (80 total, all passing) All Phase 2 acceptance criteria met: - Claude client sends prompts and retries on failure - Perplexity client searches and parses with sources - Architecture classification returns valid JSON - Research queries generated (4-6 per architecture) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
142 lines
4.3 KiB
JSON
142 lines
4.3 KiB
JSON
{
|
|
"project": "ralph-prd-generator",
|
|
"version": "1.0.0",
|
|
"features": [
|
|
{
|
|
"id": "config-management",
|
|
"phase": 1,
|
|
"name": "API Key Management",
|
|
"description": "Store and retrieve API keys securely",
|
|
"priority": 1,
|
|
"passes": true,
|
|
"acceptance": "ralph-vibe init stores keys and ralph-vibe new fails gracefully without keys"
|
|
},
|
|
{
|
|
"id": "cli-framework",
|
|
"phase": 1,
|
|
"name": "CLI Framework",
|
|
"description": "Commander.js setup with all commands stubbed",
|
|
"priority": 2,
|
|
"passes": true,
|
|
"acceptance": "ralph-vibe --help shows all commands, ralph-vibe init/new/validate/research exist"
|
|
},
|
|
{
|
|
"id": "claude-client",
|
|
"phase": 2,
|
|
"name": "Claude API Client",
|
|
"description": "Anthropic SDK integration with retry logic",
|
|
"priority": 1,
|
|
"passes": true,
|
|
"acceptance": "Can send prompt to Claude and receive response, retries on failure"
|
|
},
|
|
{
|
|
"id": "perplexity-client",
|
|
"phase": 2,
|
|
"name": "Perplexity API Client",
|
|
"description": "Perplexity REST API integration",
|
|
"priority": 2,
|
|
"passes": true,
|
|
"acceptance": "Can search Perplexity and parse response with sources"
|
|
},
|
|
{
|
|
"id": "architecture-classification",
|
|
"phase": 2,
|
|
"name": "Architecture Classification",
|
|
"description": "Claude prompt for classifying app type",
|
|
"priority": 3,
|
|
"passes": true,
|
|
"acceptance": "Given idea text, returns valid Architecture JSON"
|
|
},
|
|
{
|
|
"id": "research-queries",
|
|
"phase": 2,
|
|
"name": "Research Query Generation",
|
|
"description": "Generate Perplexity queries from architecture",
|
|
"priority": 4,
|
|
"passes": true,
|
|
"acceptance": "Given architecture, generates 4-6 relevant search queries"
|
|
},
|
|
{
|
|
"id": "spec-generation",
|
|
"phase": 3,
|
|
"name": "Specification Generation",
|
|
"description": "Generate features, data models, interfaces from idea plus research",
|
|
"priority": 1,
|
|
"passes": false,
|
|
"acceptance": "Produces valid Specification object with all required fields"
|
|
},
|
|
{
|
|
"id": "prd-generation",
|
|
"phase": 3,
|
|
"name": "PRD Generation",
|
|
"description": "Generate PROMPT.md, prd.json, GUIDE.md",
|
|
"priority": 2,
|
|
"passes": false,
|
|
"acceptance": "Generated PROMPT.md contains all required sections and promise tags"
|
|
},
|
|
{
|
|
"id": "scaffold-generation",
|
|
"phase": 3,
|
|
"name": "Project Scaffold",
|
|
"description": "Create directory structure and all files",
|
|
"priority": 3,
|
|
"passes": false,
|
|
"acceptance": "ralph-vibe new test-app creates complete directory with all files"
|
|
},
|
|
{
|
|
"id": "interactive-flow",
|
|
"phase": 3,
|
|
"name": "Interactive Prompts",
|
|
"description": "Inquirer.js prompts for user confirmation",
|
|
"priority": 4,
|
|
"passes": false,
|
|
"acceptance": "User can confirm or modify architecture classification interactively"
|
|
},
|
|
{
|
|
"id": "validation-command",
|
|
"phase": 4,
|
|
"name": "Validate Command",
|
|
"description": "Validate existing PROMPT.md files",
|
|
"priority": 1,
|
|
"passes": false,
|
|
"acceptance": "ralph-vibe validate ./PROMPT.md reports issues or confirms valid"
|
|
},
|
|
{
|
|
"id": "research-command",
|
|
"phase": 4,
|
|
"name": "Standalone Research",
|
|
"description": "Research a topic without full generation",
|
|
"priority": 2,
|
|
"passes": false,
|
|
"acceptance": "ralph-vibe research topic outputs formatted research"
|
|
},
|
|
{
|
|
"id": "dry-run",
|
|
"phase": 4,
|
|
"name": "Dry Run Mode",
|
|
"description": "Show what would be generated without writing",
|
|
"priority": 3,
|
|
"passes": false,
|
|
"acceptance": "The --dry-run flag shows output without creating files"
|
|
},
|
|
{
|
|
"id": "documentation",
|
|
"phase": 4,
|
|
"name": "Documentation",
|
|
"description": "README, help text, examples",
|
|
"priority": 4,
|
|
"passes": false,
|
|
"acceptance": "README.md covers all commands, examples directory exists"
|
|
},
|
|
{
|
|
"id": "packaging",
|
|
"phase": 4,
|
|
"name": "npm Packaging",
|
|
"description": "Package ready for npm publish",
|
|
"priority": 5,
|
|
"passes": false,
|
|
"acceptance": "npm pack succeeds, npm publish --dry-run succeeds"
|
|
}
|
|
]
|
|
}
|