eudr-active-farming

unverified
v0.1 AOI: San Joaquin Valley cropland block · bbox -120.05, 36.55, -119.85, 36.72

Per-parcel EUDR due-diligence signal: is each field actively farmed (seasonal NDVI cycle present) or recently cleared / deforested (anomalous change vs a baseline year)? The recipe runs a two-stage gate over Fields of the World parcel boundaries. Stage 1 is an active-cropland gate: harmonic_fit amplitude of the NDVI time series distinguishes seasonally cropped land (strong annual swing) from cleared or idle parcels (flat/anomalous). Stage 2 is a change signal: change_detection against a user-defined baseline window flags parcels where vegetation has declined since the reference year, consistent with recent clearing. Per-field zonal_stats collapses both signals to one row per FTW parcel — the table the compliance workflow consumes. The approach is grounded in Boryan et al. (2011) on NDVI-seasonality-based cropland mapping and Kerner et al. (2024) on learned crop-status signals; the implementation uses only declarative Folia ops so every step is inspectable and re-runnable from the same inputs.

Primary outputs
compute/parcel_status
Show your work
compute/seasonality compute/change compute/ndvi
Provenance
source_scene_ids
License
recipe
Apache-2.0
outputs
CC-BY-4.0
Map preview and live runs are available in the workbench.

The contract

legacy dialectcandidate

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

outputkindlayerwhat it is
primary not declared ['compute/parcel_status']
show_your_work not declared ['compute/seasonality', 'compute/change', 'compute/ndvi']
provenance not declared ['source_scene_ids']

Capabilities it requires

The legacy dialect has no requires: block.

Where it runs

  • Browser preview does not run here compute/change: op "change_detection" has no browser kernel; compute/ndvi: layer type "raster_timeseries" is not one folia-view parses; compute/ndvi_baseline: layer type "raster_timeseries" is not one folia-view parses; and 4 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
open in Workbench from registry/recipes/eudr-active-farming/folia.yaml