v1.0.0 — no more stubs: full LWW/Ovid flow + generic form login
The public edition is now complete — every route kind ships working code. What had been "documented stubs" (the LWW/Ovid multi-step signed-URL flow and login()) is now real, config-driven code:
- Full LWW/Ovid route: resolver → article number → viewer → signed
pdfUrlwith the exact Referer chain, an Ovid-OCE fallback for ahead-of-print articles, concurrent-licence-seat (E3) back-off, and a classic-Ovid branch that resolves the licensed platform via the standard SFX detailed-XML API. - Generic form login (
auth:in config.yaml): covers EZproxy and NetScaler/Django-style gates out of the box — selectors, optional offline numeric-CAPTCHA OCR, persisted session cookies, and per-subdomain proxy-handshake inline login. SSO gates (OpenAthens/Shibboleth) remainauth.family: custom. - Unified
ROUTEStable (kind: tpl | meta | lww) — adding a publisher is one line. routesCLI: per-route scorecard with entitlement attached to every failure, plus a holdings-gap list.- Entitlement gate in
run_fetch: warns when the article's year is outside coverage before you misread the failure as a broken route.
Full details and the migration notes (PROVIDER_ROUTES → ROUTES) in the CHANGELOG.