Adds a status table mapping each finding to the commit that resolved it,
and corrects R8's entry: S16 landed anchor replay independently, which is
the design R8 asked for.
Records R9, found while verifying R3. The hit region query_point reports
for a text object is offset from the object's own origin/size by roughly
the font ascent, so probing a LinkText at its own centre returns "empty".
It reproduces at every font scale, so it predates the R3 work, but it
matters more now: R7's highlighting uses those bounds to place overlays.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The project carried three sets of packaging metadata — pyproject.toml
[project], setup.cfg [options] and setup.py kwargs — declaring different
dependencies. pyproject.toml wins under any modern backend, so the wheel
was correct, but the other two said "Pillow, numpy" and reading either
gave the wrong answer about what the library needs.
Reduce setup.cfg to its [flake8] section and setup.py to a setup() shim,
each pointing at pyproject.toml.
Correct the authoritative list while consolidating:
- flask was a runtime dependency but is imported only by the fixture HTTP
server in tests. Every user was installing Flask, Jinja2, Werkzeug,
click, itsdangerous and blinker for nothing.
- ebooklib was a runtime dependency and is never imported by the library;
epub_reader.py uses zipfile + xml.etree directly. Only the tests use it,
to build EPUB fixtures.
- requests was declared required but concrete/image.py imports it lazily
and degrades gracefully when absent, so it belongs in an extra.
- requires-python said >=3.6, which cannot be true: the package uses
dataclasses and `from __future__ import annotations`, both 3.7+, and CI
tests 3.10/3.12/3.13.
Runtime install drops from 7 direct dependencies to 4. Adds test,
remote-images and dev extras, and a CI step that installs into an empty
venv with only the runtime deps and imports every subpackage — this class
of defect is only caught by installing what you ship.
Verified: runtime-only install imports all subpackages; `.[test]` runs the
full suite, 853 passed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Independent review of the codebase at c5c61a3. Records the architectural
verdict and eight findings not covered by LAYOUT_REMEDIATION_SPEC.md,
cross-referencing the existing spec where they overlap.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>