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 bridge script confirmed that the steps add up exactly to FY2025 revenue.

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

- **Lost customers:** 4 customers were lost, removing ($1.3M). Fenwick Legal was the largest at ($686K), followed by Birchway Foods at ($503K).
- **Growth from existing and new customers:** 23 customers that bought more (upsell) added $1.2M, and 6 new customers added $463K. Together they almost exactly offset the losses and the ($443K) from 11 customers that bought less.
- **Timing:** $53K of FY2025 revenue across 3 customers came from renewal dates shifting, not from changes in what they buy.

The data doesn't say why any customer was lost or declined. Churn reasons or contract records would be needed to explain that.

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