I've written the FY2025 budget-versus-actual commentary to `output/bva-note.md`, with the underlying figures in `output/bva.json`. The script reported that the variances reconcile, and every figure in the note is copied from its output.

**Headline:** FY2025 revenue 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:** most of the miss came in three months: March ($123K), July ($132K) and August ($105K). Customer-level revenue for those months would show which accounts slipped.
- **Cost of goods sold** was favourable by $196K, or 2.4%, but gross margin still fell (0.9) pts. Freight out was unfavourable by ($29K), or (8.3%).
- **Operating expenses** ended ($649) against budget. 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.
- **Professional fees** were a timing variance: ($31K) at its peak in March, ($1K) by year end.

December alone was close to budget: revenue was favourable by $3K and operating income unfavourable by ($5K).

The data doesn't show why revenue fell short in March, July and August, or why freight cost more. The note says so and names who to ask, Sales and Operations, rather than guessing.

The script generated the note's wording outside the Drivers section, and I left it unchanged. In two places it says "unfavourable by" in front of a figure already in parentheses, for example "unfavourable by ($362K)". You may want to tidy that phrasing before the operating review.