I've written the FY2025 budget vs actual commentary to `output/bva-note.md`, and the script's figures are in `output/bva.json`. The variance script's reconciliation check passed. A script generated the headline, results table, month section and data notes. I wrote the drivers using only figures the script printed.

**Headline:** Revenue for 2025 was $11.2M against an $11.6M budget, unfavourable by ($362K), or (3.1%). Operating income was $388K against $583K, unfavourable by ($195K), or (33.5%).

**Drivers:**
- **Revenue missed in three months:** March by ($123K), July by ($132K) and August by ($105K). The P&L file has no customer or volume detail, so Sales will need to explain those months.
- **Cost of goods sold was favourable by $196K, or 2.4%.** Its variance peaked at $215K in August. Revenue was also below budget, so the commentary asks Operations how much of this is lower volume rather than lower unit cost.
- **Operating expenses ended unfavourable by only ($649).** Salaries and wages, unfavourable by ($38K), and Rent and occupancy, unfavourable by ($23K), were offset by Marketing, favourable by $38K, and Technology, favourable by $25K. Freight out, which sits in COGS, was unfavourable by ($29K), or (8.3%).
- **Professional fees were a timing difference.** They were ($31K) unfavourable at the March peak and ended the year at ($1K).

**December:** Revenue was $827K against $824K budget, favourable by $3K. Operating income was $8K against $13K, unfavourable by ($5K).

The commentary doesn't explain why revenue fell short in March, July and August, because the data doesn't show the cause. Sales and Operations will need to answer the questions raised in the drivers before the review.