2233280302853cf9cd88a2da5f8b12d6e24f8457
12 tests cubriendo: - modo preview (no escribe a operations.db) - dedupe dentro de un run (mismo (type_ref, name) una sola vez) - texto vacio retorna error con exit 2 - max_entities trunca al limite - types filtra por tipo IoC - use_hybrid=false ⇒ stats.layers solo regex - runs idempotentes producen mismo proposal Apply-side (replica en Python del extract_panel_apply C++): - inserta solo selected - dedupe por (type_ref, name) - inserta relaciones cuando endpoints resuelven - skip relacion si endpoint unselected - dedupe relacion (from, to, name) en repeticion GLiNER/GLiREL no se ejercitan en pytest — los modelos pesan cientos de MB. La logica de hybrid se valida con regex+regex (mismo path de merge/dedup) y con tests unitarios separados si se quisiera. Se documenta la decision en el docstring del modulo. Helper real_registry_root resuelve fn_registry desde un worktree (el conftest del repo asume ancestor que en worktrees no existe). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Description
OSINT graph viewer — agnostic GPU-accelerated graph explorer for any operations.db
Languages
C++
64.5%
Python
32.1%
Go
1.6%
Shell
1.5%
CMake
0.3%