I've built the FY2025 revenue bridge and written the commentary note. Revenue was essentially flat: $11,238K in FY2025 against $11,243K in FY2024, a change of ($5K), or (0.04%). The bridge checks out exactly, to the cent.

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

- **Lost customers:** 4 customers left, taking out ($1,288K). Birchway Foods accounted for ($503K) of that.
- **Upsell:** 23 customers spent more, adding $1,211K. Harbor Freight Partners led with $148K.
- **New customers:** 6 new customers added $463K, including Thistle Gardens at $116K.
- **Declines:** 11 customers spent less, totalling ($443K). The largest was Driftwood Media at ($113K).

Gains from upsell and new customers almost exactly made up for the lost and declining ones. The data doesn't say why customers left or spent less. To answer that, you'd need churn reasons or contract records.

The note also records the input file, row count and file hash, plus a line saying the rounded rows don't add exactly to the FY2025 total.

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