Skip to content

feat: histórico de métricas + gráficas de evolución #50

Description

@VGonPa

Problema

El dashboard de #49 es un snapshot puntual: se sobrescribe en cada generate y no queda registro de cómo evoluciona el corpus. No se puede responder "cuánto crece la KB al mes", "mejora la cobertura de fetch en el tiempo", ni ver deriva de temas, ni pintar tendencias.

Motivación

Con el store creciendo por extracciones incrementales, la evolución es una señal en sí: ritmo de captura, salud del fetch a lo largo del tiempo, cambios en la mezcla de temas. Eso requiere acumular snapshots fechados, no solo el estado actual.

Propuesta

En cada generate (o vía comando explícito), anexar un snapshot fechado de las métricas de #49 a un histórico, y renderizar una vista de evolución (tabla + gráficas).

Decisiones de diseño (a cerrar en el spec):

  • Almacén del histórico: data/metrics-history.jsonl (source of truth, gitignored como el resto de data/), una línea = un snapshot {fecha, métricas}.
  • Cadencia / dedup: propongo un snapshot por día, idempotente (re-generar el mismo día actualiza el punto, no duplica).
  • Series a trackear: total items, por fuente, long-form guardado, media descargada, tasa de éxito de fetch, nº de topics, (opcional) tamaño por topic.
  • Render de gráficas: opciones — (a) bloque mermaid xychart-beta en un metrics-history.md; (b) plugin Obsidian Charts (bloque ```chart); (c) tabla + sparklines. Propuesta: mermaid (nativo, versionable, se ve en GitHub y en Obsidian sin plugin).
  • Reutiliza compute_metrics de feat: dashboard de métricas auto-generado en _index.md #49 para generar cada snapshot.

Criterios de aceptación

  • Cada generate anexa (idempotente por día) un snapshot al histórico.
  • Se renderiza una vista de evolución con al menos: crecimiento de items totales y por fuente, y cobertura de fetch, en el tiempo.
  • Tests: append idempotente, parsing del histórico, render determinista.
  • uv run poe check verde.

Dependencias

Fuera de alcance

Open questions

  • ¿mermaid vs plugin Obsidian Charts? (mermaid = sin dependencia de plugin).
  • ¿Snapshot en generate siempre, o solo con --snapshot / comando xbrain metrics --record?
  • ¿Retención del histórico (infinito / últimos N puntos / downsampling)?
  • ¿Una nota metrics-history.md separada, o una sección en el propio _index.md?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions