Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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 |
|
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 porapp_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 porapp_base.cpp, no registrados.
Arquitectura
Este issue NO modifica codigo C++. Solo modifica:
- Frontmatter
.mdde funciones huerfanas para anadiruses_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_functionsdel consumidor (no del huerfano). - DEMO_ONLY — solo en
primitives_galleryo demos. OK como esta. Documentar en.mdcomo# scaffolding/demo only. - PLANNED — sin uso pero hay issue/plan futuro. Anotar en
.mdcon 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.cppno 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_functionspoblados 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).