--- name: modernize description: 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. --- # 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!