KitForma file checks lab — measured 8 October 2026 Original measurements: results.json and results.csv. CSV inputs/outputs and exact cell arrays are included. Images: geometry-source.png (2400x1600), geometry-{fit,crop,stretch}.png, flat-source.png and texture-source.png (both 1200x800), plus four JPEG qualities each. REPRODUCE 1. Extract this archive into an empty directory. Install Node.js 24 or newer. 2. Run: npm install 3. Run: node run-lab.mjs 4. Inspect rerun/results.json and rerun/results.csv. The rerun writes only to rerun/ and preserves the published results. The one declared dependency is @napi-rs/canvas 1.0.9. npm install uses the network. The experiment itself does not upload data or call a service. Original runtime: {"node":"v24.19.0","platform":"win32","arch":"x64","canvas":"1.0.9"}. engine.mjs is an esbuild snapshot of the actual KitForma engines. engine-sources.json contains source and bundle SHA-256 hashes; source/ contains the input TypeScript files. HEIC code is not exercised and no HEIC dependency is installed. KitForma code is MIT licensed; the bundled font license is LICENSE_LIBERATION. METHOD Four valid tiny CSV cases each have two data records, three columns and a header. Hand-written expected outputs AND hand-written semantic matrices are asserted. One unclosed quote is expected to be rejected. Literal replacement is a negative comparison on the same samples; it is not a competing product. CSV output uses CRLF between records, strips an initial BOM and omits the final record terminator; embedded line endings stay part of cells. The geometric input is newly generated for this run. Fit and stretch call processImage directly. Crop first uses drawImage with x=400,y=0,w=1600,h=1600, then processImage. Resize alone does not crop. JPEG quality values are 40,60,80,95. No targetKB is used, so dimensions stay fixed. Bytes come from saved buffers; dimensions come from decoding output files. The 100000-byte comparison is an illustrative strict limit, not a website policy. LIMITATIONS - Four tiny valid CSV cases and one malformed input; not a conformance suite, spreadsheet import test, or throughput benchmark. - Expected CSV output strings and semantic cells are hand-specified; the production parser also checks round trips. BOM and final record terminator are not retained by CSV serialization. - Two artificial image profiles; no photographs, EXIF, transparency, animation, HEIC, or color-management test. - Native Canvas encoders can differ from browsers and other versions. Byte counts and hashes describe these saved files only. - Circle bounds count exact teal pixels and exclude antialiased edge pixels; comparison tolerance is two pixels. - No OCR, paid services, upload-destination acceptance test, visual quality score, or competitor comparison. Official references, reviewed 8 October 2026: https://www.rfc-editor.org/rfc/rfc4180 https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/drawImage