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>
This commit is contained in:
2026-05-17 20:02:27 +02:00
parent c3e14963b1
commit ad8944af8e
3 changed files with 453 additions and 86 deletions
+1
View File
@@ -9,6 +9,7 @@ icon:
accent: "#c026d3"
uses_functions:
- parse_md_frontmatter_cpp_core
- compute_ring_layout_cpp_core
uses_types: []
framework: "imgui"
entry_point: "main.cpp"