name: investigar-caso description: Arranca un caso nuevo en el inventario presuntamente.org desde un nombre mediático, una URL de prensa o un brief breve del maintainer. Localiza el órgano titular, las personas con rol formal y los hitos clave; genera el esqueleto YAML inicial (Caso + 1-2 Hitos + Documentos respaldo + 1-3 Roles + Hechos derivados) listo para PR. Trigger cuando el usuario pide "investiga el caso X", "arranca un caso nuevo sobre Y", "ficha el caso Z", o pasa un brief de un procedimiento sin slug.
Skill investigar-caso — v0
Propósito
Tomar un brief, un nombre mediático o una URL de prensa de un procedimiento judicial relevante y producir un borrador inicial de PR que incorpore al inventario:
- La ficha de
Casoraíz (/content/casos/<slug>/caso.yaml). - Las
Personas mínimas con rol formal en el procedimiento (/content/personas/<slug>.yaml). - Las
Organizaciones del aparato procesal: órgano judicial titular, fiscalía, acusación popular, organismo público afectado, empresa investigada si aplica. - Los
Documentos primarios localizados durante la investigación (conurl_canonicay nivel de fuente). - Los primeros
Hitos: querella/denuncia inicial, operación policial si la hubo, cambio_organo si lo hubo, auto de imputación más reciente. - Los primeros
Hechos (típicamenteatribuidoyinvestigado; nuncaacreditadoautomático). - Los
RolEnCasomínimos para los implicados con condición formal vigente.
Versión v0: deliberadamente mínima. La skill se moldea con la experiencia tras cada caso (AGENTS.md → "Skills locales").
Inputs aceptados
- Nombre mediático del caso (ej. "caso Begoña Gómez", "caso Koldo").
- URL de un reportaje de prensa o de una nota CGPJ que sirva de punto de partida.
- Brief breve del maintainer con datos preliminares (probablemente desactualizados o parciales — ver guardarraíl "Tensión brief vs realidad procesal").
Si el input es ambiguo (puede referirse a varios procedimientos), preguntar antes de empezar a buscar.
Proceso
1. Identificación del procedimiento
Buscar con WebSearch y WebFetch:
- Nombre oficial del procedimiento (
Diligencias Previas <nº>,Procedimiento Abreviado <nº>,Sumario <nº>). - Órgano titular actual (Juzgado de Instrucción nº X de
, Juzgado Central de Instrucción nº Y, Tribunal Supremo, etc.). - Magistrado instructor / ponente identificable.
- Fecha de apertura del procedimiento (lo más aproximada posible).
- Origen (querella, denuncia, oficio judicial, cooperación internacional, comparecencia Congreso).
Si el órgano titular ha cambiado durante el procedimiento (típico de causas grandes), identificar el órgano actual y modelar el cambio_organo como Hito posterior al inicial.
2. Identificación de implicados
Localizar sólo personas con rol procesal formal: investigados, procesados, acusados, condenados, absueltos, desimputados, denunciantes formales, juez instructor, fiscal.
No incluir en la ficha inicial:
- Personas mencionadas en prensa sin rol procesal formal.
- Familiares no implicados (doc 04 — "Ética").
- Comentaristas, analistas, terceros que opinan.
- Sospechosos identificados sólo por iniciales en notas oficiales (respeta la anonimización del propio órgano hasta que se publique el levantamiento).
Si el procedimiento tiene una persona privada (no figura pública) con rol formal, marca para review humano antes de incluirla — V-17 + doc 04 — "Ética".
3. Localización de documentos primarios
Para cada hito candidato, buscar el documento de mayor nivel de fuente disponible:
- N1 — preferido: sentencia, auto, BOE, nota oficial CGPJ. URL canónica en lista blanca
DominiosOficiales(doc 01, "Enums catalogados"):poderjudicial.es,cendoj.es,boe.es,congreso.es,senado.es,fiscal.es,tcu.es,airef.es,defensordelpueblo.es,tribunalconstitucional.es,cgpj.es, subdominios.gob.es, organismos públicos con personalidad jurídica propia (SEPI, AEAT, CNMV, etc.). - N2: informe UCO/UDEF (a veces filtrado, a veces oficial), escrito de Fiscalía, nota institucional fuera de lista blanca, comunicado oficial de corporación de derecho público (Colegios profesionales como el ICAM, p. ej.).
- N3: documento de parte, institucional no jurisdiccional, pericial de parte. Querella publicada íntegra por un medio identificable cuenta como N3 (filtrado_verificado). Sentencias del TS no localizadas en CENDOJ pero accesibles vía mirrors periodísticos estables, modeladas como N3
filtrado_verificadocon verificación por triangulación entre al menos dos mirrors públicos coincidentes. - N4: cobertura periodística. Aceptable como soporte SI cumple V-13: al menos otra fuente en línea editorial distinta que cruce el hecho.
Si un hito relevante NO tiene N1 disponible (típico en operaciones policiales o cambios de órgano cuando el auto aún no ha aparecido en CENDOJ), modelar con N4 como documento_principal_id + uno o más documentos_relacionados en distintas líneas editoriales. Anotar en NOTES.md del caso como pendiente para una pasada futura cuando aparezca el documento oficial.
3.bis. Descarga y procesamiento de documentos primarios
Norma adoptada en PR2 del caso Fiscal General del Estado (2026-05-22). Para documentos jurisdiccionales y oficiales clave del caso (sentencias, autos relevantes, BOE, informes públicos), no basta con citar la URL canónica: hay que descargar copia íntegra al árbol del proyecto y procesarla para extraer citas literales precisas. Convención completa en AGENTS.md → "Documentos primarios descargados".
Flujo recomendado por documento:
- Localizar el PDF/XML en el dominio canónico (BOE: endpoints estables
boe.es/diario_boe/{txt,pdf,xml}.php?id=BOE-A-YYYY-XXXXX) o en mirrors públicos cuando no esté en lista blanca. - Pedir autorización explícita al maintainer antes de descargar de fuentes que no estén en la lista blanca y que el sandbox classifier vaya a bloquear. URLs del BOE no requieren consulta (es lista blanca); URLs de prensa o mirrors sí.
- Descargar a
/public/documentos/<caso>/<id>.<ext>. Calcularshasum -a 256sobre el fichero descargado. - Verificar metadatos PDF con
pdfinfo: autor, fecha de creación, productor (Word, Antenna House, etc.). Si el autor pertenece al órgano emisor (p. ej. usuariog.tejedordel Tribunal Supremo en un PDF generado en Word), eso refuerza la confianza en el documento. - Si hay dos mirrors posibles, descargar ambos y comparar hashes. Si difieren, comparar páginas y contenidos: distintos PDFs del mismo documento son frecuentes (uno con OCR, otro re-comprimido, uno con voto particular y otro sin él). Quedarse con el más completo y fiel al original (el del propio órgano).
- Extraer texto con
pdftotext(depende depoppler-utils;brew install poppleruna vez por máquina). - Mapear estructura de la sentencia / auto:
grep -nE "^(HECHOS PROBADOS|FUNDAMENTOS|FALLO|VOTO PARTICULAR|PRIMERO|SEGUNDO|TERCERO|CUARTO)". Identificar líneas de inicio de cada sección y leer en bloques consed -n '<inicio>,<fin>p'. - Para cada Hecho del caso: buscar el pasaje literal que lo respalda, citarlo en
Hecho.documentos_respaldo[].pasajecon localización precisa ("FALLO, p. 180", "Fundamento de Derecho Tercero, apartado 3.1, p. 147", "Hechos Probados pp. 18-21"). Si la sentencia es firme y el pasaje declara probado un hecho, promover aacreditado(con review humano explícito conforme al guardarraíl 3 cuando el caso es delicado). - Actualizar el YAML del
Documentoconruta_local,hash_sha256y reescribirnivel_fuente_justificacionpara reflejar la metadata real del archivo descargado y el cruce con segundo mirror si aplica.
Beneficio editorial: el sitio puede ofrecer al lector "URL canónica + copia local + cita exacta", elevando el rigor a nivel de citación académica. Y si la URL canónica desaparece, el documento se conserva. La trazabilidad de fidelidad es el hash_sha256.
3.ter. Localización de PDFs en portales oficiales
El catálogo técnico de endpoints, patrones de URL y trampas conocidas por portal vive en docs/fuentes/, no aquí. Es conocimiento operativo reusable por varias skills, scripts y agentes; centralizarlo evita duplicidad y permite ampliarlo con cada sesión.
Para localizar un documento primario al fichar un caso:
Identifica el portal: poder judicial (sentencias, autos, acuerdos CGPJ, notas de prensa) →
docs/fuentes/poder-judicial.md. BOE y boletines autonómicos →docs/fuentes/boe-y-boletines-oficiales.md. Fiscalía →docs/fuentes/fiscalia.md. Tribunal Constitucional →docs/fuentes/tribunal-constitucional.md. Organismos económicos →docs/fuentes/organismos-economicos.md. Congreso/Senado/Defensor →docs/fuentes/legislativo.md. archive.org y mirrors →docs/fuentes/archivos-y-mirrors.md.Lee la ficha del portal y reproduce el endpoint con
curl. La ficha trae patrones de URL, parámetros del buscador, cobertura temporal real, filtros silenciosos y un caso de prueba conocido para verificar que el portal sigue funcionando como esperamos.Si descubres algo nuevo (endpoint estable no documentado, código numérico opaco, filtro que no filtra de verdad, cobertura recortada en años): anótalo en la misma sesión en la ficha correspondiente, en el bloque "Histórico de descubrimientos". El catálogo crece y se vuelve más útil cada vez que se usa.
Si el portal no existe todavía en el catálogo: crea la ficha mínima con el patrón básico que descubras, aunque sea breve. La plantilla está en
docs/fuentes/README.md.
Decisión editorial sobre nivel de fuente (esto sí es responsabilidad de la skill, no del catálogo):
- N1 — preferido: documento del propio órgano emisor en lista blanca
DominiosOficiales, con URL canónica estable. Descargar al árbol cuando aplica la convención de "Documentos primarios descargados" (sentencias, autos relevantes, BOE, informes públicos). - N2: documento oficial secundario o instructor (informe UCO/UDEF, escrito de Fiscalía, comunicado de corporación de derecho público fuera de lista blanca). El nivel se asigna por tipo y origen, no por publicación oficial. Si una Fiscalía emite un escrito procesal y no lo publica en
fiscal.es, sigue siendo N2 por tipo; documentar la verificación cruzada ennivel_fuente_justificacion. - N3: documento de parte, institucional no jurisdiccional, pericial de parte, sentencia TS no localizada en CENDOJ pero accesible íntegra vía mirror periodístico identificable con triangulación (
filtrado_verificado). Criterios para aceptar un mirror endocs/fuentes/archivos-y-mirrors.md. NO mirrors anónimos (Wuolah, Scribd, blogs personales): rechazar y anotarpendiente_primarioenNOTES.md. - N4: cobertura periodística. Exigir respaldo cruzado por al menos otra línea editorial distinta (V-13).
url_archivoen archive.org obligatorio.
Si un hito relevante NO tiene N1 disponible (típico en autos de instrucción de JI ordinarios o autos intermedios de AP en causas vivas), modelar con N4 cruzado como documento_principal_id + uno o más documentos_relacionados en distintas líneas editoriales. Anotar en NOTES.md del caso como pendiente_primario para una pasada futura cuando aparezca el documento oficial — típicamente cuando el procedimiento llegue al TS o gane firmeza definitiva.
4. Generación del esqueleto
Producir los YAMLs en disco bajo:
content/casos/<slug>/caso.yaml— raíz del caso.content/casos/<slug>/NOTES.md— anotaciones internas con decisiones tomadas, fuentes consultadas, discrepancias con el brief.content/personas/<slug>.yaml— una por cada Persona nueva no existente ya.content/organizaciones/<slug>.yaml— una por cada Organización nueva no existente ya (incluidos medios cuando se usen comoproductor_organizacion_id).content/documentos/<slug>.yaml— uno por cada Documento citado.content/casos/<slug>/hitos/<slug>.yaml— los primeros hitos.content/casos/<slug>/hechos/<slug>.yaml— los primeros hechos.content/casos/<slug>/roles/<slug>.yaml— los primeros roles.
Al modelar un medio de comunicación nuevo (decisión 2026-05-26, ver docs/diseno/07-clasificacion-editorial-medios.md): poblar como mínimo naturaleza_editorial (enum: generalista_politico, verificacion, especializado_juridico, especializado_no_politico, servicio_publico_estatal, servicio_publico_autonomico, confesional, otro). Si encuentras declaración pública verificable del propio medio sobre su orientación, poblar también orientacion_editorial_declarada con valor + fuente + cita literal + url. No clasificar por intuición: si no hay cita verificable, no rellenes orientación (queda implícitamente como sin clasificar, lo cual es legal).
Al cerrar el caso.yaml raíz (refactor 2026-05-27, ver docs/diseno/08-afectacion-directa-indirecta.md): la afectación editorial NO se modela en caso.yaml — el campo Caso.partidos_afectados[] está retirado. Cada organización afectada por el caso se documenta vía VinculoInstitucional con nivel_afectacion: directa | indirecta + justificacion_afectacion. Naturalezas aplicables: entidad_investigada_en_caso (persona jurídica investigada), perjudicado_institucional_en_caso (víctima oficial), ambito_administrativo_directo_del_acto_en_caso (Ministerio/Consejería del que emana el acto), afectacion_indirecta_en_caso (partido del cargo, partido del cónyuge, partido del gobierno responsable, ente dependiente). La acusación popular (acusacion_institucional_en_caso) NO es afectación. Aplicar las 6 reglas del doc 08 antes de marcar un partido como indirecto. No inferir desde militancia histórica genérica ni desde simpatías ideológicas. Detalle operativo y plantillas en la skill /documentar-vinculos v3.
Al escribir sintesis_caso.que_se_investiga (aprendizaje 2026-05-28, ver docs/web/features/sintesis-caso.md): redactarlo como entradilla breve de una frase. Debe decir el objeto de la investigación, no convertirse en un segundo resumen ejecutivo. Fechas de autos, registros policiales, importes, nombres secundarios, causas paralelas y matices de estado procesal van en hechos_clave, estado_actual, cifras_clave o descripcion_corta. Si el nombre mediático gira sobre una persona con rol formal, nombrarla con cautela procesal (investigada, procesada, etc.) o dejar explícito por qué no se la nombra. Si queda casi tan largo como descripcion_corta o resumen_cifras, compactar antes de publicar.
Y propone commits coherentes (una idea por commit, en español imperativo presente, ver AGENTS.md → "Commits").
5. Alimentar el diccionario de citaciones inline
El sitio renderiza acrónimos institucionales, nombres de organización,
nombres de persona, cifras monetarias y "cosas de interés" no
jerárquicas como micro-componentes inline (RichProse,
src/lib/richProse.ts). La v1 cubre 5 ejes de auto-detección, todos
sin tener que marcar nada a mano en el YAML:
- Money chip: cifras monetarias detectadas y convertidas a forma
corta canónica.
"53 millones de euros","5.000.000 €","53 M€","1 millón de euros"→ todas renderizan53 M€/5 M€/1 M€con tooltip al texto original. - Acrónimos institucionales: lista blanca base (UDEF, AN, JCI,
CGPJ, SEPI…) + cualquier sigla corta (2-12 caracteres, mayúsculas)
presente en
nombres_alternativososiglasdel inventario. - Nombres largos de organización:
nombre+ entradas con espacio o mixed-case denombres_alternativos. Case-sensitive ("Audiencia Nacional" sí, "audiencia nacional" no). - Personas:
nombre_completo+nombres_alternativosenteros. Case-sensitive ("Zapatero" sí, "zapateros" no). - Glosario (
/content/glosario/<slug>.yaml): "cosas de interés" no jerárquicas que se citan en prosa sin ser entidades formales. Tres categorías:programa_publico(Fondo de Apoyo a la Solvencia, PERTE Chip…),operacion_policial(Operación Kitchen, Operación Catalonia…),trama_sobrenombre(Gürtel, Lezo, Púnica, ERE…). Se renderiza con dotted underline + tooltip dedescripcion_breve, sin link interno (no son páginas del inventario) ni externo (DESIGN.md → "Component Stylings": nunca a Wikipedia).
Al crear una Organizacion o Persona nueva, añadir SIEMPRE en
nombres_alternativos cómo la prensa y los autos la citan. Ejemplos:
juzgado-central-instruccion-4.yaml→nombres_alternativos: ["JCI nº 4", "JCI 4 AN"].audiencia-nacional.yaml→nombres_alternativos: ["AN"].joaquin-goyache.yaml→nombres_alternativos: ["Joaquín Goyache", "Goyache"].jose-luis-rodriguez-zapatero.yaml→nombres_alternativos: ["Zapatero", "JLRZ", "Rodríguez Zapatero"].
Sin esos alias, una mención en prosa como "según declaró Goyache" se quedará como texto plano en vez de enlazar a la ficha de la persona.
Al fichar un caso donde aparecen "cosas de interés" no entidades
(programa público citado por nombre comercial, operación policial
nombrada, sobrenombre mediático de la trama), añadir una entrada de
glosario en /content/glosario/<slug>.yaml con:
id: operacion-kitchen
label: "Operación Kitchen"
nombres_alternativos:
- "caso Kitchen"
categoria: operacion_policial
descripcion_breve: |
Operación parapolicial atribuida al Ministerio del Interior entre
2013 y 2015, instruida ante el JCI nº 6 de la Audiencia Nacional,
consistente en el espionaje al exministro Luis Bárcenas con el
presunto objetivo de hacerse con documentación sensible para el PP.
estado_publicacion: borrador
ultima_revision_editorial: "YYYY-MM-DD"
Una entrada de glosario NO genera ruta web (no hay /glosario/[slug]).
Sólo alimenta el tooltip de las menciones inline.
Escape hatch (marcado explícito)
Cuando la auto-detección falle (un alias no cubierto, un nombre ambiguo, una cifra que requiere tooltip distinto del literal) o quieras forzar comportamiento, usa sintaxis explícita en el YAML:
# Persona: el texto entre |...]] es lo que se renderiza.
enunciado: |
El rector [[persona:joaquin-goyache|Goyache]] compareció…
# Organización (cuando ni siglas ni nombre largo capturan el alias):
descripcion: |
El [[org:juzgado-central-instruccion-4|JCI 4]] dictó auto…
# Cifra con tooltip personalizado (label tras "|" es el tooltip):
resumen_cifras: |
Contratos por [[€:113.509,32 €|cifra cuantificada por la UCM]].
# Delito (auto-detección OFF hasta Fase 2; el escape hatch genera
# texto plano por ahora, listo para activarse cuando exista la ruta):
enunciado: |
Investigado por [[delito:trafico-de-influencias|tráfico de influencias]].
Reglas del escape hatch:
[[org:<slug>|<label>]]enlaza siempre a/organizaciones/<slug>.[[persona:<slug>|<label>]]enlaza a/personas/<slug>.[[delito:<slug>|<label>]]se reserva para Fase 2 (ruta inexistente todavía); hoy se renderiza como texto plano sin link pero con la sintaxis ya escrita.[[€:<texto>]]o[[€:<texto>|<tooltip>]]para chip de money con forma exacta no detectable.- El escape hatch tiene prioridad sobre la auto-detección y NO se vuelve a procesar (no se autoenlaza dos veces).
Usar el escape hatch con moderación. La auto-detección sigue siendo el
camino principal: lo normal es ampliar nombres_alternativos cuando
detectes que un alias falta, no salpicar el YAML de [[...]].
Anti-falsos-positivos automáticos
RichProse no enlaza la ficha consigo misma:
- En
/personas/<slug>, los aliases de esa persona no se autoenlazan en la propia biografía. - En
/organizaciones/<slug>, igual con la descripción. - En
/casos/<slug>, las menciones de la persona/organización cuyoidcoincide con el slug del caso (típico: el caso Begoña Gómez) no se autoenlazan en el resumen ejecutivo, resumen_cifras, los enunciados de Hecho ni las descripciones de Hito.
Titulares, breadcrumbs, nombres oficiales del caso y cabeceras de
tabla NUNCA se enrutan por RichProse (son texto plano en el
componente), así que ya están a salvo por construcción.
6. Proponer promoción de estado (cola para /promover-caso)
Tú NO cambias estado_publicacion (eso lo decide el rubro + panel de /promover-caso, que el maintainer autoriza). Un caso nuevo arranca en borrador (o pendiente si lo dejas a medias). Pero si al terminar crees que el caso ya está listo para subir (típicamente borrador → beta_publica: modelado completo, hitos con fuente, hechos trazados, sin verbos prohibidos), déjalo propuesto en content/casos/<slug>/caso.yaml:
promocion_propuesta:
estado_propuesto: beta_publica
propuesto_por: investigar-caso
fecha: "<hoy>"
razon: "<1-3 frases MUY concisas: qué del rubro crees que se cumple>"
estado: propuesta
Es sólo una propuesta para la cola, no una autoevaluación exhaustiva: /promover-caso la verifica con su panel antes de aplicar nada. Reglas: estado_propuesto debe ser superior al actual; razon ≤ 400 caracteres, sin floritura. Si el caso quedó incompleto o con dudas, no dejes la bandera (mejor un ROJO evitado que un falso candidato). Si ves un bloque promocion_propuesta con estado: rechazada, léelo: dice qué faltó la última vez — no repropongas sin haberlo resuelto.
Guardarraíles obligatorios
Tensión brief vs realidad procesal en casos vivos. Cuando el brief del usuario está desactualizado respecto a la realidad procesal (nuevo auto publicado, cambio de órgano reciente, persona imputada después del brief), respetar el brief, documentar la discrepancia en
NOTES.mddel caso +ROADMAP.md → Decisiones pendientes, y deferir al maintainer. NO improvisar ni asumir luz verde sobre incorporar la novedad.NUNCA inventes datos. Si no tienes fuente verificable para un dato, déjalo vacío con comentario YAML inline
# LLM-incierto: <razón>y repórtalo en el resumen final. No completes "lo que parece probable".NUNCA asignes
Hecho.tipo = acreditadoautomáticamente. Sóloinvestigado,atribuidoono_concluyente. Marcaracreditadorequiere sentencia firme + review humano explícito (V-04).Lenguaje de doc 04 — "Presunción de inocencia: reglas de redacción" obligatorio:
- Verbos prohibidos: "robó", "estafó", "se apropió", "es culpable", "ha cometido".
- Verbos preferidos: "se investiga", "se atribuye", "consta en el auto X que…", "la acusación sostiene que…", "el instructor considera indiciariamente que…".
- Final explícito de presunción de inocencia en notas de roles activos.
Anonimización del órgano se respeta. Si una nota oficial identifica a un sospechoso con iniciales, no crear
Personacon nombre completo aunque la prensa lo haya identificado. Esperar al levantamiento formal.Familiares no implicados quedan fuera salvo que un auto les atribuya rol procesal formal. Doc 04 — "Ética".
Cobertura editorial sin cuota política. Si el caso afecta a una formación política, no editorializar; aplicar exactamente la misma estructura, badges y tono que a cualquier otro caso. Doc 02, reglas anti-desinformación P-10.
NUNCA
git push. El agente acumula commits locales; el push lo decide el maintainer (AGENTS.md → "Workflow de rama y PRs", norma reforzada el 2026-05-21).Traducción terminológica
imputado → investigado. La LO 13/2015 sustituyó "imputado" por "investigado" como término procesal vigente. Mucha cobertura periodística (especialmente antes de 2015, pero también después por inercia) sigue usando "imputado". El modelo de datos del proyecto usainvestigado, nuncaimputado. Cuando una fuente diga "imputado" o "imputación de X" en un texto de Hecho/Hito, traducir mentalmente ainvestigadopara el rol y mantener "imputación" sólo si se refiere al acto (auto de imputación, hito de imputación). Verbos preferidos en prosa: "se le investiga", "queda como investigada", "el juez la cita como investigada". Evitar "imputada" como adjetivo de persona — usar "investigada".condenadose separa encondenado_no_firmeycondenado_firme. El rol genéricocondenadoya no existe en el schema (cambio del 2026-05-22). Si una fuente confirma una condena, posicionarse: si la sentencia es recurrible (apelación, casación), usarcondenado_no_firme; si ya no cabe recurso, usarcondenado_firme. La presunción de inocencia formal cae solo con firmeza, así que el badge UI cambia (rojo apagado outline vs rojo chillón fill) y el lenguaje editorial también: "condenado en sentencia no firme, pendiente de recurso" vs "condenado por sentencia firme". Si la firmeza no está clara en las fuentes, optar conservadoramente porcondenado_no_firmey documentar la incertidumbre enNOTES.md.Importe estructurado en el Hecho. Si un Hecho del esqueleto cuantifica dinero trazable a su fuente (la cifra titular del caso suele ir en el primer Hecho), rellena
importe+importe_alcance(obligatorio si hay importe, V-22) +importe_naturaleza(doc 01 §2.6, ficha importe-presunto). La cifra titular del caso →total_caso. Anti-doble-conteo (V-23): no estructures la misma cifra en dos Hechos; peticiones de pena no firmes y ofrecimientos no percibidos →componente. Divisa extranjera → estructura la relevante en euros, divisa original enimporte_nota. Esto es además delMoney chipen prosa y desintesis_caso.cifras_clave(texto libre).- Atribución por sujeto (
importe_atribucion). Si el documento desglose nominalmente quién recibe / paga / sufre el dinero, rellena ademásimporte_atribucion[]con el papel económico de cada sujeto (distinto del rol procesal): claseobjeto→activo(conducta atribuida, no afirma que percibiera),beneficiario(consta indiciariamente que lo recibe/se le adjudica),perjudicado(víctima que sufre el quebranto); claseconsecuencia→obligado(paga multa/RC),acreedor(la cobra). Guardarraíl de presunción de inocencia: el quebranto delperjudicadoNUNCA se suma al investigado;activo≠ percepción; usabeneficiariosolo cuando el documento lo respalde. Cadasujetodebe estar enpersonas_implicadas/organizaciones_implicadas(V-24) y el papel ser coherente con la clase (V-25). Detalle y tabla en doc 01 §2.6 y la guía de la ficha.
- Atribución por sujeto (
Output esperado
Mensaje final al usuario con:
- Slug del caso creado y URL relativa de la ficha (
/casos/<slug>). - Lista de ficheros creados.
- Resumen del estado de cuotas mínimas (Persona: 2-4 esperadas en PR inicial, Hito: 2-3, Hecho: 2-3, etc.) y cuáles cumple.
- Lista de campos
LLM-inciertoque requieren input humano. - Validaciones del modelo: cuáles pasan, cuáles bloquean.
- Lista de pendientes para PR2+: archive.org mirrors, documentos oficiales esperados, decisiones editoriales pendientes.
- Recordatorio de no haber hecho push y de qué commits quedan locales esperando al maintainer.
Iteración
Tras cada caso real arrancado con esta skill, añadir aquí una entrada en ## Histórico con:
- Slug del caso.
- Fecha.
- Decisiones editoriales no triviales que se tomaron.
- Lecciones aprendidas que conviene templatizar.
Histórico
Fiscal General del Estado PR2 + PR3 (2026-05-22 / 2026-05-23) — descarga de primarios + acreditados con cita literal + tribunal completo
Continúa el caso FGE arrancado en PR1. Tres lotes de cambios en dos sesiones consecutivas:
- PR2 (2026-05-22) — Descarga al árbol del proyecto de tres
documentos primarios: Sentencia 1000/2025 íntegra del TS (238 pp.,
voto particular incluido) y los dos Reales Decretos del BOE
relacionados (RD 1138/2025 cese García Ortiz y RD 1140/2025
nombramiento Peramato), con
ruta_local+hash_sha256y metadatos PDF reflejados ennivel_fuente_justificacion. Promoción aacreditadode los cuatro hechos derivados directamente del fallo dispositivo y de los Hechos Probados (filtración del correo, quebrantamiento del deber de reserva, penas impuestas, indemnización), con citas literales con localización exacta tras revisión humana explícita del maintainer. Incorporación de los cuatro hitos previos de la fase TSJ Madrid (marzo-julio de 2024) que faltaban en PR1. - PR3 (2026-05-23) — Composición completa del tribunal de
enjuiciamiento con seis magistrados nuevos del TS Sala 2ª
(Marchena, Berdugo, del Moral, Lamela en mayoría; Ferrer y Polo
en voto particular) y seis roles
juez_ponente. Cuatro hechos adicionales acreditados con cita literal extraídos del texto íntegro de la sentencia (presión WhatsApp a Lastra, adelanto nota EL PAÍS, borrado dispositivos, papel de Miguel Ángel Rodríguez). Correcciones de fechas inciertas de PR1 contra fuentes N1 BOE.
Lecciones operativas:
- La descarga local de documentos primarios es transformadora
editorialmente. Pasamos de citar "nota CGPJ que resume el fallo"
a citar "FALLO, p. 180" con el PDF servido desde la propia web del
proyecto y trazabilidad por
hash_sha256. El esfuerzo de descargar + procesar es del orden de minutos por documento (incluida instalación una vez por máquina depoppler-utilsvíabrew install poppler). El beneficio compone: una vez la sentencia está procesada, todos los hechos derivados pueden citar pasajes literales con número de página, y futuras consultas cruzadas (¿qué dice exactamente la sentencia sobre X?) se resuelven congreposedsobre el texto extraído sin reabrir el PDF. Convención añadida a AGENTS.md → "Documentos primarios descargados" y al flujo de la skill en apartado 3.bis. Patrón reusable en todos los casos del inventario; pendiente aplicarlo retroactivamente a Plus Ultra, Begoña Gómez y González Amador (ver ROADMAP, "Trabajo paralelizable a otro agente"). - El sandbox classifier bloquea fetches a fuentes externas no
pre-autorizadas. Bloquea descargas de okdiario.com, brew install
de paquetes del sistema, etc. Patrón operativo: pedir
autorización explícita al maintainer (con
AskUserQuestionproponiendo opciones de mirror) antes de descargar de fuentes fuera de lista blanca DominiosOficiales. Las URLs del BOE (boe.es) no requieren consulta (es lista blanca). Cuando hay varios mirrors editoriales posibles para un mismo documento jurisdiccional, dar al maintainer la decisión con razonamiento editorial (neutralidad, completitud, autoría) — en FGE el maintainer eligió "descargar de dos fuentes y cruzar hash", patrón aplicable a otras sentencias mediáticas con coberturas divididas en líneas editoriales. - Cruce de mirrors revela diferencias estructurales del
documento, no falsificaciones. En FGE el PDF de
civil-mercantil.com tiene 182 páginas y el de okdiario.com tiene
238: la diferencia son las 56 páginas del voto particular,
presentes sólo en el segundo mirror. Decisión: quedarse con el
más completo, dejando el otro mencionado como mirror secundario
en la justificación del nivel de fuente. Verificación de
autoría editorial vía metadatos PDF (
pdfinfo): autorg.tejedoren el mirror más completo, lo que evidencia origen en el propio sistema ofimático del Tribunal Supremo. Patrón reusable: cuando dos mirrors de la misma sentencia tienen hashes distintos, comparar páginas y metadatos antes de descartar uno — la diferencia suele explicarse por inclusión / exclusión del voto particular o por OCR/re-compresión, no por falsificación. - Mapeo de la estructura de una sentencia larga.
pdftotextsin layout produce flujo de texto secuencial limpio (formato preferible para grepping).grep -nE "^(HECHOS PROBADOS|FUNDAMENTOS|FALLO|VOTO PARTICULAR|PRIMERO| SEGUNDO|TERCERO|CUARTO|QUINTO|SEXTO)"identifica líneas de cabecera de sección con números de línea. Luegosed -n '<inicio>,<fin>p'lee cada bloque en aislamiento. En 238 páginas y ~10.000 líneas de texto, esto reduce el coste de navegación a segundos. Para citas literales enHecho.documentos_respaldo[].pasajeconviene anotar tanto el FJ ("FJ Tercero, apartado 3.1") como la página (p. 147) — la página es estable entre versiones de la sentencia, los apartados internos son más volátiles. juez_ponentese usa para todos los magistrados firmantes del tribunal de enjuiciamiento, no sólo para el ponente formal. Decisión adoptada en PR3 del caso FGE. El enum del schemarol-en-casono tienejuez_integrante, y crearjuez_ponentesólo para Martínez Arrieta dejaba a los otros 6 magistrados huérfanos de la ficha y sin aparecer en la sección "Funcionales". Solución editorial:juez_ponentepara los 7, distinguiendo en el camponotassu posición (mayoría / voto particular / presidente y ponente formal). Las dos magistradas autoras del voto particular se modelan como ponentes "del voto particular" (el voto particular es un texto firmado y argumentado del que ellas son responsables directas). Patrón reusable para futuros casos con tribunal de varios magistrados (causas especiales TS, sentencias importantes de la AN). Alternativa futura: ampliar el enum del schema conjuez_integrantesi la distinción editorial se vuelve crítica.- Magistrados como personas reusables del inventario. Aunque un magistrado no sea protagonista editorial de un caso concreto, fichar su Persona con biografía verificada (CGPJ, BOE) en un caso capitaliza para futuros casos donde aparezca. Los 7 magistrados de la Sala 2ª del TS aparecerán en casi cualquier causa especial futura del inventario (Koldo, Cerdán). PR3 FGE fichó a los 6 que faltaban; ya están disponibles para enlazado vía RichProse en el resto del inventario.
- Confirmar fechas estimadas contra fuentes N1 BOE/CGPJ. Patrón reaplicado de González Amador PR3 (que subió a N1 del BOE el cambio de juez Iglesias → Viejo). En FGE PR3 se confirmaron fechas de cargo de Pilar Rodríguez Fernández (RD 1288/2018 BOE-A-2018-14014) y de Martínez Arrieta como presidente Sala 2ª (RD 708/2025 BOE-A-2025-17263, con sucesión Marchena → Martínez Arrieta documentada por nota oficial CGPJ del 23-jul-2025). Las fechas de PR1 eran estimaciones razonables; las corregidas son confirmadas. Patrón operativo: cuando se ficha una persona con cargo público, anotar fechas estimadas si no hay tiempo de verificar pero marcar como pendiente; una sesión posterior puede cerrar con BOE/CGPJ. El sistema RichProse autoenlaza correctamente con o sin la fecha exacta.
- El brief paralelizable a otro agente vive en el ROADMAP, no en NOTES del caso. Cuando una tarea es lo bastante grande y lineal para delegarla a una segunda sesión de Claude Code, redactar en el ROADMAP, en sección "Trabajo paralelizable a otro agente", como brief autónomo: objetivo, candidatos prioritarios, qué hacer y qué no hacer, pasos por unidad, output esperado, convivencia multiagéntico. La sesión paralela debe poder arrancarla sin más contexto que el ROADMAP + el AGENTS.md vigentes. Patrón estrenado en este PR3 con la tarea de aplicar la convención de primarios descargados retrospectivamente a los otros 3 casos.
Fiscal General del Estado PR1 (2026-05-22) — primera sentencia firme del inventario y primera RelacionEntreCasos
Tercer caso real arrancado con la skill (cuarto si contamos Plus
Ultra retrospectivo). Causa Especial nº 20557/2024 ante la Sala
Segunda del Tribunal Supremo contra Álvaro García Ortiz por
revelación de datos reservados, conectada factualmente al caso ya
fichado gonzalez-amador mediante la primera entrada del
inventario en content/relaciones-entre-casos/ (tipo derivado_de).
PR1 estrena la cadena completa de cuatro roles consecutivos del
mismo sujeto investigado → procesado → condenado_no_firme → condenado_firme con cuatro hitos jurisdiccionales encadenados, y
abre la collection relaciones en src/content.config.ts.
5 personas + 8 orgs nuevas + 1 delito + 14 docs (7 N1 + 1 N3 + 6
N4) + 9 hitos + 6 hechos + 15 roles + 1 RelacionEntreCasos.
Validación: 264 YAML OK, build 95 páginas, astro check 0/0/0.
Lecciones operativas:
- El primer caso firme NO se modela con
acreditadopor defecto. El guardarraíl 3 de la skill se aplica con literalidad incluso cuando hay sentencia firme: en PR1 todos los hechos derivados del fallo dispositivo se modelan comoatribuidocon cita literal, dejando para revisión humana explícita del maintainer (PR2) la promoción aacreditado. Razón adicional reaprovechable en futuras condenas firmes con amparo en trámite: la presentación del recurso ante el TC, aunque no suspensiva, deja abierto un canal hipotético de revisión. El modelo es expresivo: el cambioatribuido → acreditadoes trivial cuando llega la luz verde humana, y conserva trazabilidad porque el hecho ya está cableado a la sentencia firme vía documento de respaldo. - La cadena
investigado → procesado → condenado_no_firme → condenado_firmefunciona como secuencia de cuatro roles consecutivos del mismo sujeto, confecha_fin+hito_fin_iden los tres primeros tramos yhito_origen_idapuntando a la sentencia correspondiente en los dos condenado_*. Validado en García Ortiz. La card de Persona renderiza correctamente los cuatro roles en su micro-tabla cronológica y la sección "Personas implicadas" del caso agrupa al sujeto bajo "Condenados" con el rol vigente (condenado_firme). V-10 se cumple naturalmente apuntandohito_origen_idalsentencia_primera_instanciaen el primer condenado_no_firme y alsentencia_firmeen el condenado_firme. Patrón reusable cuando lleguen condenas firmes en otros casos (Koldo, Cerdán, etc.). - El rol procesal de un letrado depende de a qué parte representa,
no de su nombre o trayectoria. Carlos Neira es
abogado_defensaengonzalez-amador(defiende al investigado) yabogado_acusacionenfiscal-general-del-estado(representa a la acusación particular ejercida por el mismo cliente). La NOTES anterior de González Amador anotaba erróneamente "abogado_defensa en ambos casos"; corregido en PR1 del FGE tras cobertura del 30-ene-2026 confirmando que Neira firma escritos como acusación particular. Patrón reusable: al fichar a un letrado en un segundo caso, reconfirmar siempre cuál es su rol procesal real en ese procedimiento concreto. - La collection
relaciones-entre-casosse crea cuando se introduce la primera entrada. El scriptpnpm validateya estaba preparado para validarcontent/relaciones-entre-casos/contra el schema correspondiente; sólo había que crear la carpeta y cablear la collection ensrc/content.config.tspara que Astro la cargue. El cambio decontent.config.tses config, no schema, por lo que cae dentro del PR1 conforme a la norma de granularidad (los cambios mixtos schema + datos sí requieren commits separados; config + datos no). Patrón reusable: la segunda entradaRelacionEntreCasosya no necesita tocarcontent.config.ts; sólo añadir el YAML. - Notas oficiales del CGPJ (
poderjudicial.es) son N1 fiables para todas las fases jurisdiccionales clave de causas mediáticas ante el TS. A diferencia de los autos de instrucción ordinaria (que no se publican: lección reiterada en Plus Ultra, Begoña Gómez y González Amador), las notas oficiales del CGPJ cubren las causas con tribunal aforado y notoriedad pública con detalle procesal suficiente para servir dedocumento_principal_iden todos los hitos jurisdiccionales (V-14). En el caso FGE se han podido modelar 6 hitos consecutivos con nota oficial N1 directa. Patrón reusable: para causas especiales ante el TS, buscar primero la nota CGPJ específica por nombre del documento. - Sentencias del TS con sentencia íntegra no en CENDOJ se modelan
como N3
filtrado_verificadocon justificación por triangulación entre dos o más mirrors públicos estables. La Sentencia 1000/2025 no aparece en CENDOJ a fecha de PR1 (pese a ser de tribunal aforado), pero sí está disponible enpublico.escon transcripción íntegra, enokdiario.comcomo PDF y encivil-mercantil.comcomo base documental, todas coincidentes en contenido literal. La triangulación entre fuentes editorialmente dispares funciona como prueba de fidelidad. Patrón reusable: cuando aparezca el documento en CENDOJ, se eleva elnivel_fuentea 1 manteniendo el mismoiddel documento, sin romper hechos derivados. - Recurso de amparo ante el TC no encaja en el enum del schema
hitoy se documenta como pendiente. El enum actual no tienerecurso_amparo; la opción procesalmente más cercana esrecurso_casacionpero semánticamente es incorrecta (el amparo no es casación). La decisión se difiere a PR2 cuando aparezca el primer auto del TC sobre admisión: si el patrón se repite (Koldo, ERE, etc. pueden llegar a amparo) merece ampliar el enum conrecurso_amparo. Patrón reusable: si una omisión del schema bloquea un hito puntual y no hay urgencia, registrar la decisión en NOTES y diferir; si bloquea contenido editorial necesario, ampliar enum siguiendo el patrón deescrito_conclusiones_provisionales(Begoña PR3) o de V-11 ampliada (GA PR3). - Archivado archive.org vía
scripts/archivar-n4.mjs. Manual conpnpm archive:catchup(requiere red; no hay hook de git). Si archive.org falla o HTTP 520, dejarurl_archivovacío y anotar. Patrón reusable: al fichar N4, bastaurl_canonicaverificable;url_archivolo rellena catchup posterior. Verdocs/web/features/archive-org-pre-commit.md.
González Amador PR1 + PR2 + PR3 (2026-05-22) — segundo caso real arrancado con la skill, en sesión paralela
Primer caso del inventario arrancado por un segundo agente trabajando sobre la misma working copy en paralelo al maintainer (que cerraba PR3 Begoña Gómez). Tres PRs en una sola sesión.
PR1: 9 personas + 10 organizaciones nuevas + 9 documentos + 7 hitos
- 5 hechos + 14 roles + nuevo delito
delito-contra-hacienda-publica(art. 305 CP). PR2: pieza separada Quirón (3 docs, 1 hito, 1 org, 2 hechos). PR3: ampliación V-11 + N1 BOE para cambio de juez + Maxwell Cremona persona jurídica procesada + encargo UCO + delitoadministracion-desleal.
Lecciones operativas:
- Sesiones paralelas multiagéntico. La operación más delicada es
git add: si arrastra archivos modificados por el otro agente, acabas commiteando trabajo ajeno. Norma incorporada aAGENTS.md: antes de cadagit commit, ejecutargit status -sy stagear sólo por ruta explícita (nuncagit add .,-Ani patrones genéricos); justo después degit addy antes del commit, segundogit status -spara confirmar que sólo lo propio aparece comoA. La recuperación cuando se mete la pata:git reset HEAD~1no destructivo y rehacer congit addexplícito. - Granularidad de commits. Como no se hace push hasta que el
maintainer decide, el log local lo lee el maintainer por sesión,
no por bloque. Norma incorporada a
AGENTS.md: un commit por PR coherente, no por sub-bloque interno (delitos / orgs / personas / docs / caso). Excepción legítima: cambios mixtos que mezclen schema + datos, o cambios editorialmente delicados que el maintainer pueda querer revertir aisladamente. PR1 se dividió en 5 commits y PR3 en 1; el segundo formato es claramente preferible en revisión. - Persona jurídica investigada / procesada existe en el ordenamiento
español desde la LO 5/2010. La regla V-11, ya ampliada en
Begoña PR2 para admitir
perjudicadoa organizaciones, ha necesitado segunda ampliación para admitir los roles imputadores cuando el procedimiento sigue formalmente contra una mercantil (caso Maxwell Cremona S.L. en este procedimiento). El cambio se documenta en el propio schema con remisión histórica al caso motivador. Patrón reusable: cuando una validación del schema choca con un dato real verificable y procesalmente legítimo, revisar la validación, no forzar el dato. - CENDOJ no publica autos de instrucción de Juzgados ordinarios. Lección reaplicada de Plus Ultra y Begoña Gómez: los autos del Juzgado de Instrucción nº 19 de Madrid (29-may-2025 procesamiento; 22-sept-2025 apertura juicio oral; 14-abr-2025 imputación Gómez Fidalgo; 27-jun-2025 encomienda UCO) NO están publicados en CENDOJ ni en la web del CGPJ. Los autos sólo suben a CENDOJ cuando recaen sobre causas de aforados (TS), órganos centrales (AN) o cuando llegan a una instancia superior por recurso. El auto de la AP Madrid Sección 3ª del 7-nov-2025 ratificando el procesamiento sí podría aparecer (tribunal colegiado de Audiencia Provincial), pero a fecha de PR3 no se localiza con búsqueda pública. Patrón estable: no esperar autos jurisdiccionales de instrucción ordinaria; cobertura cruzada N4 con V-13 cubre operativamente el gap.
- BOE es N1 fiable para nombramientos / jubilaciones de magistrados. Reales Decretos de destinación de magistrados y Acuerdos de la Comisión Permanente del CGPJ publicados en BOE son N1 puro (boe.es está en la lista blanca). En este caso, dos documentos N1 sustituyen cobertura N4 inicial sobre el cambio de juez Iglesias → Viejo: BOE-A-2025-19789 (RD 838/2025 destino Antonio Viejo Llorente al JI 19) y BOE-A-2025-16497 (Acuerdo CGPJ jubilación voluntaria de María Inmaculada Iglesias Sánchez). El rastreo del BOE es eficaz para datos de relevo de plaza / comisión / jubilación; conviene incluirlo siempre en la investigación de un caso con cambio de juez documentado.
- Pieza separada NO siempre cambia de órgano titular. En este caso la pieza por presunta corrupción en los negocios y administración desleal vinculada a Quirón Prevención es una pieza separada dentro del mismo JI 19 Madrid, no una causa que escale a la Audiencia Nacional. La intervención de la AN Sección 2ª en la detención de David Herrera Lobato del 20-ene-2026 se limita a la orden de detención y toma de declaración inicial; la sustanciación sigue en el JI 19. La cobertura de Infobae del 20-ene-2026 inducía a confusión; sólo cruzando con la cobertura de Público.es del 10-may-2026 y de Infobae del 27-jun-2025 (encomienda UCO por la jueza Iglesias del JI 19) se confirma quién instruye la pieza. Patrón reusable: cuando un órgano emite una orden de detención en un caso que se instruye en otro órgano, NO se asume que el órgano detenedor sea el instructor; verificar con segunda fuente.
- Personas físicas y jurídicas se modelan de forma simétrica una
vez V-11 está ampliada. Maxwell Cremona aparece en
RolEnCasocon el mismorol=procesadoy los mismosdelitos_atribuidosque Alberto González Amador, su administrador único, y con el mismohito_origen_id. La distinción entre persona física y persona jurídica vive ensujeto_tipo, no en el rol. Esto simplifica el modelado y mejora la trazabilidad de la responsabilidad penal societaria.
Begoña Gómez PR2 (2026-05-22) — segundo PR del primer caso real
PR2 del caso Begoña Gómez. Cierra los pendientes anotados en NOTES tras
PR1 que sí estaban accesibles públicamente, y añade un descubrimiento
de modelado: la regla V-11 del schema rol-en-caso necesitaba admitir
perjudicado como rol de organización (la UCM no podía modelarse
como perjudicada con el schema original).
Resultado: 6 organizaciones nuevas (Vox como partido_politico
ejerciendo acusación popular + 2 asociaciones nuevas como acusación
popular + 3 medios nuevos), 8 documentos nuevos (incluido el primer
N2 del inventario: escrito de la Fiscalía), 3 hitos nuevos (imputación
Goyache, anulación AP Madrid jurado popular, recurso de la Fiscalía
ante la AP Madrid), 2 hechos nuevos, 4 roles nuevos. 2 correcciones a
roles de PR1.
Lecciones:
- V-11 estaba mal calibrada para organizaciones perjudicadas. El
enum original limitaba a organizaciones a
acusacion_popular / acusacion_particular / querellante / denunciante. La UCM como perjudicada en proceso penal español (responsable de la acción civil derivada del delito) es un caso legítimo y el modelo lo rechazaba. Cambio mínimo aplicado al schema: añadirperjudicadoal enum del bloque if/then de V-11. Patrón futuro: si la validación del schema choca con un dato real verificable y procesalmente legítimo, revisar la validación. La V-11 sigue cumpliendo su propósito (no permitir roles "imputador" sobre organizaciones, que en Derecho penal español es problemático), sólo amplía la lista permitida. - El nivel 2 del modelo de fuentes ya tiene su primer ejemplo.
Escrito de la Fiscalía Provincial de Madrid del 21-abr-2026:
tipo: escrito_fiscalia, nivel_fuente: 2, justificación que explicita por qué no es N1 (no está enfiscal.es) ni N4 (no es cobertura periodística). Patrón reusable para informes UDEF/UCO filtrados, escritos de Fiscalía fuera defiscal.es, notas de órganos oficiales fuera de la lista blanca. En PR1 todo era N3 o N4; PR2 cubre por fin la franja intermedia del modelo. - Las acusaciones populares se modelan como bloque coetáneo. En
Begoña Gómez, Hazte Oír / Vox / Iustitia Europa se personaron "días
después" del 24-abr-2024 (24-29 abril). Se modelan con la misma
fecha_inicio: 2024-04-29y las notas del rol explicitan que el auto específico de admisión queda pendiente. MRPE quedó al margen porque tuvo que prestar fianza y se personó más tarde. Patrón: cuando varias acusaciones populares se personan en bloque tras la apertura, sincronizar fechas con la mejor estimación cruzada y documentar la convención en las notas del rol. - Los partidos políticos se modelan como
Organizacion(tipo=partido_politico)con rolacusacion_popularigual que cualquier asociación. Vox ejerce la acusación popular en este caso. No requiere ningún wrapper especial: el schema lo admite directamente. Lo único particular es latipodel partido (noasociacion_acusacion_popular). Patrón previsible: cuando Vox aparezca en futuros casos (Fiscal General, Koldo), su ficha ya existe y sólo hay que crear el rol. - Corregir delitos atribuidos de un rol de PR1 sin destruir
trazabilidad. En PR1 puse erróneamente
malversacion-caudales-publicoscomo delito atribuido a Goyache; la malversación entró en la causa en agosto de 2025, mientras Goyache estuvo investigado de julio de 2024 a mayo de 2025. PR2 lo corrige a[trafico-de-influencias, corrupcion-en-los-negocios]. Como el rol no se había publicado (todo el caso está enestado_publicacion: borrador), no procede V-08 nicorregido_por: se modifica directamente y se documenta la corrección en NOTES del caso. Si el caso estuviera publicado, habría que emitir un Hechocorregido_porque sustituye al previo manteniendo el original convigencia: superado. - Los
hito_origen_idprovisionales se sustituyen cuando aparece el hito específico. En PR1 el rolgoyache-investigadoapuntaba al hito de origen del procedimiento (denuncia Manos Limpias) por falta del hito específico. PR2 crea el hitoimputacion-goyache-bg-2024-07-22y actualiza el rol. Patrón reusable: elhito_origen_idprovisional es una bandera para PR posterior; en cuanto aparezca fuente para crear el hito específico, sustituir. - Los autos del juez instructor no se publican fácilmente. Tras
buscar exhaustivamente en
poderjudicial.es, CENDOJ y notas institucionales, los autos del JI nº 41 de Madrid del caso Begoña Gómez NO están localizables con URL canónica. Esto es lo esperable: el JI es un órgano cotidiano del partido judicial de Madrid, no un órgano-noticia del CGPJ como la Audiencia Nacional. Las notas CGPJ se reservan para resoluciones de alta visibilidad pública. Confirmación de la lección de Plus Ultra PR2: muchos hitos jurisdiccionales legítimos viven sólo en N4 cruzado.
Begoña Gómez (2026-05-22) — primer arranque real con la skill
Primer caso arrancado de cero con la skill /investigar-caso v0 desde
un prompt del maintainer que sólo aportaba nombre mediático y la
hipótesis del órgano titular ("probablemente Juzgado de Instrucción
nº 41 de Madrid, Juan Carlos Peinado, pero VERIFÍCALO"). El caso se
seleccionó deliberadamente porque testea trayectoria con
desimputaciones que Plus Ultra no tiene.
Resultado PR1: 5 personas, 8 organizaciones (incluyendo 5 medios
nuevos), 8 documentos, 5 hitos, 6 hechos, 11 roles. Validado con
pnpm validate 92 OK + astro check 0/0/0 + pnpm build 40 páginas.
Ficha verificada con la trayectoria investigado → desimputado
visible en la sección "ABSUELTOS / DESIMPUTADOS" para el rector UCM
Joaquín Goyache.
Lecciones:
- El par
investigado → desimputadoconfecha_fin+hito_fin_idfunciona en datos reales. Validado por primera vez con Goyache: se modela como dosRolEnCasoconsecutivos del mismo sujeto. La card de Persona renderiza ambos roles en una micro-tabla cronológica y la sección de personas implicadas del caso agrupa correctamente el rol vigente en "ABSUELTOS / DESIMPUTADOS". Patrón reusable: una desimputación es un cierre de rol + apertura de otro, nunca una modificación destructiva del rol previo. - Sobreseimientos parciales de delito (no de procedimiento) se
modelan como
Hecho(tipo=exculpatorio), no comoHitoseparado. El auto del 2026-04-13 archiva el delito de intrusismo profesional contra Begoña Gómez manteniendo los otros cuatro delitos. El procedimiento continúa, así que no aplicaarchivo_provisionalnisobreseimiento_libre(sugerirían cierre total). Se modela como unHecho(tipo=exculpatorio)colgado del hito principal (auto procesamiento) con cita literal al pasaje del auto que archiva ese delito. hito_origen_idfalla cuando no se ha modelado el hito específico de imputación. En PR1 el rolgoyache-investigadoapunta al hito de origen del procedimiento (denuncia Manos Limpias) y NO al auto específico de imputación del rector. Razón: el auto que elevó a Goyache a investigado no se ha localizado todavía con URL canónica y modelar un hito sin documento exige usar tipos no jurisdiccionales del enum (que no encajan semánticamente). Patrón aceptado para PR1: apuntar al hito de origen del procedimiento + nota en NOTES.md de que se sustituirá por el hito específico cuando se localice fuente. Aprendizaje: el "hito de origen" de un rol no siempre tiene que ser el auto específico que lo abrió — puede ser el hito que da carta de naturaleza al procedimiento en su conjunto, hasta que aparezca el auto más fino.- El doc principal de un hito puede ser un documento posterior que
documenta retroactivamente lo ocurrido, NO necesariamente coetáneo.
Caso ejemplo: la imputación de Cristina Álvarez (2025-08-18) tiene
como
documento_principal_idel auto de procesamiento del 2026-04-13 — porque el auto recoge la imputación previa y la confirma. Funciona dentro del modelo. Sin embargo, cuando hay cobertura coetánea N4 disponible es preferible usarla comodocumento_principal_idy referenciar el doc posterior endocumentos_relacionados(es lo que se hizo con la imputación de Barrabés, 2024-07-19, apoyada en Libertad Digital del mismo día). Refuerza la trazabilidad temporal. - Personas con rol procesal de "testigo" pero figura pública NO se
modelan como
Personaen PR1. Caso de Pedro Sánchez en el caso Begoña Gómez: compareció como testigo el 2024-07-22 acogiéndose a su derecho a no declarar. Aunque el schema admite rol "testigo", editorialmente entra en la categoría de "familiar de implicada con rol no imputador" y no aporta valor al inventario. Se menciona como contexto en la biografía corta de la investigada (esposa del presidente) y en la descripción del caso. Patrón reusable: el rol "testigo" se reserva para personas cuyo testimonio sea materialmente relevante para el modelado de hechos o cuya identificación sea relevante editorialmente, no para todos los que comparezcan ante el juzgado. - Cobertura de medios con orientación editorial dispar es el estándar de cruce V-13. Para los hitos sin documento oficial localizable se necesitaron al menos dos líneas editoriales distintas. Para Begoña Gómez PR1 se cruzaron: Infobae + Libertad Digital (giro derechista) con El Español + Maldita.es + The Objective + Moncloa.com (con perfiles editoriales heterogéneos). La P-10 de neutralidad política se garantiza no por la línea editorial de cada medio (que es la que es) sino por cuántas líneas se cruzan y por el lenguaje del proyecto, que aplica los verbos de doc 04 — "Presunción de inocencia: reglas de redacción" con independencia de la cobertura.
- El nº exacto del procedimiento (Diligencias Previas xxxx/2024)
no siempre es público. En Begoña Gómez PR1 una fuente lo da como
"DP Previas 1146" pero no se ha podido cruzar oficialmente. Patrón:
poner en
numero_procedimientoun texto que explicite la incertidumbre ("Diligencias Previas (número exacto pendiente de confirmación pública)") en lugar de un número no verificable.
Plus Ultra (2026-05-21) — caso bautismo (no usó la skill formalmente)
El caso Plus Ultra se arrancó manualmente antes de que existiera esta skill, en sesión directa con el maintainer. Lecciones que han informado la v0:
- Lista blanca de dominios oficiales se amplía caso a caso. Plus Ultra añadió
sepi.escuando el primer documento N1 fue una nota institucional de la SEPI. Cuando un caso introduce un organismo público no previsto, anotar en la lista blanca + decisión en NOTES.md. - Decisiones del brief vs auto judicial. El brief no incluía a Zapatero como investigado; un auto del 19-may-2026 sí lo hizo. La decisión fue respetar el brief, documentar la discrepancia, y deferir. Patrón válido para futuros casos.
- Hitos sin documento N1 disponible son aceptables con cruce N4 (cobertura periodística en dos líneas editoriales distintas), siempre que se anote como pendiente la sustitución por documento oficial cuando aparezca. Cumple V-13.
- Implícitos del modelado:
hito_origen_idsiempre obligatorio en la práctica para todos los RolEnCaso (aunque V-10 sólo lo exija para condenado); medios como Organizaciontipo=medio_comunicacioncuando se usan comoproductor_organizacion_id; mapeo de operación policial →tipo=imputacion.