integrated-disturbance
Parameterized ALERT LAYER (docs/spec/ALERTS.md §2.2, §10.3 pilot): fuse four independent near-real-time forest-disturbance systems and fire where at least `min_agreement` of them flag the same H3 cell. This is Folia's reproduction of GFW's Integrated Disturbance Alerts (Reiche et al. 2024, ERL ad2d82) — but the fusion RULE is the user's, not the operator's. GFW bakes one confirmation rule; here `min_agreement` and each system's confidence gate are subscription parameters (ALERTS §2.2), so a 2-of-4 subscriber and a stricter 3-of-4 subscriber share this one layer definition without materializing variants. Four inputs, each addressable independently (§10.3 table): - glad_l : GLAD-L (30 m Landsat, bagged decision trees, 2-of-4 confirm) — GEE - glad_s2 : GLAD-S2 (10 m Sentinel-2, decision trees) — GEE - radd : RADD (10 m Sentinel-1 Bayesian; low P>0.85 / high P>0.975) — WUR - dist_alert : OPERA DIST-ALERT-HLS V1 (30 m HLS daily, VEG-DIST-STATUS baseline-anomaly) — LP DAAC (CMR granule API, GEE-free; research/change-detection/emapr-ensemble/models/opera/) Fusion (ALERTS §10.3): - Ruleset-1 (production GFW): `op: consensus`, `min_agreement: 2` — fire where >=2 systems agree at a cell, regardless of individual confidence. The simple, generic case; the whole rule is the `consensus` op below. - Ruleset-2 (Reiche 2024 conservative: 3 low OR 2 high): recipe-local, NOT promoted to the generic op. Composed from two `consensus` calls at different per-input confidence gates and OR-ed (see the `alerts/integrated-disturbance-r2` layer). The `consensus` op vocabulary stays `any_k_agree`. Each firing commits WHICH systems agreed (ALERTS §4): the consensus record's `agreed` field lists the input names that flagged the cell (e.g. `[glad_l, radd]`), not just the count — so the receiver sees the reasoning, no hidden magic.
- recipe
- Apache-2.0
- outputs
- CC-BY-4.0
The contract
Read from this recipe's own declarations — parameters:,
outputs:, requires:, and the ops its layers name. Not from its
style blocks and not from any benchmark: a colour ramp is not a contract, and a measured
run is evidence about one AOI rather than a domain.
Parameters
The legacy dialect has no typed parameter schema. Read the folia.yaml for what this recipe takes; nothing here can type-check it.
Outputs
| output | kind | layer | what it is |
|---|---|---|---|
primary |
not declared | ['alerts/integrated-disturbance'] |
|
variants |
not declared | ['alerts/integrated-disturbance-r2'] |
|
show_your_work |
not declared | ['source/glad-l', 'source/glad-s2', 'source/radd', 'source/dist-alert'] |
|
provenance |
not declared | ['agreed', 'n_agree', 'min_agreement_applied', 'thresholds_applied'] |
Capabilities it requires
The legacy dialect has no requires: block.
Where it runs
- Browser preview does not run here alerts/_r2-arm-2high: layer type "computed" is not one folia-view parses; alerts/_r2-arm-3low: layer type "computed" is not one folia-view parses; alerts/_r2-arm-stack: layer type "computed" is not one folia-view parses; and 6 more
- Local CLI (folia run) runs here runs locally through the legacy (no spec_version) parser
- Operated fleet (POST /plan, /run) runs here legacy dialect: a lock binds by the cut's layer names, not by digest
registry/recipes/integrated-disturbance/folia.yaml