C6 Carbon Model

C6 Carbon Model — Canonical Metric Catalog

Date: 2026-05-07 Purpose: Define the C6-native carbon model. Every methodology (Verra legacy, VM0048, VM0047, ART TREES, Plan Vivo, Gold Standard, CDM, IPCC) maps onto this catalog as a projection — a subset of metrics with methodology-specific transforms. C6 owns the data model; methodologies are configurations on top.

Pairs with: methodology-inputs-comparison.md (the upstream input survey) and app/units/registry.py (the canonical-unit enforcement layer).

Design principle: if a metric appears in ≥2 methodologies it is core and lives directly in farm_metrics. If it appears in only one methodology and is high-cardinality (per-tree, per-plot, per-pixel), it lives in a side table (carbon_measurements, plot_measurements, etc.) and is aggregated into a farm_metric row at compute time.


1. Metric layers

Three layers, top to bottom:

LayerWhere storedCardinalityExample
L0 — Raw observationcarbon_measurements, plot_measurements, satellite raster cachehigh (per tree, per plot, per pixel × year)DBH=42 cm, plot SOC core 0–30 cm
L1 — Farm metric (canonical)farm_metricsmedium (per farm × code × vintage)agb = 78.4 tC/ha (2024)
L2 — Methodology outputvintage_ledger rows + project_computationlow (per project × vintage)VM0048 baseline = 12,400 tCO₂e/yr

This catalog is the L1 list — what every farm should carry to feed any methodology. L0 sources and L2 transforms are referenced but not enumerated here.


2. Canonical metric catalog

Columns:

  • codefarm_metrics.metric_type.code (matches app/units/registry.py where applicable)
  • canonical unit — what value_canonical carries (matches REGISTRY[code].canonical)
  • accepts — input units the converter accepts (raw side)
  • pool / class — IPCC pool, LULC class, or driver category
  • methodologies — which standards consume it (V7=VM0007, V15=VM0015, V48=VM0048, V47=VM0047, V9=VM0009, ART=ART TREES 2.0, PV=Plan Vivo, GS=Gold Standard, CDM=CDM A/R)
  • C6 statuslive (in DB today), partial (live but missing fields), gap (need to add)
  • L0 source — where raw data comes from

Pool codes: AGB = above-ground biomass; BGB = below-ground; DW = dead wood; L = litter; SOC = soil organic carbon; HWP = harvested wood products. Carbon fraction (CF) and 44/12 stoichiometry applied at engine layer, not storage.

2.1 Geometry & area

codecanonicalacceptsclassmethodologiesC6L0 source
total_area_hahaha, km², m², acresfarm grossallliveKML/shapefile + PostGIS ST_Area
net_usable_area_hahahafarm net (post-overlay deductions)alllivetotal − protected − indigenous − water
aud_area_hahahaREDD-AUD project areaV7,V9,V15,V48,ARTlivefarm geometry × forest mask
apd_area_hahahaREDD-APD planned-deforestation areaV7,V15liveconcession docs + farm geometry
arr_eligible_area_hahahaARR area (10-yr non-forest test)V47,GS,CDM,PVgapHansen GFC ≥10 yr non-forest mask + geometry
degraded_forest_area_hahahaARR-on-degraded-forest area (V47 v1.1)V47gapRS biomass below threshold + farm geometry
leakage_belt_area_hahahaactivity-shift leakage beltV7,V15,V48,V47gapconfigurable buffer (10–20 km) around AUD
discounted_overlap_hahahatotal overlay deductionsalllivesum of overlay overlap
protected_area_overlap_hahahaWDPA overlayallliveoverlay runner
indigenous_land_overlap_hahahaFUNAI/ANT/INEI overlayallliveoverlay runner

2.2 Forest cover & stratification

codecanonicalacceptsclassmethodologiesC6L0 source
forest_cover_hahahacurrent forest extentallliveMapBiomas / PRODES
forest_cover_pct%%, ha (with denom)derivedallliveforest_cover_ha / total_area_ha
forest_type_classenumtextstratificationallgapMapBiomas Collection 10 forest subtype
disturbance_classenumtextundisturbed / logged / secondaryV7,V47,V48,ARTgapRS time-series + biomass
forest_age_yearsyryrstand age (ARR/IFM)V47,GS,CDMgapplanting records or RS regrowth detection
stratum_idintintstratum FKallgapC6 stratification table (forest type × disturbance × age)

2.3 Carbon pools — per-stratum density

codecanonicalacceptspoolmethodologiesC6L0 source
agbtC/hatDM/ha, tC/ha, Mg/haAGBalllivefield plots + Chave 2014; or GEDI L4A/B; or vendor PDFs (Canopy, C2050, ClearBlue)
agb_density_mg_haMg/haMg/haAGB (raw remote-sensing)allliveGEDI L4A AGBD, ESA CCI Biomass
bgbtC/hatDM/ha, tC/haBGBallliveAGB × root-shoot ratio (Mokany 2006) or field excavation
bgb_density_mg_haMg/haMg/haBGB (raw)alllivederived from AGB
dw_densitytC/hatDM/ha, tC/hadead woodV7,V9,V15,V47,ART,GSgapline-intersect sampling for lying DW; plot for standing DW
litter_densitytC/hatDM/ha, tC/halitterV7,V9,V47,ART,GSgap0.25 m² destructive plot sampling
soctC/hatC/ha, g/kg×depthSOC 0–30 cmV7-peat,V9,V47,ART,PVliveSoilGrids 250 m or core (0–30 cm + bulk density + %C)
soc_methodenumtexttier1_default / tier2_regional / tier3_measuredall SOC usersgapprovenance — drives uncertainty
hwp_carbontCtCHWP retention poolV7-IFM,GSgapmill records + IPCC Winjum 1998 retention factors
non_woody_biomasstC/hatDM/ha, tC/haherbaceous (V47 conditional)V47gapplot harvest sampling

2.4 Allometric inputs (per-plot, aggregated)

These live at L0 (plot_measurements) and aggregate up. Listed here for completeness — C6 must store these to defend its own AGB numbers.

codecanonicalacceptsclassmethodologiesC6L0 source
plot_dbhcmcm, mmper-tree DBHall forestgapfield plot
plot_heightmm, cmper-tree heightall forestgapfield plot (clinometer / hypsometer)
plot_speciesenumtextper-tree species codeall forestgapfield botanist
wood_density_t_m3t/m³g/cm³, t/m³ρ per speciesall forestgapGlobal Wood Density Database (Zanne 2009)
carbon_fractiondimensionlessunitlessCF (default 0.47)allgap (in code, not table)IPCC default or measured; lives in app.methodologies.params today
root_shoot_ratiodimensionlessunitlessR per biomeall forestgap (in code)IPCC 2006 Table 4.4; in params today
befdimensionlessunitlessbiomass expansion factorvolume-based inventoriesgapIPCC Vol. 4 Table 4.5
allometric_equation_idenumtextwhich equation usedall forestgapC6 lookup (Chave 2014 pantropical, regional…)
plot_area_haham², haplot footprintall forestgapsurvey records
plot_geomPostGIS Point/Polyplot locationall forestgapGPS

2.5 Activity data — historical & projected deforestation

codecanonicalacceptsclassmethodologiesC6L0 source
historical_deforestation_rate%/yr%/yr, ha/yrreference-period rateV7,V15,V9,GSlivePRODES 10-yr trend
aud_annual_deforest_pct%/yr%/yrAUD baseline rateV7,V15,V48,ARTlivereference region trend or jurisdictional allocation
apd_annual_deforest_pct%/yr%/yrAPD planned rateV7,V15liveconcession plan
aud_annual_avoided_deforest_haha/yrha/yrderived AD outputV7,V15,V48,ARTliverate × area
defor_primary_hahahaper-vintage primary lossV7,V15,V48,ART,V9liveMapBiomas Alerta + PRODES
defor_secondary_hahahaper-vintage secondary lossV7,V15,V48liveMapBiomas
defor_recurrent_hahaharecurrent on previously-clearedV48,ARTliveMapBiomas
defor_total_hahahatotal per vintageall REDDlivesum
defor_cumulative_hahahawindowed sumall REDDlivederived
degradation_hahahadegradation per vintage (future V48 module)V48 (future), ARTgapSentinel-1 / GEDI / DETER
forest_gain_hahaharegrowth per vintageART, V47gapMapBiomas, Hansen
jurisdictional_jad_tco2etCO₂etCO₂e, ktCO₂e, MtCO₂eVerra-supplied JADV48gapVMD0055 jurisdictional file
allocated_baseline_tco2e_yrtCO₂e/yrtCO₂e/yrrisk-allocated to project pixelsV48gapVerra risk map × project geometry
fcbm_forest_ha_t1 / t2 / t3hahaForest Cover Benchmark Map at 3 timepointsV48gapVMD0055 jurisdictional file
baseline_sourceenumtextdiscriminator: historical_projected / jurisdictionally_allocated / dynamic_control_matched / community_PRA / national_NFMSallgapproject config

2.6 LULC class areas (current state)

Already live as lulc_*_ha. These feed stratification + leakage analysis.

codecanonicalclassC6
lulc_native_nonforest_hahawetland/grasslandlive
lulc_pasture_hahapasturelive
lulc_agriculture_hahaannual + perennial cropslive
lulc_forest_plantation_hahaplantationlive
lulc_urban_hahaurbanlive
lulc_mining_hahamininglive
lulc_water_hahawaterlive
lulc_other_hahabeach/bare/unobservedlive

2.7 Driver / risk layers

codecanonicalacceptsclassmethodologiesC6L0 source
dist_to_road_mmm, kmdriverV15,V48gapOSM roads + farm centroid / nearest pixel
dist_to_settlement_mmm, kmdriverV15,V48gapgridded population (GHSL, WorldPop)
dist_to_river_mmm, kmdriverV15gapHydroRIVERS / RAISG
dist_to_prior_clearing_mmm, kmdriverV15,V48gapMapBiomas annual
slope_pct%%, degdriverV15,V48gapSRTM 30 m
elevation_mmmdriverV15,V48gapSRTM
tenure_classenumtextprivate / public / reserve / undefinedV15,V48,PVgapSIGEF/CAR (Brazil), ANT (Colombia), COFOPRI (Peru)

2.8 ARR-specific (V47, GS, CDM, PV)

codecanonicalacceptsclassmethodologiesC6L0 source
pre_project_land_use_classenumtextcropland / pasture / barren / degraded forestV47,GS,CDM,PVgapMapBiomas + farm survey
pre_project_land_use_yearsyryrlength of pre-project state (V47 ≥10 yr)V47,GSgapMapBiomas time series
stocking_indexdimensionlessunitlessV47 biomass-based SIV47gapRS biomass product (GEDI L4B / Chloris / Kanop / Planet)
matched_control_plot_idtextk-NN matched control referenceV47gapC6 matching algorithm + donor pool
matched_control_si_deltadimensionlessannual ΔSI (project − control)V47gapderived per verification
common_practice_pct%%adoption rate of activity in jurisdictionV47,GSgapsub/national land-use statistics
species_plantedenumtextplanted species mixV47,GS,CDM,PVgapproject planting plan
survival_rate_pct%%, count_ratiotree survival (PV indicator)PV,GSgapannual count
tree_countcountcountcensus-based ARR tree countV47-censusgapGPS field census
mean_height_mmmstand height (≥2 m forest test for GS)GS,CDMgapfield / LiDAR
crediting_period_yearsyryrproject lifetimeV47,GS,CDM,PVlive (project-level)project setting

2.9 Site-prep & non-CO₂ emissions

codecanonicalacceptsclassmethodologiesC6L0 source
fertilizer_n_kg_hakg N/hakg/hadirect NV47,GS,CDMgapproject records
n2o_emission_factordimensionlessunitlessEF1 (IPCC default 0.01)V47,GS,CDMgap (in params)IPCC 2006 Vol. 4 Ch. 11
biomass_burning_hahahasite-prep / fire-prep areaV47,GS,V7,V48partial (fire metrics live)active-fire products + records
combustion_completenessdimensionlessunitlessCC factorV7,V47,GSgap (params)IPCC 2006 Vol. 4 Table 2.6
ch4_emission_factordimensionlessunitlessg CH₄ / kg dry matter burnedV7,V47,GSgap (params)IPCC 2006 Vol. 4 Table 2.5
fossil_fuel_co2_ttCO₂etCO₂e, kgmachinery + transportV47,GS,CDMgapproject records

2.10 Fire & disturbance history

codecanonicalacceptsclassmethodologiesC6L0 source
fire_cumulative_burned_hahahawindow totalallliveMapBiomas Fogo
fire_affected_pct%%derivedalllivederived
fire_max_frequencycountcountper-pixel max event countallliveMapBiomas Fogo

2.11 Leakage

codecanonicalacceptsclassmethodologiesC6L0 source
leakage_belt_defor_ha_yrha/yrha/yractivity-shift detectionV7,V15,V48,V47gapMapBiomas inside leakage belt
market_leakage_factor_pct%%commodity-shift discountV7,V48,V47gapVMD0011 default tables or modelled
pre_project_production_t_yrt/yrt/yr, kg/yrcommodity production displaced (ARR)V47,GS,CDMgapfarm + statistics
displaced_production_t_yrt/yrt/yractual displacement observedV47gappost-start surveys
new_forest_cleared_for_displacement_hahaha5-yr post-start leakage areaV47gapsatellite of leakage area

2.12 Uncertainty & QA per pool

codecanonicalacceptsclassmethodologiesC6L0 source
agb_uncertainty_pct_ci95%%95% CI half-widthallgapplot variance + RS error
bgb_uncertainty_pct_ci95%%95% CIallgappropagated from AGB or root data
dw_uncertainty_pct_ci95%%95% CIV7,V47,ART,GSgapline-intersect variance
litter_uncertainty_pct_ci95%%95% CIV7,V47,ART,GSgapplot variance
soc_uncertainty_pct_ci95%%95% CIV7-peat,ARTgapcore variance
activity_data_uncertainty_pct_ci95%%RS classification accuracyV48,ARTgapconfusion-matrix-based
combined_uncertainty_pct_ci95%%aggregatedV48,ARTgappropagation per VMD0017 / TREES
uncertainty_deduction_pct%%conservativeness deduction appliedV48,ARTgapderived

2.13 Buffer / permanence / risk

codecanonicalacceptsclassmethodologiesC6L0 source
buffer_pct%%non-permanence bufferalllive (project-level)risk tool output
buffer_risk_scorescore 0–100scorerisk tool compositeallpartial (risk_score exists)VCS Buffer Risk Tool, ART risk tool
permanence_horizon_yearsyryrminimum monitoring periodallgap (in static dossier)methodology-specific
reversal_event_hahahapost-start observed reversalallgapsatellite + field

2.14 ART TREES jurisdictional (mostly project-level, but some farm contributes)

codecanonicalacceptsclassmethodologiesC6L0 source
hfld_scoredimensionlessunitlessforest cover × deforest rateARTgapjurisdictional NFMS
nfms_emission_factor_tco2e_hatCO₂e/hatCO₂e/ha, tC/haper-stratum NFMS-derived EFARTgapNational Forest Inventory
accounting_area_jurisdictiontextjurisdiction codeARTgapproject config

2.15 Plan Vivo non-carbon indicators

Required for issuance under PV. Not “carbon” but blocks credits if missing.

codecanonicalacceptsclassmethodologiesC6L0 source
livelihood_indicator_scorescore 0–100scorePV §4.3PVgaphousehold surveys
ecosystem_indicator_scorescore 0–100scorePV §4.4 (biodiversity)PVgapfield + RS
pra_baseline_idtextparticipatory rural appraisal anchorPVgapcommunity workshops

2.16 Project-level financial / output (already L2)

These belong in project_computation / vintage_ledger, listed for completeness — they should not be stored as farm_metrics (output, not input).

codecanonicalC6notes
gross_capacity_tco2e_yrtCO₂e/yrlivemethodology output
net_issuable_tco2e_yrtCO₂e/yrlivepost leakage + buffer
lifetime_tco2etCO₂elivenet × crediting period
headline_price_usd_tco2eUSD/tCO₂elivefrom forecast curve
annual_credits_ktkt CO₂e/yrlivedisplay unit
aud_annual_credits_ktkt CO₂e/yrliveAUD slice
apd_annual_credits_ktkt CO₂e/yrliveAPD slice

3. Coverage matrix — methodologies vs C6 metrics

How complete is C6 today, by methodology?

MethodologyTotal inputs neededLive in C6PartialGapCoverage
VM0007 legacy REDD+ MF~251111344%
VM0009 avoided ecosystem conversion~1571747%
VM0015 AUD legacy~20811140%
VM0048 + VMD0055 new REDD~18701139%
VM0047 ARR~22401818%
ART TREES 2.0 jurisdictional~1661938%
Plan Vivo PV Climate~14401029%
Gold Standard A/R~17401324%
CDM AR-AMS0007~1230925%

REDD coverage is the strongest area (40–47%). ARR and Plan Vivo are weakest (18–29%) — C6 has barely the framework for ARR-only projects today.


4. Gaps prioritized

The big rocks, in order of impact:

P0 — blocks current methodology accuracy

  1. Carbon pools beyond AGB/BGB/SOC: add dw_density, litter_density, hwp_carbon. VM0007/V47/ART/GS all need at least DW + litter or a documented de-minimis exclusion. Without these the engine silently under-estimates and mis-applies the conservativeness deduction.
  2. Allometric provenance: wood_density_t_m3, allometric_equation_id, carbon_fraction (today buried in app/methodologies/params). Audit defensibility requires per-row traceability to the equation + ρ used.
  3. Per-pool uncertainty (95% CI): *_uncertainty_pct_ci95 for AGB, BGB, DW, L, SOC, AD. VM0048 and ART TREES apply quantitative uncertainty deductions at issuance — not having these means engine cannot legitimately deduct.
  4. baseline_source discriminator: enum on the methodology-protocol level. Without this the engine cannot tell “VM0007 historical projection” from “VM0048 jurisdictionally allocated” and mixing logic produces silent errors.
  5. Stratification table: stratum_id + forest_type_class + disturbance_class. Today agb is one number per farm; methodologies require per-stratum EFs.

P1 — unlocks ARR / V47

  1. arr_eligible_area_ha, pre_project_land_use_class, pre_project_land_use_years — V47 eligibility.
  2. stocking_index, matched_control_plot_id, matched_control_si_delta — V47 dynamic baseline. New paradigm; not currently representable.
  3. forest_gain_ha per vintage — ART TREES enhancement category + V47 monitoring.
  4. species_planted, survival_rate_pct, tree_count, forest_age_years — ARR project monitoring.

P2 — VM0048 jurisdictional ingestion

  1. jurisdictional_jad_tco2e, allocated_baseline_tco2e_yr, fcbm_forest_ha_t1/t2/t3 — ingest VMD0055 jurisdictional files. Today engine fakes baseline from project rate; under V48 it must be jurisdictional.
  2. Driver layer ingest: dist_to_road_m, dist_to_settlement_m, slope_pct, elevation_m — needed even under V48 because EF stratification depends on them.

P3 — Leakage + non-CO₂

  1. leakage_belt_area_ha + leakage_belt_defor_ha_yr + market_leakage_factor_pct — currently project-level compliance_leakage_pct is a hand-set scalar; methodology requires per-belt monitoring.
  2. fertilizer_n_kg_ha, fossil_fuel_co2_t, combustion_completeness, ch4_emission_factor — non-CO₂ project emissions required by V47/GS/CDM.

P4 — Plan Vivo path (only if pursuing PV registry)

  1. livelihood_indicator_score, ecosystem_indicator_score, pra_baseline_id — non-carbon indicators required for PV issuance.

5.1 New farm_metrics codes (P0–P3)

Codes to add to lookup_metric_type + app/units/registry.py:

# Pools
dw_density                       tC/ha
litter_density                   tC/ha
hwp_carbon                       tC
non_woody_biomass                tC/ha

# Allometric provenance (per-plot side table; only summary on farm)
agb_method                       enum: field_plot / gedi / vendor / ipcc_default
soc_method                       enum: tier1 / tier2 / tier3_measured

# Stratification
forest_type_class                enum
disturbance_class                enum
forest_age_years                 yr

# ARR
arr_eligible_area_ha             ha
degraded_forest_area_ha          ha
pre_project_land_use_class       enum
pre_project_land_use_years       yr
stocking_index                   dimensionless
species_planted                  text (multi)
survival_rate_pct                %
tree_count                       count
mean_height_m                    m

# Activity data extensions
degradation_ha                   ha
forest_gain_ha                   ha
jurisdictional_jad_tco2e         tCO₂e
allocated_baseline_tco2e_yr      tCO₂e/yr
fcbm_forest_ha_t1, _t2, _t3      ha

# Drivers
dist_to_road_m                   m
dist_to_settlement_m             m
dist_to_river_m                  m
dist_to_prior_clearing_m         m
slope_pct                        %
elevation_m                      m
tenure_class                     enum

# Leakage
leakage_belt_area_ha             ha
leakage_belt_defor_ha_yr         ha/yr
market_leakage_factor_pct        %

# Non-CO₂
fertilizer_n_kg_ha               kg N/ha
biomass_burning_ha               ha
fossil_fuel_co2_t                tCO₂e

# Uncertainty (per-pool)
agb_uncertainty_pct_ci95         %
bgb_uncertainty_pct_ci95         %
dw_uncertainty_pct_ci95          %
litter_uncertainty_pct_ci95      %
soc_uncertainty_pct_ci95         %
activity_data_uncertainty_pct_ci95   %
combined_uncertainty_pct_ci95    %

# ART
hfld_score                       dimensionless
nfms_emission_factor_tco2e_ha    tCO₂e/ha

# Plan Vivo
livelihood_indicator_score       score 0–100
ecosystem_indicator_score        score 0–100

5.2 New side tables (L0 raw observations)

  • plot_measurements — per-tree DBH, height, species, ρ, plot_id, geom. Used for AGB/BGB derivation. Today AGB lands directly in farm_metrics with no traceability to plots.
  • plot_definitions — plot polygon, area, sampling protocol, allometric equation used.
  • stratum — forest type × disturbance × age class. FK from farm_metrics for per-stratum EFs.
  • leakage_belt — belt geometry per project (separate from project geometry).
  • control_plot_match — V47 k-NN matched control plot reference + multivariate distance + match date.
  • jurisdictional_data_file — VMD0055 / ART NFMS files: jurisdiction, file hash, vintage, JAD, FCBM, risk map blob.

5.3 New project-level fields

  • baseline_source enum on project_methodology_history (or project): historical_projected | jurisdictionally_allocated | dynamic_control_matched | community_PRA | national_NFMS.
  • accounting_area_jurisdiction text — required when baseline_source = jurisdictional_allocated or national_NFMS.

6. Engine-side principles

  1. Engine never reads value_raw. Always reads value_canonical via read_canonical_value(). Already enforced.
  2. Pool list is methodology-config, not engine-hardcoded. MethodologyDef.required_inputs already does this; extend it with optional_with_de_minimis_test to model V48’s stricter rules.
  3. Carbon fraction (CF) and 44/12 stoichiometry happen in the engine when projecting tC → tCO₂e. Storage stays in tC/ha. Already true in the registry — preserve this invariant.
  4. Uncertainty deductions are explicit. Add a uncertainty_deduction_tco2e row to vintage_ledger so the receipt shows it. Today the ledger has gross → leakage → buffer → issuable; insert uncertainty between buffer and issuable.
  5. Leakage and buffer are distinct — never collapse. vintage_ledger already has both rows; preserve.
  6. baseline_source selects which calculation path the engine takes. Don’t try to unify legacy + jurisdictional in one function.

7. Open questions for the team

  1. Is C6 doing field plots itself, or always consuming vendor PDFs (Canopy, ClearBlue, C2050)? If always vendor, plot_measurements becomes ingest of vendor’s plot data; if both, schema needs to support mixed.
  2. Will C6 ever pursue VM0047 (ARR) or only stay on REDD? P1 gaps are big.
  3. Is Plan Vivo on the roadmap? P4 work is otherwise wasted.
  4. For VM0048: does C6 have the relationship with Verra to ingest jurisdictional files directly, or will it consume them via a partner (e.g. Everland, Wildlife Works)?
  5. Carbon fraction default: today app/methodologies/params likely uses 0.47 — confirm vs 0.5 (older IPCC default still common in vendor reports).

8. Sources cross-reference

This catalog is a synthesis of:

  • methodology-inputs-comparison.md (the 112-row methodology survey, sibling file)
  • app/units/registry.py (canonical-unit invariants)
  • app/methodologies/{vm0007,vm0048,art_trees,verra_old}.py (current REQUIRED_INPUTS)
  • migrations/versions/{868f5ac927ad,d8e1c4a3b9f2,d6a3e9b1c4f7}.py (seed data for current 48 metric_types)
  • docs/needs/units-design.md (the dual-write design)
  • IPCC 2006 GL Vol. 4 + 2019 Refinement
  • Verra VM0007 v1.8, VM0009 v3.0, VM0015 v1.2, VM0047 v1.1, VM0048 v1.0
  • ART TREES 2.0 standard
  • Plan Vivo PV Climate Methodology Requirements 1.0
  • Gold Standard LUF A/R v2.0

The existing 48 lookup_metric_type rows already cover the REDD baseline well. The biggest single-decision lever is whether C6 commits to ARR + Plan Vivo paths — that determines whether ~30 of the 60 gaps get worked.