# Issue #477 - Complete Planning Package ## Executive Summary This package contains comprehensive documentation for fixing issue #477: **"Installer asks configuration questions during update instead of using existing settings"** **Current Status**: Planning Phase Complete **Branch**: `fix/477-installer-update-config` **Estimated Effort**: 20 hours **Current Date**: 2025-01-15 --- ## Quick Navigation 1. **[IMPLEMENTATION-PLAN.md](./IMPLEMENTATION-PLAN.md)** - Detailed 7-phase implementation roadmap 2. **[TODO.md](./TODO.md)** - Actionable task list with priorities and dependencies 3. **[TEST-SPECIFICATIONS.md](./TEST-SPECIFICATIONS.md)** - Comprehensive test strategy 4. **[issue-desc-477.md](./issue-desc-477.md)** - Original issue context from GitHub --- ## Problem Statement ### What's Wrong When users run `npx bmad-method install` on an existing installation with a different version, the installer asks all configuration questions again instead of using the settings stored in `install-manifest.yaml`. ### Example ```bash # First installation (Fresh Install) $ npx bmad-method install ? Will the PRD be sharded? (Y/n) Y ? Will the Architecture be sharded? (Y/n) Y ? Document Organization Settings? (Y/n) Y [...installation proceeds...] ✓ Installation complete # Later: New version released (v4.36.2 → v4.39.2) $ npx bmad-method install ? Will the PRD be sharded? (Y/n) Y ← SHOULD NOT ASK! ? Will the Architecture be sharded? (Y/n) Y ← SHOULD NOT ASK! ? Document Organization Settings? (Y/n) Y ← SHOULD NOT ASK! [...should reuse answers from first install...] ``` ### Root Cause - The installer doesn't load the existing `install-manifest.yaml` file - Update detection logic is missing or not functional - No mechanism to pass cached config to question prompts - Questions are asked unconditionally for all installations ### Impact - **Frustration**: Users have to re-answer questions they answered before - **Inconsistency**: Contradicts documented behavior (update should be idempotent) - **Risk**: Users might answer differently and create inconsistent configurations - **Time**: Wastes user time on every update --- ## Solution Overview ### 5-Component Architecture 1. **Configuration Loader** - Reads `install-manifest.yaml` - Parses YAML safely with error handling - Caches configuration in memory - Gracefully handles missing/corrupted files 2. **Update Detection System** - Detects fresh install (no manifest → ask questions) - Detects update (manifest exists, different version → skip questions) - Detects reinstall (manifest exists, same version → skip questions) - Handles invalid/corrupted manifest → ask questions 3. **Question Skipping Logic** - Adds `isUpdate` flag to all prompt functions - Checks if configuration exists before prompting - Returns cached value if available - Falls back to prompting if needed 4. **Manifest Validation** - Validates manifest structure and fields - Ensures data integrity - Provides helpful error messages - Enables graceful fallback on errors 5. **Backward Compatibility** - Handles old manifest formats - Gracefully handles missing optional fields - Works with existing installations - No breaking changes --- ## Key Files to Modify | File | Type | Changes | Priority | | --------------------------------------------------- | ------ | ------------------------------------------------- | --------- | | `tools/cli/commands/install.js` | Modify | Add update detection, config loading, integration | 🔴 HIGH | | `tools/cli/lib/config.js` | Modify | Add manifest loading methods | 🔴 HIGH | | `tools/cli/installers/lib/core/installer.js` | Modify | Add detectInstallMode() method | 🔴 HIGH | | `tools/cli/installers/lib/core/manifest.js` | Modify | Add validation logic | 🟡 MEDIUM | | All prompt functions in `tools/cli/installers/lib/` | Modify | Add isUpdate flag and config params | 🔴 HIGH | | `tools/cli/lib/config-loader.js` | Create | New configuration loader class | 🟡 MEDIUM | --- ## Implementation Phases ### Phase 1: Code Analysis (2 hours) - Examine installer entry point - Map all configuration questions - Understand current manifest usage - **Dependency**: None ### Phase 2: Configuration Loading (3 hours) - Create configuration loader utility - Update manifest schema with validation - **Dependency**: Phase 1 ### Phase 3: Update Detection (3 hours) - Create update mode detector - Integrate config loading into install command - **Dependency**: Phase 2 ### Phase 4: Question Skipping (4 hours) - Map all question calls - Add isUpdate parameter to functions - Update install command to pass flags - **Dependency**: Phase 3 ### Phase 5: Manifest Validation (2 hours) - Implement validation logic - Add fallback logic for errors - **Dependency**: Phase 2 ### Phase 6: Integration & Testing (4 hours) - Create comprehensive test suite - Perform manual testing - Test backward compatibility - **Dependency**: Phase 5 ### Phase 7: Documentation & Release (2 hours) - Update README documentation - Add code comments - Create migration guide - **Dependency**: Phase 6 --- ## Success Criteria All of these must be met for the fix to be considered complete: - [ ] No configuration questions asked during update - [ ] Existing settings preserved from `install-manifest.yaml` - [ ] Version detection still works (shows update available) - [ ] Files properly updated without re-asking questions - [ ] All IDE configurations preserved - [ ] All expansion packs preserved - [ ] Backward compatible with existing installations - [ ] Graceful fallback on corrupted manifest - [ ] Comprehensive test coverage (unit + integration + e2e) - [ ] No performance degradation - [ ] Clear error messages when issues occur - [ ] Documentation updated --- ## Testing Strategy ### Test Coverage by Category **Unit Tests** (12 tests) - Configuration loader (4 tests) - Manifest validation (4 tests) - Update detection (2 tests) - Question skipping (2 tests) **Integration Tests** (8 tests) - Config loading integration (2 tests) - Question skipping integration (2 tests) - Invalid manifest handling (2 tests) - Backward compatibility (2 tests) **End-to-End Scenarios** (6 scenarios) - Fresh install - Update install - Reinstall - Invalid manifest recovery - IDE configuration preservation - Expansion packs preservation **Manual Tests** (8 scenarios) - Real fresh install - Real update install - Settings preservation verification - Large manifest handling - Corrupted manifest recovery - Upgrade from old version - Performance testing - CLI flag testing (future) --- ## Task Breakdown ### High Priority Tasks (Critical Path) 1. **Examine Install Command** (2h) - Read `tools/cli/commands/install.js` completely - Document how manifest path is determined - Find where questions are first asked 2. **Create Configuration Loader** (3h) - Create `tools/cli/lib/config-loader.js` - Implement manifest loading with error handling - Add caching mechanism 3. **Create Update Mode Detector** (3h) - Add `detectInstallMode()` method - Implement version comparison logic - Add comprehensive logging 4. **Integrate Config Loading** (2h) - Modify install command - Pass config to all handlers - Add debug logging 5. **Add Question Skipping** (4h) - Modify all prompt functions - Add isUpdate and config parameters - Implement skip logic ### Supporting Tasks 6. **Implement Manifest Validation** (2h) 7. **Create Comprehensive Tests** (4h) 8. **Manual Testing** (2h) 9. **Documentation Updates** (2h) 10. **Pull Request Creation** (1h) --- ## Risk Mitigation | Risk | Likelihood | Severity | Mitigation | | ------------------------ | ---------- | -------- | -------------------------------------------------- | | Break existing workflows | Low | High | Comprehensive backward compat tests before release | | Manifest corruption | Low | Critical | Validation logic, read-only during detection | | Performance impact | Very Low | Medium | Caching strategy, lazy loading, performance tests | | User confusion | Medium | Medium | Clear error messages, updated documentation | | Missing config cases | Medium | Medium | Exhaustive test scenarios covering all cases | --- ## Timeline & Effort Estimate ``` Phase 1: Analysis 2 hours |████ | Phase 2: Config Loading 3 hours |██████ | Phase 3: Update Detection 3 hours |██████ | Phase 4: Question Skipping 4 hours |████████ | Phase 5: Validation 2 hours |████ | Phase 6: Testing 4 hours |████████ | Phase 7: Documentation 2 hours |████ | ───────────────────────────────────────────────────────────── TOTAL: 20 hours |████████████████████ | ``` **Recommended Approach**: - Sprints of 2-4 hours each - Focus on one phase per session - Test immediately after each phase - Commit after each phase --- ## Getting Started ### Next Steps 1. **Open TODO.md** - Start with Phase 1, Task 1.1 - Follow checkboxes in order - Mark items complete as you go 2. **Refer to IMPLEMENTATION-PLAN.md** - Detailed guidance for each phase - Files to modify and code structure - Expected outcomes for each task 3. **Use TEST-SPECIFICATIONS.md** - Create tests before implementing - Follow TDD approach - Use test scenarios as acceptance criteria 4. **Maintain this Branch** - All work in `fix/477-installer-update-config` - Commit after each phase - Push when phase complete ### Useful Commands ```bash # Check current branch git branch --show-current # View changes made git status # View specific changes git diff tools/cli/commands/install.js # Run tests npm test -- test/unit/ --verbose # Create commit for phase git commit -m "feat(#477): Phase X - [phase-name]" # Push to remote git push origin fix/477-installer-update-config ``` --- ## Files in This Package ``` .patch/477/ ├── README.md ← This file ├── IMPLEMENTATION-PLAN.md ← Detailed 7-phase roadmap ├── TODO.md ← Actionable task list ├── TEST-SPECIFICATIONS.md ← Comprehensive test strategy ├── issue-desc-477.md ← Original GitHub issue context └── PLAN.md ← Original outline (superseded by above) ``` --- ## Contact & Questions If you have questions about: - **Implementation details**: See IMPLEMENTATION-PLAN.md - **Task breakdown**: See TODO.md - **Testing approach**: See TEST-SPECIFICATIONS.md - **Issue context**: See issue-desc-477.md --- ## Conclusion This is a straightforward fix with a well-defined scope and clear success criteria. The systematic approach (Phase 1-7) ensures thorough implementation with minimal risk of breaking existing functionality. Comprehensive testing and backward compatibility validation provide confidence in the solution. **Status**: Ready to begin Phase 1: Code Analysis **Start Time**: [When you begin implementation] **Estimated Completion**: [When you finish all phases]