I've written the FY2025 budget-vs-actual commentary to `output/bva-note.md`. The script's figures are in `output/bva.json`, and its reconciliation checks passed.

**Headline:** 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%).

**Drivers in the note:**
- **Revenue miss:** It sat in three months: 2025-07 at ($132K), 2025-03 at ($123K) and 2025-08 at ($105K). Every other month was within single-digit thousands of budget, a statement the script doesn't print, so check it against the CSV.
- **Margin:** Gross margin was (0.9) pts below budget. Freight out was unfavourable by ($29K) even though cost of goods sold was favourable by $196K.
- **Cost lines:**
  - Salaries and wages was the largest unfavourable line at ($38K).
  - Marketing was favourable by $38K and technology by $25K.
  - The data doesn't show whether those underspends are savings or deferred spend.
- **Professional fees:** They peaked at ($31K) in 2025-03 and ended the year at ($1K), so the overspend reversed.

The note flags the questions the data can't answer, such as why the three revenue months missed, the freight run-rate and the rent overrun. The file name, row count (120) and hash are in the data notes.