SkillAgentSearch skills...

cm-reactor

Strategic codebase re-direction when requirements change, architecture doesn't fit, or tech debt blocks progress. TRIZ-powered pivot protocol for large codebases.

Install / Use

npx skills add tody-agent/codymaster

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

69/100

Supported Platforms

Universal

name: cm-reactor description: "Strategic codebase re-direction when requirements change, architecture doesn't fit, or tech debt blocks progress. TRIZ-powered pivot protocol for large codebases."

Reactor — Strategic Codebase Re-direction

When the code works but the direction is wrong, you don't debug — you REACT. TRIZ-powered protocol for pivoting large codebases without losing stability.

When to Use

ALWAYS when:

  • Requirements changed significantly after code was built
  • Architecture no longer fits the problem (wrong patterns, wrong abstractions)
  • 3+ patches on the same area — symptom of structural mismatch
  • Tech debt blocks new feature development
  • "We need to rewrite X" — STOP. Use this skill first.
  • Migrating from one framework/library/pattern to another
  • Post-mortem reveals systemic issues needing strategic change

Skip when:

  • Simple bug fix → use cm-debugging
  • Routine refactoring (extract method, rename) → use cm-clean-code
  • New project from scratch → use cm-project-bootstrap
  • Small scope change (< 5 files affected) → just refactor directly

The Iron Law

NO REWRITE WITHOUT REACTOR ANALYSIS FIRST

Rewrites fail 70% of the time. Incremental strategic migration succeeds 90% of the time.

TRIZ Principles Applied

| # | Principle | How Applied | |---|-----------|-------------| | #35 | Parameter Change | Change the fundamental parameter (language, pattern, architecture) — not the symptom | | #28 | Mechanics Substitution | Replace one mechanism with a more effective one (OOP → FP, REST → GraphQL, etc.) | | #13 | The Other Way Around | Instead of adapting new code to old architecture, adapt old architecture to new requirements | | #25 | Self-Service | Design the migration so each component can migrate independently | | #1 | Segmentation | Break monolithic change into independent migration units | | #10 | Prior Action | Prepare the codebase (interfaces, adapters) BEFORE the actual migration |

The 5-Phase Process

Phase 1: ASSESS    → Understand what's wrong and why (not just symptoms)
Phase 2: MAP       → Trace all dependencies and blast radius
Phase 3: DESIGN    → Plan the migration path with strangler fig pattern
Phase 4: EXECUTE   → Migrate incrementally, one unit at a time
Phase 5: VERIFY    → Confirm direction is correct + clean up old code

Phase 1: ASSESS — Identify the Contradiction

Goal: Find the TRIZ contradiction — what do we WANT vs what BLOCKS us?

  1. State the current direction:

    Current: We built [X architecture/pattern/structure]
    Problem: It doesn't support [Y requirement/scale/use case]
    
  2. Identify the contradiction:

    We WANT: [desired capability]
    But: [current architecture] prevents it because [technical reason]
    
    TRIZ Contradiction:
    Improving [parameter A] worsens [parameter B]
    Example: "Improving modularity worsens performance"
            "Improving flexibility worsens type safety"
    
  3. Define the Ideal Final Result (IFR):

    The system ITSELF [achieves the goal]
    WITHOUT [the current blocking factor]
    WHILE maintaining [what currently works well]
    
  4. Scope assessment:

    Files affected: [count from codeintell or grep]
    Components affected: [list]
    Tests affected: [count]
    External API changes: [yes/no — breaking change?]
    Estimated effort: [S/M/L/XL]
    Risk level: [Low/Medium/High/Critical]
    

Phase 2: MAP — Dependency Analysis

Goal: Know exactly what touches what before changing anything.

  1. Use Code Intelligence (if available):

    codegraph_impact("target_symbol", depth=3)
    → Shows all callers, dependencies, affected files
    
    codegraph_context("target_module")
    → Shows architecture around the area
    
  2. Manual mapping (if codegraph unavailable):

    grep -rn "import.*{module}" src/
    grep -rn "{function_name}" src/
    → Build dependency tree manually
    
  3. Categorize files by migration priority:

    | Category | Description | Action | |----------|-------------|--------| | Core | The files that MUST change for the new direction | Migrate first | | Dependent | Files that import/use Core files | Migrate after Core, use adapters | | Peripheral | Files loosely connected | Migrate last or leave untouched | | Dead | Files no longer needed after migration | Flag for deletion in Phase 5 |

  4. Output: Migration Map Document

    ## Migration Map: [Initiative Name]
    
    ### Core (must change): [N files]
    - file_a.ts → [what changes]
    - file_b.ts → [what changes]
    
    ### Dependent (affected): [N files]
    - file_c.ts → [how affected]
    
    ### Peripheral (optional): [N files]
    - file_d.ts → [minimal change]
    
    ### Dead (remove after): [N files]
    - old_module.ts → DELETE after migration complete
    

Phase 3: DESIGN — Strangler Fig Migration

Goal: Design an incremental migration path — NEVER big-bang rewrite.

Strangler Fig Pattern (TRIZ #10 Prior Action):

1. Create NEW structure alongside OLD structure
2. Route NEW traffic/calls to NEW structure
3. Gradually migrate OLD consumers to NEW structure
4. Remove OLD structure when no longer used

Migration design template:

## Migration Path

### Step 1: Create Adapter Layer
- [ ] Create interface/abstraction that both old and new code satisfy
- [ ] All consumers now use the adapter, not direct implementation

### Step 2: Build New Implementation
- [ ] New code behind the adapter — can be tested independently
- [ ] Feature flag or config switch between old/new

### Step 3: Gradual Cut-over
- [ ] Migrate consumers one-by-one to new implementation
- [ ] Each migration is a separate commit/PR
- [ ] Tests pass at EVERY step (never break green)

### Step 4: Clean up (→ triggers cm-clean-code)
- [ ] Remove old implementation
- [ ] Remove adapter layer (if no longer needed)
- [ ] Remove feature flag
- [ ] Update documentation

Rules:

  • Never break the build at any step
  • Each step MUST be independently deployable
  • Tests must pass at every intermediate state
  • If any step fails → STOP, don't cascade

Phase 4: EXECUTE — Incremental Migration

Goal: Execute migration plan step by step with quality gates.

Use cm-execution Mode A (Batch) or Mode E (TRIZ-Parallel):

For each migration step:
  1. Write/update tests FIRST (cm-tdd)
  2. Implement the change
  3. Run full test suite
  4. Commit with clear message: "reactor: [step description]"
  5. If tests fail → STOP, diagnose, fix before next step
  
Progress tracking:
  → Update OpenSpec `tasks.md` and `cm-tasks.json` with each completed migration step
  → Update CONTINUITY.md with migration status

Commit convention:

reactor: create adapter layer for auth module
reactor: implement new auth service behind adapter
reactor: migrate login page to new auth
reactor: migrate signup page to new auth
reactor: remove old auth implementation
reactor: cleanup — remove adapter (direct usage now)

Phase 5: VERIFY & CLEAN

Goal: Confirm the new direction works AND trigger cm-clean-code.

  1. Direction verification:

    □ New architecture supports the originally blocked requirement
    □ Performance is equal or better
    □ All tests pass
    □ No regression in existing features
    □ Documentation updated
    
  2. Trigger cm-clean-code:

    After reactor completes → ALWAYS run cm-clean-code
    Reason: Migration leaves dead code, unused imports, stale references
    
  3. Record in CONTINUITY.md:

    Decision: Migrated [X] from [old pattern] to [new pattern]
    Rationale: [why — the TRIZ contradiction we resolved]
    Scope: module:[affected module]
    

Red Flags — STOP

| Thought | Reality | |---------|---------| | "Let's just rewrite everything" | Big-bang rewrites fail 70%+ of the time | | "It's faster to start from scratch" | You lose all edge-case handling and bug fixes | | "We don't need tests during migration" | Migration without tests = guaranteed regression | | "Let's change the direction AND add features" | One thing at a time. Direction first, features after | | "This adapter layer is extra work" | Adapter saves you from big-bang. It pays for itself | | "We can just search-and-replace" | Structural changes ≠ text changes |

Integration

| Skill | When | |-------|------| | cm-brainstorm-idea | UPSTREAM: Identifies need for direction change | | cm-codeintell | Phase 2: Dependency analysis via codegraph | | cm-planning | Phase 3: Formalize migration plan | | cm-execution | Phase 4: Execute migration steps | | cm-tdd | Phase 4: Tests before each migration step | | cm-clean-code | Phase 5: MANDATORY cleanup after reactor | | cm-debugging | If migration introduces bugs | | cm-continuity | Record direction decisions |

Lifecycle Position

cm-brainstorm-idea → cm-reactor → cm-planning → cm-execution → cm-clean-code
     (analyze)       (redirect)     (plan)        (build)        (hygiene)

The Bottom Line

Don't rewrite. React. Migrate incrementally. Clean up after. Every step must pass tests.

Related Skills

View on GitHub
GitHub Stars0
CategoryDevelopment
UpdatedNaNy ago
Forks0

Security Score

68/100

Audited on Invalid Date

2 medium1 low