Files
fn_registry/.claude/commands/issue.md
T
egutierrez a3f75d61ec chore: avance acumulado de sesiones previas (reorg dev/issues + ajustes)
Reorganizacion de dev/issues en subcarpetas (completed/, cpp/, gamedev/,
kanban/, trading/, imagegen/, matrix/) y cambios acumulados en cmd/fn/pyrunner,
.claude/commands y settings. Trabajo de otro LLM/sesion, commiteado a peticion
del usuario para desbloquear el working tree. Excluido logs/ardour_mcp_server.log (ruido).
2026-06-30 14:43:51 +02:00

3.3 KiB

description
description
Gestiona issues del registry en dev/issues/. Subcomandos: list, show, status, board, dep, roadmap, tag, done, stale, create. Frontmatter YAML canonico (issue 0100).

/issue — Gestionar issues del registry

Issues viven en dev/issues/NNNN-<slug>.md con frontmatter YAML canonico (id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags).

Allowlists en dev/TAXONOMY.md (no inventar valores).

Diferencia con dev/flows/:

  • Issues = bugs, features, refactors, chores, epics de implementacion.
  • Flows = casos de uso end-to-end multi-app.

Sintaxis

/issue list [--domain X] [--type Y] [--status Z] [--prio P] [--epic NNNN]
/issue show NNNN
/issue status NNNN              # acceptance % + estado deps
/issue board                     # kanban pendiente/in-progress/bloqueado/done
/issue dep NNNN                  # arbol bloquea/depende
/issue roadmap NNNN              # epic + sub-IDs (NNNNa, NNNNb, ...)
/issue tag NNNN +X -Y            # mantenimiento tags/domain
/issue done NNNN                 # mueve a completed/, valida deps
/issue stale [--days 30]
/issue create <slug> --type T --domain D [--prio P] [--depends NNNN]

Implementacion

Fase 1 (manual via Claude):

El agente lee dev/issues/**/*.md (recursivo: incluye subcarpetas por dominio como dev/issues/kanban/, dev/issues/cpp/, ... excluyendo completed/), parsea frontmatter YAML con yaml.safe_load, aplica el filtro, imprime tabla.

import yaml, pathlib, re
issues = []
for f in pathlib.Path("dev/issues").glob("**/*.md"):
    if f.parent.name == "completed": continue
    if f.name in {"README.md", "template.md"}: continue
    txt = f.read_text()
    m = re.match(r"^---\n(.*?)\n---", txt, re.S)
    if not m: continue
    fm = yaml.safe_load(m.group(1)) or {}
    fm["_path"] = str(f)
    issues.append(fm)
# filter + print

Fase 2 (cuando 0101 dev_console exista):

Cada subcomando se mapea a ./apps/dev_console/dev_console issue <subcomando> $ARGS.

Subcomandos clave

list

Imprime tabla id | title | status | type | domain | priority | depends_pending. Filtrable por flags.

show NNNN

Read directo del .md + render del frontmatter como tabla + body como markdown.

status NNNN

Cuenta checkboxes en ## Acceptance + chequea si todos los depends estan en status: completado. Si alguno no, marca bloqueado.

board

Tabla 4 columnas (pendiente / in-progress / bloqueado / completado_hoy). Card por issue: id + title + prio. Status bloqueado se calcula on-the-fly desde depends.

roadmap NNNN

Si type: epic: lista sub-issues NNNNa, NNNNb, etc. con su estado. Si no epic: error "not an epic".

done NNNN

  1. Lee frontmatter.
  2. Verifica todos depends cerrados (sino, error).
  3. Cuenta ## Acceptance 100% (sino, error).
  4. git mv dev/issues/NNNN-*.md dev/issues/completed/.
  5. Actualiza status: completado + updated: today.

create <slug> --type T --domain D

Genera siguiente ID libre (max existing + 1, zero-padded 4). Scaffold desde plantilla minima con frontmatter rellenado.

Reglas

  • Domain debe estar en dev/TAXONOMY.md allowlist.
  • Scope/type/priority idem.
  • id siempre string "NNNN" (zero-padded, sub-IDs con sufijo a-z).
  • Modificar frontmatter SIEMPRE preserva campos no tocados (no overwrite).