I've written the one-page FY2025 summary for the CFO. The script's checks passed: the quarters sum to full-year revenue, operating income built from the lines matches the subtotal, and December revenue ties between the two files.

- **Headline:** Revenue was $11.2M against a $11.6M budget, and operating income was $388K against $583K.
- **Gross margin:** 25.9% against a budget of 26.8%, so it fell (0.9) pts short.
- **Quarterly revenue:** Q1 and Q3 account for most of the shortfall, at ($121K) and ($229K). Q2 and Q4 were close to budget.
- **Drivers:** Lower cost of goods sold ($196K favourable) offset part of the revenue miss. Salaries and wages ($38K) and freight out ($29K) ran over budget.
- **Watch list:** Days sales outstanding has been off target for 3 months, on-time delivery for 3, and active customers for 2. I left inventory turns off, because it has only missed one month.

All figures are copied from the script's output. The page has the six sections the template requires, with a source line under each table and both input files and hashes in the data notes. The closing question asks what data would show whether the Q1 and Q3 revenue shortfalls came from lost customers, lower volume or price.

Files are in `/tmp/spb-exec-summary-fy25-claude-scswfwjg/output/`:
- `exec-summary.md`
- `summary.json`