Files
fn_registry/bash/functions/pipelines/init_paper.md
T
egutierrez 6e3c3cf2a2 feat(papers): estructura, scaffolding y capability page del artefacto papers/
Nuevo tipo de artefacto para papers académicos reproducibles (papers/<NNNN-slug>/):

- Plantillas docs/templates/paper.md (IMRaD completo con guías por sección:
  Abstract, Introduction, Related work, Methods, Results, Discussion con
  Limitaciones + Amenazas a la validez, Conclusion + Future work) y
  docs/templates/preregistration.md (H0/H1 falsable, variables, diseño, plan
  de análisis con test exacto + effect size + corrección múltiple, predicción
  cuantitativa; nota anti-HARKing de congelado).
- Pipeline init_paper (bash/functions/pipelines/init_paper.sh + .md): calcula el
  siguiente NNNN, crea las subcarpetas (experiments data figures reviews out),
  copia las plantillas rellenando el frontmatter (title, slug, date, phase=question,
  status=draft) y crea references.md. No hace git init (fase interna local).
- Función atómica reutilizable next_numbered_dir (bash/functions/io): siguiente
  prefijo NNNN- escaneando un directorio numerado (reutilizable por papers/reports/issues).
- papers/ como artefacto local gitignored (bloque en .gitignore + papers/.gitkeep):
  un paper en fase interna no contamina el repo padre; al promocionar a publishable
  se vuelve sub-repo Gitea propio.
- Página de capacidad docs/capabilities/papers.md + fila en el INDEX: tabla de
  funciones del grupo papers (disponibles + en construcción por la flota), ejemplo
  canónico end-to-end y fronteras.

Reutiliza slugify_ascii del registry. Diseño: reports/0001-2026-06-30-papers-system-design.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 20:38:38 +02:00

4.1 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
init_paper pipeline bash pipelines 1.0.0 impure init_paper(slug: string, [--title <t>] [--domain <d>] [--tags <csv>]) -> void Scaffold de un paper académico reproducible en papers/<NNNN-slug>/. Calcula el siguiente número incremental escaneando papers/, crea las subcarpetas (experiments data figures reviews out), copia las plantillas paper.md (IMRaD) + preregistration.md (anti-HARKing) rellenando el frontmatter (title, slug, date de hoy, phase=question, status=draft) y crea references.md. NO hace git init: el paper arranca en fase interna local (papers/ gitignored). Grupo de capacidad papers.
papers
scaffold
paper
pipeline
bash
launcher
next_numbered_dir_bash_io
slugify_ascii_py_core
false error_go_core
name desc
slug identificador legible del paper; se slugifica a ASCII (espacios/acentos se normalizan) y se prefija con el siguiente NNNN incremental
name desc
--title título del paper (string); si se omite, usa el slug limpio. No debe contener el carácter '|'
name desc
--domain dominio del paper escrito en el frontmatter (default datascience)
name desc
--tags tags CSV que se escriben en el frontmatter de paper.md (opcional)
sin salida directa; crea papers/<NNNN-slug>/ con paper.md, preregistration.md, references.md y las subcarpetas experiments/ data/ figures/ reviews/ out/. Imprime el resumen y los pasos siguientes a stdout. false
bash/functions/pipelines/init_paper.sh

Ejemplo

# Scaffold de un paper nuevo (numera 0001, 0002, ... automáticamente)
fn run init_paper mi-primer-paper --title "Mi primer paper"
fn run init_paper reactive-loop-calls --domain datascience --tags registry,telemetria

# El slug se slugifica: "Áreas de Mejora" -> papers/0003-areas-de-mejora/
fn run init_paper "Áreas de Mejora"

Cuando usarla

Cuando empiezas un paper académico nuevo dentro de fn_registry y necesitas el esqueleto del artefacto (papers/<NNNN-slug>/) con las plantillas IMRaD y de pre-registro listas para rellenar. Es el paso 1 del grupo de capacidad papers (ver docs/capabilities/papers.md), antes de la revisión de literatura y del pre-registro de la hipótesis.

Flujo

  1. Parsea <slug> (posicional) + flags --title / --domain / --tags. Falla con exit ≠ 0 si falta el slug.
  2. slugify_ascii — normaliza el slug a ASCII lowercase sin diacríticos (reutiliza la función del registry, solo stdlib).
  3. next_numbered_dir papers/ — calcula el siguiente NNNN de 4 dígitos sin colisión.
  4. Crea papers/<NNNN-slug>/ con las subcarpetas experiments/ data/ figures/ reviews/ out/.
  5. Copia docs/templates/paper.md + docs/templates/preregistration.md y rellena el frontmatter por clave de línea (title, slug, date de hoy, domain, tags; phase=question y status=draft vienen de la plantilla).
  6. Crea references.md vacío.

Gotchas

  • NO hace git init. El paper arranca en fase interna local; papers/ está gitignored en el repo padre (solo papers/.gitkeep se versiona). Promocionar a sub-repo Gitea (fase publishable) es manual.
  • El --title no debe contener el carácter | (se usa como delimitador de sed al rellenar el frontmatter; los & y \ sí se escapan).
  • No indexa el paper en registry.db — los artefactos papers/<slug>/ no se indexan en esta fase (KISS); sí se indexa este pipeline.
  • Requiere python3 (del venv del registry o del sistema) para slugificar; slugify_ascii solo usa stdlib, así que el venv no es obligatorio.
  • Idempotencia: si el directorio destino ya existiera, aborta con exit ≠ 0 en vez de sobrescribir.

Notas

Cada paper es un artefacto independiente (mismo patrón que apps/ y analysis/, pero para investigación). El pipeline usa set -euo pipefail: cualquier fallo detiene la ejecución. Parte del grupo de capacidad papers — diseño completo en reports/0001-2026-06-30-papers-system-design.md.