Skip to content
Dark MatterDark Matter
EnergyConcepts

Stage gates

The nine-gate development ladder for compute-ready energy projects: LAND → ENERGY → PERMITS → SUBSTATION → TURBINES → FINANCE → BUILD → ENERGIZE → TENANT. Each transition is gated by prerequisites and recorded with a Verdict.

Overview

Every compute-ready energy project advances through the same sequence of de-risking milestones. Which gates a project has cleared is the first question any underwriter, lender, or tenant asks. DMTR Energy formalizes this as a state machine: transitions are validated against prerequisites, history is recorded per gate, and forward contracts can settle against a specific milestone.

The nine gates

GateWhat it representsPrerequisites
landSurface and access rights secured(none)
energyFuel committed (gas contract, hydro offtake, wind/solar PPA)land
permitsEnvironmental, land-use, water, indigenous consultation, generation license stackland, energy
substationSubstation capacity confirmed; interconnection concept approvedland
turbinesTurbine slots committed (or PV/wind equipment ordered)energy
financeProject finance closed (debt + equity stack)land, energy, permits
buildConstruction underwayfinance, substation, turbines
energizeInitial commercial operation test passedbuild
tenantTenant assignment active under a CapacityContractenergize

Transitions strictly forward (no regression), and each gate validates its prerequisites. The applyTransition helper throws on disallowed transitions; canAdvanceTo returns a StageGateTransitionResult for non-throwing inspection.

Programmatic use

import { canAdvanceTo, applyTransition } from "@dmtr/energy/stage-gates";

const decision = canAdvanceTo(slot.stage_gate, "finance");
// { allowed: false, reason: "...prerequisite gates not complete: [permits]." }

const advanced = applyTransition(slot.stage_gate, "permits", "complete", "2026-09-01T00:00:00Z");
// returns a new StageGateState with current_gate='permits', status='complete', history updated

Forward contracts and stage gates

A forward contract on pre-energization capacity (e.g. "200 MW at El Chocón, Q3 2027") settles when the underlying slot reaches the energize gate. The state machine makes the settlement trigger unambiguous — a forward holder can verify that the slot has cleared build → energize without relying on any single party's attestation.

Verdict capture per gate

Each StageGateRecord in the slot's history can reference a verdict_id from the rights engine. For example, transitioning into tenant should record the Verdict confirming that the tenant assignment passed all compliance checks. This produces an auditable record per gate.

  • ComputeSlot — which holds the StageGateState
  • CapacityPool — pool effective stage gate is constrained by weakest component gate
  • Lifecycle — how DMTR tracks Position lifecycle generally
  • Provenance — the related concept for ownership history
Edit this page on GitHub

Last reviewed: May 5, 2026

Was this page helpful?