I built the FY2025 revenue bridge and wrote the commentary note. The script's reconciliation check passed, so PY + Timing + Loss + Decline + Upsell + New equals CY to the cent.

Revenue was flat: $11.2M in FY2024 and $11.2M in FY2025, a change of ($5K), or (0.04%). Large movements in both directions cancelled out:

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

- **Losses:** Fenwick Legal (($686K)) and Birchway Foods (($503K)) are the two largest of the 4 lost customers.
- **Upsell:** 23 customers upsold, led by Harbor Freight Partners at $148K and Ember Analytics at $136K.
- **Cause of declines:** The data doesn't show why customers declined, so the note says contract or usage data would answer that.

Every figure in the note is copied from the script's display strings. The data note records the input file, 48 rows, and the sha256 prefix `742a2059e0fd`.

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