I built the FY2025 revenue bridge and wrote the commentary note. Revenue was essentially flat: $11.2M in FY2025 against $11.2M in FY2024, a change of ($5K), or (0.04%). Before writing its output, the script checked that the bridge adds up to the cent from FY2024 to FY2025.

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

**What drove it:**
- **Lost customers:** 4 customers took ($1.3M). Fenwick Legal accounted for ($686K) and Birchway Foods for ($503K).
- **Existing customers spending more:** 23 customers added $1.2M, led by Harbor Freight Partners at $148K and Ember Analytics at $136K.
- **New customers:** 6 new customers added $463K, with Thistle Gardens the largest at $116K.
- **Existing customers spending less:** 11 customers took ($443K), led by Driftwood Media at ($113K).

The data doesn't show why Fenwick Legal and Birchway Foods left. Churn reasons from the account teams would answer that. Timing is the $53K of FY2025 revenue that billing put down to 3 customers' renewal dates moving.

The note follows the house format and uses only the script's rounded figures. It has four sections: headline, bridge table, drivers and data notes. The data notes give the input file (48 rows) and its hash, `742a2059e0fd`.

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