Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.1 KiB
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.
---
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.
- 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:** valuedebajo del H1, extrae a YAML. - Si
Type/Priorityausentes: deja vacios + log warning para revision manual. domainyscopese infieren con heuristica por nombre/contenido (ej.cpp-*->cpp-stack,kanban-*->kanban,trading-*->trading).
- Si ya tiene frontmatter YAML (
- Backup en
dev/issues/.backup_pre_0100/antes de cualquier escritura. - 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/opython/functions/pipelines/. - 71 issues migrados sin perder contenido (diff vs backup solo en cabecera).
dev/issues/README.mdya no es fuente de verdad — se genera desde frontmatter via subcomando/issue listo 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.mdmuestra 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.