# Source Member

> Supply offers over a forward vector, committed take, forecast-error open items, v26.0 single-class supply, and Grid 1 interconnection fallback.

- 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

- `members/source.md`
- `specs/g2p/spec.md`
- `specs/gcap/spec.md`
- `architecture/failsafe-model.md`
- `architecture/overview.md`

---

---
title: "Source Member"
description: "Supply offers over a forward vector, committed take, forecast-error open items, v26.0 single-class supply, and Grid 1 interconnection fallback."
---

A **Source Member** is the Member Element for clean-energy / inverter-based supply (solar, wind). The living contract is `members/source.md` (Draft — seeking input; RFC #1 Protocol Interactions table). Each interval it publishes a signed G2P **Service Descriptor** *offer to supply* (`−`) over a forward time vector, listens for the Allocator's **committed take**, self-dispatches to that take within host-utility ramp rates, and reports verified self-dispatch. v26.0 carries a single supply class. On a missing or stale Commitment it MUST revert to Grid 1 baseline interconnection behavior.

<Info>
Living files `members/source.md`, `specs/g2p/spec.md` (26.0-draft), and `specs/gcap/spec.md` (26.0-draft) are **Draft — seeking input**. RFC 2119 / RFC 8174 keywords apply. Wire format, element state machines, and conformance vectors are unspecified (G2P §7).
</Info>

## Role

Source is one of three Member Element kinds on the Grid 2 overlay (Use, Buffer, Source). It is a digital representative of a physical point of interconnection, not a market participant or price-setting agent.

| Field | Value |
|---|---|
| Associated asset | Clean-energy / inverter-based supply — solar, wind |
| Ledger sign | *Offer to supply* (`−`) |
| Listen surface | Allocator **committed take** (not Use **commit-%**, not Buffer **committed dispatch**) |
| Edge intelligence | Forecast available output; anticipate ramps |
| v26.0 energy unit | Energy provided in the one-minute interval |
| Failsafe | Grid 1 baseline interconnection behavior; allowed ramp rates |
| Document status | Draft — seeking input · Editors TBD |

The same G2P/GCAP stack that clears load-side positions also bounds Grid 2-compliant supply. RFC #1 and `members/source.md` treat that as the interconnection-side counterpart of load flex: permission-based access each interval instead of a one-shot interconnection permit. A companion G2TF document on expedited renewables interconnection is planned; it is not a living spec in this repository.

<Note>
The smallest Allocation Domain is a host utility plus one flexible **Use** Member. A Source is not required to stand up a domain. Federation diagrams place some Sources at the regional layer (`Supply (Source Member, regional)`), not only under a local utility domain.
</Note>

## Interval contract

Every Source MUST hold a stable element identifier bound to a physical point of interconnection in a provisioned Allocation Domain. Identifier format is open (G2P §2).

All messages bind to the one-minute interval clock. Allocations apply to the coming interval only and expire with it. Grid 2 MUST NOT interfere with sub-second Grid 1 primary controls. Where a Grid 1 dispatch instruction conflicts with a Grid 2 allocation, **the Grid 1 instruction prevails**.

```mermaid
sequenceDiagram
  participant Src as Source Member
  participant Alloc as Allocator
  participant G1 as Grid 1 interconnection
  Note over Src,Alloc: Interval n (one minute)
  Src->>Alloc: Service Descriptor: offer to supply (−)<br/>signed, energy in interval, forward vector
  Note over Alloc: GCAP deterministic clear<br/>headroom → Buffers → C then B then A
  Alloc-->>Src: Commitment: committed take<br/>interval, domain, inputs version
  alt Commitment fresh
    Src->>G1: Self-dispatch to committed take<br/>within agreed ramp rates
    Src->>Alloc: Response / telemetry<br/>verified self-dispatch (G2P §3.4)
  else Missing, stale, or Allocator withheld
    Src->>G1: Fallback: Grid 1 baseline interconnection<br/>allowed ramp rates
  end
```

<Steps>
  <Step title="Publish a Service Descriptor">
    Sign an *offer to supply* (`−`) for generation available this window, over a forward time vector. Positions MUST be in units of energy within the interval. Reissue MAY happen each interval.
  </Step>
  <Step title="Wait for committed take">
    Listen only for this Source's Allocator Commitment. Treat a missing or stale Commitment as fallback-triggering. Do not infer take from a peer, a federation announcement, or a prior interval.
  </Step>
  <Step title="Self-dispatch before the interval opens">
    G2P requires clearing to complete so Members receive the Commitment with time to self-dispatch before the interval opens. Intra-interval deadlines (descriptor, clear, publish) are open.
  </Step>
  <Step title="Verify or fall back">
    Report actual dispatch against the Commitment. If the Allocator withheld (stale constraint inputs or partition) or the Commitment did not arrive, revert to Grid 1 interconnection behavior on the agreed ramp.
  </Step>
</Steps>

## Broadcast: offer to supply

G2P §3.1 Service Descriptor (Member → Allocator) is the Source's outbound surface. A Source does **not** publish per-class consume positions and does **not** flip sign the way a Buffer does (`−` discharge / `+` charge).

<ParamField body="element_id" type="stable identifier" required>
Bound to the physical point of interconnection in the provisioned Allocation Domain. Format open.
</ParamField>

<ParamField body="offer_to_supply" type="signed energy position (−)" required>
Generation available this window. MUST be signed by the originating Member. MUST be energy in the interval (v26.0). Single class in v26.0 — not DESP A/B/C.
</ParamField>

<ParamField body="forward_time_vector" type="vector of future intervals" required>
Offer is over a forward time vector. Length, resolution, and revision rules are open (G2P §3.1).
</ParamField>

<Warning>
G2P does not specify a wire encoding. Do not treat the field names above as a schema. Implementations must still satisfy the signed-descriptor, energy-unit, authentication, and interval-binding MUSTS.
</Warning>

Authentication: every Service Descriptor MUST be authenticated; integrity MUST be verifiable end-to-end. Transmission-level deployments are expected on private networks. PKI, NERC CIP mapping, and replay protection remain open (G2P §6).

## Listen: committed take

G2P §3.2 / GCAP §4 emit **committed take** to each Source. That is distinct from the other two Member listen surfaces.

| Member | Commitment field | When it clears |
|---|---|---|
| Use | Per-class **commit-%** | After headroom and Buffer dispatch; C then B then A if still short |
| Buffer | **Committed dispatch** | GCAP step 2 — **before any load is curtailed** |
| Source | **Committed take** | Per-interval output of the same clear; supply class order is not specified |

<ParamField body="committed_take" type="energy in interval" required>
Quantity the Source MUST self-dispatch toward. Allocator has no discretion: identical inputs MUST produce identical allocations.
</ParamField>

<ParamField body="interval" type="one-minute interval id" required>
Commitments MUST identify the interval they apply to. Valid for that interval only.
</ParamField>

<ParamField body="domain" type="Allocation Domain id" required>
Commitments MUST identify the domain.
</ParamField>

<ParamField body="clearing_inputs_version" type="input digest / version" required>
Commitments MUST identify the clearing inputs version they were computed against. Allocators SHOULD publish the input digest in-domain.
</ParamField>

A Member that has not received a Commitment for the current interval MUST treat itself as in fallback. Quantitative staleness timers (missed intervals before fallback) are still to be specified in G2P.

## Edge intelligence

The Allocator holds **no internal intelligence**. Forecast and ramp anticipation live on the Source:

- Forecast available output for the forward vector.
- Anticipate ramps so consecutive-interval deltas stay inside the host-utility agreed rates.

GCAP still binds **per-member allocation deltas** between consecutive intervals to those agreed ramp rates. Pool-level: the Allocator MUST bound total cleared participation so simultaneous member fallback stays inside manageable aggregate Grid 1 ramp limits.

<Note>
Forecast accuracy expectations, and how forecast error interacts with GCAP **headroom**, are open items on `members/source.md`. Do not assume an offer-to-supply automatically increases domain headroom, or that under-delivery is absorbed by a specified GCAP term. Grid 1 ancillaries absorb interval error without modification; NERC CPS1/BAL remain the balancing measures.
</Note>

## Obligations

| Requirement | Normative text |
|---|---|
| Self-dispatch | MUST self-dispatch to committed take within agreed ramp rates |
| Telemetry | MUST report verified self-dispatch (G2P §3.4) |
| Ramp on every transition | MUST follow allowed ramp rates into fallback, out of fallback, and between interval allocations |
| Local fallback | Fallback MUST be locally determinable from the Member's own state and last-known configuration; MUST NOT depend on reaching a remote peer |
| Grid 1 prevails | If a Grid 1 dispatch instruction conflicts with the Grid 2 take, follow Grid 1 |
| Overlay duties | Continue to meet all NERC, FERC, utility, and TSO/ISO requirements in the Grid 1 context |

G2P §3.4 states Members MUST report **actual per-class dispatch** against the Commitment. For a v26.0 Source that is the single supply position. Verification granularity, metering source of truth, and attestation are open.

Commercial terms (interconnection product, charging, class-policy limits if supply classes appear later) stay in the domain agreement, not in G2P/GCAP/DESP.

## v26.0 single-class supply

DESP A / B / C stratify **demand** above traditional Grid 1 Firm. Use Service Descriptors carry one signed consume position per class. Source does not.

`members/source.md` records the open question explicitly: class structure for supply offers is **single class in v26.0**, or mirrored A/B/C later. Until that is closed:

- Do not emit Assured / Preferred / Best-Efforts (or Firm / Semi-Firm / Flex) positions on a Source Descriptor.
- Do not expect GCAP's C → B → A curtailment order to rank supply offers.
- Domain class-policy limits in DESP §4 (for example a minimum Class C share for expedited interconnection) apply to declared demand classes, not to a specified Source class table.

## Failsafe

| Trigger | Source behavior |
|---|---|
| Loss of Allocator, peers, or fresh context | MUST revert to Grid 1 baseline interconnection behavior; MUST follow allowed ramp rates |
| Missing or stale Commitment | Same fallback (G2P §3.2, failsafe model) |
| Allocator stale inputs or partition | Allocator MUST NOT clear; Source falls back as above |
| Federation partition elsewhere | MUST NOT trip this Source if its local Allocator still clears |

Fallback carries no extra Grid 2 support duty (contrast Buffer: no Grid 2 support commitment while in fallback). Re-entry procedure and hysteresis after fallback are open.

```text
  last Commitment for this interval?
           │
     yes   │   no / stale / withheld
           ▼
  self-dispatch to          Grid 1 baseline
  committed take            interconnection
  (agreed ramp)             (agreed ramp)
```

## Open items that bind implementers

Treat these as unspecified, not as implied product behavior:

| Item | Why it matters on the Source |
|---|---|
| Forecast accuracy vs GCAP headroom | No specified penalty, reserve, or headroom adjustment for forecast error |
| Curtailed Source energy → co-located Buffer same interval | Not allowed by a specified message; do not invent an intra-interval redirect |
| Supply class structure after v26.0 | Single-class now; A/B/C mirror is a live question |
| Forward-vector length / revision | Cannot yet size descriptor history or mid-horizon edits |
| Intra-interval timing budget | Descriptor deadline, clear deadline, commit publish, clock sync |
| Staleness threshold | How many missed intervals before fallback |
| Telemetry / attestation | What "verified self-dispatch" must prove |
| Wire format | No encoding, version negotiation, or test vectors yet |

Comment via GitHub Discussions (Engineering / Reliability assurance) or a PR against `members/source.md` and the three specs. Errata against RFC #1 use the `errata` label.

## Phase 0

Phase 0 shadow mode exchanges and tracks Commitments but **executes only the Grid 1 baseline**. A Source implementation in Phase 0 still publishes descriptors and records committed take; it MUST NOT change physical output from its Grid 1 interconnection schedule until Phase 1 local integration.

## Next

<CardGroup>
  <Card title="Use Member" href="/use-member">
    Per-class consume positions and commit-% — the demand-side counterpart of committed take.
  </Card>
  <Card title="Buffer Member" href="/buffer-member">
    Signed charge/discharge offers and committed dispatch before any load curtailment.
  </Card>
  <Card title="Allocator" href="/allocator">
    Deterministic GCAP clear that emits committed take; withhold-on-stale; pool ramp sizing.
  </Card>
  <Card title="G2P reference" href="/g2p-reference">
    Service Descriptor, Commitment, telemetry, authentication, and unspecified wire format.
  </Card>
  <Card title="GCAP reference" href="/gcap-reference">
    Headroom, then Buffers, then C-B-A; interval-only outputs; identical-input determinism.
  </Card>
  <Card title="Failsafe model" href="/failsafe-model">
    Grid 1 interconnection fallback, interval-only commitments, locally determinable recovery.
  </Card>
  <Card title="Run Phase 0 shadow mode" href="/phase-0-shadow-mode">
    Exchange commitments, execute Grid 1 only, then Phase 1 / Phase 2.
  </Card>
</CardGroup>
