refactoring workflow

Refactoring Workflow Skill

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 "refactoring workflow" with this command: npx skills add kaakati/rails-enterprise-dev/kaakati-rails-enterprise-dev-refactoring-workflow

Refactoring Workflow Skill

Systematic refactoring with tracking, validation, and completeness verification.

Quick Start

1. Record what you're refactoring

record_refactoring "Payment" "Transaction" "class_rename"

2. Update files, track progress

update_refactoring_progress "Payment" "app/models/transaction.rb"

3. Validate no old references remain

validate_refactoring "Payment" "Transaction"

  1. Refactoring Log Functions

record_refactoring()

Start refactoring by recording what's being changed:

record_refactoring() { local old_name=$1 local new_name=$2 local refactor_type=$3 # class_rename, attribute_rename, method_rename, table_rename

if [ -n "$TASK_ID" ] && command -v bd &> /dev/null; then bd comment $TASK_ID "🔄 Refactoring Log: $old_name → $new_name

Type: $refactor_type Started: $(date -u +"%Y-%m-%d %H:%M:%S UTC") Status: ⏳ In Progress

Changes Planned

  1. $(echo $refactor_type | sed 's/_/ /g'): `$old_name` → `$new_name`

Affected Files (Auto-detected)

```bash

Ruby files referencing old name

$(rg --files-with-matches "\b$old_name\b" --type ruby 2>/dev/null | head -20 || echo "None detected") ```

Validation Checklist

  • No references to `$old_name` in Ruby files
  • No references in view templates
  • No references in routes
  • No references in specs
  • No references in factories
  • Migration files checked (if applicable)" fi }

Examples:

record_refactoring "Payment" "Transaction" "class_rename"

record_refactoring "user_id" "account_id" "attribute_rename"

record_refactoring "payments" "transactions" "table_rename"

update_refactoring_progress()

Track progress as files are updated:

update_refactoring_progress() { local old_name=$1 local file_updated=$2

if [ -n "$TASK_ID" ] && command -v bd &> /dev/null; then bd comment $TASK_ID "✅ Refactoring Progress: Updated `$file_updated`

Old references to `$old_name` in this file have been updated.

Remaining files: $(rg --files-with-matches "\b$old_name\b" --type ruby 2>/dev/null | wc -l || echo "?")" fi }

validate_refactoring()

Validate all references have been updated:

validate_refactoring() { local old_name=$1 local new_name=$2

echo "🔍 Validating refactoring: $old_name → $new_name"

Check for remaining references

local remaining=$(rg --count "\b$old_name\b" --type ruby --type erb 2>/dev/null | wc -l)

if [ "$remaining" -gt 0 ]; then echo "❌ Refactoring validation failed" echo "Found $remaining files still referencing '$old_name':" rg --files-with-matches "\b$old_name\b" --type ruby --type erb 2>/dev/null

if [ -n "$TASK_ID" ] && command -v bd &> /dev/null; then
  bd update $TASK_ID --status blocked
fi

return 1

else echo "✅ Refactoring validation passed" echo "All references to '$old_name' successfully updated." return 0 fi }

  1. Complete Refactoring Workflow

Workflow Steps

  • Start: Record refactoring with record_refactoring()

  • Update: Update files incrementally, track with update_refactoring_progress()

  • Validate: Before phase completion, run validate_refactoring()

  • Fix: If validation fails, update remaining references

  • Re-validate: Run validation again until it passes

  • Complete: Only close task after validation passes

Example: Class Rename Workflow

Phase starts: Renaming Payment to Transaction

Step 1: Record refactoring

record_refactoring "Payment" "Transaction" "class_rename"

Step 2: Update model file

mv app/models/payment.rb app/models/transaction.rb

Update class name in file

sed -i 's/class Payment/class Transaction/g' app/models/transaction.rb update_refactoring_progress "Payment" "app/models/transaction.rb"

Step 3: Update associations in other models

... update files ...

update_refactoring_progress "Payment" "app/models/account.rb"

Step 4: Update controller

mv app/controllers/payments_controller.rb app/controllers/transactions_controller.rb

... update class name and references ...

update_refactoring_progress "Payment" "app/controllers/transactions_controller.rb"

Step 5: Update views, specs, factories, routes

... update all remaining files ...

Step 6: Validate completeness

validate_refactoring "Payment" "Transaction"

if [ $? -eq 0 ]; then echo "✅ Refactoring complete" else echo "❌ Refactoring incomplete, fix remaining references" fi

  1. Cross-Layer Impact Checklists

Class Rename Checklist

When renaming Payment → Transaction :

Ruby Layer:

  • Model class definition

  • Associations in other models (has_many :payments )

  • Controller class name

  • Controller instance variables (@payment )

  • Service class references

  • Job class references

  • Serializer references

  • String references (polymorphic: "Payment" )

View Layer:

  • View template paths (app/views/payments/ )

  • View helpers and form objects

  • Partials and layouts

Routes:

  • Route resources (resources :payments )

  • Named routes and path helpers

Tests:

  • Spec describe blocks

  • Factory definitions (:payment , :payments )

  • Fixtures (if used)

JavaScript/Frontend:

  • Stimulus controllers (payment_controller.js )

  • Stimulus class names (PaymentController )

  • data-controller attributes (data-controller="payment" )

  • data-action attributes (data-action="payment#submit" )

  • JavaScript imports and references

  • Event names (payment:updated )

  • Turbo frame IDs (#payment-form )

  • Importmap pins

I18n:

  • Locale keys (activerecord.models.payment )

Configuration:

  • Initializer references

  • Environment configs

Attribute Rename Checklist

When renaming user_id → account_id :

Database:

  • Migration (column rename)

  • Run migration: rails db:migrate

  • Verify in schema.rb

Model:

  • Attribute references

  • Validations

  • Associations (:foreign_key option)

  • Scopes and queries

Controller:

  • Strong params

Views:

  • Form fields

  • Display references

Tests:

  • Spec let statements

  • Factory attributes

API:

  • Serializer attributes

  • API documentation

JavaScript:

  • data-{controller}-{attr}-value attributes

  • Stimulus value definitions

I18n:

  • Attribute keys (activerecord.attributes.model.user_id )

Table Rename Checklist

When renaming payments → transactions :

  • Migration (table rename)

  • Run migration: rails db:migrate

  • Verify in schema.rb

  • Model table_name declaration (if explicit)

  • Foreign key constraints

  • Indexes

  • Raw SQL queries

  • Database views (if any)

JavaScript/Stimulus Refactoring Checklist

When renaming payment → transaction in frontend:

  • Controller file rename (payment_controller.js → transaction_controller.js )

  • Controller class name (PaymentController → TransactionController )

  • data-controller attributes in views

  • data-{controller}-target attributes

  • data-action attributes

  • JavaScript imports

  • Event names and dispatching

  • CSS class names that reference the controller

  • Turbo frame IDs

  • Importmap pins

Namespace/Module Move Checklist

When moving Services::Payment → Billing::Transaction :

  • File path (app/services/payment.rb → app/billing/transaction.rb )

  • Module/namespace declaration

  • All references to the old namespace

  • Autoload paths (if custom)

  • Spec file path

  • Factory namespace

  • Route namespace (if applicable)

  1. Intentional Legacy References

Create .refactorignore to exclude files from validation:

.refactorignore - Files to exclude from refactoring validation

Legacy compatibility layer

lib/legacy_api_adapter.rb

Historical documentation

CHANGELOG.md docs/migration_guide.md

Rename migrations (reference old names by design)

db/migrate/rename.rb

External API contracts (can't change)

app/serializers/api/v1/*_serializer.rb

  1. Integration with Beads

Refactoring workflow integrates with beads for:

  • Task Tracking: Creates comments for start, progress, completion

  • Status Updates: Sets task to blocked if validation fails

  • Audit Trail: Full history of what was changed and when

Set TASK_ID before starting refactoring

export TASK_ID="PROJ-123"

All functions will automatically log to beads

record_refactoring "Payment" "Transaction" "class_rename" update_refactoring_progress "Payment" "app/models/transaction.rb" validate_refactoring "Payment" "Transaction"

  1. Quick Reference

Function Purpose Example

record_refactoring

Start tracking record_refactoring "Old" "New" "class_rename"

update_refactoring_progress

Track file update update_refactoring_progress "Old" "path/file.rb"

validate_refactoring

Check completeness validate_refactoring "Old" "New"

Refactor Type Key Layers to Check

class_rename

Model, Controller, Views, Routes, Specs, JS

attribute_rename

Model, Controller params, Views, Specs, JS values

table_rename

Migration, Schema, Raw SQL

method_rename

All call sites, Specs

namespace_move

File paths, Autoloading, All references

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.

Coding

flutter conventions & best practices

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

ruby oop patterns

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

rails localization (i18n) - english & arabic

No summary provided by upstream source.

Repository SourceNeeds Review