Files
fn_registry/functions/infra/audit_app_location.md
T
egutierrez 7913116a8e chore: auto-commit (129 archivos)
- .claude/agents/fn-analizador/SKILL.md
- .claude/agents/fn-constructor/SKILL.md
- .claude/agents/fn-executor/SKILL.md
- .claude/agents/fn-mejorador/SKILL.md
- .claude/agents/fn-orquestador/SKILL.md
- .claude/agents/fn-recopilador/SKILL.md
- .claude/commands/app.md
- .claude/commands/compile.md
- .claude/commands/cpp-app.md
- .claude/commands/create_functions.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-01 22:23:12 +02:00

56 lines
2.5 KiB
Markdown

---
name: audit_app_location
kind: function
lang: go
domain: infra
version: "1.0.0"
purity: impure
signature: "func AuditAppLocation(repoRoot string) ([]AppLocationViolation, error)"
description: "Detecta artefactos (apps y analyses) ubicados en carpetas de lenguaje (cpp/apps/, python/apps/, bash/apps/, frontend/apps/, y sus equivalentes /analysis/). Estas ubicaciones violan la convencion del registry (issue 0096): los artefactos deben vivir en apps/ o analysis/ en la raiz, o en projects/*/apps/ y projects/*/analysis/. Retorna una lista de AppLocationViolation con la ruta relativa, kind (app|analysis) y lang (cpp|python|bash|frontend)."
tags: [doctor, audit, location, artefacts, registry]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: ["os", "path/filepath"]
params:
- name: repoRoot
desc: "Ruta absoluta a la raiz del repositorio fn_registry. Todas las rutas en las violaciones son relativas a este directorio."
output: "Lista de AppLocationViolation con (Path, Kind, Lang) por cada artefacto mal ubicado. Vacia si no hay violaciones. Error si un directorio prohibido existe pero no es legible."
tested: true
tests:
- "detecta app.md en directorio prohibido cpp/apps"
- "directorios prohibidos inexistentes no producen error"
- "detecta analysis.md en directorio prohibido python/analysis"
test_file_path: "functions/infra/audit_app_location_test.go"
file_path: "functions/infra/audit_app_location.go"
---
## Ejemplo
```go
violations, err := AuditAppLocation("$HOME/fn_registry")
if err != nil {
log.Fatal(err)
}
for _, v := range violations {
fmt.Printf("[%s/%s] %s → mover a apps/%s o projects/.../apps/%s\n",
v.Lang, v.Kind, v.Path,
filepath.Base(v.Path), filepath.Base(v.Path))
}
// Ejemplo de salida:
// [cpp/app] cpp/apps/my_tool → mover a apps/my_tool o projects/.../apps/my_tool
```
## Cuando usarla
Usar como check de `fn doctor artefacts` o en pre-commit para detectar artefactos que se crearon en la carpeta del lenguaje equivocada. Invocar despues de `fn index` para validar el estado del repo.
## Gotchas
- Solo revisa subdirectorios de nivel 1 dentro de cada directorio prohibido. No escanea recursivamente.
- Un subdirectorio sin `app.md` ni `analysis.md` NO se reporta (ej. `cpp/apps/bar/` sin manifest = ignorado).
- Los artefactos en `apps/`, `analysis/`, `projects/*/apps/` y `projects/*/analysis/` son ubicaciones canonicas y NO se comprueban.
- `AppLocationViolation` esta definida en el mismo paquete (`infra`), no como tipo separado del registry.