# G2P reference

> Element identity, four message families, one-minute timing, authenticated descriptors and commitments, stale-commitment faults, and unspecified wire format.

- 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/g2p/spec.md`
- `specs/gcap/spec.md`
- `specs/desp/spec.md`
- `architecture/failsafe-model.md`
- `architecture/temporal-position.md`
- `architecture/federation.md`

---

---
title: "G2P reference"
description: "Element identity, four message families, one-minute timing, authenticated descriptors and commitments, stale-commitment faults, and unspecified wire format."
---

`specs/g2p/spec.md` is **G2P** (Grid 2.0 Protocol) **26.0-draft**. G2P is the addressing, service-configuration, and response layer under [GCAP](/gcap-reference) and [DESP](/desp-reference). It states how Member Elements and Allocators hold identity, exchange four per-interval message families, authenticate Service Descriptors and Commitments, and treat missing or stale Commitments as failsafe faults. Wire format, encoding, element state machines, version negotiation, and conformance test vectors are **not specified**.

<Note>
**Status:** Draft — seeking input. **Editors:** TBD. RFC 2119 / RFC 8174 keywords apply. G2P versions independently on the **26.x** line. Living text lives in `specs/g2p/spec.md`; [RFC #1](https://github.com/g2tf-org/g2tf-standards/blob/main/rfcs/grid-2-rfc-1.pdf) is archival.
</Note>

## Role in the stack

G2P **carries** GCAP allocations and DESP class positions. It does **not** define clearing semantics or the class taxonomy.

| Layer | File | G2P relationship |
|---|---|---|
| DESP | `specs/desp/spec.md` | Class A / B / C positions ride in Service Descriptors |
| GCAP | `specs/gcap/spec.md` | Clearing consumes §3.1 descriptors and §3.3 announcements; publishes §3.2 Commitments |
| G2P | `specs/g2p/spec.md` | Identity, messages, interval clock, auth, staleness |
| Member behavior | `members/use.md`, `members/buffer.md`, `members/source.md`, `members/allocator.md` | Who broadcasts and who listens |

:::files
specs/g2p/spec.md
specs/gcap/spec.md
specs/desp/spec.md
members/use.md
members/buffer.md
members/source.md
members/allocator.md
architecture/temporal-position.md
architecture/failsafe-model.md
architecture/federation.md
:::

v26.0 scope is **energy in the one-minute interval** on the bulk power system. Commercial terms, prices, and Grid 1 settlements stay off the protocol.

## Element identity

Every Member Element and Allocator **MUST** hold a **stable element identifier** bound to a physical point of interconnection inside a provisioned [Allocation Domain](/allocation-domains).

<ParamField body="element identifier" type="string" required>
Stable identity of a Use, Buffer, Source, or Allocator. Bound to a physical POI in a provisioned domain. Format is **open**; the living spec recommends a domain-scoped hierarchical ID that mirrors nested constraint domains in `architecture/federation.md`.
</ParamField>

<ParamField body="Allocation Domain" type="constraint set">
Set of Member Elements cleared by a common Allocator (or Allocator hierarchy) against a common Grid 1 constraint set. Technical membership is spec compliance at a covered POI, not a registration API.
</ParamField>

There is no G2P admission message and no published machine-readable domain descriptor. Overlapping local + regional membership is an open item.

## Message families

G2P defines **four** families. All are **per-interval (one minute)** unless a later revision says otherwise. There is no encoding, framing, or transport binding.

| Family | Direction | Interval binding | Required content (normative today) |
|---|---|---|---|
| Service Descriptor | Member → Allocator | Per interval; MAY be reissued each interval | Signed positions; energy units; Use: one position per DESP class over a forward vector |
| Commitment | Allocator → Member | Coming interval only | Interval, domain, clearing-inputs version; Use `commit-%`; Buffer `committed dispatch`; Source `committed take` |
| Federation Announcement | Allocator ↔ Allocator | Per interval | Announcing domain, interval, coupled-boundary quantities |
| Response / Telemetry | Member → Allocator | Against the interval Commitment | Actual per-class dispatch for verified self-dispatch |

### Service Descriptor (Member → Allocator)

A Member's signed statement of requests/offers for a **forward time vector**.

| Member | Signed position | Sign convention |
|---|---|---|
| Use | Per-class **request to consume** | `+` consume; one signed position per DESP class |
| Buffer | **Offer to be a source or use** | `−` discharge / `+` charge; may switch role per interval |
| Source | **Offer to supply** | `−` generation available this window, over a forward vector |

<ParamField body="position" type="signed energy quantity" required>
Each position **MUST** be signed by the originating Member. Positions **MUST** be expressed as **energy within the interval** (v26.0). Classes **MAY** change per interval (DESP dynamic reclassification).
</ParamField>

<ParamField body="forward time vector" type="open">
Length, resolution, and revision rules are **not specified**.
</ParamField>

DESP notes that RFC #1 interaction-table names Firm / Semi-Firm / Flex map to classes **A / B / C**. Naming reconciliation is open. The Allocator never sees intra-facility workloads; it clears class-level positions only.

### Commitment (Allocator → Member)

GCAP outputs travel as Commitments.

<ParamField body="commit-%" type="per-class allocation" required>
Use Members. Allocator **MUST** publish in time for self-dispatch **before the interval opens**.
</ParamField>

<ParamField body="committed dispatch" type="buffer schedule" required>
Buffer Members. GCAP **MUST** clear buffers **before any load is curtailed**.
</ParamField>

<ParamField body="committed take" type="supply schedule" required>
Source Members. v26.0 supply is a **single class**; mirrored A/B/C supply is open.
</ParamField>

<ParamField body="interval" type="one-minute interval id" required>
Commitments **MUST** identify the interval they apply to. Allocations expire with that interval.
</ParamField>

<ParamField body="domain" type="Allocation Domain id" required>
Domain in which the Commitment was computed.
</ParamField>

<ParamField body="clearing inputs version" type="digest / version" required>
Version of clearing inputs the Commitment was computed against. GCAP says Allocators **SHOULD** publish that input digest in-domain for reproducibility.
</ParamField>

A Member **MUST** treat a **missing or stale** Commitment as fallback-triggering.

### Federation Announcement (Allocator ↔ Allocator)

Announce-and-listen across coupled zones. Domains do not command one another.

<ParamField body="announcing domain" type="domain id" required>
Identity of the announcing Allocator's domain.
</ParamField>

<ParamField body="interval" type="one-minute interval id" required>
Interval the announcement applies to.
</ParamField>

<ParamField body="coupled-boundary quantities" type="open schema" required>
Required on the wire conceptually; **message schema is still to be specified**. Whether content is boundary headroom only or per-class aggregates is open.
</ParamField>

Normative federation rules that G2P must carry:

- An Allocator **MUST** clear only against constraints provisioned by its own Grid 1 custodians.
- Peer announcements **MAY** add boundary headroom and **MUST NOT** relax local constraints.
- Missing required peer announcements for a coupled boundary: clear **conservatively**, as if the boundary contributes **no additional headroom**.
- Partition **MUST NOT** prevent local clearing and **MUST NOT** trip member fallback in unaffected domains.

### Response / Telemetry (Member → Allocator)

Members own **verified self-dispatch**. Each Member **MUST** report actual per-class dispatch against its Commitment so compliance is auditable and the overlay's aggregate footprint is measurable.

Open: verification granularity, metering source of truth, attestation.

## Interval exchange

```mermaid
sequenceDiagram
  autonumber
  participant Use as Use / Buffer / Source
  participant Alloc as Allocator
  participant Peer as Peer Allocator

  Note over Use,Peer: One-minute interval (commit before open)
  Use->>Alloc: Service Descriptor (signed positions)
  Peer-->>Alloc: Federation Announcement (domain, interval, boundary)
  Note over Alloc: GCAP clear (not G2P)<br/>stale local constraints → MUST NOT clear
  Alloc->>Use: Commitment (interval, domain, inputs version)
  Use->>Use: Self-dispatch before interval opens
  Use->>Alloc: Response / Telemetry (actual vs Commitment)
  Note over Use: Missing or stale Commitment → fallback
```

If Grid 1 dispatch conflicts with a Grid 2 allocation, the **Grid 1 instruction prevails**.

## Timing

All G2P messages bind to the **one-minute interval clock** in `architecture/temporal-position.md`.

| Rule | Normative text |
|---|---|
| Interval grain | Allocations **MUST** apply to whole one-minute intervals. Sub-minute response is out of scope for the orchestration plane. |
| Commit-before-open | Clearing **MUST** finish so Members receive `commit-%` (and Buffer/Source commits) with time to self-dispatch **before the interval opens**. |
| Non-interference | Elements **MUST NOT** interfere with, substitute for, or assume sub-second primary controls (governor, AGC, protection). |
| Market coexistence | Grid 2 **SHOULD** consume, not contradict, forward market-dispatch information. |

**Not specified:** descriptor deadline, clearing deadline, commitment publication deadline, clock sync, federated phase alignment (common epoch vs per-domain clocks), late-arrival and clock-skew tolerances, interaction with 15-minute settlement intervals.

## Faults and stale commitments

Allocations are valid **for their interval only**. A Member that has not received a `commit-%` (or the Buffer/Source equivalent) for the **current** interval **MUST** treat itself as in fallback.

Triggers that **MUST** invoke element-specific fallback in `architecture/failsafe-model.md`:

- Loss of connectivity
- Missed Commitments beyond the staleness threshold
- Invalid clearing inputs
- Allocator stale constraint inputs or domain partition (Allocator **MUST NOT** clear; Members detect missed clearing)

| Element | Fallback |
|---|---|
| Use | Grid 1 baseline (firm load limit) or manual curtailment; follow allowed ramp rates |
| Buffer | Standalone Grid 1 schedule; **no Grid 2 support commitment** while in fallback; follow allowed ramp rates |
| Source | Grid 1 baseline interconnection behavior; follow allowed ramp rates |
| Allocator | **MUST NOT** clear on stale inputs or partition |

Fallback **MUST** be locally determinable from the Member's own state and last-known configuration. It **MUST NOT** depend on reaching a remote peer. All transitions into/out of fallback and between interval allocations **MUST** respect ramp rates agreed with the host utility.

<Warning>
**Staleness timers are not specified.** Failsafe text assigns quantitative thresholds (missed intervals before fallback) and explicit timers to G2P. Until those land, the only specified rule is: no Commitment for the current interval → fallback now.
</Warning>

Also unspecified: re-entry / hysteresis after fallback, coincidental-fallback stability analysis, and audit/telemetry to verify fallback compliance.

## Authentication

Transmission-level deployments are expected on **private networks**.

- All **Service Descriptors** and **Commitments** **MUST** be authenticated.
- Message integrity **MUST** be verifiable end-to-end.

<ParamField body="PKI / key management" type="open">
Not specified. Tracked as Discussion: Engineering with NERC CIP mapping.
</ParamField>

<ParamField body="replay protection" type="open">
Not specified.
</ParamField>

Federation Announcement and Response / Telemetry authentication are not given a separate MUST in `specs/g2p/spec.md` §6. Do not assume they inherit the same requirement until the spec says so.

## Unspecified wire surface

G2P §7 lists work still required before an interoperable implementation can be frozen:

| Surface | Status in 26.0-draft |
|---|---|
| Wire format and encoding | Unspecified — no schema, MIME type, or binary framing |
| Transport | Unspecified — no sockets, topics, or HTTP routes |
| State machines per element | Unspecified |
| Version negotiation | Unspecified (protocols version independently; README compatibility matrix is planned, not present) |
| Conformance test vectors | Unspecified (domain certification criteria also open in `architecture/allocation-domains.md`) |

There is no code, fixture, or parser in this repository. Implementers in [Phase 0 shadow mode](/phase-0-shadow-mode) exchange and track commitments out of band while executing only the Grid 1 baseline.

## Open items (G2P-owned or G2P-adjacent)

<AccordionGroup>
<Accordion title="Identity and messages">
- Element identifier format (hierarchical domain-scoped ID recommended, not adopted)
- Forward-vector length, resolution, revision rules
- Federation announcement schema and whether it carries headroom only vs per-class aggregates
- Response verification granularity, metering source of truth, attestation
</Accordion>
<Accordion title="Timing and faults">
- Intra-interval timing budget and clock sync
- Quantitative staleness threshold and timers
- Re-entry procedure and hysteresis
- Late-arrival / clock-skew tolerances
- Interval phase alignment across federated domains
</Accordion>
<Accordion title="Security and ops">
- PKI, NERC CIP applicability, replay protection
- Allocator redundancy (active/standby)
- Hosting responsibility (utility-operated vs third-party under utility authority)
</Accordion>
</AccordionGroup>

Propose text against `specs/g2p/spec.md` via PR. Engineering-category questions (CIP, auth, TO signal standardization) go to GitHub Discussions. See [Comment, review, and file errata](/comment-and-errata).

## Next

<CardGroup>
<Card title="GCAP reference" href="/gcap-reference">
What Allocators compute from G2P descriptors and announcements, and what they put back on Commitments.
</Card>
<Card title="One-minute window" href="/one-minute-window">
Commit-before-open clock, Grid 1-prevails conflict rule, and open timing budget.
</Card>
<Card title="Failsafe model" href="/failsafe-model">
Per-element fallback, interval-only commitments, and locally determinable recovery.
</Card>
<Card title="Allocator" href="/allocator">
No-discretion clearing, withhold-on-stale, federation announce-and-listen.
</Card>
<Card title="Use Member" href="/use-member">
Per-class consume positions, commit-% listen, self-dispatch and telemetry MUSTs.
</Card>
<Card title="How to read the specs" href="/how-to-read-the-specs">
Draft headers, RFC 2119 keywords, living files vs RFC #1, independent 26.x lines.
</Card>
</CardGroup>
