- Anade boton 'Launch workflow' (TI_ROCKET) que hace POST async a
http://localhost:8486/api/runs con {issue_id, mode:'fix-issue'}.
- HTTP async via std::thread + fn_http::request (de http_request_cpp_core)
con timeout 3s. NO bloquea el frame.
- Feature flag 'legacy_claude_fix' (default OFF) controla la visibilidad
del boton 'Claude fix' legacy (terminal externa + claude --dangerously-
skip-permissions). Flag leido al arrancar desde dev/feature_flags.json.
- Toast 3s con run_id devuelto por el API (o error si :8486 down /
transport fail / HTTP non-2xx). Render thread-safe con mutex.
- CMakeLists.txt linkea cpp/functions/core/http_request.cpp.
- app.md: version 0.1.0 -> 0.2.0, uses_functions anade http_request_cpp_core,
capability growth log con entrada v0.2.0.
Problema: skill_tree.exe en Windows tenia 0 nodos porque discover_registry_root
solo probaba env FN_REGISTRY_ROOT y walk-up desde cwd. Cwd en deploy es
C:\Users\lucas\Desktop\apps\skill_tree\ — sin registry.db cerca.
Fix:
- Anadir 3a estrategia (#ifdef _WIN32): probar paths UNC a WSL.
- Distros: WSL_REGISTRY_PATH env > Ubuntu-22.04 > Ubuntu > kali-linux > Debian.
- Tanto \wsl.localhost\<distro>\... como \wsl$\<distro>\... (legacy).
- Banner rojo en panel Tree si root vacio, con instrucciones.
Diagnostico:
- Mover discover + reload a first render frame (fn_log no inicializado
antes de fn::run_app). Ahora log captura el path encontrado.
Verificacion: log dice
discover_registry_root -> '\\wsl.localhost\Ubuntu-22.04\home\lucas\fn_registry'
reloaded 173 nodes, 0 parse errors
Roadmap proximo: 0109m (issues_api HTTP service) reemplazara UNC con
cliente HTTP cuando este disponible.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Cierra 0109k (Dashboard) + 0109h fase 1 (ghost-nodes framework con mock LLM).
Dashboard (Ctrl+3 / menu View / Dashboard):
- HUD: LV global = floor(sqrt(XP_total)) + barra de progreso al next level
- Conteo done/planned/todo/drafts
- Tabla por dominio sortable: Done/Planned/Todo/Progreso bar/LV
- Top 3 dominios masterizados
- Top 3 dominios proximos a desbloquearse (mas todo count)
- XP scheme: epic=10, infra=4, feature=3, refactor/spike/planning=2,
bugfix/chore/docs=1, flow=5
Ghost-nodes framework:
- DraftNode struct con animacion emerge desde source -> target ring/sector
- g_drafts buffer in-memory (NO persistido, viven hasta promote/discard)
- g_sel_kind tagged: SelKind::None|Node|Draft (sustituye int g_selected)
- Inspector pivota a draft view cuando seleccion es draft
- Pass 3 de render en canvas: ghost-nodes con pulse alpha + label visible
Generate ideas button (Inspector de nodos reales):
- Color emerald
- On click: mock_generate_ideas(node) genera 3-5 drafts hardcoded
- TODO 0109h2: spawn claude -p real con prompt contextual + parse JSON
Promote buttons (Inspector de drafts):
- [Generate issue] -> escribe dev/issues/NNNN-<slug>.md (next_issue_id scan)
- [Generate flow] -> escribe dev/flows/NNNN-<slug>.md (next_flow_id scan)
- [Discard] -> elimina del buffer
Self-test: 171 nodes, parse_errors=0, unmapped=0.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Tooltip:
- Fija ancho 360px via SetNextWindowSize(Always) + PushTextWrapPos antes de
BeginTooltip. Soluciona el flash de ventana enorme en primer frame
cuando TextWrapped no tenia wrap width definido.
Claude fix button (Inspector):
- Aparece solo si status != done (Bucket::Planned o Todo).
- Color violeta-500 destacado.
- On click: lanza terminal externa con
wt.exe wsl.exe --cd ~/fn_registry -- bash -ic 'claude --dangerously-skip-permissions'
- Fallback: cmd.exe /C start wt.exe ... si CreateProcessA falla.
- Linux: probe x-terminal-emulator/gnome-terminal/konsole/xterm/alacritty/
kitty hasta encontrar uno disponible.
- Feedback temporal 5s ok/fail tras click.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Cambios visuales pedidos por el usuario:
1. Colores simplificados a 3 buckets independientes del ring:
- done (completado/completed) -> green-500 #22c55e
- planned (in-progress) -> amber-500 #f59e0b
- todo (resto: pendiente/locked/...) -> violet-500 #a855f7
Ring sigue separando geografia, color cuenta el estado.
2. Hash-distribute unknown domains: nodos sin domain valido (61 sobre 167)
ya no se amontonan en sector 17. Se distribuyen via FNV-1a(id) % 18
entre los 18 sectores canonicos.
3. Anti-collision grid 2D por bin (ring,sector). compute_ring_layout
distribuia solo radialmente; ahora main.cpp resuelve bins poblados
con un grid rows x cols (con brick offset entre filas) que ocupa
tanto eje radial como angular del sector. Determinista (sort by id).
self-test: 167 nodes, 0 parse_errors, 0 unmapped. Linux + Windows OK.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- kNodeRadius 18 -> 10 (mas cards caben sin pisarse)
- ring_radii expandidos { 0, 200, 380, 600, 900, 1200 } (mas banda por anillo)
- bin_padding 18 -> 28 (margen entre anillos)
- Initial zoom = auto-fit (Min(canvas) * 0.92 / 2400) en lugar de zoom=1
- Boton 'Fit view' reemplaza 'Reset view'
- Flows ahora 1.55x mayores que issues + outline cyan permanente para
destacar entre la marea de 160 circulos
- Render en 2 pasadas: issues primero (background), flows on top
- Labels de ID siempre visibles en flows (no condicionado al zoom)
- Ring bands con tint sutil por status para legibilidad
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- main.cpp scan dev/issues + dev/flows con std::filesystem
- parsea cada .md con parse_md_frontmatter_cpp_core (nueva fn pure)
- cuenta por status/domain/kind, lista nodos en panel Tree
- panel Inspector muestra detalle del nodo seleccionado (DoD, depends, related)
- --self-test imprime conteos a stdout (exit 0 si parse_errors=0)
- Reload manual via boton o tecla F5
- discover_registry_root: FN_REGISTRY_ROOT env o walk-up desde cwd
- uses_functions actualizado con parse_md_frontmatter_cpp_core
- CMakeLists.txt incluye el .cpp del parser
Smoke test 166 nodos parseados (159 issues + 7 flows), 0 parse errors.
Fase A del epic 0109. Sigue: 0109b layout anillos + render estatico.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Initial scaffold via init_cpp_app_bash_pipelines:
- main.cpp con Tree + Inspector panels (placeholders)
- app.md con trio icon (tree-structure + #c026d3) + e2e_checks
- CMakeLists.txt via add_imgui_app
- appicon.ico generado con generate_app_icon_py_infra
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>