7913116a8e
- .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>
55 lines
2.2 KiB
Markdown
55 lines
2.2 KiB
Markdown
---
|
|
name: scan_issues_dir
|
|
kind: function
|
|
lang: go
|
|
domain: infra
|
|
version: "0.1.0"
|
|
purity: impure
|
|
signature: "func ScanIssuesDir(root string) ([]Issue, error)"
|
|
description: "Escanea el directorio dev/issues/ (root) y devuelve todos los Issues encontrados en *.md directos y en completed/*.md. Si un archivo falla al parsearse emite un warning al log y continua. Resultado ordenado por ID ascendente."
|
|
tags: [issue, scanner, frontmatter, yaml, dev-ux, kanban]
|
|
uses_functions: [parse_issue_md_go_infra]
|
|
uses_types: [issue_go_infra]
|
|
returns: [issue_go_infra]
|
|
returns_optional: false
|
|
error_type: "error_go_core"
|
|
imports: ["fmt", "log", "os", "path/filepath", "sort", "strings"]
|
|
params:
|
|
- name: root
|
|
desc: "Ruta al directorio dev/issues/ (absoluta o relativa). Debe existir o retorna error."
|
|
output: "Slice de Issue ordenado por ID asc. Incluye issues de completed/ con Completed=true. Issues con YAML malformado se omiten con warning."
|
|
tested: true
|
|
tests:
|
|
- "scan devuelve al menos 90 issues"
|
|
- "issue 0130 esta presente"
|
|
- "issues ordenados por ID asc"
|
|
- "completed issues tienen Completed=true"
|
|
- "directorio inexistente retorna error"
|
|
test_file_path: "functions/infra/scan_issues_dir_test.go"
|
|
file_path: "functions/infra/scan_issues_dir.go"
|
|
---
|
|
|
|
## Ejemplo
|
|
|
|
```go
|
|
issues, err := infra.ScanIssuesDir("$HOME/fn_registry/dev/issues")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Printf("Total issues: %d\n", len(issues))
|
|
for _, iss := range issues {
|
|
fmt.Printf(" %s [%s] %s\n", iss.ID, iss.Status, iss.Title)
|
|
}
|
|
```
|
|
|
|
## Cuando usarla
|
|
|
|
Al arrancar el backend de kanban_cpp para poblar la cache SQLite inicial. Tambien util para cualquier herramienta que necesite un snapshot completo de todos los issues del proyecto (stats, dashboards, fn doctor).
|
|
|
|
## Gotchas
|
|
|
|
- Skippea automaticamente `INDEX.md` y `README.md` — no son issues.
|
|
- Si `completed/` no existe (no hay issues completados), no retorna error — devuelve los issues directos.
|
|
- La ordenacion es lexicografica por ID string, no numerica. `"0099" < "0100"` funciona bien con el formato de 4 digitos del registry.
|
|
- Un issue con YAML invalido no aborta el scan entero — solo ese archivo se omite con un `log.Printf` warning. Si necesitas comportamiento strict (abort en primer error), parsea manualmente con `ParseIssueMd`.
|