# Reproducible correctness oracle and local/CI test toolchain.
# Bump parsel+lxml+cssselect together and rerun the full differential soak deliberately.
parsel==1.11.0
lxml==6.1.1
cssselect==1.5.0
maturin==1.14.1
web-poet==0.24.1
pytest==9.1.1
# used directly by the web-poet tests (also a transitive web-poet dep); pin it explicitly
attrs==26.1.0
# andi is a web-poet dependency, but `tests/test_python.py` uses `andi.plan` DIRECTLY as the oracle for
# injectability — the exact question scrapy-poet asks — so it is pinned like the oracle it is.
andi==0.8.0
# The package ships `py.typed`, which makes its annotations a PROMISE to every user's type checker.
# `tests/test_typing.py` is what checks that promise: `field()` used to annotate as the internal marker
# class, so correct code (`x: str = page.name`) was an error in the user's CI and nothing here noticed.
mypy==2.3.0

# The web-poet integration's oracle (tools/diff_webpoet.py). `zyte-common-items` is the primary
# consumer of `frostwork.webpoet`, and its absence here is why the strings-only processor bug could
# not be caught: no gate could see the library it breaks. The four below are transitive, but each
# PRODUCES an expected value the gate compares against — clear-html renders `descriptionHtml`,
# zyte-parsers renders breadcrumbs/rating/brand/gtin, price-parser renders prices, html-text renders
# `description`. A bump in any of them moves a verdict, so they are pinned like the oracle they are.
zyte-common-items==0.29.0
# Scrapy and scrapy-poet are deliberately NOT here, and the reason is the opposite of the one above.
# The integration defect at that boundary was injectability — `FrostFields` was built on web-poet's
# `Extractor`, which is not `Injectable`, so andi omitted the callback argument silently. That question is
# answered by `web_poet.pages.is_injectable` and `andi.plan`, both of which are already installed (andi is
# a web-poet dependency), and `tests/test_python.py` asks it exactly the way scrapy-poet does. Pinning
# Scrapy + Twisted to gate a layer this repository contains no code for would be a large test dependency
# asserting a version matrix nothing here exercises; README.md says so rather than implying otherwise.
clear-html==0.5.0
zyte-parsers==0.6.0
price-parser==0.5.1
html-text==0.7.1
