Independent Project Not affiliated with, sponsored by, or endorsed by the Watch Tower Bible and Tract Society or Jehovah's Witnesses.
jw-agent-toolkit
ES

Package · Library

jw-legal

BrainDomain plugin: casos legales TJ vs Estado

Pieza arquitectónica del módulo legal F82. Modela JW vs Estado multi-país día 1 (libertad religiosa, objeción de conciencia, prohibiciones — Rusia 2017, Corea del Norte, Eritrea, Singapur, Tayikistán). Territory.iso_3166_1_alpha2 referencia el catálogo F82.0 jw_core.territories (30 países curados con jw_branch_region + legal_status_summary + ban_history con fuente inline) sin duplicar campos culturales. El BrainDomain se descubre automáticamente en jw_brain.domain.registry.discover_domains() retornando {'tj', 'legal-cases-tj'} sin conflicto. Conforma estructuralmente al Protocol BrainDomain (runtime_checkable) — isinstance() pasa. F82.2+ añade HUDOC source, researcher / hermeneutics / precedent_synthesizer agents.

Features

What it does, in detail.

01

6 NodeTypeSpec del dominio legal (F82.1)

LegalCase canonical_id case:{country_iso}:{court}:{year}:{case_id} con court_level, verdict_summary, primary_principle, jw_parties_role, coverage_confidence (alto para HUDOC primaria, medio para jw.org/legal curado, bajo para HRW/Forum18), language_original, url_canonical. Law canonical_id law:{country_iso}:{code} con topic (freedom_of_religion, conscientious_objection, assembly_permit), effective_date, repealed_date. Territory canonical_id territory:{iso_3166_1_alpha2} con jw_branch_region, legal_status_summary, ban_history — referencia jw_core.territories.Territory por iso_3166_1_alpha2. CourtPrecedent con principle_held + ratio_decidendi. LegalArgument con framing (textual/contextual/comparative/application) + scriptural_basis + secular_basis. PersecutionEvent con event_type (arrest/ban/property_seizure/violence) + source_kind (hrw/forum18/uscirf/yearbook).

02

8 EdgeTypeSpec con CONTRADICTS sensitive (F82.1)

CITES_LAW (LegalCase → Law). APPLIES_IN_TERRITORY (Law → Territory). APPEALS_AGAINST (LegalCase → LegalCase, self-link para cadenas apelatorias). SUPPORTED_BY_PRECEDENT (LegalCase → CourtPrecedent). CONTRADICTS (Law ↔ Law, non-directional + sensitive=True → la política de conflictos del segundo cerebro flag en vez de fusionar silenciosamente; útil cuando dos leyes regulan el mismo principio incompatible). GROUNDS_ARGUMENT (LegalArgument → Law o CourtPrecedent). OCCURRED_IN (PersecutionEvent → Territory). JUDGED_BY (LegalCase → Territory).

03

Plugin entry-point + discovery (F82.1)

pyproject.toml declara [project.entry-points.'jw_agent_toolkit.brain_domains'] legal-cases-tj = 'jw_legal.brain:LegalCasesTJBrainDomain'. Grupo jw_agent_toolkit.brain_domains añadido a jw_core.plugins.registry.GROUPS (sexto grupo del F41 plugin SDK, junto a agents/parsers/embedders/vlm_providers/gen_providers) con REQUIRED_BY_GROUP = ('name', 'nodes', 'edges'). discover_domains() incluye builtin 'tj' + plugin 'legal-cases-tj' sin conflicto. LegalCasesTJBrainDomain conforma estructuralmente al BrainDomain runtime_checkable Protocol — isinstance(d, BrainDomain) pasa.

04

Composición con jw_core.territories (F82.0 → F82.1)

Territory en F82.0 vive en jw_core/territories.py como dataclass que compone jw_core.data.locale_context.LocaleContext via property self.locale. Cero duplicación: cultural (name, languages, dominant_religions, sensitive_topics, cultural_anchors, holidays_to_acknowledge, notes) en LocaleContext; legal (jw_branch_region, legal_status_summary, ban_history) en Territory. get_territory_full(iso) combina ambos en un dict. 30 territorios curados: 5 banned (RU, KP, ER, SG, TJ), 8 restricted (CN, AZ, BY, VN, MM, TR, CU, KZ), 17 free (ES, MX, US, AR, BR, KR, JP, DE, FR, IT, GR, AM, GE, MD, CO, PE, PH). Cada ban_history entry con fuente inline (URL jw.org/legal, número ECHR como Krupko v Russia 26587/07, sentencia SCJN/SCOTUS como Barnette 1943).

05

Próximas piezas del módulo legal (F82.2+)

F82.2 — HUDOCSource extiende jw_core.news.NewsSource para ingesta ECHR (Krupko, Bayatyan, Religionsgemeinschaft, Moscow JW…). F82.3 — agente legal_case_researcher con @fidelity_wrap(PF020 no-hallucinated-rulings, hard). F82.4 — LegalReasoningStep extiende ReasoningTree F67 con legal_kind ∈ {textual_analysis, contextual_analysis, comparative_analysis, application}. F82.5 — agente hermeneutics_analyzer (10 goldens E2E con cassettes). F82.6 — precedent_synthesizer con Meta-orchestrator F65 DAG cross-país + coverage_warnings cuando cruza confianzas heterogéneas. F82.7 — principios YAML PF020-PF024 en jw-eval.

In practice

Four lines.
Verifiable result.

Descubrir el plugin desde el segundo cerebro y enumerar nodos/aristas.

python · jw-legal
from jw_brain.domain.registry import discover_domains
from jw_core.plugins.factory import clear_plugin_cache
from jw_core.territories import get_territory_full

clear_plugin_cache()
domains = discover_domains()
# {'tj', 'legal-cases-tj'}

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']

# Catálogo Territory F82.0 que el BrainDomain referencia
full = get_territory_full("RU")
print(full["jw_branch_region"])        # "Russia (closed since 2017)"
print(full["legal_status_summary"])    # "banned"
print(full["ban_history"][0])
# "2017-04-20: Supreme Court ruling designates JWs as 'extremist'"
print(full["name"]["en"])              # "Russia" (de LocaleContext)

Public API

What the module exports.

Resumen de los símbolos principales. La exhaustive reference covers each one with signature, parameters, and examples.

  • LegalCasesTJBrainDomain (BrainDomain Protocol conformant)
  • brain.schema.legal_node_specs (6 NodeTypeSpec)
  • brain.schema.legal_edge_specs (8 EdgeTypeSpec, CONTRADICTS sensitive)
  • Entry-point: jw_agent_toolkit.brain_domains :: legal-cases-tj
  • jw_core.territories.{Territory, get_territory, get_territory_full, territories_by_status, territories_by_branch} (F82.0)