---
id: "0057"
title: "audit_uses_functions: mejorar deteccion de simbolos Go con abreviaturas"
status: pendiente
type: chore
domain:
  - registry-quality
scope: registry-only
priority: baja
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: [ausente-ready]
---
# 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.
