modernize

Original🇺🇸 English
Translated

Brownfield Upgrade - Upgrade all dependencies and modernize the application while maintaining spec-driven control. Runs after Gear 6 for brownfield projects with modernize flag enabled. Updates deps, fixes breaking changes, improves test coverage, updates specs to match changes.

9installs
Added on

NPX Install

npx skill4agent add jschulte/claude-plugins modernize

Modernize (Brownfield Upgrade)

Optional Step after Gear 6 for Brownfield projects with
modernize: true
flag.
Estimated Time: 2-6 hours (depends on dependency age and breaking changes) Prerequisites: Gears 1-6 completed, 100% spec coverage established Output: Modern dependency versions, updated tests, synchronized specs

When to Use This Skill

Use this skill when:
  • Brownfield path with
    modernize: true
    flag set
  • Gears 1-6 are complete (specs established, gaps implemented)
  • Ready to upgrade all dependencies to latest versions
  • Want to modernize while maintaining spec-driven control
Trigger Conditions:
  • State file has
    path: "brownfield"
    AND
    modernize: true
  • Gear 6 (implement) is complete
  • User requested "Brownfield Upgrade" during Gear 1

What This Skill Does

Systematically upgrades the entire application to modern dependency versions:
  1. Detect Package Manager - npm, yarn, pnpm, pip, go mod, cargo, etc.
  2. Audit Current Versions - Document what's installed before upgrade
  3. Upgrade Dependencies - Use appropriate upgrade command for tech stack
  4. Run Tests - Identify breaking changes
  5. Fix Breaking Changes - Iteratively fix with spec guidance
  6. Update Specs - Synchronize specs with API/behavior changes
  7. Validate Coverage - Ensure tests meet 85%+ threshold
  8. Verify Specs Match - Run /speckit.analyze to confirm alignment

Process Overview

Phase 1: Pre-Upgrade Audit

Document current state:
bash
# Create upgrade baseline
cat package.json > .modernize/baseline-package.json

# Run tests to establish baseline
npm test > .modernize/baseline-test-results.txt

# Document current coverage
npm run test:coverage > .modernize/baseline-coverage.txt
Analyze upgrade scope:
bash
# Check for available updates
npm outdated > .modernize/upgrade-plan.txt

# Identify major version bumps (potential breaking changes)
# Highlight security vulnerabilities
# Note deprecated packages

Phase 2: Dependency Upgrade

Tech stack detection (from analysis-report.md):
For Node.js/TypeScript:
bash
# Update all dependencies
npm update

# Or for major versions:
npx npm-check-updates -u
npm install

# Check for security issues
npm audit fix
For Python:
bash
# Update all dependencies
pip install --upgrade -r requirements.txt
pip freeze > requirements.txt

# Or use pip-upgrader
pip-upgrade requirements.txt
For Go:
bash
# Update all dependencies
go get -u ./...
go mod tidy
For Rust:
bash
# Update dependencies
cargo update

# Check for outdated packages
cargo outdated

Phase 3: Breaking Change Detection

Run tests after upgrade:
bash
# Run full test suite
npm test

# Capture failures
npm test 2>&1 | tee .modernize/post-upgrade-test-results.txt

# Compare to baseline
diff .modernize/baseline-test-results.txt .modernize/post-upgrade-test-results.txt
Identify breaking changes:
  • TypeScript compilation errors
  • Test failures
  • Runtime errors
  • API signature changes
  • Deprecated method usage

Phase 4: Fix Breaking Changes (Spec-Guided)

For each breaking change:
  1. Identify affected feature:
    • Match failing test to feature spec
    • Determine which spec the code implements
  2. Review spec requirements:
    • What behavior SHOULD exist (from spec)
    • What changed in the upgrade
    • How to preserve spec compliance
  3. Fix with spec guidance:
    • Update code to work with new dependency
    • Ensure behavior still matches spec
    • Refactor if needed to maintain spec alignment
  4. Update tests:
    • Fix broken tests
    • Add tests for new edge cases from upgrade
    • Maintain 85%+ coverage threshold
  5. Verify spec alignment:
    • Behavior unchanged from user perspective
    • Implementation may change but spec compliance maintained

Phase 5: Spec Synchronization

Check if upgrades changed behavior:
Some dependency upgrades change API behavior:
  • Date formatting libraries (moment → date-fns)
  • Validation libraries (joi → zod)
  • HTTP clients (axios → fetch)
  • ORM updates (Prisma major versions)
If behavior changed:
  1. Update relevant feature spec to document new behavior
  2. Update acceptance criteria if needed
  3. Update technical requirements with new dependencies
  4. Run /speckit.analyze to validate changes
If only implementation changed:
  • No spec updates needed
  • Just update technical details (versions, file paths)

Phase 6: Test Coverage Improvement

Goal: Achieve 85%+ coverage on all modules
  1. Run coverage report:
    bash
    npm run test:coverage
  2. Identify gaps:
    • Modules below 85%
    • Missing edge case tests
    • Integration test gaps
  3. Add tests with spec guidance:
    • Each spec has acceptance criteria
    • Write tests to cover all criteria
    • Use spec success criteria as test cases
  4. Validate:
    bash
    npm run test:coverage
    # All modules should be 85%+

Phase 7: Final Validation

Run complete validation suite:
  1. Build succeeds:
    bash
    npm run build
    # No errors
  2. All tests pass:
    bash
    npm test
    # 0 failures
  3. Coverage meets threshold:
    bash
    npm run test:coverage
    # 85%+ on all modules
  4. Specs validated:
    bash
    /speckit.analyze
    # No drift, all specs match implementation
  5. Dependencies secure:
    bash
    npm audit
    # No high/critical vulnerabilities

Output

Upgrade Report (
.modernize/UPGRADE_REPORT.md
):
markdown
# Dependency Modernization Report

**Date**: {date}
**Project**: {name}

## Summary

- **Dependencies upgraded**: {X} packages
- **Major version bumps**: {X} packages
- **Breaking changes**: {X} fixed
- **Tests fixed**: {X} tests
- **New tests added**: {X} tests
- **Coverage improvement**: {before}% → {after}%
- **Specs updated**: {X} specs

## Upgraded Dependencies

| Package | Old Version | New Version | Breaking? |
|---------|-------------|-------------|-----------|
| react | 17.0.2 | 18.3.1 | Yes |
| next | 13.5.0 | 14.2.0 | Yes |
| ... | ... | ... | ... |

## Breaking Changes Fixed

1. **React 18 Automatic Batching**
   - Affected: User state management
   - Fix: Updated useEffect dependencies
   - Spec: No behavior change
   - Tests: Added async state tests

2. **Next.js 14 App Router**
   - Affected: Routing architecture
   - Fix: Migrated pages/ to app/
   - Spec: Updated file paths
   - Tests: Updated route tests

## Spec Updates

- Updated technical requirements with new versions
- Updated file paths for App Router migration
- No functional spec changes (behavior preserved)

## Test Coverage

- Before: 78%
- After: 87%
- New tests: 45 tests added
- All modules: ✅ 85%+

## Validation

- ✅ All tests passing
- ✅ Build successful
- ✅ /speckit.analyze: No drift
- ✅ npm audit: 0 high/critical
- ✅ Coverage: 87% (target: 85%+)

## Next Steps

Application is now:
- ✅ Fully modernized (latest dependencies)
- ✅ 100% spec coverage maintained
- ✅ Tests passing with high coverage
- ✅ Specs synchronized with implementation
- ✅ Ready for ongoing spec-driven development

Configuration in State File

The modernize flag is set during Gear 1:
json
{
  "path": "brownfield",
  "modernize": true,
  "metadata": {
    "modernizeRequested": "2024-11-17T12:00:00Z",
    "upgradeScope": "all-dependencies",
    "targetCoverage": 85
  }
}

When Modernize Runs

In Cruise Control:
  • Automatically runs after Gear 6 if
    modernize: true
In Manual Mode:
  • Skill becomes available after Gear 6 completes
  • User explicitly invokes:
    /stackshift.modernize
    or skill auto-activates

Success Criteria

Modernization complete when:
  • ✅ All dependencies updated to latest stable versions
  • ✅ All tests passing
  • ✅ Test coverage ≥ 85% on all modules
  • ✅ Build successful (no compilation errors)
  • ✅ /speckit.analyze shows no drift
  • ✅ No high/critical security vulnerabilities
  • ✅ Specs updated where behavior changed
  • ✅ Upgrade report generated

Benefits of Brownfield Upgrade

vs. Standard Brownfield:

  • Modern dependencies (not stuck on old versions)
  • Security updates (latest patches)
  • Performance improvements (newer libraries often faster)
  • New features (latest library capabilities)
  • Reduced technical debt (no old dependencies)

vs. Greenfield:

  • Faster (upgrade vs. rebuild)
  • Lower risk (incremental changes vs. rewrite)
  • Spec-guided (specs help fix breaking changes)
  • Keeps working code (only changes dependencies)

Use Case:

Perfect for teams that want to modernize without full rewrites. Get the benefits of modern tooling while maintaining existing features.

Technical Approach

Spec-Driven Upgrade Strategy

  1. Specs as Safety Net:
    • Every feature has acceptance criteria
    • Run tests against specs after each upgrade
    • If tests fail, specs guide the fix
  2. Incremental Upgrades:
    • Upgrade in phases (minor first, then majors)
    • Run tests after each phase
    • Rollback if too many failures
  3. Coverage as Quality Gate:
    • Must maintain 85%+ throughout upgrade
    • Add tests for new library behaviors
    • Ensure edge cases covered
  4. Spec Synchronization:
    • If library changes behavior, update spec
    • If implementation changes, update spec
    • /speckit.analyze validates alignment

Result: A fully modernized application under complete spec-driven control!