Guide
jw-legal BrainDomain plugin
Esta guía cubre F82.1: el plugin jw-legal que registra el
BrainDomain legal-cases-tj (6 nodos × 8 aristas) en el segundo cerebro.
Uso desde el segundo cerebro
from jw_brain.domain.registry import discover_domains
domains = discover_domains()
legal = domains["legal-cases-tj"]
print([n.name for n in legal.nodes])
# ['LegalCase', 'Law', 'Territory', 'CourtPrecedent', 'LegalArgument', 'PersecutionEvent']
print([e.name for e in legal.edges])
# ['CITES_LAW', 'APPLIES_IN_TERRITORY', 'APPEALS_AGAINST',
# 'SUPPORTED_BY_PRECEDENT', 'CONTRADICTS', 'GROUNDS_ARGUMENT',
# 'OCCURRED_IN', 'JUDGED_BY']
Inicializar el grafo:
uv run jw brain init --domain legal-cases-tj --backend duckdb
uv run jw brain status
# debería listar legal-cases-tj con 6 node types + 8 edge types
Schema
Nodos
| Nodo | canonical_id_pattern | Confianza mín | Obsidian |
|---|---|---|---|
LegalCase | case:{country_iso}:{court}:{year}:{case_id} | 0.95 | cases/ |
Law | law:{country_iso}:{code} | 0.90 | laws/ |
Territory | territory:{iso_3166_1_alpha2} | 0.95 | territories/ |
CourtPrecedent | precedent:{country_iso}:{court}:{year}:{principle_id} | 0.85 | precedents/ |
LegalArgument | arg:{language}:{principle}:{slug} | 0.70 | arguments/ |
PersecutionEvent | persec:{country_iso}:{year}:{slug} | 0.70 | persecution/ |
Territory.iso_3166_1_alpha2 referencia el catálogo
jw_core.territories entregado por F82.0 — el plugin
no duplica los datos culturales (idiomas, religión, etc.).
Aristas
| Edge | Sources | Targets | Directional | Sensitive |
|---|---|---|---|---|
CITES_LAW | LegalCase | Law | ✅ | — |
APPLIES_IN_TERRITORY | Law | Territory | ✅ | — |
APPEALS_AGAINST | LegalCase | LegalCase | ✅ | — |
SUPPORTED_BY_PRECEDENT | LegalCase | CourtPrecedent | ✅ | — |
CONTRADICTS | Law | Law | ❌ | ⚠️ |
GROUNDS_ARGUMENT | LegalArgument | Law, CourtPrecedent | ✅ | — |
OCCURRED_IN | PersecutionEvent | Territory | ✅ | — |
JUDGED_BY | LegalCase | Territory | ✅ | — |
CONTRADICTS es no-direccional y marcado sensitive=True: la política
de conflictos del segundo cerebro flag la arista en vez de
fusionarla silenciosamente. Útil cuando dos leyes (de distintos países o
de distintas épocas en el mismo país) regulan el mismo principio de
forma incompatible.
Registro del plugin
pyproject.toml declara el entry-point:
[project.entry-points."jw_agent_toolkit.brain_domains"]
legal-cases-tj = "jw_legal.brain:LegalCasesTJBrainDomain"
El grupo jw_agent_toolkit.brain_domains está registrado en
jw_core.plugins.registry.GROUPS desde F82.1. Verificación:
from jw_core.plugins.registry import GROUPS
assert "jw_agent_toolkit.brain_domains" in GROUPS
Conformidad estructural
LegalCasesTJBrainDomain cumple el Protocol
jw_brain.domain.contract.BrainDomain (runtime-checkable):
from jw_brain.domain.contract import BrainDomain
from jw_legal import LegalCasesTJBrainDomain
assert isinstance(LegalCasesTJBrainDomain(), BrainDomain)
Esto significa que cualquier otro paquete puede declarar otro
BrainDomain (por ejemplo financial-cases-tj) siguiendo el mismo
patrón sin tocar ni jw-brain ni jw-core.
Próximas fases que consumen este BrainDomain
- F82.2 —
HUDOCSource(extiendejw_core.news.NewsSource) ingesta sentencias ECHR y creaLegalCase+JUDGED_BY+CITES_LAW. - F82.3 — agente
legal_case_researcherquery por país/topic/year viajw_brain.query.router.QueryRouter(GRAPH_FIRST). - F82.4 —
LegalReasoningStepextiendeReasoningTree(F67) conlegal_kind ∈ {textual, contextual, comparative, application}. - F82.5 — agente
hermeneutics_analyzer. - F82.6 — agente
precedent_synthesizer(Meta-orchestrator F65 DAG). - F82.7 — principios YAML PF020–PF024 en
jw-eval.
Edit this page on docs/guias/jw-legal-brain-domain.md