I've drafted the December 2025 commentary in `output/mbr-narrative.md`. The figures come from the house MBR script, which saved them to `output/mbr.json`. Its checks passed: operating income rebuilds from the P&L lines, the monthly revenue adds up to the year to date, and the revenue KPI matches P&L revenue.

**The month was about on budget but slightly behind on profit.** Revenue was $827K against a $824K budget. Operating income was $8K against $13K, because gross margin came in at 26.1% against 26.8%, a (0.7) pts gap.

**The year to date is clearly behind budget.** Revenue was $11,238K against $11,600K, a ($362K) shortfall. Operating income was $388K against $583K, ($195K) short. Operating expenses were on budget for the year, so the miss is in gross profit.

**Biggest line variances:**
- **Month:** cost of goods sold was ($6K) over budget and other operating was ($6K) over. Technology was $4K under, which offset most of the other operating overspend.
- **Year to date:** revenue was ($362K) short. Cost of goods sold was $196K under budget, but that didn't protect gross margin. Salaries and wages were ($38K) over; that's in the script output but not in the draft.

**Four of the eight KPIs missed target in December:**
- Days sales outstanding: 51.2 days against 45.0, off target for 3 months.
- On-time delivery: 93.3% against 95.0%, 3 months.
- Active customers: 40 against 42, 2 months.
- Inventory turns: 5.33 against 6.50, first month off target.

The draft doesn't say why any of these happened, because the files don't show causes.

Two things to know before it goes out:
- **The two cost of goods sold figures are different numbers.** The table's cost of goods sold for the month is $611K, but the "Cost of goods sold" line in the drivers is $584K. The P&L seems to have other cost lines that count toward the total. The draft reports both as the script prints them, but a reader may ask about the difference.
- **Some table rows don't add up exactly as shown.** Each amount is rounded on its own. The draft's data notes say so.