Skip to content

chore: dependency + CI modernization, security audit, GEO/SEO descriptions#898

Merged
yfedoseev merged 7 commits into
mainfrom
chore/dependency-and-ci-modernization
Jul 19, 2026
Merged

chore: dependency + CI modernization, security audit, GEO/SEO descriptions#898
yfedoseev merged 7 commits into
mainfrom
chore/dependency-and-ci-modernization

Conversation

@yfedoseev

Copy link
Copy Markdown
Owner

Housekeeping sweep: unify CI action versions, refresh dependencies, drop EOL Python 3.8, and standardize package descriptions for SEO/GEO — all claims data-backed by the existing benchmark table.

CI — unify pinned action versions (14 workflows)

Several workflows lagged on older action SHAs, so the same action ran at two majors across the repo — the drift that keeps regenerating dependabot noise and leaves node20-era stragglers.

  • actions/checkout v6.0.3 → v7.0.0 (12 workflows)
  • actions/setup-python v5 → v6.2.0 (3 workflows)
  • actions/setup-java stale # v4 comment → # v5.5.0 (SHA unchanged)

Dependencies

  • Cargo.lock refreshed (~50 in-semver bumps). MSRV-safe: kstring 2.0.4 (needs Rust 1.96) only enters via optional tract-onnx OCR, not in default features, so the cargo build --lib MSRV(1.88) job never compiles it.

Security audit — all clean

  • cargo audit — 0 vulnerabilities. 3 unmaintained warnings (allow-listed): rustybuzz, ttf-parser, macro_rules_attribute; both ttf-parser 0.25 / rustybuzz 0.20 are already latest, no upgrade path.
  • pip-audit — no known vulnerabilities.
  • npm audit (js/) — clean; the brace-expansion flag was a stale local node_modules, the committed lockfile already pins the fixed 5.0.7.

Python — drop EOL 3.8

  • requires-python >=3.8 → >=3.9, drop 3.8 classifier
  • ruff target-version py38 → py39, re-enable UP (pyupgrade); applied the resulting modernizations (forward-ref annotations, f-string)

SEO/GEO — standardize descriptions (13 tracked manifests)

Propagate the README's data-backed positioning ("5× faster than the industry leaders", 0.8ms mean, 100% pass rate on 3,830 real-world PDFs) to every binding that was still generic. No competitor named by reference (no PyMuPDF / pdf_extract / oxidize_pdf); the pymupdf-alternative search keyword is kept (migration-intent SEO). README left as-is.

  • Fixed: wasm-pkg-web* mislabeled themselves "Rust library"; root composer.json mislabeled "for PHP".
  • R DESCRIPTION kept pure-ASCII for CRAN.

Note: wasm-pkg-web/ and wasm-pkg-web-ocr/ are fully gitignored build-output dirs — their package.json descriptions are generated at build time, so those two need the build/publish pipeline updated separately to take effect.

https://claude.ai/code/session_01QXMiKnxkmFs3tCQNz1vMc5

Several workflows lagged behind on older action SHAs, so the same action
ran at two different majors across the repo — the drift that keeps
regenerating dependabot noise and leaves node20-era stragglers.

- actions/checkout v6.0.3 -> v7.0.0 (12 workflows)
- actions/setup-python v5 -> v6.2.0 (3 workflows)
- actions/setup-java: stale "# v4" comment -> "# v5.5.0" (SHA unchanged)

Claude-Session: https://claude.ai/code/session_01QXMiKnxkmFs3tCQNz1vMc5
`cargo update` — ~50 in-semver dependency bumps. MSRV-safe: the one
bump requiring newer Rust (kstring 2.0.4 -> 1.96) only enters via the
optional tract-onnx OCR path, which is not in default features, so the
`cargo build --lib` MSRV(1.88) job never compiles it.

Claude-Session: https://claude.ai/code/session_01QXMiKnxkmFs3tCQNz1vMc5
Python 3.8 has been EOL since Oct 2024.

- requires-python ">=3.8" -> ">=3.9"; drop 3.8 classifier
- ruff target-version py38 -> py39; re-enable the UP (pyupgrade) rules
- apply the resulting modernizations (forward-ref annotations, f-string)

(pyproject also carries its GEO description update from the SEO pass.)

Claude-Session: https://claude.ai/code/session_01QXMiKnxkmFs3tCQNz1vMc5
Propagate the README's data-backed positioning ("5x faster than the
industry leaders", 0.8ms mean, 100% pass rate on 3,830 real-world PDFs)
to every binding manifest that was still generic. No competitor named by
reference; all claims backed by the existing benchmark table.

- 13 manifests brought to one GEO formula (Rust, Node, WASM x3, Ruby,
  PHP x2, ObjC, Kotlin, .NET, Dart, R)
- fix: wasm-pkg-web* mislabeled themselves "Rust library"; root
  composer.json mislabeled "for PHP"
- R DESCRIPTION kept pure-ASCII for CRAN

Claude-Session: https://claude.ai/code/session_01QXMiKnxkmFs3tCQNz1vMc5
#898's stricter ruff config + py3.9 floor flagged pre-existing scripts:
Tuple/Dict/List -> tuple/dict/list, Optional[X] -> X | None, and
collections.abc imports. Both remain runtime-clean (from __future__
import annotations present). Type hints only, no behavior change.

Claude-Session: https://claude.ai/code/session_01VfT1dvLWaMNh4SpaXV8kcp
#898 raised the Python floor to 3.9 (3.8 is EOL) but left 3.8 in the
CI test matrices, so the 3.8 job built the abi3 wheel then failed to
install it ("3.8.10 not in '>=3.9'"). Remove 3.8 from python.yml and
ci.yml matrices. abi3 wheels remain forward-compatible; no code change.

Claude-Session: https://claude.ai/code/session_01VfT1dvLWaMNh4SpaXV8kcp
@yfedoseev
yfedoseev merged commit 704d9a1 into main Jul 19, 2026
232 checks passed
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.

1 participant