I've built the FY2025 revenue bridge and written the commentary note. The bridge script's own check confirms that FY2024 plus the five movements equals FY2025 to the cent.

**Result:** FY2025 revenue was $11.2M, the same as FY2024 at that rounding. The actual change was ($5K), or (0.04%).

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

**What moved:**
- **Lost customers:** 4 customers left, removing ($1.3M). Fenwick Legal accounted for ($686K) and Birchway Foods for ($503K).
- **Upsell:** 23 customers grew, adding $1.2M. The largest were Harbor Freight Partners at $148K and Ember Analytics at $136K.
- **New customers:** 6 new customers added $463K, led by Thistle Gardens at $116K.
- **Decline:** 11 customers shrank, costing ($443K). Driftwood Media fell the most, by ($113K).
- **Timing:** 3 customers had renewal-date shifts worth $53K, which are kept separate from the other movements.

The note doesn't say why customers left or shrank, because the CSV has no data on causes. Churn or contract records would be needed to explain the Fenwick Legal and Birchway Foods losses.

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