I've written the one-page FY2025 summary for the CFO. The script's reconciliation checks passed.

FY2025 revenue was $11.2M against a budget of $11.6M, and operating income was $388K against $583K.

- **Revenue:** The shortfall is ($362K). Q1 (($121K)) and Q3 (($229K)) account for most of it. Q2 and Q4 were close to budget.
- **Costs:** Cost of goods sold came in $196K favourable. That offset part of the revenue miss, but gross margin still fell 0.9 points short of budget, at 25.9% against 26.8%.
- **Watch list:** Days sales outstanding (51.2 against a target of 45.0) and on-time delivery (93.3% against 95.0%) have each been off target for 3 months. Active customers (40 against 42) have been off target for 2.

I left Inventory turns off the watch list, since it has been off target for only one month.

The "Q1 and Q3 account for most of the shortfall" line is my reading of the quarterly table. It isn't a script figure, and I didn't name a cause the data doesn't show.

Files are in `output/`:
- `exec-summary.md`
- `summary.json`