I ran the bridge script on `data/customers_fy24_fy25.csv` and wrote the commentary note. The bridge reconciles to the cent.

FY2025 revenue was $11.2M against $11.2M in FY2024, a change of ($5K), or (0.04%). Large movements offset each other:

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

- **Loss:** 4 customers were lost, led by Fenwick Legal at ($686K) and Birchway Foods at ($503K).
- **Upsell:** 23 customers grew, led by Harbor Freight Partners at $148K.
- **Decline:** 11 customers shrank, led by Driftwood Media at ($113K).
- **New:** 6 customers added $463K, led by Thistle Gardens at $116K.

The note copies every figure from the script's display strings. I didn't calculate any figures myself.

The movement definitions file is marked provisional, pending the definitions from *The Universal Revenue Bridge*. The bridge uses those provisional rules.

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