- CSV writer: downgrade trailing blank row mismatch from error to warning
when a tall instruction's stripped continuation absorbs extra blank rows on
read-back — fixes
WriterErroron rungs with blank rows beyond an instruction's visual height
- SCR decode: skip pure vertical pass-through rows in implied modifier
row fallback, preventing
|→Tand blank →-corruption on continuation rows - CSV converter: recognize
Contact/CompareContactobjects withwire_down=Trueduring wire hydration, not just bare string tokens
- SCR decode: remove
_implied_modifier_row_offsetsfallback — SCR continuation row topology already encodes per-row horizontal connectivity explicitly, verified across 883 rungs in 47 SCR files
- SCR decode: replace backward/brute-force topology block scanning with a single forward pass, fixing false positive matches from flag-table tail bytes that caused spurious empty rungs with inflated row counts
- Encode: remove AF summary block — Click accepts multi-AF rungs without it, eliminating complex gating logic
- CSV: consolidate tall-instruction padding into shared hydrate/dehydrate helpers in converter and writer
- Devtools:
combine_coverage.py— combine random coverage fixtures into a single multi-row rung for paste smoke-testing - Devtools:
coverage_golden.pynow regenerates all bins unconditionally
- CSV: preserve multi-row AF round-trips, including pinned/tall AF blocks away from row 0, multiple tall blocks in one rung, and generic tall continuation rows
- SCR decode: restore omitted wiring for generic tall AF continuation rows
- CSV writer: fail loudly when emitted CSV rows lose decoded rung semantics by reparsing writer output and checking for row, condition, or AF mismatches before writing to disk
- RTF decode: parse RTF comments structurally instead of regex-based stripping, handling nested groups, font/color tables, and style toggles correctly
- RTF decode: handle
\uNunicode escape sequences (signed 16-bit) and validateansicpg1252before decoding - CSV: preserve quoted string literals in AF token positional args — e.g.
copy("d",TXT1)no longer loses its quotes during parse - Search instruction: store text-search operands with quotes end-to-end, removing the strip-on-decode/re-add-on-encode anti-pattern
- Encode: auto-sanitize non-ASCII characters (curly quotes, em-dashes, arrows, etc.) in rung comments before RTF conversion via NFKD normalization
- Math: preserve duplicate operands and normalize parenthesis spacing
- Encode: correct
row_spanfor tall AF instructions and single-rung list routing
Initial release. Originally prototyped in clicknick, then developed into a standalone library here.
- Encode
Rungobjects or CSV into Click clipboard binary - Decode clipboard binary back into structured Python objects
- Decode
Scr*.tmpprogram files intoProgramobjects - All standard Click instruction types supported natively
RawInstructionpassthrough for unknown blob types- Zero runtime dependencies