feat(cpp/viz): split orphan TUs as separate fn entries (ADR 0003)

Cuando una funcion del registry parte su .cpp en varios TUs por testabilidad
o separacion ImGui-vs-puro, cada TU adicional se registra como entrada propia
con su .md en lugar de extender file_path para listar varios archivos.

Aplicado a:
- graph_labels_select_cpp_viz: helpers puros (compute_degrees + labels_select).
- graph_viewport_selection_cpp_viz: clear/add/toggle/is_selected puros.
- graph_types_cpp_viz: TU de update_bounds + find_node_by_user_data.

graph_labels y graph_viewport actualizados para declarar las nuevas entradas
en uses_functions. Razon detallada en docs/adr/0003 + regla actualizada en
.claude/rules/uses_functions.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-04 11:51:10 +02:00
parent a028928bc7
commit 46ac1ee031
8 changed files with 364 additions and 15 deletions
+23 -2
View File
@@ -5,10 +5,10 @@ lang: cpp
domain: viz
version: "1.0.0"
purity: impure
signature: "void graph::graph_labels_draw(const GraphData&, const GraphViewportState&, const LabelPolicy&, GetLabelFn, void*); void graph::graph_labels_draw_at(const GraphData&, float cam_x, float cam_y, float zoom, float wmin_x, float wmin_y, float w, float h, const LabelPolicy&, GetLabelFn, void*); int graph::graph_labels_select(const GraphData&, const LabelPolicy&, float cam_x, float cam_y, float zoom, float w, float h, const int* degrees, int* out_indices, int out_capacity); void graph::graph_compute_degrees(const GraphData&, int* out_degrees)"
signature: "void graph::graph_labels_draw(const GraphData&, const GraphViewportState&, const LabelPolicy&, GetLabelFn, void*); void graph::graph_labels_draw_at(const GraphData&, float cam_x, float cam_y, float zoom, float wmin_x, float wmin_y, float w, float h, const LabelPolicy&, GetLabelFn, void*)"
description: "Renderiza etiquetas de nodos sobre el viewport del grafo via ImDrawList con politica configurable: always-on para selected/hovered/pinned, top-N por (size * (degree+1)), y culling por viewport + min pixel size. Independiente del renderer GPU."
tags: [graph, labels, imdrawlist, viewport, osint, culling, top-n]
uses_functions: []
uses_functions: ["graph_labels_select_cpp_viz"]
uses_types: ["GraphData_cpp_viz"]
returns: []
returns_optional: false
@@ -152,3 +152,24 @@ graph::graph_labels_draw(graph, state, policy, get_label, &ctx);
- El callback se invoca como mucho una vez por nodo etiquetado por frame.
- Para reproducibilidad en tests, usar `graph_labels_select` con un buffer
de capacidad conocida — no toca ImGui.
## Split de TU (2026-05-04, ADR 0003)
Los helpers puros `graph_compute_degrees` y `graph_labels_select` viven en
`graph_labels_select.cpp` y se indexan como entrada propia
`graph_labels_select_cpp_viz`. Esta entrada `graph_labels.md` solo cubre
`graph_labels_draw` y `graph_labels_draw_at` (impuras, dependen de ImGui).
Apps que reusan `graph_labels` deben enlazar AMBOS `.cpp` y declarar AMBAS
entradas en su `app.md`:
```cmake
${FN_CPP_ROOT_DIR}/functions/viz/graph_labels.cpp
${FN_CPP_ROOT_DIR}/functions/viz/graph_labels_select.cpp
```
```yaml
uses_functions:
- graph_labels_cpp_viz
- graph_labels_select_cpp_viz
```