Operational Risk & GO / CAUTION / NO-GO Methodology
Last updated: 2026-07-16 Status: Living technical reference (decision-support only)
Operator
Diogo Botelho Moniz
Trading as
Azure AI Weather
A FrontSea Intelligence product
Portugal
Contact: contact@azureai.pt
Related: MODEL_REGISTRY.md (RISK-001, CONF-001) · VERSIONING_POLICY.md · AI_SYSTEM_CARD.md · AI_ACT_COMPLIANCE.md · docs/README.md
Purpose
This document describes how Azure computes the Operational Risk Index and the GO / CAUTION / NO-GO advisory layer shown in Skipper and Black Box replay. These outputs support human planning; they do not control vessels or replace skipper judgement.
Architecture overview
Weather & marine inputs (IPMA, OpenWeather, ERA5 patterns, IoT station, tides, storm index)
↓
Decision graph (deterministic weighted nodes)
↓
operational_risk (0–1) + confidence (0–1)
↓
evaluate_go_nogo() — ternary advisory status
↓
Skipper UI / Black Box recording / optional LLM narrative (Insight)
The numeric risk score is computed deterministically. Skipper Insight and home chat may use an LLM to *explain* fused context; the LLM does not set GO/NO-GO thresholds.
Operational Risk Index
Implementation: decision_graph/nodes/risk_nodes.py, orchestrated via services/marine_service.py and decision_graph/builder.py.
Formula:
operational_risk = 0.40 × wind_risk + 0.30 × sea_risk + 0.30 × instability_risk
Each sub-risk is normalized to approximately 0–1 based on fused wind, sea state, and atmospheric instability inputs from the marine stack.
Sea discomfort (period-aware): core/operational_severity.py adjusts wave discomfort using swell/wave period — longer-period swell is treated as more manageable than short chop at the same height.
Confidence Score
Registry ID: CONF-001 — see MODEL_REGISTRY.md.
Implementation: confidence/confidence_engine.py via decision_graph/nodes/confidence_nodes.py
What Confidence means
Confidence represents the quality and consistency of available information (regional coverage, forecast horizon, source agreement).
| Point | Explanation |
|---|---|
| Low confidence | Does not necessarily indicate dangerous conditions |
| Low confidence means | Greater uncertainty within the available environmental information |
| Independence | Operational Risk and Confidence are independent indicators |
When confidence is below ~0.45, the GO/NO-GO layer records a low_confidence factor so users treat the advisory with extra caution — without interpreting low confidence as “unsafe sea state.”
Formula (v1): weighted combination of regional coverage, forecast hours ahead, and source spread — see CONF-001 in MODEL_REGISTRY.md.
Governance summary: AI_ACT_COMPLIANCE.md §3.1.
GO / CAUTION / NO-GO thresholds
Single source of truth: skipper/go_nogo.py — function evaluate_go_nogo().
| Status | Conditions (simplified) |
|---|---|
| NO-GO | operational_risk ≥ 0.72 or storm label in severe / storm / high |
| CAUTION | operational_risk ≥ 0.52 or uncomfortable/rough/dangerous sea regime or storm_probability ≥ 0.55 |
| GO | Otherwise |
Rationale strings (advisory):
- NO-GO: *Operational risk or storm classification exceeds safe operating envelope.*
- CAUTION: *Elevated risk — proceed only with heightened vigilance and contingency planning.*
- GO: *Conditions within acceptable operational envelope for routine planning.*
These are planning envelopes, not legal or regulatory clearance to sail.
Storm engine & ERA5 patterns
Registry IDs: STORM-001, ERA5-PT-001, ERA5-GL-001 — full specs in MODEL_REGISTRY.md.
| Component | Role |
|---|---|
services/storm_engine.py | Storm Severity Index (SSI); optional classifier when model deployed |
services/era5_service.py | Portugal-local ERA5 K-means pattern clustering (historical climatology) |
services/era5_global_service.py | Global ERA5 regime clustering |
ERA5 outputs describe historical pattern affinity (e.g. nortada, calm coastal). They inform context and narrative; they are not live observations.
Human oversight hooks
- Human Override Principle: every AI / advisory output may be ignored; skipper judgement prevails.
- Black Box: operational recording and replay — skippers can confirm or override recorded decisions (
human.confirmation,human.overrideevents). Black Box never controls a vessel or issues navigation commands. - Field Check (Founders): structured yes/no feedback compares user experience to Azure predictions for calibration.
- Official forecasts: users are encouraged to cross-check IPMA and national warnings.
Limitations
- Forecasts are probabilistic; conditions can change faster than model refresh cycles.
- Local effects (harbour wind, currents, traffic) may not be captured at grid resolution.
- IoT station coverage is point-based (e.g.
Azure_Station_V1near Lisbon). - Thresholds are general-purpose; vessel type, crew experience, and route specifics are not fully modeled.
Version management
Registry ID: RISK-001 (azure_v2_core_1.0).
Full policy: VERSIONING_POLICY.md. Change history: MODEL_CHANGELOG.md.
Risk weights and GO/CAUTION/NO-GO thresholds are versioned in source control. Changes require code review and regression tests (tests/test_skipper_go_nogo.py, tests/test_operational_severity.py).
Deployed .pkl models (ERA5, storm) are updated manually by the development team; Black Box does not auto-train or auto-promote models.