# What WAPA’s outage map recorded, 23 March to 7 November 2026

*Text edition of the PDF, version 1.0, 9 November 2026.*

- The PDF (version of record): https://viupdate.com/reports/WAPA-OutageMap-Record-v1.0.pdf
- SHA-256 of the PDF: `3259bd04d204ac1d6e5e3e56e09fda7dc1c1ea3b33e85c417670da6bd33ca24a`
- DOI: https://doi.org/10.5281/zenodo.24094226
- Authors: Brian Louden
- License: CC BY 4.0

This is the text of that PDF, made from the same build. The VI Update report kit 1.3 checked it word for word against the PDF's own text: every passage here appears in the PDF in the same order, and everything else in the PDF is chart text, a repeated table heading or a page number. Charts are not reproduced; each figure names its page in the PDF. Cite the PDF.

---

VI Update · Records release · v1.0 · November 2026

# What WAPA’s outage map recorded, 23 March to 7 November 2026

Every five minutes for seven and a half months, the Water and Power Authority’s public outage map: what it showed, how it compares with what WAPA said, and where the record has gaps.

**Brian Louden** · Independent investigative journalist · St. Croix, U.S. Virgin Islands VI Update · v1.0 · 9 November 2026 DOI https://doi.org/10.5281/zenodo.24094226

Built on **USVI Public Records** · [usvipublicrecords.com](https://usvipublicrecords.com)

AI coding agents (Anthropic's Claude), working on Brian Louden's computer under his direction, built and ran the research tools for this report. See "How this report was made."

What this is

Every response from the public outage map of the Virgin Islands Water and Power Authority (WAPA), captured by VI Update every five minutes from 23 March 2026 (13:49 UTC) to 7 November 2026: 65,446 map summaries and 7,433 outage records, seen 530,018 times. WAPA publishes the map; VI Update captured, checked and documented it. The numbers are WAPA’s own account of its outages as its map published them, not an independent measurement of who had power. The full data is released with this report.

6.00M

customer-hours without power on the map, St. Thomas–St. John

773K

customer-hours without power on the map, St. Croix

8 / 14

district-wide outages on the map, St. Croix / St. Thomas–St. John

224 h

of stale answers from WAPA’s feed, 24 July to 2 August 2026: left out, never zero

Contents

- · Read this before using any number

- · How to read this report

- · Who and what

- 1 Every gap of more than 12 minutes

- 2 The outage burden, by district and month

- 3 District-wide outages

- 4 When outages start, how long they stay, and where

- 5 Load shedding, and totals that did not change

- 6 The map against what WAPA and the news reported

- 7 What WAPA’s map does not record

- 8 What WAPA said caused the outages

- 9 Fuel: what WAPA said

- 10 Weather alongside the map

- 11 Costs: official figures only

- 12 What we tested and ruled out

- · What the record does not show

- · What is not reproduced in this report or its data package, and why

- · Sources, method and reconciliation

- · The data behind this report

- A Every district-wide and major event on the map

- B Every reported incident and its outcome

- C Every flat run, and what WAPA’s own data says

- · Corrections

- · How to cite this report

- · Built on USVI Public Records

- · How this report was made

## Read first Read this before using any number

1. **Fresh, stale, missing.** A poll is *stale* when WAPA’s own update time is more than 30 minutes behind the poll: the server answered with old data. Of all polls, 2,687 were stale, most of them while the feed froze from 24 July to 2 August 2026. Stale and missing time is left out of every sum; it is never counted as zero outage. Into a gap, the last fresh count is carried for at most 15 minutes, then nothing.

1. **Customer-hours** are customers out multiplied by the minutes to the next poll, capped at 15 minutes a poll, fresh polls only, split at midnight, with nothing counted after the last poll. They are not the industry’s SAIDI measure.

1. **Per-customer figures are proxies.** WAPA publishes no current customer count by district, so a per-customer figure divides by each district’s largest observed outage (St. Croix 25,142; St. Thomas–St. John 30,557). WAPA’s own 2024 restoration tables (St. Croix 24,117; St. Thomas–St. John 26,459, the only public per-district counts) would raise them by about 4% and 15%.

1. **Districts.** St. Croix, and St. Thomas–St. John: St. Thomas, St. John and Water Island are one grid, and WAPA’s records cannot separate St. John reliably. Districts are assigned by WAPA’s record name, then position, then the estates the record lists, never by latitude 18.0 alone: WAPA placed some St. Croix records in the sea north of that line (map points from 24 March to 7 May 2026).

1. **A total that does not change is not, by itself, a stale map.** Only once, 24 July to 2 August 2026, did WAPA’s own update clock stop for days (it also stopped for 35 minutes on 4 August, counted as stale). Otherwise a district total sometimes stays at one exact value for hours while that clock keeps moving (35 times at 1,000 or more customers), and a large outage that has not yet been restored looks exactly like that. So each such run is checked against WAPA’s own data: the median of WAPA’s hourly history, as WAPA later rewrote it, over the run’s full hours. In 12, that median is about the same as the map; in eight of them every full hour agrees within 10%, and in three of the others WAPA’s history drops to almost nothing partway through. In 13, all of 2,447 customers or fewer, WAPA’s later history counts almost none of them at the median (nine in every full hour): the live map carried customers WAPA’s own history does not. In four it is lower, in two higher, and four cannot be split by district (Section 5, Appendix C).

1. **A map clearance is not a restoration.** A record ends when it leaves the map. WAPA closes almost none of its records with an end time, and its map can clear hours after WAPA has announced a restoration, so durations and customer-hours run long wherever the map clears after the restoration.

1. **The totals can be too high or too low, and the net is not known.** A map that clears after a restoration pushes them up; an outage in a gap in our polls, a record posted late, or a map showing less than WAPA declared pushes them down (Sections 3 and 6); sampling every five minutes can move them either way. WAPA’s own hourly history, a later reconstruction whose method WAPA does not publish, holds 350,944 to 366,387 customer-hours territory-wide inside the 28–30 March gap and 93,908 to 135,890 inside the 24 October gap; the map’s totals leave out all but the first 15 minutes of each, and the full hours of WAPA’s history start later, so nothing is counted twice. That is 6.6% to 7.4% as much again as everything the map counts (WAPA’s first and final versions of those hours), not a bound on what was actually missed.

1. **The summary and the records are one source.** WAPA’s map totals and the sum of its outage records come from the same system; their agreement is consistency, not independent confirmation.

## Reading key How to read this report

- Labels in the text: **[Record]** a record says it (a filing, a government, court or registry record; filings are as reported by whoever filed them); **[Reported]** reported by a named news outlet; **[Our reading]** our reading of a record, such as joining two spellings of a name or reading an abbreviation, explained where it is used. In tables the same three appear as [C], [R] and [O].

- Every figure in this report is computed from the data package or read from an official document linked in the text, except these, which the package README lists one by one with where each comes from: the IODA internet-connectivity readings (Sections 1, 5 and 6); the storm, warning and earthquake records behind the storm-distance sentence in Section 10 and register rows W6 and W10; register rows W1, W4, W5 and W12, from our hourly weather join; and the simulated p-values in Section 10 and rows W2, W3 and W13. The package’s `reproduce.py` checks every other figure the package can compute, to the precision printed (`figures.csv`).

- Where a chart’s color marks the district, St. Croix is blue and St. Thomas–St. John orange; a single blue scale shows how much, and the cause chart has its own colors.

- Quotations are exact. A WAPA ALERT message is quoted as WAPA’s own broadcast, by its text and the time it was received; its e-mail headers and links are left out.

- Times are Atlantic Standard Time (AST, UTC−4), which the Virgin Islands keep all year, with no daylight saving; a time from another zone is marked with that zone.

- This report organizes public records; it does not include interviews or comment.

## Glossary Who and what

**WAPA**

the Virgin Islands Water and Power Authority, the territory’s public electric and water utility

**PSC**

the Public Services Commission, which regulates WAPA’s rates

**Customer-hours**

customers without power on the map × hours, fresh polls only (see Read first)

**Poll**

one five-minute capture of WAPA’s map; fresh, stale, missing or partial (one of its two endpoints saved)

**Record**

one outage as WAPA’s map lists it, with its own ID, start time, customers and position

**Sighting**

one record seen in one poll

**Episode**

records that WAPA reissued under new IDs for one continuing outage, joined by a written rule

**Reported incident**

a group of statements (alerts, releases, news) about one outage, tested together against the map

**District-wide event**

80% or more of a district’s largest observed outage, on the map

**Frozen feed**

24 July to 2 August 2026, when WAPA’s own update time stopped and every answer was identical; the only stretch of more than an hour in which WAPA’s clock shows the map frozen

**Flat run**

a district total unchanged for 3 hours or more at 1,000 or more customers, every poll fresh: a pattern a large, sustained outage also makes, so never by itself evidence that the map was stale

**Rotation day**

a day on which the map shows a rotation-like pattern: three or more waves of 75–200-minute records of 1,000 or more customers; a pattern, not a stated cause (Section 5)

**LEAC**

the Levelized Energy Adjustment Clause, WAPA’s fuel charge

**FEMA**

the Federal Emergency Management Agency, which funds disaster rebuilding

**GVI**

the Government of the Virgin Islands

**SAIDI**

the industry’s average outage duration per customer (IEEE 1366); this report does not compute it

**O/E**

observed over expected: starts seen against starts expected if wind made no difference

**Knots (kt)**

wind speed in nautical miles an hour, as the airport reports it (30 knots is about 35 miles an hour)

**AST**

Atlantic Standard Time (UTC−4), kept all year in the Virgin Islands

## Section 1 Every gap of more than 12 minutes

The capture runs from 23 March 2026 at 9:49 a.m. AST (13:49 UTC) to 7 November 2026 at 10:54 a.m.: 65,446 polls, 5,228.5 hours of them fresh. In all, 20 stretches are missing (no poll saved), stale (WAPA answered with old data) or partial (one of WAPA’s endpoints saved, not the other): 45.4 hours missing, 224.0 stale and 0.96 partial. A stretch is listed as missing when no poll was saved for more than 12 minutes; a single poll not saved, which leaves about ten minutes between saved polls, is not listed, and the 15-minute carry spans it. Before the five-minute capture, 27 territory summaries and 27 records survive from the poller’s first day (22–23 March); they are released apart and kept out of every sum.

| Kind | From (AST) | To (AST) | Hours | What is known |
|---|---|---|---|---|
| Missing | 28 Mar 2026 23:04 | 30 Mar 2026 09:49 | 34.75 | no poll saved; cause not recorded (before 7 November 2026 the poller kept no lasting record of why a poll was missing) |
| Partial | 3 Apr 2026 04:09 | 3 Apr 2026 04:09 | 0.08 | outage records captured, summary not: the poll is absent from polls.csv; its records are in sightings.csv |
| Partial | 28 Apr 2026 09:01 | 28 Apr 2026 09:01 | 0.08 | summary captured, outage records not: district totals unknown (blank), excluded |
| Missing | 15 Jul 2026 21:26 | 15 Jul 2026 23:51 | 2.42 | no poll saved; cause not recorded (before 7 November 2026 the poller kept no lasting record of why a poll was missing) |
| Stale | 24 Jul 2026 14:12 | 2 Aug 2026 22:12 | 224.00 | 2,686 polls answered with WAPA's update time more than 30 minutes old (the frozen feed) |
| Stale | 4 Aug 2026 18:47 | 4 Aug 2026 18:47 | 0.00 | 1 poll answered with WAPA's update time more than 30 minutes old |
| Partial | 7 Aug 2026 04:50 | 7 Aug 2026 04:50 | 0.08 | outage records captured, summary not: the poll is absent from polls.csv; its records are in sightings.csv |
| Missing | 7 Aug 2026 05:05 | 7 Aug 2026 05:17 | 0.20 | no poll saved; cause not recorded (before 7 November 2026 the poller kept no lasting record of why a poll was missing) |
| Partial | 7 Aug 2026 05:17 | 7 Aug 2026 05:17 | 0.08 | summary captured, outage records not: district totals unknown (blank), excluded |
| Missing | 7 Aug 2026 22:38 | 7 Aug 2026 22:58 | 0.33 | no poll saved; cause not recorded (before 7 November 2026 the poller kept no lasting record of why a poll was missing) |
| Missing | 8 Aug 2026 01:13 | 8 Aug 2026 01:28 | 0.25 | no poll saved; cause not recorded (before 7 November 2026 the poller kept no lasting record of why a poll was missing) |
| Partial | 28 Aug 2026 23:53 | 28 Aug 2026 23:53 | 0.08 | summary captured, outage records not: district totals unknown (blank), excluded |
| Partial | 28 Aug 2026 23:58 | 28 Aug 2026 23:58 | 0.08 | summary captured, outage records not: district totals unknown (blank), excluded |
| Partial | 29 Aug 2026 00:13 | 29 Aug 2026 00:13 | 0.08 | outage records captured, summary not: the poll is absent from polls.csv; its records are in sightings.csv |
| Partial | 2 Sep 2026 03:28 | 2 Sep 2026 03:28 | 0.08 | outage records captured, summary not: the poll is absent from polls.csv; its records are in sightings.csv |
| Partial | 19 Sep 2026 07:53 | 19 Sep 2026 07:53 | 0.08 | outage records captured, summary not: the poll is absent from polls.csv; its records are in sightings.csv |
| Partial | 4 Oct 2026 05:05 | 4 Oct 2026 05:05 | 0.08 | summary captured, outage records not: district totals unknown (blank), excluded |
| Partial | 8 Oct 2026 13:00 | 8 Oct 2026 13:00 | 0.08 | outage records captured, summary not: the poll is absent from polls.csv; its records are in sightings.csv |
| Missing | 24 Oct 2026 13:21 | 24 Oct 2026 20:46 | 7.42 | 88 polls failed, with errors logged; WAPA said its website and phone reporting were down (The V.I. Consortium, 25 October 2026) |
| Partial | 30 Oct 2026 07:07 | 30 Oct 2026 07:07 | 0.08 | summary captured, outage records not: district totals unknown (blank), excluded |

**Source:** `labeled/holes.csv`, data package v1

**[Our reading]** Where the map is blind, IODA, Georgia Tech’s public monitor of internet reachability, gives a view from outside WAPA (Section 6 explains how it is read; low reachability can corroborate the time of an outage reported by others, never how many customers). Inside the frozen feed, St. Croix’s signal was low from 11:10 p.m. to 11:40 p.m. on 29 July, when WAPA texted that an island-wide outage was affecting all St. Croix customers (11:39 p.m.); on 31 July both islands lost internet routes from 1:50 to 7:40 a.m., the internet disruption the V.I. Department of Labor reported that day, which says nothing about power (St. Thomas’s signal stayed low for 20 minutes after the routes returned). Inside our two long polling gaps, St. Thomas’s signal was low from 11:10 p.m. to 11:20 p.m. on 28 March, as the gap began during an outage the map shows ending there (Section 3), from 8:00 p.m. on 29 March to 7:00 a.m. on 30 March, with short breaks, and from 1:30 p.m. to 6:00 p.m. on 24 October: these match the outages reported then, and WAPA’s own hourly history (above) gives their size. It shows nothing during the 15 July gap (IODA records, not in the package).

## Section 2 The outage burden, by district and month

**[Record]** Over 5,228.5 fresh hours, WAPA’s map shows 5,995,614 customer-hours without power on St. Thomas–St. John and 773,494 on St. Croix: 88.6% of the total on St. Thomas–St. John. Summed directly from the sightings rather than from the daily table, the two come to 773,496 / 5,995,618; the difference is rounding. On the proxy denominators that is about 196 hours without power on the map per St. Thomas–St. John customer and about 31 per St. Croix customer over the covered time. In fresh polls, 1,000 or more customers were out on St. Thomas–St. John 15.5% of the time, and on St. Croix 2.7%.

**Figure 1 — Outage burden by month (March and November are partial; July excludes the frozen feed)**

*[Figure 1 is a chart: see the PDF, page 7.]*

**Source:** `labeled/monthly.csv`, data package v1. March starts on 23 March and November ends on 7 November; July and August leave out the frozen feed, never as zero.

**[Record]** October was the largest month on the St. Thomas–St. John map by every outage measure in the monthly table: 2,292,760 customer-hours, nine days with a quarter or more of the district out at some moment and six with four-fifths or more.

**Table 1 — Customer-hours by month and district**

| Month | District | Hours counted | Customer-hours | Peak out | Hours 1,000+ out | Days ≥25% / ≥80% | Per customer (proxy) |
|---|---|---|---|---|---|---|---|
| Mar 2026 | St. Thomas–St. John | 171.7 | 272,888 | 26,107 | 42.0 | 3 / 1 | 8.93 |
| Mar 2026 | St. Croix | 171.7 | 45,994 | 23,976 | 11.7 | 1 / 1 | 1.83 |
| Apr 2026 | St. Thomas–St. John | 719.9 | 264,630 | 26,109 | 65.5 | 2 / 1 | 8.66 |
| Apr 2026 | St. Croix | 719.9 | 135,391 | 23,997 | 26.5 | 2 / 1 | 5.39 |
| May 2026 | St. Thomas–St. John | 744.0 | 518,713 | 28,464 | 68.3 | 2 / 2 | 16.98 |
| May 2026 | St. Croix | 744.0 | 109,114 | 25,109 | 23.7 | 3 / 1 | 4.34 |
| Jun 2026 | St. Thomas–St. John | 720.0 | 890,111 | 26,805 | 121.2 | 4 / 2 | 29.13 |
| Jun 2026 | St. Croix | 720.0 | 93,545 | 25,109 | 19.8 | 2 / 2 | 3.72 |
| Jul 2026 | St. Thomas–St. John | 564.0 | 816,254 | 28,471 | 81.5 | 7 / 2 | 26.71 |
| Jul 2026 | St. Croix | 564.0 | 48,251 | 5,738 | 6.5 | 0 / 0 | 1.92 |
| Aug 2026 | St. Thomas–St. John | 697.3 | 520,001 | 28,421 | 96.9 | 4 / 1 | 17.02 |
| Aug 2026 | St. Croix | 697.3 | 136,373 | 10,484 | 27.9 | 2 / 0 | 5.42 |
| Sep 2026 | St. Thomas–St. John | 720.0 | 251,435 | 10,707 | 56.4 | 2 / 0 | 8.23 |
| Sep 2026 | St. Croix | 720.0 | 37,164 | 7,697 | 6.9 | 1 / 0 | 1.48 |
| Oct 2026 | St. Thomas–St. John | 736.7 | 2,292,760 | 30,557 | 235.4 | 9 / 6 | 75.03 |
| Oct 2026 | St. Croix | 736.7 | 106,949 | 25,139 | 11.7 | 2 / 2 | 4.25 |
| Nov 2026 | St. Thomas–St. John | 154.9 | 168,822 | 8,890 | 41.8 | 2 / 0 | 5.52 |
| Nov 2026 | St. Croix | 154.9 | 60,713 | 25,142 | 8.0 | 1 / 1 | 2.41 |
| Total | both |  | 6,769,108 |  |  |  |  |

**Source:** `labeled/monthly.csv`, data package v1. Monthly figures are sums of rounded daily rows. Customers served jumped by 4,116 on 14 May 2026, which we read as a reload of WAPA’s customer model (Section 7), so feeder sizes, “% of district” and per-customer figures before and after that date rest on different models.

**Figure 2 — Outage burden per day, by district (each panel has its own scale)**

*[Figure 2 is a chart: see the PDF, page 9.]*

**Source:** `labeled/daily.csv`, data package v1. Hatched: no fresh data (frozen feed or failed polls), never zero. A bar drawn over a hatch is a day with under 12 hours of fresh data (2 August and 7 November): it shows what was captured.

**Figure 3 — Every day on the map: average hours without power per customer**

*[Figure 3 is a chart: see the PDF, page 9.]*

**Source:** `labeled/daily.csv`, data package v1. Average hours without power per customer on the proxy denominators.

## Section 3 District-wide outages

**[Record]** The map shows eight district-wide outages on St. Croix and 14 on St. Thomas–St. John (80% or more of the district’s largest observed outage). St. Croix’s are short on the map, from 5 minutes to 1.3 hours above 80%, and each is made of nine to 11 feeder-sized records, with 11,000 or more customers out for half an hour or longer. On 24 March at 12:04 p.m. the map shows 23,975 out on St. Croix and 42 on St. Thomas–St. John.

**Table 2 — Every district-wide outage on the map**

| District | Start (AST) | End (AST) | Hours above 80% | Span (h) | Peak out | Ends by |
|---|---|---|---|---|---|---|
| St. Croix | 24 Mar 2026 12:04 | 24 Mar 2026 12:24 | 0.33 | 0.33 | 23,976 | a drop on the map |
| St. Croix | 25 Apr 2026 20:01 | 25 Apr 2026 20:26 | 0.42 | 0.42 | 23,997 | a drop on the map |
| St. Croix | 23 May 2026 13:57 | 23 May 2026 14:02 | 0.08 | 0.08 | 25,109 | a drop on the map |
| St. Croix | 6 Jun 2026 09:17 | 6 Jun 2026 09:47 | 0.25 | 0.50 | 25,109 | a drop on the map |
| St. Croix | 10 Jun 2026 02:17 | 10 Jun 2026 02:37 | 0.33 | 0.33 | 22,761 | a drop on the map |
| St. Croix | 7 Oct 2026 12:35 | 7 Oct 2026 12:45 | 0.17 | 0.17 | 24,109 | a drop on the map |
| St. Croix | 27 Oct 2026 10:22 | 27 Oct 2026 11:37 | 1.25 | 1.25 | 25,139 | a drop on the map |
| St. Croix | 7 Nov 2026 08:59 | 7 Nov 2026 10:19 | 1.33 | 1.33 | 25,142 | a drop on the map |
| St. Thomas–St. John | 31 Mar 2026 12:39 | 31 Mar 2026 12:49 | 0.17 | 0.17 | 26,107 | a drop on the map |
| St. Thomas–St. John | 2 Apr 2026 09:29 | 2 Apr 2026 11:29 | 2.00 | 2.00 | 26,109 | a drop on the map |
| St. Thomas–St. John | 30 May 2026 21:52 | 31 May 2026 02:42 | 4.50 | 4.83 | 28,464 | a drop on the map |
| St. Thomas–St. John | 1 Jun 2026 08:37 | 1 Jun 2026 12:42 | 4.08 | 4.08 | 26,805 | a drop on the map |
| St. Thomas–St. John | 2 Jun 2026 19:37 | 2 Jun 2026 20:22 | 0.75 | 0.75 | 25,160 | a drop on the map |
| St. Thomas–St. John | 14 Jul 2026 09:41 | 14 Jul 2026 12:21 | 2.67 | 2.67 | 24,719 | a drop on the map |
| St. Thomas–St. John | 14 Jul 2026 23:56 | 15 Jul 2026 08:31 | 8.58 | 8.58 | 28,471 | a drop on the map |
| St. Thomas–St. John | 11 Aug 2026 02:22 | 11 Aug 2026 08:47 | 6.42 | 6.42 | 28,421 | a drop on the map |
| St. Thomas–St. John | 15 Oct 2026 16:21 | 15 Oct 2026 23:26 | 7.09 | 7.09 | 28,347 | a drop on the map |
| St. Thomas–St. John | 16 Oct 2026 16:31 | 16 Oct 2026 19:46 | 3.25 | 3.25 | 24,737 | a drop on the map |
| St. Thomas–St. John | 21 Oct 2026 19:51 | 21 Oct 2026 21:36 | 1.75 | 1.75 | 26,452 | a drop on the map |
| St. Thomas–St. John | 22 Oct 2026 00:31 | 22 Oct 2026 08:16 | 7.75 | 7.75 | 26,482 | a drop on the map |
| St. Thomas–St. John | 23 Oct 2026 11:01 | 23 Oct 2026 18:46 | 7.67 | 7.75 | 30,557 | a drop on the map |
| St. Thomas–St. John | 24 Oct 2026 13:11 | 24 Oct 2026 13:36 | 0.42 | 0.42 | 28,297 | a gap in our polls |

**Source:** `labeled/events.csv` (class districtwide_80pct), data package v1. “Span” runs from start to end with dips under 30 minutes merged. An event that ends at a gap in our polls shows the end of its last counted interval, at most 15 minutes after the last poll. Every major event (25% or more) is in Appendix A

> Outages the map does not show, or we did not capture

> WAPA declared two further St. Croix island-wide outages that the map does not show at that size: on 30 April the map peaks at 8,043 customers (32% of the district), and on 29 July WAPA’s feed was frozen. Two large outages also fall in stretches with no poll saved. The one WAPA dates to the evening of 29 March is not on the map at all (WAPA’s later hourly history shows up to 26,065 out territory-wide, in its first and final versions). On 24 October the start is on the map and counted (28,297 out from 1:11 p.m., in the table above, ending at the gap), but not what followed: WAPA’s later history shows up to 30,117 out territory-wide.

## Section 4 When outages start, how long they stay, and where

**[Record]** On St. Thomas–St. John, records of 1,000 or more customers cluster in the evening (3 to 8 p.m.) and at 9 a.m.; the 9 a.m. cluster includes the district failures of 31 March and 2 April and some rotation days. St. Croix’s cluster from mid-morning to early afternoon: 118 of its 226 start between 8 a.m. and 2 p.m. by WAPA’s clock.

**Figure 4 — When outages happen: hour of day × day of week (AST)**

*[Figure 4 is a chart: see the PDF, page 12.]*

**Source:** `as-filed/polls.csv`, data package v1.

**[Record]** The median record reaching 100 or more customers stays on the map 1.2 h on St. Croix and 2.3 h on St. Thomas–St. John, from WAPA’s start time to its last sighting (map clearance, not restoration; records open at the first poll or across the frozen feed are left out, and records still open at the last poll are cut off there). Across all records, a record first appears on the map a median 5.5 minutes after the start time WAPA gives it (this includes up to five minutes of our polling interval).

**Figure 5 — How long outages stay on WAPA's map (records reaching 100+ customers)**

*[Figure 5 is a chart: see the PDF, page 12.]*

**Source:** `labeled/records.csv`, data package v1.

**[Record]** WAPA places each record at a map point, and sometimes moves that point before the record leaves the map, so the subdistrict map places each sighting at the point WAPA showed at that poll. Of St. Croix’s customer-hours, 94,178 (12.2%) were mapped more than 1.2 miles (2 km) outside every St. Croix Census subdistrict, most of them in the sea; they are left unplaced rather than moved. Most are feeder-size: 72,391 of those customer-hours are in records of 1,000 or more customers, so the subdistrict map under-represents St. Croix’s largest outages. Placed whole at its final map point instead, each record would put 801,415 customer-hours in Tutu, not 343,711, and Charlotte Amalie, not Northside, would top St. Thomas: a record’s last point is not always where its customers were out.

**Figure 6 — How often each place fell inside an outage area on WAPA's map, 23 Mar – 7 Nov 2026**

*[Figure 6 is a chart: see the PDF, page 13.]*

**Source:** `as-filed/polygons.geojson`, data package v1; U.S. Census Bureau, cb_2023_78_cousub_500k.

**Figure 7 — Customer-hours without power in WAPA's records, by Census subdistrict**

*[Figure 7 is a chart: see the PDF, page 13.]*

**Source:** `labeled/records.csv` and `as-filed/sightings.csv`, data package v1; U.S. Census Bureau, cb_2023_78_cousub_500k.

## Section 5 Load shedding, and totals that did not change

**[Record]** The map shows a rotation-like pattern on 20 days, all on St. Thomas–St. John: three or more waves, more than 45 minutes apart, of 75- to 200-minute records of 1,000 or more customers. That is a pattern, not a stated cause. WAPA or news quoting WAPA names rotations or load shedding on eight of those days; four more fall inside the period WAPA says it ran rotations (19 March to 7 April 2026); on two a generation shortfall is named without rotations, on one only another cause, and on five nothing at all. Repeated trips of one feeder, or staged switching, could make the same pattern. Nor does it find every rotation day: inside WAPA’s stated period it finds the pattern on five of 13 days with 20 or more fresh hours (23 March, a day in the table, had 14.2). The weather tests in Section 10 leave all 20 days out.

**Table 3 — Days with a rotation-like pattern on the map (St. Thomas–St. John)**

| Date | Waves | Records | Wave start times (AST) | What WAPA or news said that day |
|---|---|---|---|---|
| 23 Mar 2026 | 5 | 5 | 09:40 12:00 16:15 17:37 21:40 | rotations or load shedding named |
| 31 Mar 2026 | 4 | 9 | 09:27 15:35 17:43 19:46 | inside WAPA’s stated shedding period |
| 1 Apr 2026 | 4 | 7 | 16:24 17:38 19:40 21:33 | rotations or load shedding named |
| 2 Apr 2026 | 5 | 18 | 09:20 13:34 15:46 17:44 19:33 | inside WAPA’s stated shedding period |
| 3 Apr 2026 | 3 | 3 | 16:42 17:35 19:34 | inside WAPA’s stated shedding period |
| 6 Apr 2026 | 6 | 7 | 09:30 13:33 15:30 17:41 19:30 21:34 | inside WAPA’s stated shedding period |
| 16 May 2026 | 5 | 9 | 00:20 02:17 04:05 06:03 08:06 | nothing stated |
| 31 May 2026 | 7 | 20 | 00:48 07:22 09:44 13:06 15:24 17:24 18:27 | a generation shortfall named |
| 9 Jun 2026 | 3 | 3 | 15:16 17:05 19:03 | rotations or load shedding named |
| 18 Jun 2026 | 5 | 7 | 10:34 12:01 16:07 18:24 20:21 | rotations or load shedding named |
| 22 Jun 2026 | 3 | 4 | 10:12 18:07 20:05 | another cause named |
| 23 Jun 2026 | 7 | 11 | 09:17 12:06 14:02 16:20 18:26 20:00 22:00 | rotations or load shedding named |
| 24 Jun 2026 | 7 | 7 | 10:01 12:00 14:01 16:00 18:13 20:05 22:01 | nothing stated |
| 25 Jun 2026 | 6 | 9 | 10:01 12:00 14:27 16:07 18:00 20:12 | rotations or load shedding named |
| 1 Jul 2026 | 12 | 19 | 05:15 08:08 09:28 11:01 13:09 15:14 16:25 17:14 18:32 19:20 21:17 23:30 | nothing stated |
| 2 Jul 2026 | 8 | 12 | 07:08 09:10 11:19 13:04 15:10 17:15 21:03 23:00 | rotations or load shedding named |
| 6 Oct 2026 | 4 | 4 | 01:05 15:07 17:09 19:24 | nothing stated |
| 21 Oct 2026 | 3 | 11 | 14:59 17:05 19:35 | a generation shortfall named |
| 26 Oct 2026 | 6 | 7 | 11:01 12:38 14:48 16:50 19:23 20:47 | rotations or load shedding named |
| 27 Oct 2026 | 6 | 8 | 10:37 12:30 15:13 16:36 18:28 20:29 | nothing stated |

**Source:** `labeled/rotation_days.csv` and `labeled/stated_causes.csv`, data package v1

**[Record]** A district total sometimes stays at one exact value for hours while WAPA’s update clock keeps moving: 32 times on St. Thomas–St. John and three on St. Croix (3 hours or more at 1,000 or more customers, every poll fresh). That is a pattern, not a finding. A large outage that has not yet been restored, planned work, or a plant down overnight produces exactly the same flat line, and such outages happen in the territory. During 23 of the 35 runs no outage record in the district carries a WAPA edit time inside the run (up to five minutes before its end); that alone cannot say whether the grid stood still or the map was not being updated, and two of those runs still show a record replaced or re-stamped.

**[Record]** WAPA’s own hourly history adds a second view, with a caution. WAPA publishes a 48-hour history and later rewrites it. The rewritten value for an hour matches none of the three statistics of that hour’s map readings we checked: it is within 3 customers of the hour’s lowest reading in 963 of 5,225 well-covered hours, of its last reading in 890 and of its median in 808. WAPA does not publish how it is computed, so it is WAPA’s later reconstruction, not a check on the map. Its values for the full hours inside each run are compared with the run (the history covers the whole territory, so the other district’s live count is subtracted). In 12 runs its median is within 10% of the map: among them 10,668 customers for 8.3 hours on 13 September, the day of a planned outage, and 26,482 for 7.5 hours on the morning of 22 October. A median is not every hour: in three of those runs (25–26 March, 15 May, 22 August) WAPA’s history falls to almost nothing partway through while the map held, and in the 22 October morning run it is about 10% lower for two hours; eight agree in every full hour. In 13 runs, every one of 2,447 customers or fewer, WAPA’s later history counts almost none of those customers at the median (nine of them in every full hour): the live map and WAPA’s own later figures disagree, for a reason WAPA has not given. In four runs the history is lower than the map, in two higher, and in four the other district had too many out to split the territory figure. Appendix C lists every run.

**[Record]** The longest run held 22,119 customers for 23.6 hours from 22 October 2026 at 11:21 a.m., with no district record edited after 12:04 p.m. WAPA’s later history for those hours is lower, 19,095 at the median (a district estimate), but shows a large outage throughout. IODA, Georgia Tech’s public monitor of internet reachability, is a check from outside WAPA, but a coarse one: when the map shows a district mostly out, IODA’s signal for that island is almost always low (18 of the 22 district-wide outages; the other four lasted under an hour), but it cannot size an outage, and it also falls on days when the map shows no large outage. Through this run St. Thomas stayed at 60 to 96% of its normal level, never in its normal range in 141 ten-minute readings: consistent with a large outage, not with any particular size. In the other flat runs of 20,000 customers or more it never reached its normal range; in the last hour and a half of the 15 October run it was back at 85 to 94% while the map still held 28,347 (IODA records, not in the package). Twice, during a run, WAPA announced feeder restorations that the map did not show (15 and 22 October); they are among the misses in Section 6.

**Table 4 — The twelve longest flat runs, and what WAPA’s own data says**

| District | Start (AST) | Hours | Customers out | Records edited | WAPA’s later history |
|---|---|---|---|---|---|
| St. Thomas–St. John | 22 Oct 2026 11:21 | 23.6 | 22,119 | 4 | lower (about 19,095) |
| St. Thomas–St. John | 14 Sep 2026 20:18 | 10.6 | 1,037 | 0 | counts almost none of it (12 out territory-wide) |
| St. Thomas–St. John | 4 Nov 2026 21:43 | 10.0 | 1,816 | 0 | counts almost none of it (103 out territory-wide) |
| St. Thomas–St. John | 29 Aug 2026 00:08 | 8.6 | 1,598 | 0 | counts almost none of it (11 out territory-wide) |
| St. Thomas–St. John | 15 Jul 2026 00:01 | 8.3 | 28,471 | 3 | lower (about 17,238) |
| St. Thomas–St. John | 13 Sep 2026 11:43 | 8.3 | 10,668 | 3 | about the same at the median (about 10,664) |
| St. Thomas–St. John | 19 Oct 2026 22:56 | 8.3 | 2,031 | 0 | counts almost none of it (35 out territory-wide) |
| St. Thomas–St. John | 7 May 2026 00:37 | 8.0 | 3,044 | 2 | higher (about 3,492) |
| St. Thomas–St. John | 23 Oct 2026 23:56 | 8.0 | 16,223 | 0 | lower (about 9,233) |
| St. Thomas–St. John | 18 Oct 2026 00:26 | 7.8 | 2,094 | 0 | counts almost none of it (44 out territory-wide) |
| St. Thomas–St. John | 14 Jul 2026 00:05 | 7.7 | 15,867 | 13 | about the same at the median (about 14,889) |
| St. Thomas–St. John | 22 Oct 2026 00:41 | 7.5 | 26,482 | 0 | about the same at the median (about 26,177) |

**Source:** `labeled/flat_runs.csv`, data package v1 (all 35 in Appendix C). “Records edited”: district records whose WAPA modified time falls inside the run. “WAPA’s later history”: median over the run’s full hours of WAPA’s rewritten hourly value, less the median of the other district’s live count (for an even number of hours, the upper of the two middle values). “Records edited” counts WAPA modified times from the run’s start to five minutes before its end.

## Section 6 The map against what WAPA and the news reported

**[Our reading]** We set the map against 174 statements: WAPA ALERT messages (23), WAPA releases and notices (67), news quoting WAPA (58), other news (21), testimony (1) and broadcast captions (four). They are of two kinds, kept apart. Of the 174, 87 report an event as having happened (an outage began, power was restored) or give WAPA’s own estimate, and 87 announce a plan: a scheduled outage, a rotation slot or a scheduled end. A report can agree or disagree with the map. An announcement mostly cannot: for a plan, the map is usually the only evidence that it ran, so when the map moves the plan “matches” and when it does not the plan may simply not have run. Announcements are therefore described, never scored.

> The rule

> A script first put a time window and an expected size on each statement. Every row was then read and judged by one rule: a miss needs the event tested to have happened. A reported restoration with a clock time is consistent when, within 40 minutes, the map clears half the customers still out at the reported time (the customers the statement covers: the named feeders where it names them, otherwise the district), a miss when it has not within 50, and unresolved between; “by” a time, and “as of” a time for named feeders, are read as by then, and a restoration of named feeders is tested on those feeders where the map shows them. Rows from copies or sources we could not verify, and broadcast captions, are listed in the package but not judged. The groups below are editorial labels, not independent trials, and never a miss rate.

**Table 5 — Reports of events, judged against the map**

| Judged verdict | Reports |
|---|---|
| MATCH | 42 |
| ALREADY-OUT | 8 |
| MISS | 6 |
| UNRESOLVED | 10 |
| NOT TESTABLE | 6 |
| NOT APPLICABLE | 15 |
| Total | 87 |

**Source:** `labeled/semi_known_tests.csv` (statement_class report; adjudicated_verdict), data package v1

**[Our reading]** Grouped by incident and counting reports only, 22 incidents are consistent with the map, one has a miss and nothing else, five carry both a match and a miss, six are partly open and two open; in four every report was set aside, and 27 hold only announcements (Appendix B lists every one). All six remaining misses are events reported by WAPA or by news reports of WAPA’s statements: restorations the map showed late (about one to nine hours), named feeders that stayed on the map after WAPA said they were back, and outages the map showed far too small.

**Table 6 — The remaining misses**

| Date | What was reported | What the map shows | Source |
|---|---|---|---|
| 30 Apr 2026 | “The first public alert came at 11:29 a.m., when WAPA said there was a districtwide outage” (St. Croix) | With fresh polls, St. Croix rose only from 6,562 to 7,514 customers out by 12:17 p.m.; the day’s peak was 8,043, about a third of the district. IODA, Georgia Tech’s internet-reachability monitor (not in the package), shows St. Croix at 43 to 61% of its normal level from 10:30 a.m. to 1 p.m.; readings that low also occur without a large outage, so this corroborates a loss at that time, not its size. | [R] The V.I. Consortium, 30 April 2026 |
| 11 Aug 2026 | “helped safely restore service to the community this morning at approximately 7:51 a.m.” (11 August) | 25,154 customers stayed on the map until 8:42 a.m., and 33 at 9:02 a.m.: the map cleared about an hour after WAPA’s 7:51 a.m. IODA, Georgia Tech’s internet-reachability monitor (not in the package), shows St. Thomas back in its normal range at 8 a.m.; when the map shows 20,000 or more out there, IODA reads 91% of normal or less in nine of ten readings. | [C] WAPA release, 11 August 2026 |
| 7 Oct 2026 | “Power has been restored to all impacted feeders as of 1:12 pm” (St. Croix) | 15,961 to 16,079 customers were out until 1:25 p.m., about 11,960 until 2:20 p.m. and 81 at 2:30 p.m.: the map cleared about 1 hour 15 minutes after WAPA’s 1:12 p.m. IODA, Georgia Tech’s internet-reachability monitor (not in the package), shows St. Croix in its normal range at 1:30 p.m., just below it from 1:40 to 2:10 p.m. and back in it from 2:20 p.m., a signal resting on only about 42 probed address blocks. | [C] WAPA ALERT message, received 7 October 2026, 1:17 p.m. |
| 15 Oct 2026 | “The utility reported progress at 8:20 p.m., announcing that feeders 5A, 7A, 9C, 12 and 13 had been restored.” | Feeder 07A (3,054 customers), one of the feeders WAPA named, stayed on the map until 11:31 p.m., three hours after WAPA reported it restored by 8:20 p.m.; the St. Thomas–St. John total held at exactly 28,347 from 6:01 to 11:16 p.m. WAPA’s own hourly history, as WAPA later rewrote it (a reconstruction of unpublished method), falls through the evening: 17,836 out territory-wide in the 8 p.m. hour, 5,724 at 9 p.m. and 11 at 11 p.m. The miss is the map against WAPA’s notice, not proof of when each feeder came back. | [R] The V.I. Consortium, 16 October 2026 |
| 22 Oct 2026 | “feeders 5A, 7A, 8B, 9B, 7B, 7C and 9E, along with the Brookman Road portion of feeder 9C, had been restored as of 10:45 p.m. Thursday” | Feeder 09E (2,257 customers), one of the feeders WAPA named, stayed on the map past 10:45 p.m. and into 24 October; the district total held at 22,119 from 11:21 a.m. on 22 October to 10:56 a.m. on 23 October. WAPA’s later hourly history (its method not published) is about 3,000 below the map from the 8 p.m. hour and shows no large fall at 10:45 p.m. either, so how many were restored then is not established. | [R] The V.I. Consortium, 23 October 2026, reporting WAPA’s 11:15 p.m. notice |
| 1 Nov 2026 | “WAPA line crews completed pole repairs affecting customers on 6B at 7:17 AM., and power has been restored.” (St. Croix Feeder 6B, about 492 customers) | 511 customers stayed out on the map from 6:47 a.m. until 4:07 p.m. (Feeder 6B’s record, 492 of them), nearly nine hours after WAPA’s 7:17 a.m. restoration. | [C] WAPA ALERT messages, received 1 November 2026, 7:10 and 7:57 a.m. |

**Source:** `labeled/semi_known_tests.csv`, data package v1 (each row’s full reason and link); times AST

**[Our reading]** A miss records that the map and a report disagree; it does not by itself say which was wrong. As a check from outside WAPA, applied the same way to matches and misses, we read IODA beside every judged report large enough for it to see: 15,000 customers on St. Croix and 20,000 on St. Thomas–St. John, the sizes at which its signal is typically low, counting a report as large enough when either the size it states (or our estimate of it) or the map’s own peak in the report’s test window reaches that size. An outage counts as seen if at least one usable IODA reading from 30 minutes before to an hour after the reported time is low; a restoration if IODA was low or mixed in the two hours before and at least one reading within 40 minutes after is back in its normal range, the map’s own timing rule. A restoration WAPA reported for only part of a district is not scored, because part of an island coming back need not bring the whole island’s signal back to normal (two such reports, both misses). Of the 15 matches it can score, it agrees with all; of the three misses it can score, it supports all three (30 April, 11 August and 7 October). This is a selected comparison, not an independent test of the map: the bands and the size gate are calibrated on the map itself (leaving every tested date out of that calibration changes none of these readings). A low IODA reading corroborates a time, not a size (IODA records, not in the package).

> How IODA is read

> IODA’s active probing counts, every 10 minutes, the blocks of internet addresses on each island that answer (about 128 on St. Thomas, 42 on St. Croix). We divide each reading by the island’s trailing seven-day 90th percentile. “Normal” is at or above the reading that 90% of readings exceed when the map shows under 500 out; “low” is at or below the midpoint between that and the median when the map shows 20,000 or more (both computed at full precision). Readings are set aside as unusable for power when the island’s internet routes vanish (IODA’s routing signal below 90% of normal: 31 July, a day on 21 August when half of St. Thomas’s routes dropped, and shorter spells, among them 31 March from 8:40 to 11:40 a.m., which spans WAPA’s Unit 15 trip at 9:25) or when both islands fall below 10% at once; a power loss can coincide with either, so these readings neither support nor contradict anything. Routing stayed at 97% of normal or more through all 22 district-wide outages. Generators and batteries still move the signal, so it is a check on timing and on large outages only.

**Table 7 — Announcements: what the map shows**

| What the map shows | Announcements |
|---|---|
| on the map at the announced time | 14 |
| on the map, but not as announced (time, size or place) | 4 |
| not seen on the map | 32 |
| cleared by the planned end | 6 |
| still on the map after the planned end | 7 |
| job never seen on the map | 4 |
| no outage appeared | 7 |
| district already out at the time | 2 |
| not testable | 1 |
| not applicable (canceled, postponed, or a defective test) | 10 |
| Total | 87 |

**Source:** `labeled/semi_known_tests.csv` (statement_class announcement; outcome_plain), data package v1. Not scores: whether a plan ran usually rests on the map alone

**[Our reading]** Seven times the map still showed a planned outage after its scheduled end. For two of them (14 July and 13 September) WAPA itself later said the work ran past its window, so there the map agreed with WAPA’s account; for the other five no source says when the work actually ended, so these are not misses, but WAPA can say. Rotation slots: 18 slots announced for four days rest on evidence that the day’s schedule partly ran (other slots, or other rotation records, on the map). In 12 of them nothing moved on the map at the slot’s time. That is a real feature of the record, but nothing shows those slots ran, so they are counted as slots not seen, never as misses; WAPA can say which ran. On 7 April the last wave on the map was Feeder 7A (3,281 customers), gone by 11:59 a.m.; WAPA said rotations were suspended at about 4:30 p.m. That is when WAPA stopped the schedule, not a time customers regained power, so it is described here, not scored.

## Section 7 What WAPA’s map does not record

- **[Record]** **No restoration estimates, crew or work status.** In every record of the raw responses the restoration-estimate field is empty, the crew field reads false and the work-status field is blank (released separately; the package keeps these columns as filed).

- **[Record]** **Records are rarely closed.** Of 7,433 records, 24 ever carry an end time; a record ends when it leaves the map.

- **[Record]** **Causes are rarely given.** Of 7,433 records, 574 carry a cause code.

- **[Record]** **WAPA rewrites its 48-hour history.** As first published, an hour’s value is the map’s total at the poll that first carried that hour, in effect a snapshot near the start of the hour: within 3 customers in 5,214 of 5,370 hours (after a gap in our polls, the first value we captured need not be the first WAPA published). Later versions change 16.5% of hours by 1,000 customers or more (520 of those 888 hours downward). Why is not known: the rewritten value matches none of the three statistics of the hour’s map readings we checked (Section 5). The package keeps both values for every hour.

- **[Our reading]** **The customer model changed.** Customers served, as WAPA’s map reports it, rose by 4,116 between 11:42 and 11:47 a.m. on 14 May 2026, which we read as a reload of WAPA’s customer model: feeder sizes before and after differ, and feeders are also re-switched day to day.

- **[Our reading]** **Records are reissued.** WAPA sometimes reissues a continuing outage under a new record ID. A written rule (same district, the identical start time to the second, first seen within 30 minutes of the earlier record’s last sighting, the same name or customer count, never overlapping) joins the 7,433 records into 7,348 episodes; the package lists every link and its evidence.

## Section 8 What WAPA said caused the outages

**[Our reading]** Each day of the record is labeled by the highest-ranked cause stated for it by WAPA, by news quoting WAPA or, on a few days, by other news (155 statements, each quoted exactly in `labeled/stated_causes.csv`): a fuel-system failure, then generation, then planned work, then equipment, vehicles, trees, weather or other, then “under investigation”, then nothing stated. The label describes the day, not every outage in it.

**Table 8 — Share of each district’s customer-hours, by what was said that day**

| Day label | St. Thomas–St. John days | St. Thomas–St. John share | St. Croix days | St. Croix share |
|---|---|---|---|---|
| Fuel-system failure | 1 | 2.9% | 0 | 0.0% |
| Generation | 29 | 62.2% | 3 | 15.9% |
| Planned work | 6 | 4.7% | 12 | 8.0% |
| Equipment, vehicle, trees, weather, other | 3 | 1.1% | 11 | 6.0% |
| Under investigation | 0 | 0.0% | 2 | 2.6% |
| Nothing stated | 182 | 29.0% | 193 | 67.5% |
| Total | 221 | 100.0% | 221 | 100.0% |

**Source:** `labeled/daily.csv`, `labeled/stated_causes.csv`, `labeled/fuel_reading.csv`, data package v1

**Figure 8 — What was said about each day's outages**

*[Figure 8 is a chart: see the PDF, page 22.]*

**Source:** `labeled/daily.csv`, `labeled/stated_causes.csv` and `labeled/fuel_reading.csv`, data package v1.

**[Record]** WAPA’s chief executive, Karl Knight, testified to the Committee of the Whole of the Legislature of the Virgin Islands on 9 April 2026 about the St. Thomas–St. John shortfall that began on 19 March:

> There were three successful restarts of Unit 15 during this outage event, but the Unit performed erratically and, in each case, failed to stay online for longer than 24 hours.

Testimony of Karl Knight, Committee of the Whole, 9 April 2026, [LF-2ceb08dd34d3](https://usvipublicrecords.com/doc?id=LF-2ceb08dd34d3)

**[Record]** The same testimony describes load shedding caused by the transmission system, not generation: when Feeder 13 trips, the remaining feeder cannot carry the load and WAPA sheds it through rotations (5 February 2026). A rotation day on the map is therefore not, by itself, a generation shortfall. Government House reported on 30 March that Unit 15 had briefly returned to service before a separate electrical problem ([LF-c0a7c51ca152](https://usvipublicrecords.com/doc?id=LF-c0a7c51ca152)), and on 24 March that rotations would continue while demand at times exceeded available generation by about 5 megawatts ([LF-761392683fe6](https://usvipublicrecords.com/doc?id=LF-761392683fe6)).

> Outages with no stated cause

> Five of St. Croix’s island-wide outages (24 March, 23 May, 6 June, 10 June and 7 November) have no cause stated by WAPA or the news in anything we hold; on three of them (24 March, 6 June, 10 June) some of the map’s own records carry WAPA’s generic code “000 Power supply”, which names no cause. Across the record, 67.5% of St. Croix’s customer-hours fall on days with nothing stated.

## Section 9 Fuel: what WAPA said

**[Our reading]** Fuel is kept as its own category. Every sentence about fuel in WAPA’s releases and the news we harvested was read, and each that does one of four things is listed: denies a fuel shortage or inventory problem, acknowledges that fuel inventory fell short of the level WAPA wanted, reports a delivery delay, or reports a failure that cut fuel to the plant. WAPA or its officials denied a fuel shortage or inventory problem on 11 dates, and acknowledged a shortfall in its light fuel oil (diesel) inventory on two (13 July and 20 October). None of these statements links fuel to a particular outage. A delay, a denial or an acknowledgment does not move a day’s cause label; only a stated failure that cut fuel to the plant does, and WAPA stated one, on 11 August 2026, which holds 2.9% of St. Thomas–St. John’s customer-hours.

**Table 9 — Every fuel statement read**

| Date | Reading | Who | Exact words | Where |
|---|---|---|---|---|
| 23 Mar 2026 | Denial | Karl Knight (reported) | “not financial or fuel supply issues” | [R] St. Thomas Source |
| 26 Mar 2026 | Denial | Karl Knight (quoted) | “We have not had a fuel shortage issue” | [R] St. Thomas Source |
| 1 Jun 2026 | Denial | WAPA release | “fuel availability is not the cause of the current disruption” | [C] WAPA release |
| 2 Jun 2026 | Denial | Karl Knight (reported) | “Knight dispelled rumors that a fuel shortage was behind the outage” | [R] The V.I. Consortium |
| 2 Jul 2026 | Denial | WAPA release | “this is not a fuel inventory or payment issue” | [C] WAPA release |
| 13 Jul 2026 | Inventory shortfall acknowledged | Kevin Harrigan (WAPA plant superintendent; reported) | “the utility is struggling to maintain its light fuel oil inventory” | [R] St. Thomas Source |
| 14 Jul 2026 | Delivery delay | WAPA release | “has experienced transportation delays that have temporarily limited diesel deliveries” | [C] WAPA release |
| 17 Jul 2026 | Denial | WAPA release | “not a lack of available fuel” | [C] WAPA release |
| 17 Jul 2026 | Denial | WAPA release | “has not experienced a fuel-related service interruption since 2024” | [C] WAPA release |
| 11 Aug 2026 | Fuel-system failure | WAPA release | “interrupting the supply of fuel to Randolph Harley Power Plant” | [C] WAPA release |
| 11 Aug 2026 | Denial | WAPA release | “The issue was loss of supply to the generators, not fuel inventory” | [C] WAPA release |
| 12 Aug 2026 | Denial | Karl Knight (reported) | “recent outages were tied to a failing valve at the propane terminal, rather than a fuel shortage” | [R] St. Thomas Source |
| 19 Oct 2026 | Denial | Shanell Spencer (WAPA director of corporate communications; quoted at a Senate committee) | “We do not have any fuel shortages at this time” | [R] St. Thomas Source |
| 20 Oct 2026 | Inventory shortfall acknowledged | Karl Knight (quoted) | “we have been unable to maintain the level of inventory that we are seeking to maintain on LFO” | [R] St. Thomas Source |
| 25 Oct 2026 | Denial | WAPA (reported) | “WAPA said the outage was not related to fuel inventory” | [R] The V.I. Consortium |
| 26 Oct 2026 | Delivery delay | Karl Knight (reported) | “acknowledging that a shipment from San Juan, Puerto Rico, arrived later than expected” | [R] The V.I. Consortium |
| 26 Oct 2026 | Denial | Karl Knight (reported) | “addressed speculation that the recent electricity disruptions were connected to fuel shortages, rejecting those claims” | [R] The V.I. Consortium |

**Source:** `labeled/fuel_reading.csv`, data package v1; each sentence checked against the article or release

**[Record]** WAPA told the Legislature that its fuel costs in FY2026 exceeded $146 million, and listed liquefied petroleum gas at $0.484 a gallon in FY2019 and $0.703 in FY2026, and diesel at $1.883 and $3.293 ([LF-af7b1a976499](https://usvipublicrecords.com/doc?id=LF-af7b1a976499)).

## Section 10 Weather alongside the map

**[Our reading]** We set the outage starts against the wind and heat measured at each district’s airport (NOAA reports for Henry E. Rohlsen, St. Croix, and Cyril E. King, St. Thomas), with tide-station wind where the airport has none. These tests were run one after another, each prompted by the one before, so every weather result is exploratory. Every test leaves out, for St. Thomas–St. John, the 20 days with a rotation-like pattern (Section 5; St. Croix has none), because rotations start outages on a schedule; the pattern is not a stated cause, so a day wrongly flagged is wrongly left out.

**Figure 9 — Outage starts per 100 hours, by wind speed (records reaching 100+ customers)**

*[Figure 9 is a chart: see the PDF, page 25.]*

**Source:** `labeled/records.csv`, `as-filed/polls.csv`, `as-filed/asos`, `as-filed/coops`, data package v1.

**Table 10 — What the weather tests show**

| Test | St. Croix | St. Thomas–St. John | Reading |
|---|---|---|---|
| Outage starts per 100 fresh hours, under 10 knots / 30 knots and up | 6.78 / 18.67 | in the chart | raw rates |
| 30 knots and up, day and hour of day held fixed (hours with any start; O/E, 95% interval) | 1.68 [1.16-2.70] | 1.75 [1.21-2.30] | leans up on both islands; too few hours to establish |
| 25 knots and up, day held fixed only (O/E) | 1.73 | — | superseded: most of it is the time of day |
| 25 knots and up, day and hour held fixed (O/E, simulated p) | 1.18 / about 0.08 | — | not established |
| Hotter vs cooler days within each month (starts per 24 hours; p) | -0.27 / 0.7049 | -0.20 | no positive link found |

**Source:** the data package: `reproduce.py` recomputes each figure but the simulated p-values, which the package README lists; the method is in this section

**[Our reading]** The 30-knot results rest on 10 start-hours on St. Croix and six on St. Thomas–St. John, each on five days; no single day deleted reverses them. Heat is measured as the highest heat index in the day’s available airport reports. No tropical storm passed near the islands: the nearest system, Dolly, passed about 44 miles (71 km) away on 30 August at about 30 knots, below tropical-storm strength, and no tropical watch or warning was issued for the islands (National Hurricane Center and National Weather Service records, not in the package). None of this names a cause, and an airport’s wind stands in for the whole district.

## Section 11 Costs: official figures only

**[Record]** No official figure for the cost of these outages to customers or the economy exists in any record we hold, and this report does not estimate one. These are the official figures that bear on WAPA’s fuel and rebuilding:

**Table 11 — Official figures**

| What | Figure | As stated by |
|---|---|---|
| Fuel-charge (LEAC) revenue, fuel costs and the deficit, FY2021–FY2025 | $639M / $766M / $147M | [Legislature Post Audit Division, FY2026 WAPA analysis](https://usvipublicrecords.com/doc?id=LF-6e02fd648a12) |
| Fuel costs, FY2026 (actual) | $146M (exceeded) | [WAPA, Senate budget testimony, 12 August 2026](https://usvipublicrecords.com/doc?id=LF-af7b1a976499) |
| St. Croix Richmond power generation units (FEMA): project cost / federal share obligated / disbursed, 30 June 2026 | $674,642,577 / $661,149,725 / $0 | [Post Audit Division, FY2027 WAPA analysis, Appendix III](https://usvipublicrecords.com/doc?id=LF-266a148fdab5) |
| Harley plant emergency repairs (FEMA): federal share obligated / disbursed, 30 June 2026 | $206,021,561 / $9,077,828 | [same, Appendix III](https://usvipublicrecords.com/doc?id=LF-266a148fdab5) |
| All funding in the Post Audit’s listing (federal, GVI, Senate; electric and water): obligated / disbursed, 30 June 2026 | $5,476,108,576 / $1,576,783,872 | [same, Appendix III](https://usvipublicrecords.com/doc?id=LF-266a148fdab5) |

**Source:** the documents linked, read at the source; the Post Audit’s rounded FY2021–FY2025 figures subtract to about $127 million against its own $147 million, unreconciled in the document

**[Record]** The Public Services Commission told the Legislature, of its electrical rate investigation: “because WAPA has failed to timely satisfy its statutory assessment obligations, the Commission has been unable to continue this investigation” ([LF-632080e2d7f7](https://usvipublicrecords.com/doc?id=LF-632080e2d7f7)).

## Section 12 What we tested and ruled out

**[Our reading]** Every idea tested against the record is listed, so nothing tested is dropped quietly. Verdicts: RULED OUT (the data contradict it), NOT SUPPORTED (no effect found, which is not proof of none), NOT ESTABLISHED (a direction seen, too weak to claim), CANNOT TEST, RECORDED, OPEN.

**Table 12 — Weather and the earth**

| # | Idea tested | What came back | Verdict |
|---|---|---|---|
| W1 | Wind and rain raise outage rates (hour-level rate ratios) | Ratios above 1 (St. Croix gust ≥ 30 knots about 4.3×; rain hours about 1.5–1.7×), but every interval crosses 1 once days are resampled | NOT ESTABLISHED |
| W2 | St. Croix outages start in the hour of or after a gust ≥ 25 knots ("1.7 times") | Falls to 1.18 (p = 0.08): trade wind and St. Croix's outage starts both peak mid-morning to midday | NOT ESTABLISHED |
| W3 | Outages rise steadily with wind speed (dose-response) | No trend (St. Croix p = 0.59; St. Thomas–St. John p = 0.18). Only 30 knots and up stays above expectation on both islands: hours with any start St. Croix 1.68 (interval 1.16–2.70, 10 start-hours), St. Thomas–St. John 1.75 (1.21–2.30, 6 start-hours) — consistent, too few hours to establish | NOT ESTABLISHED (leans up at ≥ 30 knots) |
| W4 | Rain triggers outages | St. Croix 0.88, St. Thomas–St. John 1.05 — the hour-level rain ratio was rainy DAYS, not rain hours | NOT SUPPORTED (no within-day effect found; a small effect cannot be excluded) |
| W5 | Thunder triggers outages | St. Croix 2.12 on 15 days (p = 0.15); ≥ 1,000 customers 0.80 | NOT ESTABLISHED |
| W6 | Earthquakes trigger outages (St. Thomas–St. John "2.8×") | 2.8× with rotation days, 0.69× without: quakes happened to fall on load-shedding days | NOT SUPPORTED (no effect once load-shedding days are set aside; the result rests on the rotation-pattern detector) |
| W7 | Hot days strain generation (heat and demand) | Days need temperature reports in ≥ 18 distinct hours including the afternoon (a stricter rule adopted after outside review): St. Croix −0.27 starts per 24 h (p = 0.70), St. Thomas–St. John −0.20 (p = 0.62); under the earlier ≥ 18-reports rule St. Croix was −0.14 (p = 0.62); highest cell of the 2×2 is cool and calm. Under an outside reviewer's eligibility (positive-coverage days, ties dropped) St. Croix's sign flips without the partial 7 November day | NOT SUPPORTED (no effect found; not evidence of no effect) |
| W8 | Calm days carry more outages | St. Croix +0.78 (p = 0.05), St. Thomas–St. John +1.08 (p = 0.04); secondary test, unexplained | NOT ESTABLISHED |
| W9 | …and that calm-day pattern is an airport station losing power on outage days (missing reports → lower peak wind) | Days with missing reports carry FEWER starts, not more | RULED OUT (as the explanation) |
| W10 | A tropical storm drove any of it | Only Dolly came within 44 miles (71 km) (about 30 knots, 30 Aug); no tropical watch or warning issued for the islands | RULED OUT |
| W11 | The gust join was right | 98 of 747 peaks (airport files 1 Mar – 7 Nov; 69 of 533 within the capture) occurred in an earlier clock hour than the report carrying them (97 one hour earlier; one, before the capture, as parsed a day earlier) and had been filed under the report's hour; fixed and every weather test re-run | RULED OUT |
| W12 | An airport report with no wind group means calm air | It is a silence: reading it as 0 knots put 199 unmeasured St. Thomas hours (and 1 St. Croix hour) in the calm band and blocked the tide-station fallback; 0.1-kt rounding moved 7 hours across a band edge. Fixed; every weather test re-run | RULED OUT |
| W13 | St. Thomas outages of 1,000+ customers jump at 15–19 knots (look 3b: 1.50, p = 0.0010 — would survive a 24-test correction) | Interval 0.80–2.08; hours version 1.07; the band above runs the other way (0.52). One plant trip opens many feeder records in the same hour, and the simulation had counted each as independent | RULED OUT (record clustering); the simulation's p-values are not used without the interval |

**Source:** VI Update’s register of every test run on the record. Results computed from the package’s tables are checked by `reproduce.py` only where its claim list names them

**Table 13 — Generation, fuel and load shedding**

| # | Idea tested | What came back | Verdict |
|---|---|---|---|
| G1 | A rotation day on the map = a generation shortfall | WAPA also sheds load when Feeder 13 trips (transmission, 5 Feb) | RULED OUT (as an equation) |
| G2 | The rotation detector finds every load-shedding day | Inside WAPA’s stated load-shedding period (19 March to 7 April), it flags 5 of 13 well-covered days. Not every day in that period need have had rotations, and the detector can flag other patterns, so this is a description, not a measured rate. | RULED OUT (it does not find every such day) |
| G3 | The 18 Jun – 2 Jul rotation days were only the Feeder 13 bypass work | Generation causes stated on 23 Jun, 25 Jun and 2 Jul; nothing stated on 24 Jun, 1 Jul | RULED OUT (not only planned work) |
| G4 | WAPA’s district-wide Unit 15 trips are missing from the record | None on the map from 23 to 30 March: no poll was saved from 28 March, 11:04 p.m., to 30 March, 9:49 a.m., and the cause was not recorded. WAPA’s own hourly history, a later reconstruction, holds 26,064 out territory-wide every hour from 29 March, 9 p.m., to 30 March, 4 a.m., consistent with a large outage then. WAPA’s chief executive testified to three restarts of Unit 15 without dating them, so which trips fall in the gap is not known. | CANNOT TEST on the map (the 29 March onset falls in a gap; the other restarts are undated) |
| G5 | Fuel shortages caused the outages | WAPA or its officials denied a fuel shortage or inventory problem on 11 dates and acknowledged a light fuel oil inventory shortfall on two (13 Jul, 20 Oct); WAPA named a fuel-SYSTEM failure once (11 Aug, propane terminal shutdown cut fuel to the plant) and a delivery delay twice (14 Jul — a rotation schedule WAPA says it never implemented; 26 Oct). The map cannot see fuel inventory | CANNOT TEST (inventory) · stated causes recorded as they are |
| G7 | St. Croix's island-wide outages have a stated cause | 24 Mar, 23 May, 6 Jun, 10 Jun and 7 Nov: nothing stated anywhere we hold | OPEN (asks to WAPA) |
| G8 | St. Croix's short island-wide events (0.1–0.4 h above 80%) are one-poll glitches | Real: 9–11 feeder-sized records each, 11,000–25,000 out for half an hour to nearly two hours | RULED OUT |
| G9 | The worst St. Thomas–St. John days are clean measurements | 22 and 23 October are mostly time in which the district total did not change (31.1 hours of flat runs starting 22 October). WAPA’s own hourly history, as WAPA later rewrote it, shows a large outage throughout: 26,177 against the map’s 26,482 for the morning run and 19,095 against 22,119 for the 23.6-hour run (district estimates, Appendix C). A large outage throughout is supported; the exact count is not. | NOT ESTABLISHED: both WAPA accounts show a large outage, but WAPA’s reconstruction is lower and its method unpublished, so neither confirms the live count |

**Source:** VI Update’s register of every test run on the record. Results computed from the package’s tables are checked by `reproduce.py` only where its claim list names them

**Table 14 — The record itself**

| # | Idea tested | What came back | Verdict |
|---|---|---|---|
| R1 | Districts can be split at latitude 18.0 | Misfiled 34 St. Croix records (24 Mar – 7 May); St. Croix feeder points sit north of 18.0 | RULED OUT (fixed in the build tool and analyses) |
| R2 | A poll with one endpoint missing shows zero outage | 12 partial polls; now blank everywhere, never zero | RULED OUT |
| R3 | The summary total and the sum of records are two sources | One source (WAPA's two endpoints of one system) | RULED OUT (as independent) |
| R4 | WAPA's hourly history is what the map showed | WAPA rewrites it after the hour | RULED OUT |
| R5 | A failed poll means WAPA’s API or the island’s internet was down | Before 7 November 2026 the cause of most failed polls was not recorded (on 24 October errors were logged, and WAPA said its website and phone reporting were down). A failed poll shows only that no response was saved; it does not say whether WAPA’s server or the capture failed. | CANNOT TEST (before 7 November) |
| R6 | The April rotations ended 6 Apr about 1 p.m. | Slots continue until about noon 7 Apr (6 Apr about 1 p.m. was the Unit 27 repair) | RULED OUT |
| R7 | 1 Jun–2 was a disagreement between the map and WAPA | A misreading | RULED OUT |
| R8 | Flat runs: 33 | 32 St. Thomas–St. John, 3 St. Croix | RULED OUT |
| R9 | The capture holds everything from day one | The poller first ran 22 Mar 10:39; the 5-minute capture begins 23 Mar 09:49; 27 summaries and 27 records survive from the first day (18 records nowhere else) — now released apart | RULED OUT |

**Source:** VI Update’s register of every test run on the record. Results computed from the package’s tables are checked by `reproduce.py` only where its claim list names them

## Limits What the record does not show

- Outages WAPA never put on its map, and anything during our failed polls or WAPA’s frozen feed.

- When power actually came back: a record’s end is when it left the map.

- Why an outage happened: the cause labels are what WAPA, or news quoting WAPA, said about the day.

- Customers by district or feeder: WAPA does not publish them, so per-customer figures rest on proxies.

- Fuel inventory, generator status or what the outages cost anyone.

- Whether the announced rotation slots and planned jobs that the map does not show actually ran.

## Limits What is not reproduced in this report or its data package, and why

**[Our reading]** Some of this was used to make the report but is not reproduced here; some was kept out on purpose; and some was not used at all.

### Used, but not reproduced

| Left out | Used in this report? | Why it’s not here | Where to get it, or what would add it |
|---|---|---|---|
| Raw map responses | Yes: every figure is built from them | Too large for the package | Released separately, zipped by month |
| Full news articles | Yes: for the stated causes | They belong to their publishers; the package quotes the cause sentence and links the article | The publisher’s page |
| IODA internet-reachability records | Yes: the outside check in Sections 5 and 6 | IODA’s data, not ours to redistribute | IODA’s public API (St. Thomas region 4508, St. Croix region 4510), applying the rule in Section 6 |
| Earthquake, storm-track and warning records | Yes: rows W6 and W10 in Section 12 | Not needed for the main figures; those two rows aren’t checked by the package | The public sources (USGS, NHC, NWS) |
| Rain-gauge and buoy records | No | Not needed for the main figures | The public sources (CoCoRaHS, NDBC) |

### Kept out on purpose

| Left out | Used in this report? | Why it’s not here | Where to get it, or what would add it |
|---|---|---|---|
| WAPA ALERT messages beyond their text | The text, yes; it’s in the package | The headers, address and links identify a subscriber | Nothing: only the text is WAPA’s broadcast |
| Customer identifiers and personal names | No | WAPA’s map carried some: record names that act as customer numbers, and occupants’ names in a few street labels. The package masks them, keeps the rows and counts the masks in its README | Nothing |

### Not used

| Left out | Used in this report? | Why it’s not here | Where to get it, or what would add it |
|---|---|---|---|
| WAPA’s consent-decree reports to the EPA | No | Obtained by records request; not yet in USVI Public Records | Their publication in the archive |
| A ranking of neighborhoods by outage hours | Not done | WAPA’s street labels need a local check | A checked grouping |

## Method Sources, method and reconciliation

- **WAPA’s public outage map**, three endpoints at `outageviewer.viwapa.vi:7575/data/`: `outageSummary` (territory totals, customers served, streets affected, update time, a 48-hour hourly history; the district split comes from the records), `outages` (one entry per record: ID, name, map point, start, modified and end times, customers out initially and now, customers restored, streets, cause, a restoration estimate that is always empty, a crew field that always reads false and a work status that is always blank) and `outagePolygons` (each record’s outage area). Saved by VI Update’s poller every five minutes from 2026-03-23 13:49 UTC.

- **WAPA’s own statements:** press releases and notices, ALERT messages received by e-mail and text, and testimony to the Legislature; news quoting WAPA (the St. Thomas Source, The V.I. Consortium, the St. Croix Source). In all, 155 cause statements and 174 tested events.

- **Government records** in USVI Public Records, linked where cited.

- **Weather:** NOAA airport reports (ASOS, through the Iowa Environmental Mesonet; St. Croix TISX, St. Thomas TIST) and NOAA CO-OPS tide-station wind; National Hurricane Center best tracks and National Weather Service warnings.

- **Places:** U.S. Census Bureau 2023 cartographic boundary county subdivisions for the Virgin Islands.

The capture saved every response as received. Each poll is classed fresh, stale, missing or partial before anything is counted, and nothing stale or missing is counted as zero. Districts come from WAPA’s record names, then position, then estates. Every figure from the map is computed from the data package by a script (money figures are read from the official documents linked, IODA figures from IODA’s public records); the weather tests follow a written statistical specification. The map tests were judged row by row under the rule in Section 6, and the judgments were reviewed in five rounds by an outside red team, which also recomputed the figures in the claim list independently and ran the package’s own check script unmodified. A separate cold check of this draft re-read every quotation against its source.

**Table 15 — Reconciliation**

| Check | Result |
|---|---|
| Monthly customer-hours sum to the district totals | 5,995,614 and 773,494 |
| The same totals summed directly from the sightings (a rounding check) | 773,496 / 5,995,618 |
| Cause-day shares sum to 100% in each district | yes |
| Statements tested: reports judged plus announcements described | 87 + 87 = 174 |
| Group outcomes sum to the reported incidents | 67 = 67 |
| Episodes, and records continuing an earlier one | 7,348 / 85 |

## Data package The data behind this report

The package `wapa-outage-record` holds the public records this report uses, the tables its figures come from, the written rule behind every match, and a script that checks every figure the package can compute against those files with nothing but Python's standard library.

| File or folder | What it holds |
|---|---|
| `as-filed/polls.csv, as-filed/sightings.csv` | every summary poll (65,446) and every sighting of every outage record (530,018), WAPA’s fields as filed |
| `as-filed/record_streets.csv, as-filed/polygons.geojson` | every street label and outage area WAPA attached to each record |
| `as-filed/pre_capture_summaries.csv, as-filed/pre_capture_records.csv` | what survives of the poller’s first day, kept apart |
| `as-filed/asos/, as-filed/coops/, as-filed/census/` | the NOAA weather files and Census boundaries the figures use, as pulled |
| `joined/episodes.csv, joined/lineage_edges.csv` | reissued records joined into episodes, every link with its basis in words |
| `labeled/poll_status.csv, labeled/holes.csv` | each poll’s freshness and district totals; every gap over 12 minutes |
| `labeled/records.csv` | every outage record (7,433), summarized from its sightings |
| `labeled/daily.csv, weekly.csv, monthly.csv` | customer-hours and peaks by district and period |
| `labeled/events.csv, flat_runs.csv, rotation_days.csv, hourly_history.csv` | events, flat runs (with WAPA’s record edits and later hourly history), rotation days, WAPA’s 48-hour history |
| `labeled/semi_known_tests.csv, stated_causes.csv, fuel_reading.csv, feeder_notices.csv` | the tests, the causes, fuel and feeder statements, each with its rule |
| `rules/` | the written rule behind every match and label |
| `wapa-outage-record-v1.sqlite` | every table in one database |
| `reproduce.py, figures.csv` | the check script (standard library) and its result |
| `README.md, MANIFEST.sha256` | what each file and column is; file hashes |

To check the figures: `python reproduce.py`, which writes `figures.csv` (each figure checked, the value printed here, the value from the package, the kind of file it reads, PASS or FAIL); the package README lists what it cannot check. At this version: 4758 of 4758 checks pass, covering every figure in this report that the package can compute; the README names the 23 it cannot (money and testimony from the documents linked, IODA, storm and earthquake records, our weather join, simulated p-values), with where each comes from.

Its page: [https://viupdate.com/reports/data/wapa-outage-record/](https://viupdate.com/reports/data/wapa-outage-record/); the download: `https://files.viupdate.com/reports/data/wapa-outage-record-v1.0.zip`. It is a fixed snapshot with its own Zenodo record and DOI, separate from the report's.

License: the data is dedicated to the public domain under [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/), apart from limits set by its sources, which the package lists.

## Appendix A Every district-wide and major event on the map

| District | Class | Start (AST) | End (AST) | Span (h) | Peak out | % of district | Ends by |
|---|---|---|---|---|---|---|---|
| St. Croix | major (25%+) | 24 Mar 2026 11:54 | 24 Mar 2026 13:14 | 1.33 | 23,976 | 95% | drop |
| St. Croix | district-wide (80%+) | 24 Mar 2026 12:04 | 24 Mar 2026 12:24 | 0.33 | 23,976 | 95% | drop |
| St. Croix | district-wide (80%+) | 25 Apr 2026 20:01 | 25 Apr 2026 20:26 | 0.42 | 23,997 | 95% | drop |
| St. Croix | major (25%+) | 25 Apr 2026 20:01 | 25 Apr 2026 20:46 | 0.75 | 23,997 | 95% | drop |
| St. Croix | major (25%+) | 30 Apr 2026 10:42 | 30 Apr 2026 15:17 | 4.58 | 8,043 | 32% | drop |
| St. Croix | major (25%+) | 23 May 2026 13:52 | 23 May 2026 14:32 | 0.67 | 25,109 | 100% | drop |
| St. Croix | district-wide (80%+) | 23 May 2026 13:57 | 23 May 2026 14:02 | 0.08 | 25,109 | 100% | drop |
| St. Croix | major (25%+) | 26 May 2026 19:32 | 26 May 2026 20:12 | 0.67 | 8,118 | 32% | drop |
| St. Croix | major (25%+) | 30 May 2026 21:57 | 30 May 2026 22:02 | 0.09 | 7,066 | 28% | drop |
| St. Croix | major (25%+) | 6 Jun 2026 09:12 | 6 Jun 2026 10:02 | 0.83 | 25,109 | 100% | drop |
| St. Croix | district-wide (80%+) | 6 Jun 2026 09:17 | 6 Jun 2026 09:47 | 0.50 | 25,109 | 100% | drop |
| St. Croix | major (25%+) | 10 Jun 2026 01:17 | 10 Jun 2026 01:27 | 0.17 | 15,303 | 61% | drop |
| St. Croix | major (25%+) | 10 Jun 2026 02:12 | 10 Jun 2026 03:22 | 1.17 | 22,761 | 91% | drop |
| St. Croix | district-wide (80%+) | 10 Jun 2026 02:17 | 10 Jun 2026 02:37 | 0.33 | 22,761 | 91% | drop |
| St. Croix | major (25%+) | 7 Aug 2026 15:52 | 7 Aug 2026 16:02 | 0.17 | 10,439 | 42% | drop |
| St. Croix | major (25%+) | 8 Aug 2026 12:50 | 8 Aug 2026 13:05 | 0.25 | 10,484 | 42% | drop |
| St. Croix | major (25%+) | 25 Sep 2026 10:28 | 25 Sep 2026 10:33 | 0.08 | 7,697 | 31% | drop |
| St. Croix | district-wide (80%+) | 7 Oct 2026 12:35 | 7 Oct 2026 12:45 | 0.17 | 24,109 | 96% | drop |
| St. Croix | major (25%+) | 7 Oct 2026 12:35 | 7 Oct 2026 14:25 | 1.83 | 24,109 | 96% | drop |
| St. Croix | major (25%+) | 27 Oct 2026 10:17 | 27 Oct 2026 12:12 | 1.92 | 25,139 | 100% | drop |
| St. Croix | district-wide (80%+) | 27 Oct 2026 10:22 | 27 Oct 2026 11:37 | 1.25 | 25,139 | 100% | drop |
| St. Croix | major (25%+) | 7 Nov 2026 08:54 | 7 Nov 2026 10:34 | 1.67 | 25,142 | 100% | drop |
| St. Croix | district-wide (80%+) | 7 Nov 2026 08:59 | 7 Nov 2026 10:19 | 1.33 | 25,142 | 100% | drop |
| St. Thomas–St. John | major (25%+) | 28 Mar 2026 20:34 | 28 Mar 2026 23:19 | 2.75 | 12,648 | 41% | gap |
| St. Thomas–St. John | major (25%+) | 30 Mar 2026 09:49 | 30 Mar 2026 17:04 | 7.25 | 15,082 | 49% | drop |
| St. Thomas–St. John | major (25%+) | 31 Mar 2026 09:34 | 31 Mar 2026 14:09 | 4.58 | 26,107 | 85% | drop |
| St. Thomas–St. John | district-wide (80%+) | 31 Mar 2026 12:39 | 31 Mar 2026 12:49 | 0.17 | 26,107 | 85% | drop |
| St. Thomas–St. John | major (25%+) | 1 Apr 2026 18:09 | 1 Apr 2026 18:14 | 0.08 | 8,292 | 27% | drop |
| St. Thomas–St. John | district-wide (80%+) | 2 Apr 2026 09:29 | 2 Apr 2026 11:29 | 2.00 | 26,109 | 85% | drop |
| St. Thomas–St. John | major (25%+) | 2 Apr 2026 09:29 | 2 Apr 2026 12:14 | 2.75 | 26,109 | 85% | drop |
| St. Thomas–St. John | major (25%+) | 30 May 2026 21:47 | 31 May 2026 02:42 | 4.92 | 28,464 | 93% | drop |
| St. Thomas–St. John | district-wide (80%+) | 30 May 2026 21:52 | 31 May 2026 02:42 | 4.83 | 28,464 | 93% | drop |
| St. Thomas–St. John | major (25%+) | 31 May 2026 07:37 | 1 Jun 2026 23:02 | 39.42 | 26,805 | 88% | drop |
| St. Thomas–St. John | district-wide (80%+) | 1 Jun 2026 08:37 | 1 Jun 2026 12:42 | 4.08 | 26,805 | 88% | drop |
| St. Thomas–St. John | major (25%+) | 2 Jun 2026 19:32 | 2 Jun 2026 21:17 | 1.75 | 25,160 | 82% | drop |
| St. Thomas–St. John | district-wide (80%+) | 2 Jun 2026 19:37 | 2 Jun 2026 20:22 | 0.75 | 25,160 | 82% | drop |
| St. Thomas–St. John | major (25%+) | 9 Jun 2026 15:52 | 9 Jun 2026 16:32 | 0.67 | 22,625 | 74% | drop |
| St. Thomas–St. John | major (25%+) | 23 Jun 2026 09:43 | 23 Jun 2026 10:58 | 1.25 | 16,950 | 55% | drop |
| St. Thomas–St. John | major (25%+) | 23 Jun 2026 20:03 | 23 Jun 2026 20:08 | 0.09 | 7,790 | 25% | drop |
| St. Thomas–St. John | major (25%+) | 23 Jun 2026 21:28 | 23 Jun 2026 21:33 | 0.08 | 7,725 | 25% | drop |
| St. Thomas–St. John | major (25%+) | 1 Jul 2026 09:38 | 1 Jul 2026 09:43 | 0.08 | 8,154 | 27% | drop |
| St. Thomas–St. John | major (25%+) | 1 Jul 2026 16:43 | 1 Jul 2026 17:33 | 0.83 | 9,278 | 30% | drop |
| St. Thomas–St. John | major (25%+) | 2 Jul 2026 01:08 | 2 Jul 2026 01:13 | 0.08 | 7,714 | 25% | drop |
| St. Thomas–St. John | major (25%+) | 2 Jul 2026 11:28 | 2 Jul 2026 11:38 | 0.17 | 11,188 | 37% | drop |
| St. Thomas–St. John | major (25%+) | 3 Jul 2026 11:13 | 3 Jul 2026 11:33 | 0.33 | 9,153 | 30% | drop |
| St. Thomas–St. John | major (25%+) | 13 Jul 2026 22:45 | 14 Jul 2026 13:31 | 14.76 | 24,719 | 81% | drop |
| St. Thomas–St. John | district-wide (80%+) | 14 Jul 2026 09:41 | 14 Jul 2026 12:21 | 2.67 | 24,719 | 81% | drop |
| St. Thomas–St. John | major (25%+) | 14 Jul 2026 23:26 | 15 Jul 2026 09:26 | 10.00 | 28,471 | 93% | drop |
| St. Thomas–St. John | district-wide (80%+) | 14 Jul 2026 23:56 | 15 Jul 2026 08:31 | 8.58 | 28,471 | 93% | drop |
| St. Thomas–St. John | major (25%+) | 21 Jul 2026 09:21 | 21 Jul 2026 11:01 | 1.66 | 22,357 | 73% | drop |
| St. Thomas–St. John | major (25%+) | 5 Aug 2026 23:16 | 6 Aug 2026 05:21 | 6.08 | 15,867 | 52% | drop |
| St. Thomas–St. John | district-wide (80%+) | 11 Aug 2026 02:22 | 11 Aug 2026 08:47 | 6.42 | 28,421 | 93% | drop |
| St. Thomas–St. John | major (25%+) | 11 Aug 2026 02:22 | 11 Aug 2026 08:52 | 6.50 | 28,421 | 93% | drop |
| St. Thomas–St. John | major (25%+) | 12 Aug 2026 02:07 | 12 Aug 2026 02:12 | 0.08 | 9,153 | 30% | drop |
| St. Thomas–St. John | major (25%+) | 12 Aug 2026 04:07 | 12 Aug 2026 04:12 | 0.09 | 8,937 | 29% | drop |
| St. Thomas–St. John | major (25%+) | 13 Sep 2026 11:43 | 14 Sep 2026 02:13 | 14.50 | 10,707 | 35% | drop |
| St. Thomas–St. John | major (25%+) | 15 Oct 2026 16:16 | 15 Oct 2026 23:31 | 7.25 | 28,347 | 93% | drop |
| St. Thomas–St. John | district-wide (80%+) | 15 Oct 2026 16:21 | 15 Oct 2026 23:26 | 7.09 | 28,347 | 93% | drop |
| St. Thomas–St. John | major (25%+) | 16 Oct 2026 16:26 | 17 Oct 2026 00:51 | 8.42 | 24,737 | 81% | drop |
| St. Thomas–St. John | district-wide (80%+) | 16 Oct 2026 16:31 | 16 Oct 2026 19:46 | 3.25 | 24,737 | 81% | drop |
| St. Thomas–St. John | district-wide (80%+) | 21 Oct 2026 19:51 | 21 Oct 2026 21:36 | 1.75 | 26,452 | 87% | drop |
| St. Thomas–St. John | major (25%+) | 21 Oct 2026 19:51 | 24 Oct 2026 13:36 | 65.75 | 30,557 | 100% | gap |
| St. Thomas–St. John | district-wide (80%+) | 22 Oct 2026 00:31 | 22 Oct 2026 08:16 | 7.75 | 26,482 | 87% | drop |
| St. Thomas–St. John | district-wide (80%+) | 23 Oct 2026 11:01 | 23 Oct 2026 18:46 | 7.75 | 30,557 | 100% | drop |
| St. Thomas–St. John | district-wide (80%+) | 24 Oct 2026 13:11 | 24 Oct 2026 13:36 | 0.42 | 28,297 | 93% | gap |
| St. Thomas–St. John | major (25%+) | 24 Oct 2026 20:46 | 24 Oct 2026 20:51 | 0.08 | 7,828 | 26% | drop |
| St. Thomas–St. John | major (25%+) | 25 Oct 2026 19:16 | 25 Oct 2026 19:36 | 0.33 | 9,356 | 31% | drop |
| St. Thomas–St. John | major (25%+) | 29 Oct 2026 00:32 | 29 Oct 2026 04:12 | 3.67 | 11,975 | 39% | drop |
| St. Thomas–St. John | major (25%+) | 3 Nov 2026 18:23 | 3 Nov 2026 20:38 | 2.25 | 8,890 | 29% | drop |
| St. Thomas–St. John | major (25%+) | 6 Nov 2026 20:39 | 6 Nov 2026 21:19 | 0.67 | 7,732 | 25% | drop |

**Source:** `labeled/events.csv`, data package v1. Classes nest: a district-wide event is also inside a major one; never add them. Before WAPA’s 14 May 2026 customer-model reload the largest St. Thomas–St. John total seen was 26,109; events before it print against the later maximum (30,557), so 31 March and 2 April show as 85%. “Gap”: the event ends at a gap in our polls, so its true end was not observed; an event that starts at the first poll after a gap may have begun earlier.

## Appendix B Every reported incident and its outcome

| Group | Rows | Verdicts (reports; announcements in brackets) | Outcome (reports) |
|---|---|---|---|
| 23–27 Mar 2026, St. Thomas–St. John Unit 15 rotations (WAPA 03-23) | 3 | [not testable 1, on the map at the announced time 1, still on the map after the planned end 1] | NO REPORT |
| 26 Mar 2026, St. Thomas–St. John published rotation schedule (WAPA 03-26, 'tentative') | 7 | [not seen on the map 7] | NO REPORT |
| 29–30 Mar 2026, St. Thomas–St. John district-wide outage | 4 | MATCH 3, NOT TESTABLE 1 | PARTLY OPEN |
| 31 Mar 2026, St. Thomas–St. John Unit 15 trip | 2 | MATCH 1, UNRESOLVED 1 | PARTLY OPEN |
| 2 Apr 2026, St. Thomas–St. John two district-wide trips (one release; map never recovered between) | 2 | ALREADY-OUT 1, MATCH 1 | CONSISTENT |
| 4 Apr 2026, St. Thomas–St. John rotation schedule (St. Thomas Source, quoting WAPA) | 7 | [district already out at the time 2, not seen on the map 4, on the map, but not as announced (time, size or place) 1] | NO REPORT |
| 6–7 Apr 2026, St. Thomas–St. John rotations and their end (Unit 27) | 9 | NOT APPLICABLE 2 [not applicable (canceled, postponed, or a defective test) 3, not seen on the map 2, on the map at the announced time 2] | NOT APPLICABLE |
| 25 Apr 2026, St. Croix island-wide | 1 | MATCH 1 | CONSISTENT |
| 30 Apr 2026, St. Croix island-wide (Richmond) | 5 | MATCH 2, MISS 1, UNRESOLVED 2 | CONFLICTING |
| 16 May 2026, St. Croix scheduled 1A+2A | 2 | [cleared by the planned end 1, on the map at the announced time 1] | NO REPORT |
| 21 May 2026, St. Croix scheduled 6A (about 50) | 2 | [job never seen on the map 1, not seen on the map 1] | NO REPORT |
| 24–25 May 2026, St. Thomas–St. John precautionary rotation schedules, never run (WAPA 05-26) | 5 | [no outage appeared 4, not applicable (canceled, postponed, or a defective test) 1] | NO REPORT |
| 30 May 2026, evening St. Thomas–St. John outage (Unit 27 trip about 6:18 p.m.) | 6 | MATCH 1, NOT APPLICABLE 2, UNRESOLVED 3 | PARTLY OPEN |
| 31 May 2026, 01:00 St. Thomas–St. John district-wide | 2 | ALREADY-OUT 1, MATCH 1 | CONSISTENT |
| 31 May 2026, St. Thomas–St. John load shedding | 2 | ALREADY-OUT 1, MATCH 1 | CONSISTENT |
| 1 Jun 2026, 04:00 St. Thomas–St. John district-wide and its restoration | 6 | ALREADY-OUT 1, MATCH 1, NOT APPLICABLE 3, UNRESOLVED 1 | PARTLY OPEN |
| 2 Jun 2026, evening St. Thomas–St. John district-wide | 1 | MATCH 1 | CONSISTENT |
| 18 Jun 2026, St. Thomas–St. John scheduled 7A+8B | 2 | [on the map, but not as announced (time, size or place) 1, still on the map after the planned end 1] | NO REPORT |
| 20 Jun 2026, St. Thomas–St. John Feeder 13 transmission line restored | 1 | NOT APPLICABLE 1 | NOT APPLICABLE |
| 22 Jun 2026, St. Thomas–St. John Red Hook submarine cable failure | 2 | MATCH 2 | CONSISTENT |
| 13–14 Jul 2026, St. Thomas–St. John planned overnight outage, night 1 | 3 | UNRESOLVED 1 [on the map at the announced time 1, still on the map after the planned end 1] | OPEN |
| 14 Jul 2026, 07:45 St. Thomas–St. John district-wide | 4 | ALREADY-OUT 1, MATCH 1, UNRESOLVED 1 [not applicable (canceled, postponed, or a defective test) 1] | PARTLY OPEN |
| 14–15 Jul 2026, St. Thomas–St. John planned overnight outage, night 2 | 2 | [on the map at the announced time 1, still on the map after the planned end 1] | NO REPORT |
| 29 Jul 2026, St. Croix island-wide (frozen feed) | 1 | NOT TESTABLE 1 | OPEN |
| 5–6 Aug 2026, St. Thomas–St. John planned overnight outage | 2 | [cleared by the planned end 1, on the map at the announced time 1] | NO REPORT |
| 6 Aug 2026, St. Croix scheduled 4A | 2 | [cleared by the planned end 1, on the map at the announced time 1] | NO REPORT |
| 6 Aug 2026, St. Croix scheduled 8B | 2 | [on the map, but not as announced (time, size or place) 1, still on the map after the planned end 1] | NO REPORT |
| 11 Aug 2026, St. Thomas–St. John district-wide (propane terminal emergency shutdown) | 2 | MATCH 1, MISS 1 | CONFLICTING |
| 11–12 Aug 2026, St. Thomas–St. John night rotations (Knight testimony) | 1 | MATCH 1 | CONSISTENT |
| 13 Aug 2026, St. Croix scheduled 6B | 2 | [job never seen on the map 1, not seen on the map 1] | NO REPORT |
| 15 Aug 2026, St. Croix Feeder 9A | 1 | MATCH 1 | CONSISTENT |
| 21 Aug 2026, St. Croix scheduled 6B | 2 | [cleared by the planned end 1, on the map at the announced time 1] | NO REPORT |
| 22 Aug 2026, St. Croix scheduled 5A+6A+10A+6B | 2 | [on the map, but not as announced (time, size or place) 1, still on the map after the planned end 1] | NO REPORT |
| 25 Aug 2026, St. Thomas–St. John scheduled Cabrita Point (about 20) | 2 | [job never seen on the map 1, not seen on the map 1] | NO REPORT |
| 29 Aug 2026, St. Croix Feeder 6B | 2 | MATCH 2 | CONSISTENT |
| 30 Aug 2026, St. Thomas–St. John Feeder 13 Bypass outage, postponed to Sep 13 (WAPA 09-09) | 4 | [no outage appeared 1, not applicable (canceled, postponed, or a defective test) 3] | NO REPORT |
| 30 Aug 2026, St. Croix Feeders 6B/6A | 2 | MATCH 2 | CONSISTENT |
| 10 Sep 2026, St. Croix scheduled 5A + part 4A | 2 | [cleared by the planned end 1, on the map at the announced time 1] | NO REPORT |
| 13–14 Sep 2026, St. Thomas–St. John Feeder 13 Bypass outage (ran to about 3:00 a.m.) | 3 | MATCH 1 [on the map at the announced time 1, still on the map after the planned end 1] | CONSISTENT |
| 14 Sep 2026, St. Croix Feeder 6A | 1 | MATCH 1 | CONSISTENT |
| 25 Sep 2026, St. Croix scheduled 5A + part 4A | 1 | [on the map at the announced time 1] | NO REPORT |
| 2 Oct 2026, St. Croix Feeder 9B | 1 | MATCH 1 | CONSISTENT |
| 6 Oct 2026, St. Thomas–St. John 4,400+ out | 1 | NOT APPLICABLE 1 | NOT APPLICABLE |
| 7 Oct 2026, St. Croix island-wide | 2 | MATCH 1, MISS 1 | CONFLICTING |
| 15 Oct 2026, St. Thomas–St. John district-wide (Wärtsilä Phase 2) | 3 | MATCH 2, MISS 1 | CONFLICTING |
| 16–17 Oct 2026, St. Thomas–St. John Unit 27 trip and rotations | 2 | MATCH 1, NOT APPLICABLE 1 | CONSISTENT |
| 17 Oct 2026, St. Croix Feeder 9B | 1 | MATCH 1 | CONSISTENT |
| 18 Oct 2026, St. Croix Feeder 4A (about 90 min, morning) | 1 | MATCH 1 | CONSISTENT |
| 20 Oct 2026, St. Thomas–St. John outages announced (talk show) | 1 | [not applicable (canceled, postponed, or a defective test) 1] | NO REPORT |
| 21–22 Oct 2026, St. Thomas–St. John blackout and 2:21 a.m. second loss | 6 | ALREADY-OUT 1, MATCH 2, MISS 1, NOT APPLICABLE 1, UNRESOLVED 1 | CONFLICTING |
| 22 Oct 2026, St. Croix scheduled 1A (about 110-114) | 2 | [job never seen on the map 1, not seen on the map 1] | NO REPORT |
| 22 Oct 2026, afternoon St. Thomas–St. John rotations announced, not begun | 2 | [no outage appeared 1, not applicable (canceled, postponed, or a defective test) 1] | NO REPORT |
| 23 Oct 2026, St. Thomas–St. John 09:17 district-wide | 2 | ALREADY-OUT 1, NOT APPLICABLE 1 | CONSISTENT |
| 24 Oct 2026, morning St. Thomas–St. John rotations (start revised) | 2 | [no outage appeared 1, not seen on the map 1] | NO REPORT |
| 24 Oct 2026, afternoon St. Thomas–St. John district-wide and restoration | 7 | ALREADY-OUT 1, MATCH 1, NOT APPLICABLE 1, NOT TESTABLE 4 | PARTLY OPEN |
| 26 Oct 2026, St. Thomas–St. John rotations (WAPA 10-26) | 1 | MATCH 1 | CONSISTENT |
| 26 Oct 2026, night St. Thomas–St. John planned outage (Unit 27 leak) | 2 | [not seen on the map 2] | NO REPORT |
| 27 Oct 2026, St. Croix district-wide (Richmond) | 2 | MATCH 2 | CONSISTENT |
| 27 Oct 2026, St. Thomas–St. John peak-hour rotations (talk show) | 1 | NOT APPLICABLE 1 | NOT APPLICABLE |
| 28–29 Oct 2026, St. Thomas–St. John planned overnight interruptions (Unit 27 maintenance) | 2 | [cleared by the planned end 1, on the map at the announced time 1] | NO REPORT |
| 29 Oct 2026, St. Thomas–St. John rotation schedule (St. Thomas Source 10-28, tentative) | 6 | [not seen on the map 6] | NO REPORT |
| 30 Oct 2026, St. Thomas–St. John rotation schedule (St. Thomas Source 10-28, tentative) | 6 | [not seen on the map 6] | NO REPORT |
| 1 Nov 2026, St. Croix Feeder 6B | 1 | MISS 1 | NOT SHOWN |
| 3 Nov 2026, St. Croix Feeder 6A | 1 | MATCH 1 | CONSISTENT |
| 5 Nov 2026, St. Croix scheduled 1A | 1 | [on the map at the announced time 1] | NO REPORT |
| 6 Nov 2026, St. Croix Feeder 1A pole fire | 2 | MATCH 2 | CONSISTENT |
| 7 Nov 2026, St. Croix district-wide | 2 | MATCH 1, NOT APPLICABLE 1 | CONSISTENT |

**Source:** `labeled/semi_known_tests.csv`, data package v1 (columns episode_group, adjudicated_verdict, outcome_plain, group_outcome_reports). NOT SHOWN: the incident’s only applicable row is a miss (for 1 November, the map showed the outage but not its restoration). Announcements are shown in brackets by what the map shows; they never set the outcome.

## Appendix C Every flat run, and what WAPA’s own data says

| District | Start (AST) | End (AST) | Hours | Customers out | Records edited | Hours since last edit | WAPA’s later history | Reported during it |
|---|---|---|---|---|---|---|---|---|
| St. Croix | 25 Mar 2026 22:59 | 26 Mar 2026 03:14 | 4.2 | 1,673 | 1 | 2.8 | about the same at the median (about 1,512) | none |
| St. Thomas–St. John | 11 Apr 2026 18:52 | 11 Apr 2026 22:27 | 3.6 | 1,262 | 1 | 0.1 | counts almost none of it (41 out territory-wide) | none |
| St. Thomas–St. John | 28 Apr 2026 17:22 | 28 Apr 2026 20:27 | 3.1 | 3,426 | 0 | 3.2 | about the same at the median (about 3,424) | none |
| St. Thomas–St. John | 7 May 2026 00:37 | 7 May 2026 08:37 | 8.0 | 3,044 | 2 | 1.0 | higher (about 3,492) | none |
| St. Thomas–St. John | 14 May 2026 00:37 | 14 May 2026 03:57 | 3.3 | 3,957 | 1 | 2.2 | about the same at the median (about 3,886) | none |
| St. Thomas–St. John | 15 May 2026 12:47 | 15 May 2026 16:32 | 3.8 | 1,742 | 1 | 1.7 | about the same at the median (about 1,739) | none |
| St. Thomas–St. John | 24 May 2026 10:07 | 24 May 2026 16:32 | 6.4 | 3,609 | 0 | 7.0 | about the same at the median (about 3,580) | none |
| St. Croix | 31 May 2026 10:12 | 31 May 2026 16:17 | 6.1 | 1,003 | 0 | 7.3 | cannot be split by district | none |
| St. Thomas–St. John | 14 Jul 2026 00:05 | 14 Jul 2026 07:46 | 7.7 | 15,867 | 13 | 1.0 | about the same at the median (about 14,889) | four |
| St. Thomas–St. John | 15 Jul 2026 00:01 | 15 Jul 2026 08:21 | 8.3 | 28,471 | 3 | 7.9 | lower (about 17,238) | one |
| St. Thomas–St. John | 5 Aug 2026 23:36 | 6 Aug 2026 04:36 | 5.0 | 15,867 | 0 | 5.1 | about the same at the median (about 14,387) | none |
| St. Thomas–St. John | 9 Aug 2026 20:32 | 10 Aug 2026 00:22 | 3.8 | 1,859 | 0 | 3.9 | counts almost none of it (5 out territory-wide) | none |
| St. Thomas–St. John | 11 Aug 2026 02:27 | 11 Aug 2026 05:37 | 3.2 | 28,421 | 0 | 3.3 | about the same at the median (about 28,311) | none |
| St. Thomas–St. John | 21 Aug 2026 23:28 | 22 Aug 2026 02:38 | 3.2 | 5,010 | 0 | 3.2 | cannot be split by district | none |
| St. Croix | 22 Aug 2026 01:03 | 22 Aug 2026 04:33 | 3.5 | 1,581 | 1 | 3.5 | cannot be split by district | one |
| St. Thomas–St. John | 22 Aug 2026 16:13 | 22 Aug 2026 20:58 | 4.8 | 2,443 | 2 | 4.6 | about the same at the median (about 2,410) | none |
| St. Thomas–St. John | 22 Aug 2026 21:03 | 23 Aug 2026 00:18 | 3.2 | 2,447 | 0 | 3.4 | counts almost none of it (140 out territory-wide) | none |
| St. Thomas–St. John | 23 Aug 2026 01:23 | 23 Aug 2026 08:48 | 7.4 | 2,443 | 0 | 7.9 | counts almost none of it (140 out territory-wide) | none |
| St. Thomas–St. John | 29 Aug 2026 00:08 | 29 Aug 2026 08:43 | 8.6 | 1,598 | 0 | 8.7 | counts almost none of it (11 out territory-wide) | none |
| St. Thomas–St. John | 29 Aug 2026 10:38 | 29 Aug 2026 16:13 | 5.6 | 1,600 | 0 | 5.9 | counts almost none of it (17 out territory-wide) | none |
| St. Thomas–St. John | 29 Aug 2026 16:18 | 29 Aug 2026 21:48 | 5.5 | 1,602 | 1 | 5.2 | cannot be split by district | none |
| St. Thomas–St. John | 13 Sep 2026 11:43 | 13 Sep 2026 20:03 | 8.3 | 10,668 | 3 | 1.0 | about the same at the median (about 10,664) | one |
| St. Thomas–St. John | 14 Sep 2026 20:18 | 15 Sep 2026 06:53 | 10.6 | 1,037 | 0 | 11.4 | counts almost none of it (12 out territory-wide) | none |
| St. Thomas–St. John | 8 Oct 2026 16:01 | 8 Oct 2026 19:16 | 3.2 | 1,760 | 0 | 3.4 | counts almost none of it (33 out territory-wide) | none |
| St. Thomas–St. John | 15 Oct 2026 18:01 | 15 Oct 2026 23:16 | 5.2 | 28,347 | 0 | 5.3 | lower (about 17,775) | two |
| St. Thomas–St. John | 17 Oct 2026 01:31 | 17 Oct 2026 06:36 | 5.1 | 4,389 | 0 | 5.2 | higher (about 6,260) | none |
| St. Thomas–St. John | 17 Oct 2026 15:51 | 17 Oct 2026 20:46 | 4.9 | 2,094 | 0 | 5.7 | counts almost none of it (47 out territory-wide) | none |
| St. Thomas–St. John | 17 Oct 2026 20:51 | 18 Oct 2026 00:21 | 3.5 | 2,095 | 0 | 3.6 | counts almost none of it (44 out territory-wide) | none |
| St. Thomas–St. John | 18 Oct 2026 00:26 | 18 Oct 2026 08:16 | 7.8 | 2,094 | 0 | 11.6 | counts almost none of it (44 out territory-wide) | none |
| St. Thomas–St. John | 19 Oct 2026 22:56 | 20 Oct 2026 07:16 | 8.3 | 2,031 | 0 | 8.4 | counts almost none of it (35 out territory-wide) | none |
| St. Thomas–St. John | 22 Oct 2026 00:41 | 22 Oct 2026 08:11 | 7.5 | 26,482 | 0 | 7.6 | about the same at the median (about 26,177) | two |
| St. Thomas–St. John | 22 Oct 2026 11:21 | 23 Oct 2026 10:56 | 23.6 | 22,119 | 4 | 22.9 | lower (about 19,095) | four |
| St. Thomas–St. John | 23 Oct 2026 23:56 | 24 Oct 2026 07:56 | 8.0 | 16,223 | 0 | 8.1 | lower (about 9,233) | none |
| St. Thomas–St. John | 29 Oct 2026 00:37 | 29 Oct 2026 03:52 | 3.2 | 11,975 | 0 | 3.4 | about the same at the median (about 10,900) | none |
| St. Thomas–St. John | 4 Nov 2026 21:43 | 5 Nov 2026 07:43 | 10.0 | 1,816 | 0 | 10.8 | counts almost none of it (103 out territory-wide) | none |

**Source:** `labeled/flat_runs.csv`, data package v1. “Records edited” and “hours since last edit” use WAPA edits of the district’s records up to five minutes before the run’s last poll (an edit in those last five minutes may be the one that ends the run); hours since last edit run from the last such edit to the end of the run. “WAPA’s later history”: same outage = within 10% of the run; counts almost none = WAPA’s territory-wide value under a quarter of the run’s level; cannot be split = the other district had more than a quarter of the run’s level out. “Reported during it”: statements in the test table timed inside the run (`statements_during_run` names them).

## Record of changes Corrections

None. Corrections to this report after publication will be recorded here: what changed, the corrected value, and the date, rather than absorbed silently.

## Citation How to cite this report

Louden, Brian. “What WAPA’s outage map recorded, 23 March to 7 November 2026.” VI Update, v1.0, 9 November 2026. https://doi.org/10.5281/zenodo.24094226.

The data:

Louden, Brian. “What WAPA’s outage map recorded, 23 March to 7 November 2026: the data behind the report” (wapa-outage-record), v1.0, 9 November 2026. https://doi.org/10.5281/zenodo.24094228.

This report is licensed [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/): share and adapt it, with credit to Brian Louden, VI Update, and a link. Quotations and third-party material remain their owners'; government records are public. To use a figure, cite the report; to use the data, cite the data and its original sources, which the data package names file by file.

## The archive Built on USVI Public Records

USVI Public Records is the public archive of U.S. Virgin Islands government records where VI Update's research begins. Brian Louden built it and runs it. Every document it holds is kept with its original source and its SHA-256, so a reader can open the record a report rests on.

Archive records this report cites (7):

- Office of the Governor, 24 March 2026 · [LF-761392683fe6](https://usvipublicrecords.com/doc?id=LF-761392683fe6)

- Office of the Governor, 30 March 2026 · [LF-c0a7c51ca152](https://usvipublicrecords.com/doc?id=LF-c0a7c51ca152)

- PSC FY2027 budget presentation · [LF-632080e2d7f7](https://usvipublicrecords.com/doc?id=LF-632080e2d7f7)

- Post Audit Division: WAPA FY2026 analysis · [LF-6e02fd648a12](https://usvipublicrecords.com/doc?id=LF-6e02fd648a12)

- Post Audit Division: WAPA FY2027 analysis · [LF-266a148fdab5](https://usvipublicrecords.com/doc?id=LF-266a148fdab5)

- Testimony of Karl Knight, 9 April 2026 · [LF-2ceb08dd34d3](https://usvipublicrecords.com/doc?id=LF-2ceb08dd34d3)

- WAPA testimony, Senate budget hearing, 12 August 2026 · [LF-af7b1a976499](https://usvipublicrecords.com/doc?id=LF-af7b1a976499)

Search the archive: [usvipublicrecords.com](https://usvipublicrecords.com).

## Method and tools How this report was made

AI coding agents (Anthropic's Claude), working on Brian Louden's own computer, built and ran the research tools behind this report: programs that collect the public records, apply the written matching rules and recompute the figures. They worked under Brian's direction and to rules he wrote. He chose the questions and the sources, made every editorial decision and approved the report. The agents also drafted the text under his direction; he reviewed and approved it. The data package holds the records and tables behind the figures, and a script that checks every figure the package can compute.

### What the research tools did

- Collected and processed WAPA’s public outage-map responses, WAPA’s releases and ALERT messages, NOAA weather records and government records in USVI Public Records into tables, kept in the data package.

- Applied the written matching rules to the outage records (each record’s district, by its name, position and estates, and the rule that joins reissued records into episodes) and the reported events (the rule that judges each test), recording the basis of each match so it can be checked.

- Recomputed the report's figures from the data by a second path; the data package's reproduce script lets any reader rerun those checks for every figure the package can compute, and its README lists the figures it cannot check.

- Checked each quotation against the document it comes from.

- Ran adversarial reviews: separate AI reviewers read the draft against its sources, looking for errors, gaps and unfair implications, and each finding was answered on the record.

- An outside red team, run on OpenAI models, reviewed the report and its data independently.

- Built the tables, charts and this document from the data.

### What Brian Louden did

- Directed the work: set every rule the tools follow and every source they may use.

- Made every editorial decision: what the report says, how it says it, and what it leaves out.

- Decided whether and when the report is published.

The tools set no rules and made no editorial or publication decision. Tools used: Anthropic's Claude, as AI coding agents that built and ran the research tools and built this document; OpenAI models, for the outside red team.

The figures the data package checks can be rerun by any reader, its README names those it cannot check, and every archive document cited links to its copy and its SHA-256. Brian Louden is responsible for the report; please report an error to tips@viupdate.com.

**What WAPA’s outage map recorded** · A VI Update report by Brian Louden · v1.0 · 9 November 2026.

Report DOI: https://doi.org/10.5281/zenodo.24094226 · Data package DOI: https://doi.org/10.5281/zenodo.24094228.

Published by Brian Louden from St. Croix, U.S. Virgin Islands.

This report organizes public records; it does not include interviews or comment.

This report carries no home addresses, household P.O. boxes, personal phone numbers or e-mail addresses, or dates of birth.

All times Atlantic Standard Time (UTC-4) unless marked.

© 2026 Brian Louden. Licensed [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). The data package is CC0 1.0, with source limits as listed.

Corrections: tips@viupdate.com. A correction made after publication is listed in the Corrections section of the next version, with what changed, the corrected value and the date; nothing is changed silently.

The SHA-256 of this PDF file is listed beside its download at viupdate.com/reports and in its Zenodo record. To check a copy: sha256sum FILE (Linux), shasum -a 256 FILE (macOS), or Get-FileHash FILE / certutil -hashfile FILE SHA256 (Windows). A copy whose hash differs is not this version.

Built with the VI Update report kit 1.2.

Built on **USVI Public Records** · [usvipublicrecords.com](https://usvipublicrecords.com)
