The one-page FY2025 summary for the CFO is written to `output/exec-summary.md`. The figures come from `output/summary.json`, which the pack's script produced. Its checks passed: quarterly revenue sums to the year total, operating income ties to the lines, and the revenue KPI matches P&L revenue for December.

- **Headline:** FY2025 revenue was $11.2M against a budget of $11.6M. Operating income was $388K against $583K.
- **Quarters:** Q1 and Q3 account for most of the revenue miss, at ($121K) and ($229K). Q2 and Q4 were close to budget.
- **Drivers:** Cost of goods sold came in $196K favourable and offset part of the revenue shortfall. Salaries and wages were ($38K) unfavourable, and marketing was $38K favourable.
- **Watch list:** Days sales outstanding (51.2 days against 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 months. I left inventory turns off because it has only missed for 1 month.
- **Open question:** The summary asks what is behind the Q1 and Q3 revenue shortfall. The data doesn't show a cause, so none is stated.

I added a "Source:" line under each table to follow the branding rules.

The summary isn't a full-page layout, and I didn't count its words against the 350-word limit.