--- id: "0044" title: "Auditar 52 funciones C++ huerfanas y poblar uses_functions" status: completado type: chore domain: - cpp-stack scope: multi-app priority: media depends: [] blocks: [] related: [] created: 2026-05-17 updated: 2026-05-17 tags: [] --- # 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: ```bash sqlite3 registry.db "SELECT id FROM functions WHERE lang='cpp' AND uses_functions = '[]' ORDER BY id;" ``` 1.2 Para cada id, hacer `grep -rn "" 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: ```bash 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).