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

4.1 KiB

id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags
id title status type domain scope priority depends blocks related created updated tags
0044 Auditar 52 funciones C++ huerfanas y poblar uses_functions completado chore
cpp-stack
multi-app media
2026-05-17 2026-05-17

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