Files
fn_registry/dev/issues/0044-cpp-orphans-audit.md
T

3.9 KiB

0044 — Auditar 52 funciones C++ huerfanas y poblar uses_functions

Metadata

Campo Valor
ID 0044
Estado pendiente
Prioridad media
Tipo chore — registry hygiene

Dependencias

Ninguna.


Objetivo

Resolver las 52 funciones C++ que aparecen sin uses_functions en registry.db: o son legitimamente independientes, o se usan pero no se registra la dependencia (caso fps_overlay que se invoca desde app_base.cpp pero no aparece). Resultado: uses_functions reflejando la verdad.

Contexto

Ejemplos detectados:

  • fps_overlay — usado por app_base.cpp, no registrado.
  • tokens — usado por 16+ componentes, ya registrado bien.
  • tween_curves, orbit_camera, time_series_buffer, graph_force_layout, plot_theme — sin consumidores visibles. Verificar si estan en gallery/chart_demo o son scaffolding.
  • app_settings, app_about, app_menubar, icon_font — usados por app_base.cpp, no registrados.

Arquitectura

Este issue NO modifica codigo C++. Solo modifica:

  • Frontmatter .md de funciones huerfanas para anadir uses_functions: [...] reflejando llamadas reales.
  • Eventualmente borrar funciones que se confirmen sin uso real ni plan de uso (con el OK del usuario via comment en el issue).

Tareas

Fase 1 — Lista exacta

1.1 Generar la lista actual:

sqlite3 registry.db "SELECT id FROM functions WHERE lang='cpp' AND uses_functions = '[]' ORDER BY id;"

1.2 Para cada id, hacer grep -rn "<name>" cpp/ projects/*/apps/*/ y ver donde se invoca.

Fase 2 — Categorizar

Para cada huerfana, asignar uno de estos estados (anotar en una tabla en este issue):

  • USED — se invoca desde otra funcion/app. Anadir el caller a uses_functions del consumidor (no del huerfano).
  • DEMO_ONLY — solo en primitives_gallery o demos. OK como esta. Documentar en .md como # scaffolding/demo only.
  • PLANNED — sin uso pero hay issue/plan futuro. Anotar en .md con referencia.
  • DEAD — sin uso real ni plan. Candidato a borrar (preguntar al usuario antes).

Fase 3 — Actualizar frontmatter

3.1 Para cada USED: editar el .md del CONSUMIDOR para anadir el huerfano a su uses_functions. Ejemplo: app_base.cpp consume fps_overlay_cpp_core, app_settings_cpp_core, app_about_cpp_core, app_menubar_cpp_core, icon_font_cpp_core, tokens_cpp_core. Pero app_base NO esta en functions/ del registry — es un .cpp del framework. Corregir: si app_base.cpp no esta indexado, registrar como funcion en cpp/framework/ o documentar la convencion en notes. 3.2 Para DEMO_ONLY: anadir nota en frontmatter notes: "demo en primitives_gallery, scaffolding". 3.3 Para PLANNED: anadir notes: "planned use in issue NNNN". 3.4 Para DEAD: listar en este issue y abrir un sub-issue de delete (no borrar de oficio).

Fase 4 — Reindex

4.1 ./fn index para regenerar registry.db. 4.2 Verificar:

sqlite3 registry.db "SELECT COUNT(*) FROM functions WHERE lang='cpp' AND uses_functions = '[]';"

La cifra debe bajar significativamente (objetivo: <20 huerfanas reales).

Fase 5 — Documentar la convencion

5.1 Anadir a .claude/rules/uses_functions.md (NEW) la regla: cada vez que un .cpp llama a otra funcion del registry, el .md del CONSUMIDOR debe listar la dependencia en uses_functions. El indexer no lo deduce automaticamente (el codigo C++ no es trivial de parsear).

Decisiones

  • No borrar funciones sin OK explicito.
  • app_base.cpp no esta hoy indexado como funcion del registry (es framework). Si decidimos indexarlo, eso es 0048 — ahora solo registramos en uses_functions de los CONSUMIDORES que si esten indexados (gallery, dashboard, etc.).

Validacion

  • uses_functions poblados para los casos reales (verificable por SQL).
  • cpp/PATTERNS.md (de 0041) referencia esta convencion.
  • Nada compilado se rompe (este issue NO toca .cpp/.h).