Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 46 additions & 42 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,48 +2,52 @@

All notable changes to this project are documented in this file. This changelog follows the [Keep a Changelog](https://keepachangelog.com/) format and covers changes from v0.2.70 onward.

## [Unreleased]

## [0.8.0] - 2026-04-22

### Added

- Added typed LibreOffice workbook handles and session-scoped workbook lifecycle tracking so rich extraction can reuse cached bridge payloads safely while rejecting foreign or closed workbook handles.
- Added a pure-Python OOXML rich backend for `.xlsx` / `.xlsm`, allowing `mode="light"` to emit best-effort shapes, connectors, and charts without Excel COM or LibreOffice.
- Added regression coverage for light-mode OOXML rich extraction, print-area side outputs, per-sheet OOXML drawing failures, and LibreOffice baseline/enrichment fallback behavior.

### Changed

- Changed the `light` mode contract so public API, engine, and CLI paths keep print areas by default and expose the OOXML-rich baseline consistently across `extract`, `process_excel`, and CLI output paths.
- Changed `libreoffice` mode to seed the same OOXML baseline before optional UNO enrichment so non-COM fallback can preserve already recovered rich artifacts.
- Updated ADR/spec/docs/schema artifacts to describe `light` as the pure-Python OOXML-rich baseline and to expose `python_ooxml` backend metadata in serialized models.

### Fixed

- Fixed LibreOffice rich backend workbook lifecycle integration so custom `session_factory` implementations that only support legacy path-based `extract_chart_geometries()` and `extract_draw_page_shapes()` continue to work without `load_workbook()` and `close_workbook()` hooks.
- Fixed OOXML drawing resilience so malformed or corrupt worksheet drawing parts only skip the affected sheet instead of clearing healthy workbook siblings.
- Fixed `process_excel()` and engine filter alignment so `FilterOptions.include_print_areas=None` once again means automatic inclusion instead of an implicit hard-coded override.
- Fixed light/libreoffice review follow-up edge cases by hardening OOXML baseline seeding, streaming worksheet metrics reads, caching cumulative row/column offsets, and correcting stale README / architecture wording.

## [0.7.1] - 2026-03-21

### Added

- Added regression coverage for extraction CLI runtime validation and lightweight import boundaries across `exstruct`, `exstruct.engine`, `exstruct.cli.main`, and `exstruct.cli.edit`.

### Changed

- Changed the extraction CLI so `--auto-page-breaks-dir` is always listed in help output and validated only when the flag is requested at runtime.
- Changed CLI and package import behavior so `exstruct --help`, `exstruct ops list`, `import exstruct`, and `import exstruct.engine` defer heavy extraction, edit, and rendering imports until needed.

### Fixed

- Fixed parser and help startup side effects by removing COM availability probing during extraction CLI parser construction.
- Fixed lazy-export follow-ups so public runtime type hints resolve correctly while keeping exported symbol names stable.
- Fixed edit CLI routing so non-edit argv and lightweight edit paths avoid unnecessary imports such as `exstruct.cli.edit` and `pydantic`.
- Fixed the `validate` subcommand error boundary so `RuntimeError` is no longer converted into handled CLI stderr output.

## [0.7.0] - 2026-03-19
## [Unreleased]

## [0.8.1] - 2026-05-14

- Applied security updates for dependent packages.

## [0.8.0] - 2026-04-22

### Added

- Added typed LibreOffice workbook handles and session-scoped workbook lifecycle tracking so rich extraction can reuse cached bridge payloads safely while rejecting foreign or closed workbook handles.
- Added a pure-Python OOXML rich backend for `.xlsx` / `.xlsm`, allowing `mode="light"` to emit best-effort shapes, connectors, and charts without Excel COM or LibreOffice.
- Added regression coverage for light-mode OOXML rich extraction, print-area side outputs, per-sheet OOXML drawing failures, and LibreOffice baseline/enrichment fallback behavior.

### Changed

- Changed the `light` mode contract so public API, engine, and CLI paths keep print areas by default and expose the OOXML-rich baseline consistently across `extract`, `process_excel`, and CLI output paths.
- Changed `libreoffice` mode to seed the same OOXML baseline before optional UNO enrichment so non-COM fallback can preserve already recovered rich artifacts.
- Updated ADR/spec/docs/schema artifacts to describe `light` as the pure-Python OOXML-rich baseline and to expose `python_ooxml` backend metadata in serialized models.

### Fixed

- Fixed LibreOffice rich backend workbook lifecycle integration so custom `session_factory` implementations that only support legacy path-based `extract_chart_geometries()` and `extract_draw_page_shapes()` continue to work without `load_workbook()` and `close_workbook()` hooks.
- Fixed OOXML drawing resilience so malformed or corrupt worksheet drawing parts only skip the affected sheet instead of clearing healthy workbook siblings.
- Fixed `process_excel()` and engine filter alignment so `FilterOptions.include_print_areas=None` once again means automatic inclusion instead of an implicit hard-coded override.
- Fixed light/libreoffice review follow-up edge cases by hardening OOXML baseline seeding, streaming worksheet metrics reads, caching cumulative row/column offsets, and correcting stale README / architecture wording.

## [0.7.1] - 2026-03-21

### Added

- Added regression coverage for extraction CLI runtime validation and lightweight import boundaries across `exstruct`, `exstruct.engine`, `exstruct.cli.main`, and `exstruct.cli.edit`.

### Changed

- Changed the extraction CLI so `--auto-page-breaks-dir` is always listed in help output and validated only when the flag is requested at runtime.
- Changed CLI and package import behavior so `exstruct --help`, `exstruct ops list`, `import exstruct`, and `import exstruct.engine` defer heavy extraction, edit, and rendering imports until needed.

### Fixed

- Fixed parser and help startup side effects by removing COM availability probing during extraction CLI parser construction.
- Fixed lazy-export follow-ups so public runtime type hints resolve correctly while keeping exported symbol names stable.
- Fixed edit CLI routing so non-edit argv and lightweight edit paths avoid unnecessary imports such as `exstruct.cli.edit` and `pydantic`.
- Fixed the `validate` subcommand error boundary so `RuntimeError` is no longer converted into handled CLI stderr output.

## [0.7.0] - 2026-03-19

### Added

Expand Down
6 changes: 3 additions & 3 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading