# Mission JSON Variables (auto-derived)
This is generated from `mission.schema.json`.
## Fields
- `aoi`  | type: `string`  | default: `None`  | 
- `grid_spacing_m`  | type: `number`  | default: `50.0`  | 
- `must_cover`  | type: `object`  | default: `None`  | 
- `must_cover.enabled`  | type: `boolean`  | default: `False`  | 
- `must_cover.zones_kml`  | type: `array`  | default: `None`  | 
- `must_cover.points`  | type: `array`  | default: `None`  | 
- `must_cover.snap_radius_m`  | type: `number`  | default: `0.0`  | 
- `must_cover.min_coverage_pct`  | type: `number`  | default: `100.0`  | 
- `must_cover.mode`  | type: `string`  | default: `hard`  | 
- `heights_m`  | type: `array`  | default: `None`  | 
- `rx_height_m`  | type: `number`  | default: `1.5`  | 
- `protocol`  | type: `object`  | default: `None`  | 
- `protocol.name`  | type: `string`  | default: `legacy`  | 
- `protocol.profile`  | type: `None`  | default: `None`  | 
- `protocol.center_freq_hz`  | type: `None`  | default: `None`  | 
- `protocol.channel_bw_hz`  | type: `None`  | default: `None`  | 
- `protocol.rx_threshold_dbm`  | type: `None`  | default: `None`  | 
- `protocol.required_margin_db`  | type: `None`  | default: `None`  | 
- `protocol.rx_height_agl_m`  | type: `None`  | default: `None`  | 
- `protocol.rx_antenna_gain_dbi`  | type: `None`  | default: `None`  | 
- `protocol.rx_feed_loss_db`  | type: `number`  | default: `0.0`  | 
- `protocol.extras`  | type: `object`  | default: `None`  | 
- `protocol_backhaul`  | type: `None`  | default: `None`  | 
- `dem`  | type: `object`  | default: `None`  | 
- `dem.source`  | type: `string`  | default: `s3`  | 
- `dem.tileset`  | type: `string`  | default: `terrarium`  | 
- `dem.zoom`  | type: `integer`  | default: `12`  | 
- `dem.base_url`  | type: `string`  | default: `https://s3.amazonaws.com/elevation-tiles-prod`  | 
- `dem.local_dir`  | type: `None`  | default: `None`  | 
- `dem.cache_dir`  | type: `string`  | default: `None`  | 
- `dem.offline_ok`  | type: `boolean`  | default: `True`  | 
- `topo`  | type: `object`  | default: `None`  | 
- `topo.top_n`  | type: `integer`  | default: `50`  | 
- `topo.slope_offset_m`  | type: `number`  | default: `30.0`  | 
- `topo.ridge_radius_m`  | type: `number`  | default: `60.0`  | 
- `topo.ridge_eps_m`  | type: `number`  | default: `0.5`  | 
- `topo.slope_w`  | type: `number`  | default: `2.0`  | 
- `topo.ridge_w`  | type: `number`  | default: `15.0`  | 
- `los`  | type: `object`  | default: `None`  | 
- `los.enabled`  | type: `boolean`  | default: `True`  | 
- `los.step_m`  | type: `number`  | default: `10.0`  | 
- `los.clearance_m`  | type: `number`  | default: `0.0`  | 
- `los.distance_weight`  | type: `boolean`  | default: `True`  | 
- `los.freq_mhz`  | type: `number`  | default: `915.0`  | 
- `los.fresnel_k`  | type: `number`  | default: `0.6`  | 
- `los.boundary_every_n`  | type: `integer`  | default: `2`  | 
- `los.max_points`  | type: `integer`  | default: `2000`  | 
- `los.sites_max`  | type: `integer`  | default: `3`  | 
- `los.sampling`  | type: `string`  | default: `random`  | 
- `los.strata_spacing_m`  | type: `number`  | default: `150.0`  | 
- `los.target_coverage_pct`  | type: `number`  | default: `0.0`  | 
- `assets`  | type: `array`  | default: `None`  | 
- `anchors`  | type: `array`  | default: `None`  | 
- `rf`  | type: `object`  | default: `None`  | 
- `rf.enabled`  | type: `boolean`  | default: `False`  | 
- `rf.freq_mhz`  | type: `number`  | default: `915.0`  | 
- `rf.tx_power_dbm`  | type: `number`  | default: `30.0`  | 
- `rf.tx_ant_gain_dbi`  | type: `number`  | default: `2.15`  | 
- `rf.rx_ant_gain_dbi`  | type: `number`  | default: `2.15`  | 
- `rf.system_loss_db`  | type: `number`  | default: `2.0`  | 
- `rf.rx_sensitivity_dbm`  | type: `number`  | default: `-120.0`  | 
- `rf.fade_margin_target_db`  | type: `number`  | default: `10.0`  | 
- `rf.confidence_sigma_db`  | type: `number`  | default: `4.0`  | 
- `rf.min_confidence`  | type: `number`  | default: `0.5`  | 
- `rf.diffraction_enabled`  | type: `boolean`  | default: `False`  | 
- `rf.clutter_loss_db`  | type: `number`  | default: `0.0`  | 
- `rf_backhaul`  | type: `object`  | default: `None`  | 
- `rf_backhaul.enabled`  | type: `boolean`  | default: `False`  | 
- `rf_backhaul.freq_mhz`  | type: `number`  | default: `915.0`  | 
- `rf_backhaul.tx_power_dbm`  | type: `number`  | default: `30.0`  | 
- `rf_backhaul.tx_ant_gain_dbi`  | type: `number`  | default: `2.15`  | 
- `rf_backhaul.rx_ant_gain_dbi`  | type: `number`  | default: `2.15`  | 
- `rf_backhaul.system_loss_db`  | type: `number`  | default: `2.0`  | 
- `rf_backhaul.rx_sensitivity_dbm`  | type: `number`  | default: `-120.0`  | 
- `rf_backhaul.fade_margin_target_db`  | type: `number`  | default: `10.0`  | 
- `rf_backhaul.confidence_sigma_db`  | type: `number`  | default: `4.0`  | 
- `rf_backhaul.min_confidence`  | type: `number`  | default: `0.5`  | 
- `rf_backhaul.diffraction_enabled`  | type: `boolean`  | default: `False`  | 
- `rf_backhaul.clutter_loss_db`  | type: `number`  | default: `0.0`  | 
- `heatmap`  | type: `object`  | default: `None`  | 
- `heatmap.enabled`  | type: `boolean`  | default: `False`  | 
- `heatmap.spacing_m`  | type: `number`  | default: `150.0`  | 
- `heatmap.max_px`  | type: `integer`  | default: `1024`  | 
- `heatmap.mode`  | type: `string`  | default: `confidence`  | 
- `backhaul`  | type: `object`  | default: `None`  | 
- `backhaul.enabled`  | type: `boolean`  | default: `False`  | 
- `backhaul.enforce_connected`  | type: `boolean`  | default: `False`  | 
- `backhaul.candidate_k`  | type: `integer`  | default: `12`  | 
- `backhaul.require_gateway`  | type: `boolean`  | default: `False`  | 
- `backhaul.gateway`  | type: `None`  | default: `None`  | 
- `backhaul.height_agl_m`  | type: `number`  | default: `30.0`  | 
- `backhaul.max_distance_km`  | type: `number`  | default: `60.0`  | 
- `backhaul.require_fresnel`  | type: `boolean`  | default: `True`  | 
- `backhaul.min_confidence`  | type: `number`  | default: `0.6`  | 
- `backhaul.step_m`  | type: `None`  | default: `None`  | 
- `backhaul.freq_mhz`  | type: `None`  | default: `None`  | 
- `backhaul.fresnel_k`  | type: `None`  | default: `None`  | 
- `backhaul.prefer`  | type: `string`  | default: `confidence`  | 
- `tiered`  | type: `object`  | default: `None`  | 
- `tiered.enabled`  | type: `boolean`  | default: `True`  | 
- `tiered.max_extra_extenders`  | type: `integer`  | default: `3`  | 
- `tiered.extender_candidate_k`  | type: `integer`  | default: `12`  | 
- `validation`  | type: `object`  | default: `None`  | 
- `validation.enabled`  | type: `boolean`  | default: `False`  | 
- `validation.step_m`  | type: `number`  | default: `10.0`  | 
- `validation.max_points`  | type: `integer`  | default: `4000`  | 
- `validation.warn_delta_pct`  | type: `number`  | default: `2.0`  | 
- `progressive`  | type: `object`  | default: `None`  | 
- `progressive.enabled`  | type: `boolean`  | default: `False`  | 
- `progressive.coarse_step_m`  | type: `number`  | default: `30.0`  | 
- `progressive.coarse_max_points`  | type: `integer`  | default: `700`  | 
- `progressive.fine_top_k`  | type: `None`  | default: `None`  | 
- `constraints`  | type: `object`  | default: `None`  | 
- `candidate_min_sep_m`  | type: `number`  | default: `250.0`  | 
- `workers`  | type: `integer`  | default: `4`  | 
- `out_dir`  | type: `string`  | default: `None`  | 
