Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:02:18 +08:00
commit 9dede11447
13 changed files with 4585 additions and 0 deletions

View File

@@ -0,0 +1,300 @@
---
description: Conduct comprehensive research across the Elixir repository to answer questions
argument-hint: [research-query]
allowed-tools: Read, Grep, Glob, Task, Bash, TodoWrite, Write, Skill
---
# Research
You are tasked with conducting comprehensive research across the Elixir repository to answer user questions by spawning parallel sub-agents and synthesizing their findings.
## CRITICAL: YOUR ONLY JOB IS TO DOCUMENT AND EXPLAIN THE CODEBASE AS IT EXISTS TODAY
- DO NOT suggest improvements or changes unless the user explicitly asks for them
- DO NOT critique implementations or identify problems
- DO NOT recommend refactoring, optimization, or architectural changes
- ONLY describe what exists, where it exists, how it works, and how components interact
- You are creating technical documentation of the existing codebase
## Steps to Execute:
When this command is invoked, the user provides their research query as an argument (e.g., `/research How does authentication work?`). Begin research immediately.
1. **Read any directly mentioned files first:**
- If the user mentions specific files, read them FULLY first
- **IMPORTANT**: Use the Read tool WITHOUT limit/offset parameters to read entire files
- **CRITICAL**: Read these files yourself in the main context before spawning any sub-tasks
- This ensures you have full context before decomposing the research
2. **Analyze and decompose the research question:**
- Break down the user's query into composable research areas
- Identify specific Elixir modules, functions, or patterns to investigate
- Create a research plan using TodoWrite to track all subtasks
- Use concrete TodoWrite structure:
```
1. [in_progress] Identify relevant Elixir modules and components
2. [pending] Research component A with finder agent
3. [pending] Analyze component B with analyzer agent
4. [pending] Synthesize findings
5. [pending] Write research document
```
- Consider which Elixir components are relevant:
- Mix configuration and dependencies
- Application modules and supervision trees
- Contexts (Phoenix) or domain modules
- Schemas and Ecto queries
- Controllers, LiveViews, and routes (Phoenix)
- GenServers, Agents, and other processes
- Tests (ExUnit)
- Configuration files
3. **Spawn parallel sub-agent tasks for comprehensive research:**
- Create multiple Task agents to research different aspects concurrently
- We have specialized agents for repository research:
**For finding files and patterns:**
- Use the **finder** agent (subagent_type="general-purpose") to:
- Locate relevant Elixir files (`.ex`, `.exs`)
- Show code patterns (modules, functions, behaviours)
- Extract implementation examples
- Example prompt: "Find all {{PROJECT_TYPE_SPECIFIC}} in the codebase and show their implementation patterns"
**For deep analysis:**
- Use the **analyzer** agent (subagent_type="general-purpose") to:
- Trace execution flows through Elixir modules
- Analyze technical implementation details
- Explain step-by-step processing
- Example prompt: "Analyze how the authentication plug works, tracing the complete flow from request to response"
**For package and framework documentation:**
- Use **core:hex-docs-search** skill for API documentation:
- Research Hex packages (Phoenix, Ecto, Ash, Credo, etc.)
- Find module and function documentation
- Understand API reference and integration patterns
- Example: `Skill(command="core:hex-docs-search")` with prompt about Phoenix.Router
- Use **core:usage-rules** skill for best practices:
- Find package-specific coding conventions and patterns
- See good/bad code examples from package maintainers
- Understand common mistakes to avoid
- Example: `Skill(command="core:usage-rules")` with prompt about Ash querying best practices
- Use skills when you need official documentation/conventions vs code search
- Combine skill research with finder/analyzer for comprehensive understanding
**IMPORTANT**: All agents are documentarians, not critics. They will describe what exists without suggesting improvements or identifying issues.
**Key principles:**
- Start with finder to discover what exists
- Use analyzer for deep understanding of how things work
- Run multiple agents in parallel when researching different aspects
- Each agent knows its job - be specific about what you're looking for
- Remind agents they are documenting, not evaluating or improving
4. **Wait for all sub-agents to complete and synthesize findings:**
- IMPORTANT: Wait for ALL sub-agent tasks to complete before proceeding
- Compile all sub-agent results
- Connect findings across different Elixir modules and components
- Include specific file paths and line numbers for reference
- Highlight patterns, connections, and implementation decisions
- Answer the user's specific questions with concrete evidence from the codebase
**Handling Sub-Agent Failures:**
- If a sub-agent fails or times out, document what was attempted
- Note which agents failed and why in the research document
- Proceed with available information from successful agents
- Mark gaps in coverage in the "Open Questions" section
- Include error details in a "Research Limitations" section if significant
5. **Gather metadata for the research document:**
- Get current date/time: `date -u +"%Y-%m-%d %H:%M:%S %Z"`
- Get git info: `git log -1 --format="%H" && git branch --show-current && git config user.name`
- Determine filename: `{{DOCS_LOCATION}}/research-YYYY-MM-DD-topic-description.md`
- Format: `{{DOCS_LOCATION}}/research-YYYY-MM-DD-topic-description.md` where:
- YYYY-MM-DD is today's date
- topic-description is a brief kebab-case description
- Examples:
- `{{DOCS_LOCATION}}/research-2025-01-23-authentication-flow.md`
- `{{DOCS_LOCATION}}/research-2025-01-23-ecto-queries.md`
- `{{DOCS_LOCATION}}/research-2025-01-23-phoenix-contexts.md`
6. **Generate research document:**
- Use the metadata gathered in step 5
- Structure the document with YAML frontmatter followed by content:
```markdown
---
date: [Current date and time in ISO format]
researcher: [Git user name]
commit: [Current commit hash]
branch: [Current branch name]
repository: [Repository name from git remote]
topic: "[User's Question/Topic]"
tags: [research, elixir, {{PROJECT_TYPE_TAGS}}]
status: complete
---
# Research: [User's Question/Topic]
**Date**: [Current date and time]
**Researcher**: [Git user name]
**Git Commit**: [Current commit hash]
**Branch**: [Current branch name]
**Repository**: [Repository name]
**Project Type**: {{PROJECT_TYPE}}
## Research Question
[Original user query]
## Summary
[High-level overview of what was found, answering the user's question by describing what exists in the Elixir codebase]
## Detailed Findings
[Organize findings based on research type - adapt sections as needed]
**For module/component research, use:**
### [Module/Component 1]
- Description of what exists (`path/to/file.ex:7-10`)
- How it works
- Current implementation details (without evaluation)
- Related modules and dependencies
**For flow/process research, use:**
### Step 1: [Phase Name]
- What happens (`path/to/file.ex:line`)
- How data flows through the pipeline
- Related handlers and processes
**For pattern/convention research, use:**
### Pattern: [Pattern Name]
- Where it's used in the codebase
- How it's implemented
- Examples with file:line references
## Code References
[All relevant file:line references from Elixir files]
- `lib/my_app/accounts/user.ex:9` - [Brief description]
- `lib/my_app_web/controllers/session_controller.ex:16-26` - [Brief description]
## [Optional: Implementation Patterns]
[Include if Elixir patterns are central to the research]
- Pattern 1: [Description]
- Pattern 2: [Description]
## [Optional: Pattern Examples]
[Include if code examples clarify findings]
```elixir
# From lib/my_app/accounts.ex:9
def get_user(id) do
# implementation
end
```
## [Optional: Related Research]
[Include if other research documents are relevant]
## [Optional: Open Questions]
[Include if areas need further investigation]
## [Optional: Research Limitations]
[Include if sub-agents failed or coverage was incomplete]
```
7. **Write the research document:**
- Create the file at the determined path
- Use the Write tool to create the document with all gathered information
- Ensure all file references include line numbers
- Include Elixir code snippets for key patterns
8. **Present findings:**
- Present a concise summary of findings to the user
- Include key file references for easy navigation (module:line format)
- Highlight discovered patterns and implementations
- Ask if they have follow-up questions or need clarification
9. **Handle follow-up questions:**
- If the user has follow-up questions, append to the same research document
- Update the frontmatter fields `last_updated` and `last_updated_by`
- Add `last_updated_note: "Added follow-up research for [brief description]"` to frontmatter
- Add a new section: `## Follow-up Research [timestamp]`
- Spawn new sub-agents as needed for additional investigation
- Continue updating the document
## Elixir-Specific Research Considerations:
- **Mix Project Structure**: config/, lib/, test/, priv/, mix.exs
- **Application Modules**: Application start, supervision trees, workers
- **Contexts** (Phoenix): Bounded contexts, public API functions
- **Schemas**: Ecto schemas, changesets, validations
- **Controllers/LiveViews** (Phoenix): Request handling, renders, assigns
- **Queries**: Ecto queries, Repo operations
- **GenServers/Agents**: Process-based state, message handling
- **Plugs**: Middleware, request transformation
- **Tests**: ExUnit tests, test helpers, fixtures
- **Configuration**: Config files, runtime config, environment variables
## Pattern Categories to Research:
- **Supervision Patterns**: Supervisor trees, restart strategies, child specs
- **Data Handling**: Ecto schemas, queries, transactions, changesets
- **Phoenix Patterns**: Contexts, controllers, LiveView, channels
- **Process Patterns**: GenServer, Agent, Task, GenStage
- **Authentication/Authorization**: Plugs, Guardian, Pow, custom auth
- **Error Handling**: {:ok, result}/{:error, reason}, with blocks, error tracking
- **Testing Patterns**: ExUnit, mocks (Mox), fixtures, factories
- **API Patterns**: JSON APIs, GraphQL (Absinthe), REST endpoints
## Important notes:
- Always use parallel Task agents to maximize efficiency
- Focus on finding concrete file paths and line numbers for Elixir modules
- Research documents should be self-contained with all necessary context
- Each sub-agent prompt should be specific and focused on documentation
- Document cross-module connections and patterns
- Include Elixir code examples with file:line references
- Keep the main agent focused on synthesis, not deep analysis
- Have sub-agents document Elixir patterns as they exist
- **CRITICAL**: You and all sub-agents are documentarians, not evaluators
- **REMEMBER**: Document what IS, not what SHOULD BE
- **NO RECOMMENDATIONS**: Only describe the current state of the Elixir codebase
- **File reading**: Always read mentioned files FULLY before spawning sub-tasks
- **Critical ordering**: Follow the numbered steps exactly
- ALWAYS read mentioned files first before spawning sub-tasks (step 1)
- ALWAYS wait for all sub-agents to complete before synthesizing (step 4)
- ALWAYS gather metadata before writing the document (step 5 before step 6)
- NEVER write the research document with placeholder values
- **Frontmatter consistency**:
- Always include frontmatter at the beginning
- Keep frontmatter fields consistent
- Update frontmatter when adding follow-up research
- Use snake_case for multi-word field names
- Tags should include elixir and project-type specific tags
## Example Usage:
**User**: `/research` then "How does authentication work in this application?"
**Process**:
1. Read any mentioned files
2. Create TodoWrite with research subtasks
3. Spawn parallel agents:
- finder: "Find all authentication-related modules and show their implementation patterns"
- analyzer: "Analyze the authentication plug, tracing the execution flow from request to verification"
- Skill: Search hex docs for Guardian/Pow/relevant auth library
4. Wait for completion
5. Synthesize findings into research document
6. Present summary with key patterns and file references
**User**: "How are Ecto queries structured in this codebase?"
**Process**:
1. Spawn parallel agents:
- finder: "Find all Ecto query modules and show their query patterns"
- analyzer: "Analyze how queries are composed and executed in the main contexts"
2. Synthesize findings about query patterns, composition, and Repo usage
3. Present comprehensive documentation with Elixir examples
**User**: "What LiveView components are used and how are they structured?"
**Process**:
1. Spawn parallel agents:
- finder: "Find all LiveView modules and identify component patterns"
- analyzer: "Analyze LiveView lifecycle, handle_event patterns, and assign management"
2. Synthesize findings about LiveView approach and conventions
3. Present documentation with LiveView examples