Implement thermal label production batch compiler, Python stdlib+installed reportlab/Pillow optional for preview only. Input good.json schema: dpi203|300,width_mm,height_mm,template_zpl,records_csv,id_column,batch_size,reprint_ids optional. Exact bounded ZPL subset ^XA,^XZ,^PW,^LL,^FO,^A0N,^BY,^BCN,^FD,^FS. Field placeholders {{column}} with exact CSV binding. Code128 B data ^FD>: required; reject barcode invocation chars ^~> and nonASCII/control in variable content, and arbitrary printer commands. Template dimensions in DOTS must match mm and declared dpi within rounding1dot; separate300dpi template supplied or add explicit template_dpi scaling mode well documented, no silent dimensional changes. text and Code128 bounding boxes/quiet zones must fit page and not overlap; checksum encodes Code128 B via independent library/data table, preview.svg needs actual decodable barcode bars not placeholder rectangles. Preserve provided unique record IDs and serial values, detect duplicate serial barcodes, batch splitting exactly once, partial reprints only selected existing IDs duplicate-free. Generate batch-001.zpl,etc, reprint.zpl, manifest.json with exactly which records and artifact hashes, preview.svg all records,report.json. Reprint output reuses exact original record-level ZPL bytes. Counts bounded <=1000records <=2MiB input,label dimensions<=300mm; validate unknown keys missing extra CSV cols duplicates formula text, geometry clipping, command injection. This is plain internal serial labels, NOT GS1/regulatory/shipping labels. Independent verify parse generated ZPL values record by record, check count/serial coverage, decode barcode vector with independently tested encoder or available raster decoder, tamper proof not hashes alone. Final physical printer acceptance UNKNOWN no device available. Exact CLI/README supported subset and tests. Source spec https://docs.zebra.com/us/en/printers/software/zpl-pg/c-zpl-zpl-commands/r-zpl-bc.html; Subset B default/explicit >:; ^FD special chars require rejection for our profile. Do not fetch customer content externally. Common API: engine.py process(input_path,empty_output_directory)->dict with status PASS; verify(input_path,output_directory)->True or raises ValueError. Write report.json containing product=slug,status=PASS,metrics,summary,limitations plus exact output manifest hashes. No writes outside assigned product folder and temporary directories for tests. Parent fixtures good.json,bad.json,required.json,parent_acceptance.py,SMOKE.sh immutable. No import of mutable parent app code.