feat(eda): series temporales + rigor anti-data-mining + PDF movil + /eda + benchmark issues

Bloque del grupo eda (sesion ausente EDA-benchmark):
- 8 funciones nuevas: adf_kpss_stationarity, acf_pacf, stl_decompose, to_returns,
  fdr_correction, suggest_reexpression, exploratory_caveats, render_eda_pdf
- integracion: profile_table (run_series, emit_pdf), association_matrix (FDR Benjamini-Hochberg),
  render_eda_markdown (secciones series/reexpresion/caveats)
- slash commands /eda y /capitulos
- issues 0173-0177: mejoras del /eda derivadas del benchmark sobre 12 datasets reales
  (outlier_pct x100, periodo estacional, FK inference, render models, tipos id-like)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Egutierrez
2026-06-29 03:34:01 +02:00
parent 02301aaed3
commit 7ac69ab4fb
33 changed files with 3995 additions and 51 deletions
+204
View File
@@ -0,0 +1,204 @@
---
description: Genera en un vault Obsidian un resumen capítulo a capítulo de uno o varios libros, siguiendo el formato de notas del vault captacion_clientes (MOC de libro + una nota por capítulo + MOC de categoría, todo enlazado con wikilinks).
---
# /capitulos — resumen de libros capítulo a capítulo en Obsidian
Genera notas de estudio de un libro (o varios) en un vault Obsidian, replicando el formato
canónico del vault `captacion_clientes`: una nota MOC por libro, una nota por capítulo, y una
nota MOC de categoría que agrupa los libros. Todo enlazado con wikilinks `[[ ]]` para que
Obsidian construya el grafo.
## Argumentos
`$ARGUMENTS` contiene, en lenguaje natural, los libros a procesar y opcionalmente el destino.
Interpreta:
- **Libros** — uno o varios títulos. Pueden venir con autor ("Forecasting de Hyndman"). Si el
usuario dice "los libros que me has dicho" o similar, usa los que se recomendaron en la
conversación previa.
- **Vault destino** — si no se especifica, **PREGUNTA** antes de escribir (ver Decisiones).
Vault por defecto de ejemplo de formato: `/home/enmanuel/Obsidian/captacion_clientes`.
- **Categoría** — la subcarpeta bajo `Libros/` que agrupa los libros (ej. "Marca y Mercado",
"Datos e Inversión"). Si no se da, propón una coherente con el tema de los libros y confírmala.
- **Profundidad** — `completo` (default, como The Mom Test: idea central + puntos clave +
citas + aplicación por capítulo) o `breve` (idea central + 3 bullets por capítulo).
## Decisiones a confirmar antes de escribir (si faltan en los argumentos)
Usa `AskUserQuestion` para resolver lo que cambie el trabajo, NO inventes:
1. **Vault y categoría destino** — dónde se crean las notas.
2. **Alcance** — qué libros exactamente y cuántos (si la lista es grande, confirma si son
todos o un subconjunto; cada libro es trabajo no trivial).
3. **Enfoque de "Aplicación"** — el ángulo desde el que se escribe la sección "Aplicación a mi
negocio / a mi caso" de cada capítulo (ej. inversión cuantitativa, data-analyst, SaaS…).
El vault de captación lo orienta al negocio del usuario; mantén ese espíritu pero ajustado
al tema real de los libros.
## Estructura de archivos a crear
```
<vault>/Libros/<Categoría>/
<Categoría> - MOC.md # MOC de categoría (crear o ACTUALIZAR, no sobrescribir)
<Libro>/
<Libro> - MOC.md # MOC del libro
01 - <Título capítulo>.md # una nota por capítulo, NN zero-padded a 2 dígitos
02 - <Título capítulo>.md
...
```
- Carpeta por libro, archivo por capítulo. Nombre de capítulo: `NN - <Título>.md` con `NN`
empezando en `01`. Si el capítulo tiene título original en otro idioma, puedes incluir la
traducción entre paréntesis como en el vault (`01 - The Mom Test (El test de la madre).md`).
- Nombres de archivo sin caracteres que rompan en Obsidian (evita `/`, `:`; los paréntesis y
acentos son válidos).
## Determinar los capítulos de cada libro
Para listar los capítulos reales de un libro:
1. Usa tu conocimiento del libro si lo conoces con fiabilidad (índice real, no inventado).
2. Si no estás seguro del índice exacto, **búscalo en la web** (`WebSearch` / `WebFetch` sobre
la tabla de contenidos del libro) antes de escribir. No inventes capítulos.
3. Indica en el MOC del libro si el índice procede de una edición concreta.
**Regla dura:** nunca te inventes el número o los títulos de los capítulos. Si no puedes
verificarlos, dilo y pregunta al usuario en vez de fabricar un índice plausible.
## Plantilla — MOC del libro (`<Libro> - MOC.md`)
```markdown
---
title: <Libro> - MOC
book: <Libro>
author: <Autor>
year: <Año>
type: book-moc
tags:
- <slug-libro>
- <tema-1>
- moc
---
# <Libro> — Mapa de contenidos (MOC)
## Metadata
- **Autor:** <Autor>
- **Año:** <Año> (<edición si aplica>)
- **Subtítulo:** *<subtítulo original>* (<traducción>)
- **Tema:** <de qué va en una frase>
- **Por qué importa:** <2-3 frases sobre qué problema resuelve y para quién>
## Resumen global
<Un párrafo denso (8-15 líneas) que sintetiza la tesis del libro y recorre el hilo de los
capítulos sin enumerarlos uno a uno: cuenta el argumento completo en prosa.>
## Capítulos
1. [[01 - <Título capítulo>]]
2. [[02 - <Título capítulo>]]
...
## Aplicación a mi caso (visión transversal)
<Párrafo que conecta el libro entero con el objetivo concreto del usuario (el enfoque
confirmado en las Decisiones): qué capítulos son los más relevantes y por qué.>
```
## Plantilla — nota de capítulo (`NN - <Título>.md`)
```markdown
---
title: <Título capítulo>
book: <Libro>
author: <Autor>
chapter: <N>
type: chapter-summary
tags:
- <slug-libro>
- <tema>
---
# NN. <Título capítulo>
> Libro: [[<Libro> - MOC]]
## Idea central
<1-3 frases con la tesis del capítulo.>
## Puntos clave
- <bullet sustantivo, no genérico>
- <…>
- <…>
## Ejemplos / citas
- <ejemplo concreto del capítulo o cita textual con su traducción si es en otro idioma>
- <…>
## Aplicación a mi caso
<Párrafo concreto: cómo aplicar la idea del capítulo al caso del usuario.>
---
Anterior: [[NN-1 - <Título anterior>]] · Siguiente: [[NN+1 - <Título siguiente>]] · Índice: [[<Libro> - MOC]]
```
Notas de la plantilla:
- El primer capítulo: `Anterior: —`. El último: `Siguiente: —`. (Ver patrón en el vault.)
- La sección "Aplicación" es obligatoria y debe ser específica del caso del usuario, no un
consejo genérico. Es lo que da valor a estas notas frente a un resumen cualquiera.
- En profundidad `breve`, omite "Ejemplos / citas" y deja "Puntos clave" en 3 bullets.
## Plantilla — MOC de categoría (`<Categoría> - MOC.md`)
Si ya existe, **ACTUALÍZALO** añadiendo los libros nuevos a la sección que corresponda (no lo
reescribas perdiendo lo previo). Si no existe, créalo:
```markdown
---
title: <Categoría> — MOC
type: moc
tags:
- libros
- <tema-categoría>
---
# <Categoría> — Mapa de contenidos
<Frase que describe el tema común de los libros de esta categoría.>
Cada libro tiene su propia nota MOC con el índice de capítulos enlazados.
## <Sub-tema 1>
- [[<Libro A> - MOC]] — <Autor>. <una línea de qué aporta>.
- [[<Libro B> - MOC]] — <Autor>. <…>.
## Orden de lectura recomendado
1. **<Libro>** — <por qué primero>.
2. ...
```
## Flujo de ejecución
1. Parsear `$ARGUMENTS`: libros, vault, categoría, profundidad, enfoque.
2. Resolver decisiones faltantes con `AskUserQuestion`.
3. Para cada libro: verificar el índice real de capítulos (conocimiento fiable o WebSearch).
4. Crear carpeta del libro. Escribir el MOC del libro y todas las notas de capítulo con
wikilinks y navegación correctos.
5. Crear o actualizar el MOC de categoría enlazando los libros nuevos.
6. **Paralelización:** si son varios libros, cada libro es independiente (carpetas disjuntas).
En modo orquestador, lanza un ejecutor por libro (o por lote de libros) escribiendo en
carpetas distintas del mismo vault. Cada ejecutor escribe SOLO su carpeta de libro; el MOC
de categoría lo actualiza UN único agente al final (o el orquestador) para evitar que dos
ejecutores editen el mismo archivo a la vez.
7. Reportar: lista de archivos creados (MOC + nº de capítulos por libro) y la ruta del vault
para abrirlo en Obsidian.
## Gotchas
- **El vault es artefacto local** (gitignored en fn_registry, symlink a `~/Obsidian/<vault>`).
Escribir notas NO toca el repo `fn_registry`. Si el vault es su propio repo git, NO commitees
desde varios ejecutores a la vez (race): deja el commit/sync al usuario o a un único paso final.
- **No sobrescribas** un MOC de categoría existente ni notas de capítulo ya escritas a mano sin
confirmarlo. Ante colisión de nombre, pregunta.
- **Índices inventados = bug.** Verifica los capítulos reales antes de escribir.
- **Wikilinks deben resolver:** el texto dentro de `[[ ]]` debe coincidir exactamente con el
nombre de archivo (sin extensión). Un typo rompe el enlace en Obsidian.