Files
egutierrez faac610745 feat: extraccion masiva footprint_aurgi (41 funcs + 4 types + stack Docker geo)
Extrae al registry funciones del proyecto interno footprint_aurgi:
- core (6): slugify_ascii, normalize_for_join, cp_provincia_es, infer_provincia_from_cp, safe_read_csv_fallback, csv_to_parquet_duckdb
- geo puras (7): haversine_km, point_in_ring, point_in_polygon, point_in_polygons_bbox, polygon_bbox, extent_with_padding, distance_bucket
- geo I/O (4): load_geojson_polygons, load_boundary_gdf, add_basemap_osm, add_basemap_with_timeout
- valhalla client (4): valhalla_route, valhalla_isochrone, valhalla_isochrones_async, valhalla_matrix_1_to_n
- datascience stats (7): trimmed_mean, geometric_mean, detect_distribution_type, best_central_tendency, summary_stats, kde_density_levels, alpha_shape_concave_hull
- datascience fuzzy (3): fuzzy_merge_adaptive (rapidfuzz), words_to_dataset, remove_words_from_column
- datascience viz (2): plot_kde_2d, plot_heatmap_log
- infra (4): compress_pdf_ghostscript, render_table_page_pdfpages, add_header_logo, osm2pgsql_ingest
- pipelines (4): setup_geo_stack_docker, compute_centers_reachability, generate_isochrones_by_zone, count_points_per_zone
- types geo (4): LonLat, BBox, IsochroneRequest, Centro

Incluye:
- apps/footprint_geo_stack/ (PostGIS + Martin + Valhalla via docker-compose)
- 131/132 tests pasan (1 skip esperado: osm2pgsql en PATH)
- Issue tracker dev/issues/0052-footprint-aurgi-extraction.md
- Atribucion uniforme: source_repo internal:footprint_aurgi, source_license internal-aurgi
- Build con 9 agentes en paralelo (8 wave 1 + 1 wave 2 pipelines)

Tambien commitea trabajo previo no commiteado: aggregate_extraction_results, chunk_with_overlap, clean_pdf_text, merge_entity_aliases, extract_graph_gliner2, extract_relations_mrebel, extract_triples_spacy_es, gliner2/mrebel/marianmt/rebel/spacy_es load_model, parse_rebel_output, translate_es_to_en, issue 0050/0051.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 23:35:22 +02:00

9.1 KiB

2026-05-04

01:26 — Auditoria FP de apps C++, estandarizacion de mds y extension del indexer a <lang>/apps/

Sesion para verificar que las 5 apps C++ del registry usan programacion funcional limpia y que las funciones que enlazan estan correctamente registradas para que apps nuevas puedan reusar todo. Tres hallazgos: 3 .cpp huerfanos sin .md (rompen reuso), drift entre CMakeLists.txt y app.md en las 2 apps con app.md, y 2 apps sin app.md (chart_demo, shaders_lab).

  • Hecho: auditoria FP de los 5 mains C++. Resultado: chart_demo, text_editor_smoke, registry_dashboard limpios; shaders_lab borderline (16 globales, justificado por retained-mode); graph_explorer fuera de convencion (2471 lineas, 24 globales, 23 helpers en main.cpp — split parcial pero main sigue siendo saco). Helpers candidatos a extraer al registry documentados pero no extraidos en esta sesion.
  • Hecho: 3 .md nuevos para TUs huerfanos del registry — cpp/functions/viz/{graph_labels_select,graph_viewport_selection,graph_types}.md. Todos purity: pure. graph_labels.md y graph_viewport.md recortan su signature y declaran las nuevas entradas en uses_functions.
  • Hecho: cpp/apps/chart_demo/app.md creado (chart_demo_cpp_viz, 4 deps).
  • Hecho: cpp/apps/shaders_lab/app.md creado (shaders_lab_cpp_gfx, 19 deps). Antes habia entrada legacy en BD sin .md en disco.
  • Hecho: projects/osint_graph/apps/graph_explorer/app.md uses_functions sincronizado con CMakeLists.txt. De 15 a 23 deps. Añadidas: graph_viewport_selection, graph_labels_select, graph_types, graph_spatial_hash, button, icon_button, badge, empty_state.
  • Hecho: projects/fn_monitoring/apps/registry_dashboard/app.md uses_functions sincronizado. De 9 a 21 deps. Removido fps_overlay (vive en fn_framework).
  • Bug + fix: ./fn index no recogia chart_demo ni shaders_lab aunque tenian app.md correcto. Raiz: registry/indexer.go solo escaneaba apps/*/app.md y projects/*/apps/*/app.md, NO <lang>/apps/. Fix: añadir loop sobre <lang>/apps/*/app.md reusando el mismo entries de os.ReadDir(root) que ya usa para <lang>/functions/ y <lang>/types/. Diff ~12 lineas. ./fn index pasa de 15 a 17 apps.
  • Bug + fix: chart_demo/app.md declaraba inicialmente logger_cpp_core en uses_functions aunque CMakeLists.txt no lo enlaza directo. Raiz: logger.cpp esta bundled en fn_framework static lib (junto con tokens, app_menubar, fps_overlay, etc.). Fix: removido del app.md con comentario explicito. Convencion documentada en .claude/rules/uses_functions.md.
  • Decision: ADR 0003 (docs/adr/0003-orphan-tu-as-separate-function-entry.md) — TUs adicionales de un parent function se registran como entrada propia con su .md. El parent declara la nueva entrada en uses_functions. Alternativas descartadas: file_path multi-path (rompe convencion), notes: con instruccion (frágil), macro con flags (acopla tests a ImGui).
  • Hecho: .claude/rules/uses_functions.md ampliada — lista explicita de funciones bundled en fn_framework (no se declaran en apps), comportamiento de TUs split (ADR 0003), apps como leaves del grafo.
  • Hecho: .claude/CLAUDE.md raiz añade cpp/apps/ a la seccion Estructura como ubicacion valida tras la extension del indexer.
  • Hecho: CHANGELOG.md entrada 2026-05-04 con 3 nuevas funciones, 2 apps registradas, 2 apps sincronizadas, indexer extendido, ADR 0003.
  • Hecho: build cpp verde para los 4 targets (chart_demo, shaders_lab, registry_dashboard, graph_explorer). ./fn index reporta 952 functions / 17 apps / 8 analyses.
  • Hecho: cross-check final CMakeLists.txtapp.md con script Python — los 4 apps a 0 missing / 0 extra.
  • Pendiente: extraer helpers de graph_explorer/main.cpp al registry (algoritmos de layout layout_no_collision, find_collision_free_slot, place_orphans_near_neighbors; persistencia panel_state_*; utilities detect_wsl_distro, resolve_registry_root, json_escape_str).
  • Pendiente: primitives_gallery no tiene app.md. Decidir si registrarla (showcase visual estable) o dejarla como scaffolding/demo (etiqueta del rule uses_functions.md).
  • Pendiente: commit + push de los cambios (binary fn rebuilt no commiteado, .md y registry/indexer.go modificados).

Refs: ADR 0003, funciones graph_labels_select_cpp_viz, graph_viewport_selection_cpp_viz, graph_types_cpp_viz, apps chart_demo_cpp_viz, shaders_lab_cpp_gfx. Cambio en indexer: registry/indexer.go lineas ~87-122.

22:50 — Pipeline NER+RE para graph_explorer: 18 funciones nuevas + analysis + playground + vault

  • Hecho: investigacion empirica completa de modelos NER/RE en projects/osint_graph/analysis/gliner_glirel_tuning/. 9 notebooks ejecutados (01-09), cada uno con su build_notebook_*.py y, los pesados, su run_*.py que vuelca a JSON. Los notebooks viven listos para abrir desde Jupyter Lab (localhost:8888).
  • Hecho: dos rondas de fn-constructor el mismo dia. Ronda 1 (mañana): 8 funciones para mREBEL/REBEL/MarianMT (parse_rebel_output, align_relations_to_entities, mrebel_load_model, mrebel_base_load_model, rebel_load_model, marianmt_es_en_load_model, translate_es_to_en, extract_relations_mrebel). Ronda 2 (tarde): 10 funciones para GLiNER2 + OpenIE ES + composicion (clean_pdf_text, chunk_with_overlap, merge_entity_aliases, filter_relations_by_entity_types, aggregate_extraction_results, gliner2_load_model, extract_graph_gliner2, spacy_es_load_model, extract_triples_spacy_es, extract_graph_from_text pipeline). Total registry: 980 → 990 funciones, 60 tests pytest verdes.
  • Hecho: 3 ADRs cortos en vaults/osint_nlp_models/decisions/ registrando la cadena de decisiones: mañana mrebel-over-glirel.md, tarde gliner2-over-mrebel.md (decision final), license-constraint.md. Vault con 5 fichas .md por modelo (gliner, glirel, mrebel, gliner2, candidates).
  • Hecho: PDF politica_proteccion_datos.pdf (BBVA, 89.882 chars) copiado a ~/vaults/osint_nlp_models/test_documents/ para reproducibilidad cross-PC. Procesado por todos los pipelines: GLiNER2 t=0.3+coref → 440 nodos / 166 aristas / 139s; NuExtract GPU → 80 nodos / 10 aristas / 361s.
  • Hecho: playground HTML en projects/osint_graph/analysis/gliner_glirel_tuning/playground/. FastAPI server con GLiNER2 cacheado, frontend Sigma.js con layout server-side via networkx.spring_layout (sin fisica frontend → sin loops ResizeObserver). Sirviendo en localhost:7878 con chunking automatico, post-filter typed, coref, KPIs, JSON exportable.
  • Hecho: 4 issues nuevos: dev/issues/0050-jupyter-exec-collab-client-failure.md (bug + workaround), dev/issues/0051-extraction-pipeline-followups.md (5 funciones aun por construir), graph_explorer/issues/0041-split-confidence-thresholds.md, graph_explorer/issues/0042-gliner2-unified-extractor.md. Issue 0042-mrebel-relation-extractor.md.superseded archivado al ganar GLiNER2.
  • Hecho: cpp/CMakeLists.txt patcheado (commit e72d6364) para que _GE_DIR y _DASH_DIR se sobreescriban via -D...=<path> — habilita parallel-fix-issues sobre apps C++ con worktrees.
  • Hecho: workaround compat huggingface_hub 1.x en glirel_load_model.py (commit 3b3378cf) — classmethod monkey-patch idempotente para _from_pretrained con kwargs proxies/resume_download.
  • Hecho: dos issues del sub-repo dataforge/graph_explorer mergeados local en master con --no-ff (issue/0035e-polish-and-tests commit f614a51, issue/0013-paste-extract-panel commit 2a49c2b). 125/125 tests pytest verdes.
  • Hecho: CHANGELOG.md actualizado con seccion completa NER+RE (funciones, analysis, vault, playground, issues, decisiones, bugs+fixes).
  • Hecho: analysis.md de gliner_glirel_tuning reescrito con tabla de 9 notebooks + stack final + decisiones del vault + comandos para reproducir.
  • Hecho: app.md de graph_explorer añade seccion "Pipeline NER+RE disponible en el registry" — el stack completo listo para cablear en extract_graph_hybrid_py_pipelines y panel paste_extract.
  • Pendiente: validacion Windows del binario graph_explorer con los merges de hoy (issues 0013 + 0035e).
  • Pendiente: push de los 3 commits no pusheados (fn_registry master commits e72d6364 + 3b3378cf, dataforge/graph_explorer master commits f614a51 + 2a49c2b).
  • Pendiente: issue 0051 — 5 funciones aun por construir (NuExtract loader/extractor, extract_graph_from_pdf pipeline, extract_triples_spacy_es_v2 con pasiva refleja+copulares+coref, fix kernel startup que sombrea pip packages, extract_relations_rebel EN-only). Brief listo en el issue para proxima ronda fn-constructor.
  • Pendiente: implementar issues 0041 + 0042 del graph_explorer (paralelizables con /parallel-fix-issues). El registry tiene todas las funciones necesarias.

Refs: notebooks 01-09_*.ipynb en projects/osint_graph/analysis/gliner_glirel_tuning/notebooks/. Funciones nuevas en python/functions/{core,datascience,pipelines}/. Decisiones en vaults/osint_nlp_models/decisions/. Issues 0050, 0051 en dev/issues/. Issues 0041, 0042 en projects/osint_graph/apps/graph_explorer/issues/.