From 09b361e3fa6f3deb8eba983fb7c944dfa969d13b Mon Sep 17 00:00:00 2001 From: Sam Kujovich Date: Sun, 15 Feb 2026 11:32:00 -0800 Subject: [PATCH] docs: add sample output artifacts for all 10 PRDs Include pre-generated requirements and tickets JSON for reviewers to inspect without needing an OpenAI API key. 10 PRDs processed: - Rate Limiting, User Onboarding, Checkout, Notifications, Analytics - File Upload, Search, Payments, Webhooks, Mobile Push All outputs include agent_context for AI-assisted implementation. --- ...ple_prd_01_rate_limiting_requirements.json | 115 ++++ .../sample_prd_01_rate_limiting_tickets.json | 578 ++++++++++++++++++ ...e_prd_02_user_onboarding_requirements.json | 109 ++++ ...sample_prd_02_user_onboarding_tickets.json | 279 +++++++++ .../sample_prd_03_checkout_requirements.json | 128 ++++ outputs/sample_prd_03_checkout_tickets.json | 373 +++++++++++ ...ple_prd_04_notifications_requirements.json | 116 ++++ .../sample_prd_04_notifications_tickets.json | 309 ++++++++++ .../sample_prd_05_analytics_requirements.json | 133 ++++ outputs/sample_prd_05_analytics_tickets.json | 420 +++++++++++++ ...ample_prd_06_file_upload_requirements.json | 134 ++++ .../sample_prd_06_file_upload_tickets.json | 397 ++++++++++++ .../sample_prd_07_search_requirements.json | 150 +++++ outputs/sample_prd_07_search_tickets.json | 370 +++++++++++ .../sample_prd_08_payments_requirements.json | 154 +++++ outputs/sample_prd_08_payments_tickets.json | 509 +++++++++++++++ .../sample_prd_09_webhooks_requirements.json | 131 ++++ outputs/sample_prd_09_webhooks_tickets.json | 393 ++++++++++++ ...ample_prd_10_mobile_push_requirements.json | 151 +++++ .../sample_prd_10_mobile_push_tickets.json | 420 +++++++++++++ outputs/summary.json | 72 +++ 21 files changed, 5441 insertions(+) create mode 100644 outputs/sample_prd_01_rate_limiting_requirements.json create mode 100644 outputs/sample_prd_01_rate_limiting_tickets.json create mode 100644 outputs/sample_prd_02_user_onboarding_requirements.json create mode 100644 outputs/sample_prd_02_user_onboarding_tickets.json create mode 100644 outputs/sample_prd_03_checkout_requirements.json create mode 100644 outputs/sample_prd_03_checkout_tickets.json create mode 100644 outputs/sample_prd_04_notifications_requirements.json create mode 100644 outputs/sample_prd_04_notifications_tickets.json create mode 100644 outputs/sample_prd_05_analytics_requirements.json create mode 100644 outputs/sample_prd_05_analytics_tickets.json create mode 100644 outputs/sample_prd_06_file_upload_requirements.json create mode 100644 outputs/sample_prd_06_file_upload_tickets.json create mode 100644 outputs/sample_prd_07_search_requirements.json create mode 100644 outputs/sample_prd_07_search_tickets.json create mode 100644 outputs/sample_prd_08_payments_requirements.json create mode 100644 outputs/sample_prd_08_payments_tickets.json create mode 100644 outputs/sample_prd_09_webhooks_requirements.json create mode 100644 outputs/sample_prd_09_webhooks_tickets.json create mode 100644 outputs/sample_prd_10_mobile_push_requirements.json create mode 100644 outputs/sample_prd_10_mobile_push_tickets.json create mode 100644 outputs/summary.json diff --git a/outputs/sample_prd_01_rate_limiting_requirements.json b/outputs/sample_prd_01_rate_limiting_requirements.json new file mode 100644 index 0000000..404f8a5 --- /dev/null +++ b/outputs/sample_prd_01_rate_limiting_requirements.json @@ -0,0 +1,115 @@ +{ + "requirements": [ + { + "id": "REQ-001", + "title": "Tier-Based Rate Limits", + "description": "Implement rate limits based on customer tier to manage API usage and prevent abuse.", + "acceptance_criteria": [ + "Free tier: 100 requests per minute, 1,000 requests per day", + "Pro tier: 1,000 requests per minute, unlimited daily requests", + "Enterprise tier: Custom limits configured per customer" + ], + "dependencies": [], + "ambiguity_flags": [ + { + "category": "vague_quantifier", + "issue": "The term 'fast and scalable' is not quantified.", + "severity": "warning", + "suggested_action": "Define specific performance metrics for scalability and speed." + } + ], + "priority": "high" + }, + { + "id": "REQ-002", + "title": "Rate Limit Response Headers", + "description": "Include rate limit information in all API responses to inform clients of their usage status.", + "acceptance_criteria": [ + "API responses include X-RateLimit-Limit header", + "API responses include X-RateLimit-Remaining header", + "API responses include X-RateLimit-Reset header" + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-003", + "title": "Rate Limit Exceeded Handling", + "description": "Define the response behavior when a client exceeds their rate limit.", + "acceptance_criteria": [ + "Return HTTP 429 status code when limit exceeded", + "Include Retry-After header with seconds until reset", + "Return JSON error body with clear message and documentation link" + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-004", + "title": "Developer Dashboard", + "description": "Provide a dashboard for developers to view and manage their API usage and limits.", + "acceptance_criteria": [ + "Developers can view current usage and limits", + "Developers can see historical usage graphs", + "Dashboard is user-friendly and intuitive" + ], + "dependencies": [], + "ambiguity_flags": [ + { + "category": "undefined_term", + "issue": "The term 'user-friendly and intuitive' is not defined.", + "severity": "suggestion", + "suggested_action": "Specify measurable criteria for user-friendliness and intuitiveness." + } + ], + "priority": "medium" + }, + { + "id": "REQ-005", + "title": "Backend Implementation", + "description": "Implement the technical backend for rate limiting using Redis and support additional features.", + "acceptance_criteria": [ + "Use Redis for storing rate limit counters", + "Support configurable limits per endpoint", + "Implement bypass mechanism for internal services", + "Log and alert when customers approach or exceed limits" + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-006", + "title": "Monitoring and Observability", + "description": "Implement monitoring and observability for the rate limiting system.", + "acceptance_criteria": [ + "Emit metrics for rate limit checks, passes, and rejections", + "Create dashboards showing rate limit health", + "Alert on anomalies such as sudden spikes in rejections or Redis failures" + ], + "dependencies": [ + "REQ-005" + ], + "ambiguity_flags": [], + "priority": "medium" + } + ], + "summary": "Implement a tier-based rate limiting system for the public API to prevent abuse, ensure fair usage, and protect backend services.", + "source_hash": "a2b4a2f1", + "_metadata": { + "analyzed_at": "2026-02-15T19:24:38.834881+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "prompt_tokens": 1247, + "completion_tokens": 834, + "total_tokens": 2081 + } +} \ No newline at end of file diff --git a/outputs/sample_prd_01_rate_limiting_tickets.json b/outputs/sample_prd_01_rate_limiting_tickets.json new file mode 100644 index 0000000..3c3e437 --- /dev/null +++ b/outputs/sample_prd_01_rate_limiting_tickets.json @@ -0,0 +1,578 @@ +{ + "epics": [ + { + "title": "Tier-Based Rate Limiting System", + "description": "Implement a tier-based rate limiting system for the public API to prevent abuse, ensure fair usage, and protect backend services.", + "stories": [ + { + "title": "Implement Free Tier Rate Limits", + "description": "Set up rate limits for the Free tier: 100 requests per minute and 1,000 requests per day.", + "acceptance_criteria": [ + "Free tier users are limited to 100 requests per minute", + "Free tier users are limited to 1,000 requests per day" + ], + "size": "M", + "priority": "high", + "labels": [ + "backend", + "api", + "rate-limiting" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Prevent abuse by limiting API usage for free tier users.", + "exploration_paths": [ + "rate limiting", + "API usage", + "tier-based access" + ], + "exploration_hints": [ + "src/rate_limiting/", + "config/tier_limits.json" + ], + "known_patterns": [ + "Use Redis for tracking request counts" + ], + "verification_tests": [ + "test_free_tier_limits" + ], + "self_check": [ + "Are the limits correctly enforced?", + "What happens if Redis is down?", + "How are limits reset daily?" + ] + } + }, + { + "title": "Implement Pro Tier Rate Limits", + "description": "Set up rate limits for the Pro tier: 1,000 requests per minute and unlimited daily requests.", + "acceptance_criteria": [ + "Pro tier users are limited to 1,000 requests per minute", + "Pro tier users have unlimited daily requests" + ], + "size": "M", + "priority": "high", + "labels": [ + "backend", + "api", + "rate-limiting" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Ensure fair usage for Pro tier users while allowing higher request rates.", + "exploration_paths": [ + "rate limiting", + "API usage", + "tier-based access" + ], + "exploration_hints": [ + "src/rate_limiting/", + "config/tier_limits.json" + ], + "known_patterns": [ + "Use Redis for tracking request counts" + ], + "verification_tests": [ + "test_pro_tier_limits" + ], + "self_check": [ + "Are the limits correctly enforced?", + "How is the unlimited daily request feature implemented?" + ] + } + }, + { + "title": "Implement Enterprise Tier Custom Limits", + "description": "Allow custom rate limits for Enterprise tier customers as configured per customer.", + "acceptance_criteria": [ + "Enterprise tier users have custom rate limits configured per customer" + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "api", + "rate-limiting" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Provide flexibility for enterprise customers to have custom rate limits.", + "exploration_paths": [ + "rate limiting", + "API usage", + "enterprise customization" + ], + "exploration_hints": [ + "src/rate_limiting/", + "config/enterprise_limits.json" + ], + "known_patterns": [ + "Use Redis for tracking request counts" + ], + "verification_tests": [ + "test_enterprise_tier_limits" + ], + "self_check": [ + "Are custom limits correctly applied per customer?", + "How are changes to custom limits handled?" + ] + } + } + ], + "labels": [ + "api", + "rate-limiting", + "backend" + ] + }, + { + "title": "Rate Limit Response Headers", + "description": "Include rate limit information in all API responses to inform clients of their usage status.", + "stories": [ + { + "title": "Add Rate Limit Headers to API Responses", + "description": "Include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers in all API responses.", + "acceptance_criteria": [ + "API responses include X-RateLimit-Limit header", + "API responses include X-RateLimit-Remaining header", + "API responses include X-RateLimit-Reset header" + ], + "size": "M", + "priority": "medium", + "labels": [ + "backend", + "api", + "headers" + ], + "requirement_ids": [ + "REQ-002" + ], + "agent_context": { + "goal": "Inform API clients about their current rate limit status.", + "exploration_paths": [ + "HTTP headers", + "API response modification" + ], + "exploration_hints": [ + "src/middleware/rate_limit_headers.js" + ], + "known_patterns": [ + "Follow HTTP header standards" + ], + "verification_tests": [ + "test_rate_limit_headers" + ], + "self_check": [ + "Are headers correctly formatted and included in responses?", + "How do headers behave under different tier limits?" + ] + } + } + ], + "labels": [ + "api", + "headers" + ] + }, + { + "title": "Rate Limit Exceeded Handling", + "description": "Define the response behavior when a client exceeds their rate limit.", + "stories": [ + { + "title": "Handle Rate Limit Exceeded Responses", + "description": "Return HTTP 429 status code with Retry-After header and JSON error body when rate limit is exceeded.", + "acceptance_criteria": [ + "Return HTTP 429 status code when limit exceeded", + "Include Retry-After header with seconds until reset", + "Return JSON error body with clear message and documentation link" + ], + "size": "M", + "priority": "high", + "labels": [ + "backend", + "api", + "error-handling" + ], + "requirement_ids": [ + "REQ-003" + ], + "agent_context": { + "goal": "Provide clear feedback to clients when they exceed rate limits.", + "exploration_paths": [ + "HTTP status codes", + "API error handling" + ], + "exploration_hints": [ + "src/middleware/rate_limit_exceeded.js" + ], + "known_patterns": [ + "Use standard HTTP 429 for rate limiting" + ], + "verification_tests": [ + "test_rate_limit_exceeded" + ], + "self_check": [ + "Is the Retry-After header correctly calculated?", + "Does the JSON error body provide useful information?" + ] + } + } + ], + "labels": [ + "api", + "error-handling" + ] + }, + { + "title": "Developer Dashboard for API Usage", + "description": "Provide a dashboard for developers to view and manage their API usage and limits.", + "stories": [ + { + "title": "Create Developer Dashboard UI", + "description": "Develop a user-friendly dashboard UI for developers to view current usage and limits.", + "acceptance_criteria": [ + "Developers can view current usage and limits", + "Dashboard is user-friendly and intuitive" + ], + "size": "L", + "priority": "medium", + "labels": [ + "frontend", + "dashboard", + "ui" + ], + "requirement_ids": [ + "REQ-004" + ], + "agent_context": { + "goal": "Enable developers to easily monitor their API usage and limits.", + "exploration_paths": [ + "dashboard design", + "UI/UX", + "API usage visualization" + ], + "exploration_hints": [ + "src/components/dashboard/", + "src/pages/developer_dashboard.js" + ], + "known_patterns": [ + "Follow existing UI design patterns" + ], + "verification_tests": [ + "test_dashboard_ui" + ], + "self_check": [ + "Is the dashboard intuitive and easy to navigate?", + "Does it accurately reflect API usage data?" + ] + } + }, + { + "title": "Implement Historical Usage Graphs", + "description": "Add graphs to the dashboard to show historical API usage over time.", + "acceptance_criteria": [ + "Developers can see historical usage graphs" + ], + "size": "M", + "priority": "medium", + "labels": [ + "frontend", + "dashboard", + "visualization" + ], + "requirement_ids": [ + "REQ-004" + ], + "agent_context": { + "goal": "Provide visual insights into API usage trends over time.", + "exploration_paths": [ + "data visualization", + "historical data", + "graphs" + ], + "exploration_hints": [ + "src/components/dashboard/graphs.js" + ], + "known_patterns": [ + "Use existing charting library" + ], + "verification_tests": [ + "test_historical_usage_graphs" + ], + "self_check": [ + "Are the graphs accurate and informative?", + "How is historical data fetched and displayed?" + ] + } + } + ], + "labels": [ + "dashboard", + "frontend" + ] + }, + { + "title": "Backend Implementation for Rate Limiting", + "description": "Implement the technical backend for rate limiting using Redis and support additional features.", + "stories": [ + { + "title": "Set Up Redis for Rate Limiting", + "description": "Configure Redis to store rate limit counters and support configurable limits per endpoint.", + "acceptance_criteria": [ + "Use Redis for storing rate limit counters", + "Support configurable limits per endpoint" + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "redis", + "rate-limiting" + ], + "requirement_ids": [ + "REQ-005" + ], + "agent_context": { + "goal": "Efficiently track and enforce rate limits using Redis.", + "exploration_paths": [ + "Redis configuration", + "rate limiting storage" + ], + "exploration_hints": [ + "src/rate_limiting/redis_setup.js" + ], + "known_patterns": [ + "Use Redis as a key-value store for counters" + ], + "verification_tests": [ + "test_redis_rate_limiting" + ], + "self_check": [ + "Is Redis configured correctly for high availability?", + "How are limits configured per endpoint?" + ] + } + }, + { + "title": "Implement Bypass Mechanism for Internal Services", + "description": "Create a mechanism to bypass rate limits for internal services.", + "acceptance_criteria": [ + "Implement bypass mechanism for internal services" + ], + "size": "M", + "priority": "high", + "labels": [ + "backend", + "rate-limiting", + "internal-services" + ], + "requirement_ids": [ + "REQ-005" + ], + "agent_context": { + "goal": "Allow internal services to operate without being affected by rate limits.", + "exploration_paths": [ + "bypass mechanisms", + "internal service access" + ], + "exploration_hints": [ + "src/rate_limiting/bypass.js" + ], + "known_patterns": [ + "Whitelist internal IPs or service tokens" + ], + "verification_tests": [ + "test_internal_service_bypass" + ], + "self_check": [ + "Is the bypass mechanism secure?", + "How are internal services identified?" + ] + } + }, + { + "title": "Log and Alert on Rate Limit Approaches", + "description": "Log and alert when customers approach or exceed their rate limits.", + "acceptance_criteria": [ + "Log and alert when customers approach or exceed limits" + ], + "size": "M", + "priority": "high", + "labels": [ + "backend", + "logging", + "alerting" + ], + "requirement_ids": [ + "REQ-005" + ], + "agent_context": { + "goal": "Proactively manage and respond to potential rate limit breaches.", + "exploration_paths": [ + "logging", + "alerting", + "rate limit monitoring" + ], + "exploration_hints": [ + "src/logging/rate_limit_alerts.js" + ], + "known_patterns": [ + "Use existing logging and alerting frameworks" + ], + "verification_tests": [ + "test_rate_limit_alerts" + ], + "self_check": [ + "Are alerts triggered at the correct thresholds?", + "How are logs stored and accessed?" + ] + } + } + ], + "labels": [ + "backend", + "redis", + "logging" + ] + }, + { + "title": "Monitoring and Observability for Rate Limiting", + "description": "Implement monitoring and observability for the rate limiting system.", + "stories": [ + { + "title": "Emit Metrics for Rate Limit Checks", + "description": "Emit metrics for rate limit checks, passes, and rejections.", + "acceptance_criteria": [ + "Emit metrics for rate limit checks, passes, and rejections" + ], + "size": "M", + "priority": "medium", + "labels": [ + "monitoring", + "metrics", + "backend" + ], + "requirement_ids": [ + "REQ-006" + ], + "agent_context": { + "goal": "Gain insights into rate limit operations and performance.", + "exploration_paths": [ + "metrics collection", + "rate limit monitoring" + ], + "exploration_hints": [ + "src/monitoring/metrics.js" + ], + "known_patterns": [ + "Use existing metrics collection framework" + ], + "verification_tests": [ + "test_rate_limit_metrics" + ], + "self_check": [ + "Are all relevant metrics captured?", + "How are metrics visualized and accessed?" + ] + } + }, + { + "title": "Create Dashboards for Rate Limit Health", + "description": "Develop dashboards to show the health and performance of the rate limiting system.", + "acceptance_criteria": [ + "Create dashboards showing rate limit health" + ], + "size": "M", + "priority": "medium", + "labels": [ + "monitoring", + "dashboard", + "visualization" + ], + "requirement_ids": [ + "REQ-006" + ], + "agent_context": { + "goal": "Provide a visual overview of the rate limiting system's health.", + "exploration_paths": [ + "dashboard creation", + "system health visualization" + ], + "exploration_hints": [ + "src/monitoring/dashboards.js" + ], + "known_patterns": [ + "Use existing dashboard framework" + ], + "verification_tests": [ + "test_rate_limit_dashboards" + ], + "self_check": [ + "Are dashboards comprehensive and easy to interpret?", + "How are real-time updates handled?" + ] + } + }, + { + "title": "Alert on Anomalies in Rate Limiting", + "description": "Set up alerts for anomalies such as sudden spikes in rejections or Redis failures.", + "acceptance_criteria": [ + "Alert on anomalies such as sudden spikes in rejections or Redis failures" + ], + "size": "M", + "priority": "medium", + "labels": [ + "monitoring", + "alerting", + "anomaly-detection" + ], + "requirement_ids": [ + "REQ-006" + ], + "agent_context": { + "goal": "Quickly detect and respond to unusual rate limiting activity.", + "exploration_paths": [ + "anomaly detection", + "alerting" + ], + "exploration_hints": [ + "src/monitoring/alerts.js" + ], + "known_patterns": [ + "Use existing alerting framework" + ], + "verification_tests": [ + "test_rate_limit_anomalies" + ], + "self_check": [ + "Are alerts triggered correctly for anomalies?", + "How are alerts communicated to the team?" + ] + } + } + ], + "labels": [ + "monitoring", + "observability" + ] + } + ], + "metadata": { + "generated_at": "2026-02-15T19:25:14.367471+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "requirement_count": 6, + "story_count": 13, + "usage": { + "prompt_tokens": 2206, + "completion_tokens": 3248, + "total_tokens": 5454 + } + } +} \ No newline at end of file diff --git a/outputs/sample_prd_02_user_onboarding_requirements.json b/outputs/sample_prd_02_user_onboarding_requirements.json new file mode 100644 index 0000000..e39b344 --- /dev/null +++ b/outputs/sample_prd_02_user_onboarding_requirements.json @@ -0,0 +1,109 @@ +{ + "requirements": [ + { + "id": "REQ-001", + "title": "Welcome Screen", + "description": "Display a welcome screen after email verification with a personalized greeting, product value proposition, and options to get started or skip onboarding.", + "acceptance_criteria": [ + "Welcome screen appears after email verification", + "Personalized greeting uses user's name", + "Product value proposition displayed in 3-4 bullet points", + "\"Get Started\" CTA button is present", + "Option to skip onboarding is available" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-002", + "title": "User Type Selection", + "description": "Allow users to select their user type for personalized onboarding: Individual, Team Lead, or Enterprise Admin.", + "acceptance_criteria": [ + "User can select from Individual, Team Lead, or Enterprise Admin", + "Selection is stored in user profile for future personalization" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-003", + "title": "Goal Setting", + "description": "Present relevant goals based on user type and allow users to select at least one.", + "acceptance_criteria": [ + "Goals presented are relevant to user type", + "User can select multiple goals", + "At least one goal selection is required" + ], + "dependencies": [ + "REQ-002" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-004", + "title": "Profile Completion", + "description": "Collect essential profile information including display name, profile photo, timezone, and notification preferences.", + "acceptance_criteria": [ + "Display name is required and between 2-50 characters", + "Profile photo is optional, max 5MB, jpg/png only", + "Timezone is auto-detected but can be overridden by user", + "User can set notification preferences" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-005", + "title": "Interactive Tutorial", + "description": "Provide a 5-step interactive tutorial post-profile setup to guide users through key features.", + "acceptance_criteria": [ + "Tutorial includes steps: create project, add task, set due date, invite collaborator, complete task", + "Each step has highlighted UI element with tooltip", + "\"Next\" and \"Skip\" buttons are available", + "Progress indicator shows current step out of 5" + ], + "dependencies": [ + "REQ-004" + ], + "ambiguity_flags": [ + { + "category": "missing_acceptance_criteria", + "issue": "No criteria for skipping step 4 if user is Individual", + "severity": "warning", + "suggested_action": "Specify acceptance criteria for skipping step 4 for Individual user type" + } + ], + "priority": "medium" + }, + { + "id": "REQ-006", + "title": "Completion Celebration", + "description": "Celebrate onboarding completion with a confetti animation, success message, quick links, and help center link.", + "acceptance_criteria": [ + "Confetti animation is shown", + "\"You're all set!\" message is displayed", + "Quick links to common actions are provided", + "Link to help center is available" + ], + "dependencies": [ + "REQ-005" + ], + "ambiguity_flags": [], + "priority": "low" + } + ], + "summary": "Develop a guided onboarding experience to improve user activation rates and feature discovery.", + "source_hash": "d705be59", + "_metadata": { + "analyzed_at": "2026-02-15T19:25:25.244964+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "prompt_tokens": 1229, + "completion_tokens": 813, + "total_tokens": 2042 + } +} \ No newline at end of file diff --git a/outputs/sample_prd_02_user_onboarding_tickets.json b/outputs/sample_prd_02_user_onboarding_tickets.json new file mode 100644 index 0000000..7bbf2cf --- /dev/null +++ b/outputs/sample_prd_02_user_onboarding_tickets.json @@ -0,0 +1,279 @@ +{ + "epics": [ + { + "title": "Welcome and Onboarding Experience", + "description": "Develop a guided onboarding experience to improve user activation rates and feature discovery.", + "stories": [ + { + "title": "Implement Welcome Screen", + "description": "Create a welcome screen that appears after email verification with personalized greeting and options.", + "acceptance_criteria": [ + "Welcome screen appears after email verification", + "Personalized greeting uses user's name", + "Product value proposition displayed in 3-4 bullet points", + "\"Get Started\" CTA button is present", + "Option to skip onboarding is available" + ], + "size": "M", + "priority": "high", + "labels": [ + "frontend", + "ui", + "personalization" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Enhance user engagement by providing a personalized welcome experience.", + "exploration_paths": [ + "welcome screen", + "personalization", + "UI components" + ], + "exploration_hints": [ + "src/components/welcome/", + "src/pages/onboarding/" + ], + "known_patterns": [ + "Use existing UI components", + "Follow personalization guidelines" + ], + "verification_tests": [ + "test_welcome_screen_display", + "test_personalized_greeting" + ], + "self_check": [ + "Is the greeting correctly personalized?", + "Are all UI elements responsive?" + ] + } + }, + { + "title": "Develop User Type Selection", + "description": "Enable users to select their user type for personalized onboarding.", + "acceptance_criteria": [ + "User can select from Individual, Team Lead, or Enterprise Admin", + "Selection is stored in user profile for future personalization" + ], + "size": "M", + "priority": "high", + "labels": [ + "frontend", + "backend", + "personalization" + ], + "requirement_ids": [ + "REQ-002" + ], + "agent_context": { + "goal": "Tailor the onboarding experience based on user type to improve relevance.", + "exploration_paths": [ + "user type selection", + "profile management" + ], + "exploration_hints": [ + "src/components/onboarding/", + "src/api/user/" + ], + "known_patterns": [ + "Use existing profile storage methods" + ], + "verification_tests": [ + "test_user_type_selection", + "test_user_profile_update" + ], + "self_check": [ + "Is the selection stored correctly in the user profile?", + "Does the UI update based on the selected user type?" + ] + } + }, + { + "title": "Implement Goal Setting Feature", + "description": "Present relevant goals based on user type and allow users to select at least one.", + "acceptance_criteria": [ + "Goals presented are relevant to user type", + "User can select multiple goals", + "At least one goal selection is required" + ], + "size": "M", + "priority": "medium", + "labels": [ + "frontend", + "backend", + "personalization" + ], + "requirement_ids": [ + "REQ-003" + ], + "agent_context": { + "goal": "Guide users to set relevant goals to enhance their onboarding experience.", + "exploration_paths": [ + "goal setting", + "user personalization" + ], + "exploration_hints": [ + "src/components/goals/", + "src/api/goals/" + ], + "known_patterns": [ + "Follow existing goal selection patterns" + ], + "verification_tests": [ + "test_goal_selection", + "test_goal_relevance" + ], + "self_check": [ + "Are the goals relevant to the user type?", + "Is at least one goal required before proceeding?" + ] + } + }, + { + "title": "Profile Completion Form", + "description": "Collect essential profile information including display name, profile photo, timezone, and notification preferences.", + "acceptance_criteria": [ + "Display name is required and between 2-50 characters", + "Profile photo is optional, max 5MB, jpg/png only", + "Timezone is auto-detected but can be overridden by user", + "User can set notification preferences" + ], + "size": "M", + "priority": "medium", + "labels": [ + "frontend", + "backend", + "profile" + ], + "requirement_ids": [ + "REQ-004" + ], + "agent_context": { + "goal": "Ensure users provide necessary profile information for a personalized experience.", + "exploration_paths": [ + "profile form", + "user settings" + ], + "exploration_hints": [ + "src/components/profile/", + "src/api/user/" + ], + "known_patterns": [ + "Use existing form validation libraries" + ], + "verification_tests": [ + "test_profile_completion", + "test_photo_upload" + ], + "self_check": [ + "Is the display name validation correct?", + "Can users override the auto-detected timezone?" + ] + } + }, + { + "title": "Create Interactive Tutorial", + "description": "Provide a 5-step interactive tutorial post-profile setup to guide users through key features.", + "acceptance_criteria": [ + "Tutorial includes steps: create project, add task, set due date, invite collaborator, complete task", + "Each step has highlighted UI element with tooltip", + "\"Next\" and \"Skip\" buttons are available", + "Progress indicator shows current step out of 5" + ], + "size": "L", + "priority": "medium", + "labels": [ + "frontend", + "tutorial", + "ui" + ], + "requirement_ids": [ + "REQ-005" + ], + "agent_context": { + "goal": "Help users discover key features through an interactive guide.", + "exploration_paths": [ + "interactive tutorial", + "UI guidance" + ], + "exploration_hints": [ + "src/components/tutorial/", + "src/pages/features/" + ], + "known_patterns": [ + "Use existing tooltip libraries" + ], + "verification_tests": [ + "test_tutorial_steps", + "test_tutorial_navigation" + ], + "self_check": [ + "Does the tutorial adapt based on user type?", + "Is the progress indicator accurate?" + ] + } + }, + { + "title": "Implement Completion Celebration", + "description": "Celebrate onboarding completion with a confetti animation, success message, quick links, and help center link.", + "acceptance_criteria": [ + "Confetti animation is shown", + "\"You're all set!\" message is displayed", + "Quick links to common actions are provided", + "Link to help center is available" + ], + "size": "S", + "priority": "low", + "labels": [ + "frontend", + "ui", + "celebration" + ], + "requirement_ids": [ + "REQ-006" + ], + "agent_context": { + "goal": "Provide a positive reinforcement to users completing the onboarding process.", + "exploration_paths": [ + "celebration animation", + "UI feedback" + ], + "exploration_hints": [ + "src/components/celebration/", + "src/pages/onboarding/" + ], + "known_patterns": [ + "Use existing animation libraries" + ], + "verification_tests": [ + "test_completion_celebration", + "test_quick_links" + ], + "self_check": [ + "Is the animation smooth and non-intrusive?", + "Are the quick links relevant and functional?" + ] + } + } + ], + "labels": [ + "onboarding", + "user experience", + "personalization" + ] + } + ], + "metadata": { + "generated_at": "2026-02-15T19:25:41.424971+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "requirement_count": 6, + "story_count": 6, + "usage": { + "prompt_tokens": 2188, + "completion_tokens": 1584, + "total_tokens": 3772 + } + } +} \ No newline at end of file diff --git a/outputs/sample_prd_03_checkout_requirements.json b/outputs/sample_prd_03_checkout_requirements.json new file mode 100644 index 0000000..3698a29 --- /dev/null +++ b/outputs/sample_prd_03_checkout_requirements.json @@ -0,0 +1,128 @@ +{ + "requirements": [ + { + "id": "REQ-001", + "title": "Single-Page Checkout", + "description": "Consolidate the checkout process into a single, scrollable page with sections for cart summary, shipping information, payment method, and order review.", + "acceptance_criteria": [ + "Checkout process is on a single page", + "Cart summary is collapsible on mobile devices", + "Page is responsive and fast" + ], + "dependencies": [], + "ambiguity_flags": [ + { + "category": "vague_quantifier", + "issue": "The term 'fast and responsive' is not defined with specific performance metrics.", + "severity": "warning", + "suggested_action": "Define specific performance metrics, such as page load time under 2 seconds." + } + ], + "priority": "high" + }, + { + "id": "REQ-002", + "title": "Guest Checkout", + "description": "Allow users to complete purchases without creating an account, requiring only an email address for order confirmation.", + "acceptance_criteria": [ + "Users can checkout without account creation", + "Email address is required for order confirmation", + "Option to create an account post-purchase with one click", + "Guest orders are stored and linked by email" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-003", + "title": "Address Autocomplete", + "description": "Implement address autocomplete using Google Places API to support international addresses and validate them before submission.", + "acceptance_criteria": [ + "Address autocomplete is implemented using Google Places API", + "Supports international addresses", + "Validates addresses before submission", + "Displays 'We can't deliver here' for unsupported regions" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-004", + "title": "Multiple Payment Methods", + "description": "Support a variety of payment options including credit/debit cards, PayPal, Apple Pay, Google Pay, and Buy Now Pay Later (Klarna).", + "acceptance_criteria": [ + "Support for Visa, Mastercard, and Amex", + "Support for PayPal", + "Support for Apple Pay on Safari/iOS", + "Support for Google Pay on Chrome/Android", + "Support for Buy Now Pay Later with Klarna" + ], + "dependencies": [], + "ambiguity_flags": [ + { + "category": "missing_acceptance_criteria", + "issue": "The term 'seamless' for payment processing is not defined with specific criteria.", + "severity": "suggestion", + "suggested_action": "Define what constitutes 'seamless' payment processing, such as transaction completion within 5 seconds." + } + ], + "priority": "high" + }, + { + "id": "REQ-005", + "title": "Real-time Validation", + "description": "Validate form fields in real-time as the user types, showing inline errors.", + "acceptance_criteria": [ + "Email format is validated", + "Card number is validated using Luhn algorithm", + "Expiration date is validated to not be in the past", + "CVV is validated to be 3-4 digits", + "Shipping address completeness is validated", + "Inline errors are displayed" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-006", + "title": "Order Summary", + "description": "Display an itemized order summary including product details, pricing, and totals.", + "acceptance_criteria": [ + "Displays product thumbnails, names, and quantities", + "Shows individual prices and line totals", + "Displays subtotal, shipping cost, tax, discount codes, and grand total" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-007", + "title": "Promo Code Support", + "description": "Allow users to enter promo codes and see the discount applied to their order.", + "acceptance_criteria": [ + "Single input field for promo code with 'Apply' button", + "Displays success/error message", + "Shows discount amount", + "Supports percentage and fixed discounts", + "Validates code server-side" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "medium" + } + ], + "summary": "Redesign the e-commerce checkout process to reduce cart abandonment and improve conversion rates by implementing a single-page checkout, guest checkout, address autocomplete, multiple payment methods, real-time validation, order summary, and promo code support.", + "source_hash": "e36b1e44", + "_metadata": { + "analyzed_at": "2026-02-15T19:25:51.575558+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "prompt_tokens": 1187, + "completion_tokens": 1047, + "total_tokens": 2234 + } +} \ No newline at end of file diff --git a/outputs/sample_prd_03_checkout_tickets.json b/outputs/sample_prd_03_checkout_tickets.json new file mode 100644 index 0000000..776d72a --- /dev/null +++ b/outputs/sample_prd_03_checkout_tickets.json @@ -0,0 +1,373 @@ +{ + "epics": [ + { + "title": "Single-Page Checkout", + "description": "Consolidate the checkout process into a single, scrollable page to improve user experience and reduce cart abandonment.", + "stories": [ + { + "title": "Implement single-page checkout layout", + "description": "Create a single-page layout for checkout with sections for cart summary, shipping information, payment method, and order review.", + "acceptance_criteria": [ + "Checkout process is on a single page", + "Page is responsive and fast", + "Cart summary is collapsible on mobile devices" + ], + "size": "L", + "priority": "high", + "labels": [ + "frontend", + "ui", + "responsive" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Streamline the checkout process to enhance user experience and reduce abandonment rates.", + "exploration_paths": [ + "single-page application", + "responsive design", + "checkout UX" + ], + "exploration_hints": [ + "src/pages/checkout/", + "src/components/" + ], + "known_patterns": [ + "Use existing responsive grid system" + ], + "verification_tests": [ + "test_single_page_checkout_layout" + ], + "self_check": [ + "Is the page load time under 2 seconds?", + "Does the layout adapt well to different screen sizes?" + ] + } + } + ], + "labels": [ + "checkout", + "ux" + ] + }, + { + "title": "Guest Checkout", + "description": "Enable users to complete purchases without creating an account to simplify the checkout process.", + "stories": [ + { + "title": "Implement guest checkout feature", + "description": "Allow users to checkout without creating an account, requiring only an email address for order confirmation.", + "acceptance_criteria": [ + "Users can checkout without account creation", + "Email address is required for order confirmation", + "Option to create an account post-purchase with one click", + "Guest orders are stored and linked by email" + ], + "size": "M", + "priority": "high", + "labels": [ + "backend", + "auth", + "database" + ], + "requirement_ids": [ + "REQ-002" + ], + "agent_context": { + "goal": "Reduce friction in the checkout process by allowing purchases without mandatory account creation.", + "exploration_paths": [ + "guest checkout", + "order confirmation", + "user authentication" + ], + "exploration_hints": [ + "src/auth/", + "src/orders/" + ], + "known_patterns": [ + "Follow existing order processing patterns" + ], + "verification_tests": [ + "test_guest_checkout_flow" + ], + "self_check": [ + "Is the email confirmation sent promptly?", + "Can users easily create an account post-purchase?" + ] + } + } + ], + "labels": [ + "checkout", + "user-experience" + ] + }, + { + "title": "Address Autocomplete", + "description": "Enhance user experience by implementing address autocomplete using Google Places API.", + "stories": [ + { + "title": "Integrate Google Places API for address autocomplete", + "description": "Implement address autocomplete feature using Google Places API to support and validate international addresses.", + "acceptance_criteria": [ + "Address autocomplete is implemented using Google Places API", + "Supports international addresses", + "Validates addresses before submission", + "Displays 'We can't deliver here' for unsupported regions" + ], + "size": "M", + "priority": "medium", + "labels": [ + "frontend", + "api", + "validation" + ], + "requirement_ids": [ + "REQ-003" + ], + "agent_context": { + "goal": "Improve address entry accuracy and speed by providing autocomplete suggestions.", + "exploration_paths": [ + "Google Places API", + "address validation", + "internationalization" + ], + "exploration_hints": [ + "src/components/address/", + "src/utils/" + ], + "known_patterns": [ + "Use existing API integration patterns" + ], + "verification_tests": [ + "test_address_autocomplete" + ], + "self_check": [ + "Does the autocomplete work for all major regions?", + "Is the address validation robust?" + ] + } + } + ], + "labels": [ + "checkout", + "ux" + ] + }, + { + "title": "Multiple Payment Methods", + "description": "Support a variety of payment options to enhance user convenience and flexibility.", + "stories": [ + { + "title": "Implement multiple payment methods", + "description": "Support various payment options including credit/debit cards, PayPal, Apple Pay, Google Pay, and Klarna.", + "acceptance_criteria": [ + "Support for Visa, Mastercard, and Amex", + "Support for PayPal", + "Support for Apple Pay on Safari/iOS", + "Support for Google Pay on Chrome/Android", + "Support for Buy Now Pay Later with Klarna" + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "payment", + "api" + ], + "requirement_ids": [ + "REQ-004" + ], + "agent_context": { + "goal": "Provide users with flexible payment options to increase conversion rates.", + "exploration_paths": [ + "payment gateway integration", + "Apple Pay", + "Google Pay", + "Klarna" + ], + "exploration_hints": [ + "src/payments/", + "src/api/" + ], + "known_patterns": [ + "Use existing payment gateway integration patterns" + ], + "verification_tests": [ + "test_payment_methods_integration" + ], + "self_check": [ + "Is the transaction completion time under 5 seconds?", + "Are all payment methods working seamlessly?" + ] + } + } + ], + "labels": [ + "checkout", + "payments" + ] + }, + { + "title": "Real-time Validation", + "description": "Enhance form usability by implementing real-time validation for checkout fields.", + "stories": [ + { + "title": "Implement real-time form validation", + "description": "Validate form fields in real-time as the user types, showing inline errors.", + "acceptance_criteria": [ + "Email format is validated", + "Card number is validated using Luhn algorithm", + "Expiration date is validated to not be in the past", + "CVV is validated to be 3-4 digits", + "Shipping address completeness is validated", + "Inline errors are displayed" + ], + "size": "M", + "priority": "medium", + "labels": [ + "frontend", + "validation", + "ux" + ], + "requirement_ids": [ + "REQ-005" + ], + "agent_context": { + "goal": "Improve user experience by providing immediate feedback on form input errors.", + "exploration_paths": [ + "form validation", + "real-time feedback", + "Luhn algorithm" + ], + "exploration_hints": [ + "src/components/forms/", + "src/utils/validation/" + ], + "known_patterns": [ + "Use existing form validation library" + ], + "verification_tests": [ + "test_real_time_validation" + ], + "self_check": [ + "Are all validation rules correctly implemented?", + "Is the user experience smooth with real-time feedback?" + ] + } + } + ], + "labels": [ + "checkout", + "ux" + ] + }, + { + "title": "Order Summary and Promo Code Support", + "description": "Provide users with a detailed order summary and the ability to apply promo codes.", + "stories": [ + { + "title": "Display detailed order summary", + "description": "Show an itemized order summary including product details, pricing, and totals.", + "acceptance_criteria": [ + "Displays product thumbnails, names, and quantities", + "Shows individual prices and line totals", + "Displays subtotal, shipping cost, tax, discount codes, and grand total" + ], + "size": "M", + "priority": "medium", + "labels": [ + "frontend", + "ui", + "order" + ], + "requirement_ids": [ + "REQ-006" + ], + "agent_context": { + "goal": "Provide transparency and clarity on order details to users.", + "exploration_paths": [ + "order summary", + "pricing details", + "ui design" + ], + "exploration_hints": [ + "src/components/order/", + "src/pages/checkout/" + ], + "known_patterns": [ + "Use existing UI components for displaying lists" + ], + "verification_tests": [ + "test_order_summary_display" + ], + "self_check": [ + "Is all pricing information accurate?", + "Does the summary update dynamically with changes?" + ] + } + }, + { + "title": "Implement promo code functionality", + "description": "Allow users to enter promo codes and see the discount applied to their order.", + "acceptance_criteria": [ + "Single input field for promo code with 'Apply' button", + "Displays success/error message", + "Shows discount amount", + "Supports percentage and fixed discounts", + "Validates code server-side" + ], + "size": "M", + "priority": "medium", + "labels": [ + "frontend", + "backend", + "discount" + ], + "requirement_ids": [ + "REQ-007" + ], + "agent_context": { + "goal": "Encourage purchases by allowing users to apply promotional discounts.", + "exploration_paths": [ + "promo code validation", + "discount application", + "user incentives" + ], + "exploration_hints": [ + "src/components/promo/", + "src/api/discounts/" + ], + "known_patterns": [ + "Follow existing discount validation patterns" + ], + "verification_tests": [ + "test_promo_code_application" + ], + "self_check": [ + "Are both percentage and fixed discounts supported?", + "Is the promo code validation secure and efficient?" + ] + } + } + ], + "labels": [ + "checkout", + "promotions" + ] + } + ], + "metadata": { + "generated_at": "2026-02-15T19:26:14.296491+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "requirement_count": 7, + "story_count": 7, + "usage": { + "prompt_tokens": 2393, + "completion_tokens": 2087, + "total_tokens": 4480 + } + } +} \ No newline at end of file diff --git a/outputs/sample_prd_04_notifications_requirements.json b/outputs/sample_prd_04_notifications_requirements.json new file mode 100644 index 0000000..e789d7b --- /dev/null +++ b/outputs/sample_prd_04_notifications_requirements.json @@ -0,0 +1,116 @@ +{ + "requirements": [ + { + "id": "REQ-001", + "title": "Notification Bell", + "description": "Add a notification bell icon to the header with an unread count badge and animation for new notifications.", + "acceptance_criteria": [ + "Notification bell icon is visible in the header", + "Unread count badge displays up to '99+'", + "Clicking the bell opens a notification dropdown", + "Bell animates briefly when a new notification arrives", + "Positioned on the right side of the header before the user avatar" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-002", + "title": "Notification Dropdown", + "description": "Provide a dropdown showing recent notifications with navigation and management options.", + "acceptance_criteria": [ + "Dropdown shows a list of the last 20 notifications", + "Each notification displays an icon, title, timestamp, and read/unread state", + "'Mark all as read' link is present at the top", + "'View all' link is present at the bottom", + "Clicking a notification navigates to the relevant page" + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-003", + "title": "Full Notification Page", + "description": "Create a full notification page with pagination, filtering, bulk actions, and search capabilities.", + "acceptance_criteria": [ + "Page displays all notifications with pagination (20 per page)", + "Users can filter notifications by type and read/unread status", + "Bulk actions available: mark selected as read, delete selected", + "Search functionality by keyword is available" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-004", + "title": "Notification Types", + "description": "Support distinct notification categories with unique icons for each type.", + "acceptance_criteria": [ + "Support for Mentions, Assignments, Updates, Comments, and System notifications", + "Each type has a distinct icon" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-005", + "title": "Real-time Delivery", + "description": "Implement real-time notification delivery with WebSocket and fallback mechanisms.", + "acceptance_criteria": [ + "Notifications appear instantly using WebSocket", + "Fallback to polling if WebSocket fails", + "Toast notification for high-priority items", + "Subtle sound plays for notifications, with user option to disable" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-006", + "title": "Notification Preferences", + "description": "Allow users to customize notification settings including type toggles, delivery methods, and quiet hours.", + "acceptance_criteria": [ + "Users can toggle each notification type on/off", + "Users can choose delivery method per type: in-app, email, both, none", + "Users can set quiet hours for no push notifications", + "Email digest options: immediate, daily, weekly, never" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-007", + "title": "Mobile Support", + "description": "Ensure notifications are mobile-friendly with responsive design and touch interactions.", + "acceptance_criteria": [ + "Responsive dropdown design for mobile", + "Touch-friendly tap targets", + "Swipe to dismiss notifications on mobile" + ], + "dependencies": [ + "REQ-001", + "REQ-002" + ], + "ambiguity_flags": [], + "priority": "medium" + } + ], + "summary": "Develop a centralized notification system with real-time updates, customizable preferences, and mobile support to enhance user engagement and reduce email dependency.", + "source_hash": "c834f374", + "_metadata": { + "analyzed_at": "2026-02-15T19:26:24.128505+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "prompt_tokens": 1211, + "completion_tokens": 886, + "total_tokens": 2097 + } +} \ No newline at end of file diff --git a/outputs/sample_prd_04_notifications_tickets.json b/outputs/sample_prd_04_notifications_tickets.json new file mode 100644 index 0000000..6d66b4a --- /dev/null +++ b/outputs/sample_prd_04_notifications_tickets.json @@ -0,0 +1,309 @@ +{ + "epics": [ + { + "title": "Notification UI Enhancements", + "description": "Implement a comprehensive notification system with a bell icon, dropdown, and full page view.", + "stories": [ + { + "title": "Add Notification Bell Icon to Header", + "description": "Implement a notification bell icon in the header with an unread count badge and animation for new notifications.", + "acceptance_criteria": [ + "Notification bell icon is visible in the header", + "Unread count badge displays up to '99+'", + "Bell animates briefly when a new notification arrives", + "Positioned on the right side of the header before the user avatar" + ], + "size": "M", + "priority": "high", + "labels": [ + "frontend", + "ui" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Enhance user engagement by providing a visual cue for new notifications.", + "exploration_paths": [ + "notification UI", + "header design" + ], + "exploration_hints": [ + "src/components/header/", + "src/styles/" + ], + "known_patterns": [ + "Use existing icon library", + "Follow animation guidelines" + ], + "verification_tests": [ + "test_notification_bell_visibility", + "test_unread_count_display" + ], + "self_check": [ + "Is the bell icon visible on all screen sizes?", + "Does the animation meet performance standards?" + ] + } + }, + { + "title": "Implement Notification Dropdown", + "description": "Create a dropdown showing recent notifications with navigation and management options.", + "acceptance_criteria": [ + "Dropdown shows a list of the last 20 notifications", + "Each notification displays an icon, title, timestamp, and read/unread state", + "'Mark all as read' link is present at the top", + "'View all' link is present at the bottom", + "Clicking a notification navigates to the relevant page" + ], + "size": "L", + "priority": "high", + "labels": [ + "frontend", + "ui", + "navigation" + ], + "requirement_ids": [ + "REQ-002" + ], + "agent_context": { + "goal": "Provide users with quick access to recent notifications and management options.", + "exploration_paths": [ + "dropdown UI", + "notification management" + ], + "exploration_hints": [ + "src/components/notifications/", + "src/pages/notifications/" + ], + "known_patterns": [ + "Use dropdown component", + "Implement list navigation" + ], + "verification_tests": [ + "test_notification_dropdown_display", + "test_navigation_links" + ], + "self_check": [ + "Does the dropdown handle large notification lists efficiently?", + "Are navigation links correctly routed?" + ] + } + }, + { + "title": "Create Full Notification Page", + "description": "Develop a full notification page with pagination, filtering, bulk actions, and search capabilities.", + "acceptance_criteria": [ + "Page displays all notifications with pagination (20 per page)", + "Users can filter notifications by type and read/unread status", + "Bulk actions available: mark selected as read, delete selected", + "Search functionality by keyword is available" + ], + "size": "L", + "priority": "medium", + "labels": [ + "frontend", + "ui", + "search" + ], + "requirement_ids": [ + "REQ-003" + ], + "agent_context": { + "goal": "Allow users to manage and search through all their notifications efficiently.", + "exploration_paths": [ + "pagination", + "filtering", + "bulk actions", + "search" + ], + "exploration_hints": [ + "src/pages/notifications/", + "src/components/search/" + ], + "known_patterns": [ + "Use pagination library", + "Implement search with debounce" + ], + "verification_tests": [ + "test_notification_page_pagination", + "test_search_functionality" + ], + "self_check": [ + "Is pagination smooth and responsive?", + "Are search results accurate and fast?" + ] + } + } + ], + "labels": [ + "notifications", + "ui" + ] + }, + { + "title": "Notification Delivery and Preferences", + "description": "Implement real-time notification delivery and customizable user preferences.", + "stories": [ + { + "title": "Implement Real-time Notification Delivery", + "description": "Enable real-time notification delivery using WebSocket with fallback mechanisms.", + "acceptance_criteria": [ + "Notifications appear instantly using WebSocket", + "Fallback to polling if WebSocket fails", + "Toast notification for high-priority items", + "Subtle sound plays for notifications, with user option to disable" + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "realtime", + "websocket" + ], + "requirement_ids": [ + "REQ-005" + ], + "agent_context": { + "goal": "Ensure users receive notifications in real-time to improve engagement.", + "exploration_paths": [ + "WebSocket", + "polling", + "notification sound" + ], + "exploration_hints": [ + "src/services/notifications/", + "src/utils/websocket/" + ], + "known_patterns": [ + "Use existing WebSocket library", + "Implement fallback polling" + ], + "verification_tests": [ + "test_realtime_notification_delivery", + "test_fallback_mechanism" + ], + "self_check": [ + "Does the fallback mechanism activate correctly?", + "Is the notification sound user-friendly?" + ] + } + }, + { + "title": "Develop Notification Preferences Settings", + "description": "Allow users to customize notification settings including type toggles, delivery methods, and quiet hours.", + "acceptance_criteria": [ + "Users can toggle each notification type on/off", + "Users can choose delivery method per type: in-app, email, both, none", + "Users can set quiet hours for no push notifications", + "Email digest options: immediate, daily, weekly, never" + ], + "size": "M", + "priority": "medium", + "labels": [ + "frontend", + "settings", + "preferences" + ], + "requirement_ids": [ + "REQ-006" + ], + "agent_context": { + "goal": "Provide users with control over how and when they receive notifications.", + "exploration_paths": [ + "user settings", + "notification preferences" + ], + "exploration_hints": [ + "src/components/settings/", + "src/pages/preferences/" + ], + "known_patterns": [ + "Use settings management library", + "Implement toggle switches" + ], + "verification_tests": [ + "test_notification_preferences_ui", + "test_quiet_hours_setting" + ], + "self_check": [ + "Are preference changes saved and applied correctly?", + "Is the UI intuitive for all user types?" + ] + } + } + ], + "labels": [ + "notifications", + "realtime", + "preferences" + ] + }, + { + "title": "Mobile Notification Support", + "description": "Ensure notifications are mobile-friendly with responsive design and touch interactions.", + "stories": [ + { + "title": "Optimize Notification UI for Mobile", + "description": "Ensure the notification dropdown and interactions are mobile-friendly.", + "acceptance_criteria": [ + "Responsive dropdown design for mobile", + "Touch-friendly tap targets", + "Swipe to dismiss notifications on mobile" + ], + "size": "M", + "priority": "medium", + "labels": [ + "frontend", + "mobile", + "responsive" + ], + "requirement_ids": [ + "REQ-007" + ], + "agent_context": { + "goal": "Ensure users have a seamless notification experience on mobile devices.", + "exploration_paths": [ + "responsive design", + "mobile UI", + "touch interactions" + ], + "exploration_hints": [ + "src/components/mobile/", + "src/styles/responsive/" + ], + "known_patterns": [ + "Use responsive design frameworks", + "Implement touch event handlers" + ], + "verification_tests": [ + "test_mobile_notification_ui", + "test_swipe_dismiss" + ], + "self_check": [ + "Is the UI responsive on all mobile devices?", + "Are touch interactions smooth and intuitive?" + ] + } + } + ], + "labels": [ + "notifications", + "mobile", + "responsive" + ] + } + ], + "metadata": { + "generated_at": "2026-02-15T19:26:43.789043+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "requirement_count": 7, + "story_count": 6, + "usage": { + "prompt_tokens": 2252, + "completion_tokens": 1741, + "total_tokens": 3993 + } + } +} \ No newline at end of file diff --git a/outputs/sample_prd_05_analytics_requirements.json b/outputs/sample_prd_05_analytics_requirements.json new file mode 100644 index 0000000..d740aaa --- /dev/null +++ b/outputs/sample_prd_05_analytics_requirements.json @@ -0,0 +1,133 @@ +{ + "requirements": [ + { + "id": "REQ-001", + "title": "Dashboard Home", + "description": "Create a main dashboard view at /analytics with customizable widgets and global filters.", + "acceptance_criteria": [ + "Dashboard accessible at /analytics", + "Supports grid of customizable widgets", + "Widgets can be rearranged via drag-and-drop", + "Includes add/remove widgets button", + "Includes date range selector as a global filter", + "Includes auto-refresh toggle" + ], + "dependencies": [], + "ambiguity_flags": [ + { + "category": "vague_quantifier", + "issue": "'load quickly' is not defined with specific performance metrics", + "severity": "warning", + "suggested_action": "Define acceptable load time, e.g., 'Dashboard loads in under 2 seconds with up to 20 widgets'" + } + ], + "priority": "high" + }, + { + "id": "REQ-002", + "title": "Pre-built Widgets", + "description": "Provide a set of pre-built widgets for data visualization.", + "acceptance_criteria": [ + "Includes Key Metrics widget with 4 configurable big numbers", + "Includes Line Chart for time series data", + "Includes Bar Chart for category comparison", + "Includes Pie Chart for distribution breakdown", + "Includes Data Table with sortable and filterable rows", + "Includes Funnel for conversion visualization" + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-003", + "title": "Custom Widget Builder", + "description": "Allow users to create custom widgets with various configurations.", + "acceptance_criteria": [ + "Users can select data source (users, orders, events, etc.)", + "Users can choose visualization type", + "Users can configure dimensions and measures", + "Users can apply filters", + "Users can set refresh interval", + "Users can save widget with a custom name" + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-004", + "title": "Date Range Controls", + "description": "Support flexible date selection for data filtering.", + "acceptance_criteria": [ + "Includes presets for Today, Yesterday, Last 7/30/90 days, This month, Last month", + "Includes custom range picker with calendar", + "Includes compare to previous period toggle", + "Date range can be applied to all widgets or a single widget" + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-005", + "title": "Export Capabilities", + "description": "Allow users to export data and share dashboards.", + "acceptance_criteria": [ + "Users can export widget as PNG/PDF", + "Users can export underlying data as CSV/Excel", + "Users can schedule automated email reports (daily/weekly/monthly)", + "Users can share dashboard via link (read-only)" + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-006", + "title": "Real-time Updates", + "description": "Ensure the dashboard reflects current data with real-time updates.", + "acceptance_criteria": [ + "WebSocket connection for live updates", + "Visual indicator when data refreshes", + "Configurable refresh intervals (1min, 5min, 15min, manual)" + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-007", + "title": "Access Control", + "description": "Implement access control for dashboard and data security.", + "acceptance_criteria": [ + "Dashboard-level permissions (view, edit, admin)", + "Data-level row security based on user role", + "Audit log of dashboard access" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "high" + } + ], + "summary": "Develop a self-service analytics dashboard for real-time data visualization and insights generation, reducing dependency on support for report requests.", + "source_hash": "e859e8c0", + "_metadata": { + "analyzed_at": "2026-02-15T19:26:52.080786+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "prompt_tokens": 1229, + "completion_tokens": 953, + "total_tokens": 2182 + } +} \ No newline at end of file diff --git a/outputs/sample_prd_05_analytics_tickets.json b/outputs/sample_prd_05_analytics_tickets.json new file mode 100644 index 0000000..b03c8f9 --- /dev/null +++ b/outputs/sample_prd_05_analytics_tickets.json @@ -0,0 +1,420 @@ +{ + "epics": [ + { + "title": "Dashboard Home and Customization", + "description": "Create a main dashboard view with customizable widgets and global filters.", + "stories": [ + { + "title": "Implement main dashboard view", + "description": "Create a main dashboard view accessible at /analytics with customizable widgets.", + "acceptance_criteria": [ + "Dashboard accessible at /analytics", + "Supports grid of customizable widgets", + "Includes add/remove widgets button" + ], + "size": "L", + "priority": "high", + "labels": [ + "frontend", + "ui", + "dashboard" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Provide users with a customizable dashboard for personalized data visualization.", + "exploration_paths": [ + "dashboard UI", + "widget management", + "frontend routing" + ], + "exploration_hints": [ + "src/pages/analytics/", + "src/components/widgets/" + ], + "known_patterns": [ + "Use grid layout libraries", + "Follow existing UI component patterns" + ], + "verification_tests": [ + "test_dashboard_accessibility", + "test_widget_customization" + ], + "self_check": [ + "Does the dashboard load in under 2 seconds with up to 20 widgets?", + "Is the widget customization intuitive?" + ] + } + }, + { + "title": "Implement widget drag-and-drop functionality", + "description": "Enable rearranging of widgets via drag-and-drop on the dashboard.", + "acceptance_criteria": [ + "Widgets can be rearranged via drag-and-drop", + "Changes persist after page refresh" + ], + "size": "M", + "priority": "high", + "labels": [ + "frontend", + "ui", + "drag-and-drop" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Allow users to organize their dashboard layout according to their preferences.", + "exploration_paths": [ + "drag-and-drop library", + "state management" + ], + "exploration_hints": [ + "src/components/widgets/", + "src/state/" + ], + "known_patterns": [ + "Use existing drag-and-drop libraries" + ], + "verification_tests": [ + "test_widget_rearrangement" + ], + "self_check": [ + "Are widget positions saved correctly?", + "Is the drag-and-drop experience smooth and responsive?" + ] + } + }, + { + "title": "Implement global filters and auto-refresh toggle", + "description": "Add date range selector and auto-refresh toggle to the dashboard.", + "acceptance_criteria": [ + "Includes date range selector as a global filter", + "Includes auto-refresh toggle" + ], + "size": "M", + "priority": "high", + "labels": [ + "frontend", + "ui", + "filters" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Provide users with tools to filter data and keep it updated in real-time.", + "exploration_paths": [ + "date range picker", + "auto-refresh mechanism" + ], + "exploration_hints": [ + "src/components/filters/", + "src/utils/refresh/" + ], + "known_patterns": [ + "Use existing date picker libraries" + ], + "verification_tests": [ + "test_date_range_filter", + "test_auto_refresh_toggle" + ], + "self_check": [ + "Does the date range filter apply to all widgets?", + "Is the auto-refresh toggle intuitive and functional?" + ] + } + } + ], + "labels": [ + "dashboard", + "customization", + "ui" + ] + }, + { + "title": "Widget Library and Customization", + "description": "Provide pre-built widgets and allow users to create custom widgets.", + "stories": [ + { + "title": "Develop pre-built widgets", + "description": "Create a set of pre-built widgets for data visualization.", + "acceptance_criteria": [ + "Includes Key Metrics widget with 4 configurable big numbers", + "Includes Line Chart for time series data", + "Includes Bar Chart for category comparison", + "Includes Pie Chart for distribution breakdown", + "Includes Data Table with sortable and filterable rows", + "Includes Funnel for conversion visualization" + ], + "size": "L", + "priority": "medium", + "labels": [ + "frontend", + "widgets", + "visualization" + ], + "requirement_ids": [ + "REQ-002" + ], + "agent_context": { + "goal": "Provide users with a variety of pre-built widgets for immediate data visualization.", + "exploration_paths": [ + "data visualization", + "widget library" + ], + "exploration_hints": [ + "src/components/widgets/prebuilt/" + ], + "known_patterns": [ + "Use existing chart libraries" + ], + "verification_tests": [ + "test_prebuilt_widgets" + ], + "self_check": [ + "Are all widgets functioning as expected?", + "Is the data visualization clear and accurate?" + ] + } + }, + { + "title": "Implement custom widget builder", + "description": "Allow users to create custom widgets with various configurations.", + "acceptance_criteria": [ + "Users can select data source (users, orders, events, etc.)", + "Users can choose visualization type", + "Users can configure dimensions and measures", + "Users can apply filters", + "Users can set refresh interval", + "Users can save widget with a custom name" + ], + "size": "L", + "priority": "high", + "labels": [ + "frontend", + "widgets", + "customization" + ], + "requirement_ids": [ + "REQ-003" + ], + "agent_context": { + "goal": "Empower users to create personalized widgets tailored to their specific data needs.", + "exploration_paths": [ + "custom widget creation", + "data source integration" + ], + "exploration_hints": [ + "src/components/widgets/custom/" + ], + "known_patterns": [ + "Follow existing widget creation patterns" + ], + "verification_tests": [ + "test_custom_widget_creation" + ], + "self_check": [ + "Are all configuration options available and functional?", + "Is the custom widget saved and displayed correctly?" + ] + } + } + ], + "labels": [ + "widgets", + "customization", + "visualization" + ] + }, + { + "title": "Data Export and Sharing", + "description": "Enable data export and sharing capabilities for dashboards.", + "stories": [ + { + "title": "Implement data export functionality", + "description": "Allow users to export widget data as PNG/PDF and underlying data as CSV/Excel.", + "acceptance_criteria": [ + "Users can export widget as PNG/PDF", + "Users can export underlying data as CSV/Excel" + ], + "size": "M", + "priority": "medium", + "labels": [ + "backend", + "export", + "data" + ], + "requirement_ids": [ + "REQ-005" + ], + "agent_context": { + "goal": "Provide users with the ability to export data for offline analysis and reporting.", + "exploration_paths": [ + "data export", + "file generation" + ], + "exploration_hints": [ + "src/services/export/" + ], + "known_patterns": [ + "Use existing export libraries" + ], + "verification_tests": [ + "test_data_export" + ], + "self_check": [ + "Are all export formats functioning correctly?", + "Is the exported data accurate and complete?" + ] + } + }, + { + "title": "Develop dashboard sharing feature", + "description": "Allow users to share dashboards via a read-only link.", + "acceptance_criteria": [ + "Users can share dashboard via link (read-only)" + ], + "size": "M", + "priority": "medium", + "labels": [ + "backend", + "sharing", + "security" + ], + "requirement_ids": [ + "REQ-005" + ], + "agent_context": { + "goal": "Enable users to share insights with others without compromising data security.", + "exploration_paths": [ + "link sharing", + "access control" + ], + "exploration_hints": [ + "src/services/sharing/" + ], + "known_patterns": [ + "Follow existing link generation patterns" + ], + "verification_tests": [ + "test_dashboard_sharing" + ], + "self_check": [ + "Is the shared link secure and read-only?", + "Does the shared dashboard display correctly?" + ] + } + } + ], + "labels": [ + "export", + "sharing", + "data" + ] + }, + { + "title": "Real-time Updates and Access Control", + "description": "Implement real-time updates and access control for the dashboard.", + "stories": [ + { + "title": "Enable real-time data updates", + "description": "Ensure the dashboard reflects current data with real-time updates.", + "acceptance_criteria": [ + "WebSocket connection for live updates", + "Visual indicator when data refreshes", + "Configurable refresh intervals (1min, 5min, 15min, manual)" + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "real-time", + "websocket" + ], + "requirement_ids": [ + "REQ-006" + ], + "agent_context": { + "goal": "Keep the dashboard data up-to-date without requiring manual refreshes.", + "exploration_paths": [ + "real-time updates", + "WebSocket implementation" + ], + "exploration_hints": [ + "src/services/real-time/" + ], + "known_patterns": [ + "Use WebSocket for live data" + ], + "verification_tests": [ + "test_real_time_updates" + ], + "self_check": [ + "Is the WebSocket connection stable and reliable?", + "Are refresh intervals configurable and respected?" + ] + } + }, + { + "title": "Implement dashboard access control", + "description": "Implement access control for dashboard and data security.", + "acceptance_criteria": [ + "Dashboard-level permissions (view, edit, admin)", + "Data-level row security based on user role", + "Audit log of dashboard access" + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "security", + "auth" + ], + "requirement_ids": [ + "REQ-007" + ], + "agent_context": { + "goal": "Ensure that only authorized users can access and modify dashboard data.", + "exploration_paths": [ + "access control", + "role-based security" + ], + "exploration_hints": [ + "src/services/auth/", + "src/services/security/" + ], + "known_patterns": [ + "Use role-based access control" + ], + "verification_tests": [ + "test_access_control" + ], + "self_check": [ + "Are permissions correctly enforced?", + "Is the audit log comprehensive and secure?" + ] + } + } + ], + "labels": [ + "real-time", + "security", + "auth" + ] + } + ], + "metadata": { + "generated_at": "2026-02-15T19:27:16.965822+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "requirement_count": 7, + "story_count": 9, + "usage": { + "prompt_tokens": 2309, + "completion_tokens": 2288, + "total_tokens": 4597 + } + } +} \ No newline at end of file diff --git a/outputs/sample_prd_06_file_upload_requirements.json b/outputs/sample_prd_06_file_upload_requirements.json new file mode 100644 index 0000000..782e3a3 --- /dev/null +++ b/outputs/sample_prd_06_file_upload_requirements.json @@ -0,0 +1,134 @@ +{ + "requirements": [ + { + "id": "REQ-001", + "title": "Drag-and-Drop Upload Zone", + "description": "Create a modern upload interface with a large drop zone, visual feedback, and support for multiple file selection.", + "acceptance_criteria": [ + "Large drop zone with dashed border is present", + "Visual feedback on drag hover (border color change, background highlight)", + "Click to open file picker alternative is available", + "Supports selecting multiple files", + "Displays file type icons based on extension" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-002", + "title": "File Validation", + "description": "Validate files before upload, including size, extension, MIME type, and malware scanning.", + "acceptance_criteria": [ + "File size checked against limit (configurable per file type)", + "File extension validated against allowed list", + "MIME type matches extension", + "Files scanned for malware using ClamAV", + "Clear error message shown for rejected files" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-003", + "title": "Chunked Upload", + "description": "Implement chunked upload for large files with support for resuming on connection failure.", + "acceptance_criteria": [ + "Files split into 5MB chunks", + "Chunks uploaded in parallel (max 3 concurrent)", + "Supports resume on connection failure", + "Partial uploads stored for 24 hours", + "Per-chunk progress shown" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-004", + "title": "Progress Tracking", + "description": "Display upload progress with overall and individual file progress bars, speed indicator, and cancel options.", + "acceptance_criteria": [ + "Overall progress bar for batch", + "Individual progress per file", + "Upload speed indicator (MB/s)", + "Estimated time remaining", + "Cancel button per file and for entire batch" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-005", + "title": "Post-Upload Processing", + "description": "Process files after upload, including thumbnail generation, metadata extraction, and storage in CDN.", + "acceptance_criteria": [ + "Thumbnails generated for images (150x150, 300x300, 600x600)", + "Metadata extracted (dimensions, duration, page count)", + "Preview generated for documents (first page as image)", + "OCR run on PDF/images if text extraction enabled", + "Files stored in CDN with geographic distribution" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-006", + "title": "Upload API", + "description": "Provide a programmatic upload API with endpoints for initiating, uploading chunks, completing, checking status, and canceling uploads.", + "acceptance_criteria": [ + "POST /api/v1/uploads/initiate endpoint available", + "PUT /api/v1/uploads/{id}/chunks/{n} endpoint available", + "POST /api/v1/uploads/{id}/complete endpoint available", + "GET /api/v1/uploads/{id}/status endpoint available", + "DELETE /api/v1/uploads/{id} endpoint available", + "All endpoints require authentication via API key or OAuth token" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-007", + "title": "Storage Integration", + "description": "Support multiple storage backends and generate signed URLs for secure downloads.", + "acceptance_criteria": [ + "Support for AWS S3 as primary storage", + "Support for Google Cloud Storage as backup", + "Support for local filesystem in development", + "Signed URLs generated with expiration" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-008", + "title": "Security Requirements", + "description": "Ensure security of file uploads with encryption, signed URLs, rate limiting, and virus scanning.", + "acceptance_criteria": [ + "Files encrypted at rest (AES-256)", + "Files encrypted in transit (TLS 1.3)", + "Signed URLs expire after 1 hour", + "Rate limit of 100 uploads per hour per user", + "All uploads virus scanned before availability" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "high" + } + ], + "summary": "Develop a robust file upload service supporting large files, multiple file types, batch uploads, and comprehensive security measures.", + "source_hash": "126eb8f5", + "_metadata": { + "analyzed_at": "2026-02-15T19:27:26.692765+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "prompt_tokens": 1405, + "completion_tokens": 1085, + "total_tokens": 2490 + } +} \ No newline at end of file diff --git a/outputs/sample_prd_06_file_upload_tickets.json b/outputs/sample_prd_06_file_upload_tickets.json new file mode 100644 index 0000000..948e18d --- /dev/null +++ b/outputs/sample_prd_06_file_upload_tickets.json @@ -0,0 +1,397 @@ +{ + "epics": [ + { + "title": "File Upload Interface", + "description": "Develop a user-friendly drag-and-drop upload interface with file validation and progress tracking.", + "stories": [ + { + "title": "Implement Drag-and-Drop Upload Zone", + "description": "Create a large drop zone with visual feedback for file uploads.", + "acceptance_criteria": [ + "Large drop zone with dashed border is present", + "Visual feedback on drag hover (border color change, background highlight)", + "Click to open file picker alternative is available", + "Supports selecting multiple files", + "Displays file type icons based on extension" + ], + "size": "M", + "priority": "medium", + "labels": [ + "frontend", + "ui" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Enhance user experience by providing an intuitive file upload interface.", + "exploration_paths": [ + "drag-and-drop", + "file input", + "UI feedback" + ], + "exploration_hints": [ + "src/components/upload/" + ], + "known_patterns": [ + "Use existing UI library for drag-and-drop" + ], + "verification_tests": [ + "test_drag_and_drop_zone" + ], + "self_check": [ + "Does the interface support all required file types?", + "Is the drag-and-drop area responsive on different devices?" + ] + } + }, + { + "title": "Implement File Validation", + "description": "Validate files before upload for size, extension, MIME type, and malware.", + "acceptance_criteria": [ + "File size checked against limit (configurable per file type)", + "File extension validated against allowed list", + "MIME type matches extension", + "Files scanned for malware using ClamAV", + "Clear error message shown for rejected files" + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "validation", + "security" + ], + "requirement_ids": [ + "REQ-002" + ], + "agent_context": { + "goal": "Ensure only valid and safe files are uploaded to the system.", + "exploration_paths": [ + "file validation", + "malware scanning", + "MIME type checking" + ], + "exploration_hints": [ + "src/utils/validation/", + "src/services/malware/" + ], + "known_patterns": [ + "Use ClamAV for malware scanning" + ], + "verification_tests": [ + "test_file_validation" + ], + "self_check": [ + "Are all file types correctly validated?", + "Does the malware scanning process introduce significant delays?" + ] + } + }, + { + "title": "Develop Progress Tracking UI", + "description": "Display upload progress with overall and individual file progress bars.", + "acceptance_criteria": [ + "Overall progress bar for batch", + "Individual progress per file", + "Upload speed indicator (MB/s)", + "Estimated time remaining", + "Cancel button per file and for entire batch" + ], + "size": "M", + "priority": "medium", + "labels": [ + "frontend", + "ui" + ], + "requirement_ids": [ + "REQ-004" + ], + "agent_context": { + "goal": "Provide users with real-time feedback on their upload progress.", + "exploration_paths": [ + "progress bars", + "upload speed", + "UI components" + ], + "exploration_hints": [ + "src/components/progress/" + ], + "known_patterns": [ + "Use existing progress bar components" + ], + "verification_tests": [ + "test_progress_tracking_ui" + ], + "self_check": [ + "Is the progress bar accurate and responsive?", + "Can users easily cancel uploads?" + ] + } + } + ], + "labels": [ + "frontend", + "ui", + "validation" + ] + }, + { + "title": "Advanced File Upload Mechanisms", + "description": "Implement chunked upload and post-upload processing for large files.", + "stories": [ + { + "title": "Implement Chunked Upload", + "description": "Enable chunked upload for large files with resume support.", + "acceptance_criteria": [ + "Files split into 5MB chunks", + "Chunks uploaded in parallel (max 3 concurrent)", + "Supports resume on connection failure", + "Partial uploads stored for 24 hours", + "Per-chunk progress shown" + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "upload", + "performance" + ], + "requirement_ids": [ + "REQ-003" + ], + "agent_context": { + "goal": "Allow large files to be uploaded efficiently and reliably.", + "exploration_paths": [ + "chunked upload", + "file splitting", + "resume upload" + ], + "exploration_hints": [ + "src/services/upload/" + ], + "known_patterns": [ + "Use existing libraries for chunked uploads" + ], + "verification_tests": [ + "test_chunked_upload" + ], + "self_check": [ + "Does the system handle network interruptions gracefully?", + "Are partial uploads managed correctly?" + ] + } + }, + { + "title": "Implement Post-Upload Processing", + "description": "Process files after upload, including thumbnail generation and metadata extraction.", + "acceptance_criteria": [ + "Thumbnails generated for images (150x150, 300x300, 600x600)", + "Metadata extracted (dimensions, duration, page count)", + "Preview generated for documents (first page as image)", + "OCR run on PDF/images if text extraction enabled", + "Files stored in CDN with geographic distribution" + ], + "size": "L", + "priority": "medium", + "labels": [ + "backend", + "processing", + "cdn" + ], + "requirement_ids": [ + "REQ-005" + ], + "agent_context": { + "goal": "Enhance file usability and accessibility post-upload.", + "exploration_paths": [ + "thumbnail generation", + "metadata extraction", + "CDN storage" + ], + "exploration_hints": [ + "src/services/processing/", + "src/services/cdn/" + ], + "known_patterns": [ + "Use existing CDN integration" + ], + "verification_tests": [ + "test_post_upload_processing" + ], + "self_check": [ + "Are thumbnails generated for all image types?", + "Is metadata extraction accurate and comprehensive?" + ] + } + } + ], + "labels": [ + "backend", + "upload", + "processing" + ] + }, + { + "title": "Upload API and Security", + "description": "Develop a secure API for file uploads with comprehensive security measures.", + "stories": [ + { + "title": "Develop Upload API", + "description": "Create endpoints for initiating, uploading chunks, completing, and managing uploads.", + "acceptance_criteria": [ + "POST /api/v1/uploads/initiate endpoint available", + "PUT /api/v1/uploads/{id}/chunks/{n} endpoint available", + "POST /api/v1/uploads/{id}/complete endpoint available", + "GET /api/v1/uploads/{id}/status endpoint available", + "DELETE /api/v1/uploads/{id} endpoint available", + "All endpoints require authentication via API key or OAuth token" + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "api", + "auth" + ], + "requirement_ids": [ + "REQ-006" + ], + "agent_context": { + "goal": "Provide a robust API for programmatic file uploads.", + "exploration_paths": [ + "REST API", + "authentication", + "file upload" + ], + "exploration_hints": [ + "src/api/uploads/" + ], + "known_patterns": [ + "Follow RESTful API conventions" + ], + "verification_tests": [ + "test_upload_api" + ], + "self_check": [ + "Are all endpoints secure and authenticated?", + "Does the API handle large file uploads efficiently?" + ] + } + }, + { + "title": "Implement Security Measures for Uploads", + "description": "Ensure security of file uploads with encryption, signed URLs, and rate limiting.", + "acceptance_criteria": [ + "Files encrypted at rest (AES-256)", + "Files encrypted in transit (TLS 1.3)", + "Signed URLs expire after 1 hour", + "Rate limit of 100 uploads per hour per user", + "All uploads virus scanned before availability" + ], + "size": "L", + "priority": "high", + "labels": [ + "security", + "encryption", + "backend" + ], + "requirement_ids": [ + "REQ-008" + ], + "agent_context": { + "goal": "Protect the system and users from malicious file uploads.", + "exploration_paths": [ + "encryption", + "rate limiting", + "virus scanning" + ], + "exploration_hints": [ + "src/security/" + ], + "known_patterns": [ + "Use AES-256 for encryption", + "Implement TLS 1.3" + ], + "verification_tests": [ + "test_upload_security" + ], + "self_check": [ + "Are encryption and decryption processes efficient?", + "Is the rate limiting correctly enforced?" + ] + } + } + ], + "labels": [ + "api", + "security", + "backend" + ] + }, + { + "title": "Storage and Integration", + "description": "Integrate with multiple storage backends and provide secure download links.", + "stories": [ + { + "title": "Integrate with Storage Backends", + "description": "Support multiple storage backends and generate signed URLs for secure downloads.", + "acceptance_criteria": [ + "Support for AWS S3 as primary storage", + "Support for Google Cloud Storage as backup", + "Support for local filesystem in development", + "Signed URLs generated with expiration" + ], + "size": "M", + "priority": "medium", + "labels": [ + "backend", + "storage", + "integration" + ], + "requirement_ids": [ + "REQ-007" + ], + "agent_context": { + "goal": "Ensure reliable and secure storage of uploaded files.", + "exploration_paths": [ + "AWS S3", + "Google Cloud Storage", + "signed URLs" + ], + "exploration_hints": [ + "src/storage/" + ], + "known_patterns": [ + "Use AWS SDK for S3 integration" + ], + "verification_tests": [ + "test_storage_integration" + ], + "self_check": [ + "Are signed URLs generated securely and correctly?", + "Is the integration with storage backends seamless?" + ] + } + } + ], + "labels": [ + "storage", + "integration", + "backend" + ] + } + ], + "metadata": { + "generated_at": "2026-02-15T19:27:56.286068+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "requirement_count": 8, + "story_count": 8, + "usage": { + "prompt_tokens": 2426, + "completion_tokens": 2242, + "total_tokens": 4668 + } + } +} \ No newline at end of file diff --git a/outputs/sample_prd_07_search_requirements.json b/outputs/sample_prd_07_search_requirements.json new file mode 100644 index 0000000..4667a10 --- /dev/null +++ b/outputs/sample_prd_07_search_requirements.json @@ -0,0 +1,150 @@ +{ + "requirements": [ + { + "id": "REQ-001", + "title": "Global Search Bar", + "description": "Add a global search bar to the header with a prominent search icon that expands to an input field.", + "acceptance_criteria": [ + "Search bar is present in the header", + "Search icon expands to input field", + "Keyboard shortcut Cmd/Ctrl + K focuses the search bar", + "Placeholder text reads 'Search projects, tasks, files...'", + "Recent searches dropdown shows last 5 searches", + "Clear button appears when text is entered" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-002", + "title": "Instant Search Results", + "description": "Display search results instantly as the user types.", + "acceptance_criteria": [ + "Search begins after 2 characters are entered", + "Input is debounced by 200ms", + "Loading indicator is shown during search", + "Results are displayed in categorized sections", + "Matching text is highlighted in results" + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [ + { + "category": "vague_quantifier", + "issue": "'Results should appear quickly' is not defined", + "severity": "warning", + "suggested_action": "Specify a target time for results to appear, e.g., 'within 500ms'" + } + ], + "priority": "high" + }, + { + "id": "REQ-003", + "title": "Search Scope", + "description": "Search across all content types including projects, tasks, files, people, and comments.", + "acceptance_criteria": [ + "Search includes projects by name and description", + "Search includes tasks by title, description, and comments", + "Search includes files by filename and extracted text content", + "Search includes people by name, email, and role", + "Search includes comments by text and author", + "Show count per category in results" + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-004", + "title": "Filters and Facets", + "description": "Allow users to refine search results using filters and facets.", + "acceptance_criteria": [ + "Filter by content type with checkboxes", + "Filter by date range (created, modified)", + "Filter by owner/creator", + "Filter by status for tasks (open, closed)", + "Filter by tags/labels", + "Filters update results instantly" + ], + "dependencies": [ + "REQ-001", + "REQ-003" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-005", + "title": "Advanced Search Syntax", + "description": "Support advanced search operators for power users.", + "acceptance_criteria": [ + "Support for 'exact phrase' matches", + "Support for type filtering with 'type:task'", + "Support for owner filtering with 'owner:@username'", + "Support for date filters with 'created:>2024-01-01'", + "Support for status filters with 'is:unread'", + "Support for excluding terms with '-keyword'", + "Support for Boolean OR operations" + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-006", + "title": "Search Results Page", + "description": "Provide a full search results page with additional features.", + "acceptance_criteria": [ + "Full results page available at /search", + "All filters visible in sidebar", + "Results are paginated with 20 per page", + "Sort options include relevance, date, and name", + "Ability to save search as filter/view", + "Export results to CSV" + ], + "dependencies": [ + "REQ-001", + "REQ-004" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-007", + "title": "Search Analytics", + "description": "Track and analyze search behavior to improve the feature.", + "acceptance_criteria": [ + "Log all search queries in an anonymized manner", + "Track click-through rate per result", + "Identify zero-result queries", + "Surface trending searches" + ], + "dependencies": [], + "ambiguity_flags": [ + { + "category": "security_concern", + "issue": "Anonymization of search queries is not detailed", + "severity": "critical", + "suggested_action": "Specify the method of anonymization to ensure user privacy" + } + ], + "priority": "low" + } + ], + "summary": "Implement a comprehensive global search feature to enhance user ability to find content quickly and efficiently across the platform.", + "source_hash": "f9776e79", + "_metadata": { + "analyzed_at": "2026-02-15T19:28:06.911157+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "prompt_tokens": 1276, + "completion_tokens": 1086, + "total_tokens": 2362 + } +} \ No newline at end of file diff --git a/outputs/sample_prd_07_search_tickets.json b/outputs/sample_prd_07_search_tickets.json new file mode 100644 index 0000000..410b9bf --- /dev/null +++ b/outputs/sample_prd_07_search_tickets.json @@ -0,0 +1,370 @@ +{ + "epics": [ + { + "title": "Global Search Bar", + "description": "Implement a global search bar in the header to enhance user navigation and content discovery.", + "stories": [ + { + "title": "Add global search bar to header", + "description": "Implement a search bar in the header with a prominent search icon that expands to an input field.", + "acceptance_criteria": [ + "Search bar is present in the header", + "Search icon expands to input field", + "Keyboard shortcut Cmd/Ctrl + K focuses the search bar", + "Placeholder text reads 'Search projects, tasks, files...'", + "Recent searches dropdown shows last 5 searches", + "Clear button appears when text is entered" + ], + "size": "M", + "priority": "high", + "labels": [ + "frontend", + "ui", + "accessibility" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Enhance user navigation by providing a quick access search feature.", + "exploration_paths": [ + "search bar UI", + "header components", + "keyboard shortcuts" + ], + "exploration_hints": [ + "src/components/header/", + "src/components/search/" + ], + "known_patterns": [ + "Use existing UI components", + "Follow accessibility guidelines" + ], + "verification_tests": [ + "test_search_bar_visibility", + "test_keyboard_shortcut" + ], + "self_check": [ + "Is the search bar accessible for screen readers?", + "Does the keyboard shortcut work on all supported browsers?" + ] + } + } + ], + "labels": [ + "search", + "ui" + ] + }, + { + "title": "Search Functionality", + "description": "Implement search functionality to provide instant and categorized search results.", + "stories": [ + { + "title": "Implement instant search results", + "description": "Display search results instantly as the user types, with categorized sections and highlighted matches.", + "acceptance_criteria": [ + "Search begins after 2 characters are entered", + "Input is debounced by 200ms", + "Loading indicator is shown during search", + "Results are displayed in categorized sections", + "Matching text is highlighted in results" + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "frontend", + "search" + ], + "requirement_ids": [ + "REQ-002" + ], + "agent_context": { + "goal": "Provide users with real-time search results to enhance efficiency.", + "exploration_paths": [ + "real-time search", + "debouncing", + "categorization" + ], + "exploration_hints": [ + "src/services/search/", + "src/components/results/" + ], + "known_patterns": [ + "Use existing search service", + "Implement debouncing logic" + ], + "verification_tests": [ + "test_instant_search_results", + "test_result_categorization" + ], + "self_check": [ + "Are results appearing within the expected time frame?", + "Is the loading indicator visible during search?" + ] + } + }, + { + "title": "Implement search scope across content types", + "description": "Ensure the search functionality covers all specified content types with accurate categorization.", + "acceptance_criteria": [ + "Search includes projects by name and description", + "Search includes tasks by title, description, and comments", + "Search includes files by filename and extracted text content", + "Search includes people by name, email, and role", + "Search includes comments by text and author", + "Show count per category in results" + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "search" + ], + "requirement_ids": [ + "REQ-003" + ], + "agent_context": { + "goal": "Enable comprehensive search across various content types for better user experience.", + "exploration_paths": [ + "content indexing", + "search categorization" + ], + "exploration_hints": [ + "src/services/search/", + "src/models/" + ], + "known_patterns": [ + "Use existing indexing mechanisms", + "Follow data categorization standards" + ], + "verification_tests": [ + "test_search_scope", + "test_category_counts" + ], + "self_check": [ + "Are all content types being indexed correctly?", + "Is the categorization accurate and intuitive?" + ] + } + } + ], + "labels": [ + "search", + "functionality" + ] + }, + { + "title": "Search Enhancements", + "description": "Enhance search capabilities with filters, advanced syntax, and a detailed results page.", + "stories": [ + { + "title": "Implement filters and facets for search results", + "description": "Allow users to refine search results using various filters and facets.", + "acceptance_criteria": [ + "Filter by content type with checkboxes", + "Filter by date range (created, modified)", + "Filter by owner/creator", + "Filter by status for tasks (open, closed)", + "Filter by tags/labels", + "Filters update results instantly" + ], + "size": "L", + "priority": "medium", + "labels": [ + "frontend", + "backend", + "search" + ], + "requirement_ids": [ + "REQ-004" + ], + "agent_context": { + "goal": "Provide users with the ability to refine search results for more precise information retrieval.", + "exploration_paths": [ + "search filters", + "faceted search" + ], + "exploration_hints": [ + "src/components/filters/", + "src/services/search/" + ], + "known_patterns": [ + "Use existing filter components", + "Implement instant update logic" + ], + "verification_tests": [ + "test_filters_functionality", + "test_facets_display" + ], + "self_check": [ + "Do filters update results without delay?", + "Are all filter options intuitive and user-friendly?" + ] + } + }, + { + "title": "Support advanced search syntax", + "description": "Implement support for advanced search operators for power users.", + "acceptance_criteria": [ + "Support for 'exact phrase' matches", + "Support for type filtering with 'type:task'", + "Support for owner filtering with 'owner:@username'", + "Support for date filters with 'created:>2024-01-01'", + "Support for status filters with 'is:unread'", + "Support for excluding terms with '-keyword'", + "Support for Boolean OR operations" + ], + "size": "L", + "priority": "medium", + "labels": [ + "backend", + "search" + ], + "requirement_ids": [ + "REQ-005" + ], + "agent_context": { + "goal": "Empower advanced users with flexible search options to tailor their queries.", + "exploration_paths": [ + "advanced search syntax", + "query parsing" + ], + "exploration_hints": [ + "src/services/search/", + "src/parsers/" + ], + "known_patterns": [ + "Use existing query parsing libraries", + "Follow syntax standards" + ], + "verification_tests": [ + "test_advanced_search_syntax", + "test_query_parsing" + ], + "self_check": [ + "Are all advanced operators functioning as expected?", + "Is the syntax intuitive for power users?" + ] + } + }, + { + "title": "Develop search results page", + "description": "Create a comprehensive search results page with pagination, sorting, and export options.", + "acceptance_criteria": [ + "Full results page available at /search", + "All filters visible in sidebar", + "Results are paginated with 20 per page", + "Sort options include relevance, date, and name", + "Ability to save search as filter/view", + "Export results to CSV" + ], + "size": "L", + "priority": "medium", + "labels": [ + "frontend", + "ui", + "search" + ], + "requirement_ids": [ + "REQ-006" + ], + "agent_context": { + "goal": "Provide a detailed and user-friendly interface for viewing and managing search results.", + "exploration_paths": [ + "search results UI", + "pagination", + "export functionality" + ], + "exploration_hints": [ + "src/pages/search/", + "src/components/pagination/" + ], + "known_patterns": [ + "Use existing pagination components", + "Implement export logic" + ], + "verification_tests": [ + "test_search_results_page", + "test_export_functionality" + ], + "self_check": [ + "Is the pagination smooth and intuitive?", + "Are all sorting options functioning correctly?" + ] + } + } + ], + "labels": [ + "search", + "enhancements" + ] + }, + { + "title": "Search Analytics", + "description": "Implement analytics to track and improve search feature usage and performance.", + "stories": [ + { + "title": "Implement search analytics tracking", + "description": "Track and analyze search behavior to improve the feature.", + "acceptance_criteria": [ + "Log all search queries in an anonymized manner", + "Track click-through rate per result", + "Identify zero-result queries", + "Surface trending searches" + ], + "size": "M", + "priority": "low", + "labels": [ + "analytics", + "backend", + "search" + ], + "requirement_ids": [ + "REQ-007" + ], + "agent_context": { + "goal": "Gather insights on search usage to enhance feature effectiveness and user satisfaction.", + "exploration_paths": [ + "search analytics", + "user behavior tracking" + ], + "exploration_hints": [ + "src/analytics/", + "src/services/logging/" + ], + "known_patterns": [ + "Use existing analytics frameworks", + "Ensure data privacy" + ], + "verification_tests": [ + "test_search_analytics_logging", + "test_anonymization" + ], + "self_check": [ + "Is the anonymization method compliant with privacy standards?", + "Are all tracked metrics accurate and useful?" + ] + } + } + ], + "labels": [ + "analytics", + "search" + ] + } + ], + "metadata": { + "generated_at": "2026-02-15T19:28:34.179981+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "requirement_count": 7, + "story_count": 7, + "usage": { + "prompt_tokens": 2422, + "completion_tokens": 2114, + "total_tokens": 4536 + } + } +} \ No newline at end of file diff --git a/outputs/sample_prd_08_payments_requirements.json b/outputs/sample_prd_08_payments_requirements.json new file mode 100644 index 0000000..1e5e76c --- /dev/null +++ b/outputs/sample_prd_08_payments_requirements.json @@ -0,0 +1,154 @@ +{ + "requirements": [ + { + "id": "REQ-001", + "title": "Support for Multiple Pricing Plans", + "description": "Implement three subscription tiers: Starter, Professional, and Enterprise, each with distinct features and pricing.", + "acceptance_criteria": [ + "Starter plan includes 5 team members, 10GB storage, email support, and basic features.", + "Professional plan includes 25 team members, 100GB storage, priority support, advanced features, and API access.", + "Enterprise plan includes unlimited team members, unlimited storage, dedicated support, all features, SSO/SAML, and custom contracts.", + "All plans available as monthly or annual with a 20% discount for annual billing." + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-002", + "title": "Plan Selection UI", + "description": "Create a pricing page at /pricing with features for comparing plans and selecting billing cycles.", + "acceptance_criteria": [ + "Display side-by-side plan comparison.", + "Include a feature matrix with checkmarks.", + "Provide a toggle for monthly/annual billing.", + "Indicate 'Current plan' for logged-in users.", + "Include 'Contact sales' option for Enterprise plan." + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-003", + "title": "Subscription Checkout Flow", + "description": "Implement a checkout flow for selecting plans, entering payment details, and confirming subscriptions.", + "acceptance_criteria": [ + "Allow users to select a plan and billing cycle.", + "Enable payment method entry via Stripe Elements.", + "Support coupon code application.", + "Display order summary with taxes.", + "Include a terms of service checkbox.", + "Provide a 'Subscribe' button with loading state.", + "Show a confirmation page with receipt." + ], + "dependencies": [ + "REQ-001", + "REQ-002" + ], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-004", + "title": "Self-Service Subscription Management", + "description": "Develop a self-service portal at /settings/billing for managing subscriptions.", + "acceptance_criteria": [ + "Users can view current plan and next billing date.", + "Display usage meters for team members and storage.", + "Show payment method on file (last 4 digits).", + "Provide billing history with downloadable invoices.", + "Allow users to update payment method.", + "Enable plan changes (upgrade/downgrade).", + "Allow subscription cancellation." + ], + "dependencies": [ + "REQ-001", + "REQ-003" + ], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-005", + "title": "Handling Mid-Cycle Plan Changes", + "description": "Implement logic for handling upgrades, downgrades, and cancellations mid-cycle.", + "acceptance_criteria": [ + "Upgrades provide immediate access with prorated charge.", + "Downgrades take effect at the next billing cycle.", + "Cancellations allow access until the current period ends.", + "Show confirmation with price impact before changes." + ], + "dependencies": [ + "REQ-004" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-006", + "title": "Payment Processing Integration with Stripe", + "description": "Integrate payment processing using Stripe, ensuring security and compliance.", + "acceptance_criteria": [ + "Tokenize card data without storing raw numbers.", + "Support 3D Secure for SCA compliance.", + "Handle declined cards gracefully.", + "Retry failed payments on days 1, 3, and 7.", + "Send dunning emails for payment issues.", + "Pause account after 14 days of payment failure." + ], + "dependencies": [ + "REQ-003" + ], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-007", + "title": "Automated Invoicing", + "description": "Generate and send invoices automatically for each successful charge.", + "acceptance_criteria": [ + "Generate PDF invoice on each successful charge.", + "Include company details, line items, and taxes.", + "Use sequential invoice numbers.", + "Email invoice to billing contact.", + "Support VAT/GST based on location." + ], + "dependencies": [ + "REQ-006" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-008", + "title": "Usage-Based Add-ons", + "description": "Support metered billing for additional usage beyond plan limits.", + "acceptance_criteria": [ + "Charge $10/user/month for additional team members.", + "Charge $5/10GB/month for additional storage.", + "Charge $0.001/call for API calls beyond limit.", + "Report usage to Stripe daily.", + "Show projected overage on dashboard." + ], + "dependencies": [ + "REQ-001", + "REQ-006" + ], + "ambiguity_flags": [], + "priority": "medium" + } + ], + "summary": "Develop a subscription billing system with multiple pricing plans, self-service management, and automated invoicing, integrated with Stripe for secure payment processing.", + "source_hash": "86d46bbe", + "_metadata": { + "analyzed_at": "2026-02-15T19:28:49.534383+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "prompt_tokens": 1421, + "completion_tokens": 1180, + "total_tokens": 2601 + } +} \ No newline at end of file diff --git a/outputs/sample_prd_08_payments_tickets.json b/outputs/sample_prd_08_payments_tickets.json new file mode 100644 index 0000000..11f6f81 --- /dev/null +++ b/outputs/sample_prd_08_payments_tickets.json @@ -0,0 +1,509 @@ +{ + "epics": [ + { + "title": "Subscription Pricing Plans", + "description": "Implement multiple subscription tiers with distinct features and pricing options.", + "stories": [ + { + "title": "Implement Starter Plan", + "description": "Develop the Starter plan with specified features and pricing.", + "acceptance_criteria": [ + "Starter plan includes 5 team members, 10GB storage, email support, and basic features." + ], + "size": "M", + "priority": "high", + "labels": [ + "backend", + "pricing" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Provide an entry-level subscription option for small teams.", + "exploration_paths": [ + "subscription plans", + "pricing tiers" + ], + "exploration_hints": [ + "src/plans/", + "src/pricing/" + ], + "known_patterns": [ + "Follow existing plan structure" + ], + "verification_tests": [ + "test_starter_plan_features" + ], + "self_check": [ + "Are all Starter plan features implemented?", + "Is the pricing correctly applied?" + ] + } + }, + { + "title": "Implement Professional Plan", + "description": "Develop the Professional plan with specified features and pricing.", + "acceptance_criteria": [ + "Professional plan includes 25 team members, 100GB storage, priority support, advanced features, and API access." + ], + "size": "M", + "priority": "high", + "labels": [ + "backend", + "pricing" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Provide a mid-tier subscription option for growing teams.", + "exploration_paths": [ + "subscription plans", + "pricing tiers" + ], + "exploration_hints": [ + "src/plans/", + "src/pricing/" + ], + "known_patterns": [ + "Follow existing plan structure" + ], + "verification_tests": [ + "test_professional_plan_features" + ], + "self_check": [ + "Are all Professional plan features implemented?", + "Is the pricing correctly applied?" + ] + } + }, + { + "title": "Implement Enterprise Plan", + "description": "Develop the Enterprise plan with specified features and pricing.", + "acceptance_criteria": [ + "Enterprise plan includes unlimited team members, unlimited storage, dedicated support, all features, SSO/SAML, and custom contracts." + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "pricing", + "auth" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Provide a comprehensive subscription option for large organizations.", + "exploration_paths": [ + "subscription plans", + "pricing tiers", + "SSO", + "SAML" + ], + "exploration_hints": [ + "src/plans/", + "src/pricing/", + "src/auth/" + ], + "known_patterns": [ + "Follow existing plan structure", + "Implement SSO/SAML" + ], + "verification_tests": [ + "test_enterprise_plan_features" + ], + "self_check": [ + "Are all Enterprise plan features implemented?", + "Is the pricing correctly applied?", + "Is SSO/SAML integration secure?" + ] + } + }, + { + "title": "Implement Annual Billing Discount", + "description": "Apply a 20% discount for annual billing across all plans.", + "acceptance_criteria": [ + "All plans available as monthly or annual with a 20% discount for annual billing." + ], + "size": "S", + "priority": "high", + "labels": [ + "backend", + "pricing" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Encourage users to choose annual billing by offering a discount.", + "exploration_paths": [ + "billing cycles", + "discounts" + ], + "exploration_hints": [ + "src/pricing/" + ], + "known_patterns": [ + "Apply percentage-based discounts" + ], + "verification_tests": [ + "test_annual_billing_discount" + ], + "self_check": [ + "Is the discount correctly applied to all plans?", + "Does the discount reflect in the billing summary?" + ] + } + } + ], + "labels": [ + "pricing", + "billing" + ] + }, + { + "title": "Plan Selection and Checkout", + "description": "Develop UI and backend for plan selection and subscription checkout flow.", + "stories": [ + { + "title": "Create Plan Selection UI", + "description": "Develop a pricing page with features for comparing plans and selecting billing cycles.", + "acceptance_criteria": [ + "Display side-by-side plan comparison.", + "Include a feature matrix with checkmarks.", + "Provide a toggle for monthly/annual billing.", + "Indicate 'Current plan' for logged-in users.", + "Include 'Contact sales' option for Enterprise plan." + ], + "size": "M", + "priority": "medium", + "labels": [ + "frontend", + "ui", + "pricing" + ], + "requirement_ids": [ + "REQ-002" + ], + "agent_context": { + "goal": "Enable users to easily compare and select subscription plans.", + "exploration_paths": [ + "UI design", + "pricing page" + ], + "exploration_hints": [ + "src/pages/pricing/", + "src/components/" + ], + "known_patterns": [ + "Use existing UI components" + ], + "verification_tests": [ + "test_plan_selection_ui" + ], + "self_check": [ + "Is the UI responsive and accessible?", + "Does the plan comparison clearly highlight differences?" + ] + } + }, + { + "title": "Implement Subscription Checkout Flow", + "description": "Develop the checkout flow for selecting plans, entering payment details, and confirming subscriptions.", + "acceptance_criteria": [ + "Allow users to select a plan and billing cycle.", + "Enable payment method entry via Stripe Elements.", + "Support coupon code application.", + "Display order summary with taxes.", + "Include a terms of service checkbox.", + "Provide a 'Subscribe' button with loading state.", + "Show a confirmation page with receipt." + ], + "size": "L", + "priority": "high", + "labels": [ + "frontend", + "backend", + "checkout", + "stripe" + ], + "requirement_ids": [ + "REQ-003" + ], + "agent_context": { + "goal": "Facilitate a seamless and secure subscription checkout experience.", + "exploration_paths": [ + "checkout flow", + "payment integration" + ], + "exploration_hints": [ + "src/pages/checkout/", + "src/integrations/stripe/" + ], + "known_patterns": [ + "Use Stripe Elements for payment" + ], + "verification_tests": [ + "test_checkout_flow", + "test_payment_integration" + ], + "self_check": [ + "Is the payment process secure and compliant?", + "Does the checkout flow handle errors gracefully?" + ] + } + } + ], + "labels": [ + "ui", + "checkout", + "stripe" + ] + }, + { + "title": "Subscription Management and Billing", + "description": "Develop features for self-service subscription management and automated billing.", + "stories": [ + { + "title": "Develop Self-Service Subscription Management Portal", + "description": "Create a portal for users to manage their subscriptions.", + "acceptance_criteria": [ + "Users can view current plan and next billing date.", + "Display usage meters for team members and storage.", + "Show payment method on file (last 4 digits).", + "Provide billing history with downloadable invoices.", + "Allow users to update payment method.", + "Enable plan changes (upgrade/downgrade).", + "Allow subscription cancellation." + ], + "size": "L", + "priority": "high", + "labels": [ + "frontend", + "backend", + "billing" + ], + "requirement_ids": [ + "REQ-004" + ], + "agent_context": { + "goal": "Empower users to manage their subscriptions independently.", + "exploration_paths": [ + "subscription management", + "billing portal" + ], + "exploration_hints": [ + "src/pages/settings/billing/", + "src/components/" + ], + "known_patterns": [ + "Use existing billing APIs" + ], + "verification_tests": [ + "test_billing_portal" + ], + "self_check": [ + "Is the portal user-friendly and intuitive?", + "Does it securely handle user data?" + ] + } + }, + { + "title": "Implement Mid-Cycle Plan Change Handling", + "description": "Handle logic for upgrades, downgrades, and cancellations mid-cycle.", + "acceptance_criteria": [ + "Upgrades provide immediate access with prorated charge.", + "Downgrades take effect at the next billing cycle.", + "Cancellations allow access until the current period ends.", + "Show confirmation with price impact before changes." + ], + "size": "M", + "priority": "medium", + "labels": [ + "backend", + "billing" + ], + "requirement_ids": [ + "REQ-005" + ], + "agent_context": { + "goal": "Ensure smooth transitions for users changing their subscription plans.", + "exploration_paths": [ + "billing logic", + "plan changes" + ], + "exploration_hints": [ + "src/billing/" + ], + "known_patterns": [ + "Prorate charges for upgrades" + ], + "verification_tests": [ + "test_plan_change_logic" + ], + "self_check": [ + "Are charges correctly prorated?", + "Is user informed of changes and impacts?" + ] + } + }, + { + "title": "Integrate Payment Processing with Stripe", + "description": "Integrate Stripe for secure payment processing.", + "acceptance_criteria": [ + "Tokenize card data without storing raw numbers.", + "Support 3D Secure for SCA compliance.", + "Handle declined cards gracefully.", + "Retry failed payments on days 1, 3, and 7.", + "Send dunning emails for payment issues.", + "Pause account after 14 days of payment failure." + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "stripe", + "security" + ], + "requirement_ids": [ + "REQ-006" + ], + "agent_context": { + "goal": "Ensure secure and compliant payment processing.", + "exploration_paths": [ + "payment integration", + "Stripe API" + ], + "exploration_hints": [ + "src/integrations/stripe/" + ], + "known_patterns": [ + "Use Stripe's secure tokenization" + ], + "verification_tests": [ + "test_payment_processing", + "test_dunning_emails" + ], + "self_check": [ + "Is payment data handled securely?", + "Are all compliance requirements met?" + ] + } + }, + { + "title": "Automate Invoicing", + "description": "Generate and send invoices automatically for each successful charge.", + "acceptance_criteria": [ + "Generate PDF invoice on each successful charge.", + "Include company details, line items, and taxes.", + "Use sequential invoice numbers.", + "Email invoice to billing contact.", + "Support VAT/GST based on location." + ], + "size": "M", + "priority": "medium", + "labels": [ + "backend", + "billing", + "invoicing" + ], + "requirement_ids": [ + "REQ-007" + ], + "agent_context": { + "goal": "Provide automated and accurate invoicing for all charges.", + "exploration_paths": [ + "invoicing", + "PDF generation" + ], + "exploration_hints": [ + "src/billing/invoicing/" + ], + "known_patterns": [ + "Use existing PDF generation library" + ], + "verification_tests": [ + "test_invoice_generation" + ], + "self_check": [ + "Are invoices generated correctly for each charge?", + "Do they include all necessary details?" + ] + } + } + ], + "labels": [ + "billing", + "management", + "stripe" + ] + }, + { + "title": "Usage-Based Billing and Add-ons", + "description": "Implement metered billing for additional usage beyond plan limits.", + "stories": [ + { + "title": "Implement Usage-Based Add-ons", + "description": "Support metered billing for additional usage beyond plan limits.", + "acceptance_criteria": [ + "Charge $10/user/month for additional team members.", + "Charge $5/10GB/month for additional storage.", + "Charge $0.001/call for API calls beyond limit.", + "Report usage to Stripe daily.", + "Show projected overage on dashboard." + ], + "size": "M", + "priority": "medium", + "labels": [ + "backend", + "billing", + "usage" + ], + "requirement_ids": [ + "REQ-008" + ], + "agent_context": { + "goal": "Enable flexible billing for users exceeding their plan limits.", + "exploration_paths": [ + "metered billing", + "usage tracking" + ], + "exploration_hints": [ + "src/billing/usage/", + "src/dashboard/" + ], + "known_patterns": [ + "Use Stripe for usage reporting" + ], + "verification_tests": [ + "test_usage_billing" + ], + "self_check": [ + "Is usage tracked accurately?", + "Are additional charges applied correctly?" + ] + } + } + ], + "labels": [ + "billing", + "usage", + "stripe" + ] + } + ], + "metadata": { + "generated_at": "2026-02-15T19:29:20.779424+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "requirement_count": 8, + "story_count": 11, + "usage": { + "prompt_tokens": 2525, + "completion_tokens": 2820, + "total_tokens": 5345 + } + } +} \ No newline at end of file diff --git a/outputs/sample_prd_09_webhooks_requirements.json b/outputs/sample_prd_09_webhooks_requirements.json new file mode 100644 index 0000000..c1ed9d2 --- /dev/null +++ b/outputs/sample_prd_09_webhooks_requirements.json @@ -0,0 +1,131 @@ +{ + "requirements": [ + { + "id": "REQ-001", + "title": "Webhook Configuration UI", + "description": "Create a management interface at /settings/webhooks for managing webhooks.", + "acceptance_criteria": [ + "Users can list existing webhooks with details such as endpoint URL, events, and status.", + "Users can add, edit, and delete webhooks.", + "Users can enable or disable webhooks via a toggle.", + "Users can test webhooks by sending a sample payload." + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-002", + "title": "Webhook Setup Form", + "description": "Provide a form for adding and editing webhooks with validation.", + "acceptance_criteria": [ + "Users must enter a valid HTTPS endpoint URL.", + "Users can optionally add a description.", + "Users can select events via checkboxes grouped by category.", + "A secret key is auto-generated and can be regenerated by the user.", + "Users can toggle the webhook between active and inactive states.", + "The URL is validated for reachability before saving." + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-003", + "title": "Supported Events", + "description": "Define the events for which webhooks can be delivered.", + "acceptance_criteria": [ + "Webhooks can be delivered for project, task, user, and billing events as specified." + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-004", + "title": "Payload Format", + "description": "Standardize the payload structure for webhooks.", + "acceptance_criteria": [ + "Payloads must include id, type, created timestamp, data object, and account_id.", + "Include X-Webhook-Signature header with HMAC-SHA256 signature." + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-005", + "title": "Delivery Mechanism", + "description": "Implement a reliable delivery system for webhooks.", + "acceptance_criteria": [ + "Queue events in a message queue (SQS/RabbitMQ).", + "Deliver events within 30 seconds.", + "Timeout each attempt after 30 seconds.", + "Retry failed deliveries up to 5 times with exponential backoff.", + "Mark webhook as failing after 5 consecutive failures.", + "Alert users via email when a webhook is disabled." + ], + "dependencies": [ + "REQ-004" + ], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-006", + "title": "Delivery Logs", + "description": "Maintain logs of webhook deliveries for 30 days.", + "acceptance_criteria": [ + "Logs must include timestamp, event type, HTTP status code, response time, request/response bodies, retry count, and success/failure status." + ], + "dependencies": [ + "REQ-005" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-007", + "title": "Manual Retry", + "description": "Allow users to manually retry webhook deliveries.", + "acceptance_criteria": [ + "Users can retry failed deliveries via a 'Retry' button.", + "Users can replay successful events.", + "Bulk retry option available for a specified date range." + ], + "dependencies": [ + "REQ-006" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-008", + "title": "Rate Limiting", + "description": "Implement rate limiting to protect destination servers.", + "acceptance_criteria": [ + "Limit to 100 events/second per endpoint.", + "Queue excess events.", + "Expose rate limit headers.", + "Allow customers to configure lower limits." + ], + "dependencies": [ + "REQ-005" + ], + "ambiguity_flags": [], + "priority": "medium" + } + ], + "summary": "Develop a webhook delivery system to provide real-time HTTP callbacks for customer account events, ensuring reliable and ordered delivery with configurable management options.", + "source_hash": "4a4e394f", + "_metadata": { + "analyzed_at": "2026-02-15T19:29:38.378669+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "prompt_tokens": 1431, + "completion_tokens": 962, + "total_tokens": 2393 + } +} \ No newline at end of file diff --git a/outputs/sample_prd_09_webhooks_tickets.json b/outputs/sample_prd_09_webhooks_tickets.json new file mode 100644 index 0000000..603ce69 --- /dev/null +++ b/outputs/sample_prd_09_webhooks_tickets.json @@ -0,0 +1,393 @@ +{ + "epics": [ + { + "title": "Webhook Management Interface", + "description": "Create a user interface for managing webhooks, including listing, adding, editing, and testing webhooks.", + "stories": [ + { + "title": "Develop Webhook Configuration UI", + "description": "Create a management interface at /settings/webhooks for managing webhooks.", + "acceptance_criteria": [ + "Users can list existing webhooks with details such as endpoint URL, events, and status.", + "Users can add, edit, and delete webhooks.", + "Users can enable or disable webhooks via a toggle.", + "Users can test webhooks by sending a sample payload." + ], + "size": "L", + "priority": "high", + "labels": [ + "frontend", + "ui", + "webhooks" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Enable users to manage their webhook configurations easily.", + "exploration_paths": [ + "webhook management", + "UI design", + "frontend frameworks" + ], + "exploration_hints": [ + "src/components/webhooks/", + "src/pages/settings/" + ], + "known_patterns": [ + "Use existing UI components", + "Follow RESTful API conventions" + ], + "verification_tests": [ + "test_webhook_ui_listing", + "test_webhook_ui_crud" + ], + "self_check": [ + "Does the UI handle all CRUD operations?", + "Is the UI responsive and accessible?", + "Are webhooks correctly enabled/disabled?" + ] + } + }, + { + "title": "Implement Webhook Setup Form", + "description": "Provide a form for adding and editing webhooks with validation.", + "acceptance_criteria": [ + "Users must enter a valid HTTPS endpoint URL.", + "Users can optionally add a description.", + "Users can select events via checkboxes grouped by category.", + "A secret key is auto-generated and can be regenerated by the user.", + "Users can toggle the webhook between active and inactive states.", + "The URL is validated for reachability before saving." + ], + "size": "M", + "priority": "high", + "labels": [ + "frontend", + "form", + "validation" + ], + "requirement_ids": [ + "REQ-002" + ], + "agent_context": { + "goal": "Allow users to configure webhooks with necessary validations.", + "exploration_paths": [ + "form validation", + "webhook configuration" + ], + "exploration_hints": [ + "src/components/forms/", + "src/utils/validation/" + ], + "known_patterns": [ + "Use form validation library", + "Follow existing form patterns" + ], + "verification_tests": [ + "test_webhook_form_validation", + "test_webhook_form_submission" + ], + "self_check": [ + "Is the endpoint URL validation robust?", + "Can users regenerate the secret key securely?", + "Are event selections correctly grouped and saved?" + ] + } + } + ], + "labels": [ + "ui", + "webhooks", + "frontend" + ] + }, + { + "title": "Webhook Delivery System", + "description": "Implement a reliable system for delivering webhooks, including queuing, retry mechanisms, and logging.", + "stories": [ + { + "title": "Define Supported Events for Webhooks", + "description": "Define the events for which webhooks can be delivered.", + "acceptance_criteria": [ + "Webhooks can be delivered for project, task, user, and billing events as specified." + ], + "size": "S", + "priority": "medium", + "labels": [ + "backend", + "events" + ], + "requirement_ids": [ + "REQ-003" + ], + "agent_context": { + "goal": "Ensure webhooks are triggered for relevant events.", + "exploration_paths": [ + "event definitions", + "webhook triggers" + ], + "exploration_hints": [ + "src/events/", + "src/webhooks/" + ], + "known_patterns": [ + "Follow existing event handling patterns" + ], + "verification_tests": [ + "test_event_triggering" + ], + "self_check": [ + "Are all specified events covered?", + "Are event triggers reliable and efficient?" + ] + } + }, + { + "title": "Standardize Webhook Payload Format", + "description": "Standardize the payload structure for webhooks.", + "acceptance_criteria": [ + "Payloads must include id, type, created timestamp, data object, and account_id.", + "Include X-Webhook-Signature header with HMAC-SHA256 signature." + ], + "size": "M", + "priority": "high", + "labels": [ + "backend", + "security", + "api" + ], + "requirement_ids": [ + "REQ-004" + ], + "agent_context": { + "goal": "Ensure webhook payloads are consistent and secure.", + "exploration_paths": [ + "payload structure", + "HMAC-SHA256" + ], + "exploration_hints": [ + "src/webhooks/payloads/", + "src/security/" + ], + "known_patterns": [ + "Use existing security libraries", + "Follow JSON payload conventions" + ], + "verification_tests": [ + "test_payload_format", + "test_signature_verification" + ], + "self_check": [ + "Is the payload format consistent across all events?", + "Is the signature generation secure and verifiable?" + ] + } + }, + { + "title": "Implement Webhook Delivery Mechanism", + "description": "Implement a reliable delivery system for webhooks.", + "acceptance_criteria": [ + "Queue events in a message queue (SQS/RabbitMQ).", + "Deliver events within 30 seconds.", + "Timeout each attempt after 30 seconds.", + "Retry failed deliveries up to 5 times with exponential backoff.", + "Mark webhook as failing after 5 consecutive failures.", + "Alert users via email when a webhook is disabled." + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "queue", + "retry", + "notifications" + ], + "requirement_ids": [ + "REQ-005" + ], + "agent_context": { + "goal": "Ensure reliable and timely delivery of webhooks.", + "exploration_paths": [ + "message queuing", + "retry mechanisms", + "email notifications" + ], + "exploration_hints": [ + "src/queue/", + "src/notifications/" + ], + "known_patterns": [ + "Use existing queuing libraries", + "Follow retry best practices" + ], + "verification_tests": [ + "test_delivery_timing", + "test_retry_logic" + ], + "self_check": [ + "Are delivery attempts logged and monitored?", + "Is the retry logic correctly implemented?", + "Are users notified of delivery failures?" + ] + } + } + ], + "labels": [ + "backend", + "delivery", + "webhooks" + ] + }, + { + "title": "Webhook Monitoring and Rate Limiting", + "description": "Implement monitoring for webhook deliveries and rate limiting to protect destination servers.", + "stories": [ + { + "title": "Maintain Webhook Delivery Logs", + "description": "Maintain logs of webhook deliveries for 30 days.", + "acceptance_criteria": [ + "Logs must include timestamp, event type, HTTP status code, response time, request/response bodies, retry count, and success/failure status." + ], + "size": "M", + "priority": "medium", + "labels": [ + "backend", + "logging", + "monitoring" + ], + "requirement_ids": [ + "REQ-006" + ], + "agent_context": { + "goal": "Provide visibility into webhook delivery status and performance.", + "exploration_paths": [ + "logging", + "monitoring", + "webhook analytics" + ], + "exploration_hints": [ + "src/logging/", + "src/monitoring/" + ], + "known_patterns": [ + "Use existing logging frameworks", + "Follow log retention policies" + ], + "verification_tests": [ + "test_log_format", + "test_log_retention" + ], + "self_check": [ + "Are all relevant details captured in the logs?", + "Is log retention policy correctly implemented?" + ] + } + }, + { + "title": "Implement Manual Retry for Webhooks", + "description": "Allow users to manually retry webhook deliveries.", + "acceptance_criteria": [ + "Users can retry failed deliveries via a 'Retry' button.", + "Users can replay successful events.", + "Bulk retry option available for a specified date range." + ], + "size": "M", + "priority": "medium", + "labels": [ + "frontend", + "backend", + "retry" + ], + "requirement_ids": [ + "REQ-007" + ], + "agent_context": { + "goal": "Provide users with control over webhook delivery retries.", + "exploration_paths": [ + "manual retry", + "user control", + "frontend-backend integration" + ], + "exploration_hints": [ + "src/components/retry/", + "src/api/retry/" + ], + "known_patterns": [ + "Follow existing retry patterns", + "Ensure idempotency" + ], + "verification_tests": [ + "test_manual_retry", + "test_bulk_retry" + ], + "self_check": [ + "Is the retry functionality user-friendly?", + "Are retries correctly logged and monitored?" + ] + } + }, + { + "title": "Implement Rate Limiting for Webhooks", + "description": "Implement rate limiting to protect destination servers.", + "acceptance_criteria": [ + "Limit to 100 events/second per endpoint.", + "Queue excess events.", + "Expose rate limit headers.", + "Allow customers to configure lower limits." + ], + "size": "L", + "priority": "medium", + "labels": [ + "backend", + "rate limiting", + "performance" + ], + "requirement_ids": [ + "REQ-008" + ], + "agent_context": { + "goal": "Prevent overloading destination servers with webhook requests.", + "exploration_paths": [ + "rate limiting", + "performance optimization" + ], + "exploration_hints": [ + "src/rate_limiting/", + "src/configuration/" + ], + "known_patterns": [ + "Use existing rate limiting libraries", + "Follow API rate limiting standards" + ], + "verification_tests": [ + "test_rate_limiting", + "test_queueing_excess" + ], + "self_check": [ + "Are rate limits configurable by users?", + "Is rate limiting effective without dropping events?" + ] + } + } + ], + "labels": [ + "monitoring", + "rate limiting", + "webhooks" + ] + } + ], + "metadata": { + "generated_at": "2026-02-15T19:30:01.053037+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "requirement_count": 8, + "story_count": 8, + "usage": { + "prompt_tokens": 2324, + "completion_tokens": 2221, + "total_tokens": 4545 + } + } +} \ No newline at end of file diff --git a/outputs/sample_prd_10_mobile_push_requirements.json b/outputs/sample_prd_10_mobile_push_requirements.json new file mode 100644 index 0000000..f8e9a9e --- /dev/null +++ b/outputs/sample_prd_10_mobile_push_requirements.json @@ -0,0 +1,151 @@ +{ + "requirements": [ + { + "id": "REQ-001", + "title": "Push Notification Opt-in", + "description": "Request user permission for push notifications with a value proposition and track opt-in rates.", + "acceptance_criteria": [ + "Display value proposition before system prompt", + "Explain notification types to users", + "Provide 'Enable Notifications' and 'Maybe Later' buttons", + "Track opt-in rate for analytics", + "Do not re-prompt users who declined" + ], + "dependencies": [], + "ambiguity_flags": [ + { + "category": "missing_acceptance_criteria", + "issue": "No specific target for opt-in rate provided", + "severity": "warning", + "suggested_action": "Define a target opt-in rate, e.g., 'Push opt-in rate > 60%'" + } + ], + "priority": "high" + }, + { + "id": "REQ-002", + "title": "Device Registration", + "description": "Register devices for push notifications and manage device tokens.", + "acceptance_criteria": [ + "Store device token on successful opt-in", + "Associate token with user account", + "Support multiple devices per user", + "Update token when app reports changes", + "Remove stale tokens after 90 days of no delivery" + ], + "dependencies": [ + "REQ-001" + ], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-003", + "title": "Notification Types", + "description": "Support various categories of push notifications including immediate, batched, and transactional types.", + "acceptance_criteria": [ + "Support immediate notifications for direct messages, @mentions, task assignments, and due date reminders", + "Support batched notifications for activity summaries, weekly digest, and new features announcement", + "Support transactional notifications for password reset, login from new device, and payment confirmation" + ], + "dependencies": [], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-004", + "title": "Notification Preferences", + "description": "Allow users to control their notification settings.", + "acceptance_criteria": [ + "Provide a master toggle for all push notifications", + "Provide per-category toggles", + "Allow setting quiet hours and weekend quiet mode", + "Sync preferences across devices" + ], + "dependencies": [ + "REQ-003" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-005", + "title": "Rich Notifications", + "description": "Enhance notifications with rich content and interaction options.", + "acceptance_criteria": [ + "Include user avatar for messages", + "Show action buttons like Reply, Mark Done, Dismiss", + "Support notification grouping/threading", + "Provide deep links to relevant app screens", + "Support expandable content for long messages" + ], + "dependencies": [ + "REQ-003" + ], + "ambiguity_flags": [], + "priority": "medium" + }, + { + "id": "REQ-006", + "title": "Notification Delivery", + "description": "Ensure reliable delivery of notifications with appropriate infrastructure.", + "acceptance_criteria": [ + "Queue notifications through background workers", + "Handle platform-specific payload formats", + "Respect device preferences such as DND mode", + "Track delivery status", + "Handle bounced/invalid tokens" + ], + "dependencies": [ + "REQ-002" + ], + "ambiguity_flags": [], + "priority": "high" + }, + { + "id": "REQ-007", + "title": "A/B Testing", + "description": "Test the effectiveness of notifications through A/B testing.", + "acceptance_criteria": [ + "Vary message content", + "Test different send times", + "Measure open rates per variant", + "Automatically select the winning variant" + ], + "dependencies": [ + "REQ-006" + ], + "ambiguity_flags": [], + "priority": "low" + }, + { + "id": "REQ-008", + "title": "Analytics Dashboard", + "description": "Track and display push notification metrics.", + "acceptance_criteria": [ + "Track opt-in rate", + "Track delivery rate", + "Track open rate by notification type", + "Track unsubscribe rate", + "Track time-to-open distribution", + "Provide device/OS breakdown" + ], + "dependencies": [ + "REQ-001", + "REQ-006" + ], + "ambiguity_flags": [], + "priority": "medium" + } + ], + "summary": "Implement push notification support for iOS and Android apps to enhance user engagement and provide timely updates.", + "source_hash": "424a792f", + "_metadata": { + "analyzed_at": "2026-02-15T19:30:12.510381+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "prompt_tokens": 1339, + "completion_tokens": 1025, + "total_tokens": 2364 + } +} \ No newline at end of file diff --git a/outputs/sample_prd_10_mobile_push_tickets.json b/outputs/sample_prd_10_mobile_push_tickets.json new file mode 100644 index 0000000..717b4d2 --- /dev/null +++ b/outputs/sample_prd_10_mobile_push_tickets.json @@ -0,0 +1,420 @@ +{ + "epics": [ + { + "title": "Push Notification Opt-in and Device Registration", + "description": "Implement user opt-in for push notifications and manage device registration.", + "stories": [ + { + "title": "Implement Push Notification Opt-in UI", + "description": "Create UI to request user permission for push notifications with a value proposition.", + "acceptance_criteria": [ + "Display value proposition before system prompt", + "Explain notification types to users", + "Provide 'Enable Notifications' and 'Maybe Later' buttons" + ], + "size": "M", + "priority": "high", + "labels": [ + "frontend", + "ui", + "notifications" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Increase user engagement by encouraging opt-in for push notifications.", + "exploration_paths": [ + "push notification UI", + "user engagement" + ], + "exploration_hints": [ + "src/components/notifications/", + "src/pages/" + ], + "known_patterns": [ + "Follow existing modal patterns" + ], + "verification_tests": [ + "test_opt_in_ui_display" + ], + "self_check": [ + "Is the value proposition clear and compelling?", + "Does the UI adhere to accessibility standards?" + ] + } + }, + { + "title": "Track Push Notification Opt-in Rates", + "description": "Implement tracking for user opt-in rates for push notifications.", + "acceptance_criteria": [ + "Track opt-in rate for analytics", + "Do not re-prompt users who declined" + ], + "size": "M", + "priority": "high", + "labels": [ + "backend", + "analytics", + "notifications" + ], + "requirement_ids": [ + "REQ-001" + ], + "agent_context": { + "goal": "Measure the effectiveness of the opt-in process to improve user engagement strategies.", + "exploration_paths": [ + "analytics", + "user tracking" + ], + "exploration_hints": [ + "src/analytics/", + "src/notifications/" + ], + "known_patterns": [ + "Use existing analytics service" + ], + "verification_tests": [ + "test_opt_in_tracking" + ], + "self_check": [ + "Are opt-in rates accurately recorded?", + "Is user privacy respected in tracking?" + ] + } + }, + { + "title": "Device Registration for Push Notifications", + "description": "Register devices for push notifications and manage device tokens.", + "acceptance_criteria": [ + "Store device token on successful opt-in", + "Associate token with user account", + "Support multiple devices per user" + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "notifications", + "database" + ], + "requirement_ids": [ + "REQ-002" + ], + "agent_context": { + "goal": "Ensure reliable delivery of push notifications by managing device registrations.", + "exploration_paths": [ + "device registration", + "token management" + ], + "exploration_hints": [ + "src/notifications/", + "src/database/" + ], + "known_patterns": [ + "Follow existing token storage patterns" + ], + "verification_tests": [ + "test_device_registration" + ], + "self_check": [ + "Are tokens securely stored?", + "Can users manage multiple devices effectively?" + ] + } + } + ], + "labels": [ + "notifications", + "user engagement" + ] + }, + { + "title": "Notification Types and Preferences", + "description": "Support various types of notifications and allow users to control their notification settings.", + "stories": [ + { + "title": "Implement Immediate and Batched Notification Types", + "description": "Support immediate and batched notifications for various user activities.", + "acceptance_criteria": [ + "Support immediate notifications for direct messages, @mentions, task assignments, and due date reminders", + "Support batched notifications for activity summaries, weekly digest, and new features announcement" + ], + "size": "L", + "priority": "medium", + "labels": [ + "backend", + "notifications" + ], + "requirement_ids": [ + "REQ-003" + ], + "agent_context": { + "goal": "Enhance user experience by providing timely and relevant notifications.", + "exploration_paths": [ + "notification types", + "user engagement" + ], + "exploration_hints": [ + "src/notifications/" + ], + "known_patterns": [ + "Use existing notification service" + ], + "verification_tests": [ + "test_immediate_notifications", + "test_batched_notifications" + ], + "self_check": [ + "Are notifications delivered in a timely manner?", + "Do batched notifications provide value to the user?" + ] + } + }, + { + "title": "Develop Notification Preferences UI", + "description": "Create UI for users to control their notification settings.", + "acceptance_criteria": [ + "Provide a master toggle for all push notifications", + "Provide per-category toggles", + "Allow setting quiet hours and weekend quiet mode", + "Sync preferences across devices" + ], + "size": "L", + "priority": "medium", + "labels": [ + "frontend", + "ui", + "notifications" + ], + "requirement_ids": [ + "REQ-004" + ], + "agent_context": { + "goal": "Empower users to customize their notification experience.", + "exploration_paths": [ + "notification preferences", + "user settings" + ], + "exploration_hints": [ + "src/components/settings/", + "src/pages/" + ], + "known_patterns": [ + "Follow existing settings UI patterns" + ], + "verification_tests": [ + "test_notification_preferences_ui" + ], + "self_check": [ + "Are preferences easily accessible and understandable?", + "Do changes sync correctly across devices?" + ] + } + } + ], + "labels": [ + "notifications", + "user preferences" + ] + }, + { + "title": "Rich Notifications and Delivery Infrastructure", + "description": "Enhance notifications with rich content and ensure reliable delivery.", + "stories": [ + { + "title": "Enhance Notifications with Rich Content", + "description": "Include rich content and interaction options in notifications.", + "acceptance_criteria": [ + "Include user avatar for messages", + "Show action buttons like Reply, Mark Done, Dismiss", + "Support notification grouping/threading", + "Provide deep links to relevant app screens", + "Support expandable content for long messages" + ], + "size": "L", + "priority": "medium", + "labels": [ + "frontend", + "notifications" + ], + "requirement_ids": [ + "REQ-005" + ], + "agent_context": { + "goal": "Increase user interaction with notifications by providing rich content.", + "exploration_paths": [ + "rich notifications", + "user interaction" + ], + "exploration_hints": [ + "src/components/notifications/" + ], + "known_patterns": [ + "Use existing notification rendering patterns" + ], + "verification_tests": [ + "test_rich_notifications" + ], + "self_check": [ + "Do rich notifications enhance user engagement?", + "Are action buttons intuitive and functional?" + ] + } + }, + { + "title": "Implement Notification Delivery Infrastructure", + "description": "Ensure reliable delivery of notifications with appropriate infrastructure.", + "acceptance_criteria": [ + "Queue notifications through background workers", + "Handle platform-specific payload formats", + "Respect device preferences such as DND mode", + "Track delivery status", + "Handle bounced/invalid tokens" + ], + "size": "L", + "priority": "high", + "labels": [ + "backend", + "infrastructure", + "notifications" + ], + "requirement_ids": [ + "REQ-006" + ], + "agent_context": { + "goal": "Ensure notifications are delivered reliably and efficiently to users.", + "exploration_paths": [ + "notification delivery", + "background processing" + ], + "exploration_hints": [ + "src/notifications/", + "src/infrastructure/" + ], + "known_patterns": [ + "Use existing queue processing patterns" + ], + "verification_tests": [ + "test_notification_delivery" + ], + "self_check": [ + "Is the delivery infrastructure scalable?", + "Are delivery failures handled gracefully?" + ] + } + } + ], + "labels": [ + "notifications", + "delivery" + ] + }, + { + "title": "Notification Analytics and A/B Testing", + "description": "Track notification metrics and test effectiveness through A/B testing.", + "stories": [ + { + "title": "Develop Analytics Dashboard for Notifications", + "description": "Track and display push notification metrics.", + "acceptance_criteria": [ + "Track opt-in rate", + "Track delivery rate", + "Track open rate by notification type", + "Track unsubscribe rate", + "Track time-to-open distribution", + "Provide device/OS breakdown" + ], + "size": "L", + "priority": "medium", + "labels": [ + "backend", + "analytics", + "dashboard" + ], + "requirement_ids": [ + "REQ-008" + ], + "agent_context": { + "goal": "Provide insights into notification performance to improve user engagement strategies.", + "exploration_paths": [ + "analytics", + "dashboard" + ], + "exploration_hints": [ + "src/analytics/", + "src/dashboard/" + ], + "known_patterns": [ + "Use existing analytics dashboard framework" + ], + "verification_tests": [ + "test_analytics_dashboard" + ], + "self_check": [ + "Are metrics displayed accurately and in real-time?", + "Is the dashboard user-friendly and informative?" + ] + } + }, + { + "title": "Implement A/B Testing for Notifications", + "description": "Test the effectiveness of notifications through A/B testing.", + "acceptance_criteria": [ + "Vary message content", + "Test different send times", + "Measure open rates per variant", + "Automatically select the winning variant" + ], + "size": "M", + "priority": "low", + "labels": [ + "backend", + "testing", + "notifications" + ], + "requirement_ids": [ + "REQ-007" + ], + "agent_context": { + "goal": "Optimize notification strategies by identifying the most effective variants.", + "exploration_paths": [ + "A/B testing", + "notification effectiveness" + ], + "exploration_hints": [ + "src/testing/", + "src/notifications/" + ], + "known_patterns": [ + "Use existing A/B testing framework" + ], + "verification_tests": [ + "test_ab_testing_notifications" + ], + "self_check": [ + "Are test results statistically significant?", + "Is the winning variant correctly identified and applied?" + ] + } + } + ], + "labels": [ + "analytics", + "testing" + ] + } + ], + "metadata": { + "generated_at": "2026-02-15T19:30:37.591276+00:00", + "prompt_version": "1.6.0", + "model": "gpt-4o", + "requirement_count": 8, + "story_count": 9, + "usage": { + "prompt_tokens": 2358, + "completion_tokens": 2227, + "total_tokens": 4585 + } + } +} \ No newline at end of file diff --git a/outputs/summary.json b/outputs/summary.json new file mode 100644 index 0000000..ae168bb --- /dev/null +++ b/outputs/summary.json @@ -0,0 +1,72 @@ +[ + { + "prd": "sample_prd_01_rate_limiting.md", + "requirements_count": 6, + "ambiguity_count": 2, + "epic_count": 6, + "story_count": 13 + }, + { + "prd": "sample_prd_02_user_onboarding.md", + "requirements_count": 6, + "ambiguity_count": 1, + "epic_count": 1, + "story_count": 6 + }, + { + "prd": "sample_prd_03_checkout.md", + "requirements_count": 7, + "ambiguity_count": 2, + "epic_count": 6, + "story_count": 7 + }, + { + "prd": "sample_prd_04_notifications.md", + "requirements_count": 7, + "ambiguity_count": 0, + "epic_count": 3, + "story_count": 6 + }, + { + "prd": "sample_prd_05_analytics.md", + "requirements_count": 7, + "ambiguity_count": 1, + "epic_count": 4, + "story_count": 9 + }, + { + "prd": "sample_prd_06_file_upload.md", + "requirements_count": 8, + "ambiguity_count": 0, + "epic_count": 4, + "story_count": 8 + }, + { + "prd": "sample_prd_07_search.md", + "requirements_count": 7, + "ambiguity_count": 2, + "epic_count": 4, + "story_count": 7 + }, + { + "prd": "sample_prd_08_payments.md", + "requirements_count": 8, + "ambiguity_count": 0, + "epic_count": 4, + "story_count": 11 + }, + { + "prd": "sample_prd_09_webhooks.md", + "requirements_count": 8, + "ambiguity_count": 0, + "epic_count": 3, + "story_count": 8 + }, + { + "prd": "sample_prd_10_mobile_push.md", + "requirements_count": 8, + "ambiguity_count": 1, + "epic_count": 4, + "story_count": 9 + } +] \ No newline at end of file