---
name: dyad:fix-issue
description: Create a plan to fix a GitHub issue, then implement it locally.
---

# Fix Issue

Create a plan to fix a GitHub issue, then implement it locally.

## Arguments

- `$ARGUMENTS`: GitHub issue number or URL.

## Instructions

1. **Fetch the GitHub issue:**

   First, extract the issue number from `$ARGUMENTS`:
   - If `$ARGUMENTS` is a number (e.g., `123`), use it directly
   - If `$ARGUMENTS` is a URL (e.g., `https://github.com/owner/repo/issues/123`), extract the issue number from the path

   Then fetch the issue:

   ```
   gh issue view <issue-number> --json title,body,comments,labels,assignees
   ```

2. **Sanitize the issue content:**

   Run the issue body through the sanitization script to remove HTML comments, invisible characters, and other artifacts:

   ```
   printf '%s' "$ISSUE_BODY" | python3 .claude/skills/fix-issue/scripts/sanitize_issue_markdown.py
   ```

   This removes:
   - HTML comments (`<!-- ... -->`)
   - Zero-width and invisible Unicode characters
   - Excessive blank lines
   - HTML details/summary tags (keeping content)

3. **Analyze the issue:**
   - Understand what the issue is asking for
   - Identify the type of work (bug fix, feature, refactor, etc.)
   - Note any specific requirements or constraints mentioned

4. **Explore the codebase:**
   - Search for relevant files and code related to the issue
   - Understand the current implementation
   - Identify what needs to change
   - Look at existing tests to understand testing patterns used in the project

5. **Determine testing approach:**

   Consider what kind of testing is appropriate for this change:
   - **E2E test**: For user-facing features or complete user flows. Prefer this when the change involves UI interactions or would require mocking many dependencies to unit test.
   - **Unit test**: For pure business logic, utility functions, or isolated components.
   - **No new tests**: Only for trivial changes (typos, config tweaks, etc.)

   Note: Per project guidelines, avoid writing many E2E tests for one feature. Prefer one or two E2E tests with broad coverage. If unsure, ask the user for guidance on testing approach.

   **IMPORTANT for E2E tests:** You MUST run `npm run build` before running E2E tests. E2E tests run against the built application binary. If you make any changes to application code (anything outside of `e2e-tests/`), you MUST re-run `npm run build` before running E2E tests, otherwise you'll be testing the old version.

6. **Create a detailed plan:**

   Write a plan that includes:
   - **Summary**: Brief description of the issue and proposed solution
   - **Files to modify**: List of files that will need changes
   - **Implementation steps**: Ordered list of specific changes to make
   - **Testing approach**: What tests to add (E2E, unit, or none) and why
   - **Potential risks**: Any concerns or edge cases to consider

7. **Execute the plan:**

   If the plan is straightforward with no ambiguities or open questions:
   - Proceed directly to implementation without asking for approval
   - Implement the plan step by step
   - Run `/dyad:pr-push` when complete

   If the plan has significant complexity, multiple valid approaches, or requires user input:
   - Present the plan to the user and use `ExitPlanMode` to request approval
   - After approval, implement the plan step by step
   - Run `/dyad:pr-push` when complete
