Files
fn_registry/.claude/commands/issue.md
T

3.1 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, 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.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).