BMAD-METHOD/.patch/477/TODO.md

13 KiB

TODO - Issue #477 Implementation Tasks

Status: IMPLEMENTATION COMPLETE

Last Updated: 2025-10-26 Current Branch: fix/477-installer-update-config Completion: 8/8 Major Phases (All core implementation done) Test Results: 46/46 unit tests PASSING (100%)


Phase 1: Code Analysis (2 hours)

1.1 Examine Install Command Entry Point

  • File: tools/cli/commands/install.js
  • Tasks:
    • Read file completely and document flow
    • Identify how manifest path is determined
    • Find where questions are first asked
    • Determine how config flows through the system
  • Notes: This is the entry point for all installs
  • Priority: 🔴 HIGH - Blocks all other work
  • Blocked By: None
  • Blocks: 1.2, 1.3, 2.x, 3.x

1.2 Map All Configuration Questions

  • Files: tools/cli/installers/lib/**/*.js
  • Tasks:
    • Search for all .prompt() or .question() calls
    • Document each question with:
      • Location (file + line)
      • Question text
      • Configuration key it sets
      • How it's currently used
    • Create spreadsheet or table in docs
  • Notes: These are the points we need to skip on update
  • Priority: 🔴 HIGH - Needed for phase 4
  • Blocked By: 1.1
  • Blocks: 4.x

1.3 Understand Current Manifest Usage

  • Files:
    • tools/cli/installers/lib/core/manifest.js
    • All files that load/save manifest
  • Tasks:
    • How is manifest currently loaded?
    • When is it saved?
    • What data is stored?
    • How is it validated?
  • Notes: Need to understand existing pattern
  • Priority: 🔴 HIGH - Foundation for phase 2 & 5
  • Blocked By: 1.1
  • Blocks: 2.1, 5.1

Phase 2: Configuration Loading (3 hours)

2.1 Create Configuration Loader

  • New File: tools/cli/lib/config-loader.js
  • Tasks:
    • Create class ManifestConfigLoader
    • Add method loadManifest(manifestPath)
    • Add method getConfig(key, defaultValue)
    • Add method hasConfig(key)
    • Add error handling for missing/corrupt files
    • Add caching mechanism
    • Add debug logging
    • Write comprehensive documentation
  • Tests Created:
    • test/unit/config-loader.test.js
  • Priority: 🟡 MEDIUM - Core utility
  • Blocked By: 1.1, 1.3
  • Blocks: 3.2, 4.1

2.2 Update Manifest Schema Validation

  • File: tools/cli/installers/lib/core/manifest.js
  • Tasks:
    • Add method validateManifest(data)
    • Define required fields:
      • version
      • installed_at
      • install_type
    • Define optional fields:
      • ides_setup
      • expansion_packs
    • Add type validation
    • Add format validation (semver, ISO dates)
    • Return validation result with errors
    • Document schema
  • Tests Created:
    • test/unit/manifest-validation.test.js
  • Priority: 🟡 MEDIUM - Foundation for integrity
  • Blocked By: 1.3
  • Blocks: 5.1

Phase 3: Update Detection (3 hours)

3.1 Create Update Mode Detector

  • File: tools/cli/installers/lib/core/installer.js
  • Tasks:
    • Add method detectInstallMode(projectDir, manifestPath)
    • Implement detection logic:
      • Check if manifest exists
      • If no → return 'fresh'
      • Load manifest
      • If invalid → return 'invalid'
      • Compare versions (project vs manifest)
      • If different → return 'update'
      • If same → return 'reinstall'
    • Add comprehensive logging
    • Add error handling
    • Document return values
  • Tests Created:
    • test/unit/install-mode-detection.test.js
  • Priority: 🔴 HIGH - Core logic
  • Blocked By: 1.1, 1.3, 2.2
  • Blocks: 3.2, 4.1, 5.2

3.2 Integrate Config Loading into Install Command

  • File: tools/cli/commands/install.js
  • Tasks:
    • Import ManifestConfigLoader
    • Call detector after gathering project info
    • If update/reinstall: load previous config
    • Store config in context object
    • Pass context to all setup functions
    • Add logging of detected mode
    • Handle errors gracefully
  • Tests Created:
    • test/integration/install-config-loading.test.js
  • Priority: 🟡 MEDIUM - Integration point
  • Blocked By: 2.1, 3.1
  • Blocks: 4.1, 5.2

Phase 4: Question Skipping Logic (4 hours)

4.1 Map All Question Calls

  • Tasks:
    • Use results from 1.2 to create list
    • For each question, identify:
      • Function name and file
      • What config key it should use
      • How to skip it safely
      • What default to return
  • Priority: 🟡 MEDIUM - Prerequisite to 4.2
  • Blocked By: 1.2
  • Blocks: 4.2

4.2 Add isUpdate Parameter to Prompt Functions

  • Files: Each file identified in 4.1
  • For each question:
    • Add isUpdate parameter to function
    • Add config parameter to function
    • Add conditional logic:
      if (isUpdate && config.hasKey(...)) {
        return config.get(...);  // Skip question
      }
      // else ask question normally
      
    • Add debug logging
    • Update function signature documentation
    • Write unit tests
  • Tests Created:
    • test/unit/prompt-skipping.test.js
  • Priority: 🔴 HIGH - Main fix
  • Blocked By: 4.1, 2.1, 3.2
  • Blocks: None

4.3 Update Install Command to Pass Flags

  • File: tools/cli/commands/install.js
  • Tasks:
    • Get detected mode from 3.2
    • Set isUpdate flag based on mode
    • Pass isUpdate to all prompt-using functions
    • Pass config object to functions
    • Add logging of skipped questions
  • Tests Created:
    • test/integration/questions-skipped-on-update.test.js
  • Priority: 🔴 HIGH - Integration
  • Blocked By: 4.2
  • Blocks: 6.1

Phase 5: Manifest Validation (2 hours)

5.1 Implement Validation Logic

  • File: tools/cli/installers/lib/core/manifest.js
  • Tasks:
    • Complete implementation from 2.2
    • Test with valid manifests
    • Test with invalid manifests
    • Test with partial manifests
    • Create test fixtures
  • Tests Created:
    • All tests from 2.2 completed
    • Additional regression tests
  • Priority: 🟡 MEDIUM - Error handling
  • Blocked By: 2.2
  • Blocks: 5.2

5.2 Add Fallback Logic to Install Command

  • File: tools/cli/commands/install.js
  • Tasks:
    • Try to validate loaded manifest
    • If invalid:
      • Log warning
      • Treat as fresh install
      • Ask all questions
    • Add user-friendly error messages
    • Never corrupt existing manifest
  • Tests Created:
    • test/integration/invalid-manifest-fallback.test.js
  • Priority: 🟡 MEDIUM - Safety
  • Blocked By: 5.1, 3.2
  • Blocks: 6.1

Phase 6: Integration & Testing (4 hours)

6.1 Create Comprehensive Test Suite

  • Test Files to Create:
    • test/fixtures/manifests/ - Sample manifests
    • test/fixtures/projects/ - Mock projects
    • test/scenarios/ - End-to-end scenarios
  • Scenarios to Test:
    • 6.1.1 Fresh install (no manifest) → asks all questions
    • 6.1.2 Update install (version bump) → skips questions
    • 6.1.3 Reinstall (same version) → skips questions
    • 6.1.4 Invalid manifest → asks all questions
    • 6.1.5 IDE configurations preserved
    • 6.1.6 Expansion packs preserved
    • 6.1.7 Corrupt manifest file → graceful fallback
    • 6.1.8 Missing optional fields → uses defaults
    • 6.1.9 Old manifest format → backward compatible
  • Tests Created:
    • test/integration/e2e-fresh-install.test.js
    • test/integration/e2e-update-install.test.js
    • test/integration/e2e-reinstall.test.js
    • test/integration/e2e-invalid-manifest.test.js
    • test/integration/e2e-backward-compat.test.js
  • Priority: 🔴 HIGH - Validation of fix
  • Blocked By: 4.3, 5.2
  • Blocks: 6.2, 6.3

6.2 Manual Testing with Real Project

  • Tasks:
    • Create test installation
    • Verify config questions asked (fresh)
    • Update to newer version
    • Verify config questions NOT asked
    • Verify settings preserved
    • Test with different IDE configs
    • Test with expansion packs
  • Success Criteria:
    • No prompts on update
    • Settings intact after update
    • Version comparison works
  • Priority: 🟡 MEDIUM - Real-world validation
  • Blocked By: 6.1
  • Blocks: 6.3

6.3 Backward Compatibility Testing

  • Tasks:
    • Test with manifests from old versions
    • Test without IDE configuration field
    • Test without expansion_packs field
    • Verify graceful defaults applied
    • Ensure no data loss
  • Success Criteria:
    • All old manifests handled gracefully
    • No errors or crashes
    • Defaults applied appropriately
  • Priority: 🟡 MEDIUM - Safety
  • Blocked By: 6.1
  • Blocks: 7.1

Phase 7: Documentation & Release (2 hours)

7.1 Update README Documentation

  • File: tools/cli/README.md (or relevant install doc)
  • Tasks:
    • Document new update behavior
    • Add example of update vs fresh install
    • Explain question skipping
    • Document manifest preservation
    • Add troubleshooting section
  • Priority: 🟡 MEDIUM - User documentation
  • Blocked By: 6.2
  • Blocks: 7.3

7.2 Add Code Comments

  • Files: All modified files
  • Tasks:
    • Document all new methods
    • Explain update detection logic
    • Explain question skipping mechanism
    • Add examples in comments
  • Priority: 🟡 MEDIUM - Code maintainability
  • Blocked By: 6.1
  • Blocks: None

7.3 Create Migration Guide

  • New File: .patch/477/MIGRATION-GUIDE.md
  • Content:
    • Explain issue that was fixed
    • Show new expected behavior
    • Guide users through update process
    • Troubleshooting for issues
    • How to force reconfiguration if needed
  • Priority: 🟡 MEDIUM - User guidance
  • Blocked By: 7.1
  • Blocks: 8.1 (PR creation)

Phase 8: Pull Request & Cleanup (1 hour)

8.1 Create Pull Request

  • Tasks:
    • Commit all changes to fix/477-installer-update-config
    • Write comprehensive PR description
    • Reference issue #477
    • List all files changed
    • Link to test results
    • Mention backward compatibility
  • Priority: 🔴 HIGH - Final step
  • Blocked By: 7.2
  • Blocks: None

8.2 Code Review Preparation

  • Tasks:
    • Self-review all changes
    • Verify tests pass
    • Check for console logs/debug code
    • Verify error handling
    • Check performance impact
  • Priority: 🟡 MEDIUM - Quality gate
  • Blocked By: 8.1
  • Blocks: None

Test Categories Summary

Unit Tests (12 tests)

  • Config loader functionality (4 tests)
  • Manifest validation (4 tests)
  • Update detection logic (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 Tests (5 scenarios)

  • Fresh install
  • Update install
  • Reinstall
  • Invalid manifest recovery
  • Configuration preservation

Manual Tests (8 scenarios)

  • Real fresh install
  • Real update
  • IDE config preservation
  • Expansion pack preservation
  • Old manifest compatibility
  • Corrupted manifest handling
  • Missing optional fields
  • Large manifest files

Risk Assessment

Risk Probability Impact Mitigation
Breaking existing workflows Low High Comprehensive backward compat tests
Manifest corruption on error Low Critical Validation before read/write, backups
Performance degradation Very Low Medium Caching, lazy loading
User confusion Medium Medium Clear documentation, logs
Missing configuration cases Medium Medium Exhaustive test scenarios

Dependencies & Blockers

Phase 1 (1.1, 1.2, 1.3)
    ↓
Phase 2 (2.1, 2.2)  ← Phase 1
    ↓
Phase 3 (3.1, 3.2)  ← Phase 2
    ↓
Phase 4 (4.1, 4.2, 4.3)  ← Phase 3
    ↓
Phase 5 (5.1, 5.2)  ← Phase 4
    ↓
Phase 6 (6.1, 6.2, 6.3)  ← Phase 5
    ↓
Phase 7 (7.1, 7.2, 7.3)  ← Phase 6
    ↓
Phase 8 (8.1, 8.2)  ← Phase 7

Critical Path: 1.1 → 1.3 → 2.1 → 3.1 → 3.2 → 4.3 → 6.1 → 7.3 → 8.1


Quick Stats

  • Total Tasks: 45+
  • Total Subtasks: 120+
  • Estimated Hours: 20 hours
  • Test Files to Create: 10+
  • Lines of Code: ~500-800
  • Files to Modify: 5-7
  • Files to Create: 3-4