apply-qa-fixes

Systematically consume QA quality gate outputs and apply prioritized fixes for issues identified during quality review.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "apply-qa-fixes" with this command: npx skills add adolfoaranaes12/bmad-enhanced/adolfoaranaes12-bmad-enhanced-apply-qa-fixes

Apply QA Fixes

Systematically consume QA quality gate outputs and apply prioritized fixes for issues identified during quality review.

Purpose

After Quinn's quality review creates a quality gate with CONCERNS or FAIL status, this skill enables James to systematically consume the findings and apply fixes in a deterministic, prioritized manner.

Core Principles:

  • Deterministic prioritization - Always same priority order (high severity → NFR failures → coverage gaps)

  • Minimal changes - Fix exactly what's in the gate, don't over-engineer

  • Validation loop - Always run tests after fixes, iterate until clean

  • Observability - Track all fixes applied, tests added, coverage improvement

Integration:

  • Input: Quality gate YAML + assessment reports from Quinn

  • Processing: Parse findings → Build fix plan → Apply fixes → Validate

  • Output: Fixed code + updated task file + telemetry

When to Use This Skill

This skill should be used when:

  • Quality gate status is CONCERNS or FAIL

  • Quinn has identified specific issues requiring fixes

  • Task is in Review status with completed implementation

This skill should NOT be used when:

  • Quality gate is PASS (no fixes needed)

  • Quality gate is WAIVED (intentionally accepted)

  • Task implementation is incomplete

  • Issues require architectural changes (escalate to user)

Prerequisites

  • Task file exists at .claude/tasks/{task-id}.md

  • Quality gate exists at .claude/quality/gates/{task-id}-gate-{date}.yaml

  • Assessment reports exist in .claude/quality/assessments/

  • bmad-commands skill available

  • Tests can be executed

Workflow

Step 0: Load Configuration and Quality Gate

Purpose: Load project configuration, locate task file, find latest quality gate, verify readiness.

Actions:

Load Configuration:

python .claude/skills/bmad-commands/scripts/read_file.py
--path .claude/config.yaml
--output json

Parse configuration to extract:

  • Quality directory paths

  • Test framework

  • Coverage thresholds

Load Task File:

python .claude/skills/bmad-commands/scripts/read_file.py
--path .claude/tasks/{task_id}.md
--output json

Verify task is ready for fixes:

  • Status is "Review" or "InProgress"

  • Implementation Record section exists

  • Quality Review section exists (from Quinn)

Locate Latest Quality Gate:

Search .claude/quality/gates/ for latest gate file:

  • Pattern: {task-id}-gate-{date}.yaml

  • Select most recent by date

  • Verify gate status is CONCERNS or FAIL

Load Quality Gate:

python .claude/skills/bmad-commands/scripts/read_file.py
--path .claude/quality/gates/{gate_file}
--output json

Parse gate YAML structure:

  • decision

  • Gate status (PASS/CONCERNS/FAIL/WAIVED)

  • overall_score

  • Quality score (0-100)

  • dimensions

  • Quality dimension scores

  • top_issues

  • High/medium/low severity issues

  • nfr_validation

  • NFR assessment results

  • trace

  • Traceability gaps

  • test_design

  • Test coverage gaps

  • action_items

  • Recommended actions

Halt if:

  • Configuration missing

  • Task file not found

  • Quality gate not found

  • Gate status is PASS or WAIVED (no fixes needed)

See: references/templates.md for gate schema and configuration format

Step 1: Parse QA Findings

Purpose: Extract all issues from quality gate and assessment reports.

Actions:

Parse Top Issues from Gate:

From gate.yaml :

top_issues:

  • id: "SEC-001" category: "security" severity: "high" description: "Missing input validation on user endpoint" location: "src/api/user.ts:45" recommendation: "Add Joi validation schema"

Categorize by severity:

  • High severity - Security vulnerabilities, data loss risks, critical bugs

  • Medium severity - Performance issues, reliability concerns, code quality

  • Low severity - Minor improvements, style issues, warnings

Parse NFR Failures:

From gate.nfr_validation :

nfr_validation: security: status: "FAIL" score: 45 concerns: - "Missing SQL parameterization (src/db/queries.ts:23)" - "No rate limiting on API endpoints"

Extract:

  • FAIL statuses (must fix)

  • CONCERNS (should fix)

  • Specific locations and recommendations

Parse Test Coverage Gaps:

From gate.test_design.coverage_gaps :

coverage_gaps:

  • ac_id: "AC2" description: "User authentication flow" missing_tests:

    • "Should reject invalid credentials"
    • "Should handle expired tokens"

Parse Traceability Gaps:

From gate.trace.ac_gaps :

ac_gaps:

  • ac_id: "AC4" description: "Secure password storage" coverage: "partial" missing: ["bcrypt hashing not implemented"]

Outputs:

  • high_severity_issues[]

  • List of high severity issues with locations

  • medium_severity_issues[]

  • List of medium severity issues

  • low_severity_issues[]

  • List of low severity issues

  • nfr_failures[]

  • NFR FAIL statuses with fixes needed

  • nfr_concerns[]

  • NFR CONCERNS with recommended fixes

  • coverage_gaps[]

  • Test scenarios to add

  • trace_gaps[]

  • Uncovered acceptance criteria

See: references/templates.md for full gate schema and parsing examples

Step 2: Build Fix Plan (Priority Order)

Purpose: Create deterministic, prioritized fix plan ensuring critical issues addressed first.

Priority Rules:

  • Priority 1: High Severity Issues (security, data loss, critical bugs)

  • Priority 2: NFR Failures (status = FAIL)

  • Priority 3: Test Coverage Gaps (P0 scenarios from test-design)

  • Priority 4: NFR Concerns (status = CONCERNS)

  • Priority 5: Traceability Gaps (uncovered ACs)

  • Priority 6: Medium Severity Issues

  • Priority 7: Low Severity Issues

Within Same Priority:

  • Security > Performance > Reliability > Maintainability

  • Alphabetical by issue ID

Actions:

Build Priority List:

fix_plan = [ // Priority 1: High severity { priority: 1, issue_id: "SEC-001", type: "security", ... }, { priority: 1, issue_id: "SEC-002", type: "security", ... },

// Priority 2: NFR failures { priority: 2, issue_id: "NFR-SEC-001", type: "nfr_fail", ... },

// Priority 3: Coverage gaps { priority: 3, issue_id: "TEST-001", type: "coverage_gap", ac_id: "AC2", ... },

// ... continue for all priorities ]

Calculate Impact:

For each fix, estimate:

  • Files to modify

  • Diff lines expected

  • Tests to add

  • Total effort

Check Guardrails:

Verify fix plan doesn't exceed James's guardrails:

  • Max 10 files per fix session

  • Max 800 diff lines

  • If exceeded, split into multiple fix sessions or escalate

Present Fix Plan to User:

=== Fix Plan ===

Total Issues: 15

Priority 1 (High Severity): 3 issues

  • SEC-001: Missing input validation (src/api/user.ts)
  • SEC-002: SQL injection risk (src/db/queries.ts)
  • PERF-001: N+1 query issue (src/services/data.ts)

Priority 2 (NFR Failures): 2 issues

  • NFR-SEC-001: No rate limiting
  • NFR-REL-001: Missing error logging

Priority 3 (Coverage Gaps): 5 tests to add

  • AC2: User authentication flow (2 tests)
  • AC4: Secure password storage (3 tests)

Estimated Impact:

  • Files to modify: 8
  • Tests to add: 5
  • Expected diff: ~600 lines

Proceed with fixes? (y/n)

Outputs:

  • fix_plan[]

  • Ordered list of fixes to apply

  • estimated_impact{}

  • Files, lines, tests

  • guardrail_check{}

  • Pass/fail status

See: references/priority-rules.md for detailed priority logic and references/examples.md for fix plan examples

Step 3: Apply Fixes

Purpose: Apply fixes from plan using bmad-commands primitives and Claude Code tools.

Actions:

For each fix in fix_plan (in priority order):

Load Affected Files:

Use Claude Code Read tool to load files needing modification:

Read: src/api/user.ts Read: tests/api/user.test.ts

Apply Code Fix:

Use Claude Code Edit tool to apply fix:

Edit: src/api/user.ts Old: const user = await db.query(SELECT * FROM users WHERE id = ${userId}) New: const user = await db.query('SELECT * FROM users WHERE id = ?', [userId])

Principles:

  • Minimal changes (fix exactly what's specified)

  • Follow project patterns (maintain consistency)

  • Add comments where needed (explain security fixes)

  • No over-engineering (don't refactor unrelated code)

Add Missing Tests:

Use Claude Code Write tool to add test files:

Write: tests/api/user-auth.test.ts Content: [Test scenarios from coverage_gaps]

Use Edit tool to add tests to existing files:

Edit: tests/api/user.test.ts Add tests for:

  • Should reject invalid credentials

  • Should handle expired tokens

Track Progress:

Update todo list as fixes applied:

✅ Fix 1/15: Added input validation (SEC-001) ✅ Fix 2/15: Added SQL parameterization (SEC-002) ⏳ Fix 3/15: Adding rate limiting middleware...

Error Handling:

If fix fails:

  • Log error with details

  • Skip to next fix

  • Report all failures at end

  • Allow user to review and retry

Outputs:

  • fixes_applied[]

  • List of successfully applied fixes

  • fixes_failed[]

  • List of failed fixes with errors

  • files_modified[]

  • All files changed

  • tests_added

  • Count of new tests

See: references/examples.md for fix application examples

Step 4: Validate

Purpose: Run tests and lint to verify fixes don't introduce regressions.

Actions:

Run Lint:

Lint check (exact command depends on project)

npm run lint

or

eslint src/

Capture output:

  • Errors count

  • Warnings count

  • Files with issues

Run Tests:

python .claude/skills/bmad-commands/scripts/run_tests.py
--path .
--framework auto
--output json

Parse results:

{ "success": true, "outputs": { "passed": true, "total_tests": 45, "tests_passed": 45, "tests_failed": 0, "coverage_percent": 89 } }

Check Coverage Improvement:

Compare before/after coverage:

  • Before: 82% (from quality gate)

  • After: 89%

  • Improvement: +7%

Iterate if Needed:

If tests fail:

  • Identify failing tests

  • Debug issues

  • Apply additional fixes

  • Re-run tests

  • Maximum 3 iterations before escalating

Halt if:

  • Tests still failing after 3 iterations

  • Lint errors can't be resolved

  • Coverage decreased (regression)

Outputs:

  • lint_passed

  • Boolean

  • tests_passed

  • Boolean

  • coverage_before

  • Number

  • coverage_after

  • Number

  • coverage_improvement

  • Number

  • validation_clean

  • Boolean

See: references/templates.md for validation report format

Step 5: Update Task File

Purpose: Update task Implementation Record with fix details.

STRICT PERMISSIONS:

AUTHORIZED to update:

  • Implementation Record section (what fixed, why, how)

  • File List (add/modified/deleted files)

  • Status (only if re-review needed: InProgress → Review)

NOT AUTHORIZED to update:

  • Objective

  • Acceptance Criteria

  • Context

  • Tasks

  • Quality Review section (that's Quinn's territory)

Actions:

Load Current Task File:

python .claude/skills/bmad-commands/scripts/read_file.py
--path .claude/tasks/{task_id}.md
--output json

Generate Fix Summary:

QA Fixes Applied (2025-01-15)

Quality Gate: .claude/quality/gates/{task-id}-gate-{date}.yaml Status Before: CONCERNS (72/100) Status After: Ready for re-review

Fixes Applied (15 total):

Priority 1 (High Severity):

  1. SEC-001: Added input validation (src/api/user.ts:45)
  2. SEC-002: Added SQL parameterization (src/db/queries.ts:23)
  3. PERF-001: Fixed N+1 query (src/services/data.ts:67)

Priority 2 (NFR Failures): 4. NFR-SEC-001: Added rate limiting middleware 5. NFR-REL-001: Added error logging and monitoring

Priority 3 (Coverage Gaps): 6-10. Added 5 missing tests for AC2, AC4

Priority 4-7: 11-15. Addressed medium/low severity issues

Validation Results:

  • ✅ Lint: 0 problems
  • ✅ Tests: 45/45 passed
  • ✅ Coverage: 82% → 89% (+7%)

Files Modified:

  • src/api/user.ts
  • src/db/queries.ts
  • src/services/data.ts
  • src/middleware/rate-limit.ts (new)
  • tests/api/user.test.ts
  • tests/api/user-auth.test.ts (new)
  • tests/db/queries.test.ts

Next Steps:

  • Ready for Quinn re-review: @quinn *review {task-id}

Update Implementation Record:

Use Edit tool to append fix summary to Implementation Record section:

Edit: .claude/tasks/{task-id}.md Section: Implementation Record Action: Append QA fix summary

Update File List:

Add newly created/modified files to task file list.

Update Status (if needed):

If fixes require re-review:

  • Status: Review (keep in review)

  • Or Status: InProgress → Review (if was moved out of review)

Outputs:

  • task_updated

  • Boolean

  • fix_summary

  • Markdown text

See: references/templates.md for task update template

Step 6: Emit Telemetry

Purpose: Track metrics for observability and learning.

Actions:

Emit structured telemetry:

{ "event": "skill.apply-qa-fixes.completed", "timestamp": "2025-01-15T10:30:00Z", "data": { "task_id": "task-001", "quality_gate": ".claude/quality/gates/task-001-gate-2025-01-15.yaml", "fixes_count": 15, "fixes_applied": { "high_severity": 3, "nfr_failures": 2, "coverage_gaps": 5, "nfr_concerns": 2, "medium_severity": 2, "low_severity": 1 }, "tests_added": 5, "coverage_before": 82, "coverage_after": 89, "coverage_improvement": 7, "files_modified": 7, "validation_passed": true, "duration_ms": 180000, "iterations": 1, "fixes_failed": 0 } }

Metrics to Track:

  • Fixes count by priority

  • Tests added

  • Coverage improvement

  • Files modified

  • Validation success

  • Duration

  • Iterations needed

  • Failed fixes

Use Cases:

  • Track most common QA issues

  • Identify patterns in fixes

  • Measure fix effectiveness

  • Monitor coverage improvement trends

  • Optimize fix prioritization

Execution Complete

Skill complete when:

  • ✅ Quality gate loaded and parsed

  • ✅ Fix plan built with deterministic prioritization

  • ✅ All prioritized fixes applied (or documented failures)

  • ✅ Tests added for coverage gaps

  • ✅ Validation clean (lint + tests pass)

  • ✅ Task file updated with fix summary

  • ✅ Telemetry emitted

Integration with James

James Routing:

In james-developer-v2.md

command: "*apply-qa-fixes"

routing_logic:

  • condition: "high_severity_count > 5 OR nfr_failures > 2" guardrails: max_files: 10 max_diff_lines: 800 require_user_confirmation: true

  • condition: "high_severity_count > 0 OR nfr_failures > 0" guardrails: max_files: 7 max_diff_lines: 600

  • condition: "default" guardrails: max_files: 5 max_diff_lines: 400

Usage:

After Quinn review creates gate with CONCERNS/FAIL

@james *apply-qa-fixes task-001

James:

✅ Quality gate loaded: CONCERNS (3 high, 2 medium issues)

✅ Fix plan created (5 fixes prioritized)

⏳ Applying fixes...

✅ All fixes applied

✅ Validation passed

✅ Task updated

Ready for re-review: @quinn *review task-001

Best Practices

  • Always validate after fixes - Don't skip test runs

  • Follow priority rules strictly - Ensures consistency

  • Minimal changes only - Fix what's specified, no more

  • Document all fixes - Update Implementation Record

  • Track failures - Log any fixes that can't be applied

  • Re-review after fixes - Always have Quinn re-assess

When to Escalate

Escalate to user when:

  • Fixes exceed guardrails (>10 files, >800 lines)

  • Fixes require architectural changes

  • Tests fail after 3 iterations

  • Security concerns arise during fixes

  • Breaking API changes required

  • Conflicting fixes (can't satisfy all issues)

References

  • references/templates.md

  • Gate schema, task update template, output formats

  • references/priority-rules.md

  • Detailed priority logic and decision rules

  • references/examples.md

  • Fix application examples and usage scenarios

Part of BMAD Enhanced Development Suite - Integrates with Quinn (Quality) for complete feedback loop

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

analyze-architecture

No summary provided by upstream source.

Repository SourceNeeds Review
General

document-project

No summary provided by upstream source.

Repository SourceNeeds Review
General

quality-gate

No summary provided by upstream source.

Repository SourceNeeds Review
General

nfr-assess

No summary provided by upstream source.

Repository SourceNeeds Review