I built the FY2025 revenue bridge and wrote the commentary note. The bridge script ran cleanly and checked that FY2024 plus the five movements equals FY2025 to the cent.

**Result:** FY2025 revenue was $11.2M, against $11.2M in FY2024. That is a change of ($5K), or (0.04%).

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

The overall change is close to zero, but large movements cancel out underneath it:
- **Lost customers:** 4 customers left, taking out ($1.3M). Fenwick Legal alone took out ($686K).
- **Upsell:** 23 customers spent more, adding $1.2M. Harbor Freight Partners added the most, at $148K.

The note doesn't say why customers left or grew, because the file has no data on causes. Churn reasons or contract records would be needed to answer that.

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