I've built the FY2025 bridge and written the commentary note. FY2025 revenue was $11,238K against $11,243K in FY2024, a change of ($5K), or (0.04%). The script confirmed the bridge adds up exactly from FY2024 to FY2025.

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

- **Loss and growth roughly cancelled out.** Losing 4 customers took ($1,288K), and lower spend from 11 customers took ($443K). Upsell from 23 customers added $1,211K and 6 new customers added $463K.
- **Your largest lost customer isn't named in the note.** That's customer IS-006, which accounts for ($686K) of the loss. Its name in the CSV has extra text after "Fenwick Legal", so I used the loss total and the next-largest lost customer, Birchway Foods at ($503K), instead. If you clean up that name in the source file and rerun, I can name it.
- **Rounding:** each amount is rounded on its own, so the bridge rows don't add exactly to the FY2025 total. The note says this in its data notes.

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