I've written the December 2025 narrative to `output/mbr-narrative.md`, and the script's figures are in `output/mbr.json`. The script confirmed the figures reconcile before it wrote them.

- **December was close to budget on revenue but missed on operating income.** Revenue was $827K against a budget of $824K. Operating income was $8K against $13K, a variance of ($5K).
- **Costs of goods sold drove the miss.** Gross margin was 26.1% against 26.8%, (0.7) points below budget. Operating expenses were on budget. The biggest single line miss was Other operating, at $16K against $10K.
- **The year to date is behind budget.** Revenue is $11.2M against $11.6M, a shortfall of ($362K). Operating income is $388K against $583K. Cost of goods sold is $196K under budget for the year, so December's overrun goes against the full-year pattern.
- **Four of eight KPIs are off target.** Days sales outstanding and on-time delivery have each missed for 3 months. Active customers has missed for 2 months and inventory turns for 1.

In the Drivers section, the cost of goods sold line ($584K) is smaller than the cost of goods sold total in the Month table ($611K). The total includes other cost lines, and the narrative says so.

I left out any reasons for these movements because the P&L and KPI files don't show them.