Commit Graph

16 Commits

Author SHA1 Message Date
agent 9ee3be8e4e feat: Launch workflow boton via agent_runner_api (issue 0116)
- 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.
2026-05-18 18:46:02 +02:00
egutierrez 202bfc5ccb merge issue/0109l-unc-fallback
UNC fallback para encontrar registry root desde Windows nativo.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 16:29:35 +02:00
egutierrez c93cca82ba fix(skill_tree): UNC fallback para encontrar registry desde Windows nativo
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>
2026-05-18 16:29:35 +02:00
egutierrez 3a76f04204 merge issue/0109hk-dashboard-ghost-nodes
Dashboard + ghost-nodes mvp + promote a issue/flow.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 20:40:43 +02:00
egutierrez a6366b4d50 feat(skill_tree): Dashboard panel + ghost-nodes + mock generate ideas
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>
2026-05-17 20:40:43 +02:00
egutierrez bbf9cb9cbf merge issue/0109b3-tooltip-claude-fix
Tooltip flash fix + Claude fix button.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 20:28:23 +02:00
egutierrez c0ad94e050 fix(skill_tree): tooltip width fixed + Claude fix button
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>
2026-05-17 20:28:23 +02:00
egutierrez 094e4a73ee merge issue/0109b2-colors-anticollision
3 color buckets + grid anti-collision por bin.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 20:23:01 +02:00
egutierrez 17c99cd9d2 feat(skill_tree): 3-bucket colors + grid anti-collision por bin
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>
2026-05-17 20:23:01 +02:00
egutierrez 47b1b0a465 merge issue/0109b1-anti-overlap
Cards mas chicas, anillos mas anchos, zoom-fit inicial, flows resaltados.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 20:16:34 +02:00
egutierrez 78910bc295 fix(skill_tree): anti-overlap + flows mas visibles
- 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>
2026-05-17 20:16:29 +02:00
egutierrez 72552bcb5a merge issue/0109b-skill-tree-rings: canvas ImDrawList + ring layout
Fase B del epic 0109 completa. 166 nodos renderizados en anillos concentricos
con cards, aristas, tooltips, pan/zoom, lock-unlock derivado, animacion lerp.

Funcion nueva: compute_ring_layout_cpp_core (pure, FNV-1a determinista,
10 tests, 142 assertions).

Sigue: 0109c (Inspector evolucionado).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 20:02:33 +02:00
egutierrez ad8944af8e feat(skill_tree): canvas ImDrawList + ring layout + cards (0109b)
Render anillos concentricos + sectores radiales por dominio con ImDrawList.
166 nodos pintados con label ID, tooltip on hover, picking O(N), pan+zoom.

Decisiones:
- Pivote desde graph_renderer GPU a ImDrawList CPU. 166 nodos no justifican
  pipeline GPU; ahorra ~120 LOC y init_gl_loader.
- 5 rings: done / in-progress / unlocked / locked / deferred.
- 18 sectores = 18 dominios canonicos (dev/TAXONOMY.md), labels en aro
  exterior.
- Issues = circulos, flows = rombos para diferencial visual.
- Lock-unlock derivado: pendiente_unlocked vs pendiente_locked segun depends.
- Animacion lerp 1s ease-in-out entre prev/current position en cambios de
  status entre reloads.
- HUD strip: LV + XP + conteos por bucket.
- Pan: drag derecho/medio. Zoom: rueda centrada en cursor.

uses_functions:
- parse_md_frontmatter_cpp_core (ya existia desde 0109a)
- compute_ring_layout_cpp_core (NUEVA, pure, 10/10 tests, 142 assertions)

Self-test: 166 nodes, parse_errors=0, unmapped=0, exit 0.
Breakdown: done=77 in-progress=2 unlocked=64 locked=22 deferred=1.

Sigue: 0109c (Inspector con DoD parseado y uses_functions linkables).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 20:02:27 +02:00
egutierrez c3e14963b1 merge issue/0109a-skill-tree-shell: scan dev/issues+flows + parser frontmatter
Fase A del epic 0109 completa. App skill_tree compila, parsea 166 nodos (159 issues + 7 flows) sin errores, renderiza conteos en panel Tree + detalle en Inspector. Reload manual F5. Smoke --self-test exit 0.

Funcion nueva: parse_md_frontmatter_cpp_core (pure, subset YAML, 10/10 tests).

Sigue: 0109b layout anillos + render estatico.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 19:46:49 +02:00
egutierrez a49481e1d4 feat(skill_tree): scan dev/issues+flows, parse frontmatter, render counts
- 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>
2026-05-17 19:44:10 +02:00
egutierrez 9a59708422 chore: scaffold skill_tree (issue 0109)
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>
2026-05-17 19:30:30 +02:00