- Move Tooling & Sim Engine Capabilities next to Test Refactoring Status
(status depends on the capability matrix, so they belong together)
- Merge Tooling and Sim Engine Capabilities into single section
- Remove 'Sim Engine Fix Applied' section (applied, documented in commit)
- Add SI units requirement to precalc scripts rule
- Update cross-references (Section 5 for capability matrix)
- Merge initial conditions check into single SCENARIO
- Tighten energy check to relative error (1e-10) vs KE
- Replace qualitative checks with quantitative WithinAbs assertions
- Use named tolerance constants throughout fixture
- Update precalc_parabolic_orbit.py to output SI units (m, m/s)
- Precalculate expected values with full precision from Python
- Python and C++ produce identical results in SI units
- Add semi_latus_rectum support in sim_engine.py for parabolic orbits
- Use fabs() for accumulated_rotation threshold (both directions)
- Reset body_index in reset_orbit_tracker()
- Remove unused compare_double() and compare_vec3()
- Rename min_time_days to min_time_seconds (eliminate conversion)
- Remove dead SECONDS_PER_DAY constant
- Add buffer overflow guards in dump_simulation_state()
- Use static const instead of #define for MIN_DISTANCE_CLAMP
- Refactor old_tests/test_inclined_orbits.cpp into 4 SCENARIOs
- Replace broken OrbitTracker period test with propagation-to-apogee check
- Rewrite TOML config to TOML 1.0 inline table syntax
- Add precalc script using sim_engine.py
- Fix orbit tracker: use fabs() for accumulated_rotation threshold
- New test_energy.cpp: energy conservation (10-day drift < 1e-12) and
zero-inclination prograde direction verification
- Tighten energy assertion: replaced qualitative < 5% with WithinAbs(0.0, 1e-12)
(actual drift ~2e-16 for 10-day simulation)
- Remove direction test from test_orbital_period.cpp (semantic separation)
- All 16 assertions across 3 test files passing
- Fix section numbering (was 1,2,3,5,4, now sequential)
- Remove stale dump_simulation_state NULL check TODO (already fixed)
- Retain OrbitalMetrics::angular_position 2D-only TODO for future session
- sim_engine.py: generic orbital mechanics simulator with RK4 + analytical
propagation, used to verify C++ test expected values
- test_orbital_period.py: precalculation script with safety timeout for
measuring Earth/Mars orbital periods and direction test values
- Remove SOI transition logic (buggy in both Python and C++ versions)
- Use dataclasses.replace() for immutable state updates
- Support single-line TOML inline tables via tomllib
- Fix orbit period detection: track accumulated signed rotation instead of
wrapped delta, completing on true 2π revolution (was < 0.05 rad)
- Rename quadrant_transitions → wrap_count (accurate semantics)
- Add accumulated_rotation field to OrbitTracker struct
- Consolidate create_orbit_tracker into create_orbit_tracker_with_min_time
- Extract reset_tracker_fields() helper to avoid duplication
- Use vec3_dot() for kinetic energy, vec3_magnitude() for speed calculations
- Define MIN_DISTANCE_CLAMP and SECONDS_PER_DAY as file-level constants
- Add NULL checks in dump_simulation_state for spacecraft/maneuver pointers
- Output summaries to tmp/summaries/ instead of alongside source files
- Add per-module timestamp caching (skip up-to-date modules)
- Add combine_summaries() to merge all into all_summaries.md
- Extract LLM provider and model to config variables
- Reorganize script: config, discovery, utilities, worker, main loop
- Remove TODO from simulation.cpp (interpolated burns now implemented)
- Update technical_reference.md: both trigger types now use sub-step
propagation to exact trigger time, not step boundary
- Update hohmann-rendezvous-quantization-fix.md: mark Option A as
resolved, remove outdated quantization fix suggestions
- Update propagation_refactor.md: resolve Issues 3 and 4, replace
interpolated time triggers TODO with code path unification TODO
- Remove make run target from Makefile (agents should not run graphical sim)
- Update AGENTS.md: clarify make test vs make test-build, add Simulation section
- Update technical_reference.md Build System: add tag/name/section filtering
- Add SCENARIO section docs with --section flag and fixture behavior notes
- Use ./build/orbit_test path, rename config_name to tag_name throughout
For e < 1e-10, compute argument of latitude instead of hardcoding
true_anomaly = 0.0. This preserves position consistency after circularization
burns.
- Move ascending node vector computation earlier so it's available for
the circular orbit case
- For well-defined ascending nodes (sin_i > 1e-6): compute argument of
latitude using the ascending node direction and h×n perpendicular
- For nearly-coplanar orbits (sin_i <= 1e-6): use atan2(y, x) directly
to avoid numerically unstable ascending node direction