Research Loop Audit

Run ID: gw-forecast-production-001-loop07

Status: running

Original goal

# North Star: Investment-Grade GW Forecast vs Actual

## Mission

Build **production-grade research** we can trust for **investment decisions** on whether **more gigawatts (GW) of data-center / AI infrastructure capacity are coming online** — past, present, and future.

For each of **17 target companies**, answer:

1. **What did they say?** — GW forecasts, pipeline, and guidance each quarter  
2. **How did forecasts change?** — vintage panel: Oracle said X GW in Q1, revised to Y in Q3  
3. **What actually happened?** — delivered / operating / under-construction GW vs the original forecast  
4. **Can we see it on a chart?** — one **line graph per company** + one **portfolio line graph**

Example: *"Oracle said they'll have X data centers / Y GW by 2027. Each quarter we capture that statement. We track how the forecast moved quarter-to-quarter and compare the first forecast to what ultimately landed."*

## Target Companies (17)

ORCL, MSFT, AMZN, GOOGL, META, CoreWeave (CRWV), DLR, EQIX, IRM, APLD, CORZ, IREN, WULF, CIFR, HUT, NBIS/Nebius, NVDA

*(Vertiv/Eaton dropped from v1 — infrastructure suppliers, not capacity owners.)*

## Core Metrics (GW-first)

- operating / live GW (actual)
- GW under construction (actual snapshot)
- GW pipeline / future capacity (forecast)
- GW added this quarter (actual)
- forecast vintage: `as_of_quarter` → `target_period` → `forecast_gw`
- capex actuals & guidance (supporting evidence)
- revenue conversion per MW/GW where disclosed

## Canonical Output Layout

All production artifacts live under `research_loop/production/`:

```
production/
  {TICKER}/
    source_manifest.csv
    forecast_vintage.csv      # how forecasts changed each quarter
    capacity_timeseries.csv   # actual vs latest vs original forecast by period
    company_gw_chart.html     # line chart for this company
    extractor.py
    validator.py
  portfolio_gw_timeseries.csv
  portfolio_gw_chart.html
  goal_progress.json          # machine-readable completion status
```

## Done When (`north_star.json`)

- Every company has ≥8 quarters in `forecast_vintage.csv` and `capacity_timeseries.csv`
- Every company has provenance-complete rows (https source URLs, snippets, validation PASS)
- Every company has `company_gw_chart.html`
- Portfolio chart aggregates all companies
- `goal_completion.py` reports ≥85% investment-confidence score

## Source Preference

Primary: SEC 10-Q/10-K/8-K, earnings supplements, IR pages, investor decks, transcripts  
Secondary: industry press (discovery only — not row-level evidence)

## Supervisor Mandate

The auto-continue supervisor runs **until the north star is achieved**, not for a fixed loop count. Each child loop picks **one company or one repair task** that moves the portfolio closest to done.

Current task

Repair the failed prior child run `gw-forecast-production-001-loop06`. The previous task was: Complete GOOGL production pipeline: replace cross-ticker fallbacks (AMZN manifest/vintage/chart from loop05 + EQIX eqix_rows.csv timeseries) with real Alphabet/Google primary-source artifacts in production/GOOGL/, following the proven ORCL/MSFT/AMZN hyperscaler capex-proxy pattern (SEC 10-Q/10-K cash-flow capex actuals + earnings-call guidance vintages; normalized_gw blank with explicit caveat). Fix the persisted artifacts from that prior run so the machine gate passes. Do not choose a new task. Use the copied context for `gw-forecast-production-001-loop06` and update the same expected artifact names. Prior child public URL: http://204.168.210.83:8130/research-loop/gw-forecast-production-001-loop06/index.html Machine-gate blockers to fix: - `production/GOOGL/forecast_vintage.csv` stores numeric guidance values that are not supported by the cited row-level source snippets. Examples: FY2026-FQ1 `capex_guidance=185` cites the FY2026 Q1 10-Q qualitative MD&A snippet, not the earnings-call/webcast numeric revision; FY2025-FQ3 `capex_guidance=91` is hindsight-implied from later actual FY2025 capex, not a supported Q3 guidance vintage. - The extractor’s dedupe priority prefers SEC 10-Q qualitative rows over earnings-call/webcast numeric rows, so regeneration can preserve unsupported numeric guidance provenance instead of the primary source that actually contains the numeric guidance. - Several `capex_guidance` rows use qualitative SEC MD&A snippets while storing numeric USD values derived from other sources. That weakens production readiness because `source_url`, `source_location`, and `source_snippet` do not directly substantiate `raw_value`. - The FY2025-FQ3 guidance row appears to backfill a numeric estimate using later FY2025 actuals, which is not a valid as-of guidance vintage under the stated hyperscaler capex-proxy pattern. Prior artifacts to inspect: - build_timeseries.py - capacity_timeseries.csv - company_gw_chart.html - extractor.py - forecast_vintage.csv - source_manifest.csv - validator.py

Completed tasks

Task history

Repair the failed prior child run `gw-forecast-production-001-loop06`. The previous task was: Complete GOOGL production pipeline: replace cross-ticker fallbacks (AMZN manifest/vintage/chart from loop05 + EQIX eqix_rows.csv timeseries) with real Alphabet/Google primary-source artifacts in production/GOOGL/, following the proven ORCL/MSFT/AMZN hyperscaler capex-proxy pattern (SEC 10-Q/10-K cash-flow capex actuals + earnings-call guidance vintages; normalized_gw blank with explicit caveat). Fix the persisted artifacts from that prior run so the machine gate passes. Do not choose a new task. Use the copied context for `gw-forecast-production-001-loop06` and update the same expected artifact names. Prior child public URL: http://204.168.210.83:8130/research-loop/gw-forecast-production-001-loop06/index.html Machine-gate blockers to fix: - `production/GOOGL/forecast_vintage.csv` stores numeric guidance values that are not supported by the cited row-level source snippets. Examples: FY2026-FQ1 `capex_guidance=185` cites the FY2026 Q1 10-Q qualitative MD&A snippet, not the earnings-call/webcast numeric revision; FY2025-FQ3 `capex_guidance=91` is hindsight-implied from later actual FY2025 capex, not a supported Q3 guidance vintage. - The extractor’s dedupe priority prefers SEC 10-Q qualitative rows over earnings-call/webcast numeric rows, so regeneration can preserve unsupported numeric guidance provenance instead of the primary source that actually contains the numeric guidance. - Several `capex_guidance` rows use qualitative SEC MD&A snippets while storing numeric USD values derived from other sources. That weakens production readiness because `source_url`, `source_location`, and `source_snippet` do not directly substantiate `raw_value`. - The FY2025-FQ3 guidance row appears to backfill a numeric estimate using later FY2025 actuals, which is not a valid as-of guidance vintage under the stated hyperscaler capex-proxy pattern. Prior artifacts to inspect: - build_timeseries.py - capacity_timeseries.csv - company_gw_chart.html - extractor.py - forecast_vintage.csv - source_manifest.csv - validator.py

Explicit seed task provided on the command line.

Status: in_progress

Review cycles: 0

Acceptance criteria

Expected artifacts

Artifacts

Agent calls & decisions

TimeIterRoleTaskVerdict DecisionsBlockersArtifacts
2026-06-07T17:20:35.393601+00:000systemstart
[
  "run started"
]
[]
2026-06-07T17:20:36.409770+00:001plannerRepair the failed prior child run `gw-forecast-production-001-loop06`. The previous task was: Complete GOOGL production pipeline: replace cross-ticker fallbacks (AMZN manifest/vintage/chart from loop05 + EQIX eqix_rows.csv timeseries) with real Alphabet/Google primary-source artifacts in production/GOOGL/, following the proven ORCL/MSFT/AMZN hyperscaler capex-proxy pattern (SEC 10-Q/10-K cash-flow capex actuals + earnings-call guidance vintages; normalized_gw blank with explicit caveat). Fix the persisted artifacts from that prior run so the machine gate passes. Do not choose a new task. Use the copied context for `gw-forecast-production-001-loop06` and update the same expected artifact names. Prior child public URL: http://204.168.210.83:8130/research-loop/gw-forecast-production-001-loop06/index.html Machine-gate blockers to fix: - `production/GOOGL/forecast_vintage.csv` stores numeric guidance values that are not supported by the cited row-level source snippets. Examples: FY2026-FQ1 `capex_guidance=185` cites the FY2026 Q1 10-Q qualitative MD&A snippet, not the earnings-call/webcast numeric revision; FY2025-FQ3 `capex_guidance=91` is hindsight-implied from later actual FY2025 capex, not a supported Q3 guidance vintage. - The extractor’s dedupe priority prefers SEC 10-Q qualitative rows over earnings-call/webcast numeric rows, so regeneration can preserve unsupported numeric guidance provenance instead of the primary source that actually contains the numeric guidance. - Several `capex_guidance` rows use qualitative SEC MD&A snippets while storing numeric USD values derived from other sources. That weakens production readiness because `source_url`, `source_location`, and `source_snippet` do not directly substantiate `raw_value`. - The FY2025-FQ3 guidance row appears to backfill a numeric estimate using later FY2025 actuals, which is not a valid as-of guidance vintage under the stated hyperscaler capex-proxy pattern. Prior artifacts to inspect: - build_timeseries.py - capacity_timeseries.csv - company_gw_chart.html - extractor.py - forecast_vintage.csv - source_manifest.csv - validator.py
[
  "Explicit seed task provided on the command line."
]
[]

Generated 2026-06-07T17:20:36.605219+00:00