Agent skill

qa-refactoring

Safe refactoring with behavior preservation. Use when reducing technical debt, applying strangler migrations, or tightening CI guardrails.

Stars 50
Forks 11

Install this agent skill to your Project

npx add-skill https://github.com/vasilyu1983/AI-Agents-public/tree/main/frameworks/shared-skills/skills/qa-refactoring

SKILL.md

QA Refactoring Safety

Use this skill to refactor safely: preserve behavior, reduce risk, and keep CI green while improving maintainability and delivery speed.

Defaults: baseline first, smallest safe step next, and proof via tests/contracts/observability instead of intuition.

Quick Start (10 Minutes)

  • If key context is missing, ask for: what must not change (invariants), risk level (money/auth/migrations/concurrency), deployment constraints, and the smallest boundary that can be protected by tests.
  • Confirm baseline: main green; reproduce the behavior you must preserve.
  • Choose a boundary: API surface, module boundary, DB boundary, or request handler.
  • Add a safety net: characterization/contract/integration tests at that boundary.
  • Refactor in micro-steps: one behavior-preserving change per commit/PR chunk.
  • Prove: run the smallest relevant suite locally, then full CI; keep failures deterministic.

Core QA (Default)

Safe Refactor Loop (Behavior First)

  • Establish baseline: get main green; reproduce the behavior you must preserve.
  • Define invariants: inputs/outputs, error modes, permissions, data shape, performance budgets.
  • Add a safety net: write characterization/contract/integration tests around the boundary you will touch.
  • Create seams: introduce injection points/adapters to isolate side effects and external dependencies.
  • Refactor in micro-steps: one behavior-preserving change at a time; keep diffs reviewable.
  • Prove: run the smallest relevant suite locally, then full CI; keep failures debuggable and deterministic.
  • Ship safely: use canary/dark launch/feature flags when refactors touch production-critical paths.

Risk Levels (Choose Safety Net)

Risk Examples Minimum required safety net
Low rename, extract method, formatting-only unit tests + lint/type checks
Medium moving logic across modules, dependency inversion unit + integration/contract tests at boundary
High auth/permission paths, concurrency, migrations, money/data-loss paths integration + contract tests, observability checks, canary + rollback plan

Test Strategy for Refactors

  • Prefer contract and integration tests around boundaries to preserve behavior.
  • Use snapshots/golden masters only when outputs are stable and reviewed (avoid "approve everything" loops).
  • For invariants, consider property-based tests or table-driven cases (inputs, edge cases, error modes).
  • Avoid making E2E/UI tests the primary safety net for refactors; keep most safety below the UI.
  • For flaky areas: fix determinism first (seeds, time, ordering, network) before trusting results.

CI Economics and Debugging Ergonomics

  • Keep refactor PRs small and reviewable; avoid refactor + feature in one PR.
  • Require failure artifacts for tests guarding refactors (logs, trace IDs, deterministic seeds, repro steps).
  • Reduce diff noise: isolate formatting-only changes (or apply formatting repo-wide once with buy-in).
  • Keep git bisect viable: avoid mixed "mechanical + semantic" changes unless necessary.

Do / Avoid

Do:

  • Add missing tests before refactoring high-risk areas.
  • Add guardrails (linters, type checks, contract checks, static analysis/security checks) so refactors don't silently break interfaces.
  • Prefer "branch by abstraction" / adapters when you need to swap implementations safely.

Avoid:

  • Combining large structural refactors with behavior changes.
  • Using flaky E2E as the primary safety net for refactors.

Quick Reference

Task Tool/Pattern Command/Approach When to Use
Long method (>50 lines) Extract Method Split into smaller functions Single method does too much
Large class (>300 lines) Split Class Create focused single-responsibility classes God object doing too much
Duplicated code Extract Function/Class DRY principle Same logic in multiple places
Complex conditionals Replace Conditional with Polymorphism Use inheritance/strategy pattern Switch statements on type
Long parameter list Introduce Parameter Object Create DTO/config object Functions with >3 parameters
Legacy code modernization Characterization Tests + Strangler Fig Write tests first, migrate incrementally No tests, old codebase
Automated quality gates ESLint, SonarQube, Prettier npm run lint, CI/CD pipeline Prevent quality regression
Technical debt tracking SonarQube, CodeClimate Track trends + hotspots Prioritize refactoring work

Decision Tree: Refactoring Strategy

text
Code issue: [Refactoring Scenario]
    ├─ Code Smells Detected?
    │   ├─ Duplicated code? → Extract method/function
    │   ├─ Long method (>50 lines)? → Extract smaller methods
    │   ├─ Large class (>300 lines)? → Split into focused classes
    │   ├─ Long parameter list? → Parameter object
    │   └─ Feature envy? → Move method closer to data
    │
    ├─ Legacy Code (No Tests)?
    │   ├─ High risk? → Write characterization tests first
    │   ├─ Large rewrite needed? → Strangler Fig (incremental migration)
    │   ├─ Unknown behavior? → Characterization tests + small refactors
    │   └─ Production system? → Canary deployments + monitoring
    │
    ├─ Quality Standards?
    │   ├─ New project? → Setup linter + formatter + quality gates
    │   ├─ Existing project? → Add pre-commit hooks + CI checks
    │   ├─ Complexity issues? → Set cyclomatic complexity limits (<10)
    │   └─ Technical debt? → Track in register, 20% sprint capacity

Related Skills

  • Debugging production issues: qa-debugging
  • Code review process and checklists: software-code-review
  • New architecture design from scratch: software-architecture-design
  • Test strategy and coverage planning: qa-testing-strategy

Scope Boundaries (Handoffs)

  • Pure test flake cleanup (timers, ordering, retries): ../qa-debugging/SKILL.md
  • Pure performance tuning (SQL, indexing, query plans): ../data-sql-optimization/SKILL.md
  • Architecture redesign decisions (service boundaries, eventing): ../software-architecture-design/SKILL.md

Operational Deep Dives

Shared Foundation

  • ../software-clean-code-standard/references/clean-code-standard.md - Canonical clean code rules (CC-*) for citation
  • Legacy playbook: ../software-clean-code-standard/references/code-quality-operational-playbook.md - RULE-01RULE-13, decision trees, and operational procedures
  • ../software-clean-code-standard/references/refactoring-operational-checklist.md - Refactoring smell-to-action mapping, safe refactoring guardrails
  • ../software-clean-code-standard/references/working-effectively-with-legacy-code-operational-checklist.md - Seams, characterization tests, incremental migration patterns

Skill-Specific

See references/operational-patterns.md for detailed refactoring catalogs, automated quality gates, technical debt playbooks, and legacy modernization steps.

Templates

Use copy-paste templates in assets/ for checklists and quality-gate configs:

  • Refactoring: assets/process/refactoring-checklist.md, assets/process/code-review-quality.md
  • Technical debt: assets/tracking/tech-debt-register.md
  • Quality gates: assets/quality-gates/javascript/eslint-config.js, assets/quality-gates/platform-agnostic/sonarqube-setup.md

Resources

Use deep-dive guides in references/ (load only what you need):

  • Operational Patterns: references/operational-patterns.md - Core refactoring catalogs, quality gates, and legacy modernization
  • Refactoring Catalog: references/refactoring-catalog.md
  • Code Smells Guide: references/code-smells-guide.md
  • Technical Debt Management: references/tech-debt-management.md
  • Legacy Code Modernization: references/legacy-code-strategies.md
  • Characterization Testing: references/characterization-testing.md - Golden master and approval testing patterns
  • Strangler Fig Migration: references/strangler-fig-migration.md - Incremental legacy migration strategies
  • Automated Refactoring Tools: references/automated-refactoring-tools.md - Codemods, AST transforms, and IDE refactoring

Optional: AI / Automation

Do:

  • Use AI to propose mechanical refactors (rename/extract/move) only when you can prove behavior preservation via tests and contracts.
  • Use AI to summarize diffs and risk hotspots; verify by running targeted characterization tests.
  • Prefer tool-assisted refactors (IDE/compiler-aware, codemods) over freeform text edits when available.

Avoid:

  • Accepting refactors that change behavior without an explicit requirement and regression tests.
  • Letting AI "fix tests" by weakening assertions to make CI green.

See data/sources.json for curated external references.

Fact-Checking

  • Use web search/web fetch to verify current external facts, versions, pricing, deadlines, regulations, or platform behavior before final answers.
  • Prefer primary sources; report source links and dates for volatile information.
  • If web access is unavailable, state the limitation and mark guidance as unverified.

Expand your agent's capabilities with these related and highly-rated skills.

vasilyu1983/AI-Agents-public

software-localisation

Production-grade i18n/l10n for React, Vue, Angular, and Next.js with ICU format and RTL support. Use when setting up or debugging localisation.

50 11
Explore
vasilyu1983/AI-Agents-public

ops-nuke-cicd

Design, implement, and troubleshoot NUKE-based CI/CD pipelines for .NET services with fast local-to-CI feedback loops. Use when creating or refactoring `nuke/Build.cs` target graphs, tuning `DependsOn`/`After`/`Triggers`/`OnlyWhenDynamic` behavior, orchestrating unit/API/DB test categories, merging and publishing coverage and test reports, building and pushing Docker images with traceable tags and digests, producing artifact contracts such as `deploy.env`, and diagnosing flaky or slow pipeline execution. For service code changes use $software-csharp-backend, for NUnit fixture design use $qa-testing-nunit, and for safe logging rewrites use $dev-structured-logs.

50 11
Explore
vasilyu1983/AI-Agents-public

qa-debugging

Systematic debugging for crashes, regressions, flakes, and production bugs. Use when diagnosing stack traces, logs, traces, or profiling data.

50 11
Explore
vasilyu1983/AI-Agents-public

ai-llm

Full LLM lifecycle skill — strategy selection, PEFT/LoRA, evaluation, and deployment. Use when building, fine-tuning, or operating LLM systems.

50 11
Explore
vasilyu1983/AI-Agents-public

qa-testing-playwright

E2E web testing with Playwright. Use when writing tests, debugging flakes, or setting up CI with selectors, sharding, and network mocking.

50 11
Explore
vasilyu1983/AI-Agents-public

software-frontend

Production-grade frontend for Next.js, Vue, Angular, and Svelte. Use when building UI, fixing hydration errors, or setting up a new web project.

50 11
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results