Deep Research Skill
Conduct thorough technical research before implementation to ensure high-quality, informed decisions.
Workspace Mode Note
When running in workspace mode, all paths are relative to .aha-loop/ directory:
- •Research reports:
.aha-loop/research/(notscripts/aha-loop/research/) - •Knowledge base:
.aha-loop/knowledge/(notknowledge/) - •Vendor directory:
.aha-loop/.vendor/(not.vendor/)
The orchestrator will provide the actual paths in the prompt context.
The Job
- •Identify research topics from the current story's
researchTopicsfield - •Fetch third-party library source code if needed
- •Search documentation and best practices
- •Analyze and compare alternatives
- •Generate a research report
- •Update knowledge base with findings
- •Mark
researchCompleted: truein prd.json
Research Process
Step 1: Identify What to Research
Read the current story from prd.json and extract:
- •
researchTopics- explicit topics to investigate - •Dependencies mentioned in acceptance criteria
- •Patterns referenced in the description
Also check:
- •Previous story's
learningsfield for follow-up research needs - •
knowledge/project/gotchas.mdfor related known issues
Step 2: Fetch Library Source Code (If Needed)
For any third-party library research, fetch the source:
# Fetch specific library ./scripts/aha-loop/fetch-source.sh rust tokio 1.35.0 # Or fetch all project dependencies ./scripts/aha-loop/fetch-source.sh --from-deps
After fetching, the source will be at .vendor/<ecosystem>/<name>-<version>/
Library Version Selection
Always Prefer Latest Stable Versions
When researching or recommending libraries, always check for and prefer the latest stable version unless there's a specific compatibility reason not to.
Version Research Process
- •
Query the package registry for latest version:
bash# Rust (crates.io) curl -s "https://crates.io/api/v1/crates/tokio" | jq '.crate.max_stable_version' # Or use cargo cargo search tokio --limit 1 # Node.js (npm) npm view react version # Python (PyPI) pip index versions requests 2>/dev/null | head -1
- •
Verify stability:
- •Released at least 1-2 weeks ago (not bleeding edge)
- •Check GitHub issues for critical bugs
- •Review changelog for breaking changes
- •
Check compatibility:
- •Works with existing project dependencies
- •Compatible with project's minimum supported language version
- •No known conflicts
Version Documentation
Always document version decisions:
## Version Decision: [Library Name] **Selected Version:** X.Y.Z **Latest Available:** X.Y.Z (as of YYYY-MM-DD) **Reason:** [Why this version was chosen] **Compatibility Notes:** - Works with [other dependency] v[X.Y] - Requires [language] v[X.Y]+
When to Use Older Versions
Only use older versions when:
- •Latest version has critical bugs
- •Incompatible with required dependencies
- •Breaking changes require significant refactoring
- •Project explicitly constrains the version
Always document the reason in knowledge/project/decisions.md:
### ADR: Using [Library] v[Old] instead of v[New] **Context:** [Why we're not using latest] **Decision:** Pin to v[Old] **Consequences:** [What we're missing, when to revisit]
Step 3: Read Source Code Strategically
Reading Order (Most Important First):
- •README.md - Understand design intent and quick-start examples
- •Entry Point Files:
- •Rust:
src/lib.rs,src/main.rs - •TypeScript/JS:
src/index.ts,index.js - •Python:
__init__.py,main.py
- •Rust:
- •Module Structure - Scan
mod.rsfiles or directory structure - •Type Definitions - Find core structs, interfaces, types
- •Target Functionality - Locate the specific feature you need
- •Tests - Learn correct usage patterns from test files
Reading Tips:
- •Use semantic search to find relevant code sections
- •Focus on PUBLIC APIs, skip internal implementation unless needed
- •Look for
examples/directory for usage patterns - •Check
tests/for edge cases and proper usage
Step 4: Web Search for Context
Search for:
- •Official documentation
- •Best practices and common patterns
- •Known issues and gotchas
- •Performance considerations
- •Alternative libraries
Use MCP tools like context7 for up-to-date documentation.
Step 5: Compare Alternatives (If Applicable)
When multiple solutions exist, create a comparison:
| Criterion | Option A | Option B | Option C |
|---|---|---|---|
| Performance | ... | ... | ... |
| API Ergonomics | ... | ... | ... |
| Maintenance Status | ... | ... | ... |
| Bundle Size | ... | ... | ... |
| Learning Curve | ... | ... | ... |
Include a recommendation with reasoning.
Research Report Template
Save to: scripts/aha-loop/research/[story-id]-research.md
# Research Report: [Story ID] - [Story Title] **Date:** YYYY-MM-DD **Status:** Complete | Needs Follow-up ## Research Topics 1. [Topic from researchTopics array] 2. ... ## Findings ### Topic 1: [Name] **Summary:** Brief answer to the research question **Source Code Analysis:** - Library: [name] v[version] - Key File: `.vendor/rust/tokio-1.35.0/src/runtime/mod.rs` - Relevant Code: Lines 123-189 - Pattern Observed: [description] **Documentation Notes:** - [Key insight from docs] - [Another insight] **Code Example:** ```[language] // Example from source or docs
Topic 2: [Name]
...
Alternatives Comparison
| Criterion | Option A | Option B | Recommendation |
|---|---|---|---|
| ... | ... | ... | ... |
Recommendation: [Option X] because [reasoning]
Implementation Recommendations
Based on research, the story should be implemented as follows:
- •[Specific implementation guidance]
- •[Pattern to follow]
- •[Pitfalls to avoid]
Follow-up Research Needed
- • [Topic that needs deeper investigation]
- • [Question that emerged during research]
Knowledge Base Updates
The following should be added to knowledge base:
To knowledge/project/patterns.md:
- •[Pattern specific to this project]
To knowledge/domain/[topic]/:
- •[Reusable knowledge about a library or technique]
--- ## Updating Knowledge Base ### Project Knowledge (`knowledge/project/`) Add patterns specific to THIS project: - How this codebase uses a library - Project-specific conventions discovered - Gotchas specific to this codebase ### Domain Knowledge (`knowledge/domain/`) Add reusable technical knowledge: - Library usage patterns (applicable to any project) - Comparison documents - Best practices **Create new topic directories as needed:**
knowledge/domain/ └── [topic-name]/ ├── README.md # Overview ├── patterns.md # Common patterns ├── gotchas.md # Known issues └── examples/ # Code examples
--- ## Source Code Reading Report When you read library source code, document your findings: ```markdown ## Source Code Analysis: [Library] v[Version] ### Module Structure
src/ ├── lib.rs # Main entry, exports public API ├── runtime/ # Async runtime implementation │ ├── mod.rs # Module exports │ └── scheduler.rs # Task scheduling └── sync/ # Synchronization primitives
### Key Types
- `Runtime` (src/runtime/mod.rs:45) - Main runtime struct
- `Handle` (src/runtime/handle.rs:23) - Runtime handle for spawning
### Key Functions
- `Runtime::new()` (L89-L120) - Creates new runtime with default config
- `spawn()` (L156-L189) - Spawns a new async task
### Usage Patterns from Tests
From `tests/runtime.rs:34`:
```rust
let rt = Runtime::new().unwrap();
rt.block_on(async {
// ...
});
Important Notes
- •Thread safety: Runtime is Send + Sync
- •Performance: Use
spawn_blockingfor CPU-heavy tasks - •Gotcha: Don't call
block_onfrom async context
--- ## Checklist Before marking research complete: - [ ] All `researchTopics` investigated - [ ] Library source code fetched and key files read (if applicable) - [ ] Web search performed for documentation and best practices - [ ] Alternatives compared (if multiple options exist) - [ ] Research report saved to `scripts/aha-loop/research/` - [ ] Knowledge base updated with reusable findings - [ ] Implementation recommendations documented - [ ] `researchCompleted: true` set in prd.json