# Map workloads to classes

> Informative Flex 0–3 and ERCOT CLR/PCLR mappings onto DESP A/B/C, plus what the Allocator never sees inside a facility.

- Repository: g2tf-org/g2tf-standards
- GitHub: https://github.com/g2tf-org/g2tf-standards
- Human docs: https://grok-wiki.com/public/docs/g2tf-org-g2tf-standards-436ba3f3e0ff
- Complete Markdown: https://grok-wiki.com/public/docs/g2tf-org-g2tf-standards-436ba3f3e0ff/llms-full.txt

## Source Files

- `specs/desp/spec.md`
- `members/use.md`
- `specs/gcap/spec.md`
- `rfcs/grid-2-rfc-1.pdf`
- `architecture/overview.md`

---

---
title: "Map workloads to classes"
description: "Informative Flex 0–3 and ERCOT CLR/PCLR mappings onto DESP A/B/C, plus what the Allocator never sees inside a facility."
---

DESP §3 in `specs/desp/spec.md` (v26.0-draft) publishes an **informative** Flex 0/1/2/3 and ERCOT CLR/PCLR alignment onto classes **A / B / C**. A Use Member (`members/use.md`) performs that mapping at the edge, then emits one signed per-class *request to consume* over G2P. The Allocator never receives workload identities, job queues, or facility topology — GCAP clears class-level positions only.

<Warning>
DESP §3 is not a protocol identifier set. G2P Service Descriptors and GCAP commit-% use DESP classes A, B, and C (with Firm / Semi-Firm / Flex as an unresolved alias). Flex 0–3 and CLR/PCLR labels MUST NOT appear as G2P class names.
</Warning>

## Protocol surface vs facility interior

Use Members own three edge decisions that never enter the Allocator:

- How to map internal workloads onto service classes
- Which demand is deferrable, and when
- Anticipating the facility's own forward load

That split is the *scale without singular operator* rule: every asset runs the same algorithm against the same observable signals. Grid 1 custodians verify the overlay by aggregate footprint (frequency stability, ACE, transmission flows, peak shaving), not by inspecting a member's internals.

```mermaid
flowchart LR
  subgraph Facility["Use Member facility — Allocator never sees"]
    W["Workloads<br/>inference / training / spot / batch"]
    MAP["Edge mapping<br/>DESP §3 informative"]
    SD["Self-dispatch + agreed ramps"]
    W --> MAP
  end

  subgraph Wire["G2P — class positions only"]
    DESC["Service Descriptor<br/>signed A / B / C energy"]
    TEL["Telemetry<br/>per-class actual vs Commitment"]
  end

  subgraph Domain["Allocator / GCAP"]
    IN["Grid 1 constraints<br/>+ peer announcements"]
    CLR["Deterministic clear<br/>headroom → buffers → C then B then A"]
    OUT["Per-class commit-%"]
    IN --> CLR
    CLR --> OUT
  end

  MAP -->|"one signed position per class"| DESC
  DESC --> CLR
  OUT --> SD
  SD --> TEL
```

G2P `Service Descriptor` (Member → Allocator) for Use:

<ParamField body="request to consume" type="signed energy (+)" required>
One signed position per DESP class over a forward time vector. v26.0 units are energy in the one-minute interval.
</ParamField>

<ParamField body="class" type="A | B | C" required>
DESP class. Positions MAY be reclassified each interval. Traditional Firm (Grid 1) is outside Grid 2 and is never curtailed by GCAP.
</ParamField>

<ParamField body="commit-%" type="per-class fraction">
Allocator output the Use Member listens for. MUST self-dispatch within that commit-% for the interval, within host-utility ramp parameters.
</ParamField>

<ParamField body="verified self-dispatch" type="per-class actuals" required>
G2P §3.4 telemetry: actual per-class dispatch against the Commitment. Open: verification granularity, metering source of truth, attestation.
</ParamField>

## Informative Flex 0–3 and ERCOT alignment

Field evidence in DESP §3 is aligned with Emerald AI's Flex 0/1/2/3 schema and ERCOT CLR/PCLR constructs. RFC #1 positions Grid 2 as an operational layer that can coexist with ERCOT PCLR (Provisional Controllable Load Resources) and PJM IRAS/PRD in the minutes timeframe.

| DESP class | Name | Flex tier | ERCOT alignment | Typical workloads | Flexibility the edge can use |
|---|---|---|---|---|---|
| **A** | Assured (highest non-firm) | ≈ Flex 0 | LPC-aligned firm portion | Real-time inference, interactive services | Spatial routing, cooling, behind-the-meter storage, bounded power-capping (~20% inference headroom without deferring requests). Sub-second SLAs. |
| **B** | Preferred | ≈ Flex 1–2 | CLR/PCLR dispatchable portion | Training with checkpointing, deadline batch | Checkpoint pause, throttling, GPU frequency-capping. Minutes-to-hours deferral. 10–25% throttle sustained 3–6 h is field-proven. Primary flex reservoir. |
| **C** | Best Efforts (lowest) | ≈ Flex 3 | Shed-first interruptible tier | Opportunistic / spot compute, non-urgent batch | Hours-to-days pause; deep temporal and spatial shifting. |
| — | Traditional Firm (Grid 1) | Outside overlay | Existing firm service | Contracted firm load | Never curtailed by GCAP. Failsafe target when commit-% is missing or stale. |

G2P interaction-table aliases map **Firm / Semi-Firm / Flex → A / B / C**. Naming reconciliation (Assured / Preferred / Best Efforts vs those aliases) is an open DESP item.

<Info>
The mapping is written from data-center flexibility research. Use Members also cover electrified industry and sites that combine flex-capable load with on-site power. Standard workload→class guidance **per facility type** is an open item on `members/use.md`.
</Info>

### Empirical anchors (class design, not protocol limits)

DESP §3 and RFC #1 §Industry Analysis Informing Grid 2.0 cite:

| Anchor | Claim in the specs / RFC |
|---|---|
| Emerald AI production trial | 25% sustained facility power reduction for 3 hours; 256 GPUs; 15-minute ramps |
| Duke, *Rethinking Load Growth* (Norris et al., Feb 2025) | Curtailing 0.25% of annual load unlocks 76 GW US headroom; 1.0% unlocks 126 GW |
| DESP ramp research note | 15-minute ramp discipline suggested for per-class snap-back (not yet normative) |

Those figures inform why Class B is treated as the primary flex reservoir. They are not GCAP inputs and they do not bind commit-%.

## Edge mapping procedure

<Steps>
<Step title="Separate Grid 1 Firm from Grid 2 buckets">
Keep contracted firm load on the Grid 1 baseline. Only non-firm demand is classified A / B / C. GCAP never touches Traditional Firm.
</Step>
<Step title="Apply the informative DESP §3 map">
Assign latency-sensitive / Flex 0 demand to **A**, checkpointable / Flex 1–2 demand to **B**, and interruptible / Flex 3 demand to **C**. Re-bucket each interval if the facility's mix changes.
</Step>
<Step title="Honor domain class policy if the commercial agreement sets one">
A domain MAY constrain the mix a Member can declare (example: a minimum Class C share for expedited interconnection). Those limits live in the domain agreement, not in DESP/GCAP. See Discussion: Commercial terms.
</Step>
<Step title="Emit one signed G2P position per class">
Broadcast energy-in-the-interval requests over the forward vector. Do not attach workload names, GPU inventories, or job SLAs.
</Step>
<Step title="Self-dispatch to commit-% and report per-class actuals">
MUST stay inside per-class commit-% and agreed ramp rates. MUST report verified self-dispatch (G2P §3.4). On missing or stale Commitment, MUST revert to the Grid 1 firm load limit or manual curtailment, still following allowed ramps.
</Step>
</Steps>

RFC #1 Figure 5 shows a utility-domain example of the **external** bucket stack a data-center Use Member might advertise (not an internal job list):

| Bucket | Example request |
|---|---|
| Best Efforts (C) | 300 MW |
| Preferred (B) | 200 MW |
| Assured (A) | 300 MW |
| Firm (Grid 1) | 500 MW |

## What the Allocator never sees

| Inside the facility (edge only) | On the wire / in GCAP |
|---|---|
| Individual workloads, job IDs, SLA clocks | Signed A / B / C energy positions |
| Which racks or processes implement a class | Per-class commit-% |
| How Flex 0–3 or CLR/PCLR labels were applied | DESP class order C → B → A |
| Behind-the-meter cooling, spatial routing, GPU clocks | Optional Buffer Member as a **separate** element (− discharge / + charge) |
| On-site generation used to hold Class A | Source Member offers, if present as their own element |
| Forward load forecast internals | Descriptor reissued each interval |

The Allocator holds **no internal intelligence or discretion**. GCAP order is: headroom first, Buffer committed dispatch second (before any load curtailment), then ramp down Use requests C → B → A, proportional within a class. Intelligence that would require seeing jobs stays on the Use Member.

<Note>
Behind-the-meter storage can appear two ways. DESP §3 lists it as an **internal** Class A flexibility tool (the Allocator still sees only the A position). A storage asset that participates as a Buffer Member is a distinct element with its own offer and committed dispatch. Those are not interchangeable protocol objects.
</Note>

## Constraints and failsafe

- **Reclassification.** A Member MAY reclassify request buckets each one-minute interval. Commitments expire with the interval.
- **Ramp.** All transitions — interval-to-interval and into fallback — MUST respect host-utility ramp rates. DESP flags per-class ramp and snap-back limits as unspecified (research points at 15-minute discipline).
- **Undershoot.** Behavior when actual load is below requested+committed amounts (whether unused allocation returns to the pool mid-interval) is open on `members/use.md`.
- **Fallback.** Loss of peers, missing commit-%, or stale Commitment → Grid 1 firm load limit or manual curtailment. Fallback MUST be locally determinable; it MUST NOT depend on reaching the Allocator.
- **PCLR coexistence.** Grid 2 sits below ~5-minute market dispatch. RFC #1 and `architecture/temporal-position.md` treat that as the window where ERCOT PCLR / PJM IRAS/PRD minute-scale compliance can be operationalized without changing market rules. Grid 1 dispatch instructions prevail on conflict.

## Open items that affect mapping

<AccordionGroup>
<Accordion title="Still unspecified in DESP / Use">
- Standard workload→class mapping guidance per facility type
- Whether the standard itself should give guidance or limits on differential service classes
- Naming: Assured / Preferred / Best Efforts vs Firm / Semi-Firm / Flex
- Fixed three classes vs domain-extensible class count
- Per-class unmet-frequency envelopes (SLA-like)
- Ramp-rate and snap-back limits per class
- Enforcement of declared class behavior (ties to G2P §3.4)
- Minimum telemetry for commit-% compliance
</Accordion>
</AccordionGroup>

Class-policy and flex-enforcement questions are tracked under Discussion: **Commercial terms**. Reliability of materializing declared flexibility at scale is tracked under **Reliability assurance**.

## Next

<CardGroup>
<Card title="Service classes" href="/service-classes">
Normative A / B / C table, C-then-B-then-A curtailment, and per-interval reclassification.
</Card>
<Card title="Use Member" href="/use-member">
Per-class consume positions, commit-% listen, self-dispatch MUSTS, and firm-limit fallback.
</Card>
<Card title="DESP reference" href="/desp-reference">
Class semantics, domain class-policy limits, and open naming / SLA items.
</Card>
<Card title="Allocator" href="/allocator">
No-discretion clearing: the process that never sees facility workloads.
</Card>
</CardGroup>
