I've built the FY2025 revenue bridge and written the commentary note. The script's reconciliation check passed to the cent.

FY2025 revenue was $11,238K against $11,243K in FY2024, a change of ($5K), or (0.04%). Large movements offset almost exactly.

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

- **Loss:** Fenwick Legal lost ($686K) and Birchway Foods lost ($503K). Four customers were lost in total.
- **Upsell:** 23 customers grew, led by Harbor Freight Partners at $148K and Ember Analytics at $136K.
- **New:** Six new customers added $463K.
- **Decline:** Driftwood Media fell ($113K) and Juniper Schools fell ($107K). The data doesn't show why. The note says contract or usage records would answer that.

The rows are rounded individually, so they don't add exactly to FY2025. The note says so.

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