Skip to content

0.5.0: every format agrees, faster range changes, safer contacts

Latest

Choose a tag to compare

@darecstowell darecstowell released this 15 Oct 02:50
be6e483

LembicKit 0.5.0 makes every export format agree, makes scope changes fast, and closes a contacts gap in Release builds. It has no breaking API changes.

Highlights

PDF, DOCX, CSV, and XLSX now match the .txt. With a scrubber on, the prepared-record APIs can take the group roster, so Member N numbers and anonymize aliases are the same in every format of one export. Before, a group member who never wrote could shift the numbers.

Fast scope changes. The new Export.ScopeRenderer holds one conversation and renders any date range with the same output as Export.render(records:...). It runs the detectors and scrubbers once, not on each change. cancel() stops a pass in progress.

Release builds read only the real Contacts. A Release app no longer reads a bundled DemoData/contacts.vcf or the LEMBIC_CONTACTS variable, so a stray file cannot replace the user's names. Debug builds and the CLI still honor LEMBIC_CONTACTS.

Correct dates, counts, and order. A seconds-era date too large to convert is now an unknown date, not a wrong one. A 1:1 chat with more than one handle row no longer counts each message twice. Conversations with the same last date keep a stable order.

Upgrading from 0.4.0

  1. No code change is required. All old signatures still work.
  2. Recommended, if you render groups to PDF, DOCX, CSV, or XLSX: call preparedRedactedRecords(_:conversation:labels:scope:redactions:) or unredactedPreparedRecords(_:conversation:labels:scope:). These add the roster and Export.knownNames(for:labels:) for you, as render(_:) does. The group: overloads take the roster alone.
  3. If you re-render as the user changes a range: use Export.ScopeRenderer in place of repeated Export.render(records:...) calls.
  4. If you script the CLI: lembic-cli export now renders through Export.render, so note-to-self echoes drop and groups get speaker labels and a header. --sample --contacts now reads Contacts, so a TCC prompt can show.

Also fixed

  • The email ReDoS test no longer fails on a busy machine. It still catches the old slow regex.
  • Internal: one module for body splices, one rule table for detectors, and one schema read per extraction. Output is byte-for-byte the same.

Every change, with details: CHANGELOG.md