# Deterministic compute-envelope metadata emitted in run-profile debug. These
# values document intended use and expected wall time; component code ignores
# them except for status/debug reporting.
compute_envelope:
  profile_class: smoke
  intended_use: contract_smoke
  deterministic: true
  expected_case_wall_time_seconds: 120
  worker_count_policy: auto_bounded_visibility_workers
  measured_reference:
    case_id: test/case_0001
    date_utc: "2026-04-29"
    solve_wall_time_seconds: 109.9
    verifier_wall_time_seconds: 22.7
    capped_max_revisit_gap_hours: 9.345108695652174
    blocker: remaining_expected_revisit_threshold_violations

# Deterministic RGT/APC candidate-library controls.
orbit_library:
  # Maximum candidate satellites evaluated before final satellite selection.
  # This is intentionally separate from the benchmark satellite-output cap.
  max_candidates: 36
  # minmax_architecture interleaves RGT families, target-driven inclinations,
  # and balanced phase slots before the candidate cap binds.
  # target_diversified and legacy_base_first preserve earlier enumerations.
  search_mode: minmax_architecture
  # Search RGT ratios up to this many Greenwich days.
  max_rgt_days: 3
  # Inclusive bounds on revolutions per day considered for circular RGT candidates.
  min_revolutions_per_day: 10
  max_revolutions_per_day: 18
  # Number of phase slots along each retained base RGT orbit.
  # Use null to let the solver choose enough slots for the case satellite cap.
  phase_slot_count: 18
  # Explicit shell/RAAN settings keep profile output stable across cases.
  raan_slot_count: 2
  max_shells: 6
  # Analytical J2 closure evidence used during shell construction.
  max_closure_error_m: 5000.0
  j2_closure_tolerance_m: 5000.0
  j2_refinement_iterations: 6
  # Number of circular-altitude fallback shells if no bounded RGT candidate survives.
  fallback_altitude_count: 3

# Solver-local access-profile sampling.
visibility:
  # Seconds between visibility samples. Smaller values improve fidelity and cost runtime.
  sample_step_sec: 120.0
  # Optional global cap on visibility windows after deterministic ordering.
  max_windows: null
  # Number of representative samples retained in each debug visibility window.
  keep_samples_per_window: 6
  # Null auto-selects a bounded worker count. Use 1 for serial deterministic runs.
  worker_count: null

# Greedy satellite selection by benchmark-shaped gap improvement.
selection:
  # Optional cap below the benchmark's max_num_satellites. Keep this separate
  # from orbit_library.max_candidates so the solver can evaluate a broader
  # APC candidate pool than it emits.
  max_selected_satellites: 18
  # False keeps adding deterministic schedule-support satellites up to the case
  # cap after the optimistic selected envelope stops improving.
  require_positive_improvement: false

# Constructive scheduling, local validation, and repair.
scheduling:
  # Optional cap on emitted observation actions.
  max_actions: null
  # Optional cap on observations per target.
  max_actions_per_target: null
  # Margin trimmed from each visibility window before placing an observation.
  observation_margin_sec: 0.0
  # Null uses a conservative case-derived slew/settle gap for option conflicts.
  transition_gap_sec: null
  # Reject locally feasible observations that do not improve benchmark-shaped gaps.
  require_positive_gap_improvement: true
  # Apply the conservative solver-local battery risk screen.
  enforce_simple_energy_budget: true
  # Run deterministic insertion/removal repair after constructive scheduling.
  enable_repair: true
  # Maximum repair iterations. Each iteration removes one risky observation or inserts one high-gap observation.
  repair_max_iterations: 3
  # Run deterministic high-gap insertion/swap local search after repair.
  enable_local_search: true
  # Maximum accepted local-search iterations.
  local_search_max_iterations: 4
  # Per high-gap target, only this many unscheduled options are considered each iteration.
  local_search_options_per_target: 4
  # Per candidate insertion, only this many low-damage removals are considered.
  local_search_removals_per_option: 8
