# DLR Seed Validation Report

Status: PASS

Post-loop machine check:
- A manual final sanity check initially failed because several booking and CapEx guidance rows stored canonical-scale values in `raw_value` while their snippets showed source-scale values, and several commencement-lag snippets used spelled-out month counts.
- `dlr_rows.csv` was corrected to keep source-scale raw values for those rows while preserving canonical `normalized_value`.
- `validate_dlr_rows.py` was corrected to recognize explicit number words in source snippets for month-count evidence.
- Re-run result: `DLR validation passed` for 81 rows across all eight periods.

Validated artifacts:
- `dlr_schema.yaml`
- `dlr_source_manifest.csv`
- `dlr_rows.csv`
- `validate_dlr_rows.py`

Validation scope:
- Company: DLR
- Periods: 2Q24, 3Q24, 4Q24, 1Q25, 2Q25, 3Q25, 4Q25, 1Q26
- Expected rows: 81
- Actual rows: 81

Required metric families now covered:
- Future development capacity, land MW.
- Future development capacity, shell MW.
- Construction under way MW.
- Pre-leased percentage.
- Development Lifecycle total investment at 100% share.
- Signed bookings at DLR share.
- Signed bookings at 100% share where verified.
- Signed-but-not-commenced backlog at DLR share.
- Signed-but-not-commenced backlog at 100% share where verified.
- Weighted-average commencement lag.
- Total direct capital expenditures actuals.
- Development CapEx guidance net of partner contributions where verified.

Corrections from prior reduced seed:
- Removed derived `future_capacity_total_100_mw`; land and shell are stored separately.
- Reclassified `construction_underway_mw` and `preleased_percentage` from forecast to `actual_development_snapshot`.
- Added leasing rows for signed bookings, backlog, and commencement lag.
- Added actual total direct capex rows, separate from development investment and guidance.
- Added CapEx guidance rows as `forecast_guidance`, not actual spend.
- Expanded ownership basis values for DLR share, 100% share, mixed JV basis, company-presented basis, net partner contribution guidance, and consolidated capex-table basis.
- Expanded forecast/actual classifications to distinguish signed-in-quarter, backlog snapshot, contracted commencement timing, actual capex, and mixed investment rows.

Validation checks covered by `validate_dlr_rows.py`:
- Required fields present on every row.
- Allowed enum values enforced for metric name, ownership basis, class, unit, qualifier, snippet support, and confidence.
- Duplicate `(company, period, metric_name, ownership_basis)` rows rejected.
- Unsupported snippets rejected for seed rows.
- All required metric families are present for all periods.
- Selected metric families are present for verified periods.
- Construction under way and pre-leased rows must be actual development snapshots.
- Total direct capex rows must be actual capex spend.
- CapEx guidance rows must be forecast guidance.
- USD-thousands rows convert to USD millions with 0.001 tolerance.
- Manifest includes all eight periods and required source families for supplements, press releases, presentations, SEC exhibits, capex, and guidance.

Residual caveats:
- Some Development Lifecycle and backlog snippets are compact table fragments; `partial` snippet status is preserved where full header context must be re-read by production extraction.
- DLR does not consistently publish an explicit forecast-versus-delivered MW reconciliation; delivery comparisons should remain a derived downstream layer.
