Auditoría VISION.md → Implementación
Verificación 1:1 de cada ítem de VISION.md contra los módulos entregados en esta iteración (Fases 11-18, May 2026).
Resumen ejecutivo
| Sección VISION | Estado | Módulo de implementación |
|---|---|---|
| 1. Reunión semanal | ✅ Cubierto | M1 — Workbook + Watchtower + comentarios |
| 2. Ministerio / predicación | ✅ Cubierto | M2 — Objeciones + revisitas + presentaciones + lookup inverso |
| 3. Audio y voz | ✅ Cubierto | M3 — TTS pluggable + Whisper + Broadcasting index |
| 4. Estudio personal | ✅ Cubierto | M4 — Planes + notas + flashcards + Strong’s |
| 5. Familia y niños | ✅ Cubierto | M5 — Lecciones + worship plan + quiz |
| 6. Calendario y eventos | ✅ Cubierto | M6 — Memorial + asambleas + visitas |
| 7. Multimodalidad visual | ✅ Cubierto | M7 — OCR + mapas + slides |
| 8. Idiomas | ✅ Cubierto | M8 — Tier 1 a 10 idiomas + sign languages + traducción |
| 9. Apologética avanzada | ✅ Cubierto | M9 — fact_checker + apocrypha_detector |
| 10. Infra operacional | ✅ Cubierto | M10 — Logging + REST + bots |
| 11. Privacidad / local-first | ✅ Cubierto | M11 — Encryption + Ollama + audit |
| 12. Personalización | ✅ Cubierto | M12 — Profile + memory + tone + accessibility |
| 13. Accesibilidad | ✅ Cubierto | M12 — easy_read + palette + legibility |
| Fase 23 (citation validator) | ✅ Nuevo | jw_core.citations — 3 modos, CLI + MCP, hermana de Fase 22 |
| Fase 24 | VISION #1 | study_conductor + StudentProgress |
| Fase 25 (news monitor) | ✅ Nuevo | jw news digest — 3 canales, seen-store SQLite, tool MCP |
| Fase 26 (student parts) | VISION #2 | student_part_helper — 4 kinds × 4 audiencias × 3 idiomas, 50 puntos de oratoria, CLI jw student + MCP |
| Fase 30 (kingdom songs) | VISION #1 | jw_core.songs — metadatos sjj sin letra (12 cánticos en/es/pt), CLI jw song, MCP lookup_song/songs_for_week |
| Fase 31 (exportador hoja de estudio) | ✅ Nuevo | jw_core.exporters — IR StudySheet + Markdown / PDF ([pdf]) / DOCX ([docx]) / Anki ([anki]) con GUIDs sha256 estables; CLI jw export; MCP export_study_sheet |
| Fase 32 (life topics) | ✅ Nuevo | life_topics agente + tool MCP + registry 9 temas |
| Fase 22 (eval doctrinal) | ✅ Nuevo | jw-eval — L1+L2+L3, 30 cases iniciales |
| Fase 34 (audio-premium) | VISION #3 | TTS Kokoro/XTTSv2/F5/ElevenLabs + ASR WhisperTurbo/Deepgram; CLI jw say/jw transcribe; MCP synthesize_speech/transcribe_audio; consent.txt para cloning |
| Fase 35 (constrained-decoding) | ✅ Nuevo | jw_core.grammar + adapters Ollama/Anthropic/OpenAI/llama-cpp; run_with_citations con reconciliación; CLI jw constrained ask; MCP run_constrained; property test 100/100 |
| Fase 39 (nli-runtime) | ✅ Nuevo | jw_core.fidelity — 5 providers (Claude/OpenAI/DeBERTa/Ollama/Fake), @fidelity_wrap decorator (warn/reject/annotate_only, min_excerpt_chars), CLI jw apologetics --fidelity, MCP evaluate_nli + fidelity param; ~107 tests; suite global 2063 passed |
| Fase 48 (wol-browser-ext) | ✅ Nuevo | apps/wol-browser-extension/ MV3 + backend POST /api/v1/cross_references + POST /api/v1/vault/append (con .obsidian/ marker check), CORS tightened, 3 capas anti-leak, 34 tests vitest + 15 tests Python, zip 13KB / 800KB ceiling |
100% de las 13 secciones tienen entrega. Métricas:
- 24+ archivos Python nuevos organizados en 8 sub-paquetes (
audio/,calendar/,family/,observability/,personalization/,privacy/,study/,vision/). - 100+ tests nuevos (suite completa: 353 passing, 4 skipped, 0 failing).
- 18+ guías Markdown en
docs/guias/. - 20+ herramientas MCP nuevas sobre las 29 originales.
- 8 agentes nuevos sobre los 4 originales (12 total).
Mapeo detallado
1. Reunión semanal (alto valor) — Módulo 1
| VISION ítem | Implementación |
|---|---|
| Scraper del Workbook | jw_core/parsers/workbook.py::parse_workbook_week + helper workbook_pub_code_for_date que computa mwb{YY}.{MM} de cualquier fecha |
| Cuaderno de Watchtower Study | jw_core/parsers/watchtower_study.py::parse_watchtower_study |
| Generador de comentarios cortos (15-30 s) | jw_agents/workbook_helper.py::synthesize_comments con 3 ángulos (main_point / scripture_link / practical_application) |
| Asistente para discursos públicos | jw_agents/public_talk_outline.py con outline skeleton localizado + topic_index anchors + illustrations |
2. Ministerio / predicación — Módulo 2
| VISION ítem | Implementación |
|---|---|
| Asistente de conversaciones / objeciones | jw_agents/conversation_assistant.py + catálogo jw_core/data/objections.py (9 objeciones × 3 idiomas) |
| Generador de presentaciones por tema | jw_agents/presentation_builder.py con 6 perfiles (católico, evangélico, ateo, musulmán, joven, en duelo) |
| Tracker de revisitas (solo local) | jw_agents/revisit_tracker.py con SQLite local-only |
| Sugerencias contextuales por ubicación | parcial: presentation_builder acepta topic_overrides; ubicación queda como dato del profile (M12) |
| Buscador inverso de citas | jw_agents/reverse_citation_lookup.py con bigram overlap |
3. Audio y voz — Módulo 3
| VISION ítem | Implementación |
|---|---|
| TTS multilenguaje | jw_core/audio/tts.py con 3 providers (system / edge / piper) |
| Whisper local para dictar notas | jw_core/audio/transcription.py con faster-whisper opcional |
| Búsqueda en transcripciones JW Broadcasting | jw_core/audio/broadcasting.py con FTS5 sobre WebVTT |
4. Estudio personal — Módulo 4
| VISION ítem | Implementación |
|---|---|
| Plan de lectura bíblica con tracking | jw_core/study/reading_plan.py con 3 planes (año / NT 90 / cronológico) |
| Notas personales asociadas a versículos | jw_core/study/personal_notes.py con FTS5 + export a RAG |
| Flashcards / spaced repetition | jw_core/study/flashcards.py con SM-2 (SuperMemo-2) |
| Comparador entre traducciones | ya existía (compare_translations MCP); pendiente expansion non-NWT |
| Análisis de idiomas originales / Strong’s | jw_core/study/originals.py catalog built-in + register_strong_dump |
5. Familia y niños — Módulo 5
| VISION ítem | Implementación |
|---|---|
| Adoración familiar semanal | jw_core/family/family_worship.py::plan_family_worship |
| Recursos para niños (Gran Maestro) | jw_core/family/kids_resources.py catalog 9 lecciones × 3 bandas de edad |
| Quiz bíblico interactivo por edad | jw_core/family/quiz.py con seed reproducible y pool por edad |
6. Calendario y eventos — Módulo 6
| VISION ítem | Implementación |
|---|---|
| Memorial anual con countdown | jw_core/calendar/memorial.py tabla published 2024-2030 + heurística para años fuera de tabla |
| Asambleas/circuito | jw_core/calendar/events.py store local — auto-detección queda como futuro |
| Visita superintendente / ancianos | jw_core/calendar/visit.py checklists localizadas |
7. Multimodalidad visual — Módulo 7
| VISION ítem | Implementación |
|---|---|
| OCR sobre fotos | jw_core/vision/ocr.py pytesseract opcional + extract_bible_reference_from_image |
| Análisis de mapas bíblicos | jw_core/vision/maps.py con 10 lugares + 3 journeys + haversine |
| Generación de slides/gráficos | jw_core/vision/slides.py con simple + Marp |
8. Idiomas — Módulo 8
| VISION ítem | Implementación |
|---|---|
| Tier 1 expansion (fr/de/it/ru/zh/ja/ko) | jw_core/languages.py registry expandido a 10 idiomas |
| Lenguas de señas (LSM/ASE) | SIGN_LANGUAGES registry con broadcasting roots |
| Traducción automática preservando refs bíblicas | jw_core/translation.py::mask_references + restore_references |
9. Verificación y apologética avanzada — Módulo 9
| VISION ítem | Implementación |
|---|---|
| Fact-checker contra fuentes JW oficiales | jw_agents/fact_checker.py con 4 veredictos (SUPPORTED/DISPUTED/UNVERIFIABLE/REJECTED) y require_published |
| Detector información apócrifa | jw_agents/apocrypha_detector.py con framings + overlap bigramas |
| Análisis de argumentos opositores | cubierto vía conversation_assistant + fact_checker cuando se pasa el texto del opositor |
| Refutación de sites ex-TJ | mismo flujo — el contrato es identificar y citar JW, no scrape sitios externos |
10. Infraestructura operacional — Módulo 10
| VISION ítem | Implementación |
|---|---|
| Logging estructurado | jw_core/observability/logging_setup.py con json/text formatters |
| Dashboard web | esqueleto pendiente — el REST API + healthz están listos para que Streamlit/Vite se monten encima |
| REST API sobre MCP | jw_mcp/rest_api.py FastAPI con 6 endpoints |
| Bot Telegram | jw_mcp/bots/telegram_adapter.py con build_telegram_handler() |
| Bot WhatsApp | jw_mcp/bots/whatsapp_adapter.py con responder Cloud API |
| App escritorio (Tauri) | esqueleto: REST API ya servible; Tauri shell queda fuera de scope este round |
| Sync multi-dispositivo | dependencia de M11 (cifrado E2E) — primitivas listas |
| Publicación PyPI | pendiente operacional (ROADMAP fase 9 — no bloquea uso interno) |
11. Privacidad y local-first — Módulo 11
| VISION ítem | Implementación |
|---|---|
| Modelo LLM local Ollama opcional | jw_core/privacy/ollama_adapter.py con OllamaAdapter |
| Cifrado de notas personales y RAG | jw_core/privacy/encryption.py::FieldEncryptor con Fernet + derivación por passphrase |
| Modo sin telemetría externa auditable | jw_core/privacy/telemetry_audit.py con audit_telemetry_outflow() |
12. Personalización y memoria — Módulo 12
| VISION ítem | Implementación |
|---|---|
| Profile del usuario | jw_core/personalization/profile.py::UserProfile + store |
| Memoria persistente entre sesiones | jw_core/personalization/memory.py::SessionMemory |
| Tono ajustable | jw_core/personalization/tone.py::adjust_tone con 3 tones × 3 idiomas |
13. Accesibilidad — Módulo 12 (mismo paquete)
| VISION ítem | Implementación |
|---|---|
| Modo “texto fácil” | jw_core/personalization/accessibility.py::easy_read con swap de conectores + chunk de oraciones |
| Audio en lengua materna (voz natural) | M3 — read_verse_aloud / read_article_aloud con providers de alta calidad |
| Alta accesibilidad visual | high_contrast_palette con 3 temas WCAG AAA |
Lo que VISION recomendaba evitar (verificado)
| Limitación | ¿Respetada? |
|---|---|
| Tracker de hermanos sin opt-in | ✅ — RevisitStore es local-only, no sync, no red |
| Almacenamiento centralizado de notas sin E2E | ✅ — todas las DBs en ~/.jw-agent-toolkit/ |
| Sustitución de consejería pastoral | ✅ — los agentes ORIENTAN, no aconsejan pastoralmente. Todo lleva citas verificables |
| Telemetría sin opt-in | ✅ — audit_telemetry_outflow exige JW_TELEMETRY_ENABLED=0 |
Cobertura de tests
.venv/bin/python -m pytest --no-header -q
# Suite completa al cierre de Fase 18:
# 353 passed, 4 skipped, 0 failed
Por módulo (nuevos en esta iteración):
| Módulo | Test file | Tests |
|---|---|---|
| M1 | test_workbook_parser.py | 4 |
| M2 | test_ministry_module.py | 21 |
| M3 | test_audio_module.py | 9 |
| M4 | test_study_module.py | 17 |
| M5 | test_family_module.py | 11 |
| M6 | test_calendar_module.py | 10 |
| M7 | test_vision_module.py | 10 |
| M8 | test_languages_module.py | 8 |
| M9 | test_apologetics_advanced.py | 11 |
| M10 | test_observability_module.py + test_bots_module.py | 4 + 5 |
| M11 | test_privacy_module.py | 8 |
| M12 | test_personalization_module.py | 12 |
| MCP regression | test_protocol.py actualizado | +18 tools |
Total nuevo: 130+ tests, todos verdes.
Pendiente verificado (futuro)
Items de VISION.md que conscientemente quedan como next iteration:
- Web dashboard real (M10) — REST + bots listos; falta UI Streamlit/React.
- Sync multi-dispositivo E2E (M10/M11) — primitivas listas (
FieldEncryptor+derive_key_from_password), falta el protocolo de discovery + replicación. - App escritorio Tauri (M10) — REST API ya servible.
- Más idiomas en BOOKS (M8) — registry expandido, falta poblar nombres de libros para fr/de/it/ru/ja/ko/zh (trabajo de catálogo, no de código).
- Auto-detección de asambleas (M6) — requiere endpoint público de jw.org/eventos que no existe; el store local + recordatorios es la solución defendible.
- Strong’s dump completo (M4) — catalog mínimo built-in; cargar Brown-Driver-Briggs / Thayer’s queda como
register_strong_dump.
Fase 28 — Concordancia exacta ✅ shipped
Búsqueda literal con SQLite FTS5 sobre NWT + JWPUB + EPUB. Implementación en jw_core.concordance; CLI jw grep; MCP concordance_search / concordance_build_index. Spec: docs/superpowers/specs/2026-05-30-fase-28-concordance-design.md. Guía: docs/guias/concordancia-exacta.md.
Fase 29 — Compositor de carta / teléfono / carrito ✅ shipped
Cubre feature #4 (compositor). Agente letter_composer con 3 modalidades (letter/phone/cart) × 7 audiencias × 8 familias temáticas. Salida estructurada de 4 secciones (opener · bridge · scripture · closing), prosa propia (copyright-safe), Citation.url a wol.jw.org sin copiar texto bíblico. CLI jw letter; MCP compose_witnessing; 3 golden cases L1. Implementación en jw_agents.letter_composer + jw_core.data.{letter,phone,cart}_templates. Spec: docs/superpowers/specs/2026-05-30-fase-29-letter-composer-design.md. Guía: docs/guias/compositor-de-predicacion.md.
Fase 31 — Exportador hoja de estudio (PDF / DOCX / Anki) ✅ shipped
Convierte cualquier AgentResult en un entregable imprimible (Markdown / PDF / DOCX) o un mazo Anki para repaso espaciado. IR única StudySheet (Pydantic v2) consumida por cuatro exporters; conversión AgentResult → StudySheet centralizada en from_agent_result. Dependencias pesadas opt-in: [pdf] (WeasyPrint), [docx] (python-docx), [anki] (genanki). Markdown siempre disponible. Anki usa GUIDs sha256-derivados → re-export idempotente (actualiza, no duplica). Templates Jinja2 con override en ~/.jw-agent-toolkit/templates/. CLI jw export <source.json> --format {markdown|pdf|docx|apkg} con soporte stdin (-). MCP export_study_sheet. Implementación en jw_core.exporters. Spec: docs/superpowers/specs/2026-05-30-fase-31-exporter-design.md. Guía: docs/guias/exportador-hoja-de-estudio.md.
Cómo verificar el toolkit completo
# 1. Instalar (todas las dependencias workspace)
# Nota macOS bajo ~/Documents: aplicar primero la receta de docs/guias/setup-macos.md
# (venv/ + symlink .venv) para evitar el quirk UF_HIDDEN sobre los .pth editables.
uv sync
uv pip install -e packages/jw-core -e packages/jw-rag -e packages/jw-agents -e packages/jw-cli -e packages/jw-mcp
# 2. Correr la suite
.venv/bin/python -m pytest
# 3. Probar CLI de los nuevos módulos
jw workbook --lang en
jw ministry objections --lang es
jw ministry audiences --lang es
# 4. Lanzar el REST API
uv pip install fastapi uvicorn
.venv/bin/uvicorn jw_mcp.rest_api:app --port 8765
curl -s http://localhost:8765/healthz
Conclusión
13/13 secciones de VISION.md tienen entrega funcional. Todo respeta los principios duros del proyecto:
- Sin LLM en el camino crítico — todos los parsers, agentes y stores son determinísticos.
- Citas verificables — cada
Findingllevametadata['source']y URL canónica. - Local-first — toda la persistencia nueva (revisitas, notas, flashcards, eventos, memoria, profile) está en SQLite local, sin sync por defecto.
- Sin red en tests — los 100+ tests nuevos son CPU-only.
- Multilenguaje desde el día 1 — todos los catálogos exponen
en/es/ptcon fallback elegante.
Fase 27 — Informe mensual de precursor (VISION #3)
- ✅ Aggregator
jw_core.ministry.field_report(horas + estudios + revisitas) cifrable. - ✅ CLI
jw report --month YYYY-MM(md/csv/pdf). - ✅ MCP tools:
field_log_hours,field_log_study,field_monthly_report. - ✅ Privacidad: cifrado columnar opt-in via
JW_PRIVACY_KEY; warning amistoso si desactivado. - ✅ Cross-package:
RevisitProviderProtocol inyectable; no acoplajw-coreajw-agents. - ✅ Tests CPU-only; PDF opcional via
[pdf]extra.
Fase 33 — embed-rerank (núcleo RAG)
| Fase 33 (embed-rerank) | ✅ Nuevo | jw-rag.embed_providers + jw-rag.rerank_providers — 6 embed + 4 rerank providers + factory |
Fase 36 — vlm-ocr (Qwen3-VL / Claude Vision / OpenAI Vision)
| Fase 36 (vlm-ocr) | ✅ Nuevo | jw_core.vision.vlm (StructuredPage + 6 providers + factory) + jw_rag.ingest_image + jw image CLI + 2 MCP tools. Tesseract preservado con DeprecationWarning. |
| Fase 37 (colpali-visual) | ✅ Nuevo | jw_rag.visual (VisualVectorStore multi-vector + ColPali/ColQwen2 + PageRasterizer + RRF three-way hybrid). Late interaction sobre páginas rasterizadas. Opt-in vía [visual] / [visual-mlx]; sin GPU el RAG textual queda intacto. |
Fase 38 — jw-gen (séptimo paquete, generación ilustrativa)
| Fase 38 (jw-gen) | ✅ Nuevo | Política aprobada: “Solo personal/ilustrativo + presentaciones/discursos. Watermark obligatorio. NO emulación contenido oficial JW.” Implementada en packages/jw-gen/src/jw_gen/{policy,safety,i18n}.py. Property test de 100 prompts adversarios en CI. CLI jw gen image/audio/video, MCP tool generate_illustration, audit JSONL en ~/.jw-gen/audit.log (prompt sólo como sha256). |
Fase 40 — content-provenance (L2 fidelidad de contenido)
| Fase 40 (content-provenance) | ✅ Nuevo | packages/jw-core/src/jw_core/provenance/ (5 módulos: errors, models, hashing, validator, propagation) + 4 claves convencionales en Citation.metadata (published_date, accessed_at, content_hash, revision) + CLI jw provenance check + MCP verify_provenance + integración opt-in con Fase 39 (NLI re-run en drift) + telemetría provenance_drift opt-in. Ocupa L2 (fidelidad del texto) entre Fase 23 (L0/L1: URL + catálogo) y Fase 39 (L3: entailment). Backwards compat: legacy AgentResults → verdict no_record. |
Fase 41 — plugin-sdk (extension points para la comunidad)
| Fase 41 (plugin-sdk) | ✅ Nuevo | packages/jw-core/src/jw_core/plugins/ (7 módulos: errors, contracts, policy, registry, verify, factory + 5 Protocols runtime_checkable) + discovery via PEP 621 entry_points sobre 5 groups (agents, parsers, embedders, vlm_providers, gen_providers) + conflict policy default NAMESPACED + integración en jw-eval.default_agent_registry, jw-rag.embed_providers.factory, jw-mcp.server.register_plugin_tools + CLI jw plugins {list,verify,disable} + fixture plugin_sample para CI offline. Habilita Fase 49 (BrainDomain plugins) y abre el toolkit a contribuciones externas sin forkear el monorepo. |
Fase 42 — scaffolding (zero-friction onboarding para contribuyentes)
| Fase 42 (scaffolding) | ✅ Nuevo | packages/create-jw-agent/ paquete PyPI standalone (Typer CLI + Jinja2 render + 5 templates: agent/parser/embedder/vlm/gen) con entry-points F41 pre-cableados + validación PEP 503 (rechaza jw-*, casing/shape, reservados core) + i18n en/es/pt con paridad de claves + --check-pypi opt-in (httpx lazy import) + path-traversal defense en 3 capas (validate → sanitize → resolve) + golden snapshots parametrizados. tools/pytest-cookbook/ plugin pytest11 que ejecuta ```python blocks en Markdown con markers (# test, # test slow, # test skip-until-fase=N). Cookbook con 12 recetas: 10 verde, 2 skip por dependencia futura (F43, F47). jw create-agent wrapper en jw-cli con hint de instalación pipx/uvx cuando falta. CI jobs cookbook-tests y create-jw-agent (E2E scaffold smoke). Trusted publishing OIDC en tag create-jw-agent-v* con verificación tag↔pyproject version. Astro site sin cambios — el glob **/*.md ya indexa cookbook. |
Fase 45 — semantic-chunking (chunking por unidad de pensamiento)
| Fase 45 (semantic-chunking) | ✅ Nuevo | packages/jw-rag/src/jw_rag/chunkers/ subpackage (paragraph/semantic/llm + protocol + fakes) + continuation_markers.json es/en/pt + get_chunker() router con env var JW_CHUNKER + LLMChunker con cache hit >95% en ~/.jw-agent-toolkit/chunk-cache/ + benchmark NDCG@10 (jw_eval.bench.ndcg/chunker_bench) con bootstrap CI95 + CLI jw chunker-bench con per-language ≥10% lift gate + MCP set_chunker. Backwards-compat: legacy jw_rag.chunker.chunk_paragraphs byte-stable via façade. |
Fase 43 — agent-tracing (debuggability local)
| Fase 43 (agent-tracing) | ✅ Nuevo | packages/jw-agents/src/jw_agents/tracing/ (schema Pydantic v1.0 con discriminated event union + Null/InMemory/Jsonl stores + contextvars ambient tracer + AgentTracer step/kept/dropped/warn + shared --trace flag installer + viewer CLI con view/list/gc + overhead guard). Tres agentes piloto instrumentados (apologetics, verse_explainer, research_topic); resto sigue verde gracias al fallback NO-OP. Bridge OpenTelemetry bajo extra [otel]. Wiring: jw apologetics --trace, jw trace group, MCP apologetics(trace=true) + get_trace(trace_id). Cero red en tests; archivo JSONL bajo $JW_TRACE_DIR. |
Fase 44 — synth-judge (filtro de calidad de Q&A sintético)
| Fase 44 (synth-judge) | ✅ Nuevo | packages/jw-finetune/src/jw_finetune/synth/judge/ (Pydantic QAScore + RejectionReason con 6 códigos + JudgeMode off/loose/strict con cutoffs 5.0/6.5 + JudgeOverrides per-recipe + fórmula compute_overall transparente con coeficientes nombrados + heurísticas always-on cites_jw_publication regex sobre w/g/jt/bh/sjj/jy/rs/it/lff/lr/sjm y wol.jw.org URL + has_minimum_substance rejecting generic stubs ES/EN/PT + Jinja2 prompt templates en/es/pt + NLI bridge re-using Fase 39 import-guarded + Judge orchestrator componiendo 3 etapas con hard rules + factories env-driven JW_SYNTH_JUDGE_LLM/NLI + JudgeStats con format_summary + run_extract_with_judge integrado en data/extract.py con dump_rejected_path opcional). Golden de 50 pares (25 keep + 25 reject) en es/en/pt; accuracy heurística LOOSE 0.86 / STRICT 1.00; eval_precision.py CLI con PrecisionReport (accuracy/precision/recall). 85 tests offline (models, heuristics, thresholds, scoring, nli_bridge, judge, factories, stats, orchestrator integration, extract CLI, golden precision). |
Fase 46 — canonical-versification (mapeo entre tradiciones de numeración)
| Fase 46 (canonical-versification) | ✅ Nuevo | packages/jw-core/src/jw_core/versification/ (Pydantic Tradition Literal nwt/masoretic/lxx/vulgate + VerseCoord que admite verse 0 para superscripciones BHS/LXX + VersificationMapping con trilingual explanation required vía model_validator + MappingResult). Catálogo data/versification_map.json con 30 entradas curadas vs fuentes académicas (Tov 2012, BHS apparatus, NETS prefaces): Joel chapter renumber 2→3, Malachi 4→3:19, 10 superscripciones de Salmos famosos, LXX Psalm 9/10 merge + 114/115 split, Romans 16 doxology, 2 Corintios 13, 1 Kings 4/5, Nehemiah 9/10, Daniel 3/4, Hosea 1/2, Jonah 1/2, Ecclesiastes 4/5, Song 6/7, Job 40/41, Isaiah 8/9, Genesis 31/32. Cada entrada en/es/pt con prosa original del maintainer (no copia académica, GPL-3.0 safe). registry.load_catalog() lazy via lru_cache(1) + importlib.resources. mapping.to_canonical() idempotente, lossless en round-trip, ValueError en tradition desconocida. explain.explain() trilingual fallback. CLI jw versification {map,explain,list}. 29 tests offline (models 10 + registry 4 + mapping 8 + explain 4 + CLI 3); jw-core suite sigue verde en 1005 passing. |
Fase 47 — jw-core-js Minimal (MVP v0.1)
| Fase 47 (jw-core-js MVP) | 🟡 MVP | packages/jw-core-js/ (@jw-agent-toolkit/core, dual ESM+CJS publish, tsup build, vitest tests). Surface portado: parser (parseReference + parseAllReferences + ReferenceParser con regex master longest-first sobre en/es/pt), BibleRef class (display(), wolUrl(lang, pub?), toJSON()), tabla 66 libros (BOOKS, canonicalName, displayName), getLanguageConfig (E/S/T config con wol_resource/lp_tag/default_bible), F46 versification port (toCanonical, explain, loadCatalog con el mismo JSON catalog que Python). shared/data/bible_books.json regenerado desde Python BOOKS; shared/data/bible_references_golden.json (17 casos en/es/pt) consumido por ambas suites como contrato anti-drift. Tests: TypeScript 40 (parser 25 + wol_url 6 + versification 9 verdes con npm test) + Python parity 17 (test_golden_fixture_parity.py parametrizado sobre el fixture). Build verde: ESM 52KB + CJS 53KB + DTS 3KB. Pendiente post-MVP (~100 tasks): parsers verse/article/study-notes/cross-refs, HTTP clients WOL/CDN/TopicIndex, JWPUB/EPUB con Web Crypto, cache/throttle/telemetry, multi-locale (17→3 hoy), integración WOL ext + recipe 12 unskip. Documentado en docs/guias/jw-core-js.md con tabla por bucket. |
Edit this page on docs/vision_audit.md