mirror of
https://github.com/aaif-goose/goose.git
synced 2026-07-03 14:10:03 +02:00
Signed-off-by: Shivam Gawali <shivamgawali585@gmail.com> Co-authored-by: Rizel Scarlett <rizel@tbd.email>
This commit is contained in:
@@ -0,0 +1,530 @@
|
||||
# ============================================================================
|
||||
# RECIPE METADATA
|
||||
# ============================================================================
|
||||
# Test Coverage Optimizer - An intermediate recipe that uses Developer and
|
||||
# Memory extensions to analyze test coverage patterns, learn from existing
|
||||
# tests, and generate intelligent test suggestions that improve over time.
|
||||
|
||||
version: 1.0.0
|
||||
|
||||
title: Test Coverage Optimizer
|
||||
|
||||
description: |
|
||||
Analyzes test coverage patterns, learns from existing tests, and generates
|
||||
targeted test suggestions to improve coverage systematically. Uses memory
|
||||
to learn testing patterns and improve suggestions over time.
|
||||
|
||||
author:
|
||||
contact: shiv669
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# ACTIVITIES - User-Facing Workflow Steps
|
||||
# ============================================================================
|
||||
# These describe what the user will experience during recipe execution
|
||||
|
||||
activities:
|
||||
- Scan project test files and coverage metrics
|
||||
- Analyze existing test patterns and methodologies
|
||||
- Retrieve learned testing patterns from memory
|
||||
- Identify critical code gaps and missing test coverage
|
||||
- Generate targeted, practical test suggestions based on learned patterns
|
||||
- Create test file templates with concrete examples
|
||||
- Store new patterns for continuous improvement
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# INSTRUCTIONS - Role and Capabilities
|
||||
# ============================================================================
|
||||
# explains the role and key capabilities
|
||||
|
||||
instructions: |
|
||||
You are a Test Coverage Optimization Specialist that helps development teams
|
||||
improve test coverage systematically and intelligently.
|
||||
|
||||
Your goal is to analyze existing test patterns, identify critical gaps,
|
||||
and suggest high-impact new tests that developers can implement immediately.
|
||||
|
||||
Key capabilities you possess:
|
||||
- Scan codebases for test files across multiple frameworks (pytest, jest, unittest, go-test)
|
||||
- Analyze existing test patterns and methodologies to understand team practices
|
||||
- Identify code paths that lack test coverage using static analysis
|
||||
- Remember and learn from previous testing patterns and improvements
|
||||
- Generate practical, ready-to-use test code with explanations
|
||||
- Track and improve suggestions based on feedback and patterns
|
||||
- Create customizable test templates that match team coding standards
|
||||
|
||||
IMPORTANT: Always start by checking Memory for any saved testing patterns,
|
||||
team preferences, and previous coverage analysis for this project.
|
||||
This ensures your suggestions improve over time and match team standards.
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# PARAMETERS - User Configuration Options
|
||||
# ============================================================================
|
||||
# These are the inputs users can provide to customize recipe behavior
|
||||
|
||||
parameters:
|
||||
# Parameter 1: Project location
|
||||
- key: project_path
|
||||
input_type: string
|
||||
requirement: optional
|
||||
default: "."
|
||||
description: "Path to project root directory (where source code is located)"
|
||||
|
||||
# Parameter 2: Testing framework selection
|
||||
- key: test_framework
|
||||
input_type: string
|
||||
requirement: optional
|
||||
default: "auto"
|
||||
description: "Testing framework to target: 'jest' (JavaScript), 'pytest' (Python), 'unittest' (Python), 'go-test' (Go), or 'auto' for auto-detection"
|
||||
|
||||
# Parameter 3: Coverage target
|
||||
- key: coverage_threshold
|
||||
input_type: string
|
||||
requirement: optional
|
||||
default: "80"
|
||||
description: "Target coverage percentage (0-100). Used to identify gap size and prioritize tests."
|
||||
|
||||
# Parameter 4: Focus areas for analysis
|
||||
- key: focus_areas
|
||||
input_type: string
|
||||
requirement: optional
|
||||
default: "all"
|
||||
description: "Comma-separated focus areas: 'core-logic' (primary business logic), 'edge-cases' (boundary conditions), 'error-handling' (exceptions), 'integration' (API/module interactions), or 'all' for comprehensive analysis"
|
||||
|
||||
# Parameter 5: Template generation toggle
|
||||
- key: generate_templates
|
||||
input_type: string
|
||||
requirement: optional
|
||||
default: "true"
|
||||
description: "Whether to generate test file templates with examples (true/false). Set to false if you only want suggestions without code templates."
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# EXTENSIONS - AI Tools Working Together
|
||||
# ============================================================================
|
||||
# Exactly 2 extensions that integrate sequentially for intermediate recipe
|
||||
|
||||
extensions:
|
||||
# Extension 1: Memory - Context and pattern storage (runs first)
|
||||
- type: builtin
|
||||
name: memory
|
||||
display_name: Memory
|
||||
timeout: 300
|
||||
bundled: true
|
||||
description: |
|
||||
Stores and retrieves learned testing patterns, previous coverage analysis,
|
||||
and team preferences. Allows the recipe to improve suggestions over time
|
||||
by remembering what worked well in past runs.
|
||||
|
||||
# Extension 2: Developer - Code analysis and generation (uses Memory's context)
|
||||
- type: builtin
|
||||
name: developer
|
||||
display_name: Developer
|
||||
timeout: 600
|
||||
bundled: true
|
||||
description: |
|
||||
Scans test files, analyzes coverage metrics, identifies code gaps,
|
||||
and generates new test code based on analysis and learned patterns
|
||||
from Memory. This is the primary tool for all file and code operations.
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# PROMPT - Detailed Workflow with Extension Integration
|
||||
# ============================================================================
|
||||
# Step-by-step instructions showing how Memory and Developer extensions work together
|
||||
|
||||
prompt: |
|
||||
You are analyzing test coverage for the project at {{ project_path }} to generate
|
||||
intelligent test suggestions that improve coverage to {{ coverage_threshold }}%.
|
||||
|
||||
# =========================================================================
|
||||
# STEP 1: LOAD CONTEXT FROM MEMORY
|
||||
# =========================================================================
|
||||
# Purpose: Retrieve previously learned patterns to inform current analysis
|
||||
# Extension: Memory (loads first)
|
||||
|
||||
Step 1: Load Testing Patterns from Memory
|
||||
First, retrieve any previously learned testing patterns for this project:
|
||||
- Retrieve key "{{ project_path }}_testing_style" - the team's preferred test structure
|
||||
- Retrieve key "{{ project_path }}_gap_patterns" - common gap patterns from past analysis
|
||||
- Retrieve key "{{ project_path }}_preferred_frameworks" - frameworks the team uses
|
||||
- Retrieve key "testing_best_practices" - general testing best practices library
|
||||
|
||||
If this is your first time analyzing this project, you'll start fresh
|
||||
and build up knowledge over time. Store any retrieved patterns in your
|
||||
context for use in the generation steps below.
|
||||
|
||||
|
||||
# =========================================================================
|
||||
# STEP 2: DETECT TEST FRAMEWORK
|
||||
# =========================================================================
|
||||
# Purpose: Identify which testing framework is used in this project
|
||||
# Extension: Developer (file scanning)
|
||||
|
||||
Step 2: Detect Testing Framework
|
||||
{% if test_framework == "auto" %}
|
||||
Since test_framework is set to 'auto', detect the framework automatically:
|
||||
a) Search for test file patterns in {{ project_path }}:
|
||||
- .test.js, .spec.js, __tests__/*.js files → JavaScript/Jest
|
||||
- _test.py, test_*.py, tests/*.py files → Python/pytest or unittest
|
||||
- *_test.go, *_test.go files → Go/go-test
|
||||
- *.test.ts, *.spec.ts files → TypeScript/Jest
|
||||
|
||||
b) Check for configuration files:
|
||||
- package.json with "jest" dependency → Jest
|
||||
- pytest.ini, setup.cfg, pyproject.toml → pytest
|
||||
- go.mod → go test
|
||||
- unittest imports in test files → Python unittest
|
||||
|
||||
c) Report the detected framework with confidence level
|
||||
Example: "Detected: pytest (high confidence - found pytest.ini)"
|
||||
{% else %}
|
||||
Use the specified framework: {{ test_framework }}
|
||||
Verify that test files for {{ test_framework }} exist in {{ project_path }}
|
||||
If no test files found, suggest creating a basic test structure for {{ test_framework }}
|
||||
{% endif %}
|
||||
|
||||
|
||||
# =========================================================================
|
||||
# STEP 3: ANALYZE CURRENT TEST COVERAGE
|
||||
# =========================================================================
|
||||
# Purpose: Understand current state and identify coverage gaps
|
||||
# Extension: Developer (code scanning and analysis)
|
||||
|
||||
Step 3: Analyze Current Test Coverage
|
||||
Scan the project at {{ project_path }} for test coverage information:
|
||||
|
||||
a) Test File Inventory:
|
||||
- Find all test files matching the detected/specified framework
|
||||
- Count total number of test files and individual test cases
|
||||
- Calculate ratio: lines of test code vs lines of application code
|
||||
- List the main test directories found
|
||||
|
||||
b) Coverage Data Collection:
|
||||
- Look for coverage reports in common locations:
|
||||
* Python: .coverage, coverage.xml, htmlcov/, .coverage.*
|
||||
* JavaScript: coverage/, coverage.json, coverage-final.json
|
||||
* Go: coverage.out, coverage.html
|
||||
- If coverage reports exist, parse them to get:
|
||||
* Overall coverage percentage
|
||||
* Per-file coverage breakdown
|
||||
* Uncovered line numbers
|
||||
- If NO coverage reports found:
|
||||
* Estimate coverage by analyzing test file imports and function calls
|
||||
* Identify source files that have no corresponding test files
|
||||
* Note: "No coverage data found - will identify gaps by analysis"
|
||||
|
||||
c) Gap Analysis:
|
||||
- Compare current coverage to target {{ coverage_threshold }}%
|
||||
- Identify files with coverage below threshold
|
||||
- List top 10 files/modules with lowest coverage
|
||||
- Focus analysis on {{ focus_areas }}
|
||||
- Prioritize gaps by impact:
|
||||
* Critical: Core business logic with <50% coverage
|
||||
* High: Error handling and edge cases with <70% coverage
|
||||
* Medium: Helper functions and utilities with <80% coverage
|
||||
|
||||
|
||||
# =========================================================================
|
||||
# STEP 4: IDENTIFY GAPS USING LEARNED PATTERNS
|
||||
# =========================================================================
|
||||
# Purpose: Use Memory's patterns to make smarter gap identification
|
||||
# Extension: Both (Developer analysis + Memory context)
|
||||
|
||||
Step 4: Identify Testing Gaps (Using Learned Patterns)
|
||||
Using both the coverage analysis AND the learned patterns from Step 1:
|
||||
|
||||
a) Apply learned patterns to current analysis:
|
||||
- If Memory contains testing style preferences, apply them
|
||||
- Check if current gaps match previously identified gap patterns
|
||||
- Consider team's preferred test granularity (unit vs integration)
|
||||
- Note patterns like: "Team prefers testing error cases separately"
|
||||
|
||||
b) Categorize and prioritize missing tests by {{ focus_areas }}:
|
||||
{% if focus_areas == "all" or "core-logic" in focus_areas %}
|
||||
- Core Logic Gaps:
|
||||
* Functions/methods with no test coverage
|
||||
* Business logic paths not exercised by tests
|
||||
* Main workflows missing test scenarios
|
||||
{% endif %}
|
||||
|
||||
{% if focus_areas == "all" or "edge-cases" in focus_areas %}
|
||||
- Edge Case Gaps:
|
||||
* Boundary conditions (empty inputs, max values, null/undefined)
|
||||
* Unusual input combinations
|
||||
* Race conditions or timing-sensitive code
|
||||
{% endif %}
|
||||
|
||||
{% if focus_areas == "all" or "error-handling" in focus_areas %}
|
||||
- Error Handling Gaps:
|
||||
* Exception paths not tested
|
||||
* Error callbacks or error states
|
||||
* Validation failure scenarios
|
||||
{% endif %}
|
||||
|
||||
{% if focus_areas == "all" or "integration" in focus_areas %}
|
||||
- Integration Gaps:
|
||||
* API endpoint tests
|
||||
* Database interaction tests
|
||||
* External service mock/integration tests
|
||||
{% endif %}
|
||||
|
||||
c) Create prioritized list:
|
||||
- Rank gaps by: (impact × likelihood × ease of testing)
|
||||
- Mark which gaps align with learned patterns
|
||||
- Identify quick wins (high impact, easy to test)
|
||||
|
||||
|
||||
# =========================================================================
|
||||
# STEP 5: GENERATE TEST SUGGESTIONS
|
||||
# =========================================================================
|
||||
# Purpose: Create specific, actionable test recommendations
|
||||
# Extension: Developer (code generation using learned context)
|
||||
|
||||
Step 5: Generate Test Suggestions
|
||||
For each identified gap, create specific test suggestions:
|
||||
|
||||
a) For each high-priority gap:
|
||||
- Write a clear, descriptive test name following framework conventions
|
||||
- Explain what this test should verify
|
||||
- Provide the expected test structure for {{ test_framework }}
|
||||
- Include a brief code example showing the test skeleton
|
||||
- If learned patterns exist, match the team's testing style
|
||||
|
||||
Example format:
|
||||
```
|
||||
Test: test_user_authentication_with_invalid_credentials
|
||||
Purpose: Verify that authentication fails gracefully with wrong password
|
||||
Priority: Critical (core-logic, error-handling)
|
||||
Estimated effort: 10 minutes
|
||||
|
||||
Code example for {{ test_framework }}:
|
||||
[Framework-specific test code here]
|
||||
```
|
||||
|
||||
b) Include implementation context:
|
||||
- Why this test is important (coverage gap, risk mitigation)
|
||||
- Which code path it covers
|
||||
- Expected assertions and edge cases to test
|
||||
- Dependencies or mocks needed
|
||||
|
||||
c) Organize suggestions by priority:
|
||||
- Critical (must-have for {{ coverage_threshold }}% target)
|
||||
- High (important for robust coverage)
|
||||
- Medium (nice-to-have, improves confidence)
|
||||
|
||||
d) Limit initial suggestions:
|
||||
- Provide top 5-10 most impactful tests
|
||||
- Note: "Implement these first, then re-run for more suggestions"
|
||||
|
||||
|
||||
# =========================================================================
|
||||
# STEP 6: CREATE TEST TEMPLATES (Optional)
|
||||
# =========================================================================
|
||||
# Purpose: Generate ready-to-use test file templates
|
||||
# Extension: Developer (template creation)
|
||||
|
||||
Step 6: Generate Test Templates
|
||||
{% if generate_templates == "true" %}
|
||||
Create test file templates that developers can immediately use:
|
||||
|
||||
a) For files with NO existing tests:
|
||||
- Create a complete new test file template
|
||||
- Include proper imports for {{ test_framework }}
|
||||
- Add setup/teardown methods if applicable
|
||||
- Provide 2-3 example test functions with placeholders
|
||||
- Match the coding style from Memory if available
|
||||
|
||||
b) For files with SOME existing tests:
|
||||
- Generate test functions to add to existing test files
|
||||
- Match the existing test file's style and structure
|
||||
- Include comments indicating where to insert the new tests
|
||||
|
||||
c) Include in templates:
|
||||
- Proper test file naming (matching framework conventions)
|
||||
- Required imports and dependencies
|
||||
- Mock/fixture setup if needed
|
||||
- Clear TODOs for values to fill in
|
||||
- Example assertions showing expected patterns
|
||||
|
||||
d) Output format:
|
||||
- Provide templates as copyable code blocks
|
||||
- Include file paths where templates should be saved
|
||||
- Add instructions for running the tests
|
||||
|
||||
Example output:
|
||||
```
|
||||
# File: tests/test_user_authentication.py
|
||||
# Framework: pytest
|
||||
# Purpose: Tests for user authentication module
|
||||
|
||||
import pytest
|
||||
from myapp.auth import authenticate_user
|
||||
|
||||
def test_authentication_success():
|
||||
# TODO: Replace with actual test data
|
||||
user = {"username": "test_user", "password": "correct_password"}
|
||||
result = authenticate_user(user)
|
||||
assert result.success is True
|
||||
assert result.user_id is not None
|
||||
|
||||
def test_authentication_invalid_password():
|
||||
# Test critical error path
|
||||
user = {"username": "test_user", "password": "wrong_password"}
|
||||
result = authenticate_user(user)
|
||||
assert result.success is False
|
||||
assert result.error == "Invalid credentials"
|
||||
```
|
||||
{% else %}
|
||||
Template generation is disabled. Providing suggestions only (see Step 5).
|
||||
{% endif %}
|
||||
|
||||
|
||||
# =========================================================================
|
||||
# STEP 7: STORE PATTERNS IN MEMORY
|
||||
# =========================================================================
|
||||
# Purpose: Learn from this analysis to improve future runs
|
||||
# Extension: Memory (pattern storage)
|
||||
|
||||
Step 7: Store Analysis Results and Patterns in Memory
|
||||
Update Memory with findings from this analysis:
|
||||
|
||||
a) Store project-specific patterns:
|
||||
- Save key "{{ project_path }}_testing_style":
|
||||
* Detected framework: {{ test_framework }}
|
||||
* Common test patterns observed (e.g., "uses fixtures", "prefers mocks")
|
||||
* Naming conventions detected
|
||||
* Code style preferences
|
||||
|
||||
- Save key "{{ project_path }}_gap_patterns":
|
||||
* Types of gaps found this run
|
||||
* Areas consistently lacking coverage
|
||||
* Common missing test scenarios
|
||||
|
||||
- Save key "{{ project_path }}_coverage_baseline":
|
||||
* Current coverage: [calculated percentage]%
|
||||
* Target coverage: {{ coverage_threshold }}%
|
||||
* Date of analysis
|
||||
* Number of tests suggested
|
||||
|
||||
b) Update general knowledge:
|
||||
- Save key "testing_best_practices":
|
||||
* Effective test patterns encountered
|
||||
* Framework-specific tips learned
|
||||
* Common pitfalls to avoid
|
||||
|
||||
c) Store metadata for tracking:
|
||||
- Analysis timestamp
|
||||
- Framework detected/used
|
||||
- Focus areas analyzed
|
||||
- Number of suggestions generated
|
||||
- Estimated coverage improvement
|
||||
|
||||
Note: This stored information will be used in Step 1 of the next run
|
||||
to provide better, more contextual suggestions.
|
||||
|
||||
|
||||
# =========================================================================
|
||||
# STEP 8: PRESENT FINAL REPORT
|
||||
# =========================================================================
|
||||
# Purpose: Clearly communicate results and next steps to user
|
||||
# Extension: Both (summarized results)
|
||||
|
||||
Step 8: Present Comprehensive Report
|
||||
Provide a well-structured final report to the user:
|
||||
|
||||
a) Coverage Summary:
|
||||
```
|
||||
📊 Test Coverage Analysis for {{ project_path }}
|
||||
|
||||
Current Coverage: [calculated percentage]% (based on analysis/reports)
|
||||
Target Coverage: {{ coverage_threshold }}%
|
||||
Coverage Gap: [target minus current]% (target - current)
|
||||
|
||||
Framework Detected: {{ test_framework }}
|
||||
Focus Areas: {{ focus_areas }}
|
||||
Tests Analyzed: [count] test files, [count] test cases
|
||||
```
|
||||
|
||||
b) Top Recommended Tests:
|
||||
List the 5-10 highest priority test suggestions:
|
||||
```
|
||||
🎯 High-Priority Test Suggestions:
|
||||
|
||||
1. [CRITICAL] test_user_login_with_invalid_credentials
|
||||
- What: Verify authentication fails gracefully
|
||||
- Why: Core security logic, currently untested
|
||||
- Effort: ~10 minutes
|
||||
- Coverage gain: +2-3%
|
||||
|
||||
2. [CRITICAL] test_data_validation_edge_cases
|
||||
- What: Test empty/null input handling
|
||||
- Why: Common source of production bugs
|
||||
- Effort: ~15 minutes
|
||||
- Coverage gain: +1-2%
|
||||
|
||||
[... continue for top suggestions]
|
||||
```
|
||||
|
||||
c) Implementation Guidance:
|
||||
```
|
||||
📝 Next Steps:
|
||||
|
||||
1. Start with CRITICAL tests (biggest impact)
|
||||
2. {% if generate_templates == "true" %}
|
||||
Use the templates provided above - copy and customize
|
||||
{% else %}
|
||||
Create test files based on suggestions above
|
||||
{% endif %}
|
||||
3. Run tests to verify they work: {{ test_framework }} [command]
|
||||
4. Run coverage again to see improvement
|
||||
5. Re-run this recipe for additional suggestions
|
||||
|
||||
💡 Pro Tips:
|
||||
- Implement tests iteratively (don't try to do everything at once)
|
||||
- Run coverage after each batch to track progress
|
||||
- For {{ coverage_threshold }}% target, focus on core-logic first
|
||||
- This recipe learns - patterns will improve with each run
|
||||
```
|
||||
|
||||
d) Coverage Projection:
|
||||
```
|
||||
📈 Estimated Impact:
|
||||
|
||||
If you implement the top 5 suggested tests:
|
||||
- Estimated coverage increase: +[percentage]%
|
||||
- New coverage projection: [new total]%
|
||||
- Remaining gap to target: [remaining gap]%
|
||||
|
||||
Tests needed to reach {{ coverage_threshold }}%: approximately [number] more tests
|
||||
```
|
||||
|
||||
e) Learned Patterns Summary:
|
||||
```
|
||||
🧠 Memory Updated:
|
||||
|
||||
- Stored testing style preferences for {{ project_path }}
|
||||
- Saved [count] gap patterns for future reference
|
||||
- Updated coverage baseline
|
||||
- Future runs will provide better suggestions based on this analysis
|
||||
```
|
||||
|
||||
|
||||
# =========================================================================
|
||||
# COMPLETION
|
||||
# =========================================================================
|
||||
|
||||
Your analysis is complete! The user now has:
|
||||
- Clear understanding of current coverage gaps
|
||||
- Prioritized list of tests to implement
|
||||
{% if generate_templates == "true" %}
|
||||
- Ready-to-use test templates
|
||||
{% endif %}
|
||||
- Improved future suggestions through Memory learning
|
||||
|
||||
Remind the user to re-run this recipe after implementing tests to:
|
||||
1. See coverage improvements
|
||||
2. Get additional suggestions based on learned patterns
|
||||
3. Continue iterating toward {{ coverage_threshold }}% coverage
|
||||
Reference in New Issue
Block a user