I've built the FY2025 revenue bridge and written the commentary note. Revenue was flat: FY2025 came in at $11.2M against $11.2M in FY2024, a change of ($5K), or (0.04%). The script confirmed that the bridge adds up exactly from FY2024 to FY2025.

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

- **Lost customers:** 4 customers left, taking ($1.3M). Two of them make up most of it: Fenwick Legal at ($686K) and Birchway Foods at ($503K).
- **Upsell:** 23 customers grew, adding $1.2M. Harbor Freight Partners added the most, at $148K.
- **New customers:** 6 new customers added $463K. Thistle Gardens was the largest at $116K.
- **Decline:** 11 customers shrank, costing ($443K). Driftwood Media fell ($113K) and Juniper Schools fell ($107K).
- **Timing:** $53K came from 3 customers whose renewal dates moved.

The data doesn't show why Fenwick Legal and Birchway Foods left. Churn records or account notes would answer that, and the note doesn't guess.

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