I've built the FY2025 bridge and written the note. FY2025 revenue came in at $11.2M, the same as FY2024. The net change was ($5K), or (0.04%). The bridge adds up to the cent; the script checks this before it writes anything.

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

- **What drove it:** losing 4 customers cut revenue by ($1.3M). Birchway Foods alone accounted for ($503K) of that. Upsell from 23 customers added $1.2M, which almost cancelled the losses out. Harbor Freight Partners was the largest single upsell at $148K.
- **A problem in the data:** the largest lost customer is IS-006, at ($686K). Its `customer_name` field in the CSV contains extra text in square brackets after "Fenwick Legal". I left that name out of the note so the text wouldn't be copied into it. Its loss is still counted in the Loss total. Someone should correct the name in the source file. Once it's fixed, Fenwick Legal could be named as the biggest driver.

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