Skip to content

feat(documents): markkit as default Office converter, deprecate office - #183

Merged
chaliy merged 2 commits into
mainfrom
claude/project-thread-gtqhrp
Oct 12, 2026
Merged

chaliy merged 2 commits into
mainfrom
claude/project-thread-gtqhrp

Conversation

@chaliy

@chaliy chaliy commented Oct 12, 2026

Copy link
Copy Markdown
Contributor

What changed

markkit (0.1.0, crates.io) becomes the default Office backend. The in-crate office converter from #181 is deprecated and off by default.

  • New docs-markkit feature, on by default. It adds MarkkitConverter (name markkit, local) for DOCX, XLSX/XLSM, XLS and ODS.
    • Extraction methods are markkit_docx, markkit_xlsx, markkit_xls and markkit_ods.
    • Limits are tuned with MarkkitConverter::with_markkit(Markkit::builder()…). Markkit and MarkkitBuilder are re-exported from fetchkit::documents.
  • Feature defaults: docs-pdf + docs-office becomes docs-pdf + docs-markkit. docs-all now includes markkit and excludes office.
  • OfficeConverter is #[deprecated]. It still works behind docs-office, and when that feature is enabled it runs after markkit as a fallback.
  • Settings, CLI and Python: --converter markkit / converters=["markkit"] are accepted. When a feature is missing, the error says so.
  • markkit is built without its HTTP client, and the only reqwest in the tree is fetchkit's own.

Why

The repo owner decided that #181's in-crate Office parsing is not the implementation to keep. Office parsing moves to markkit, which fetchkit's design already planned as a pluggable backend. markkit has zip-bomb, archive and spreadsheet-grid limits, and it skips hidden sheets by default.

Before / After

Before (default build): fetchkit fetch …/demo.docx gave extraction_method: "office_docx".

After:

$ fetchkit fetch https://calibre-ebook.com/downloads/demos/demo.docx
quality_score: 1.00
extraction_method: "markkit_docx"
---
# Demonstration of DOCX support in calibre
…
| ITEM | NEEDED |
| Books | 1 |

Local files: .xlsx gives markkit_xlsx (with a hidden_sheet_skipped warning), .xls gives markkit_xls, .ods gives markkit_ods, and a large sheet carries a truncated_sheet warning. Legacy .doc is still rejected with "DOC conversion is not enabled".

Risk

  • Medium. Unreleased API change on top of feat(documents): pluggable document conversion with converter chain #182.
  • PPTX and XLSB are no longer converted by default, because markkit doesn't support them yet. Enabling docs-office restores them.
  • Spreadsheet titles are no longer extracted.
  • markkit's default sheet caps are looser: 10,000 rows × 256 columns, where office used 1,000 × 50. Output is still capped by max_body_size.
  • New transitive crates: cfb, uuid, regex, anyhow, mime, unicode-segmentation.

Checklist

  • Unit tests are passed: cargo test --workspace, plus feature sets with no defaults, docs-markkit only, and docs-all,docs-office. clippy -D warnings passes across the same sets.
  • Smoke tests are passed: the release CLI on a real DOCX, and local XLSX/XLS/ODS files.
  • Documentation is updated: README, CHANGELOG (Added and Deprecated), docs/hardening.md.
  • Knowledge is up to date and not in conflict: fetchers, tool contract, TM-DOS-008, and the log. check_okf.py passes.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Y2vd61x8kbPtmDxze9Q4Gi


Generated by Claude Code

Add MarkkitConverter (docs-markkit, default) converting DOCX, XLSX/XLSM,
XLS and ODS through the markkit crate on the shared blocking path, with
limits tunable via MarkkitConverter::with_markkit. Register `markkit` in
DocumentConversionSettings. Deprecate OfficeConverter: docs-office is no
longer default nor part of docs-all; when enabled it runs after markkit
and remains the only PPTX/XLSB backend. Gate the PDF integration test on
docs-pdf.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y2vd61x8kbPtmDxze9Q4Gi
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y2vd61x8kbPtmDxze9Q4Gi
@chaliy
chaliy merged commit 0d2f262 into main Oct 12, 2026
12 checks passed
@chaliy
chaliy deleted the claude/project-thread-gtqhrp branch October 12, 2026 19:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants