I've built the FY2025 revenue bridge and written the commentary note. Revenue was essentially flat: $11.2M in FY2025 against $11.2M in FY2024, a change of ($5K), or (0.04%). The bridge script ran without errors and confirmed the walk adds up to FY2025 revenue to the cent.

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

**What drove it:**
- **Lost customers:** ($1.3M) from 4 customers. Two account for most of it: Fenwick Legal lost ($686K) and Birchway Foods lost ($503K).
- **Existing customers buying more:** $1.2M across 23 customers, led by Harbor Freight Partners at $148K. This roughly offsets the losses.
- **New customers:** $463K from 6 customers; Thistle Gardens was the largest at $116K.
- **Existing customers buying less:** ($443K) across 11 customers, led by Driftwood Media at ($113K).

The data doesn't say why Fenwick Legal or Birchway Foods left. Answering that would need churn reasons or contract records.

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