I've built the FY2025 revenue bridge and written the commentary note. The script checked that the bridge adds up to the cent and exited cleanly. Revenue was essentially flat: FY2025 was $11,238K against $11,243K in FY2024, a change of ($5K), or (0.04%).

| Step | Amount |
| --- | --- |
| FY2024 | $11,243K |
| Timing | $53K |
| Loss | ($1,288K) |
| Decline | ($443K) |
| Upsell | $1,211K |
| New | $463K |
| FY2025 | $11,238K |

- **Lost customers:** 4 customers left, taking ($1,288K). Most of that was Fenwick Legal at ($686K) and Birchway Foods at ($503K).
- **Growth from existing customers:** 23 customers spent more, adding $1,211K and offsetting most of the loss. Harbor Freight Partners added the most, $148K.
- **New customers:** 6 new customers brought $463K, led by Thistle Gardens at $116K.
- **Customers spending less:** 11 customers fell by a total of ($443K), led by Driftwood Media at ($113K).

The amounts are shown in thousands and each is rounded separately, so the table rows don't add exactly to the FY2025 total. The note says this in its data notes. The data shows which customers moved but not why, so the note doesn't give reasons.

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