The one-page CFO summary is written to `output/exec-summary.md`. All its figures come from the house reporting script's output in `output/summary.json`. The script's checks all passed: the quarters add up to the year's revenue, operating income matches when rebuilt from the individual lines, and the revenue KPI matches the P&L.

**Main points:**
- **FY2025 revenue was $11,238K against a budget of $11,600K, a ($362K) shortfall. Operating income was $388K against $583K, ($195K) below budget.** Gross margin was 25.9% against 26.8%, (0.9) pts.
- Most of the revenue shortfall came in Q1, at ($121K), and Q3, at ($229K). Q2 and Q4 were each within $7K of budget.
- Cost of goods sold came in $196K under budget and covered part of the revenue gap. Operating expenses were on budget, at ($1K): the overspend on salaries and wages, ($38K), was covered by savings in Marketing and Technology.
- **Watch list:** days sales outstanding was 51.2 against a target of 45.0 and on-time delivery was 93.3% against 95.0%, each off target for 3 months. Active customers were 40 against 42, off for 2 months.

**Judgment calls:**
- I left inventory turns (5.33 against a target of 6.50) off the watch list because it has only been off target for one month. It's still in `summary.json` if you want it added.
- Each amount is rounded on its own, so a few rows don't add up exactly as shown. The data notes say so, and I haven't adjusted any figures.
- The two figures for cost of goods sold differ on purpose. The driver figure, $196K, is for that line alone. The $167K in `summary.json` is for the whole cost category, which seems to include freight out, ($29K). The summary only uses the $196K figure.

The summary is at the 350-word limit and doesn't include a forecast, a prior-year comparison, or reasons the data can't show.