Skip to content

Adeu v1.4.3

Choose a tag to compare

@mkorpela mkorpela released this 01 May 05:41
· 943 commits to main since this release
Immutable release. Only release title and notes can be modified.
7289c32

What's New

Structural Table Edits

We've introduced explicit structural table operations to safely modify DOCX table grids without risking OOXML gridspan corruption.

  • New Intent Models: The DocumentChange API now supports InsertTableRow and DeleteTableRow.
  • Safe Grid Manipulation: The Redline Engine dynamically resolves row modifications using table context instead of brute-force string replacement, explicitly tracking row additions/deletions as native w:ins/w:del tags in the document properties. (Note: Currently supported for disk-based DOCX editing only).

Live Word COM Stabilization

The Windows Live Word interop engine has received a massive architectural overhaul to guarantee extraction and execution parity with the disk-based XML engine.

  • Specific File Targeting: The read_docx and process_document_batch tools now intelligently target specific open files in MS Word by path (falling back to disk if closed), rather than blindly grabbing the active window.
  • The "Reverse Sandwich" Algorithm: Multi-paragraph insertions via COM natively caused catastrophic anchor bleeding and displaced deletions. We introduced a decoupled insertion/deletion algorithm that safely isolates comment anchors and tracks multi-paragraph breaks without corrupting surrounding text or garbling document structure.
  • Pure Comment Redlining: Attaching a comment to identical text (same target and replacement) via COM now intelligently bypasses the text replacement, preventing spurious insertion/deletion pairs from polluting the review pane.
  • Identity Spoofing Support: The engine now actively bypasses M365 enforced identities during live editing via app.Options.UseLocalUserInfo, correctly attributing live tracked changes to the provided Agent's name.

Enhancements & Bug Fixes

Batch Engine & Validation

  • Strict Review Validation: Attempting to accept, reject, or reply to non-existent (fake) IDs now correctly throws a BatchValidationError instead of failing silently or crashing with an AttributeError.
  • Dropped Comments on Multi-Para Inserts: Fixed a bug where comments were dropped when executing multi-paragraph insertions. The engine now anchors comments starting from the deleted text block through to the end of the newly inserted paragraph.
  • Special Content Survival: Deleting or replacing text next to special XML content (like inline images or drawings) no longer silently destroys the image. The engine now physically clones and preserves special elements inside the w:del wrapper.
  • Markdown List Leaks: Fixed a bug where inserting new list items via Markdown (e.g., \n\n* Item or \n\n1. Item) leaked the literal markdown tokens into the final document text.
  • Trailing Deletion Swallowing: Fixed Bug 9 where trailing deletions adjacent to multi-paragraph inserts were silently swallowed.

Ingestion & Diff Accuracy

  • Tracked Formatting Visibility: The ingest.py extraction pipeline now actively parses inline tracked formatting (w:rPrChange). Formatting changes (e.g., bolding a word) are now correctly projected as CriticMarkup for the LLM.
  • Clean View Empty Rows: The extraction pipeline now successfully skips table rows marked for deletion when clean_view=True is requested.
  • Diff Engine Robustness: Fixed a bug where the diff engine failed to detect pure formatting changes (e.g., Bold -> Italic). Fixed another edge case where the diff engine would improperly split mid-markdown token.

Sanitization Safety

  • Zero-Corruption Comment Scrubbing: The sanitize_docx tool has been updated to strictly adhere to Architectural Decision #8. When stripping all comments, it now physically empties the parts but leaves word/comments.xml intact within the OPC package. This prevents MS Word from throwing unrecoverable corruption errors upon opening.
  • Report Routing: Fixed a bug in the Sanitize Report where comment detail lines were accidentally routed to the structural metadata section.