I've written the FY2025 budget-vs-actual commentary. The script's checks reconciled, and every figure comes from its output.

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

**Main drivers:**
- **Revenue miss:** It concentrated in March (($123K)), July (($132K)) and August (($105K)). The data doesn't show why, so the note flags those months for sales leadership to explain.
- **Cost of goods sold:** It was favourable by $196K, or 2.4%, against lower revenue. Freight out was unfavourable by ($29K), or (8.3%).
- **Operating costs:** Salaries and wages (($38K)) and Rent and occupancy (($23K)) overran. Marketing (favourable by $38K) and Technology (favourable by $25K) offset them.
- **Professional fees:** They peaked at ($31K) in March and ended the year at ($1K).

The note also has the results table, a December 2025 paragraph and the data source line (120 rows, sha256 `eaa52ac89e97`).

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