Tarik Moussa
c33fd9d697
feat: merge F-03 parsing layer (LaTeX, Nougat, GROBID)
...
Review-Gate: APPROVE (Opus, cold, 2 passes)
23 tests, ruff+mypy clean.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-05 06:48:49 +02:00
Tarik Moussa
52737abe3d
fix(sources): correct OpenAlex ID prefixing, citations endpoint, S2 rate-limit
...
Review-Gate findings:
- openalex: bare DOIs/arXiv IDs need doi:/arxiv: prefix (bare IDs 404);
add _resolve_id(); fix fetch_citations to use referenced_works field
instead of non-existent /works/{id}/references endpoint.
- semanticscholar: wait_fixed(1) was inter-retry only; add per-request
monotonic rate-limiter (_rate_limit()) before each httpx call.
Add _is_retryable() filter so 404s don't burn 5 retry slots.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 23:49:35 +02:00
Tarik Moussa
d1ffea1c1c
fix(parsing): case-insensitive arXiv idno match; fix tmp_path types; add extract_structure test
...
Review-Gate finding: GROBID emits type="arXiv" (camel-case), not "arxiv".
XPath literal match silently returned empty strings for all real responses.
Fix: iterate idno elements and compare .lower() == "arxiv".
Test fixture updated to reflect real GROBID output (type="arXiv").
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 23:47:18 +02:00
Tarik Moussa
b7f19b6e2c
feat(sources): OpenAlex, SemanticScholar, arXiv API clients
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 23:31:15 +02:00
Tarik Moussa
c6a428d335
feat(parsing): LaTeX, Nougat, GROBID parsers with chunking
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 23:30:58 +02:00