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.html18.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.
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:
- cambia un claim, una tabla de appendix, una figura del cuerpo o una respuesta probable de reviewer;
- tiene artefacto trazable y test o chequeo reproducible asociado;
- 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.
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.