Repository navigation
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
- No code change is required. All old signatures still work.
- Recommended, if you render groups to PDF, DOCX, CSV, or XLSX: call
preparedRedactedRecords(_:conversation:labels:scope:redactions:)orunredactedPreparedRecords(_:conversation:labels:scope:). These add the roster andExport.knownNames(for:labels:)for you, asrender(_:)does. Thegroup:overloads take the roster alone. - If you re-render as the user changes a range: use
Export.ScopeRendererin place of repeatedExport.render(records:...)calls. - If you script the CLI:
lembic-cli exportnow renders throughExport.render, so note-to-self echoes drop and groups get speaker labels and a header.--sample --contactsnow 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