Independent audit trail for curtailment events, baseline transparency, settlement attestation, and carbon credit provenance. Six procedures. Zero grid control.
Automated Demand Response is a $2.3 billion market growing at 14% annually. ISO/RTO operators, aggregators, and grid participants exchange curtailment commitments, baseline calculations, and settlement payments across a complex chain of trust. Three systemic problems persist:
Settlement disputes. When an aggregator claims 500 kW of curtailment but the ISO calculates 420 kW, there is no independent record of what was committed, when the curtailment began, or what baseline methodology was applied. Disputes escalate to manual reconciliation that can take months.
Baseline gaming. Baseline consumption is the reference point for measuring demand reduction. A participant who inflates baseline consumption can claim higher curtailment without reducing actual load. Current M&V methodologies rely on self-reported data with limited independent verification.
Carbon credit provenance gaps. Renewable Energy Certificates (RECs), carbon offsets, and Guarantees of Origin are issued based on curtailment data. If the curtailment evidence is disputed, the carbon credits derived from that curtailment have no independently verifiable foundation.
SWT3 ADR witnessing creates an independent audit trail alongside existing ISO/RTO settlement infrastructure. It does not replace SCADA, meter data management, or settlement engines. It records that specific events were reported at specific times with specific values, and preserves a cryptographic fingerprint for each record.
Each DR event produces a sequence of witness anchors -- one per phase -- linked by a shared event identifier. The anchors form a lifecycle chain: signal received, baseline recorded, curtailment started, curtailment ended, restoration confirmed, settlement attested, carbon credit linked.
Any party with the anchor fingerprint can verify the record independently. The participant cannot retroactively modify a committed value without the modification producing a different fingerprint.
| Procedure | Title | What It Witnesses | When to Call |
|---|---|---|---|
ADR-EVENT.1 |
DR Event Lifecycle | Phase transitions of a demand response event: signal receipt, curtailment start/end, restoration | Each phase transition in a DR event |
ADR-BASE.1 |
Baseline Consumption | Reported baseline value, measurement methodology, and confidence level | When baseline is established before curtailment |
ADR-CURT.1 |
Curtailment Verification | Actual reduction vs committed reduction and the resulting compliance ratio | After curtailment measurement is finalized |
ADR-SETTLE.1 |
Settlement Attestation | Settlement quantity (kWh), price, and event count for a billing period | When settlement data is submitted or received |
ADR-CARBON.1 |
Carbon Credit Provenance | Credit type (REC, offset, EAC, GoO), quantity, and registry identifier | When carbon credits are issued or transferred |
ADR-GRID.1 |
Grid Signal Correlation | Signal type, response latency, and grid operator identity | When a grid signal is received and response timing is measured |
A typical demand response event progresses through a well-defined sequence. SWT3 witnesses each phase transition, creating a chain of anchors linked by the event's signal source identifier.
ADR-EVENT.1 tracks the macro lifecycle -- each call records a phase transition (signal received, curtailment start, curtailment end, restoration). The other five procedures record the detailed data at each stage. Together they form a complete evidence chain from grid signal to carbon credit.
PJM-ERCOT-Signal-2847). An auditor can query by signal source to retrieve the complete evidence chain for any event, across all six procedures.
from swt3_ai import Witness
witness = Witness(
tenant_id="grid-participant",
api_key="axm_...",
endpoint="https://sovereign.tenova.io/api/v1/witness"
)
signal_id = "PJM-ERCOT-Signal-2847"
# 1. Grid signal received -- record response latency
witness.witness_grid_signal(
signal_type="economic",
response_latency_ms=4200,
grid_operator="PJM Interconnection"
)
# 2. Record the event phase transition
witness.witness_demand_response(
event_phase="signal_received",
committed_kw=500.0,
signal_source=signal_id
)
# 3. Establish baseline before curtailment
witness.witness_baseline_consumption(
baseline_kw=2400.0,
measurement_method="metered_10day_avg",
confidence_x1000=950
)
# 4. Execute curtailment, then witness the result
witness.witness_demand_response(
event_phase="curtailment_start",
committed_kw=500.0,
signal_source=signal_id
)
# ... curtailment period ...
witness.witness_demand_response(
event_phase="curtailment_end",
committed_kw=500.0,
signal_source=signal_id
)
# 5. Record actual vs committed reduction
witness.witness_curtailment(
actual_reduction_kw=520.0,
committed_kw=500.0,
compliance_ratio_x1000=1040
)
# 6. Attest settlement data
witness.witness_settlement(
settlement_kwh=1560.0,
price_usd_per_mwh=45.25,
event_count=3
)
# 7. Link carbon credits to witnessed curtailment
witness.witness_carbon_credit(
credit_type="rec",
quantity_mwh=1.56,
registry_id="M-RETS-12345"
)
# 8. Restoration
witness.witness_demand_response(
event_phase="restoration",
committed_kw=500.0,
signal_source=signal_id
)
Eight witness anchors with sequential timestamps, all linked by the signal source PJM-ERCOT-Signal-2847. The chain proves: (1) a grid signal was received and response latency was recorded, (2) a 2,400 kW baseline was established using 10-day metered average, (3) 520 kW of curtailment was reported against a 500 kW commitment (104% compliance ratio), (4) settlement was attested at 1,560 kWh, and (5) 1.56 MWh of RECs were linked to the curtailment with a specific registry identifier. Each anchor can be verified independently.
import { Witness } from "@tenova/swt3-ai";
const witness = new Witness({
tenantId: "grid-participant",
apiKey: "axm_...",
endpoint: "https://sovereign.tenova.io/api/v1/witness"
});
const signalId = "PJM-ERCOT-Signal-2847";
// 1. Grid signal received
witness.witnessAdrGridSignal({
signalType: "economic",
responseLatencyMs: 4200,
gridOperator: "PJM Interconnection"
});
// 2. Event phase: signal received
witness.witnessAdrEvent({
eventPhase: "signal_received",
committedKw: 500.0,
signalSource: signalId
});
// 3. Establish baseline
witness.witnessAdrBaseline({
baselineKw: 2400.0,
measurementMethod: "metered_10day_avg",
confidenceX1000: 950
});
// 4. Curtailment lifecycle
witness.witnessAdrEvent({
eventPhase: "curtailment_start",
committedKw: 500.0,
signalSource: signalId
});
// ... curtailment period ...
witness.witnessAdrEvent({
eventPhase: "curtailment_end",
committedKw: 500.0,
signalSource: signalId
});
// 5. Record actual reduction
witness.witnessAdrCurtailment({
actualReductionKw: 520.0,
committedKw: 500.0,
complianceRatioX1000: 1040
});
// 6. Settlement attestation
witness.witnessAdrSettlement({
settlementKwh: 1560.0,
priceUsdPerMwh: 45.25,
eventCount: 3
});
// 7. Carbon credit provenance
witness.witnessAdrCarbon({
creditType: "rec",
quantityMwh: 1.56,
registryId: "M-RETS-12345"
});
// 8. Restoration
witness.witnessAdrEvent({
eventPhase: "restoration",
committedKw: 500.0,
signalSource: signalId
});
Baseline consumption is the single most disputed value in demand response settlement. The baseline determines how much load reduction is credited -- a higher baseline means a larger claimed reduction from the same actual consumption. Every DR market has experienced baseline gaming allegations.
ADR-BASE.1 witnesses the baseline value, the measurement methodology used, and a confidence indicator. It does not calculate the baseline. The participant's meter data management system or M&V platform determines the value. SWT3 records what was reported and when.
| Method | Description | Common Usage |
|---|---|---|
metered_10day_avg |
Average of the 10 highest-consumption days from the prior billing period | PJM CBL (Customer Baseline Load), most ISO markets |
regression |
Statistical regression model (weather-normalized, occupancy-adjusted) | IPMVP Option C, large commercial/industrial |
real_time_meter |
Live interval meter data (AMI/SCADA) at time of event | Real-time pricing programs, fast-response DR |
deemed_savings |
Pre-determined savings values from technical reference manuals | Prescriptive EE/DR programs, residential |
The confidence_x1000 parameter records a confidence indicator as an integer (950 = 95.0%). This allows the auditor to understand the precision of the baseline claim without floating-point ambiguity.
ADR-CURT.1 records three values: actual reduction (kW), committed reduction (kW), and the compliance ratio. The ratio is expressed as an integer multiplied by 1,000 to avoid floating-point representation issues (1040 = 104.0%).
| Ratio (x1000) | Meaning | Assessment Implication |
|---|---|---|
| 1000 | Exact match -- actual equals committed | Commitment met precisely |
| 1040 | Over-delivery -- 104% of commitment | Participant exceeded commitment by 4% |
| 840 | Under-delivery -- 84% of commitment | Shortfall of 16%, potential penalty exposure |
| 0 | No reduction delivered | Complete non-performance |
Over-delivery and under-delivery both produce valid witness anchors. SWT3 records the reported values without judgment. In many DR programs, over-delivery is compensated at marginal rates while under-delivery triggers penalties. The witness anchor preserves the exact values at the time of reporting, regardless of subsequent settlement adjustments.
An ADR-CURT.1 anchor with committed = 500 kW, actual = 520 kW, ratio = 1040. The assessor can compare this to the ISO/RTO settlement statement. If the settlement credits 520 kW but the witness anchor shows 480 kW, there is a discrepancy that warrants investigation. The anchor timestamp proves when the curtailment values were first reported.
ADR-SETTLE.1 records the settlement quantity (kWh), price (USD per MWh), and the number of DR events included in the settlement period. This creates an auditable record that links financial settlement to the witnessed curtailment events.
Settlement anchors are typically produced at the end of a billing cycle, after curtailment events have been measured and verified by the ISO/RTO. The witness anchor does not replace the ISO's settlement statement. It records the participant's reported settlement data at the time of submission, creating an independent timestamp that an auditor can cross-reference.
ADR-CARBON.1 connects carbon credits to their underlying curtailment evidence. When a curtailment event generates a Renewable Energy Certificate, carbon offset, Energy Attribute Certificate, or Guarantee of Origin, the witness anchor records the credit type, quantity (MWh), and registry identifier.
| Credit Type | Description | Common Registry |
|---|---|---|
rec | Renewable Energy Certificate | M-RETS, WREGIS, NEPOOL-GIS, PJM-GATS, NAR |
carbon_offset | Verified carbon offset credit | Verra (VCS), Gold Standard, ACR, CAR |
eac | Energy Attribute Certificate | I-REC, TIGR |
guarantee_of_origin | EU Guarantee of Origin | AIB, national issuing bodies |
The registry_id field records the unique identifier assigned by the carbon registry. An auditor can trace from the SWT3 witness anchor to the registry record to the underlying curtailment anchor, establishing a provenance chain from physical demand reduction to environmental credit.
ADR-GRID.1 records the type of grid signal received, the response latency (milliseconds from signal receipt to response initiation), and the identity of the grid operator. Response latency is critical for frequency regulation and emergency dispatch programs where seconds matter.
| Signal Type | Description | Typical Latency Requirement |
|---|---|---|
emergency | Grid emergency dispatch (reliability event) | < 10 minutes |
economic | Price-based curtailment signal | < 1 hour |
capacity | Capacity market obligation activation | < 30 minutes |
frequency_regulation | AGC frequency regulation signal | < 4 seconds (NERC BAL-001) |
voltage_support | Reactive power / voltage regulation | < 30 seconds |
NERC BAL-001-2 requires Balancing Authorities to maintain frequency within defined limits. Resources providing frequency regulation must respond within seconds, not minutes. The witness anchor records the reported latency -- the grid operator's telemetry remains the authoritative measurement. The anchor provides an independent record that can corroborate or highlight discrepancies in the operator's data.
An ADR-GRID.1 anchor showing signal_type = "economic", response_latency_ms = 4200 (4.2 seconds), grid_operator = "PJM Interconnection". The assessor can compare this to PJM's recorded response time. If PJM's records show a 15-second response but the participant's witness anchor shows 4.2 seconds, the discrepancy is flagged for investigation. The anchor timestamp proves when the latency was first reported.
Each ADR procedure produces a witness anchor with a standard format. Here is how an assessor reads the evidence for a complete DR event:
SWT3-S-CLOUD-AI-ADRCURT1-PASS-1788321600-7f3a2b9c1d4e
Decomposed: SWT3 (protocol) -- S (SaaS tier) -- CLOUD (cloud provider) -- AI (domain) -- ADRCURT1 (procedure: curtailment verification) -- PASS (anchor minted) -- 1788321600 (epoch timestamp) -- 7f3a2b9c1d4e (fingerprint).
| Procedure | Reported Event Phase / Type | Primary Measurement | Context Value |
|---|---|---|---|
| ADR-EVENT.1 | Phase transition (e.g., signal_received) | Committed kW | Signal source identifier |
| ADR-BASE.1 | Baseline established | Baseline kW | Measurement method + confidence |
| ADR-CURT.1 | Curtailment measured | Actual reduction kW | Committed kW + compliance ratio |
| ADR-SETTLE.1 | Settlement submitted | Settlement kWh | Price (USD/MWh) + event count |
| ADR-CARBON.1 | Credit issued/transferred | Quantity (MWh) | Credit type + registry ID |
| ADR-GRID.1 | Signal type classification | Response latency (ms) | Grid operator identity |
A complete DR event produces 6-8 anchors (depending on phase transitions). The assessor queries by signal source identifier to retrieve the full chain. Sequential timestamps prove the order of operations. The fingerprints are independently verifiable. If any anchor is missing from the expected sequence, there is a gap in the evidence chain. Anchors cannot be retroactively modified -- a changed value produces a different fingerprint.
ADR governance intersects multiple regulatory frameworks. The following matrix maps each SWT3 ADR procedure to the frameworks it supports:
| Procedure | FERC Order 2222 | EU Clean Energy Package | NERC Standards | EU CBAM | EU RED III | SEC Climate |
|---|---|---|---|---|---|---|
| ADR-EVENT.1 | DER aggregation metering | Art. 17 -- active customer DR | -- | -- | -- | -- |
| ADR-BASE.1 | Baseline methodology transparency | Art. 17 -- measurement methodology | -- | -- | -- | Scope 2 baseline methodology |
| ADR-CURT.1 | Performance verification | Art. 17 -- load reduction verification | BAL-002 (disturbance recovery) | Emissions reduction evidence | -- | Scope 2 reduction claims |
| ADR-SETTLE.1 | Settlement data integrity | Art. 18 -- DR compensation | -- | Embedded emissions reporting | -- | Climate-related financial data |
| ADR-CARBON.1 | -- | Art. 19 -- Guarantees of Origin | -- | Carbon credit provenance | Art. 19 -- GoO traceability | Carbon offset disclosure |
| ADR-GRID.1 | DER response verification | Art. 17 -- response capability | BAL-001 (frequency response) | -- | -- | -- |
FERC Order 2222 requires ISOs and RTOs to establish rules allowing DER aggregations to participate in wholesale markets. Aggregators must demonstrate that individual resources perform as committed. ADR-EVENT.1 through ADR-CURT.1 provide per-resource evidence that can be aggregated for portfolio-level compliance reporting.
Article 17 establishes active customer rights to participate in demand response, including the right to transparent and non-discriminatory measurement. ADR-BASE.1's methodology attestation directly supports Article 17's measurement transparency requirements. Article 19 requires Guarantees of Origin to be traceable to the underlying generation or reduction event -- ADR-CARBON.1 provides this provenance link.
BAL-001-2 (Real Power Balancing Control Performance) requires frequency response within defined time limits. ADR-GRID.1's response latency attestation provides independent evidence of response timing. BAL-002 (Disturbance Control) requires recovery from contingency events -- ADR-CURT.1 provides curtailment evidence during disturbance recovery periods.
Registrants disclosing Scope 2 emissions must document the methodology for calculating avoided emissions from demand response participation. ADR-BASE.1 and ADR-CURT.1 provide independently verifiable records of baseline methodology and actual curtailment values that support the registrant's disclosure.
# Python pip install swt3-ai # TypeScript npm install @tenova/swt3-ai
Both SDKs include all six ADR witness methods. No additional packages or plugins required.
Run without an API key to see witness anchors locally. No network calls, no account required:
# Python python -m swt3_ai.demo # TypeScript npx swt3-demo
Create a free account to persist anchors to the SWT3 ledger. You will receive a tenant ID and API key immediately. Anchors become independently verifiable at the public verification endpoint.