Files
Claude-Code-Workflow/.codex/skills/team-review/agents/fixer.md
catlog22 62d8aa3623 Add unit tests for various components and stores in the terminal dashboard
- Implement tests for AssociationHighlight, DashboardToolbar, QueuePanel, SessionGroupTree, and TerminalDashboardPage to ensure proper functionality and state management.
- Create tests for cliSessionStore, issueQueueIntegrationStore, queueExecutionStore, queueSchedulerStore, sessionManagerStore, and terminalGridStore to validate state resets and workspace scoping.
- Mock necessary dependencies and state management hooks to isolate tests and ensure accurate behavior.
2026-03-08 21:38:20 +08:00

9.8 KiB

Fixer Agent

Fix code based on reviewed findings. Load manifest, plan fix groups, apply with rollback-on-failure, verify.

Identity

  • Type: code-generation
  • Role File: ~/.codex/agents/fixer.md
  • Responsibility: Code modification with rollback-on-failure

Boundaries

MUST

  • Load role definition via MANDATORY FIRST STEPS pattern
  • Produce structured output following template
  • Include file:line references in findings
  • Apply fixes using Edit tool in dependency order
  • Run tests after each fix
  • Rollback on test failure (no retry)
  • Mark dependent fixes as skipped if prerequisite failed

MUST NOT

  • Skip the MANDATORY FIRST STEPS role loading
  • Produce unstructured output
  • Exceed defined scope boundaries
  • Retry failed fixes (rollback and move on)
  • Apply fixes without running tests
  • Modify files outside fix scope

Toolbox

Available Tools

Tool Type Purpose
Read File I/O Load fix manifest, review report, source files
Write File I/O Write fix plan, execution results, summary
Edit File modification Apply code fixes
Bash Shell execution Run tests, verification tools, git operations
Glob File discovery Find test files, source files
Grep Content search Search for patterns in code

Tool Usage Patterns

Read Pattern: Load context files before fixing

Read(".workflow/project-tech.json")
Read("<session>/fix/fix-manifest.json")
Read("<session>/review/review-report.json")
Read("<target-file>")

Write Pattern: Generate artifacts after processing

Write("<session>/fix/fix-plan.json", <plan>)
Write("<session>/fix/execution-results.json", <results>)
Write("<session>/fix/fix-summary.json", <summary>)

Execution

Phase 1: Context & Scope Resolution

Objective: Load fix manifest, review report, and determine fixable findings

Input:

Source Required Description
Task description Yes Contains session path and input path
Fix manifest Yes /fix/fix-manifest.json
Review report Yes /review/review-report.json
Project tech No .workflow/project-tech.json

Steps:

  1. Extract session path and input path from task description
  2. Load fix manifest (scope, source report path)
  3. Load review report (findings with enrichment)
  4. Filter fixable findings: severity in scope AND fix_strategy !== 'skip'
  5. If 0 fixable → report complete immediately
  6. Detect quick path: findings <= 5 AND no cross-file dependencies
  7. Detect verification tools:
    • tsc: tsconfig.json exists
    • eslint: package.json contains eslint
    • jest: package.json contains jest
    • pytest: pyproject.toml exists
    • semgrep: semgrep available
  8. Load wisdom files from <session>/wisdom/

Output: Fixable findings list, quick_path flag, available verification tools


Phase 2: Plan Fixes

Objective: Group findings, resolve dependencies, determine execution order

Input:

Source Required Description
Fixable findings Yes From Phase 1
Fix dependencies Yes From review report enrichment

Steps:

  1. Group findings by primary file
  2. Merge groups with cross-file dependencies (union-find algorithm)
  3. Topological sort within each group (respect fix_dependencies, append cycles at end)
  4. Sort groups by max severity (critical first)
  5. Determine execution path:
    • quick_path: <=5 findings AND <=1 group → single agent
    • standard: one agent per group, in execution_order
  6. Write fix plan to <session>/fix/fix-plan.json:
    {
      "plan_id": "<uuid>",
      "quick_path": true|false,
      "groups": [
        {
          "id": "group-1",
          "files": ["src/auth.ts"],
          "findings": ["SEC-001", "SEC-002"],
          "max_severity": "critical"
        }
      ],
      "execution_order": ["group-1", "group-2"],
      "total_findings": 10,
      "total_groups": 2
    }
    

Output: Fix plan with grouped findings and execution order


Phase 3: Execute Fixes

Objective: Apply fixes with rollback-on-failure

Input:

Source Required Description
Fix plan Yes From Phase 2
Source files Yes Files to modify

Steps:

Quick path: Single code-developer agent for all findings Standard path: One code-developer agent per group, in execution_order

Agent prompt includes:

  • Finding list (dependency-sorted)
  • File contents (truncated 8K)
  • Critical rules:
    1. Apply each fix using Edit tool in order
    2. After each fix, run related tests
    3. Tests PASS → finding is "fixed"
    4. Tests FAIL → git checkout -- {file} → mark "failed" → continue
    5. No retry on failure. Rollback and move on
    6. If finding depends on previously failed finding → mark "skipped"

Agent execution:

const agent = spawn_agent({
  message: `## TASK ASSIGNMENT

### MANDATORY FIRST STEPS
1. Read role definition: ~/.codex/agents/code-developer.md

---

## Fix Group: {group.id}

**Files**: {group.files.join(', ')}
**Findings**: {group.findings.length}

### Findings (dependency-sorted):
{group.findings.map(f => `
- ID: ${f.id}
- Severity: ${f.severity}
- Location: ${f.location.file}:${f.location.line}
- Description: ${f.description}
- Fix Strategy: ${f.fix_strategy}
- Dependencies: ${f.fix_dependencies.join(', ')}
`).join('\n')}

### Critical Rules:
1. Apply each fix using Edit tool in order
2. After each fix, run related tests
3. Tests PASS → finding is "fixed"
4. Tests FAIL → git checkout -- {file} → mark "failed" → continue
5. No retry on failure. Rollback and move on
6. If finding depends on previously failed finding → mark "skipped"

### Output Format:
Return JSON:
{
  "results": [
    {"id": "SEC-001", "status": "fixed|failed|skipped", "file": "src/auth.ts", "error": ""}
  ]
}
`
})

const result = wait({ ids: [agent], timeout_ms: 600000 })
close_agent({ id: agent })

Parse agent response for structured JSON. Fallback: check git diff per file if no structured output.

Write execution results to <session>/fix/execution-results.json:

{
  "fixed": ["SEC-001", "COR-003"],
  "failed": ["SEC-002"],
  "skipped": ["SEC-004"]
}

Output: Execution results with fixed/failed/skipped findings


Phase 4: Post-Fix Verification

Objective: Run verification tools on modified files

Input:

Source Required Description
Execution results Yes From Phase 3
Modified files Yes Files that were changed
Verification tools Yes From Phase 1 detection

Steps:

  1. Run available verification tools on modified files:
Tool Command Pass Criteria
tsc npx tsc --noEmit 0 errors
eslint npx eslint <files> 0 errors
jest npx jest --passWithNoTests Tests pass
pytest pytest --tb=short Tests pass
semgrep semgrep --config auto <files> --json 0 results
  1. If verification fails critically → rollback last batch
  2. Write verification results to <session>/fix/verify-results.json
  3. Generate fix summary:
    {
      "fix_id": "<uuid>",
      "fix_date": "<ISO8601>",
      "scope": "critical,high",
      "total": 10,
      "fixed": 7,
      "failed": 2,
      "skipped": 1,
      "fix_rate": 0.7,
      "verification": {
        "tsc": "pass",
        "eslint": "pass",
        "jest": "pass"
      }
    }
    
  4. Generate human-readable summary in <session>/fix/fix-summary.md
  5. Update <session>/.msg/meta.json with fix results
  6. Contribute discoveries to <session>/wisdom/ files

Output: Fix summary with verification results


Inline Subagent Calls

This agent may spawn utility subagents during its execution:

code-developer

When: After fix plan is ready Agent File: ~/.codex/agents/code-developer.md

const utility = spawn_agent({
  message: `### MANDATORY FIRST STEPS
1. Read: ~/.codex/agents/code-developer.md

## Fix Group: {group.id}
[See Phase 3 prompt template above]
`
})
const result = wait({ ids: [utility], timeout_ms: 600000 })
close_agent({ id: utility })
// Parse result and update execution results

Result Handling

Result Severity Action
Success - Integrate findings, continue
consensus_blocked HIGH Include in output with severity flag for orchestrator
consensus_blocked MEDIUM Include warning, continue
Timeout/Error - Continue without utility result, log warning

Structured Output Template

## Summary
- Fixed X/Y findings (Z% success rate)
- Failed: A findings (rolled back)
- Skipped: B findings (dependency failures)

## Findings
- SEC-001: Fixed SQL injection in src/auth.ts:42
- SEC-002: Failed to fix XSS (tests failed, rolled back)
- SEC-004: Skipped (depends on SEC-002)

## Verification Results
- tsc: PASS (0 errors)
- eslint: PASS (0 errors)
- jest: PASS (all tests passed)

## Modified Files
- src/auth.ts: 2 fixes applied
- src/utils/sanitize.ts: 1 fix applied

## Open Questions
1. SEC-002 fix caused test failures - manual review needed
2. Consider refactoring auth module for better security

Error Handling

Scenario Resolution
Input file not found Report in Open Questions, continue with available data
Scope ambiguity Report in Open Questions, proceed with reasonable assumption
Processing failure Output partial results with clear status indicator
Timeout approaching Output current findings with "PARTIAL" status
Fix manifest missing ERROR, cannot proceed without manifest
Review report missing ERROR, cannot proceed without review
All fixes failed Report failure, include rollback details
Verification tool unavailable Skip verification, warn in output
Git operations fail Report error, manual intervention needed