{
  "report_id": "theme_power_scarcity_node_merchant_power_capacity_markets",
  "report_type": "theme_value_chain_node",
  "site_path": "themes/power-scarcity-and-grid-load/nodes/merchant-power-capacity-markets/index.html",
  "title": "Merchant Power And Capacity Markets",
  "as_of": "2026-07-02",
  "generated_at": "2026-07-04T00:00:00-07:00",
  "freshness": {
    "price_data_as_of": "2026-07-02",
    "daily_ohlc_latest": "2026-07-02",
    "static_setup_levels_as_of": "2026-05-22",
    "chart_interval": "weekly",
    "knowledge_reviewed_as_of": "2026-07-04",
    "hnrg_profile_generated_at_utc": "2026-06-21T18:39:13.715571Z",
    "hnrg_research_generated_at_utc": "2026-06-21T18:55:00Z",
    "earnings_dates_checked_as_of": "2026-06-13 for VST, TLN, and NRG; HNRG not rechecked in this scoped pass",
    "active_common_stocks": 5274,
    "filtered_coverage_count": 5008
  },
  "revision": {
    "version": 5,
    "updated_label": "Paper-led rerank from 1GT and SemiAnalysis grid constraints research",
    "metadata_path": "themes/power-scarcity-and-grid-load/nodes/merchant-power-capacity-markets/report.json",
    "curation_source": "themes/power-scarcity-and-grid-load/nodes/node-data.json",
    "manual_static_refresh": true,
    "generator_drift": "scripts/build_power_scarcity_nodes.py still emits table-based basket sections, visible setup paragraph stacks, body setup tables, and a separate chart-timing row in the confirms/weakens checklist. Static target artifacts were updated without rerunning the stale generator."
  },
  "node": {
    "slug": "merchant-power-capacity-markets",
    "order": 2,
    "level": "L3 core node",
    "role": "Owns competitive generation, retail load, PPAs, hedges, capacity payments, and demand-response exposure where power scarcity can become free cash flow after fuel, collateral, leverage, and market-rule costs.",
    "description": "Merchant power and capacity-market companies own generation, sell retail power, or contract firm electricity in competitive power markets. Buyers include retail customers, load-serving entities, grid markets, hyperscalers, and other large power users. Capacity payments compensate available megawatts for reliability, while energy sales, PPAs, hedges, retail margins, demand-response revenue, and bilateral capacity contracts decide how much tight grid supply reaches company cash flow. The current basket read is VST first because its lane has the broadest cash-backed generation, retail, hedge, Meta PPA, Cogentrix, and buyback evidence; TLN second because PJM, Susquehanna, AWS, and Cornerstone create a direct but high-expectation route; NRG third because LS Power, CPower/VPP, retail load, data-center agreements, and TEF projects need FCFbG and deleveraging proof; HNRG fourth because Merom's MISO dispatchable capacity, forward sales, and 12-year capacity agreement fit the node, but weak Q1 Electric EBITDA, approval risk, plant availability, capex, and dilution keep it below the larger merchant platforms."
  },
  "ticker_baskets": {
    "core": [
      "VST",
      "CEG",
      "TLN"
    ],
    "option": [
      "NRG"
    ],
    "watch": [
      "HNRG"
    ]
  },
  "demand_origin_refs": [
    "MSFT",
    "AMZN",
    "GOOGL",
    "META",
    "ORCL"
  ],
  "chart_artifacts": [
    {
      "chart_id": "chart-vst",
      "ticker": "VST",
      "source_table": "daily_ohlc",
      "chart_interval": "weekly",
      "aggregation": "weekly bars grouped from daily rows by calendar week; open is first row, high is weekly max, low is weekly min, close is final row, volume is summed",
      "indicators": [
        "20w_ema",
        "100w_ema",
        "weekly_volume",
        "20w_average_volume"
      ],
      "indicator_method": "20-week and 100-week exponential moving averages computed from weekly closes using full available weekly history before visible-window clipping; weekly volume bars shown with a 20-week average volume line",
      "price_data_as_of": "2026-07-02",
      "visible_years": 3,
      "visible_start_date": "2023-07-02",
      "visible_end_date": "2026-07-02",
      "rendering": "report_api_right_rail",
      "fallback_table": false,
      "api_route": "/api/securities/VST/chart?frequency=weekly&window=3y&as_of=latest",
      "static_setup_source_as_of": "no refreshed static setup row; added in paper-led rerank"
    },
    {
      "chart_id": "chart-ceg",
      "ticker": "CEG",
      "source_table": "daily_ohlc",
      "chart_interval": "weekly",
      "aggregation": "weekly bars grouped from daily rows by calendar week; open is first row, high is weekly max, low is weekly min, close is final row, volume is summed",
      "indicators": [
        "20w_ema",
        "100w_ema",
        "weekly_volume",
        "20w_average_volume"
      ],
      "indicator_method": "20-week and 100-week exponential moving averages computed from weekly closes using full available weekly history before visible-window clipping; weekly volume bars shown with a 20-week average volume line",
      "price_data_as_of": "2026-07-02",
      "visible_years": 3,
      "visible_start_date": "2023-07-02",
      "visible_end_date": "2026-07-02",
      "rendering": "report_api_right_rail",
      "fallback_table": false,
      "api_route": "/api/securities/CEG/chart?frequency=weekly&window=3y&as_of=latest",
      "static_setup_source_as_of": "no refreshed static setup row; added in paper-led rerank"
    },
    {
      "chart_id": "chart-tln",
      "ticker": "TLN",
      "source_table": "daily_ohlc",
      "chart_interval": "weekly",
      "aggregation": "weekly bars grouped from daily rows by calendar week; open is first row, high is weekly max, low is weekly min, close is final row, volume is summed",
      "indicators": [
        "20w_ema",
        "100w_ema",
        "weekly_volume",
        "20w_average_volume"
      ],
      "indicator_method": "20-week and 100-week exponential moving averages computed from weekly closes using full available weekly history before visible-window clipping; weekly volume bars shown with a 20-week average volume line",
      "price_data_as_of": "2026-07-02",
      "visible_years": 3,
      "visible_start_date": "2023-07-02",
      "visible_end_date": "2026-07-02",
      "rendering": "report_api_right_rail",
      "fallback_table": false,
      "api_route": "/api/securities/TLN/chart?frequency=weekly&window=3y&as_of=latest",
      "static_setup_source_as_of": "no refreshed static setup row; added in paper-led rerank"
    },
    {
      "chart_id": "chart-nrg",
      "ticker": "NRG",
      "source_table": "daily_ohlc",
      "chart_interval": "weekly",
      "aggregation": "weekly bars grouped from daily rows by calendar week; open is first row, high is weekly max, low is weekly min, close is final row, volume is summed",
      "indicators": [
        "20w_ema",
        "100w_ema",
        "weekly_volume",
        "20w_average_volume"
      ],
      "indicator_method": "20-week and 100-week exponential moving averages computed from weekly closes using full available weekly history before visible-window clipping; weekly volume bars shown with a 20-week average volume line",
      "price_data_as_of": "2026-07-02",
      "visible_years": 3,
      "visible_start_date": "2023-07-02",
      "visible_end_date": "2026-07-02",
      "rendering": "report_api_right_rail",
      "fallback_table": false,
      "api_route": "/api/securities/NRG/chart?frequency=weekly&window=3y&as_of=latest",
      "static_setup_source_as_of": "no refreshed static setup row; added in paper-led rerank"
    },
    {
      "chart_id": "chart-hnrg",
      "ticker": "HNRG",
      "source_table": "daily_ohlc",
      "chart_interval": "weekly",
      "aggregation": "weekly bars grouped from daily rows by calendar week; open is first row, high is weekly max, low is weekly min, close is final row, volume is summed",
      "indicators": [
        "20w_ema",
        "100w_ema",
        "weekly_volume",
        "20w_average_volume"
      ],
      "indicator_method": "20-week and 100-week exponential moving averages computed from weekly closes using full available weekly history before visible-window clipping; weekly volume bars shown with a 20-week average volume line",
      "price_data_as_of": "2026-07-02",
      "visible_years": 3,
      "visible_start_date": "2023-07-02",
      "visible_end_date": "2026-07-02",
      "rendering": "report_api_right_rail",
      "fallback_table": false,
      "api_route": "/api/securities/HNRG/chart?frequency=weekly&window=3y&as_of=latest",
      "static_setup_source_as_of": "no refreshed static setup row; added in paper-led rerank"
    }
  ],
  "links_out": [
    "theme_power_scarcity_and_grid_load",
    "theme_power_scarcity_node_new_power_demand",
    "theme_power_scarcity_node_utilities_grid_recovery",
    "theme_power_scarcity_node_electrical_equipment_bottlenecks",
    "theme_power_scarcity_node_grid_delivery_services",
    "theme_power_scarcity_node_power_ready_campuses",
    "theme_power_scarcity_node_fuel_inputs",
    "theme_power_scarcity_node_cooling_backup_power_quality"
  ],
  "knowledge_sources": [
    "../../../../../knowledge/wiki/concepts/themes/power-scarcity-and-grid-load.md",
    "../../../../../knowledge/wiki/lanes/sector/utilities.md",
    "../../../../../knowledge/wiki/lanes/security/vst.md",
    "../../../../../knowledge/wiki/lanes/security/tln.md",
    "../../../../../knowledge/wiki/lanes/security/nrg.md",
    "../../../../../knowledge/wiki/lanes/security/hnrg.md",
    "../../../../../knowledge/raw/sources/security_profile__hnrg__autoresearch_security_profile_06212026_/output.md",
    "../../../../../knowledge/raw/sources/security_research__hnrg__autoresearch_security_profile_06212026_/output.md",
    "../../../../../knowledge/raw/sources/security_profile__hnrg__autoresearch_security_profile_06212026_/source.json",
    "../../../../../knowledge/raw/sources/security_research__hnrg__autoresearch_security_profile_06212026_/source.json",
    "../../../../../knowledge/wiki/lanes/security/ceg.md"
  ],
  "external_sources": [
    {
      "kind": "earnings_calendar",
      "label": "Nasdaq VST earnings page",
      "url": "https://www.nasdaq.com/market-activity/stocks/vst/earnings",
      "accessed": "2026-06-13",
      "finding": "Earnings Date data was not available; card uses Not confirmed."
    },
    {
      "kind": "earnings_calendar",
      "label": "Nasdaq TLN earnings page",
      "url": "https://www.nasdaq.com/market-activity/stocks/tln/earnings",
      "accessed": "2026-06-13",
      "finding": "Earnings Date data was not available; card uses Not confirmed."
    },
    {
      "kind": "earnings_calendar",
      "label": "Nasdaq NRG earnings page",
      "url": "https://www.nasdaq.com/market-activity/stocks/nrg/earnings",
      "accessed": "2026-06-13",
      "finding": "Earnings Date data was not available; card uses Not confirmed."
    },
    {
      "kind": "local_knowledge_raw",
      "label": "HNRG filed profile and research outputs",
      "url": "../../../../../knowledge/wiki/lanes/security/hnrg.md",
      "accessed": "2026-06-21",
      "finding": "Filed HNRG lane and paired raw outputs support Merom capacity, forward sales, weak Q1 operations, liquidity, capex, approval, and dilution claims; no earnings-calendar provider was checked for HNRG in this scoped pass."
    },
    "../../../../papers/power-grid/article_power-grid-upgrades.md",
    "../../../../papers/power-grid/US Grid Constraints_ Towards 40GW+ of Behind-The-Meter Datacenter by 2028_.md"
  ],
  "discovery_sources": [
    {
      "kind": "discovery_cli_status",
      "label": "HNRG stored coverage status",
      "query_ref": "python -m discovery.cli status HNRG --json:daily_ohlc:2026-06-18"
    },
    {
      "kind": "discovery_cli_lineage_status",
      "label": "HNRG daily_ohlc lineage status",
      "query_ref": "python -m discovery.cli lineage-status --ticker HNRG --dataset daily_ohlc --limit 5 --json:lineage-source-freshness-2026-05-08"
    },
    {
      "kind": "duckdb_readonly_query",
      "label": "Merchant Power And Capacity Markets daily_ohlc freshness and market-cap check",
      "query_ref": "duckdb-readonly:instruments_market_cap_daily_ohlc_latest:VST|TLN|NRG|HNRG|CEG:2026-06-18"
    },
    {
      "kind": "report_api",
      "label": "Selected-security right-rail weekly chart route",
      "query_ref": "/api/securities/{ticker}/chart?frequency=weekly&window=3y&as_of=latest"
    }
  ],
  "basket_source_note": {
    "ranking": [
      "VST",
      "CEG",
      "TLN",
      "NRG",
      "HNRG"
    ],
    "excluded_not_ranked": [],
    "ranking_method": "Node economics and source-backed firm-capacity exposure first, then technical timing. CEG moves into core because nuclear output and clean-firm capacity directly map to the paper-led scarcity thesis. HNRG remains a lower-ranked dispatchable MISO capacity and contract-conversion row.",
    "market_cap_source": "Read-only DuckDB instruments.market_cap queried 2026-07-04 for active basket rows; CEG market cap was about $97.9B in the local instruments table.",
    "next_earnings_source": "Nasdaq earnings pages checked 2026-06-13 for VST, TLN, and NRG; no earnings date was available. HNRG was not rechecked against an earnings-calendar provider in this scoped pass.",
    "latest_quarter_revenue_source": "VST, CEG, TLN, NRG, and HNRG linked security lanes and their latest release/10-Q source registries.",
    "static_setup_note": "HNRG has API-backed chart coverage but no refreshed static setup levels. No HNRG trigger, invalidation, or guide line was added."
  },
  "validation_notes": [
    "Node-level HTML structure, hidden setup fields, basket card counts, exact basket detail headings, evidence-board headers, relative links, JSON syntax, and diff whitespace were checked during the 2026-06-21 HNRG integration pass.",
    "The selected-security right rail remains API-backed through /api/securities/{ticker}/chart?frequency=weekly&window=3y&as_of=latest. HNRG was added to chart_artifacts and page triggers, but no embedded OHLC payload or static chart overlay was added.",
    "The discovery console script was unavailable and the DuckDB CLI was blocked by snap permissions, so read-only checks used the discovery project's .venv python, python -m discovery.cli, and duckdb.connect(..., read_only=True)."
  ]
}
