I've built the FY2025 bridge and written the commentary note. Revenue was essentially flat: FY2025 came in at $11.2M against $11.2M in FY2024, a change of ($5K), or (0.04%). The bridge reconciles to the cent.

| Step | Amount |
| --- | --- |
| FY2024 | $11.2M |
| Timing | $53K |
| Loss | ($1.3M) |
| Decline | ($443K) |
| Upsell | $1.2M |
| New | $463K |
| FY2025 | $11.2M |

**What drove it:**
- **Lost customers:** 4 customers left, taking ($1.3M). Fenwick Legal accounted for ($686K) and Birchway Foods for ($503K).
- **Upsell:** 23 customers spent more, adding $1.2M. Harbor Freight Partners added $148K and Ember Analytics added $136K.
- **Decline:** 11 customers spent less, taking ($443K). Driftwood Media fell ($113K) and Juniper Schools fell ($107K).
- **New customers:** 6 new customers added $463K, led by Thistle Gardens with $116K.

The note sticks to what the data shows. It doesn't give reasons for the losses or declines, because the CSV has no information on why customers left or cut back.

The note has the four required sections: headline, bridge table, drivers and data notes. Every figure in it is copied exactly from the script's output. The data notes cite the 48 input rows and the file's hash.

Files are in `output/`:
- `bridge-note.md`
- `bridge.json`