I've written the one-page summary, and it comes to 317 words, under the 350-word limit. FY2025 revenue was $11,238K against a budget of $11,600K, and operating income was $388K against $583K. The script's checks passed, and the figures are copied from its output.

- **Results:** Revenue was ($362K) against budget, and gross margin was 25.9% against 26.8%, a gap of (0.9) pts. Operating expenses were on budget at ($1K). The operating income gap of ($195K) comes almost entirely from the revenue miss, partly offset by cost of goods sold running $196K favourable.
- **Quarterly trend:** The shortfall sits in Q1 at ($121K) and Q3 at ($229K). Q2 at ($4K) and Q4 at ($7K) landed close to budget.
- **Drivers:** The summary lists revenue ($362K), cost of goods sold $196K favourable and salaries and wages ($38K). It says the data doesn't show why revenue fell short in Q1 and Q3.
- **Watch list:** Three KPIs are off target.
  - Days sales outstanding is 51.2 days against 45.0, off target for 3 months.
  - On-time delivery is 93.3% against 95.0%, off target for 3 months.
  - Active customers are 40 against 42, off target for 2 months.

  I left inventory turns off because it has only been off target for 1 month. The closing question for leadership asks whether the customers behind the Q1 and Q3 shortfall are the same ones now paying late.
- **Rounding:** Each figure is rounded on its own, so a few rows don't add exactly. The data notes say which ones.

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