The FY2025 budget-vs-actual commentary is written. The script's reconciliation checks passed, and every figure in the note is copied from its output.

**Headline:** Full-year revenue was $11.2M against a budget of $11.6M, a variance of ($362K), or (3.1%). Operating income was $388K against $583K, a variance of ($195K), or (33.5%). Gross margin was 25.9% against 26.8%, (0.9) pts.

**Drivers in the note:**
- **Revenue miss:** It concentrated in July ($132K), March ($123K) and August ($105K). The data doesn't show why, so the note asks the sales owners.
- **Cost of goods sold:** It finished favourable by $196K, or 2.4%.
- **Cost lines:**
  - Freight out ($29K), Salaries and wages ($38K) and Rent and occupancy ($23K) were unfavourable.
  - Marketing at $38K and Technology at $25K were favourable.
- **Professional fees:** They peaked at ($31K) in March and closed the year at ($1K).

The note's Month section covers December: revenue favourable by $3K, operating income ($5K) against budget.

Files are in `/tmp/spb-budget-vs-actual-fy25-claude-kfszlv49/output/`:
- `bva-note.md`
- `bva.json`