18  Trazabilidad de Artefactos y Runbook

18.1 Mapa Maestro Claim → Artefacto → Test

Esta página es el índice maestro del CRPTO. Cumple un rol específico que ningún chapter narrativo cumple: dar a un revisor (académico, regulatorio o interno) la capacidad de tomar cualquier claim del paper, encontrar el artefacto exacto que lo soporta, identificar el script generador y verificar el guardrail que mantiene la coherencia. Es el contrato de trazabilidad operativa del proyecto.

Nota de gobernanza (actualizada 2026-07-09): los claims C1–C7 trazan la cadena upstream congelada (rebaseline ijds-rebaseline-2026-06-07, retorno $170,464.54, floor declarado). El body claim IJDS es el punto pool93 ($184,832.48, 8/8), anclado en la gobernanza certificate-semantics-v2 y las tablas A35–A40, con guardrail tests/test_pool93_body_claim_sync.py.

Claim del paper Artefacto que lo ancla Guardrail que lo protege Lectura rápida
La PD es insumo calibrado, no contribución principal. models/pd_canonical.*, crpto_table0_key_metrics.csv Manifest + final-sync tests La base predictiva es estable y trazable.
La incertidumbre conformal entra al LP robusto. conformal_intervals_mondrian.parquet, champion_portfolio_policy.json Conformal/model tests + policy config El intervalo no se gráfica al final: cambia la decisión.
El bound se audita sobre el funded set. portfolio_bound_aware_bound_eval.parquet, final_project_promotion.json test_crpto_final_sync.py V, Gamma_CP y violation vienen del portafolio promovido.
El champion no es un punto aislado. crpto_tableA18_robust_region_policy_family.csv Journal-package status + DVC lock 45/45 policies pasan alpha = 0.01.
El supplement no re-promueve otro método. A12–A34 + status JSONs Scope notes + smoke tests Tail, MDCP/online, SPO+, réplica externa y precio de robustez cross-dataset son diagnósticos o comparadores.

18.1.1 Tabla maestra: claims C1–C7

18.1.2 Mapa figura → script → fuente

18.1.3 Mapa tabla A → script → fuente

18.1.4 Runbook: regenerar el paquete completo

# 1. Verificar entorno Windows nativo
uv run python --version

# 2. Regenerar tablas paper-facing canónicas (A0-A6)
uv run python scripts/export_crpto_tables.py

# 3. Regenerar evidencia CRPTO con hardening (A7-A11)
uv run python scripts/analyze_crpto_evidence.py --include-hardening

# 4. Regenerar journal package (A12-A19 + Figuras 1, 12-15, 20)
uv run python scripts/build_crpto_journal_package.py

# 4b. Regenerar add-ons journal (A20-A34 + Figuras 16-25)
uv run python scripts/build_tail_satisficing_challenger_audit.py
uv run python scripts/build_tail_constrained_reoptimization.py
uv run python scripts/build_distribution_robustness_diagnostics.py
uv run python scripts/build_multidataset_external_replication.py
uv run python scripts/build_price_of_robustness_cross_dataset.py

# 5. (Opcional) Regenerar figuras publicación (7-25)
uv run python scripts/generate_crpto_figures.py

# 6. Validar coherencia con tests guardrail
uv run pytest tests/test_crpto_final_sync.py tests/test_quarto_book_guardrails.py

# 7. Renderizar libro Quarto
uv run -- quarto render book --to html --no-execute

# 8. Abrir resultado
Test-Path book/_book/index.html

18.1.5 Runbook: familias congeladas vs familias de búsqueda

La regla operativa más importante para reproducibilidad es que los pipelines paper-facing no vuelven a buscar el champion. Consumen la policy congelada en models/champion_portfolio_policy.json mediante explicit_champion_only. Solo las familias nombradas como búsqueda pueden reabrir HPO, conformal search o portfolio search.

ImportanteRegla anti-regresión del champion

crpto_e2e, paper2_e2e, core_canonical y canonical_rebuild son rutas de regeneración, no rutas de descubrimiento. Si un rerun de esas familias produce una policy distinta al economic champion rt=0.175, gamma=0.45, blended_uncertainty, uncertainty_aversion=0.10, eso es una regresión del pipeline y no un nuevo resultado del paper. La única forma válida de cambiar el champion es abrir una familia search_*, versionar el run, comparar por familia compatible y actualizar la promoción explícitamente.

18.1.6 Regla de reapertura de líneas estacionadas

La regla anti-regresión protege el champion contra reruns accidentales. Su complemento es la regla de reapertura: define cuándo una línea estacionada (challenger PD, variante conformal, frente de bound) puede volver a la columna vertebral del manuscrito. Una línea parqueada se reabre solo si cumple las tres condiciones:

  1. cambia un claim, una tabla de appendix, una figura del cuerpo o una respuesta probable de reviewer;
  2. tiene artefacto trazable y test o chequeo reproducible asociado;
  3. no contradice models/final_project_promotion.json.

Si una propuesta no cumple las tres, no entra al spine: queda como agenda de tesis, nota de supplement o registro de resultado negativo (ver 23-apendices-regulatorios-y-future-work.qmd). El protocolo gobernado completo de reapertura del champion vive en docs/research/crpto_champion_reopen_plan_2026-05-21.md y el contrato anti-cherry-pick en docs/research/crpto_champion_tournament_protocol_2026-05-25.md; ambos son documentación histórica y no reabren el champion congelado por sí solos.

18.1.7 Regla sobre _freeze

El libro usa execute: freeze: true en book/_quarto.yml. Eso significa que un render intencional puede crear o actualizar archivos bajo book/_freeze/. La regla operativa es simple: si el render se hizo para cerrar una página del CRPTO, el cache asociado se versiona junto con la página; si el render fue exploratorio, se revisa antes de incluirlo en un commit. No hay que borrar _freeze como limpieza automática porque forma parte de la reproducibilidad del libro.

ImportanteRegla de sincronización canónica

Si cualquier tabla del paquete (A0–A34) o cualquier figura (7–25) contradice los valores en models/final_project_promotion.json, gana siempre final_project_promotion.json. Las tablas/figuras son evidencia de robustez, sensibilidad, réplica externa y empaque journal; nunca son una promoción nueva del champion. La regla está implementada en los tests tests/test_crpto_final_sync.py y se ejecuta en CI.

18.1.8 Estado de los status JSONs canónicos

18.1.9 Where to look first (índice por pregunta de revisor)

Si el revisor pregunta… Ir directamente a…
¿Cuál es el champion y por qué? 06-blueprint-manuscrito.qmd + models/final_project_promotion.json
¿Por qué score_decile_mondrian y no grade? 08-ablacion-mondrian.qmd (Sección 13.1)
¿Cómo se midieron el 49.09% y el 48.51% de SPO+? 09-spo-regret.qmd (Sección 14.1)
¿Pasa fairness? 10-fair-lending.qmd (Sección 15.1)
¿Pasa MRM/SR 11-7? 11-mrm.qmd (Sección 16.1)
¿Cómo está compuesto el funded set? 12-funded-set.qmd (Sección 17.1)
¿Cuál es el bound exacto y cómo se demuestra? 02-marco-teorico.qmd (thm-conformal-feasibility)
¿Cuál es la región robusta? 04-resultados.qmd sección Región robusta completa + Fig 14
¿Qué pasó con el shift COVID? 04-resultados.qmd (Sección 7.0.8)
¿Cuáles son los apéndices journal? 07-apendice-robustez.qmd (Sección 12.1)
¿Cómo regenero todo? Esta página, sección Runbook arriba
¿Cómo sé que un rerun no reabre búsqueda? Esta página, sección Runbook: familias congeladas vs familias de búsqueda

Esta tabla cumple un propósito muy concreto: cuando un revisor mande comentarios, no hay que buscar — hay un mapa directo.