Files
fn_registry/dev/issues/0130a-kanban-cpp-v2-parser.md
Egutierrez c468b24d2b feat(0130): kanban_cpp v2 — backend Go + 5 registry parser fns + epic/sub-issues
Registry (issue 0130a):
- 5 fns infra: parse_issue_md, write_issue_md, scan_issues_dir,
  scan_flows_dir, watch_dir_fsnotify
- 3 tipos: Issue, Flow, FsEvent
- Tests round-trip + scan reales + watcher fsnotify (all PASS)
- Capability group 'kanban' nuevo (docs/capabilities/kanban.md)

Apps:
- apps/kanban_cpp/ (sub-repo) — frontend ImGui: board drag-drop,
  flows, filters, detail con CSV editors
- apps/kanban_cpp/backend/ — Go service port 8487: REST + SSE +
  fsnotify watcher, parser bidireccional MD<->SQLite cache

Issues:
- dev/issues/0130-kanban-cpp-v2.md (epic)
- 0130a parser, 0130b backend, 0130c frontend

CMakeLists.txt: add_subdirectory apps/kanban_cpp (registrado por
init_cpp_app scaffolder).

End-to-end verde: backend devuelve 189 issues + 9 flows; PATCH a
/api/issues/{id} reescribe .md (solo frontmatter, body intacto);
frontend --self-test exit 0; tests Go infra 5/5 PASS.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 22:20:15 +02:00

2.5 KiB

id, title, status, type, domain, scope, priority, depends, blocks, related, tags, flow, created, updated
id title status type domain scope priority depends blocks related tags flow created updated
0130a Funciones registry: parser MD + scan dirs + writer + watcher pendiente infra
registry-quality
dev-ux
registry-only alta
0130b
0130
registry
go
parser
frontmatter
fsnotify
0130 2026-05-22 2026-05-22

0130a — Funciones registry para kanban_cpp v2

Status: pendiente

Por que

El backend de kanban_cpp v2 necesita parsear/escribir frontmatter YAML de los .md de dev/issues/ y dev/flows/. Estas piezas son reusables (cualquier app del registry puede operar sobre issues/flows), asi que viven en el registry, no en el backend de la app.

Funciones a crear (delegar a fn-constructor en paralelo)

ID Firma Pureza
parse_issue_md_go_infra (path string) (Issue, []byte body, error) impure (FS)
write_issue_md_go_infra (path string, issue Issue, body []byte) error impure (FS)
scan_issues_dir_go_infra (root string) ([]Issue, error) impure (FS)
scan_flows_dir_go_infra (root string) ([]Flow, error) impure (FS)
watch_dir_fsnotify_go_infra (ctx, root) (<-chan FsEvent, error) impure (FS, async)

Tipos:

  • Issue_go_infra — struct con campos del frontmatter (id, title, status, type, domain, scope, priority, depends, blocks, related, flow, tags, created, updated, file_path, mtime_ns).
  • Flow_go_infra — struct equivalente para flows.
  • FsEvent_go_infra{path, op} con op in {create, write, remove, rename}.

Notas de implementacion

  • Usar gopkg.in/yaml.v3 para parsing (preserva orden de keys via yaml.Node).
  • Writer DEBE preservar:
    • Orden de campos del frontmatter original.
    • Body MD intacto (todo lo que va despues del segundo ---).
    • Comentarios YAML (libre, best-effort).
  • parse_issue_md debe ser tolerante: si falta un campo opcional, default empty.
  • watch_dir_fsnotify recursivo, debounce 200ms.

DoD

  • 5 pares .go + .md en functions/infra/.
  • Tests unitarios:
    • parse → write → parse round-trip preserva struct.
    • scan_issues_dir devuelve >=90 issues actuales.
    • watcher detecta creacion + modificacion + borrado.
  • fn index registra los 5 IDs + 3 tipos.
  • fn doctor uses-functions limpio.

Anti-scope

NO incluye en esta tanda:

  • Markdown rendering del body (eso lo hace el frontend si quiere).
  • Validacion contra TAXONOMY (existe fn doctor issues).
  • CRUD de issues nuevos (write_issue cubre el caso, pero crear file = scope del backend).