UTC --:--:--
Docs·Concepts·Hard gates

Hard gates override the score

Some conditions floor the score regardless of how good the rest of the forecast looks. Goable encodes these as hard gates: when one fires, the verdict floors to unsafe or not_feasible depending on the gate's kind. Hard gates are decision support, not a safety certification; the operator retains go/no-go authority.

What a hard gate is

Most scoring dimensions are smooth: more wind is gradually better up to a point, then gradually worse. Some are step functions instead, and those come in two flavours. A kind: "safety" gate is a danger threshold — lightning within 10km of your spot doesn't degrade conditions, it makes them unsafe to be in the water at all. A kind: "feasibility" gate is a prerequisite, not a hazard — wind below the ridable minimum doesn't make a session dangerous, it makes it not happen. When a gated dimension exceeds threshold, the engine floors the verdict to unsafe (safety) or not_feasible (feasibility) and surfaces an alert in the alerts array of the response.

Universal gates

Two kind: "safety" gates apply to all activities across the families; they operate independently of the profile and always force unsafe — real danger, never a feasibility call:

Lightning proximity ≥ 0.85

Strikes detected within 10km of the spot within the request window. The number is normalised; ≥0.85 means high probability of in-window strike. Triggers unsafe verdict + alert lightning_proximity.

Air quality category = hazardous

OpenAQ / CAMS reports PM2.5 / O3 / NO2 in the hazardous band. Outdoor sustained activity unsafe regardless of the rest. Triggers unsafe + alert hazardous_aqi.

Profile-specific gates

Beyond the universal pair, each activity profile can declare its own safety or feasibility gates on its dimensions. Some examples shipped in the public catalog:

  • Kitesurfing, beginner profile (safety): wave height ceiling at 1.2m. Above it, the verdict floors to unsafe regardless of wind quality.
  • Kitesurfing (feasibility): wind below the ridable minimum. Below it, the verdict floors to not_feasible — no session is happening, but it isn't a danger call.
  • Ski-touring, avalanche-aware profiles (safety): SLF avalanche bulletin ≥ "considerable" (level 3) on the relevant aspect/elevation gate.
  • Paragliding (safety): wind gust factor above pilot certification's ceiling forces unsafe.
  • Surfing, bodyboarding, SUP and open-water swimming (safety): rip-current hazard proxy above 0.75 for board sports (0.6 for swimmers) trips RIP_CURRENT_HAZARD, forcing unsafe.
  • Freeride, snowboarding, ski-touring and alpine-skiing (safety): blowing-snow visibility below ~150m trips BLOWING_SNOW_WHITEOUT, forcing unsafe.

Browse the per-profile gates in the activity catalog. Adding a new gate is a PR to the public profiles repo; the schema is documented at the same URL.

How they appear in the response

A gated response carries the same score-and-breakdown shape as any other, but verdict is forced to unsafe (a safety gate) or not_feasible (a feasibility gate), and the alerts array lists each gate that fired, each tagged with the kind that tripped it. Treat a non-empty alerts array as a strong signal: at least one hard gate is tripped and Goable's verdict is not to go — but only a safety-tagged alert means an actual danger threshold was breached. The operator retains final go/no-go authority.