Liberar dev → main (v0.11.0)#246
Merged
Merged
Conversation
docs(adr): 0041 documentación por superficie de entrega Registra la decisión de organizar la documentación por superficie de entrega (no por tipo de lector): los tres usuarios = dos superficies + un mediador. Mantener Diátaxis (no forkear el sitio por audiencia), publicar llms.txt derivado en la raíz del sitio como puerta para IA externa (ChatGPT/Minimax con herramientas+Python), persona como veneer de navegación (3 puertas por intención, 1 cuerpo), y subir AGENTS.md al nav. La operación-por-IA es objetivo de diseño de primera clase. @ Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…el porqué) (#225) Afina la convención: los comentarios se justifican solo si dan un porqué no obvio, vigente y escaso; los docstrings son el lugar del qué. Cortar: parafraseo del qué, desactualizados, banners separadores y refs ADR/issue peladas. Conservar el porqué (incl. la ref ADR cuando viene con explicación). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…le (#225) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rios # Conflicts: # src/bib2graph/backends/duckdb.py
) (#223) * docs(adr): anotar supersesión de D1 por 0036 en 0013 (#222) El header de 0013 listaba reencuadres (0015) pero no apuntaba a 0036, que invirtió la precedencia del `id` (D1) de `openalex_id`-first a `doi: > source_id(src:) > tt:` (AS-BUILT 0.8, verificable en `corpus.py:90-103`). Se añade nota de supersesión fechada en el header; el cuerpo de D1 queda como historia (regla de inmutabilidad del registro). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(adr): aclarar autoridad de schema (paridad verificada) en 0023 (#222) El §3 declara `PaperRow` autoritativa y dice que `CORPUS_SCHEMA` se "deriva/verifica" de ella; el AS-BUILT invierte la dirección de autoridad: `CORPUS_SCHEMA` (Arrow) es autoritativa y `PaperRow` se alinea, conservando la verificación (`assert_schema_parity()` en `schemas.py`) y descartando la derivación. Se añade enmienda AS-BUILT fechada; el texto del §3 queda como historia. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(cli): corregir conteo y listado de subcomandos en docstrings (#222) El docstring del módulo decía "Subcomandos planos (17)" con un listado inconsistente y desfasado; el real son 16 planos + 4 grupos. Se reescribe con la taxonomía verificada contra los `add_command` y `emit_deprecation`: 10 verbos del ciclo + `skill` (meta, ADR 0039) + 9 aliases deprecados (accept/reject/filter/enrich/inspect/monitor/networks/resolve/restore, cierran en 0.11.0 por ADR 0037/0038). Se anota que `gui` fue retirado (ADR 0040). Se alinea también el docstring del grupo `b2g`. Solo comentarios; sin cambio de comportamiento. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(adr): punteros hacia adelante en 0005 y 0021 (#222) Los cuerpos históricos quedaron desfasados: 0005 lista `pandas` en el núcleo (migró a Arrow/`pyarrow` por 0006) y 0021 habla de 11/12 subcomandos (consolidados a 10 verbos por 0037/0038; envelope/exit/FSM intactos). Se añade en cada header una anotación corta apuntando al ADR que reencuadra; los cuerpos quedan como historia. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…209) (#231) decorate_graph ahora inyecta doi (desde Col.DOI, ya normalizado) y una url derivada (https://doi.org/<doi>) en los nodos de paper-kinds (bibliographic_coupling y cocitation), solo cuando hay DOI — mismo criterio de ausencia que year. Los nodos de autor/institución/keyword no los reciben. Cierra el "último kilómetro": el archivo de relaciones ahora es navegable hasta el paper sin re-unir a mano contra el corpus. Reusa la misma pasada Arrow de _build_paper_index (sin acceso nuevo al store). Los exporters CSV y GraphML los propagan automáticamente (genéricos / omiten None) — sin cambios en exporters. - Tests: doi/url en nodo con DOI; sin url basura cuando falta; no se filtra a nodos de autor; CSV y GraphML (round-trip real) los incluyen. - Docs: API.md §7.1 (atributos de decoración) y §9 (CsvExporter). Closes #209 Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…os neutrales (#175) (#232) Eliminada la duplicación byte-a-byte entre cli/_ingest.py y service/snapshot.py (footgun de drift: cambiar un umbral en un lado hacía diverger el camino de snapshot restore). - preprocessors/pipeline.py: fuente canónica de normalize_and_dedup + THRESHOLD_AUTHORS (0.92) / THRESHOLD_KEYWORDS (0.90), exportados desde bib2graph.preprocessors. - service/store.py: fuente canónica de open_store. - cli/_ingest.py y cli/_store.py quedan como thin re-exports (el import público viejo sigue funcionando; no breaking). - service/snapshot.py importa de los módulos neutrales. Sin cambio de conducta (umbrales y secuencia idénticos, verificado contra el historial; StoreError es la misma clase). Layering ADR 0028 respetado: cli→service→preprocessors, nunca al revés. - Tests: 2 anti-drift que sellan el umbral único y la identidad del re-export; los existentes sin tocar, todos verdes. - Docs: API.md §11 (ruta canónica + nota de compat). Closes #175 Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
#234) Implementa la norma de notas personales: las notas privadas del PO viven en rutas ignoradas y el agente nunca las sube. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…rios # Conflicts: # src/bib2graph/service/snapshot.py
chore: limpieza total de comentarios en src/ + política en AGENTS.md (#225)
…212) (#236) El id canónico es lossy (oculta el DOI tras un hash). Estos helpers dan una vía pública y documentada para recuperar el DOI/URL desde el id sin re-implementar el mapa a mano (opción 1 del issue; la opción 3 —id reversible— queda para Discussion porque toca identidad). - resolve_doi(ws, paper_id) -> str | None y resolve_url(ws, paper_id) -> str | None en service/reads.py, expuestos en bib2graph.service. Sin red, sobre el corpus cargado. Devuelven None (no lanzan) si el id no existe, no tiene DOI, o el DOI es cadena vacía. - Derivación doi→url extraída a doi_to_url() en constants.py como fuente ÚNICA, compartida con networks/decorate.py (#209) — evita drift (lección de #175). decorate.py ahora la reusa sin cambiar conducta. - Tests: con DOI, sin DOI, DOI vacío (→None), id inexistente, exposición en service, y consistencia con la derivación de #209. - Docs: API.md §0.1 (reads) y §8 (nota de url de redes). Closes #212 Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
- Add tutorial 'Tu primera red bibliométrica con Claude' (claude-code.md): step-by-step guide for using bib2graph in Claude web without installation - Add guide 'Cómo elaborar un reporte de estado del arte' (reporte-estado-del-arte.md): 10-step recipe for building rigorous SOTA reports with PRISMA curation, network analysis, community identification, and trend analysis - Update tutoriales/index.md to reference new tutorial - Update guias/index.md to reference new guide Both documents use neutral tone (removed second-person "vos") and include concrete examples, checklists, and connections to other documentation. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VfqH92jLCoRQ9G8AMA1Vgi
…adas (#235) (#237) Hueco de cobertura señalado por el verifier de #211: los tests de orden D3 cubrían filas nuevas sin duplicados, pero faltaba el caso combinado de un id que reaparece DESPUÉS de filas nuevas. El nuevo test verifica que un id duplicado intercalado ([A,B,A,C]) conserva su PRIMERA aparición (→ [A,B,C]), no la última. El código ya era correcto; esto sella el invariante. Parte 1 de #235. La parte 2 (benchmark @slow huérfano sin job de CI) queda para decisión del PO (infra). Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
- Rewrite 'Tu primera red bibliométrica en Claude' as a 5-minute quickstart for non-technical users: no installation, pure conversation with Claude - Add 'De la pregunta al reporte de SOTA' — complete step-by-step tutorial: from research question through documentation, PRISMA curation, 3 networks, community analysis, trend identification, and report writing - Update tutoriales/index.md to reflect two-level structure: "Para empezar (5min)" and "Tutorial completo (3-4h)" - Update docs/index.md to distinguish Tutoriales (learning) from Guías (recipes) Structure: short entry → builds to comprehensive, maintaining pedagogical flow Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VfqH92jLCoRQ9G8AMA1Vgi
Language changes: - Remove Argentine Spanish (vos, mostrá, armá, etc.) - Adopt Colombian Spanish with tú (neutral, professional tone) - Examples: "armá" → "arma", "mostrá" → "muestra", "Mostrame" → "Muestra" Content restructuring: - Add Paso 0 to tutorials: install bib2graph with pip - Teach b2g CLI as foundation, not just Claude/ChatGPT - Remove vendor locking: explain users can use Claude, ChatGPT, MiniMax, etc. - Show CLI commands first: b2g init, b2g seed, b2g build, etc. - Explain that agentes help but CLI is the core skill to learn - Workflow: install → learn CLI → use agente to help direct CLI Structure now: 1. Quick start (5 min) - install bib2graph, basic CLI, then Claude help 2. Complete tutorial (3-4h) - Paso 0 (install) + Paso 1-10 (full SOTA) 3. Guide - reference, complements tutorials This makes documentation vendor-neutral and teaches independent usage. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VfqH92jLCoRQ9G8AMA1Vgi
) curate apply leía el CSV en utf-8 plano, así que un BOM (EF BB BF) —el que Excel-Windows agrega al guardar como UTF-8— pegaba el BOM al primer header ("id") y el comando fallaba con un error engañoso ("falta columna id") aunque la columna estuviera. Rompía el workflow previsto dump→editar en Excel→apply. Fix: leer con encoding utf-8-sig (strippea el BOM si está, idéntico sin él). Mismo criterio Excel-friendly que #214 para la escritura de exports. - Test: curate apply de un CSV con BOM funciona igual que sin BOM (parametrizado). - Docs: API.md (curate apply tolera BOM). Closes #238 Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
- Add landing page to docs/index.md showing 3 usage paths: 1. Without installing (5min) via agent 2. Learning step-by-step (3-4h) via CLI 3. Hybrid (1-2h) CLI + agent - Replace single guide (reporte-estado-del-arte.md) with 5 focused guides: 1. ecuacion-busqueda.md: Boolean structure, synonyms, testing 2. forrajeo.md: When to expand corpus via backward chaining 3. curacion-prisma.md: PRISMA 4 phases, decision criteria, CSV workflow 4. leer-redes.md: Interpret 5 networks, what each reveals 5. reporte.md: Report structure (7 sections), writing tips, examples - Update docs/guias/index.md: new grid layout with all 5 guides Each guide: - Answers 1 specific question (not tutorial, no repetition) - 30min-3h of work, depending - Includes checklists, examples, decision trees - Links to next guide in flow Language: Colombian neutral, tú form User flow: docs/index.md → choose path → tutorials or guides as needed Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VfqH92jLCoRQ9G8AMA1Vgi
Add comprehensive glossary covering: - Bibliometric terms (bibliographic coupling, co-citation, co-authorship) - Methodology (PRISMA phases, Louvain clustering, resolution) - bib2graph concepts (corpus, seed, chain, curate, workspace, NetworkSpec) - General research concepts (reproducibility, benchmark, embedding) - Acronyms (API, CLI, CSV, DOI, FSM, IR, JSON, PRISMA, SOTA, SQL, YAML) Glossary is alphabetized for quick lookup. Each term includes: - Definition - Context in bib2graph - Example or use case - Link to related guides when applicable Update docs/reference/cli.md with tip to glossary Update docs/index.md to mention glossary in Referencia card This completes issue #208: ✅ Tutorial corto (5 min, no técnico) ✅ Tutorial completo (3-4h, paso a paso) ✅ 5 guías acotadas (ecuación, forrajeo, curación, redes, reporte) ✅ Landing con 3 caminos ✅ Glosario (términos y siglas) All docs use Colombian Spanish, neutral tone, tú form. No vendor locking — shows CLI as foundation, agents as helpers. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VfqH92jLCoRQ9G8AMA1Vgi
…al-sota-c7104r docs: add tutorial and guide for documentation improvements
- mkdocs.yml: listar las páginas individuales bajo Tutoriales y Guías (antes solo el index.md, así que no aparecían en la barra de navegación); agregar Glosario bajo Referencia - sota-completo.md: corregir enlace a la guía eliminada reporte-estado-del-arte.md → apuntar al índice de Guías Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VfqH92jLCoRQ9G8AMA1Vgi
chore: back-merge main→dev tras release 0.10.2
…al-sota-c7104r docs: exponer tutoriales y guías en el nav + arreglar enlace roto
Exploración local de IED (datos, scripts, redes, informes); no es parte de la librería. Se saca del control de versiones.
El único ejemplo embebido pasa a ser examples/ciclo-investigación (investigar sobre la propia herramienta). El resto de examples/ deja de versionarse.
Gradúa a decisión registrada que b2g implementa deliberadamente el contrato CLI-para-agentes (extiende 0021, contrato intacto). Declara las relajaciones de trust & safety (principios 4-7 del rubric) como decisión por bajo blast radius, no huecos, y nombra tres grietas como roadmap explícito: subcódigo de red 429/504, eco del workspace resuelto, y b2g schema (introspección versionada). Origen: unificación de dos auditorías independientes contra el Rubric for Agent-Native CLI Design, verificadas as-built con archivo:línea. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sube siete notas de trabajo que estaban sin commitear. Las locales que chocaban en numero con notas existentes se renumeran: - 21-recibo-de-demo-functor-honesto pasa a 27 - 22-marco-software-donde-nos-paramos pasa a 28 Cross-references actualizadas (12 en 3 notas), por nombre de archivo y por numero en prosa. Notas 20, 23, 24, 25, 26 conservan su numero. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
docs(adr): 0043 posiciona el contrato agent-native del CLI
docs(notas): publicar notas 20, 23-28 (renumera recibo a 27, marco a 28)
chore: retirar exploracion/ + examples/ solo trackea ciclo-investigación
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.
Liberar dev → main
PR de integración GitFlow-lite. Mergear con merge commit (no squash) para que release-please compute el tag, el CHANGELOG y la GitHub Release. El bump esperado es minor → 0.11.0 (hay
feat:).Novedades (delta dev↔main, sin merges)
✨ Features (motivan el minor)
doiyurla nodos de paper-kinds y exports (feat(networks): adjuntar doi + url a los nodos del grafo y exports (último kilómetro) #209)id→DOI/URL(resolve_doi/resolve_url) (feat: recuperar DOI/URL desde el id canónico (helpers resolve_doi/resolve_url o id→doi en el snapshot) #212)🐛 Fixes
applytolera CSV con BOM UTF-8 (Excel-Windows) (curate apply falla con CSV con BOM (Excel-Windows) — 'falta columna id' engañoso #238)♻️ Refactor
normalize_and_dedup+ umbrales +open_storea módulos neutrales (refactor: extraer normalize_and_dedup + umbrales + open_store a un módulo neutral (DRY) #175)✅ Tests
📚 Docs / ADRs
schemaversionado, exit codes tipados, self-contained; extiende 0021 sin cambiarlo) (docs(adr): 0043 posiciona el contrato agent-native del CLI #248)🧹 Mantenimiento
src/+ política (chore: limpieza total de comentarios en src/ + política en AGENTS.md #225)exploracion/del repo;examples/solo trackeaciclo-investigación(chore: retirar exploracion/ + examples/ solo trackea ciclo-investigación #247)Explícitamente FUERA de 0.11.0 (va a 0.12.0)
No incluido en este release y no bloquea: PR #250 (Semantic Scholar, ADR 0042), rama
feat/233(precedencia curate, ADR 0044 / PR #257, en espera), migración de fixtures pendiente,ciclo-investigaciónsin commitear.🤖 Generated with Claude Code