Planner Contract and AI Tunables
This is the canonical planner-control contract for Verdify. It explains what triggers a plan, what values the AI planning agent may write, how those writes publish to the public site, and what live readback evidence says about the bounded tunable surface.
End-to-end path for planner-owned values:
AI planning agent -> MCP set_plan or set_tunable -> setpoint_plan -> v_active_plan -> ingestor dispatcher -> ESPHome number/switch -> firmware global/Setpoints -> cfg_* readback -> setpoint_snapshot and setpoint_changes confirmation.
The ESP32 still owns relay control. The AI planning agent owns bounded setpoint hypotheses, not direct actuator commands.
This generated page owns triggers, accepted writes, publishing behavior, and per-parameter contract evidence. The planning page owns prompt flow, the safety page owns relay-boundary behavior, and Operations owns current live state.
Trigger Schedule
Every expected trigger is materialized in planner_trigger_ledger before planner delivery. Required full-plan triggers must close with set_plan; tactical checkpoints may close with set_tunable or acknowledge_trigger when no change is warranted.
MIDNIGHT00:15 America/DenverRequired end-of-day review and reset. The AI planning agent evaluates prior-day plans, extracts supported lessons, and starts the new local day with set_plan.
SUNRISEAstral sunriseRequired morning full plan for daylight, peak stress, decline, and evening handoff.
SOLAR_MAXAstral solar noonSolar checkpoint for a small tactical correction or honest no-change acknowledgement.
TRANSITIONPeak stress and declineBounded tactical checkpoint for the two highest-signal day transitions.
SUNSETAstral sunsetRequired evening full plan for overnight cold, humidity, dew point, and pre-dawn posture.
FORECAST_DEVIATIONSigma-gated observed miss; fired 34x in the last 14 daysTriggered only when actual outdoor conditions diverge materially from forecast after cooldown and threshold checks. The ledger fire count is read live from planner_trigger_ledger so this label reflects whether the trigger is actually firing, not just configured.
MANUALOperator initiatedAd-hoc audited planner run with the same MCP bounds and audit metadata as scheduled triggers.
Payload And Runtime Contract
The planner receives one trigger-scoped payload through Hermes /v1/runs: standing directives, the event prompt, assembled greenhouse context, and audit metadata. The session id keeps the historical hermes:iris:main:trigger:<trigger_id> shape because it is a database/service key, not public planner branding.
ingestor/tasks.py::planning_heartbeatComputes expected trigger times, records them before delivery, dispatches the AI planning agent, and resolves SLA state.
ingestor/iris_planner.pyBuilds the event prompt, appends live and static context, stamps audit metadata, and posts to Hermes.
scripts/gather-plan-context.shLive sensors, equipment, forecast, active plan, scorecards, plan-review backlog, lessons, alerts, tunable constraints, guardrail audits, and context completeness.
/srv/verdify/state/planner-static-context.mdGenerated from the same Markdown source tree Quartz renders for lab.verdify.ai, with a SHA-256 digest embedded into planner context.
Accepted Writes And Publishing
set_planRequired for full-plan triggersValidates the plan envelope, bounded climate_intent, bounds, trigger ID, planner instance, and structured hypothesis; materializes to setpoint_plan and audits semantic intent in plan_journal.
set_tunableNarrow tactical correctionValidates one planner-pushable parameter against this registry and writes an audited one-shot setpoint row.
acknowledge_triggerNo-op closeoutAllowed for no-op transition, forecast-deviation, heartbeat, and validation-smoke events; rejected for normal required full-plan cycles.
plan_evaluateLearning-loop closureWrites outcome, score, anchor score, optional lesson extraction, and validation time back to plan_journal.
publish-site-content.shMCP writes trigger generated plan pages, archive, forecast, lessons, tunables, baseline, evidence snapshots, public sample data, static planner context, and a Quartz rebuild.
Current Audit Snapshot
Every name accepted by PlanTransition, SetpointChange, or setpoint_snapshot.
Includes dispatcher-routed and readback-only firmware inputs.
MCP derives these from bounded ClimateIntent for routine set_plan writes.
The only tunables the planner may write. Operator, crop-band, readback, and retired rows are context only.
Live safety state at generation time.
0 future active plan rows.
Should remain zero for no-op/deprecated params.
Plan dispatcher writes carrying trigger IDs.
1164 measured mister cycles in the last 14 days.
Contract class counts: {'planner_policy': 49, 'crop_band': 64, 'controller_safety': 52, 'readback_context': 22, 'retired': 16}.
Embedding corpus counts: {"plan": 159, "lesson": 114, "playbook": 124, "site_doc": 4274, "observation": 636}.
Firmware override events in the last 7 days: {"vent_mist_assist": 357, "occupancy_blocks_equipment": 10}.
Effectiveness labels below mean three different things:
- Route confirmed means the planner/dispatcher write landed and firmware read it back.
- Operational effect means firmware has a code path that consumes the value.
- Greenhouse outcome means a later scorecard or structured rationale supports or falsifies the plan. This page reports the latest available evidence but does not pretend a single tunable has isolated causal proof unless the system measured that directly.
Current controller invariants:
DEHUM_VENTexits immediately if dehumidifying with vent/fans pushes VPD abovevpd_high; cooling then uses VENTILATE with vent-mist assist, otherwise sealed mist recovery is allowed.- Non-safety heat is suppressed while vent/fan air exchange is physically active.
heat2is never valid withoutheat1; any observed heat2-without-heat1 interval is a fault to investigate, not a planner tactic.- The dispatcher preserves a minimum 0.55 kPa house VPD deadband so mixed-zone crop targets do not create controller chatter.
- During live, near-edge, or recently unrecovered
VENTILATEVPD-high stress with healthy dew margin, the dispatcher clamps conservative moisture thresholds near the activevpd_highband:mister_engage_kpa <= vpd_high + 0.05,mister_all_kpa <= max(1.0, vpd_high + 0.25),fog_escalation_kpa <= 0.20or0.15in hot/dry venting, shorter mist delays/gaps, and shortermin_fog_off_s. - Planner moisture tuning ladder: open the band-coupled mister surface first, use
all_zone_vpd_excess_kpafor distributed mister escalation, shortenmister_pulse_gap_sbefore increasingmister_pulse_on_s, use fog as the heavy 7x escalation path, and remembermister_vpd_weightchanges zone selection rather than total duty.
ClimateIntent AI Surface
Routine set_plan transitions must include a bounded climate_intent object with every field below explicitly set. These fields tune tactical posture around the dispatcher-owned targets; they do not own temp/VPD low, target, or high points.
| Field | Bounds | Planner meaning | Firmware impact | Materialized knobs | Planner guidance |
|---|---|---|---|---|---|
forecast_temp_bias_f | -4..4F | Forecast-backed hot-air pressure signal for the segment. | Positive values make cooling more anticipatory without changing dispatcher-owned temp_low/temp_target/temp_high. | cool_stage2_over_high_f, sw_cool_all_fans_at_high_enabled | Use positive values when forecast or recent misses imply heat will outrun the band; use 0 when no hot miss is expected. |
forecast_vpd_bias_kpa | -0.4..0.4 kPa | Forecast-backed dry/wet pressure signal for the segment. | Positive values make wet actions more available without changing dispatcher-owned vpd_low/vpd_target/vpd_high. | sw_direct_wet_stress_override_enabled, mister_vpd_weight, min_fog_on_s | Use positive values for dry forecast error or dry-air ventilation risk; use 0 or negative when dew/RH risk dominates. |
solar_precool_gain_f | 0..4F | Solar ramp pressure that justifies cooling lead before peak heat. | Tightens stage-2 cooling and fan readiness before high solar load arrives. | cool_stage2_over_high_f, sw_cool_all_fans_at_high_enabled | Raise during steep solar ramps or known lag; lower after shade/clouds or evening recovery. |
thermal_lead_time_min | 0..90 min | How early forecast preconditioning may begin. | Planner audit context for lead timing; firmware safety and dispatcher timing still gate actuation. | audit context only | Set to the intended lead window for the segment hypothesis; it documents forecast timing even when no direct Tier 1 knob changes. |
economizer_temp_advantage_f | 1..15F | Outdoor temperature advantage needed before vent cooling is attractive. | Materializes to vent preference and cold-vent guard thresholds. | vent_prefer_temp_delta_f, cold_vent_guard_delta_f | Lower when outside air can cool without cold shock; raise when cold-slug or oscillation risk is high. |
economizer_dewpoint_advantage_f | 1..15F | Outdoor dewpoint advantage needed before dry-air decisions are attractive. | Materializes to dewpoint preference for vent/dehumidification choices. | vent_prefer_dp_delta_f | Lower when outdoor air is safely drier and dehumidification is needed; raise when dry ventilation would worsen VPD stress. |
moisture_engage_vpd_excess_kpa | 0..0.5 kPa | How far above dispatcher-owned vpd_high VPD may rise before mister assist is eligible. | Materializes targeted mister and direct-wet thresholds relative to the active dispatcher VPD band. | direct_wet_stress_vpd_margin_kpa, mister_engage_kpa | Keep near 0.05 kPa when VPD compliance is the bottleneck; raise only to conserve water after recovery is proven. |
all_zone_vpd_excess_kpa | 0.05..0.8 kPa | How far above dispatcher-owned vpd_high VPD may rise before all-zone mister rotation is eligible. | Materializes the all-zone mister escalation threshold relative to the active dispatcher VPD band without forcing fog earlier. | mister_all_kpa | Keep near 0.20-0.30 kPa during hot/dry recovery; raise when water use is high without VPD improvement or wetting risk is active. |
mist_duty_limit_pct | 0..100% | Maximum climate-misting duty allowed during the segment. | Materializes mister pulse duration, wet aggression, and resource budget gates. | mister_pulse_on_s, mister_pulse_gap_s, mister_vpd_weight, sw_direct_wet_stress_override_enabled | Raise during hot/dry recovery windows with safe dew margin; lower for disease risk, occupancy, or resource conservation. |
fog_escalate_vpd_excess_kpa | 0.1..0.8 kPa | How far above dispatcher-owned vpd_high VPD may rise before fog assist is eligible. | Materializes fog escalation relative to the active VPD band, independently from all-zone mist rotation. | fog_escalation_kpa | Use lower values when VPD is repeatedly above band during ventilation and fog is safe; use higher values when fog overshoot or disease risk is the constraint. |
dew_margin_floor_f | 3..15F | Minimum indoor air temperature minus dew point for wet climate actions. | Materializes fog/direct-wet dew margin floors and blocks condensation-risk wetting. | direct_wet_stress_min_dew_margin_f, fog_stress_min_dew_margin_f | Keep conservative at night or near leaf-wetness risk; do not lower it just to chase VPD compliance. |
wet_cutoff_hour | 17..24 | Latest local hour for climate wetting in this segment. | Materializes fog and direct-wet latest-hour limits. | direct_wet_stress_latest_hour, fog_stress_window_latest_hour, sw_fog_stress_window_extend_enabled | Extend only when dry recovery is worth evening wetting risk and dew margin remains healthy. |
daily_mist_budget_gal | 0..300 gal | Daily climate-water budget for mister use. | Materializes the firmware mister water budget. | mister_water_budget_gal | Budget water according to forecast stress and recent usage; use 0 only when wet actions should be unavailable. |
resource_sensitivity | 0..1 | Preference for conserving water/electricity after safety and band compliance. | Lengthens off dwell and reduces wet/cooling aggression when compliance allows it. | mister_pulse_gap_s, min_fog_off_s, min_fog_on_s, cool_stage2_over_high_f, sw_direct_wet_stress_override_enabled | Raise only after safety and compliance are stable; lower when temp or VPD is outside band. |
relay_churn_penalty | 0..1 | Preference for holding stable actions instead of changing modes frequently. | Materializes hysteresis, dwell, and mist delay values. | cool_exit_hysteresis_f, temp_hysteresis, vpd_hysteresis, vpd_watch_dwell_s, dwell_gate_ms, mister_engage_delay_s, mister_all_delay_s | Raise when mode churn or relay wear is the observed failure; lower when response lag is missing compliance windows. |
Dispatcher-Owned Climate Targets
The planner receives these target values as read-only prompt context. They are derived from crop profiles and dispatcher policy, and the target delta columns are signed actual - target metrics for graphing and mode diagnosis.
Controller priority is safety rails first, then temperature compliance, then VPD compliance, then resource use. When VPD is above the dispatcher-owned band and dew/occupancy rails are safe, resource minimization must not close wet/fog assist; ClimateIntent should make moisture assist available near the active VPD high edge until target deltas recover.
| Axis | Low | Target | High | Actual | Actual - target |
|---|---|---|---|---|---|
| Temp F | 59.3 | 64.3 | 69.3 | 66.92 | 2.62 |
| VPD kPa | 0.19 | 0.465 | 0.74 | 0.962 | 0.497 |
Latest sample: 2026-07-03T08:30:14.209125+00:00; mode VENTILATE.
ClimateIntent Materialization Contract
Routine set_plan calls emit bounded climate_intent transitions. MCP validates that semantic surface, materializes it into the low-level Tier 1 rows below, and stores the original intent in plan_journal.climate_intents.
| Parameter | Active | Future rows | Last dispatch | 7d confirmed | Planner instruction |
|---|---|---|---|---|---|
band_track_fraction | 0.25 | 0 | 2026-06-23 17:21Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
cold_vent_guard_delta_f | 9 | 0 | 2026-06-26 18:32Z | 1/1 | Planner-policy tunable. Raise for cold-slug risk, lower when outdoor exchange is useful and temperature headroom is healthy. |
cool_exit_hysteresis_f | 1.69 | 0 | 2026-06-26 18:32Z | 2/2 | Planner-policy tunable. Lower values clear VENTILATE sooner; higher values hold cooling longer after hot stress. Keep dew/VPD effects in the hypothesis. |
cool_stage2_exit_hysteresis_f | 1 | 0 | 2026-06-23 17:21Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
cool_stage2_over_high_f | 0 | 0 | 2026-07-03 02:55Z | 27/27 | Planner-policy tunable. On hot or high-solar days, use 0.5-1.0 F so fan2 helps near the high edge; relax after recovery to reduce fan wear. |
direct_wet_stress_latest_hour | 22 | 0 | 2026-06-15 23:55Z | - | Planner-policy latest-hour cap. Use the earliest hour that covers the dry recovery window, then back out after VPD recovers. |
direct_wet_stress_min_dew_margin_f | 8 | 0 | 2026-06-23 17:21Z | - | Planner-policy safety gate. Use 8 F or higher unless disease-risk evidence justifies a stricter margin; never lower to chase compliance blindly. |
direct_wet_stress_vpd_margin_kpa | 0.05 | 0 | 2026-06-23 17:21Z | - | Planner-policy tunable. Keep low, around 0.05-0.15 kPa, when late dry recovery needs direct wetting; raise it to reserve override for stronger dry stress. |
dwell_gate_ms | 225000 | 0 | 2026-06-26 18:32Z | 2/2 | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
enthalpy_close | 1 | 0 | 2026-06-23 17:21Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
enthalpy_open | -2 | 0 | 2026-06-23 17:21Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
fog_escalation_kpa | 0.15 | 0 | 2026-06-26 18:32Z | 2/2 | Planner-policy tunable. During VPD-high or near-edge VENTILATE stress with healthy dew margin, use 0.15-0.20 in hot/dry venting, 0.25-0.30 for mild dry stress, and reserve 0.35-0.50 for VPD-low overshoot, dew risk, or resource limits. |
heat_hysteresis | 1.1 | 0 | 2026-06-23 17:21Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
min_fog_off_s | 48 | 0 | 2026-07-01 21:07Z | 9/11 | Planner-policy tunable. During VPD-high or near-edge VENTILATE stress with healthy dew margin, use shorter delays/gaps so ventilation can cool while misting protects VPD. |
min_fog_on_s | 75 | 0 | 2026-06-25 06:29Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
mist_backoff_s | 600 | 0 | 2026-06-23 17:21Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
mist_max_closed_vent_s | 120 | 0 | 2026-06-23 17:21Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
mist_thermal_relief_s | 90 | 0 | 2026-06-23 17:21Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
mister_all_delay_s | 79.5 | 0 | 2026-06-26 18:32Z | 2/2 | Planner-policy tunable. During VPD-high or near-edge VENTILATE stress with healthy dew margin, use shorter delays/gaps so ventilation can cool while misting protects VPD. |
mister_all_kpa | 1.1 | 0 | 2026-07-03 06:21Z | 83/89 | Planner-policy tunable. During VPD-high or near-edge VENTILATE stress with healthy dew margin, keep near max(1.0, vpd_high + 0.25) so all-zone mist assist can engage; high absolute values disable escalation. |
mister_engage_delay_s | 39.75 | 0 | 2026-06-26 18:38Z | 3/3 | Planner-policy tunable. During VPD-high or near-edge VENTILATE stress with healthy dew margin, use shorter delays/gaps so ventilation can cool while misting protects VPD. |
mister_engage_kpa | 0.95 | 0 | 2026-07-03 07:22Z | 142/169 | Planner-policy tunable. During VPD-high or near-edge VENTILATE stress with healthy dew margin, keep near active vpd_high + 0.05; values near 2.5 suppress wet assist and should be reserved for dew/occupancy/irrigation/water-cap constraints. |
mister_pulse_gap_s | 26.25 | 0 | 2026-06-27 12:03Z | 66/67 | Planner-policy tunable. During VPD-high or near-edge VENTILATE stress with healthy dew margin, use shorter delays/gaps so ventilation can cool while misting protects VPD. |
mister_pulse_on_s | 90 | 0 | 2026-07-03 08:19Z | 22/22 | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
mister_vpd_weight | 2.5 | 0 | 2026-06-27 12:03Z | 4/4 | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
mister_water_budget_gal | 300 | 0 | 2026-06-26 18:38Z | 3/3 | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
night_vpd_bias_kpa | 0 | 0 | 2026-06-23 17:21Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
outdoor_staleness_max_s | 600 | 0 | 2026-06-23 17:21Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
sw_cool_all_fans_at_high_enabled | 1 | 0 | 2026-07-03 02:55Z | 27/27 | Planner-policy switch. Enable only for forecast-backed heat stress windows where one-fan ventilation has been insufficient; disable after the window. |
sw_direct_wet_stress_override_enabled | 1 | 0 | 2026-06-07 13:34Z | - | Planner-policy switch. Enable only for VPD-high evening recovery when normal direct-wet drydown is blocking water and dew margin is safely above the configured floor. |
sw_dwell_gate_enabled | 1 | 0 | 2026-06-07 17:07Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
sw_fog_closes_vent | 1 | 0 | 2026-06-07 17:07Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
sw_mister_closes_vent | 0 | 0 | 2026-06-07 17:07Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
sw_summer_vent_enabled | 1 | 0 | 2026-06-07 17:07Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
temp_hysteresis | 1.69 | 0 | 2026-06-26 18:38Z | 3/3 | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
vent_exchange_fraction | 0.3 | 0 | 2026-06-23 17:21Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
vent_prefer_dp_delta_f | 3 | 0 | 2026-06-25 11:59Z | - | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
vent_prefer_temp_delta_f | 5 | 0 | 2026-06-26 18:38Z | 2/2 | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
vpd_hysteresis | 0.193 | 0 | 2026-06-26 18:38Z | 3/3 | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
vpd_watch_dwell_s | 56.25 | 0 | 2026-06-26 18:44Z | 4/4 | Materialized Tier 1 field. Routine set_plan writes must use bounded climate_intent; MCP derives this low-level row. |
Findings That Matter
mister_engage_kpais effectful, but it is not the state-machine entry trigger. Firmware enters humidification fromvpd_highplusvpd_watch_dwell_s;mister_engage_kpagates physical S1 mister pulses onceSEALED_MISTor explicitVENTILATEassist creates humidity demand. Zone stress can choose the pulse target or satisfy the S1 stress check, but it cannot create a standalone mister mode.mister_all_kpacontrols physical all-zone mister rotation. The header mist-stage delay also usesmister_all_delay_s; fog escalation usesfog_escalation_kpaindependently.- The planner tunes moisture intensity, not the crop band. In
VENTILATE, dry outside air can keep temperature in band while pushing VPD high, so moisture thresholds must stay coupled to the activevpd_highunless dew-risk evidence justifies suppression. - High
mister_engage_kpa/mister_all_kpavalues are not resource-neutral during VPD-high stress; they can close the wet-assist path. Save them for dew, occupancy, irrigation, or water-cap constraints. - Reserved/no-op values are intentionally not planner-pushable:
bias_cool,bias_heat,d_cool_stage_2,d_heat_stage_2,fan_burst_min,fog_burst_min,mist_vent_close_lead_s,mist_vent_reopen_delay_s,mister_all_off_s,mister_all_on_s,mister_max_runtime_min,mister_off_s,mister_on_s,summer_vent_min_runtime_s,sw_fsm_controller_enabled,vent_bypass_min. - Readback-only values are now registry-covered but not planner-pushable:
fallback_window_s,outdoor_temp_f,outdoor_dewpoint_f.
Clamp Activity (last 30 days)
When the AI planning agent pushes a setpoint outside the active band or a guardrail floor/ceiling, the dispatcher clamps it before it reaches the ESP32 and records the event in setpoint_clamps. A high clamp count means the planner is repeatedly asking for a value the band/guardrail layer will not honor; for moisture knobs that usually means aggressive VPD-hold misting is being capped. These rows are sourced from setpoint_clamps grouped by parameter; the dispatcher also feeds them to the planner each cycle through scripts/gather-plan-context.sh.
| Parameter | Clamps 30d | Clamps 24h | Avg requested | Avg applied | Latest reason | Last clamp |
|---|---|---|---|---|---|---|
irrig_center_days_mask | 8095 | 281 | 127 | 127 | planner_param_not_pushable | 2026-07-03 08:28Z (1m) |
irrig_center_fert_days_mask | 8095 | 281 | 127 | 127 | planner_param_not_pushable | 2026-07-03 08:28Z (1m) |
irrig_wall_days_mask | 8095 | 281 | 127 | 127 | planner_param_not_pushable | 2026-07-03 08:28Z (1m) |
irrig_wall_fert_days_mask | 8095 | 281 | 127 | 127 | planner_param_not_pushable | 2026-07-03 08:28Z (1m) |
sw_economiser_enabled | 7061 | 281 | 0 | 0 | planner_param_not_pushable | 2026-07-03 08:28Z (1m) |
mister_engage_kpa | 1130 | 66 | 1.081 | 0.969 | vpd_high_moisture_guardrail | 2026-07-03 08:28Z (1m) |
mister_all_kpa | 1059 | 61 | 1.279 | 1.171 | vpd_high_moisture_guardrail | 2026-07-03 08:28Z (1m) |
mister_pulse_gap_s | 709 | 0 | 41.291 | 30 | vpd_high_moisture_guardrail | 2026-06-26 18:22Z (6d) |
fog_escalation_kpa | 437 | 0 | 0.278 | 0.186 | vpd_high_moisture_guardrail | 2026-06-25 22:58Z (7d) |
min_fog_off_s | 434 | 0 | 79.571 | 57.408 | vpd_high_moisture_guardrail | 2026-07-01 21:01Z (1d) |
mister_all_delay_s | 199 | 0 | 96.686 | 90 | vpd_high_moisture_guardrail | 2026-06-25 20:24Z (7d) |
mister_engage_delay_s | 199 | 0 | 48.343 | 45 | vpd_high_moisture_guardrail | 2026-06-25 20:24Z (7d) |
mister_center_penalty | 4 | 0 | 0.35 | 0.35 | planner_param_not_pushable | 2026-06-16 00:41Z (17d) |
Parameter Index
This is the public contract table for every registered tunable. The row-level implementation dump is still generated for operations, but the public page keeps the reading path compact.
Activity and direct-wet gates
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
activity_duration_min | controller_safety | dispatcher default | default 1440; 0 to 1440 | - | 780 (0m) | readback only; firmware refs 16 | - | MCP rejects planner writes; controller safety context |
activity_start_hour | controller_safety | dispatcher default | default 6; 0 to 23 | - | 6 (0m) | readback only; firmware refs 16 | - | MCP rejects planner writes; controller safety context |
activity_start_minute | controller_safety | dispatcher default | default 0; 0 to 59 | - | 0 (0m) | readback only; firmware refs 28 | - | MCP rejects planner writes; controller safety context |
direct_wet_center_drydown_before_off_min | scheduled_policy | schedule | default 0; 0 to 720 | - | 180 (0m) | readback only; firmware refs 10 | - | MCP rejects planner writes; scheduled policy |
direct_wet_center_start_offset_min | scheduled_policy | schedule | default 0; 0 to 720 | - | 120 (0m) | readback only; firmware refs 10 | - | MCP rejects planner writes; scheduled policy |
direct_wet_min_temp_f | scheduled_policy | schedule | default 0; 0 to 90 | - | 65 (0m) | readback only; firmware refs 14 | - | MCP rejects planner writes; scheduled policy |
direct_wet_south_drydown_before_off_min | scheduled_policy | schedule | default 0; 0 to 720 | - | 120 (0m) | readback only; firmware refs 10 | - | MCP rejects planner writes; scheduled policy |
direct_wet_south_start_offset_min | scheduled_policy | schedule | default 0; 0 to 720 | - | 60 (0m) | readback only; firmware refs 10 | - | MCP rejects planner writes; scheduled policy |
direct_wet_stress_latest_hour | planner_policy | planner | default 22; 17 to 24 | 22 | 22 (17d) | readback only | - | materialized from climate_intent for routine set_plan |
direct_wet_stress_min_dew_margin_f | planner_policy | planner | default 8; 3 to 15 | 8 | 8 (0m) | readback only; firmware refs 12 | - | materialized from climate_intent for routine set_plan |
direct_wet_stress_vpd_margin_kpa | planner_policy | planner | default 0.05; 0 to 0.5 | 0.05 | 0.05 (0m) | readback only; firmware refs 11 | - | materialized from climate_intent for routine set_plan |
direct_wet_wall_drydown_before_off_min | scheduled_policy | schedule | default 0; 0 to 720 | - | 120 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; scheduled policy |
direct_wet_wall_start_offset_min | scheduled_policy | schedule | default 0; 0 to 720 | - | 60 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; scheduled policy |
direct_wet_west_drydown_before_off_min | scheduled_policy | schedule | default 0; 0 to 720 | - | 120 (0m) | readback only; firmware refs 10 | - | MCP rejects planner writes; scheduled policy |
direct_wet_west_start_offset_min | scheduled_policy | schedule | default 0; 0 to 720 | - | 60 (0m) | readback only; firmware refs 10 | - | MCP rejects planner writes; scheduled policy |
sw_direct_wet_gate_enabled | planner_policy | planner | default 1; switch 0/1 | - | 1 (0m) | readback only; firmware refs 16 | - | set_tunable allowed; planner may write with a hypothesis |
Band
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
band_temp_high_mid | crop_band | band | default 70.71; 40 to 100 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_temp_high_sm | crop_band | band | default 83.79; 40 to 100 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_temp_high_sr | crop_band | band | default 72.5; 40 to 100 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_temp_high_ss | crop_band | band | default 82; 40 to 100 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_temp_low_mid | crop_band | band | default 60.71; 40 to 100 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_temp_low_sm | crop_band | band | default 73.79; 40 to 100 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_temp_low_sr | crop_band | band | default 62.5; 40 to 100 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_temp_low_ss | crop_band | band | default 72; 40 to 100 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_vpd_high_mid | crop_band | band | default 1.168; 0.1 to 3 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_vpd_high_sm | crop_band | band | default 1.292; 0.1 to 3 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_vpd_high_sr | crop_band | band | default 1.185; 0.1 to 3 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_vpd_high_ss | crop_band | band | default 1.275; 0.1 to 3 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_vpd_low_mid | crop_band | band | default 0.738; 0.1 to 3 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_vpd_low_sm | crop_band | band | default 0.862; 0.1 to 3 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_vpd_low_sr | crop_band | band | default 0.755; 0.1 to 3 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_vpd_low_ss | crop_band | band | default 0.845; 0.1 to 3 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
dawn_boost_offset_min | crop_band | band | default 60; 0 to 360 | - | 60 (2d) | readback only; firmware refs 12 | - | MCP rejects planner writes; dispatcher/crop-band owned |
manual_override_timeout_min | crop_band | band | default 10; 1 to 120 | - | 10 (2d) | readback only; firmware refs 8 | - | MCP rejects planner writes; dispatcher/crop-band owned |
midday_boost_offset_min | crop_band | band | default 60; -240 to 240 | - | 60 (2d) | readback only; firmware refs 13 | - | MCP rejects planner writes; dispatcher/crop-band owned |
wet_taper_before_sunset_min | crop_band | band | default 120; 0 to 480 | - | 120 (2d) | readback only; firmware refs 10 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_priority_center | crop_band | band | default 1; 1 to 4 | - | 1 (2d) | readback only; firmware refs 10 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_priority_east | crop_band | band | default 4; 1 to 4 | - | 4 (2d) | readback only; firmware refs 10 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_priority_south | crop_band | band | default 2; 1 to 4 | - | 2 (2d) | readback only; firmware refs 10 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_priority_west | crop_band | band | default 3; 1 to 4 | - | 3 (2d) | readback only; firmware refs 10 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_width_above_center | crop_band | band | default 0.35; 0.02 to 1 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_width_above_east | crop_band | band | default 0.23; 0.02 to 1 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_width_above_south | crop_band | band | default 0.22; 0.02 to 1 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_width_above_west | crop_band | band | default 0.22; 0.02 to 1 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_width_below_center | crop_band | band | default 0.2; 0.02 to 1 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_width_below_east | crop_band | band | default 0.15; 0.02 to 1 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_width_below_south | crop_band | band | default 0.18; 0.02 to 1 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_width_below_west | crop_band | band | default 0.16; 0.02 to 1 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
Controller gates
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
dwell_gate_ms | planner_policy | planner | default 300000; 60000 to 1800000 | 225000 | 225000 (0m) | confirmed; firmware refs 10 | - | materialized from climate_intent for routine set_plan |
sw_arbiter_zone_enabled | controller_safety | operator | default 0; switch 0/1 | - | 0 (0m) | readback only; firmware refs 24 | - | MCP rejects planner writes; controller safety context |
sw_dawn_rehydrate_enabled | readback_context | firmware internal | default 1; switch 0/1 | - | 1 (0m) | readback only; firmware refs 22 | - | MCP rejects planner writes; readback context only |
sw_direct_wet_stress_override_enabled | planner_policy | planner | default 0; switch 0/1 | 1 | 1 (0m) | readback only; firmware refs 15 | - | materialized from climate_intent for routine set_plan |
sw_dwell_gate_enabled | planner_policy | planner | default 0; switch 0/1 | 1 | 1 (0m) | readback only; firmware refs 22 | - | materialized from climate_intent for routine set_plan |
sw_fsm_controller_enabled | retired | operator | default 1; switch 0/1 | - | 1 (0m) | reserved; firmware refs 30 | - | MCP rejects planner writes; reserved/no-op |
sw_gl_grow_auto_mode | scheduled_policy | schedule | default 1; switch 0/1 | - | 1 (0m) | readback only; firmware refs 2 | - | MCP rejects planner writes; scheduled policy |
sw_gl_grow_out_of_service | controller_safety | operator | default 0; switch 0/1 | - | 0 (0m) | readback only; firmware refs 15 | - | MCP rejects planner writes; controller safety context |
sw_gl_grow_solar_phasing | scheduled_policy | schedule | default 0; switch 0/1 | - | 0 (0m) | readback only; firmware refs 14 | - | MCP rejects planner writes; scheduled policy |
sw_gl_main_auto_mode | scheduled_policy | schedule | default 1; switch 0/1 | - | 1 (0m) | readback only; firmware refs 2 | - | MCP rejects planner writes; scheduled policy |
sw_gl_main_out_of_service | controller_safety | operator | default 0; switch 0/1 | - | 0 (0m) | readback only; firmware refs 15 | - | MCP rejects planner writes; controller safety context |
sw_gl_main_solar_phasing | scheduled_policy | schedule | default 0; switch 0/1 | - | 0 (0m) | readback only; firmware refs 15 | - | MCP rejects planner writes; scheduled policy |
sw_midday_drench_enabled | readback_context | firmware internal | default 1; switch 0/1 | - | 1 (0m) | readback only; firmware refs 22 | - | MCP rejects planner writes; readback context only |
sw_night_humidity_source_present | readback_context | firmware internal | default 0; switch 0/1 | - | 0 (17d) | readback only | - | MCP rejects planner writes; readback context only |
sw_occupancy_inhibit | controller_safety | operator | default 1; switch 0/1 | - | - (-) | static route; firmware refs 13 | - | MCP rejects planner writes; controller safety context |
sw_overnight_micropulse_enabled | readback_context | firmware internal | default 1; switch 0/1 | - | 1 (17d) | readback only | - | MCP rejects planner writes; readback context only |
Economiser
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
econ_heat_margin_f | controller_safety | planner | default 5; 1 to 15 | - | 5 (0m) | readback only; firmware refs 7 | - | MCP rejects planner writes; controller safety context |
enthalpy_close | planner_policy | planner | default 1; -5 to 20 | 1 | 1 (0m) | readback only; firmware refs 9 | - | materialized from climate_intent for routine set_plan |
enthalpy_open | planner_policy | planner | default -2; -5 to 0 | -2 | -2 (0m) | readback only; firmware refs 9 | - | materialized from climate_intent for routine set_plan |
site_pressure_hpa | controller_safety | operator | default 840; 700 to 1100 | - | 840 (0m) | readback only; firmware refs 7 | - | MCP rejects planner writes; controller safety context |
sw_economiser_enabled | controller_safety | operator | default 1; switch 0/1 | 0 | - (-) | static route; firmware refs 11 | 7061 (1m) | MCP rejects planner writes; controller safety context |
Firmware Internal
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
dawn_rehydrate_gap_s | readback_context | firmware internal | default 20; 5 to 600 | - | 20 (0m) | readback only; firmware refs 18 | - | MCP rejects planner writes; readback context only |
dawn_rehydrate_on_s | readback_context | firmware internal | default 90; 1 to 600 | - | 90 (0m) | readback only; firmware refs 18 | - | MCP rejects planner writes; readback context only |
dawn_rehydrate_start_minute | readback_context | firmware internal | default 0; 0 to 59 | - | 0 (17d) | readback only | - | MCP rejects planner writes; readback context only |
dawn_rehydrate_window_min | readback_context | firmware internal | default 12; 0 to 120 | - | 12 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; readback context only |
feed_end_hour | readback_context | firmware internal | default 9; 0 to 23 | - | 9 (0m) | readback only; firmware refs 17 | - | MCP rejects planner writes; readback context only |
feed_start_hour | readback_context | firmware internal | default 6; 0 to 23 | - | 6 (0m) | readback only; firmware refs 17 | - | MCP rejects planner writes; readback context only |
micropulse_max_on_s | readback_context | firmware internal | default 5; 1 to 10 | - | 5 (17d) | readback only | - | MCP rejects planner writes; readback context only |
micropulse_min_dew_margin_f | readback_context | firmware internal | default 6; 3 to 15 | - | 6 (17d) | readback only | - | MCP rejects planner writes; readback context only |
micropulse_min_gap_s | readback_context | firmware internal | default 600; 60 to 3600 | - | 600 (17d) | readback only | - | MCP rejects planner writes; readback context only |
micropulse_vpd_ceiling | readback_context | firmware internal | default 1.25; 0.8 to 3 | - | 1.25 (17d) | readback only | - | MCP rejects planner writes; readback context only |
midday_drench_gap_s | readback_context | firmware internal | default 25; 5 to 600 | - | 25 (0m) | readback only; firmware refs 18 | - | MCP rejects planner writes; readback context only |
midday_drench_hour | readback_context | firmware internal | default 14; 0 to 23 | - | 14 (17d) | readback only; firmware refs 1 | - | MCP rejects planner writes; readback context only |
midday_drench_on_s | readback_context | firmware internal | default 120; 1 to 600 | - | 120 (0m) | readback only; firmware refs 18 | - | MCP rejects planner writes; readback context only |
midday_drench_start_minute | readback_context | firmware internal | default 0; 0 to 59 | - | 0 (17d) | readback only | - | MCP rejects planner writes; readback context only |
midday_drench_window_min | readback_context | firmware internal | default 11; 0 to 120 | - | 11 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; readback context only |
Fog gates
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
fog_burst_min | retired | operator | default 10; 1 to 60 | - | 8 (0m) | reserved; firmware refs 9 | - | MCP rejects planner writes; reserved/no-op |
fog_escalation_kpa | planner_policy | planner | default 0.4; 0.1 to 0.5 | 0.15 | 0.15 (0m) | confirmed; firmware refs 9 | 437 (7d) | materialized from climate_intent for routine set_plan |
fog_min_temp_f | controller_safety | operator | default 55; 40 to 65 | - | 55 (0m) | readback only; firmware refs 6 | - | MCP rejects planner writes; controller safety context |
fog_rh_ceiling_pct | controller_safety | operator | default 90; 75 to 98 | - | 90 (0m) | readback only; firmware refs 6 | - | MCP rejects planner writes; controller safety context |
fog_time_window_end | controller_safety | planner | default 18; 14 to 20 | - | 17 (17d) | readback only | - | MCP rejects planner writes; controller safety context |
fog_time_window_start | controller_safety | planner | default 6; 5 to 12 | - | 7 (17d) | readback only | - | MCP rejects planner writes; controller safety context |
min_fog_off_s | planner_policy | planner | default 60; 15 to 300 | 48 | 48 (0m) | 9/11 confirmed; firmware refs 14 | 434 (1d) | materialized from climate_intent for routine set_plan |
min_fog_on_s | planner_policy | planner | default 60; 15 to 300 | 75 | 75 (0m) | readback only; firmware refs 14 | - | materialized from climate_intent for routine set_plan |
sw_fog_closes_vent | planner_policy | planner | default 1; switch 0/1 | 1 | 1 (0m) | readback only; firmware refs 18 | - | materialized from climate_intent for routine set_plan |
Grow lights
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
gl_dli_target | controller_safety | planner | default 14; 1 to 50 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; controller safety context |
gl_grow_dli_target | controller_safety | dispatcher default | default 14; 1 to 50 | - | 21 (0m) | readback only; firmware refs 8 | - | MCP rejects planner writes; controller safety context |
gl_grow_lux_hysteresis | scheduled_policy | schedule | default 8000; 0 to 25000 | - | 8000 (0m) | confirmed; firmware refs 9 | - | MCP rejects planner writes; scheduled policy |
gl_grow_lux_threshold | scheduled_policy | schedule | default 40000; 100 to 100000 | - | 40000 (0m) | confirmed; firmware refs 9 | - | MCP rejects planner writes; scheduled policy |
gl_grow_min_off_s | scheduled_policy | schedule | default 60; 0 to 3600 | - | 60 (0m) | readback only; firmware refs 17 | - | MCP rejects planner writes; scheduled policy |
gl_grow_min_on_s | scheduled_policy | schedule | default 120; 0 to 3600 | - | 120 (0m) | readback only; firmware refs 17 | - | MCP rejects planner writes; scheduled policy |
gl_grow_sunrise_hour | scheduled_policy | schedule | default 7; 0 to 23 | - | 6 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; scheduled policy |
gl_grow_sunrise_offset_min | scheduled_policy | schedule | default 0; -1440 to 1440 | - | 0 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; scheduled policy |
gl_grow_sunset_hour | scheduled_policy | schedule | default 19; 0 to 23 | - | 21 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; scheduled policy |
gl_grow_sunset_offset_min | scheduled_policy | schedule | default 0; -1440 to 1440 | - | 0 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; scheduled policy |
gl_grow_target_light_minutes | scheduled_policy | schedule | default 960; 0 to 1080 | - | 900 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; scheduled policy |
gl_lux_hysteresis | controller_safety | dispatcher default | default 1500; 0 to 10000 | - | 1500 (0m) | readback only; firmware refs 7 | - | MCP rejects planner writes; controller safety context |
gl_lux_threshold | controller_safety | dispatcher default | default 3000; 100 to 50000 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; controller safety context |
gl_main_dli_target | controller_safety | dispatcher default | default 14; 1 to 50 | - | 13 (0m) | readback only; firmware refs 8 | - | MCP rejects planner writes; controller safety context |
gl_main_lux_hysteresis | scheduled_policy | schedule | default 8000; 0 to 25000 | - | 8000 (0m) | confirmed; firmware refs 9 | - | MCP rejects planner writes; scheduled policy |
gl_main_lux_threshold | scheduled_policy | schedule | default 40000; 100 to 100000 | - | 40000 (0m) | confirmed; firmware refs 10 | - | MCP rejects planner writes; scheduled policy |
gl_main_min_off_s | scheduled_policy | schedule | default 60; 0 to 3600 | - | 60 (0m) | readback only; firmware refs 17 | - | MCP rejects planner writes; scheduled policy |
gl_main_min_on_s | scheduled_policy | schedule | default 120; 0 to 3600 | - | 120 (0m) | readback only; firmware refs 17 | - | MCP rejects planner writes; scheduled policy |
gl_main_sunrise_hour | scheduled_policy | schedule | default 7; 0 to 23 | - | 6 (0m) | readback only; firmware refs 10 | - | MCP rejects planner writes; scheduled policy |
gl_main_sunrise_offset_min | scheduled_policy | schedule | default 0; -1440 to 1440 | - | 0 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; scheduled policy |
gl_main_sunset_hour | scheduled_policy | schedule | default 19; 0 to 23 | - | 19 (0m) | readback only; firmware refs 10 | - | MCP rejects planner writes; scheduled policy |
gl_main_sunset_offset_min | scheduled_policy | schedule | default 0; -1440 to 1440 | - | 0 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; scheduled policy |
gl_main_target_light_minutes | scheduled_policy | schedule | default 960; 0 to 1080 | - | 780 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; scheduled policy |
gl_sunrise_hour | controller_safety | planner | default 7; 0 to 23 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; controller safety context |
gl_sunset_hour | controller_safety | planner | default 19; 0 to 23 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; controller safety context |
sw_gl_auto_mode | controller_safety | operator | default 1; switch 0/1 | - | - (-) | static route | - | MCP rejects planner writes; controller safety context |
Irrigation
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
irrig_center_days_mask | scheduled_policy | schedule | default 127; 0 to 127 | 127 | 127 (0m) | readback only; firmware refs 9 | 8095 (1m) | MCP rejects planner writes; scheduled policy |
irrig_center_duration_min | controller_safety | operator | default 10; 1 to 120 | - | 10 (0m) | readback only; firmware refs 7 | - | MCP rejects planner writes; controller safety context |
irrig_center_fert_days_mask | scheduled_policy | schedule | default 127; 0 to 127 | 127 | 127 (0m) | readback only; firmware refs 10 | 8095 (1m) | MCP rejects planner writes; scheduled policy |
irrig_center_fert_duration_min | controller_safety | operator | default 6; 0 to 60 | - | 6 (0m) | readback only; firmware refs 7 | - | MCP rejects planner writes; controller safety context |
irrig_center_fert_every_n | controller_safety | operator | default 0; 0 to 30 | - | 0 (0m) | readback only; firmware refs 10 | - | MCP rejects planner writes; controller safety context |
irrig_center_flush_min | controller_safety | operator | default 2; 0 to 30 | - | 2 (0m) | readback only; firmware refs 8 | - | MCP rejects planner writes; controller safety context |
irrig_center_interval_days | controller_safety | operator | default 1; 1 to 14 | - | 1 (0m) | readback only; firmware refs 7 | - | MCP rejects planner writes; controller safety context |
irrig_center_start_hour | controller_safety | operator | default 10; 0 to 23 | - | 10 (0m) | readback only; firmware refs 10 | - | MCP rejects planner writes; controller safety context |
irrig_center_start_min | controller_safety | operator | default 30; 0 to 59 | - | 30 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; controller safety context |
irrig_vpd_boost_pct | controller_safety | planner | default 25; 0 to 200 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; controller safety context |
irrig_vpd_boost_threshold_hrs | controller_safety | planner | default 3; 0 to 24 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; controller safety context |
irrig_wall_days_mask | scheduled_policy | schedule | default 127; 0 to 127 | 127 | 127 (0m) | readback only; firmware refs 9 | 8095 (1m) | MCP rejects planner writes; scheduled policy |
irrig_wall_duration_min | controller_safety | operator | default 10; 1 to 120 | - | 10 (0m) | readback only; firmware refs 7 | - | MCP rejects planner writes; controller safety context |
irrig_wall_fert_days_mask | scheduled_policy | schedule | default 127; 0 to 127 | 127 | 127 (0m) | readback only; firmware refs 10 | 8095 (1m) | MCP rejects planner writes; scheduled policy |
irrig_wall_fert_duration_min | controller_safety | operator | default 6; 0 to 60 | - | 6 (0m) | readback only; firmware refs 7 | - | MCP rejects planner writes; controller safety context |
irrig_wall_fert_every_n | controller_safety | operator | default 0; 0 to 30 | - | 0 (0m) | readback only; firmware refs 10 | - | MCP rejects planner writes; controller safety context |
irrig_wall_flush_min | controller_safety | operator | default 2; 0 to 30 | - | 2 (0m) | readback only; firmware refs 8 | - | MCP rejects planner writes; controller safety context |
irrig_wall_interval_days | controller_safety | operator | default 1; 1 to 14 | - | 1 (0m) | readback only; firmware refs 7 | - | MCP rejects planner writes; controller safety context |
irrig_wall_start_hour | controller_safety | operator | default 10; 0 to 23 | - | 10 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; controller safety context |
irrig_wall_start_min | controller_safety | operator | default 30; 0 to 59 | - | 30 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; controller safety context |
sw_irrigation_center_enabled | controller_safety | operator | default 1; switch 0/1 | - | - (-) | static route | - | MCP rejects planner writes; controller safety context |
sw_irrigation_enabled | controller_safety | operator | default 1; switch 0/1 | - | - (-) | static route | - | MCP rejects planner writes; controller safety context |
sw_irrigation_wall_enabled | controller_safety | operator | default 1; switch 0/1 | - | - (-) | static route | - | MCP rejects planner writes; controller safety context |
sw_irrigation_weather_skip | controller_safety | operator | default 0; switch 0/1 | - | - (-) | static route | - | MCP rejects planner writes; controller safety context |
Misting and sealed-humidification
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
mist_backoff_s | planner_policy | planner | default 600; 60 to 3600 | 600 | 600 (0m) | readback only; firmware refs 20 | - | materialized from climate_intent for routine set_plan |
mist_max_closed_vent_s | planner_policy | planner | default 600; 120 to 900 | 120 | 120 (0m) | readback only; firmware refs 14 | - | materialized from climate_intent for routine set_plan |
mist_thermal_relief_s | planner_policy | planner | default 90; 30 to 300 | 90 | 90 (0m) | readback only; firmware refs 14 | - | materialized from climate_intent for routine set_plan |
mist_vent_close_lead_s | retired | planner | default 15; 0 to 60 | - | 15 (0m) | reserved; firmware refs 12 | - | MCP rejects planner writes; reserved/no-op |
mist_vent_reopen_delay_s | retired | planner | default 45; 0 to 120 | - | 45 (0m) | reserved; firmware refs 12 | - | MCP rejects planner writes; reserved/no-op |
mister_all_delay_s | planner_policy | planner | default 300; 60 to 600 | 79.5 | 80 (0m) | confirmed; firmware refs 16 | 199 (7d) | materialized from climate_intent for routine set_plan |
mister_all_kpa | planner_policy | planner | default 1.9; 1 to 2.5 | 1.1 | 1.01 (0m) | 83/89 confirmed; firmware refs 9 | 1059 (1m) | materialized from climate_intent for routine set_plan |
mister_all_off_s | retired | planner | default 420; 120 to 600 | - | - (-) | reserved; firmware refs 8 | - | MCP rejects planner writes; reserved/no-op |
mister_all_on_s | retired | planner | default 480; 120 to 600 | - | - (-) | reserved; firmware refs 8 | - | MCP rejects planner writes; reserved/no-op |
mister_center_penalty | planner_policy | planner | default 0.5; 0 to 1 | 0.35 | 0.35 (0m) | readback only; firmware refs 9 | 4 (17d) | set_tunable allowed; planner may write with a hypothesis |
mister_engage_delay_s | planner_policy | planner | default 45; 30 to 300 | 39.75 | 40 (0m) | confirmed; firmware refs 14 | 199 (7d) | materialized from climate_intent for routine set_plan |
mister_engage_kpa | planner_policy | planner | default 1.6; 0.5 to 2.5 | 0.95 | 0.79 (0m) | 142/169 confirmed; firmware refs 10 | 1130 (1m) | materialized from climate_intent for routine set_plan |
mister_max_runtime_min | retired | planner | default 120; 5 to 480 | - | - (-) | reserved; firmware refs 6 | - | MCP rejects planner writes; reserved/no-op |
mister_min_off_s | planner_policy | planner | default 45; 30 to 120 | 50 | 50 (0m) | readback only; firmware refs 24 | - | set_tunable allowed; planner may write with a hypothesis |
mister_off_s | retired | planner | default 600; 120 to 900 | - | - (-) | reserved; firmware refs 8 | - | MCP rejects planner writes; reserved/no-op |
mister_on_s | retired | planner | default 300; 60 to 600 | - | - (-) | reserved; firmware refs 8 | - | MCP rejects planner writes; reserved/no-op |
mister_pulse_gap_s | planner_policy | planner | default 45; 10 to 60 | 26.25 | 26 (0m) | 66/67 confirmed; firmware refs 16 | 709 (6d) | materialized from climate_intent for routine set_plan |
mister_pulse_on_s | planner_policy | planner | default 60; 30 to 90 | 90 | 90 (0m) | confirmed; firmware refs 16 | - | materialized from climate_intent for routine set_plan |
mister_vpd_weight | planner_policy | planner | default 1.5; 0.5 to 3 | 2.5 | 2.5 (0m) | confirmed; firmware refs 10 | - | materialized from climate_intent for routine set_plan |
mister_water_budget_gal | planner_policy | planner | default 300; 100 to 300 | 300 | 300 (0m) | confirmed; firmware refs 8 | - | materialized from climate_intent for routine set_plan |
sw_mister_closes_vent | planner_policy | planner | default 0; switch 0/1 | 0 | 0 (0m) | readback only; firmware refs 16 | - | materialized from climate_intent for routine set_plan |
Operator
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
bias_cool | retired | operator | default 0; -10 to 10 | - | 0 (0m) | reserved; firmware refs 10 | - | MCP rejects planner writes; reserved/no-op |
bias_heat | retired | operator | default 0; -10 to 10 | - | 0 (0m) | reserved; firmware refs 10 | - | MCP rejects planner writes; reserved/no-op |
fan_burst_min | retired | operator | default 10; 1 to 60 | - | 10 (0m) | reserved; firmware refs 5 | - | MCP rejects planner writes; reserved/no-op |
vent_bypass_min | retired | operator | default 10; 1 to 60 | - | 10 (0m) | reserved; firmware refs 5 | - | MCP rejects planner writes; reserved/no-op |
Planner
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
band_track_fraction | planner_policy | planner | default 0.25; 0 to 1 | 0.25 | 0.25 (0m) | readback only; firmware refs 9 | - | materialized from climate_intent for routine set_plan |
dehum_aggressive_kpa | controller_safety | planner | default 0.6; 0.05 to 1 | - | 0.6 (0m) | readback only; firmware refs 13 | - | MCP rejects planner writes; controller safety context |
max_relief_cycles | controller_safety | planner | default 3; 1 to 10 | - | 3 (0m) | readback only; firmware refs 10 | - | MCP rejects planner writes; controller safety context |
night_vpd_bias_kpa | planner_policy | planner | default 0; 0 to 0.25 | 0 | 0 (0m) | readback only; firmware refs 9 | - | materialized from climate_intent for routine set_plan |
vent_exchange_fraction | planner_policy | planner | default 0.3; 0.1 to 0.6 | 0.3 | 0.3 (0m) | readback only; firmware refs 10 | - | materialized from climate_intent for routine set_plan |
vent_latch_timeout_ms | controller_safety | planner | default 1800000; 60000 to 7200000 | - | 1800000 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; controller safety context |
Readback-only firmware inputs
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
fallback_window_s | readback_context | firmware internal | default 900; 60 to 3600 | - | 3600 (0m) | readback only; firmware refs 12 | - | MCP rejects planner writes; readback context only |
outdoor_dewpoint_f | readback_context | firmware internal | default live; - to - | - | 46.287 (0m) | readback only; firmware refs 2 | - | MCP rejects planner writes; readback context only |
outdoor_temp_f | readback_context | firmware internal | default live; - to - | - | 68.486 (0m) | readback only; firmware refs 9 | - | MCP rejects planner writes; readback context only |
Relay dwell and rotation
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
lead_rotate_s | controller_safety | operator | default 600; 60 to 1800 | - | 600 (0m) | readback only; firmware refs 8 | - | MCP rejects planner writes; controller safety context |
min_fan_off_s | planner_policy | operator | default 90; 30 to 300 | - | 90 (0m) | readback only; firmware refs 14 | - | set_tunable allowed; planner may write with a hypothesis |
min_fan_on_s | planner_policy | operator | default 120; 30 to 300 | - | 120 (0m) | readback only; firmware refs 14 | - | set_tunable allowed; planner may write with a hypothesis |
min_heat_off_s | planner_policy | operator | default 180; 60 to 600 | - | 180 (0m) | readback only; firmware refs 14 | - | set_tunable allowed; planner may write with a hypothesis |
min_heat_on_s | planner_policy | operator | default 120; 30 to 300 | - | 120 (0m) | readback only; firmware refs 14 | - | set_tunable allowed; planner may write with a hypothesis |
min_vent_off_s | planner_policy | operator | default 60; 10 to 300 | - | 60 (0m) | readback only; firmware refs 14 | - | set_tunable allowed; planner may write with a hypothesis |
min_vent_on_s | planner_policy | operator | default 60; 10 to 300 | - | 60 (0m) | readback only; firmware refs 14 | - | set_tunable allowed; planner may write with a hypothesis |
Safety rails
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
safety_max | controller_safety | safety | default 95; 80 to 110 | - | 100 (0m) | readback only; firmware refs 25 | - | MCP rejects planner writes; controller safety context |
safety_max_seal_margin_f | controller_safety | planner | default 5; 1 to 15 | - | 5 (0m) | readback only; firmware refs 7 | - | MCP rejects planner writes; controller safety context |
safety_min | controller_safety | safety | default 45; 30 to 60 | - | 40 (0m) | readback only; firmware refs 14 | - | MCP rejects planner writes; controller safety context |
safety_vpd_max | controller_safety | safety | default 2.5; 2.5 to 3 | - | 2.5 (0m) | readback only; firmware refs 18 | - | MCP rejects planner writes; controller safety context |
safety_vpd_min | controller_safety | safety | default 0.3; 0.1 to 1.5 | - | 0.3 (0m) | readback only; firmware refs 16 | - | MCP rejects planner writes; controller safety context |
Summer vent gate
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
outdoor_staleness_max_s | planner_policy | planner | default 600; 120 to 1800 | 600 | 600 (0m) | readback only; firmware refs 8 | - | materialized from climate_intent for routine set_plan |
summer_vent_min_runtime_s | retired | planner | default 180; 60 to 600 | - | 180 (0m) | reserved; firmware refs 16 | - | MCP rejects planner writes; reserved/no-op |
sw_summer_vent_enabled | planner_policy | planner | default 1; switch 0/1 | 1 | 1 (0m) | readback only; firmware refs 26 | - | materialized from climate_intent for routine set_plan |
vent_prefer_dp_delta_f | planner_policy | planner | default 5; 2 to 15 | 3 | 3 (0m) | readback only; firmware refs 7 | - | materialized from climate_intent for routine set_plan |
vent_prefer_temp_delta_f | planner_policy | planner | default 5; 2 to 15 | 5 | 5 (0m) | confirmed; firmware refs 7 | - | materialized from climate_intent for routine set_plan |
Temperature band and staging
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
cold_vent_guard_delta_f | planner_policy | planner | default 10; 0 to 15 | 9 | 9 (0m) | confirmed; firmware refs 7 | - | materialized from climate_intent for routine set_plan |
cool_exit_hysteresis_f | planner_policy | planner | default 1.5; 0.3 to 3 | 1.69 | 1.69 (0m) | confirmed; firmware refs 7 | - | materialized from climate_intent for routine set_plan |
cool_stage2_exit_hysteresis_f | planner_policy | planner | default 1; 0.3 to 3 | 1 | 1 (0m) | readback only; firmware refs 7 | - | materialized from climate_intent for routine set_plan |
cool_stage2_over_high_f | planner_policy | planner | default 1; 0 to 3 | 0 | 0 (0m) | confirmed; firmware refs 9 | - | materialized from climate_intent for routine set_plan |
d_cool_stage_2 | retired | operator | default 3; 2 to 15 | - | 3 (0m) | reserved; firmware refs 2 | - | MCP rejects planner writes; reserved/no-op |
d_heat_stage_2 | retired | operator | default 5; 2 to 15 | - | 5 (0m) | reserved; firmware refs 2 | - | MCP rejects planner writes; reserved/no-op |
heat_hysteresis | planner_policy | planner | default 1; 0 to 3 | 1.1 | 1.1 (0m) | readback only; firmware refs 11 | - | materialized from climate_intent for routine set_plan |
sw_cool_all_fans_at_high_enabled | planner_policy | planner | default 0; switch 0/1 | 1 | 1 (0m) | confirmed; firmware refs 19 | - | materialized from climate_intent for routine set_plan |
temp_high | crop_band | band | default 95; 40 to 100 | - | 69.3 (0m) | confirmed; firmware refs 38 | - | MCP rejects planner writes; dispatcher/crop-band owned |
temp_hysteresis | planner_policy | band | default 1.5; 0.5 to 3 | 1.69 | 1.69 (0m) | confirmed; firmware refs 1 | - | materialized from climate_intent for routine set_plan |
temp_low | crop_band | band | default 40; 30 to 80 | - | 59.3 (0m) | confirmed; firmware refs 41 | - | MCP rejects planner writes; dispatcher/crop-band owned |
VPD band
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
vpd_high | crop_band | band | default 2.8; 0.4 to 3 | - | 0.74 (0m) | confirmed; firmware refs 39 | - | MCP rejects planner writes; dispatcher/crop-band owned |
vpd_hysteresis | planner_policy | band | default 0.3; 0.05 to 0.5 | 0.193 | 0.192 (0m) | confirmed; firmware refs 6 | - | materialized from climate_intent for routine set_plan |
vpd_low | crop_band | band | default 0.35; 0.1 to 1 | - | 0.19 (0m) | confirmed; firmware refs 40 | - | MCP rejects planner writes; dispatcher/crop-band owned |
vpd_watch_dwell_s | planner_policy | planner | default 60; 15 to 120 | 56.25 | 56 (0m) | confirmed; firmware refs 16 | - | materialized from climate_intent for routine set_plan |
Zone scoring
| Parameter | Class | Owner | Default / bounds | Active | Readback | Route | Clamps 30d | Planner status |
|---|---|---|---|---|---|---|---|---|
band_temp_target_mid | crop_band | band | default 65.71; 40 to 100 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_temp_target_sm | crop_band | band | default 78.79; 40 to 100 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_temp_target_sr | crop_band | band | default 67.5; 40 to 100 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_temp_target_ss | crop_band | band | default 77; 40 to 100 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_vpd_target_mid | crop_band | band | default 0.918; 0.1 to 3 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_vpd_target_sm | crop_band | band | default 1.042; 0.1 to 3 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_vpd_target_sr | crop_band | band | default 0.935; 0.1 to 3 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
band_vpd_target_ss | crop_band | band | default 1.025; 0.1 to 3 | - | - (-) | static route; firmware refs 5 | - | MCP rejects planner writes; dispatcher/crop-band owned |
east_adjacency_factor | controller_safety | planner | default 0.3; 0 to 1 | - | 0.3 (0m) | readback only; firmware refs 10 | - | MCP rejects planner writes; controller safety context |
vpd_target_center | crop_band | band | default 0.8; 0.1 to 3 | - | 0.73 (0m) | 1825/1826 confirmed; firmware refs 36 | - | MCP rejects planner writes; dispatcher/crop-band owned |
vpd_target_east | crop_band | band | default 1; 0.3 to 3 | - | 0.71 (0m) | 1802/1803 confirmed; firmware refs 33 | - | MCP rejects planner writes; dispatcher/crop-band owned |
vpd_target_south | crop_band | band | default 1.3; 0.3 to 3 | - | 0.74 (0m) | confirmed; firmware refs 36 | - | MCP rejects planner writes; dispatcher/crop-band owned |
vpd_target_west | crop_band | band | default 1.2; 0.3 to 3 | - | 0.53 (0m) | 1815/1816 confirmed; firmware refs 36 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_center_mid | crop_band | band | default 0.7; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_center_sm | crop_band | band | default 1.1; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_center_sr | crop_band | band | default 0.9; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_center_ss | crop_band | band | default 0.9; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_east_mid | crop_band | band | default 0.74; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_east_sm | crop_band | band | default 1.22; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_east_sr | crop_band | band | default 0.8; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_east_ss | crop_band | band | default 0.9; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_south_mid | crop_band | band | default 0.75; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_south_sm | crop_band | band | default 1.18; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_south_sr | crop_band | band | default 0.85; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_south_ss | crop_band | band | default 0.95; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_west_mid | crop_band | band | default 0.57; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_west_sm | crop_band | band | default 1.1; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_west_sr | crop_band | band | default 0.6; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
zone_vpd_target_west_ss | crop_band | band | default 0.7; 0.1 to 3 | - | - (-) | static route; firmware refs 6 | - | MCP rejects planner writes; dispatcher/crop-band owned |
Regenerate with scripts/generate-ai-tunables-page.py; publish through scripts/publish-site-content.sh so the static context and public site stay aligned.