2233280302
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>