Updated docs to reflect that the spacecraft initialization bug has been
resolved by config validation.
docs/test_plan_invalid_parent_assignment.md:
- Changed status from "Implementation phase" to "Complete (Tests 1-3 resolved)"
- Updated bug diagnosis to show solution implemented
- Updated all test cases with actual results (Tests 1-3: ✅ PASS, Test 4: ❌ FAIL)
- Added implementation summary with commit references
- Updated test matrix to show actual results
- Updated future work section to reflect current status
docs/mission_planning.md:
- Marked FIXME as RESOLVED with solution details
- Updated spacecraft parameters to show corrected position
- Added note that delta-v issue remains pending
- Updated "position/velocity" line to reflect current implementation
Test Status:
- Test 1 (Earth→Spacecraft parent switch): ✅ RESOLVED
- Test 2 (Mass hierarchy): ✅ RESOLVED
- Test 3 (Config validation): ✅ RESOLVED
- Test 4 (Mutual SOI): ❌ PENDING (separate issue)
Added validation in config_loader to prevent bodies from starting too close
to their parent bodies (distance must be >= parent.radius + body.radius).
Changes:
- src/config_loader.cpp: Add parent-child distance validation before initialization
- tests/configs/earth_mars_simple.toml: Fix spacecraft position to LEO altitude
(Earth position + 6.571e6 m offset = 1.49606571e11 m)
- tests/test_invalid_parent_assignment.cpp: Update test 3 to use radius-based validation
- docs/mission_planning.md: Add TODO about spacecraft config pattern changes
Test results:
- Test 1: ✅ PASS (Earth no longer becomes child of spacecraft)
- Test 2: ✅ PASS (Mass hierarchy preserved)
- Test 3: ✅ PASS (Spacecraft at valid LEO position)
- Test 4: ❌ FAIL (mutual SOI bug, as expected)
This prevents the spacecraft initialization bug where Earth would incorrectly
become a child of the spacecraft due to distance=0.
Added comprehensive tests to capture parent-child relationship bugs:
- Test 1: Detect Earth becoming child of spacecraft (exact FIXME bug)
- Test 2: Validate mass hierarchy (massive bodies never have small parents)
- Test 3: Detect invalid config placeholder values (bodies at same position)
- Test 4: Mutual SOI edge case (similar-mass planets within SOI)
All tests fail as expected, documenting bugs for future fixes.
Tests 1-3 will pass after spacecraft separation fix.
Test 4 captures separate mutual SOI issue.
Files:
- docs/test_plan_invalid_parent_assignment.md (test plan)
- tests/test_invalid_parent_assignment.cpp (4 test cases)
- tests/configs/mutual_soi_close.toml (edge case config)
- Extract adaptive timestepping section from patched_conics_plan.md
- Add to mission_planning.md Future Work section (after Capture Burns)
- Problem: Fixed 60s timestep too coarse/fast for different orbital phases
- Solution: Adaptive timestep based on orbital period using Kepler's third law
- Implementation: calculate_adaptive_timestep() with 10s-600s clamping
- Delete obsolete patched_conics_plan.md (689 lines, superseded by implementation)
- Renumber sections 5-11 to accommodate new section 5
- Net reduction: ~645 lines of documentation
- Replace full function implementations with summaries
- Add references to actual source files for implementation details
- Replace full test code with test structure summary
- Replace full TOML config with config summary
- Reduced document from 744 to 459 lines (38% reduction)
- Improved maintainability: source code is now source of truth
- Old doc renamed to mission_planning.md.old for reference
- New doc (leospacecraft_impulse_burn_plan.md) renamed to mission_planning.md
- Updated version includes LEO spacecraft, impulse burn, test config, and future work
Add core orbital mechanics calculations and spacecraft spawning infrastructure
for interplanetary trajectory planning. Enables calculation of realistic
transfer orbits with proper departure window timing.
New Module (mission_planning.h/cpp):
- calculate_hohmann_transfer(): Returns transfer orbit parameters
- calculate_angular_position(): Computes body angle in XY plane
- calculate_required_phase_angle(): Calculates optimal launch phase
- check_launch_window(): Tests if current phase allows optimal launch
- wait_for_launch_window(): Fast-forwards to launch window
- spawn_spacecraft_on_transfer(): Creates spacecraft on transfer trajectory
Simulation Extensions (simulation.cpp/h):
- add_body_to_simulation(): Dynamic body creation at runtime
- Properly handles local/global coordinate initialization
- SOI radius calculation for dynamically added bodies
Test Suite:
- test_mission_planning.cpp: Core calculations validated
- test_hohmann_transfer.cpp: Spacecraft spawning verified
- earth_mars_simple.toml: Test configuration for transfers
Validations:
- Transfer parameters match NASA references (±5%)
- Earth→Mars transfer: 259 days, 44.3° phase, 2.94 km/s Δv
- Spacecraft spawns with correct velocity and position
- Launch window detection works (waits ~94 days for optimal window)
Status: Phases 1-3 complete, Phase 4 debugging in progress
(trajectory divergence after first update_simulation() call)