# 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 ``, buscar el nombre real exportado leyendo el `.go` de la funcion del registry y extraer `func (`. ## 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 `.go` de la funcion del registry, extraer primer `func (` 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.