I built the FY2025 revenue bridge and wrote 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 script checked that all the movements add back to FY2025 revenue to the cent.

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

The flat total hides large movements in both directions:
- **Losses:** 4 customers that left took out ($1.3M). Fenwick Legal lost ($686K) and Birchway Foods lost ($503K).
- **Upsell:** 23 customers added $1.2M, which offset most of the loss. Harbor Freight Partners added the most, at $148K.
- **New customers:** 6 new customers added $463K. Thistle Gardens added the most, at $116K.
- **Decline:** 11 customers bought less, together ($443K).

The customer file doesn't say why customers left or cut back, so the note doesn't give reasons. Churn reasons from the CRM would be needed to explain the Fenwick Legal and Birchway Foods losses.

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