release: 0.10.2 — footgun 429 accionable + upsert masivo (dev→main)#227
Merged
Conversation
… CI) (#219) `test_comunidades_identicas_entre_dos_runs_pipeline` llamaba a `run_build` sin inyectar `transport`. Como el slice del corpus de ejemplo tiene seeds aceptadas, `run_build` dispara la pasada `cited_by` (ADR 0038 §enrich) contra OpenAlex en vivo → `httpx.ReadTimeout` intermitente en CI, pese a que el módulo se declara "Sin red". Se inyecta un `httpx.MockTransport` vacío (0 citantes) vía el seam `transport` que `run_build` ya expone para tests. La pasada queda no-op determinista y el test, hermético. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore: back-merge release v0.10.1 a dev
#210) Un 429 de OpenAlex subía como httpx.HTTPStatusError pelado, sin pista de causa ni remedio. Ahora seed() y el chaining (fetch_citing, al agotar los reintentos) levantan NetworkError (exit 4) con un mensaje accionable que nombra el email/polite-pool como remedio primario (ADR 0012) y la api_key como opcional. Los demás status y los retryables (5xx) conservan su conducta anterior. - Tests: 429 accionable en seed y en chaining (MockTransport, sin red); contrato de chaining actualizado a NetworkError. - Docs: API.md §2 (OpenAlexSource + fetch_citing) y enmienda datada al ADR 0012. Closes #210 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…able fix(sources): error accionable ante 429 de OpenAlex en seed y chaining (#210)
persist() hacía un execute por fila (O(n) round-trips): 52k filas se colgaban (>150 s). Ahora ingiere la tabla Arrow y hace el upsert en dos sentencias —UPDATE de las filas existentes (UDFs de merge solo en conflictos reales) e INSERT de las nuevas (Arrow vectorizado)—, llevando el fresh insert de 50k de ~minutos a ~0.3 s. Preserva la semántica de merge intacta (provenance append-only, curación "más reciente gana", _seq de ADR 0013/0024): el lote entrante se deduplica-mergeando por id antes del upsert (reusa _merge_rows, misma semántica que el ON CONFLICT viejo), y el _seq de filas nuevas se asigna con ROW_NUMBER() OVER (ORDER BY _row_idx) para orden D3 determinista por primera aparición. - Tests: dedup-merge en lote (provenance acumulada) en persist y overwrite_corpus; orden _seq determinista multi-fila; idempotencia y merge solapado siguen verdes. - El benchmark de escala (50k) queda como @slow, excluido del gate. Closes #211 Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release 0.10.2 (dev → main)
Corte de versión limpia para promocionar la librería. Junta los fixes acumulados en
devdesde 0.10.1. Solofix/perf→ release-please cortará un patch 0.10.2.Incluye
fix(sources): 429 de OpenAlex → error accionable (NetworkErrorexit 4) que apunta al polite-pool/email (ADR 0012) enseedy chaining. Antes subía unHTTPStatusErrorpelado.perf(stores):DuckDBStore.persistdeja de hacer O(n) round-trips; ingiere Arrow + upsert en bloque (fresh insert 50k: ~minutos → ~0.3 s). Semántica de merge preservada (provenance/curación/_seq); dedup-merge del lote.fix(test): idempotencia bit-a-bit dejaba de pegar a OpenAlex en vivo (flake de CI).Tras mergear este PR
release-pleaseabrirá el PR de release 0.10.2 (tag + CHANGELOG + GitHub Release + publish). Ese PR lo mergeás vos.🤖 Generated with Claude Code