The one-page FY2025 summary for the CFO is written. The script's reconciliation checks passed: quarterly revenue sums to the year total, operating income ties to the lines, and the revenue KPI ties to the P&L.

**What it says**
- **Headline:** revenue was $11.2M against a $11.6M budget, a shortfall of ($362K). Operating income was $388K against $583K.
- **Margin:** gross margin was 25.9% against 26.8% budgeted. Operating expenses were on budget, so the miss comes from revenue and margin.
- **Quarters:** the revenue misses fall mainly in Q1 at ($121K) and Q3 at ($229K). Q2 and Q4 were close to budget.
- **Drivers:** the revenue shortfall, cost of goods sold at $196K favourable, salaries and wages at ($38K), and freight out at ($29K).
- **Watch list:** days sales outstanding at 51.2 days against 45.0, on-time delivery at 93.3% against 95.0%, and active customers at 40 against 42. I left inventory turns off because it has missed target for only one month.

The data doesn't show why Q1 and Q3 missed, so the summary says that and closes with the question to put to the business.

The summary is under 350 words. All figures are copied from the script output, and the data notes list both input files with their row counts and hashes.

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