--- id: "0100" title: "Migrar frontmatter inline a YAML canonico en dev/issues/" status: pendiente type: chore domain: - registry-quality scope: registry-only priority: alta depends: [] blocks: [] related: [] created: 2026-05-17 updated: 2026-05-17 tags: [] --- # 0100 — Migrar frontmatter inline a YAML canonico en dev/issues/ **Status:** pendiente **Created:** 2026-05-16 **Type:** chore **Priority:** alta **Domain:** registry-quality **Scope:** registry-only **Depends:** — **Blocks:** 0102 (work dashboard tab necesita filtros frontmatter) **Related:** 0103 (taxonomia + slash commands) ## Problema Hoy los 71 archivos `dev/issues/*.md` declaran metadata como markdown inline: ``` # 0099 — datahub app (launcher central) **Status:** pendiente **Created:** 2026-05-16 **Type:** app **Priority:** alta **Depends:** 0096 — DONE **Blocks:** — ``` Imposible filtrar/agrupar sin parsers ad-hoc por linea. Issues antiguos (0027-0070) ni siquiera tienen `Type` ni `Priority`. Resultado: `/issue list` no existe; humano lee `README.md` (tabla manual) que se queda obsoleta. ## Objetivo Frontmatter YAML canonico al inicio de cada issue, igual modelo que `dev/flows/`. Mantener el contenido humano intacto debajo. ```yaml --- id: 0099 title: datahub app launcher central status: pendiente # pendiente | in-progress | bloqueado | completado | deferred type: app # app | feature | bugfix | refactor | chore | docs | spike | epic | infra domain: [apps-infra, cpp-stack] scope: app-scoped # registry-only | app-scoped | multi-app | cross-stack priority: alta # alta | media | baja depends: [0096] blocks: [] related: [0095, 0097] created: 2026-05-16 updated: 2026-05-16 tags: [] --- # 0099 — datahub app launcher central (cuerpo original sin tocar) ``` ## Pipeline propuesto `migrate_issues_frontmatter_bash_pipelines` (o python, lo que encaje mejor). Idempotente. 1. Para cada `dev/issues/*.md`: - Si ya tiene frontmatter YAML (`---` en linea 1): merge campos faltantes solo, no sobreescribe. - Si no: parsea las lineas `**Key:** value` debajo del H1, extrae a YAML. - Si `Type` / `Priority` ausentes: deja vacios + log warning para revision manual. - `domain` y `scope` se infieren con heuristica por nombre/contenido (ej. `cpp-*` -> `cpp-stack`, `kanban-*` -> `kanban`, `trading-*` -> `trading`). 2. Backup en `dev/issues/.backup_pre_0100/` antes de cualquier escritura. 3. Output final: tabla de issues sin clasificar para review humano. ## Dominios canonicos (allowlist) ``` meta, cpp-stack, kanban, trading, gamedev, osint, data-ingest, registry-quality, notify, imagegen, apps-infra, dev-ux, deploy, frontend, mcp, browser, telemetry, docs ``` Cualquier issue con `domain:` fuera de esta lista hace fallar el indexer. ## Acceptance - [ ] Pipeline existe en `bash/functions/pipelines/` o `python/functions/pipelines/`. - [ ] 71 issues migrados sin perder contenido (diff vs backup solo en cabecera). - [ ] `dev/issues/README.md` ya no es fuente de verdad — se genera desde frontmatter via subcomando `/issue list` o cron diario. - [ ] Issues completados en `dev/issues/completed/` tambien migrados. - [ ] `fn doctor issues` (subcomando nuevo) reporta issues sin Type/Priority/Domain/Scope. - [ ] Pipeline idempotente (segunda corrida = 0 cambios). ## Definition of Done ### Generico - [ ] **Repetibilidad**: pipeline corre N veces sin diff. - [ ] **Observabilidad**: log de campos inferidos vs por defecto. - [ ] **Error-path**: archivo malformado -> skip + log + exit code != 0. - [ ] **Idempotencia**: archivo ya migrado -> 0 cambios. - [ ] **Secrets**: N/A. - [ ] **Docs**: README de `dev/issues/` actualizado para apuntar al frontmatter. - [ ] **Registry-first**: pipeline reusa `parse_yaml_frontmatter_*` (crear si no existe). - [ ] **INDEX + status**: issue cerrado + movido a `completed/`. ### User-facing - [ ] **User-facing**: tras correr el pipeline, `head -20 dev/issues/0099-datahub-app-launcher.md` muestra YAML legible + `/issue show 0099` (cuando exista) imprime tabla limpia. - [ ] **User-facing repeat**: cada issue nuevo creado con `/issue create` (issue 0101) hereda el formato. - [ ] **User-facing onboarding**: parrafo en `dev/issues/README.md`: "Cada issue empieza con frontmatter YAML. Para ver/filtrar: `/issue list --domain trading --status pendiente`." - [ ] **User-facing latencia**: migracion completa en <60s sobre 71 archivos.