663bf0e925
The slip printed the QR but NOT the Code128 barcode on the Rongta. Root cause: the ~20-char occurrence id (SUBSESS-…) at module width 3 is ~765 dots wide — over the 80mm head's ~576 printable dots — so the firmware silently aborts the barcode (prints nothing). It was also emitted while ALIGN_CENTER (set for the title) was active, which shifts the start point right and makes it overflow even sooner. The QR, being compact, rendered fine — hence QR-only output. code128() now takes a moduleWidth (default 3, so the shorter entry-ticket id is unchanged) and forces ALIGN_LEFT (a wide barcode must hug the margin). The slip passes width 2 (~510 dots — fits with quiet zones) and re-centers the QR/text after. renderReceipt's voucher barcode re-asserts ALIGN_CENTER for the lines that follow it. Verified: width n=2 in the byte stream, est 510 dots; Code128 + QR both present; build+lint 14/14. Claude-Session: https://claude.ai/code/session_01Xcm6ikLgGoCxxHrxtjkk5V