Repository navigation
[P0] Declare and enforce a minimum pandoc binary version #54
Description
Activity
Evidence for the open question, and a recommendation
Researched while reviewing #59. This answers the "hard floor vs capability detection" question at the bottom of this issue.
1. Upgrading pandoc is safe. Requiring a recent pandoc is not.
These are two different questions and they have opposite answers.
Do pandoc's own changes 3.7 → 3.10 break us? No. Checked every breaking change in the 3.8, 3.9 and 3.10.1 release notes against what this project actually passes to pandoc:
Breaking change Affects us? Why Haskell API changes ( WriterOptions,CommonState,tableWith)No We shell out to the binary, we do not link the library Lua API: pandoc.readersreturns strings not booleansNo We use --filter(JSON filters), not LuaDrop GHC < 9.6 No Compilation only compact_definition_listsextension removedNo Never enabled --no-highlighting,--highlight-style,--listingsdeprecatedNo Never passed, and deprecated still works Org writer: smart quotes off by default No org is not exposed Our entire pandoc surface is
--reference-doc,--pdf-engine=xelatex,-V geometry:margin=1in,--defaults,--filter. None of them changed.2. The real risk is distro packaging lag
Install method pandoc version ≥ 3.8.3? apt-get install pandoc, Ubuntu 24.04 LTS3.1.3 No apt-get install pandoc, Debian trixie3.1.11.1 No brew install pandoc3.10.1 Yes Our own CI ( apt-get install -y pandoconubuntu-latest)3.1.3 No A hard floor at 3.8.3 would break every Ubuntu LTS and Debian stable user following the install instructions in our own README, and would fail our own CI.
3. Recommendation: per-feature minimums, checked at point of use
Not one global floor. Declare a minimum per capability, and check only when that capability is requested:
PPTX_INPUT_MIN_PANDOC = "3.8.3" if input_format == "pptx" and installed < PPTX_INPUT_MIN_PANDOC: return isError( f"pptx input requires pandoc >= 3.8.3 (released 2025-12-01). You have {installed}. " f"apt on Ubuntu 24.04 ships 3.1.3, so use pandoc's installer or Homebrew. " f"This reader is recent and may not handle every deck." )
Everything else keeps working on pandoc 3.1.3 indefinitely. No breaking change for anyone.
4. Revised acceptance criteria
- A documented, non-enforced baseline in README ("tested against pandoc X"), with the reasoning
- Per-feature minimum constants in
server.py, checked at point of use, not at startup - Error messages name the detected version, the required version, its release date, and where to get it
- Decide: static enum + runtime error, or build the
input_formatenum dynamically from the detected version. Dynamic is the only option that satisfies theAGENTS.mdrule "only enumerate formats verified in the direction being enumerated" -
pypandoc.get_pandoc_version()result cached, not re-shelled per call
Rejected:
pypandoc_binaryBundles a pandoc in the wheel, but uses whichever is higher between bundled and system, so it does not guarantee a version either. PyPI does not document which pandoc 1.17 (2026-03-14) bundles.
Sources: pandoc 3.8 · 3.9 · 3.10.1 · Ubuntu noble · Debian trixie
Links
docs/audits/2026-08-agent-workflow-audit.md→ Finding 9pyproject.tomlpptxin both directions (input requires pandoc >= 3.8.3) #49, and any future format capability claimProblem
The project declares no minimum pandoc binary version.
Neither constrains the binary the user has installed.
pandoc>=2.4is easily mistaken for a binary floor and is not one.Why it matters
Pandoc capabilities change between releases. 3.8.3 added readers for
pptx,xlsx, andasciidoc. So:Acceptance criteria
Open question
Hard floor, or detect capabilities at runtime and gate enum values accordingly. A floor is simpler; detection is friendlier to users on older distro packages.