b9716a7cd6
Snapshot de WIP acumulado de sesiones previas antes de merge wave 1 del flow 0008 (kanban_cpp + agent_runner_api + DoD schema). Incluye: - dev/flows/0008-kanban-cpp-and-agent-workflows.md - dev/issues/0112-0119*.md (7 sub-issues) - WIP previo en cmd/fn/doctor.go, registry/*, modules/, cpp/, etc. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.6 KiB
4.6 KiB
id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags
| id | title | status | type | domain | scope | priority | depends | blocks | related | created | updated | tags | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0109h | skill_tree: generar ideas con LLM y promover a issue/flow desde la interfaz | in-progress | feature |
|
app-scoped | alta |
|
|
2026-05-17 | 2026-05-17 |
|
0109h — Generate ideas + promote to issue/flow
UX que el usuario quiere
Click en cualquier nodo del Tree → Inspector aparece con boton [ ⨁ Generate ideas ]. Click ese boton →
- Skill_tree lanza
claude -p "<prompt contextual>"en background. - LLM devuelve N (3-5) ideas JSON con
{title, description, type: issue|flow, domain}. - Cada idea aparece como un ghost-node (nodo semi-transparente con outline animado) que emerge del nodo source y se anima hacia su target ring/sector segun su domain.
- Click sobre el ghost → Inspector pivota al draft. Muestra title + description + buttons:
[ + Generate issue ](technical — escribedev/issues/NNNN-<slug>.md)[ + Generate flow ](use-case — escribedev/flows/NNNN-<slug>.md)[ × Discard ](elimina del buffer)
- Si el usuario promueve → archivo creado, draft eliminado, F5 (auto-trigger) recarga y el nodo aparece como nodo real con ID nuevo.
Modelo
Ghost-node
struct DraftNode {
std::string id; // tmp_<uuid>
std::string source_id; // ID del nodo que la genero
std::string title;
std::string description;
std::string proposed_type; // "issue" or "flow"
std::string proposed_domain;
std::string proposed_priority;
std::vector<std::string> proposed_depends;
std::vector<std::string> proposed_dod_items;
float x = 0, y = 0; // posicion actual (lerp)
float target_x = 0, target_y = 0;
double spawn_t = 0; // animacion 1s emerge
};
Buffer global g_drafts (en memoria, NO persistido — drafts viven hasta promote o discard, sin persistencia entre runs).
Spawn LLM
spawn_claude_p_for_ideas(node):
- Construye prompt:
Eres un asistente que propone sub-tareas para el sistema fn_registry. Contexto del nodo origen: ID: 0109b Title: skill_tree layout anillos Status: completado Domain: meta, cpp-stack Type: feature Body: <pegado del .md sin frontmatter> Proponme 3-5 ideas de sub-tareas (issues tecnicas o flows de uso) que extiendan o validen lo logrado por este nodo. Para cada idea devuelve JSON: { "title": "...", "description": "...", "type": "issue|flow", "domain": "<uno de meta/cpp-stack/...>", "priority": "alta|media|baja", "depends": [], "dod": ["..."] } Devuelve SOLO un array JSON, sin texto extra. claude --print "<prompt>"con timeout 60s. stdout capturado en pipe.- Parse JSON array → cada elemento se convierte en
DraftNode.
Promote
promote_draft_to_issue(draft, output_dir):
- Encuentra siguiente NNNN libre escaneando
dev/issues/. - Renderiza frontmatter YAML desde template + body.
- Escribe
dev/issues/NNNN-<slug>.md. - Quita
draftdeg_drafts. - Trigger
reload_scan().
Similar para flows en dev/flows/.
Sub-issues
- 0109h1 — Framework ghost-nodes (sin LLM, mock con datos hardcoded): Render + animacion + Inspector + promote.
- 0109h2 — Integracion claude -p real: spawn async, parse JSON, fill drafts.
- 0109h3 — Loading indicator + cancel.
- 0109h4 — Rate-limit: 1 invocacion por nodo por hora (
last_request_ten draft buffer).
Riesgos
- claude -p timeout: respuestas >60s posibles. Mitigacion: async + ImGui spinner.
- JSON malformado: el modelo a veces devuelve markdown alrededor del JSON. Mitigacion: extraer entre primeras
[y ultimas], retry parsing. - Costo: cada invocacion consume tokens. Mostrar contador de invocaciones en sesion (
g_llm_calls_count). - Promote a archivo escribe en
dev/issues/que NO es sub-repo: ese write toca fn_registry main repo. OK porque dev/issues/ es parte del registry. Pero requiere que skill_tree.exe tenga permiso de escritura — en Windows con paths WSL\\wsl$\Ubuntu\home\lucas\fn_registry\dev\issues\debe funcionar.
DoD
- Boton Generate ideas en Inspector lanza spawn LLM.
- Drafts aparecen como ghost-nodes en el canvas con animacion emerge.
- Click ghost → Inspector pivota a draft.
- Buttons Generate issue / Generate flow escriben .md a disco.
- Reload F5 (o auto-trigger tras escribir) muestra el nuevo nodo en el canvas.
- Discard elimina draft del buffer.
- Rate-limit suave (1 invocacion / nodo / hora).