Skip to content

Liberar dev → main (v0.11.0)#246

Merged
complexluise merged 37 commits into
mainfrom
dev
Jul 1, 2026
Merged

Liberar dev → main (v0.11.0)#246
complexluise merged 37 commits into
mainfrom
dev

Conversation

@complexluise

@complexluise complexluise commented Jun 30, 2026

Copy link
Copy Markdown
Owner

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:).

⚠️ Reemplaza/absorbe el release PR abierto de 0.10.3 (docs-only): al mergear esto, release-please recomputa la versión a 0.11.0 incluyendo features + docs.

Novedades (delta dev↔main, sin merges)

✨ Features (motivan el minor)

🐛 Fixes

♻️ Refactor

✅ Tests

📚 Docs / ADRs

🧹 Mantenimiento

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ón sin commitear.

🤖 Generated with Claude Code

complexluise and others added 30 commits June 29, 2026 23:25
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>
Tras integrar dev (#210 429 accionable, #211 upsert masivo Arrow), se re-aplica
la limpieza de comentarios a duckdb.py y openalex.py sobre la versión nueva.
Código de #210/#211 intacto; solo comentarios.

Co-Authored-By: Claude Opus 4.8 (1M context) <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
…#232 (#225)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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
complexluise and others added 7 commits June 30, 2026 16:04
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
@complexluise complexluise added this to the 0.11.0 milestone Jul 1, 2026
@complexluise
complexluise merged commit 08d4be4 into main Jul 1, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants