Conversation
main has not compiled since PR #51 (Bump quick-xml 0.41.0 -> 0.42.0), which was merged 2026-09-05 with a failing build check. Five errors from two breaking changes in quick-xml 0.42: - LocalName now implements AsRef<str> rather than AsRef<[u8]>, so the std::str::from_utf8(...) wrapper no longer type-checks. - BytesText now holds an already-decoded Cow<'i, str>; decode() is gone, replaced by xml10_content()/xml11_content()/html_content(). Behavior is preserved. xml10_content() additionally unescapes entities, but that is unreachable here: quick-xml emits entity references as a separate Event::GeneralRef in both 0.41 and 0.42, and the untouched `_ => {}` arm swallows them either way. That entity-dropping bug is pre-existing and is tracked in docs/PARSEKIT_1_0_PLAN.md for the 1.0 work. 334 examples, 0 failures. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U2V9AiGqoaLwUQzqJAzE1q
Three planning docs ahead of the anydoc conversion:
ANYDOC_EVALUATION.md - what anydoc is, measured against our own fixtures,
where it beats parsekit and where it has no answer
(no OCR, no HTML/XML/JSON/text, scanned PDFs error)
PARSEKIT_1_0_PLAN.md - target architecture, ParseKit::Document API, phased
migration, spec-coverage plan, settled decisions
PARSEKIT_BIN_GEM.md - what the parsekit-bin gem on RubyGems actually is
(a benign Teamtailor fork, not ours, not yankable)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U2V9AiGqoaLwUQzqJAzE1q
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two independent commits. The first unbreaks
main; the second is planning only.1.
maindoes not compile (e82bc41)PR #51 (
Bump quick-xml from 0.41.0 to 0.42.0) was merged 2026-09-05 with a failingbuildcheck.bundle exec rake compilehas failed onmainever since, with 5 errors from two quick-xml 0.42 breaking changes:LocalNamenow implementsAsRef<str>rather thanAsRef<[u8]>, so thestd::str::from_utf8(...)wrapper no longer type-checks.BytesTextnow holds an already-decodedCow<'i, str>;decode()is gone, replaced byxml10_content()/xml11_content()/html_content().7 insertions, 8 deletions. 334 examples, 0 failures.
Behavior is preserved —
xml10_content()additionally unescapes entities, but that path is unreachable here (see the entity bug below).The other seven recent dependabot PRs (#44–#50) all merged green, so this looks like an isolated slip rather than a systemic gap. Worth confirming branch protection requires
buildto pass.This commit can be fast-tracked ahead of reviewing the docs.
2. Planning docs (478ca8e)
Evaluation of
anydocand the resulting 1.0 plan. No code changes.ANYDOC_EVALUATION.mdPARSEKIT_1_0_PLAN.mdParseKit::DocumentAPI, 7-phase migration, spec-coverage plan, settled decisionsPARSEKIT_BIN_GEM.mdparsekit-bingem on RubyGems actually isHeadline findings
anydoc is materially better on office formats. Measured on
spec/fixtures/:sample.docxsample.xlsRuntimeErrorsample.pptxSpeed is a wash (~1.4ms vs ~1.0ms per doc), so correctness and structure are the argument, not performance.
Two more pre-existing bugs surfaced while planning:
<a>Tom &amp; Jerry</a>yields"Tom Jerry".quick-xmlemits entity references as a separateEvent::GeneralRef(in 0.41 and 0.42) and our_ => {}arm swallows them. This matters becauseparse_xmlis code the migration keeps — anydoc has no HTML/XML support.integration_spec.rb:61asserts the.xlsfailure viaraise_error(/Failed to parse Excel file/);integration_spec.rb:24checks for"Table example"(the paragraph label) but never the table's contents, which is exactly how the dropped-table bug stayed green. Both must be inverted during migration, not deleted.Recommendation
Adopt anydoc as the office/PDF engine; keep Tesseract for images and the text/JSON/XML/HTML handlers. Drops MuPDF,
docx-rs,calamine,zip, andregex; deletes ~450 ofparser.rs's 630 lines; adds.doc,.rtf,.odt,.ods,.odp,.epub,.xlsbfor free.parsekit-binNot ours and not yankable — owned by
lucas__domeij, originssh://github.com/Teamtailor/parsekit-bin. Verified benign: source is byte-identical to our0.1.2except a version string and acalaminebump,extconf.rbis unmodified, and the precompiled binary links onlylibSystem/libiconv/libc++with no networking. It exists because they needed precompiled gems in Jan 2026 and we did not ship them until0.2.0in June. Decision: no action against them; instead addaarch64-linuxto our release matrix, the one platform they ship that we do not.🤖 Generated with Claude Code
https://claude.ai/code/session_01U2V9AiGqoaLwUQzqJAzE1q