Files
fn_registry/dev/issues/0057-audit-go-symbol-naming.md
T
egutierrez c149ea161f docs(issues): 0054-0062 — deudas detectadas en sesion fn doctor
Nueve issues nuevos cubriendo deudas tecnicas descubiertas tras
ejecutar fn doctor por primera vez:

- 0054 deploy_server: reimplementa SSH/systemd/rsync inline en lugar
  de usar funciones del registry (alta).
- 0055 docker_tui: usa docker CLI directo via shell en lugar de
  docker_* del registry (alta).
- 0056 audit_uses_functions: heuristica Python no detecta
  `from pkg.subpkg import X` (media).
- 0057 audit_uses_functions: deteccion de simbolos Go con
  abreviaturas falla en algunos casos (baja).
- 0058 kanban uses_functions sync deferido por WIP en curso (baja).
- 0059 doble tracking de apps/*/app.md (fn_registry + sub-repo)
  inconsistencia (media).
- 0060 fn doctor secrets: subcomando para audit secrets en TODOS
  los repos (media).
- 0061 integrar notify_telegram en deploy_server + bucle reactivo
  (media, depende de 0054).
- 0062 politica de deprecacion para 704 funciones sin consumidores
  (baja, research).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 02:16:43 +02:00

64 lines
2.9 KiB
Markdown

# 0057 — audit_uses_functions: mejorar deteccion de simbolos Go con abreviaturas
## APP Metadata
| Campo | Valor |
|-------|-------|
| **ID** | 0057 |
| **Estado** | pendiente |
| **Prioridad** | baja |
| **Tipo** | enhancement — `functions/infra/audit_uses_functions.go` |
## Dependencias
- `audit_uses_functions_go_infra` ya existe.
## Contexto
La heuristica Go convierte `name` snake_case a CamelCase para buscar el simbolo exportado en el codigo. La conversion usa `commonAbbrevs` para mapear (ej. `cdp``CDP`, `http``HTTP`). Pero falla cuando:
1. La abreviatura no esta en la lista (ej. `cdp_get_html``CdpGetHTML` pero codigo usa nombre distinto).
2. El simbolo se renombra en la funcion del registry vs el name del frontmatter.
Caso real (2026-05-07): `cdp_get_html_go_browser` fue marcado `unused_in_app_md` en `script_navegador` aunque `runner.go:126` lo invoca. Se confirmo manualmente como falso positivo.
## Objetivo
Reducir falsos positivos en la deteccion de simbolos Go. Dos vias:
1. Ampliar `commonAbbrevs` con mas terminos comunes en el registry (HTML, CDP, JWT, OAuth, JSON, YAML, SQL, BQ, ID, URL, IP, TCP, TLS, SSH, S3, RBAC).
2. Caer a una segunda heuristica: si no encuentra `<CamelCaseName>`, buscar el nombre real exportado leyendo el `.go` de la funcion del registry y extraer `func <Name>(`.
## Arquitectura
### Archivos afectados
- `functions/infra/audit_uses_functions.go` — funcion `snakeToCamel` o equivalente, y bucle de busqueda de simbolos.
- `functions/infra/audit_uses_functions_test.go` — anadir tests.
## Tareas
### Fase 1 — ampliar commonAbbrevs
1.1 Listar funciones del registry con abreviaturas en su `name`: `sqlite3 registry.db "SELECT name FROM functions WHERE lang='go';"` — extraer abreviaturas comunes.
1.2 Anadir HTML, CDP, JWT, OAuth, JSON, YAML, SQL, BQ, ID, URL, IP, TCP, TLS, SSH, S3, RBAC a `commonAbbrevs`.
1.3 Test `TestSnakeToCamel_HandlesAbbreviations` con todos los nuevos.
### Fase 2 — fallback a lectura de `.go`
2.1 Si la conversion CamelCase no encuentra simbolo, leer `<file_path>.go` de la funcion del registry, extraer primer `func <Name>(` exportado.
2.2 Buscar ese nombre en el codigo de la app.
2.3 Cachear el mapping (en memoria por ejecucion) para no reabrir el mismo archivo N veces.
### Fase 3 — verificacion
3.1 `cdp_get_html_go_browser` ya NO debe aparecer unused para `script_navegador`.
3.2 Correr audit en todas las apps Go, comparar con baseline anterior. Diff de falsos positivos eliminados.
## Riesgos
- Lectura de N archivos `.go` ralentiza el audit. Mitigacion: cache + leer solo si la heuristica primaria falla.
- Cambio en commonAbbrevs puede romper tests existentes que asumian la conversion antigua. Validar.
## Decisiones de diseno
- NO usar `go/parser` — no necesitamos AST completo, basta regex sobre `func [A-Z]\w+(`.
- Tampoco cambiar el modelo de "cada funcion del registry tiene un simbolo exportado". Si en el futuro una funcion expone un struct con metodos, anadir manejo.