Calibrated from GEE execution on 2026-03-29 (actual: 36.47%). The 2020 Creek Fire was a major wildfire in the Sierra National Forest. Cross-platform variation expected from cloud masking, compositing, and scale factor application on Landsat 8 Collection 2 Level 2 surface reflectance.
| Workflow | Model | Backend | Status | Answer | Error | Cost | Latency |
|---|---|---|---|---|---|---|---|
| exec | gold | folia-rust | PASS | 36.432564 | 0.2% | --- | 214ms |
| exec | gold | gee | PASS | 36.47226185776869 | 0.1% | $0.000151 | 2.7s |
| exec | gold | qgis | PASS | 36.432564 | 0.2% | --- | 500ms |
Known-correct folia spec for this problem. This is the reference implementation used for backend quality testing.
# Platform Comparison: Fire Burn Severity (dNBR) -- Gold Spec
#
# Compute differenced Normalized Burn Ratio from pre/post-fire
# Landsat 8 imagery over the 2020 Creek Fire, California.
# Ground truth: ~35% moderate-to-high severity (dNBR > 0.27).
#
# This spec is designed to run through both the Python backend and
# browser-wasm executor (folia bench exec -b browser-wasm).
name: fire-burn-severity
version: "1.0"
description: >
Fire burn severity analysis via dNBR (differenced Normalized Burn Ratio).
Pre-fire (June 2020) and post-fire (Oct 2020) Landsat 8 composites.
Ground truth: ~36.5% moderate-to-high severity (calibrated from GEE 2026-03-29).
settings:
default_bbox: [-119.5, 37.0, -119.1, 37.4]
default_crs: EPSG:4326
layers:
# ============================================================
# SOURCE LAYERS
# ============================================================
source/pre-fire:
uri: stac://earth-search/landsat-c2-l2
type: raster
description: >
Landsat 8 Collection 2 Level 2, pre-fire composite (June 2020).
Creek Fire area, Sierra National Forest, CA.
params:
bbox: [-119.5, 37.0, -119.1, 37.4]
datetime: "2020-06-01/2020-07-15"
query:
platform: landsat-8
source/post-fire:
uri: stac://earth-search/landsat-c2-l2
type: raster
description: >
Landsat 8 Collection 2 Level 2, post-fire composite (Oct 2020).
Creek Fire area, Sierra National Forest, CA.
params:
bbox: [-119.5, 37.0, -119.1, 37.4]
datetime: "2020-10-01/2020-11-15"
query:
platform: landsat-8
# ============================================================
# COMPUTE: CLOUD MASKING + COMPOSITING
# ============================================================
compute/pre-masked:
type: raster
description: >
Cloud-masked pre-fire Landsat 8 imagery.
compute:
op: cloud_mask_landsat
inputs:
data: { layer: source/pre-fire }
params:
collection: C02
compute/post-masked:
type: raster
description: >
Cloud-masked post-fire Landsat 8 imagery.
compute:
op: cloud_mask_landsat
inputs:
data: { layer: source/post-fire }
params:
collection: C02
compute/pre-composite:
type: raster
description: >
Median composite of pre-fire cloud-masked images.
compute:
op: temporal_reduce
inputs:
data: { layer: compute/pre-masked }
params:
reducer: median
compute/post-composite:
type: raster
description: >
Median composite of post-fire cloud-masked images.
compute:
op: temporal_reduce
inputs:
data: { layer: compute/post-masked }
params:
reducer: median
# ============================================================
# COMPUTE: NBR (same formula as NDVI but with NIR and SWIR2)
# ============================================================
compute/pre-nbr:
type: raster
description: >
Pre-fire NBR = (NIR - SWIR2) / (NIR + SWIR2).
Landsat 8 C2 L2: B5=NIR, B7=SWIR2 (with scale/offset applied).
compute:
op: raster_calc
inputs:
nir: { layer: compute/pre-composite, band: SR_B5 }
swir2: { layer: compute/pre-composite, band: SR_B7 }
params:
expression: "(nir * 0.0000275 - 0.2 - (swir2 * 0.0000275 - 0.2)) / (nir * 0.0000275 - 0.2 + (swir2 * 0.0000275 - 0.2))"
compute/post-nbr:
type: raster
description: >
Post-fire NBR = (NIR - SWIR2) / (NIR + SWIR2).
compute:
op: raster_calc
inputs:
nir: { layer: compute/post-composite, band: SR_B5 }
swir2: { layer: compute/post-composite, band: SR_B7 }
params:
expression: "(nir * 0.0000275 - 0.2 - (swir2 * 0.0000275 - 0.2)) / (nir * 0.0000275 - 0.2 + (swir2 * 0.0000275 - 0.2))"
# ============================================================
# COMPUTE: dNBR AND SEVERITY CLASSIFICATION
# ============================================================
compute/dnbr:
type: raster
description: >
Differenced NBR: pre_NBR - post_NBR.
Positive values indicate burn severity.
compute:
op: raster_calc
inputs:
pre: { layer: compute/pre-nbr }
post: { layer: compute/post-nbr }
params:
expression: "pre - post"
compute/severe:
type: raster
description: >
Binary mask of moderate-to-high burn severity (dNBR > 0.27).
compute:
op: raster_threshold_mask
inputs:
data: { layer: compute/dnbr }
params:
threshold: 0.27
operator: gt
# ============================================================
# RESULT: SEVERITY PERCENTAGE
# ============================================================
result/severity-pct:
type: table
description: >
Percentage of AOI with moderate-to-high burn severity.
Ground truth: ~36.5%.
compute:
op: analysis_zonal_stats
params:
stats: [mean]
inputs:
raster: { layer: compute/severe }
The prompt given to LLMs in single-shot workflow benchmarks.
Problem: Compute fire burn severity using differenced Normalized
Burn Ratio (dNBR) from pre-fire and post-fire Landsat 8 imagery
over the 2020 Creek Fire area in California.
Methodology:
- Pre-fire composite: June 2020 (before ignition Sep 4)
- Post-fire composite: October 2020
- NBR = (NIR - SWIR2) / (NIR + SWIR2)
- dNBR = pre_NBR - post_NBR
- Severity classes: unburned (<0.1), low (0.1-0.27),
moderate (0.27-0.44), high (>0.44)
- Report percentage of AOI classified as moderate-to-high (dNBR > 0.27)
Study area: -119.5, 37.0, -119.1, 37.4 (Creek Fire, Sierra NF, CA).
Data: Landsat 8 Collection 2 Level 2 Surface Reflectance.
Expected answer: approximately 36.5% moderate-to-high severity.