I've written the full-year commentary to `output/bva-note.md`, and the script's figures are in `output/bva.json`. The script's built-in checks passed: the P&L lines add up and the variances agree with the totals. Every figure in the note is copied from the script's output.

**Headline:** FY2025 revenue was $11.2M against a $11.6M budget, unfavourable by ($362K), or (3.1%). Operating income was $388K against $583K, unfavourable by ($195K), or (33.5%).

**What the note says:**
- **Revenue miss came from three months:** March ($123K), July ($132K) and August ($105K). Every other month was within $7K of budget.
- **Margin:** cost of goods sold was favourable by $196K, which partly offset the revenue miss. Gross profit still came in ($194K) under budget, and gross margin was 25.9% against 26.8%, a gap of (0.9) pts.
- **Operating expenses were on budget, at ($649):** overspends in salaries ($38K), freight ($29K) and rent ($23K) were offset by underspends in marketing ($38K) and technology ($25K).
- **Professional fees:** the overspend reached ($31K) in March but ended the year at ($1K), so the early overrun was timing.
- **December:** revenue was $3K over budget, but operating income was ($5K) under it because cost of goods sold ran ($8K) over.

The P&L doesn't show why revenue fell short in March, July and August. The note asks Sales to explain those months rather than guessing. It also asks Operations whether the cost-of-goods saving came from lower volume or from cheaper units.