theus-cli-linux-x64 1.2.2 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/RELEASE.json +6 -6
- package/bin/theus +0 -0
- package/package.json +1 -1
- package/vendor/higiene-motor/PARCHES.md +244 -0
- package/vendor/higiene-motor/audit_dir.py +166 -0
- package/vendor/higiene-motor/audit_lib.py +333 -0
- package/vendor/higiene-motor/audit_website.py +635 -0
- package/vendor/higiene-motor/av_meta.py +498 -0
- package/vendor/higiene-motor/check_staged.py +71 -0
- package/vendor/higiene-motor/clean_ctrlregen.py +212 -0
- package/vendor/higiene-motor/clean_file.py +237 -0
- package/vendor/higiene-motor/clean_image.py +218 -0
- package/vendor/higiene-motor/clean_staged.py +143 -0
- package/vendor/higiene-motor/clean_text.py +108 -0
- package/vendor/higiene-motor/common.py +486 -0
- package/vendor/higiene-motor/container_meta.py +2522 -0
- package/vendor/higiene-motor/detect_gumbel.py +308 -0
- package/vendor/higiene-motor/detect_text_watermark.py +613 -0
- package/vendor/higiene-motor/format_dispatch.py +157 -0
- package/vendor/higiene-motor/hook_written_file.py +253 -0
- package/vendor/higiene-motor/image_meta.py +2171 -0
- package/vendor/higiene-motor/inspect_file.py +138 -0
- package/vendor/higiene-motor/inspect_image.py +72 -0
- package/vendor/higiene-motor/inspect_text.py +86 -0
- package/vendor/higiene-motor/markdiffusion_harness.py +533 -0
- package/vendor/higiene-motor/rewrite_text.py +737 -0
- package/vendor/higiene-motor/score_stylometry.py +460 -0
- package/vendor/higiene-motor/score_synthid.py +165 -0
- package/vendor/higiene-motor/server.py +1059 -0
- package/vendor/higiene-motor/synthid_score_server.py +176 -0
- package/vendor/higiene-motor/text_detectors.py +433 -0
- package/vendor/higiene-motor/text_unicode.py +730 -0
- package/vendor/theus-arsenal/.arsenal-nombres-ola2.json +0 -6
- package/vendor/theus-arsenal/.arsenal-nombres-ola3.json +0 -72
- package/vendor/theus-arsenal/.mailmap +0 -2
- package/vendor/theus-arsenal/.theus-plugin/marketplace.json +0 -25
- package/vendor/theus-arsenal/.theus-plugin/plugin.json +0 -20
- package/vendor/theus-arsenal/AUTHORS.md +0 -8
- package/vendor/theus-arsenal/CLEANROOM_REPLACEMENT_PLAN.md +0 -11
- package/vendor/theus-arsenal/LICENSE +0 -26
- package/vendor/theus-arsenal/PROVENANCE.md +0 -9
- package/vendor/theus-arsenal/README.md +0 -41
- package/vendor/theus-arsenal/THIRD_PARTY.md +0 -80
- package/vendor/theus-arsenal/agents/actualizador-docs.md +0 -123
- package/vendor/theus-arsenal/agents/analista-comentarios.md +0 -53
- package/vendor/theus-arsenal/agents/analista-conversaciones.md +0 -60
- package/vendor/theus-arsenal/agents/analista-tests-pr.md +0 -53
- package/vendor/theus-arsenal/agents/analista-tipos.md +0 -49
- package/vendor/theus-arsenal/agents/arquitecto-accesibilidad.md +0 -148
- package/vendor/theus-arsenal/agents/arquitecto-codigo.md +0 -79
- package/vendor/theus-arsenal/agents/arquitecto-homelab.md +0 -90
- package/vendor/theus-arsenal/agents/arquitecto-redes.md +0 -116
- package/vendor/theus-arsenal/agents/arquitecto-sistemas.md +0 -219
- package/vendor/theus-arsenal/agents/bifurcador-opensource.md +0 -206
- package/vendor/theus-arsenal/agents/cazador-fallos-silenciosos.md +0 -58
- package/vendor/theus-arsenal/agents/consultor-documentacion.md +0 -76
- package/vendor/theus-arsenal/agents/diagnosticador-redes.md +0 -135
- package/vendor/theus-arsenal/agents/ejecutor-e2e.md +0 -96
- package/vendor/theus-arsenal/agents/empaquetador-opensource.md +0 -257
- package/vendor/theus-arsenal/agents/escaner-secretos.md +0 -196
- package/vendor/theus-arsenal/agents/especialista-seo.md +0 -70
- package/vendor/theus-arsenal/agents/estratega-marketing.md +0 -158
- package/vendor/theus-arsenal/agents/evaluador-agentes.md +0 -214
- package/vendor/theus-arsenal/agents/evaluador-harness.md +0 -217
- package/vendor/theus-arsenal/agents/explorador-codigo.md +0 -79
- package/vendor/theus-arsenal/agents/extractor-specs.md +0 -214
- package/vendor/theus-arsenal/agents/generador-harness.md +0 -139
- package/vendor/theus-arsenal/agents/guia-tdd.md +0 -99
- package/vendor/theus-arsenal/agents/jefe-de-gabinete.md +0 -162
- package/vendor/theus-arsenal/agents/limpiador-refactors.md +0 -93
- package/vendor/theus-arsenal/agents/optimizador-rendimiento.md +0 -454
- package/vendor/theus-arsenal/agents/planificador-harness.md +0 -107
- package/vendor/theus-arsenal/agents/planificador.md +0 -221
- package/vendor/theus-arsenal/agents/resolutor-apps-harmonyos.md +0 -181
- package/vendor/theus-arsenal/agents/resolutor-builds-cpp.md +0 -98
- package/vendor/theus-arsenal/agents/resolutor-builds-dart.md +0 -209
- package/vendor/theus-arsenal/agents/resolutor-builds-django.md +0 -253
- package/vendor/theus-arsenal/agents/resolutor-builds-go.md +0 -102
- package/vendor/theus-arsenal/agents/resolutor-builds-java.md +0 -274
- package/vendor/theus-arsenal/agents/resolutor-builds-kotlin.md +0 -128
- package/vendor/theus-arsenal/agents/resolutor-builds-pytorch.md +0 -128
- package/vendor/theus-arsenal/agents/resolutor-builds-react.md +0 -214
- package/vendor/theus-arsenal/agents/resolutor-builds-rust.md +0 -156
- package/vendor/theus-arsenal/agents/resolutor-builds-swift.md +0 -169
- package/vendor/theus-arsenal/agents/resolutor-builds.md +0 -122
- package/vendor/theus-arsenal/agents/revisor-bd.md +0 -97
- package/vendor/theus-arsenal/agents/revisor-codigo.md +0 -291
- package/vendor/theus-arsenal/agents/revisor-config-red.md +0 -116
- package/vendor/theus-arsenal/agents/revisor-cpp.md +0 -80
- package/vendor/theus-arsenal/agents/revisor-csharp.md +0 -109
- package/vendor/theus-arsenal/agents/revisor-django.md +0 -168
- package/vendor/theus-arsenal/agents/revisor-fastapi.md +0 -82
- package/vendor/theus-arsenal/agents/revisor-flutter.md +0 -251
- package/vendor/theus-arsenal/agents/revisor-go.md +0 -84
- package/vendor/theus-arsenal/agents/revisor-java.md +0 -192
- package/vendor/theus-arsenal/agents/revisor-kotlin.md +0 -171
- package/vendor/theus-arsenal/agents/revisor-ml.md +0 -159
- package/vendor/theus-arsenal/agents/revisor-php.md +0 -108
- package/vendor/theus-arsenal/agents/revisor-python.md +0 -106
- package/vendor/theus-arsenal/agents/revisor-react.md +0 -166
- package/vendor/theus-arsenal/agents/revisor-rust.md +0 -102
- package/vendor/theus-arsenal/agents/revisor-seguridad.md +0 -116
- package/vendor/theus-arsenal/agents/revisor-software-clinico.md +0 -95
- package/vendor/theus-arsenal/agents/revisor-swift.md +0 -115
- package/vendor/theus-arsenal/agents/revisor-typescript.md +0 -123
- package/vendor/theus-arsenal/agents/revisor-vue.md +0 -205
- package/vendor/theus-arsenal/agents/simplificador-codigo.md +0 -55
- package/vendor/theus-arsenal/commands/actualizar-docs.md +0 -88
- package/vendor/theus-arsenal/commands/actualizar-mapas-codigo.md +0 -78
- package/vendor/theus-arsenal/commands/aprender-evaluar.md +0 -109
- package/vendor/theus-arsenal/commands/aprender.md +0 -74
- package/vendor/theus-arsenal/commands/arreglar-build.md +0 -66
- package/vendor/theus-arsenal/commands/bucle-multiperspectiva.md +0 -153
- package/vendor/theus-arsenal/commands/build-cpp.md +0 -173
- package/vendor/theus-arsenal/commands/build-flutter.md +0 -164
- package/vendor/theus-arsenal/commands/build-go.md +0 -183
- package/vendor/theus-arsenal/commands/build-gradle.md +0 -75
- package/vendor/theus-arsenal/commands/build-kotlin.md +0 -176
- package/vendor/theus-arsenal/commands/build-react.md +0 -187
- package/vendor/theus-arsenal/commands/build-rust.md +0 -187
- package/vendor/theus-arsenal/commands/campana-marketing.md +0 -125
- package/vendor/theus-arsenal/commands/checkpoint.md +0 -78
- package/vendor/theus-arsenal/commands/cobertura-tests.md +0 -73
- package/vendor/theus-arsenal/commands/configurar-gestor-paquetes.md +0 -86
- package/vendor/theus-arsenal/commands/consulta.md +0 -164
- package/vendor/theus-arsenal/commands/control-calidad.md +0 -50
- package/vendor/theus-arsenal/commands/crear-skill.md +0 -77
- package/vendor/theus-arsenal/commands/enrutar-modelo.md +0 -30
- package/vendor/theus-arsenal/commands/epica-desbloquear.md +0 -17
- package/vendor/theus-arsenal/commands/epica-descomponer.md +0 -22
- package/vendor/theus-arsenal/commands/epica-publicar.md +0 -21
- package/vendor/theus-arsenal/commands/epica-reclamar.md +0 -25
- package/vendor/theus-arsenal/commands/epica-revisar.md +0 -22
- package/vendor/theus-arsenal/commands/epica-sincronizar.md +0 -21
- package/vendor/theus-arsenal/commands/epica-validar.md +0 -21
- package/vendor/theus-arsenal/commands/evolucionar.md +0 -176
- package/vendor/theus-arsenal/commands/funcionalidad.md +0 -49
- package/vendor/theus-arsenal/commands/guardar-sesion.md +0 -278
- package/vendor/theus-arsenal/commands/harness-build.md +0 -111
- package/vendor/theus-arsenal/commands/harness-diseno.md +0 -46
- package/vendor/theus-arsenal/commands/informe-costos.md +0 -90
- package/vendor/theus-arsenal/commands/iniciar-bucle.md +0 -36
- package/vendor/theus-arsenal/commands/instintos-estado.md +0 -53
- package/vendor/theus-arsenal/commands/instintos-exportar.md +0 -69
- package/vendor/theus-arsenal/commands/instintos-importar.md +0 -120
- package/vendor/theus-arsenal/commands/lienzo-planes.md +0 -48
- package/vendor/theus-arsenal/commands/limpiar-refactor.md +0 -84
- package/vendor/theus-arsenal/commands/modo-seguro.md +0 -96
- package/vendor/theus-arsenal/commands/orq-agregar-funcionalidad.md +0 -36
- package/vendor/theus-arsenal/commands/orq-cambiar-funcionalidad.md +0 -38
- package/vendor/theus-arsenal/commands/orq-construir-mvp.md +0 -36
- package/vendor/theus-arsenal/commands/orq-corregir-defecto.md +0 -40
- package/vendor/theus-arsenal/commands/orq-refinar-codigo.md +0 -44
- package/vendor/theus-arsenal/commands/orq-revisar.md +0 -135
- package/vendor/theus-arsenal/commands/plan-prd.md +0 -160
- package/vendor/theus-arsenal/commands/plan.md +0 -198
- package/vendor/theus-arsenal/commands/podar.md +0 -31
- package/vendor/theus-arsenal/commands/pr.md +0 -181
- package/vendor/theus-arsenal/commands/promover.md +0 -41
- package/vendor/theus-arsenal/commands/proyectos.md +0 -33
- package/vendor/theus-arsenal/commands/prp-commit.md +0 -112
- package/vendor/theus-arsenal/commands/prp-implementar.md +0 -385
- package/vendor/theus-arsenal/commands/prp-planificar.md +0 -501
- package/vendor/theus-arsenal/commands/reanudar-sesion.md +0 -160
- package/vendor/theus-arsenal/commands/revisar-codigo.md +0 -289
- package/vendor/theus-arsenal/commands/revisar-cpp.md +0 -132
- package/vendor/theus-arsenal/commands/revisar-fastapi.md +0 -39
- package/vendor/theus-arsenal/commands/revisar-flutter.md +0 -115
- package/vendor/theus-arsenal/commands/revisar-go.md +0 -148
- package/vendor/theus-arsenal/commands/revisar-kotlin.md +0 -140
- package/vendor/theus-arsenal/commands/revisar-pr.md +0 -37
- package/vendor/theus-arsenal/commands/revisar-python.md +0 -297
- package/vendor/theus-arsenal/commands/revisar-react.md +0 -170
- package/vendor/theus-arsenal/commands/revisar-rust.md +0 -142
- package/vendor/theus-arsenal/commands/revisar-vue.md +0 -174
- package/vendor/theus-arsenal/commands/salud-skills.md +0 -52
- package/vendor/theus-arsenal/commands/sesiones.md +0 -345
- package/vendor/theus-arsenal/commands/test-cpp.md +0 -252
- package/vendor/theus-arsenal/commands/test-flutter.md +0 -143
- package/vendor/theus-arsenal/commands/test-go.md +0 -268
- package/vendor/theus-arsenal/commands/test-kotlin.md +0 -312
- package/vendor/theus-arsenal/commands/test-react.md +0 -265
- package/vendor/theus-arsenal/commands/test-rust.md +0 -309
- package/vendor/theus-arsenal/commands/vigilancia-canary.md +0 -43
- package/vendor/theus-arsenal/hooks/hooks.json +0 -274
- package/vendor/theus-arsenal/package.json +0 -6
- package/vendor/theus-arsenal/rules/angular/coding-style.md +0 -182
- package/vendor/theus-arsenal/rules/angular/hooks.md +0 -25
- package/vendor/theus-arsenal/rules/angular/patterns.md +0 -249
- package/vendor/theus-arsenal/rules/angular/security.md +0 -87
- package/vendor/theus-arsenal/rules/angular/testing.md +0 -164
- package/vendor/theus-arsenal/rules/arkts/coding-style.md +0 -153
- package/vendor/theus-arsenal/rules/arkts/hooks.md +0 -80
- package/vendor/theus-arsenal/rules/arkts/patterns.md +0 -236
- package/vendor/theus-arsenal/rules/arkts/security.md +0 -141
- package/vendor/theus-arsenal/rules/arkts/testing.md +0 -126
- package/vendor/theus-arsenal/rules/common/agents.md +0 -49
- package/vendor/theus-arsenal/rules/common/code-review.md +0 -123
- package/vendor/theus-arsenal/rules/common/coding-style.md +0 -90
- package/vendor/theus-arsenal/rules/common/development-workflow.md +0 -44
- package/vendor/theus-arsenal/rules/common/git-workflow.md +0 -24
- package/vendor/theus-arsenal/rules/common/hooks.md +0 -32
- package/vendor/theus-arsenal/rules/common/patterns.md +0 -31
- package/vendor/theus-arsenal/rules/common/performance.md +0 -53
- package/vendor/theus-arsenal/rules/common/security.md +0 -29
- package/vendor/theus-arsenal/rules/common/testing.md +0 -57
- package/vendor/theus-arsenal/rules/cpp/coding-style.md +0 -44
- package/vendor/theus-arsenal/rules/cpp/hooks.md +0 -39
- package/vendor/theus-arsenal/rules/cpp/patterns.md +0 -51
- package/vendor/theus-arsenal/rules/cpp/security.md +0 -51
- package/vendor/theus-arsenal/rules/cpp/testing.md +0 -44
- package/vendor/theus-arsenal/rules/csharp/coding-style.md +0 -72
- package/vendor/theus-arsenal/rules/csharp/hooks.md +0 -25
- package/vendor/theus-arsenal/rules/csharp/patterns.md +0 -50
- package/vendor/theus-arsenal/rules/csharp/security.md +0 -58
- package/vendor/theus-arsenal/rules/csharp/testing.md +0 -50
- package/vendor/theus-arsenal/rules/dart/coding-style.md +0 -159
- package/vendor/theus-arsenal/rules/dart/hooks.md +0 -68
- package/vendor/theus-arsenal/rules/dart/patterns.md +0 -261
- package/vendor/theus-arsenal/rules/dart/security.md +0 -135
- package/vendor/theus-arsenal/rules/dart/testing.md +0 -215
- package/vendor/theus-arsenal/rules/fsharp/coding-style.md +0 -112
- package/vendor/theus-arsenal/rules/fsharp/hooks.md +0 -26
- package/vendor/theus-arsenal/rules/fsharp/patterns.md +0 -111
- package/vendor/theus-arsenal/rules/fsharp/security.md +0 -76
- package/vendor/theus-arsenal/rules/fsharp/testing.md +0 -62
- package/vendor/theus-arsenal/rules/golang/coding-style.md +0 -32
- package/vendor/theus-arsenal/rules/golang/hooks.md +0 -17
- package/vendor/theus-arsenal/rules/golang/patterns.md +0 -45
- package/vendor/theus-arsenal/rules/golang/security.md +0 -34
- package/vendor/theus-arsenal/rules/golang/testing.md +0 -31
- package/vendor/theus-arsenal/rules/java/coding-style.md +0 -114
- package/vendor/theus-arsenal/rules/java/hooks.md +0 -18
- package/vendor/theus-arsenal/rules/java/patterns.md +0 -147
- package/vendor/theus-arsenal/rules/java/security.md +0 -101
- package/vendor/theus-arsenal/rules/java/testing.md +0 -133
- package/vendor/theus-arsenal/rules/kotlin/coding-style.md +0 -86
- package/vendor/theus-arsenal/rules/kotlin/hooks.md +0 -17
- package/vendor/theus-arsenal/rules/kotlin/patterns.md +0 -146
- package/vendor/theus-arsenal/rules/kotlin/security.md +0 -82
- package/vendor/theus-arsenal/rules/kotlin/testing.md +0 -128
- package/vendor/theus-arsenal/rules/nuxt/coding-style.md +0 -47
- package/vendor/theus-arsenal/rules/nuxt/hooks.md +0 -39
- package/vendor/theus-arsenal/rules/nuxt/patterns.md +0 -54
- package/vendor/theus-arsenal/rules/nuxt/security.md +0 -48
- package/vendor/theus-arsenal/rules/nuxt/testing.md +0 -49
- package/vendor/theus-arsenal/rules/php/coding-style.md +0 -40
- package/vendor/theus-arsenal/rules/php/hooks.md +0 -24
- package/vendor/theus-arsenal/rules/php/patterns.md +0 -33
- package/vendor/theus-arsenal/rules/php/security.md +0 -37
- package/vendor/theus-arsenal/rules/php/testing.md +0 -38
- package/vendor/theus-arsenal/rules/python/coding-style.md +0 -42
- package/vendor/theus-arsenal/rules/python/fastapi.md +0 -58
- package/vendor/theus-arsenal/rules/python/hooks.md +0 -19
- package/vendor/theus-arsenal/rules/python/patterns.md +0 -39
- package/vendor/theus-arsenal/rules/python/security.md +0 -30
- package/vendor/theus-arsenal/rules/python/testing.md +0 -38
- package/vendor/theus-arsenal/rules/react/coding-style.md +0 -109
- package/vendor/theus-arsenal/rules/react/hooks.md +0 -187
- package/vendor/theus-arsenal/rules/react/patterns.md +0 -194
- package/vendor/theus-arsenal/rules/react/security.md +0 -180
- package/vendor/theus-arsenal/rules/react/testing.md +0 -208
- package/vendor/theus-arsenal/rules/react-native/accessibility.md +0 -55
- package/vendor/theus-arsenal/rules/react-native/coding-style.md +0 -71
- package/vendor/theus-arsenal/rules/react-native/hooks.md +0 -28
- package/vendor/theus-arsenal/rules/react-native/patterns.md +0 -88
- package/vendor/theus-arsenal/rules/react-native/performance.md +0 -45
- package/vendor/theus-arsenal/rules/react-native/production-readiness.md +0 -51
- package/vendor/theus-arsenal/rules/react-native/security.md +0 -43
- package/vendor/theus-arsenal/rules/react-native/testing.md +0 -52
- package/vendor/theus-arsenal/rules/ruby/coding-style.md +0 -46
- package/vendor/theus-arsenal/rules/ruby/hooks.md +0 -37
- package/vendor/theus-arsenal/rules/ruby/patterns.md +0 -44
- package/vendor/theus-arsenal/rules/ruby/security.md +0 -51
- package/vendor/theus-arsenal/rules/ruby/testing.md +0 -51
- package/vendor/theus-arsenal/rules/rust/coding-style.md +0 -151
- package/vendor/theus-arsenal/rules/rust/hooks.md +0 -16
- package/vendor/theus-arsenal/rules/rust/patterns.md +0 -168
- package/vendor/theus-arsenal/rules/rust/security.md +0 -141
- package/vendor/theus-arsenal/rules/rust/testing.md +0 -154
- package/vendor/theus-arsenal/rules/swift/coding-style.md +0 -47
- package/vendor/theus-arsenal/rules/swift/hooks.md +0 -20
- package/vendor/theus-arsenal/rules/swift/patterns.md +0 -66
- package/vendor/theus-arsenal/rules/swift/security.md +0 -33
- package/vendor/theus-arsenal/rules/swift/testing.md +0 -45
- package/vendor/theus-arsenal/rules/typescript/coding-style.md +0 -199
- package/vendor/theus-arsenal/rules/typescript/hooks.md +0 -22
- package/vendor/theus-arsenal/rules/typescript/patterns.md +0 -52
- package/vendor/theus-arsenal/rules/typescript/security.md +0 -28
- package/vendor/theus-arsenal/rules/typescript/testing.md +0 -18
- package/vendor/theus-arsenal/rules/vue/coding-style.md +0 -54
- package/vendor/theus-arsenal/rules/vue/hooks.md +0 -45
- package/vendor/theus-arsenal/rules/vue/patterns.md +0 -56
- package/vendor/theus-arsenal/rules/vue/security.md +0 -46
- package/vendor/theus-arsenal/rules/vue/testing.md +0 -53
- package/vendor/theus-arsenal/rules/web/coding-style.md +0 -108
- package/vendor/theus-arsenal/rules/web/design-quality.md +0 -75
- package/vendor/theus-arsenal/rules/web/hooks.md +0 -141
- package/vendor/theus-arsenal/rules/web/patterns.md +0 -91
- package/vendor/theus-arsenal/rules/web/performance.md +0 -76
- package/vendor/theus-arsenal/rules/web/security.md +0 -69
- package/vendor/theus-arsenal/rules/web/testing.md +0 -67
- package/vendor/theus-arsenal/scripts/hooks/bash-hook-dispatcher.js +0 -192
- package/vendor/theus-arsenal/scripts/hooks/block-no-verify.js +0 -556
- package/vendor/theus-arsenal/scripts/hooks/check-console-log.js +0 -92
- package/vendor/theus-arsenal/scripts/hooks/check-hook-enabled.js +0 -16
- package/vendor/theus-arsenal/scripts/hooks/config-protection.js +0 -171
- package/vendor/theus-arsenal/scripts/hooks/design-quality-check.js +0 -132
- package/vendor/theus-arsenal/scripts/hooks/doc-file-warning.js +0 -110
- package/vendor/theus-arsenal/scripts/hooks/modo-seguro.js +0 -158
- package/vendor/theus-arsenal/scripts/hooks/notificacion-escritorio.js +0 -208
- package/vendor/theus-arsenal/scripts/hooks/plugin-hook-bootstrap.js +0 -280
- package/vendor/theus-arsenal/scripts/hooks/post-bash-command-log.js +0 -87
- package/vendor/theus-arsenal/scripts/hooks/post-bash-dispatcher.js +0 -24
- package/vendor/theus-arsenal/scripts/hooks/post-bash-pr-created.js +0 -60
- package/vendor/theus-arsenal/scripts/hooks/post-edit-accumulator.js +0 -94
- package/vendor/theus-arsenal/scripts/hooks/post-edit-console-warn.js +0 -54
- package/vendor/theus-arsenal/scripts/hooks/post-edit-format.js +0 -110
- package/vendor/theus-arsenal/scripts/hooks/post-edit-typecheck.js +0 -98
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-commit-quality.js +0 -447
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-dev-server-block.js +0 -232
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-dispatcher.js +0 -27
- package/vendor/theus-arsenal/scripts/hooks/pre-compact.js +0 -101
- package/vendor/theus-arsenal/scripts/hooks/pretooluse-visible-output.js +0 -49
- package/vendor/theus-arsenal/scripts/hooks/quality-gate.js +0 -168
- package/vendor/theus-arsenal/scripts/hooks/run-with-flags.js +0 -271
- package/vendor/theus-arsenal/scripts/hooks/salud-mcp.js +0 -749
- package/vendor/theus-arsenal/scripts/hooks/seguimiento-costos.js +0 -161
- package/vendor/theus-arsenal/scripts/hooks/session-end.js +0 -340
- package/vendor/theus-arsenal/scripts/hooks/session-start.js +0 -906
- package/vendor/theus-arsenal/scripts/hooks/stop-format-typecheck.js +0 -263
- package/vendor/theus-arsenal/scripts/hooks/suggest-compact.js +0 -286
- package/vendor/theus-arsenal/scripts/hooks/theus-context-monitor.js +0 -289
- package/vendor/theus-arsenal/scripts/hooks/verificacion-factual.js +0 -1278
- package/vendor/theus-arsenal/scripts/lib/agent-data-home.js +0 -96
- package/vendor/theus-arsenal/scripts/lib/cost-estimate.js +0 -66
- package/vendor/theus-arsenal/scripts/lib/hook-flags.js +0 -79
- package/vendor/theus-arsenal/scripts/lib/llm-summary.js +0 -185
- package/vendor/theus-arsenal/scripts/lib/loopback-guard.js +0 -54
- package/vendor/theus-arsenal/scripts/lib/observer-sessions.js +0 -237
- package/vendor/theus-arsenal/scripts/lib/package-manager.d.ts +0 -120
- package/vendor/theus-arsenal/scripts/lib/package-manager.js +0 -434
- package/vendor/theus-arsenal/scripts/lib/path-safety.js +0 -86
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/markdown.js +0 -285
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/sdk.js +0 -238
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/server.js +0 -534
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/sessions.js +0 -274
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/ui.js +0 -546
- package/vendor/theus-arsenal/scripts/lib/project-detect.js +0 -451
- package/vendor/theus-arsenal/scripts/lib/resolve-formatter.js +0 -193
- package/vendor/theus-arsenal/scripts/lib/resolve-theus-root.js +0 -101
- package/vendor/theus-arsenal/scripts/lib/session-aliases.d.ts +0 -138
- package/vendor/theus-arsenal/scripts/lib/session-aliases.js +0 -483
- package/vendor/theus-arsenal/scripts/lib/session-bridge.js +0 -155
- package/vendor/theus-arsenal/scripts/lib/session-manager.d.ts +0 -137
- package/vendor/theus-arsenal/scripts/lib/session-manager.js +0 -555
- package/vendor/theus-arsenal/scripts/lib/shell-split.js +0 -86
- package/vendor/theus-arsenal/scripts/lib/shell-substitution.js +0 -501
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/dashboard.js +0 -414
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/health.js +0 -285
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/index.js +0 -22
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/provenance.js +0 -200
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/tracker.js +0 -157
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/versioning.js +0 -246
- package/vendor/theus-arsenal/scripts/lib/transcript-context.js +0 -232
- package/vendor/theus-arsenal/scripts/lib/utils.d.ts +0 -205
- package/vendor/theus-arsenal/scripts/lib/utils.js +0 -658
- package/vendor/theus-arsenal/scripts/plan-canvas.js +0 -341
- package/vendor/theus-arsenal/scripts/setup-package-manager.js +0 -46
- package/vendor/theus-arsenal/scripts/skills-health.js +0 -143
- package/vendor/theus-arsenal/skills/a11y-frontend/SKILL.md +0 -444
- package/vendor/theus-arsenal/skills/accesibilidad/SKILL.md +0 -144
- package/vendor/theus-arsenal/skills/acelerador-throughput-datos/SKILL.md +0 -72
- package/vendor/theus-arsenal/skills/agente-scraper-datos/SKILL.md +0 -771
- package/vendor/theus-arsenal/skills/analisis-plataformas-competencia/SKILL.md +0 -137
- package/vendor/theus-arsenal/skills/api-x/SKILL.md +0 -233
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/SKILL.md +0 -335
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/observer-loop.sh +0 -374
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/observer.md +0 -188
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/session-guardian.sh +0 -153
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/start-observer.sh +0 -253
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/config.json +0 -8
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/hooks/observe.sh +0 -594
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/detect-project.sh +0 -325
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/instinct-cli.py +0 -1918
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/lib/arsenal-dir.sh +0 -23
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/test_parse_instinct.py +0 -1420
- package/vendor/theus-arsenal/skills/arquitectura-hexagonal/SKILL.md +0 -275
- package/vendor/theus-arsenal/skills/arquitectura-limpia-android/SKILL.md +0 -340
- package/vendor/theus-arsenal/skills/arquitectura-pipelines-recomendacion/SKILL.md +0 -112
- package/vendor/theus-arsenal/skills/atlas-datos-prediccion/SKILL.md +0 -53
- package/vendor/theus-arsenal/skills/auditoria-arquitectura-agentes/SKILL.md +0 -257
- package/vendor/theus-arsenal/skills/auditoria-produccion/SKILL.md +0 -180
- package/vendor/theus-arsenal/skills/auditoria-rutas-clic/SKILL.md +0 -243
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/SKILL.md +0 -180
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/examples/high-score-example.md +0 -89
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/examples/low-score-example.md +0 -87
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/references/evaluation-criteria.md +0 -71
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/references/hook-integration.md +0 -90
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/scripts/evaluate.py +0 -409
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/templates/evaluation-report.md +0 -86
- package/vendor/theus-arsenal/skills/automatizacion-ssh-netmiko/SKILL.md +0 -176
- package/vendor/theus-arsenal/skills/base-datos-pubmed/SKILL.md +0 -174
- package/vendor/theus-arsenal/skills/base-datos-uspto/SKILL.md +0 -173
- package/vendor/theus-arsenal/skills/benchmark/SKILL.md +0 -92
- package/vendor/theus-arsenal/skills/bitacora-crecimiento/SKILL.md +0 -120
- package/vendor/theus-arsenal/skills/bucle-verificacion/SKILL.md +0 -125
- package/vendor/theus-arsenal/skills/buscar-primero/SKILL.md +0 -184
- package/vendor/theus-arsenal/skills/busqueda-exa/SKILL.md +0 -111
- package/vendor/theus-arsenal/skills/cache-por-hash/SKILL.md +0 -160
- package/vendor/theus-arsenal/skills/campana-marketing/SKILL.md +0 -118
- package/vendor/theus-arsenal/skills/capacidad-producto/SKILL.md +0 -138
- package/vendor/theus-arsenal/skills/cazador-vulnerabilidades/SKILL.md +0 -104
- package/vendor/theus-arsenal/skills/compactacion-estrategica/SKILL.md +0 -115
- package/vendor/theus-arsenal/skills/comparador-baskets-prediccion/SKILL.md +0 -69
- package/vendor/theus-arsenal/skills/compras-energia/SKILL.md +0 -206
- package/vendor/theus-arsenal/skills/concurrencia-swift-6-2/SKILL.md +0 -224
- package/vendor/theus-arsenal/skills/consejo/SKILL.md +0 -201
- package/vendor/theus-arsenal/skills/construccion-harness-agentes/SKILL.md +0 -78
- package/vendor/theus-arsenal/skills/constructor-conectores/SKILL.md +0 -119
- package/vendor/theus-arsenal/skills/constructor-equipos/SKILL.md +0 -169
- package/vendor/theus-arsenal/skills/consulta-documentacion/SKILL.md +0 -92
- package/vendor/theus-arsenal/skills/consultas-genomicas-gget/SKILL.md +0 -170
- package/vendor/theus-arsenal/skills/contacto-inversores/SKILL.md +0 -95
- package/vendor/theus-arsenal/skills/corrutinas-flows-kotlin/SKILL.md +0 -284
- package/vendor/theus-arsenal/skills/creacion-video-remotion/SKILL.md +0 -46
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/3d.md +0 -86
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/animations.md +0 -29
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/charts-bar-chart.tsx +0 -173
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/text-animations-typewriter.tsx +0 -100
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/text-animations-word-highlight.tsx +0 -108
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets.md +0 -78
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/audio.md +0 -172
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/calculate-metadata.md +0 -104
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/can-decode.md +0 -75
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/charts.md +0 -58
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/compositions.md +0 -146
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/display-captions.md +0 -126
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/extract-frames.md +0 -229
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/fonts.md +0 -152
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-audio-duration.md +0 -58
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-video-dimensions.md +0 -68
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-video-duration.md +0 -58
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/gifs.md +0 -138
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/images.md +0 -130
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/import-srt-captions.md +0 -67
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/lottie.md +0 -67
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/measuring-dom-nodes.md +0 -34
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/measuring-text.md +0 -143
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/sequencing.md +0 -106
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/tailwind.md +0 -11
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/text-animations.md +0 -20
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/timing.md +0 -179
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/transcribe-captions.md +0 -19
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/transitions.md +0 -122
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/trimming.md +0 -52
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/videos.md +0 -171
- package/vendor/theus-arsenal/skills/cumplimiento-aduanero/SKILL.md +0 -270
- package/vendor/theus-arsenal/skills/cumplimiento-hipaa/SKILL.md +0 -78
- package/vendor/theus-arsenal/skills/datos-sensibles-salud/SKILL.md +0 -149
- package/vendor/theus-arsenal/skills/decimales-tokens-evm/SKILL.md +0 -128
- package/vendor/theus-arsenal/skills/decisiones-arquitectura/SKILL.md +0 -206
- package/vendor/theus-arsenal/skills/demos-ui/SKILL.md +0 -469
- package/vendor/theus-arsenal/skills/desarrollo-por-intencion/SKILL.md +0 -369
- package/vendor/theus-arsenal/skills/descubrimiento-marca/SKILL.md +0 -149
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/10_proposito-porque.md +0 -42
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/20_posicionamiento.md +0 -47
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/30_audiencia-nicho.md +0 -53
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/40_personalidad-arquetipo.md +0 -61
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/50_voz-tono.md +0 -62
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/60_narrativa-historia.md +0 -54
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/70_tension-fundador.md +0 -50
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/90_SINTESIS.md +0 -133
- package/vendor/theus-arsenal/skills/descubrimiento-plugins-laravel/SKILL.md +0 -230
- package/vendor/theus-arsenal/skills/destilado-reglas/SKILL.md +0 -263
- package/vendor/theus-arsenal/skills/destilado-reglas/scripts/scan-rules.sh +0 -58
- package/vendor/theus-arsenal/skills/destilado-reglas/scripts/scan-skills.sh +0 -129
- package/vendor/theus-arsenal/skills/diagnostico-bgp/SKILL.md +0 -170
- package/vendor/theus-arsenal/skills/direccion-estetica/SKILL.md +0 -220
- package/vendor/theus-arsenal/skills/direccion-estetica/references/taxonomia-generos.md +0 -89
- package/vendor/theus-arsenal/skills/diseno-api/SKILL.md +0 -522
- package/vendor/theus-arsenal/skills/diseno-liquid-glass/SKILL.md +0 -282
- package/vendor/theus-arsenal/skills/e2e-escritorio-windows/SKILL.md +0 -879
- package/vendor/theus-arsenal/skills/edicion-video/SKILL.md +0 -289
- package/vendor/theus-arsenal/skills/enfoque-producto/SKILL.md +0 -91
- package/vendor/theus-arsenal/skills/entornos-flox/SKILL.md +0 -493
- package/vendor/theus-arsenal/skills/estandares-codigo/SKILL.md +0 -548
- package/vendor/theus-arsenal/skills/estandares-cpp/SKILL.md +0 -727
- package/vendor/theus-arsenal/skills/estandares-java/SKILL.md +0 -389
- package/vendor/theus-arsenal/skills/estilo-legado/SKILL.md +0 -149
- package/vendor/theus-arsenal/skills/estructura-informes-competencia/SKILL.md +0 -95
- package/vendor/theus-arsenal/skills/evaluacion-academica/SKILL.md +0 -165
- package/vendor/theus-arsenal/skills/explorador-skills/SKILL.md +0 -129
- package/vendor/theus-arsenal/skills/flujo-git/SKILL.md +0 -714
- package/vendor/theus-arsenal/skills/flujo-ingenieria-ml/SKILL.md +0 -343
- package/vendor/theus-arsenal/skills/flujo-tdd/SKILL.md +0 -584
- package/vendor/theus-arsenal/skills/forja-personas/SKILL.md +0 -298
- package/vendor/theus-arsenal/skills/forja-personas/gacha.py +0 -224
- package/vendor/theus-arsenal/skills/forja-personas/gacha.sh +0 -5
- package/vendor/theus-arsenal/skills/forja-personas/references/avatar-style.md +0 -123
- package/vendor/theus-arsenal/skills/forja-personas/references/boundary-rules.md +0 -53
- package/vendor/theus-arsenal/skills/forja-personas/references/error-handling.md +0 -53
- package/vendor/theus-arsenal/skills/forja-personas/references/identity-tension.md +0 -48
- package/vendor/theus-arsenal/skills/forja-personas/references/naming-system.md +0 -39
- package/vendor/theus-arsenal/skills/forja-personas/references/output-template.md +0 -166
- package/vendor/theus-arsenal/skills/fundamentos-animacion/SKILL.md +0 -296
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/SKILL.md +0 -156
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/scripts/generate_icons.swift +0 -258
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/scripts/iconify_gen.sh +0 -235
- package/vendor/theus-arsenal/skills/gestion-excepciones-logisticas/SKILL.md +0 -208
- package/vendor/theus-arsenal/skills/gestion-transportistas/SKILL.md +0 -204
- package/vendor/theus-arsenal/skills/guia-adopcion-ml/SKILL.md +0 -64
- package/vendor/theus-arsenal/skills/harness-agente-autonomo/SKILL.md +0 -252
- package/vendor/theus-arsenal/skills/harness-eval-clinico/SKILL.md +0 -212
- package/vendor/theus-arsenal/skills/harness-evaluacion/SKILL.md +0 -296
- package/vendor/theus-arsenal/skills/harness-generador-evaluador/SKILL.md +0 -254
- package/vendor/theus-arsenal/skills/homelab-diseno-red/SKILL.md +0 -120
- package/vendor/theus-arsenal/skills/homelab-dns-pihole/SKILL.md +0 -264
- package/vendor/theus-arsenal/skills/homelab-preparacion-red/SKILL.md +0 -144
- package/vendor/theus-arsenal/skills/homelab-segmentacion-vlan/SKILL.md +0 -307
- package/vendor/theus-arsenal/skills/homelab-vpn-wireguard/SKILL.md +0 -299
- package/vendor/theus-arsenal/skills/ingenieria-agentica/SKILL.md +0 -96
- package/vendor/theus-arsenal/skills/inspeccion-animaciones-blender/SKILL.md +0 -164
- package/vendor/theus-arsenal/skills/instaladores-python/SKILL.md +0 -820
- package/vendor/theus-arsenal/skills/integracion-jira/SKILL.md +0 -307
- package/vendor/theus-arsenal/skills/inteligencia-leads/SKILL.md +0 -312
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/agente-enriquecimiento.md +0 -87
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/mapeador-mutuos.md +0 -76
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/puntuador-senales.md +0 -60
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/redactor-outreach.md +0 -102
- package/vendor/theus-arsenal/skills/inteligencia-mercados-prediccion/SKILL.md +0 -53
- package/vendor/theus-arsenal/skills/introspeccion-agente/SKILL.md +0 -150
- package/vendor/theus-arsenal/skills/inventario-skills/SKILL.md +0 -194
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/quick-diff.sh +0 -87
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/save-results.sh +0 -57
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/scan.sh +0 -170
- package/vendor/theus-arsenal/skills/investigacion-mercado/SKILL.md +0 -87
- package/vendor/theus-arsenal/skills/investigacion-oraculos-prediccion/SKILL.md +0 -59
- package/vendor/theus-arsenal/skills/investigacion-profunda/SKILL.md +0 -161
- package/vendor/theus-arsenal/skills/keccak256-nodejs/SKILL.md +0 -100
- package/vendor/theus-arsenal/skills/libro-decisiones-recursivo/SKILL.md +0 -82
- package/vendor/theus-arsenal/skills/lienzo-planes/SKILL.md +0 -111
- package/vendor/theus-arsenal/skills/limpieza-configuracion/SKILL.md +0 -116
- package/vendor/theus-arsenal/skills/logistica-inversa-devoluciones/SKILL.md +0 -241
- package/vendor/theus-arsenal/skills/manejo-errores/SKILL.md +0 -375
- package/vendor/theus-arsenal/skills/materiales-inversores/SKILL.md +0 -101
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/SKILL.md +0 -170
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/forget.mjs +0 -44
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/info.mjs +0 -24
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/init.mjs +0 -152
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/list.mjs +0 -40
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/migrate.mjs +0 -214
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/resume.mjs +0 -36
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/save.mjs +0 -210
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/shared.mjs +0 -402
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/hooks/session-start.mjs +0 -238
- package/vendor/theus-arsenal/skills/metodologia-benchmarks/SKILL.md +0 -131
- package/vendor/theus-arsenal/skills/migraciones-bd/SKILL.md +0 -430
- package/vendor/theus-arsenal/skills/modelos-fundacionales-en-dispositivo/SKILL.md +0 -244
- package/vendor/theus-arsenal/skills/modo-seguro/SKILL.md +0 -86
- package/vendor/theus-arsenal/skills/motion-avanzado/SKILL.md +0 -592
- package/vendor/theus-arsenal/skills/motor-de-contenido/SKILL.md +0 -136
- package/vendor/theus-arsenal/skills/no-conformidades-calidad/SKILL.md +0 -249
- package/vendor/theus-arsenal/skills/onboarding-codigo/SKILL.md +0 -244
- package/vendor/theus-arsenal/skills/operaciones-agentes-empresariales/SKILL.md +0 -51
- package/vendor/theus-arsenal/skills/operaciones-conocimiento/SKILL.md +0 -159
- package/vendor/theus-arsenal/skills/operaciones-correo/SKILL.md +0 -123
- package/vendor/theus-arsenal/skills/operaciones-facturacion/SKILL.md +0 -142
- package/vendor/theus-arsenal/skills/operaciones-flujo-proyectos/SKILL.md +0 -110
- package/vendor/theus-arsenal/skills/operaciones-github/SKILL.md +0 -143
- package/vendor/theus-arsenal/skills/operaciones-google-workspace/SKILL.md +0 -100
- package/vendor/theus-arsenal/skills/operaciones-investigacion/SKILL.md +0 -124
- package/vendor/theus-arsenal/skills/operaciones-mensajes/SKILL.md +0 -103
- package/vendor/theus-arsenal/skills/operaciones-terminal/SKILL.md +0 -110
- package/vendor/theus-arsenal/skills/optimizacion-benchmark/SKILL.md +0 -70
- package/vendor/theus-arsenal/skills/optimizacion-costos-llm/SKILL.md +0 -182
- package/vendor/theus-arsenal/skills/optimizador-conexiones/SKILL.md +0 -191
- package/vendor/theus-arsenal/skills/optimizador-paralelismo/SKILL.md +0 -75
- package/vendor/theus-arsenal/skills/optimizador-prompts/SKILL.md +0 -374
- package/vendor/theus-arsenal/skills/orq-agregar-funcionalidad/SKILL.md +0 -37
- package/vendor/theus-arsenal/skills/orq-cambiar-funcionalidad/SKILL.md +0 -36
- package/vendor/theus-arsenal/skills/orq-construir-mvp/SKILL.md +0 -38
- package/vendor/theus-arsenal/skills/orq-corregir-defecto/SKILL.md +0 -36
- package/vendor/theus-arsenal/skills/orq-pipeline/SKILL.md +0 -134
- package/vendor/theus-arsenal/skills/orq-refinar-codigo/SKILL.md +0 -49
- package/vendor/theus-arsenal/skills/orquestacion-equipos-agentes/SKILL.md +0 -117
- package/vendor/theus-arsenal/skills/pagos-agentes-x402/SKILL.md +0 -237
- package/vendor/theus-arsenal/skills/patrones-angular/SKILL.md +0 -153
- package/vendor/theus-arsenal/skills/patrones-angular/references/angular-animations.md +0 -160
- package/vendor/theus-arsenal/skills/patrones-angular/references/angular-aria.md +0 -410
- package/vendor/theus-arsenal/skills/patrones-angular/references/cli.md +0 -86
- package/vendor/theus-arsenal/skills/patrones-angular/references/component-harnesses.md +0 -59
- package/vendor/theus-arsenal/skills/patrones-angular/references/component-styling.md +0 -91
- package/vendor/theus-arsenal/skills/patrones-angular/references/components.md +0 -117
- package/vendor/theus-arsenal/skills/patrones-angular/references/creating-services.md +0 -97
- package/vendor/theus-arsenal/skills/patrones-angular/references/data-resolvers.md +0 -69
- package/vendor/theus-arsenal/skills/patrones-angular/references/define-routes.md +0 -67
- package/vendor/theus-arsenal/skills/patrones-angular/references/defining-providers.md +0 -72
- package/vendor/theus-arsenal/skills/patrones-angular/references/di-fundamentals.md +0 -120
- package/vendor/theus-arsenal/skills/patrones-angular/references/e2e-testing.md +0 -56
- package/vendor/theus-arsenal/skills/patrones-angular/references/effects.md +0 -83
- package/vendor/theus-arsenal/skills/patrones-angular/references/hierarchical-injectors.md +0 -43
- package/vendor/theus-arsenal/skills/patrones-angular/references/host-elements.md +0 -80
- package/vendor/theus-arsenal/skills/patrones-angular/references/injection-context.md +0 -63
- package/vendor/theus-arsenal/skills/patrones-angular/references/inputs.md +0 -101
- package/vendor/theus-arsenal/skills/patrones-angular/references/linked-signal.md +0 -59
- package/vendor/theus-arsenal/skills/patrones-angular/references/loading-strategies.md +0 -61
- package/vendor/theus-arsenal/skills/patrones-angular/references/mcp.md +0 -67
- package/vendor/theus-arsenal/skills/patrones-angular/references/navigate-to-routes.md +0 -69
- package/vendor/theus-arsenal/skills/patrones-angular/references/outputs.md +0 -86
- package/vendor/theus-arsenal/skills/patrones-angular/references/reactive-forms.md +0 -122
- package/vendor/theus-arsenal/skills/patrones-angular/references/rendering-strategies.md +0 -44
- package/vendor/theus-arsenal/skills/patrones-angular/references/resource.md +0 -77
- package/vendor/theus-arsenal/skills/patrones-angular/references/route-animations.md +0 -56
- package/vendor/theus-arsenal/skills/patrones-angular/references/route-guards.md +0 -52
- package/vendor/theus-arsenal/skills/patrones-angular/references/router-lifecycle.md +0 -45
- package/vendor/theus-arsenal/skills/patrones-angular/references/router-testing.md +0 -87
- package/vendor/theus-arsenal/skills/patrones-angular/references/show-routes-with-outlets.md +0 -68
- package/vendor/theus-arsenal/skills/patrones-angular/references/signal-forms.md +0 -795
- package/vendor/theus-arsenal/skills/patrones-angular/references/signals-overview.md +0 -94
- package/vendor/theus-arsenal/skills/patrones-angular/references/tailwind-css.md +0 -69
- package/vendor/theus-arsenal/skills/patrones-angular/references/template-driven-forms.md +0 -114
- package/vendor/theus-arsenal/skills/patrones-angular/references/testing-fundamentals.md +0 -65
- package/vendor/theus-arsenal/skills/patrones-animacion/SKILL.md +0 -432
- package/vendor/theus-arsenal/skills/patrones-backend/SKILL.md +0 -560
- package/vendor/theus-arsenal/skills/patrones-cdss-clinico/SKILL.md +0 -249
- package/vendor/theus-arsenal/skills/patrones-cisco-ios/SKILL.md +0 -148
- package/vendor/theus-arsenal/skills/patrones-clickhouse/SKILL.md +0 -443
- package/vendor/theus-arsenal/skills/patrones-compose-multiplatform/SKILL.md +0 -298
- package/vendor/theus-arsenal/skills/patrones-dart-flutter/SKILL.md +0 -566
- package/vendor/theus-arsenal/skills/patrones-despliegue/SKILL.md +0 -426
- package/vendor/theus-arsenal/skills/patrones-django/SKILL.md +0 -739
- package/vendor/theus-arsenal/skills/patrones-django-celery/SKILL.md +0 -456
- package/vendor/theus-arsenal/skills/patrones-docker/SKILL.md +0 -363
- package/vendor/theus-arsenal/skills/patrones-dotnet/SKILL.md +0 -321
- package/vendor/theus-arsenal/skills/patrones-emr-clinico/SKILL.md +0 -168
- package/vendor/theus-arsenal/skills/patrones-fastapi/SKILL.md +0 -513
- package/vendor/theus-arsenal/skills/patrones-frontend/SKILL.md +0 -655
- package/vendor/theus-arsenal/skills/patrones-go/SKILL.md +0 -674
- package/vendor/theus-arsenal/skills/patrones-jpa/SKILL.md +0 -156
- package/vendor/theus-arsenal/skills/patrones-kotlin/SKILL.md +0 -717
- package/vendor/theus-arsenal/skills/patrones-kotlin-exposed/SKILL.md +0 -724
- package/vendor/theus-arsenal/skills/patrones-kotlin-ktor/SKILL.md +0 -694
- package/vendor/theus-arsenal/skills/patrones-kubernetes/SKILL.md +0 -754
- package/vendor/theus-arsenal/skills/patrones-laravel/SKILL.md +0 -414
- package/vendor/theus-arsenal/skills/patrones-mcp/SKILL.md +0 -66
- package/vendor/theus-arsenal/skills/patrones-mysql/SKILL.md +0 -420
- package/vendor/theus-arsenal/skills/patrones-nestjs/SKILL.md +0 -229
- package/vendor/theus-arsenal/skills/patrones-nextjs/SKILL.md +0 -56
- package/vendor/theus-arsenal/skills/patrones-nuxt4/SKILL.md +0 -99
- package/vendor/theus-arsenal/skills/patrones-perl/SKILL.md +0 -508
- package/vendor/theus-arsenal/skills/patrones-postgres/SKILL.md +0 -141
- package/vendor/theus-arsenal/skills/patrones-prisma/SKILL.md +0 -399
- package/vendor/theus-arsenal/skills/patrones-python/SKILL.md +0 -750
- package/vendor/theus-arsenal/skills/patrones-pytorch/SKILL.md +0 -400
- package/vendor/theus-arsenal/skills/patrones-quarkus/SKILL.md +0 -729
- package/vendor/theus-arsenal/skills/patrones-react/SKILL.md +0 -339
- package/vendor/theus-arsenal/skills/patrones-react-native/SKILL.md +0 -325
- package/vendor/theus-arsenal/skills/patrones-redis/SKILL.md +0 -401
- package/vendor/theus-arsenal/skills/patrones-rust/SKILL.md +0 -504
- package/vendor/theus-arsenal/skills/patrones-springboot/SKILL.md +0 -314
- package/vendor/theus-arsenal/skills/patrones-swiftui/SKILL.md +0 -261
- package/vendor/theus-arsenal/skills/patrones-tinystruct/SKILL.md +0 -281
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/architecture.md +0 -90
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/data-handling.md +0 -60
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/database.md +0 -99
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/routing.md +0 -64
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/system-usage.md +0 -97
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/testing.md +0 -72
- package/vendor/theus-arsenal/skills/patrones-vite/SKILL.md +0 -449
- package/vendor/theus-arsenal/skills/patrones-vue/SKILL.md +0 -469
- package/vendor/theus-arsenal/skills/persistencia-actores-swift/SKILL.md +0 -148
- package/vendor/theus-arsenal/skills/pipeline-opensource/SKILL.md +0 -254
- package/vendor/theus-arsenal/skills/planificacion-demanda-inventario/SKILL.md +0 -236
- package/vendor/theus-arsenal/skills/planificador-trades-prediccion/SKILL.md +0 -60
- package/vendor/theus-arsenal/skills/plano-tecnico/SKILL.md +0 -102
- package/vendor/theus-arsenal/skills/presentaciones-html/SKILL.md +0 -189
- package/vendor/theus-arsenal/skills/presentaciones-html/STYLE_PRESETS.md +0 -330
- package/vendor/theus-arsenal/skills/presentaciones-html/animation-patterns.md +0 -122
- package/vendor/theus-arsenal/skills/presentaciones-html/html-template.md +0 -419
- package/vendor/theus-arsenal/skills/presentaciones-html/scripts/export-pdf.sh +0 -418
- package/vendor/theus-arsenal/skills/presentaciones-html/scripts/extract-pptx.py +0 -96
- package/vendor/theus-arsenal/skills/presentaciones-html/viewport-base.css +0 -153
- package/vendor/theus-arsenal/skills/presupuesto-contexto/SKILL.md +0 -263
- package/vendor/theus-arsenal/skills/procesamiento-documentos-nutrient/SKILL.md +0 -168
- package/vendor/theus-arsenal/skills/programacion-produccion/SKILL.md +0 -220
- package/vendor/theus-arsenal/skills/publicacion-cruzada/SKILL.md +0 -117
- package/vendor/theus-arsenal/skills/publicador-social/SKILL.md +0 -121
- package/vendor/theus-arsenal/skills/puerta-de-entrega/SKILL.md +0 -164
- package/vendor/theus-arsenal/skills/puerta-de-entrega/hooks/puerta-entrega.py +0 -242
- package/vendor/theus-arsenal/skills/pulir-interfaces/SKILL.md +0 -126
- package/vendor/theus-arsenal/skills/qa-navegador/SKILL.md +0 -103
- package/vendor/theus-arsenal/skills/ranking-grafo-social/SKILL.md +0 -153
- package/vendor/theus-arsenal/skills/recuperacion-iterativa/SKILL.md +0 -236
- package/vendor/theus-arsenal/skills/redaccion-articulos/SKILL.md +0 -81
- package/vendor/theus-arsenal/skills/regex-vs-llm/SKILL.md +0 -221
- package/vendor/theus-arsenal/skills/regresion-codigo-ia/SKILL.md +0 -388
- package/vendor/theus-arsenal/skills/rendimiento-react/SKILL.md +0 -567
- package/vendor/theus-arsenal/skills/revision-codigo-flutter-dart/SKILL.md +0 -442
- package/vendor/theus-arsenal/skills/revision-literatura-cientifica/SKILL.md +0 -191
- package/vendor/theus-arsenal/skills/revision-multiperspectiva/SKILL.md +0 -302
- package/vendor/theus-arsenal/skills/revision-riesgo-prediccion/SKILL.md +0 -56
- package/vendor/theus-arsenal/skills/revision-seguridad/SKILL.md +0 -505
- package/vendor/theus-arsenal/skills/revision-seguridad/cloud-infrastructure-security.md +0 -361
- package/vendor/theus-arsenal/skills/runtime-bun/SKILL.md +0 -83
- package/vendor/theus-arsenal/skills/salud-codigo-codescene/SKILL.md +0 -163
- package/vendor/theus-arsenal/skills/salud-interfaces-red/SKILL.md +0 -143
- package/vendor/theus-arsenal/skills/seguimiento-costos/SKILL.md +0 -122
- package/vendor/theus-arsenal/skills/seguridad-agentes-trading/SKILL.md +0 -145
- package/vendor/theus-arsenal/skills/seguridad-amm-defi/SKILL.md +0 -166
- package/vendor/theus-arsenal/skills/seguridad-django/SKILL.md +0 -648
- package/vendor/theus-arsenal/skills/seguridad-laravel/SKILL.md +0 -945
- package/vendor/theus-arsenal/skills/seguridad-perl/SKILL.md +0 -507
- package/vendor/theus-arsenal/skills/seguridad-quarkus/SKILL.md +0 -474
- package/vendor/theus-arsenal/skills/seguridad-springboot/SKILL.md +0 -279
- package/vendor/theus-arsenal/skills/seo/SKILL.md +0 -166
- package/vendor/theus-arsenal/skills/sistema-diseno/SKILL.md +0 -81
- package/vendor/theus-arsenal/skills/sistema-operativo-agentico/SKILL.md +0 -375
- package/vendor/theus-arsenal/skills/sistemas-latencia-critica/SKILL.md +0 -65
- package/vendor/theus-arsenal/skills/tdd-django/SKILL.md +0 -735
- package/vendor/theus-arsenal/skills/tdd-laravel/SKILL.md +0 -673
- package/vendor/theus-arsenal/skills/tdd-quarkus/SKILL.md +0 -817
- package/vendor/theus-arsenal/skills/tdd-springboot/SKILL.md +0 -165
- package/vendor/theus-arsenal/skills/testing-cpp/SKILL.md +0 -328
- package/vendor/theus-arsenal/skills/testing-csharp/SKILL.md +0 -321
- package/vendor/theus-arsenal/skills/testing-e2e/SKILL.md +0 -325
- package/vendor/theus-arsenal/skills/testing-go/SKILL.md +0 -719
- package/vendor/theus-arsenal/skills/testing-kotlin/SKILL.md +0 -829
- package/vendor/theus-arsenal/skills/testing-perl/SKILL.md +0 -479
- package/vendor/theus-arsenal/skills/testing-protocolos-di-swift/SKILL.md +0 -196
- package/vendor/theus-arsenal/skills/testing-python/SKILL.md +0 -815
- package/vendor/theus-arsenal/skills/testing-react/SKILL.md +0 -421
- package/vendor/theus-arsenal/skills/testing-rust/SKILL.md +0 -506
- package/vendor/theus-arsenal/skills/tours-de-codigo/SKILL.md +0 -252
- package/vendor/theus-arsenal/skills/traduccion-documentos-visado/SKILL.md +0 -121
- package/vendor/theus-arsenal/skills/ui-a-vue/SKILL.md +0 -141
- package/vendor/theus-arsenal/skills/validacion-config-red/SKILL.md +0 -211
- package/vendor/theus-arsenal/skills/verificacion-django/SKILL.md +0 -470
- package/vendor/theus-arsenal/skills/verificacion-factual/SKILL.md +0 -142
- package/vendor/theus-arsenal/skills/verificacion-laravel/SKILL.md +0 -184
- package/vendor/theus-arsenal/skills/verificacion-quarkus/SKILL.md +0 -485
- package/vendor/theus-arsenal/skills/verificacion-springboot/SKILL.md +0 -237
- package/vendor/theus-arsenal/skills/videodb/SKILL.md +0 -374
- package/vendor/theus-arsenal/skills/videodb/reference/api-reference.md +0 -550
- package/vendor/theus-arsenal/skills/videodb/reference/capture-reference.md +0 -407
- package/vendor/theus-arsenal/skills/videodb/reference/capture.md +0 -101
- package/vendor/theus-arsenal/skills/videodb/reference/editor.md +0 -443
- package/vendor/theus-arsenal/skills/videodb/reference/generative.md +0 -331
- package/vendor/theus-arsenal/skills/videodb/reference/rtstream-reference.md +0 -564
- package/vendor/theus-arsenal/skills/videodb/reference/rtstream.md +0 -65
- package/vendor/theus-arsenal/skills/videodb/reference/search.md +0 -230
- package/vendor/theus-arsenal/skills/videodb/reference/streaming.md +0 -406
- package/vendor/theus-arsenal/skills/videodb/reference/use-cases.md +0 -118
- package/vendor/theus-arsenal/skills/videodb/scripts/ws_listener.py +0 -279
- package/vendor/theus-arsenal/skills/videos-manim/SKILL.md +0 -91
- package/vendor/theus-arsenal/skills/videos-manim/assets/network_graph_scene.py +0 -52
- package/vendor/theus-arsenal/skills/vigilancia-canary/SKILL.md +0 -108
- package/vendor/theus-arsenal/skills/voz-de-marca/SKILL.md +0 -106
|
@@ -1,479 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: testing-perl
|
|
3
|
-
description: Patrones de testing en Perl con Test2::V0, Test::More, el runner prove, mocking, cobertura con Devel::Cover y metodología TDD.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Patrones de testing en Perl
|
|
7
|
-
|
|
8
|
-
Estrategias de testing integrales para aplicaciones Perl usando Test2::V0, Test::More, prove y metodología TDD.
|
|
9
|
-
|
|
10
|
-
## Cuándo usarla
|
|
11
|
-
|
|
12
|
-
- Al escribir código Perl nuevo (sigue TDD: rojo, verde, refactor).
|
|
13
|
-
- Al diseñar suites de tests para módulos o aplicaciones Perl.
|
|
14
|
-
- Al revisar la cobertura de tests de código Perl.
|
|
15
|
-
- Al montar infraestructura de testing para Perl.
|
|
16
|
-
- Al migrar tests de Test::More a Test2::V0.
|
|
17
|
-
- Al depurar tests Perl que fallan.
|
|
18
|
-
|
|
19
|
-
## Flujo TDD
|
|
20
|
-
|
|
21
|
-
Sigue siempre el ciclo ROJO-VERDE-REFACTOR.
|
|
22
|
-
|
|
23
|
-
```perl
|
|
24
|
-
# Paso 1: ROJO — escribir un test que falle
|
|
25
|
-
# t/unit/calculator.t
|
|
26
|
-
use v5.36;
|
|
27
|
-
use Test2::V0;
|
|
28
|
-
|
|
29
|
-
use lib 'lib';
|
|
30
|
-
use Calculator;
|
|
31
|
-
|
|
32
|
-
subtest 'suma' => sub {
|
|
33
|
-
my $calc = Calculator->new;
|
|
34
|
-
is($calc->add(2, 3), 5, 'suma dos números');
|
|
35
|
-
is($calc->add(-1, 1), 0, 'maneja negativos');
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
done_testing;
|
|
39
|
-
|
|
40
|
-
# Paso 2: VERDE — escribir la implementación mínima
|
|
41
|
-
# lib/Calculator.pm
|
|
42
|
-
package Calculator;
|
|
43
|
-
use v5.36;
|
|
44
|
-
use Moo;
|
|
45
|
-
|
|
46
|
-
sub add($self, $a, $b) {
|
|
47
|
-
return $a + $b;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
1;
|
|
51
|
-
|
|
52
|
-
# Paso 3: REFACTOR — mejorar mientras los tests siguen en verde
|
|
53
|
-
# Ejecutar: prove -lv t/unit/calculator.t
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
## Fundamentos de Test::More
|
|
57
|
-
|
|
58
|
-
El módulo estándar de testing de Perl — muy usado, viene en el core.
|
|
59
|
-
|
|
60
|
-
### Aserciones básicas
|
|
61
|
-
|
|
62
|
-
```perl
|
|
63
|
-
use v5.36;
|
|
64
|
-
use Test::More;
|
|
65
|
-
|
|
66
|
-
# Plan por adelantado o done_testing
|
|
67
|
-
# plan tests => 5; # Plan fijo (opcional)
|
|
68
|
-
|
|
69
|
-
# Igualdad
|
|
70
|
-
is($result, 42, 'devuelve el valor correcto');
|
|
71
|
-
isnt($result, 0, 'distinto de cero');
|
|
72
|
-
|
|
73
|
-
# Booleanos
|
|
74
|
-
ok($user->is_active, 'el usuario está activo');
|
|
75
|
-
ok(!$user->is_banned, 'el usuario no está bloqueado');
|
|
76
|
-
|
|
77
|
-
# Comparación profunda
|
|
78
|
-
is_deeply(
|
|
79
|
-
$got,
|
|
80
|
-
{ name => 'Alice', roles => ['admin'] },
|
|
81
|
-
'devuelve la estructura esperada'
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
# Coincidencia de patrones
|
|
85
|
-
like($error, qr/not found/i, 'el error menciona "not found"');
|
|
86
|
-
unlike($output, qr/password/, 'la salida oculta la contraseña');
|
|
87
|
-
|
|
88
|
-
# Comprobación de tipo
|
|
89
|
-
isa_ok($obj, 'MyApp::User');
|
|
90
|
-
can_ok($obj, 'save', 'delete');
|
|
91
|
-
|
|
92
|
-
done_testing;
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
### SKIP y TODO
|
|
96
|
-
|
|
97
|
-
```perl
|
|
98
|
-
use v5.36;
|
|
99
|
-
use Test::More;
|
|
100
|
-
|
|
101
|
-
# Omitir tests condicionalmente
|
|
102
|
-
SKIP: {
|
|
103
|
-
skip 'Sin base de datos configurada', 2 unless $ENV{TEST_DB};
|
|
104
|
-
|
|
105
|
-
my $db = connect_db();
|
|
106
|
-
ok($db->ping, 'la base de datos responde');
|
|
107
|
-
is($db->version, '15', 'versión correcta de PostgreSQL');
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
# Marcar fallos esperados
|
|
111
|
-
TODO: {
|
|
112
|
-
local $TODO = 'La caché aún no está implementada';
|
|
113
|
-
is($cache->get('key'), 'value', 'la caché devuelve el valor');
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
done_testing;
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
## Test2::V0, el framework moderno
|
|
120
|
-
|
|
121
|
-
Test2::V0 es el reemplazo moderno de Test::More — aserciones más ricas, mejores diagnósticos y extensible.
|
|
122
|
-
|
|
123
|
-
### ¿Por qué Test2?
|
|
124
|
-
|
|
125
|
-
- Comparación profunda superior con builders de hash/array.
|
|
126
|
-
- Mejor salida de diagnóstico ante fallos.
|
|
127
|
-
- Subtests con un scoping más limpio.
|
|
128
|
-
- Extensible vía plugins Test2::Tools::*.
|
|
129
|
-
- Retrocompatible con tests de Test::More.
|
|
130
|
-
|
|
131
|
-
### Comparación profunda con builders
|
|
132
|
-
|
|
133
|
-
```perl
|
|
134
|
-
use v5.36;
|
|
135
|
-
use Test2::V0;
|
|
136
|
-
|
|
137
|
-
# Builder de hash — comprobar estructura parcial
|
|
138
|
-
is(
|
|
139
|
-
$user->to_hash,
|
|
140
|
-
hash {
|
|
141
|
-
field name => 'Alice';
|
|
142
|
-
field email => match(qr/\@example\.com$/);
|
|
143
|
-
field age => validator(sub { $_ >= 18 });
|
|
144
|
-
# Ignorar el resto de campos
|
|
145
|
-
etc();
|
|
146
|
-
},
|
|
147
|
-
'el usuario tiene los campos esperados'
|
|
148
|
-
);
|
|
149
|
-
|
|
150
|
-
# Builder de array
|
|
151
|
-
is(
|
|
152
|
-
$result,
|
|
153
|
-
array {
|
|
154
|
-
item 'first';
|
|
155
|
-
item match(qr/^second/);
|
|
156
|
-
item DNE(); # Does Not Exist — verificar que no hay elementos extra
|
|
157
|
-
},
|
|
158
|
-
'el resultado coincide con la lista esperada'
|
|
159
|
-
);
|
|
160
|
-
|
|
161
|
-
# Bag — comparación independiente del orden
|
|
162
|
-
is(
|
|
163
|
-
$tags,
|
|
164
|
-
bag {
|
|
165
|
-
item 'perl';
|
|
166
|
-
item 'testing';
|
|
167
|
-
item 'tdd';
|
|
168
|
-
},
|
|
169
|
-
'tiene todas las etiquetas requeridas sin importar el orden'
|
|
170
|
-
);
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
### Subtests
|
|
174
|
-
|
|
175
|
-
```perl
|
|
176
|
-
use v5.36;
|
|
177
|
-
use Test2::V0;
|
|
178
|
-
|
|
179
|
-
subtest 'Creación de usuario' => sub {
|
|
180
|
-
my $user = User->new(name => 'Alice', email => 'alice@example.com');
|
|
181
|
-
ok($user, 'objeto usuario creado');
|
|
182
|
-
is($user->name, 'Alice', 'el nombre está asignado');
|
|
183
|
-
is($user->email, 'alice@example.com', 'el correo está asignado');
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
subtest 'Validación de usuario' => sub {
|
|
187
|
-
my $warnings = warns {
|
|
188
|
-
User->new(name => '', email => 'bad');
|
|
189
|
-
};
|
|
190
|
-
ok($warnings, 'advierte ante datos inválidos');
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
done_testing;
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### Testing de excepciones con Test2
|
|
197
|
-
|
|
198
|
-
```perl
|
|
199
|
-
use v5.36;
|
|
200
|
-
use Test2::V0;
|
|
201
|
-
|
|
202
|
-
# Comprobar que el código muere
|
|
203
|
-
like(
|
|
204
|
-
dies { divide(10, 0) },
|
|
205
|
-
qr/División por cero/,
|
|
206
|
-
'muere al dividir por cero'
|
|
207
|
-
);
|
|
208
|
-
|
|
209
|
-
# Comprobar que el código sobrevive
|
|
210
|
-
ok(lives { divide(10, 2) }, 'la división tiene éxito') or note($@);
|
|
211
|
-
|
|
212
|
-
# Patrón combinado
|
|
213
|
-
subtest 'manejo de errores' => sub {
|
|
214
|
-
ok(lives { parse_config('valid.json') }, 'la config válida se parsea');
|
|
215
|
-
like(
|
|
216
|
-
dies { parse_config('missing.json') },
|
|
217
|
-
qr/Cannot open/,
|
|
218
|
-
'el archivo ausente muere con mensaje'
|
|
219
|
-
);
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
done_testing;
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
## Organización de tests y prove
|
|
226
|
-
|
|
227
|
-
### Estructura de directorios
|
|
228
|
-
|
|
229
|
-
```text
|
|
230
|
-
t/
|
|
231
|
-
├── 00-load.t # Verificar que los módulos compilan
|
|
232
|
-
├── 01-basic.t # Funcionalidad central
|
|
233
|
-
├── unit/
|
|
234
|
-
│ ├── config.t # Tests unitarios por módulo
|
|
235
|
-
│ ├── user.t
|
|
236
|
-
│ └── util.t
|
|
237
|
-
├── integration/
|
|
238
|
-
│ ├── database.t
|
|
239
|
-
│ └── api.t
|
|
240
|
-
├── lib/
|
|
241
|
-
│ └── TestHelper.pm # Utilidades de test compartidas
|
|
242
|
-
└── fixtures/
|
|
243
|
-
├── config.json # Archivos de datos de prueba
|
|
244
|
-
└── users.csv
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
### Comandos de prove
|
|
248
|
-
|
|
249
|
-
```bash
|
|
250
|
-
# Ejecutar todos los tests
|
|
251
|
-
prove -l t/
|
|
252
|
-
|
|
253
|
-
# Salida detallada
|
|
254
|
-
prove -lv t/
|
|
255
|
-
|
|
256
|
-
# Ejecutar un test concreto
|
|
257
|
-
prove -lv t/unit/user.t
|
|
258
|
-
|
|
259
|
-
# Búsqueda recursiva
|
|
260
|
-
prove -lr t/
|
|
261
|
-
|
|
262
|
-
# Ejecución en paralelo (8 jobs)
|
|
263
|
-
prove -lr -j8 t/
|
|
264
|
-
|
|
265
|
-
# Ejecutar solo los tests que fallaron en la última corrida
|
|
266
|
-
prove -l --state=failed t/
|
|
267
|
-
|
|
268
|
-
# Salida con color y cronómetro
|
|
269
|
-
prove -l --color --timer t/
|
|
270
|
-
|
|
271
|
-
# Salida TAP para CI
|
|
272
|
-
prove -l --formatter TAP::Formatter::JUnit t/ > results.xml
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
### Configuración .proverc
|
|
276
|
-
|
|
277
|
-
```text
|
|
278
|
-
-l
|
|
279
|
-
--color
|
|
280
|
-
--timer
|
|
281
|
-
-r
|
|
282
|
-
-j4
|
|
283
|
-
--state=save
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
## Fixtures y setup/teardown
|
|
287
|
-
|
|
288
|
-
### Aislamiento por subtest
|
|
289
|
-
|
|
290
|
-
```perl
|
|
291
|
-
use v5.36;
|
|
292
|
-
use Test2::V0;
|
|
293
|
-
use File::Temp qw(tempdir);
|
|
294
|
-
use Path::Tiny;
|
|
295
|
-
|
|
296
|
-
subtest 'procesamiento de archivos' => sub {
|
|
297
|
-
# Setup
|
|
298
|
-
my $dir = tempdir(CLEANUP => 1);
|
|
299
|
-
my $file = path($dir, 'input.txt');
|
|
300
|
-
$file->spew_utf8("linea1\nlinea2\nlinea3\n");
|
|
301
|
-
|
|
302
|
-
# Test
|
|
303
|
-
my $result = process_file("$file");
|
|
304
|
-
is($result->{line_count}, 3, 'cuenta las líneas');
|
|
305
|
-
|
|
306
|
-
# El teardown ocurre automáticamente (CLEANUP => 1)
|
|
307
|
-
};
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
### Helpers de test compartidos
|
|
311
|
-
|
|
312
|
-
Coloca los helpers reutilizables en `t/lib/TestHelper.pm` y cárgalos con `use lib 't/lib'`. Exporta funciones factoría como `create_test_db()`, `create_temp_dir()` y `fixture_path()` vía `Exporter`.
|
|
313
|
-
|
|
314
|
-
## Mocking
|
|
315
|
-
|
|
316
|
-
### Test::MockModule
|
|
317
|
-
|
|
318
|
-
```perl
|
|
319
|
-
use v5.36;
|
|
320
|
-
use Test2::V0;
|
|
321
|
-
use Test::MockModule;
|
|
322
|
-
|
|
323
|
-
subtest 'mock de una API externa' => sub {
|
|
324
|
-
my $mock = Test::MockModule->new('MyApp::API');
|
|
325
|
-
|
|
326
|
-
# Bien: el mock devuelve datos controlados
|
|
327
|
-
$mock->mock(fetch_user => sub ($self, $id) {
|
|
328
|
-
return { id => $id, name => 'Usuario Mock', email => 'mock@test.com' };
|
|
329
|
-
});
|
|
330
|
-
|
|
331
|
-
my $api = MyApp::API->new;
|
|
332
|
-
my $user = $api->fetch_user(42);
|
|
333
|
-
is($user->{name}, 'Usuario Mock', 'devuelve el usuario mockeado');
|
|
334
|
-
|
|
335
|
-
# Verificar el número de llamadas
|
|
336
|
-
my $call_count = 0;
|
|
337
|
-
$mock->mock(fetch_user => sub { $call_count++; return {} });
|
|
338
|
-
$api->fetch_user(1);
|
|
339
|
-
$api->fetch_user(2);
|
|
340
|
-
is($call_count, 2, 'fetch_user se llamó dos veces');
|
|
341
|
-
|
|
342
|
-
# El mock se restaura automáticamente cuando $mock sale de scope
|
|
343
|
-
};
|
|
344
|
-
|
|
345
|
-
# Mal: monkey-patching sin restauración
|
|
346
|
-
# *MyApp::API::fetch_user = sub { ... }; # NUNCA — se filtra entre tests
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
Para objetos mock ligeros, usa `Test::MockObject` para crear dobles de prueba inyectables con `->mock()` y verifica las llamadas con `->called_ok()`.
|
|
350
|
-
|
|
351
|
-
## Cobertura con Devel::Cover
|
|
352
|
-
|
|
353
|
-
### Ejecutar la cobertura
|
|
354
|
-
|
|
355
|
-
```bash
|
|
356
|
-
# Informe básico de cobertura
|
|
357
|
-
cover -test
|
|
358
|
-
|
|
359
|
-
# O paso a paso
|
|
360
|
-
perl -MDevel::Cover -Ilib t/unit/user.t
|
|
361
|
-
cover
|
|
362
|
-
|
|
363
|
-
# Informe HTML
|
|
364
|
-
cover -report html
|
|
365
|
-
open cover_db/coverage.html
|
|
366
|
-
|
|
367
|
-
# Umbrales específicos
|
|
368
|
-
cover -test -report text | grep 'Total'
|
|
369
|
-
|
|
370
|
-
# Amigable con CI: fallar por debajo del umbral
|
|
371
|
-
cover -test && cover -report text -select '^lib/' \
|
|
372
|
-
| perl -ne 'if (/Total.*?(\d+\.\d+)/) { exit 1 if $1 < 80 }'
|
|
373
|
-
```
|
|
374
|
-
|
|
375
|
-
### Testing de integración
|
|
376
|
-
|
|
377
|
-
Usa SQLite en memoria para los tests de base de datos y mockea HTTP::Tiny para los tests de API.
|
|
378
|
-
|
|
379
|
-
```perl
|
|
380
|
-
use v5.36;
|
|
381
|
-
use Test2::V0;
|
|
382
|
-
use DBI;
|
|
383
|
-
|
|
384
|
-
subtest 'integración con base de datos' => sub {
|
|
385
|
-
my $dbh = DBI->connect('dbi:SQLite:dbname=:memory:', '', '', {
|
|
386
|
-
RaiseError => 1,
|
|
387
|
-
});
|
|
388
|
-
$dbh->do('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)');
|
|
389
|
-
|
|
390
|
-
$dbh->prepare('INSERT INTO users (name) VALUES (?)')->execute('Alice');
|
|
391
|
-
my $row = $dbh->selectrow_hashref('SELECT * FROM users WHERE name = ?', undef, 'Alice');
|
|
392
|
-
is($row->{name}, 'Alice', 'usuario insertado y recuperado');
|
|
393
|
-
};
|
|
394
|
-
|
|
395
|
-
done_testing;
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
## Buenas prácticas
|
|
399
|
-
|
|
400
|
-
### SÍ
|
|
401
|
-
|
|
402
|
-
- **Sigue TDD**: escribe los tests antes de la implementación (rojo-verde-refactor).
|
|
403
|
-
- **Usa Test2::V0**: aserciones modernas, mejores diagnósticos.
|
|
404
|
-
- **Usa subtests**: agrupa aserciones relacionadas, aísla el estado.
|
|
405
|
-
- **Mockea las dependencias externas**: red, base de datos, sistema de archivos.
|
|
406
|
-
- **Usa `prove -l`**: incluye siempre lib/ en `@INC`.
|
|
407
|
-
- **Nombra los tests con claridad**: `'el login con contraseña inválida falla'`.
|
|
408
|
-
- **Prueba los casos límite**: strings vacíos, undef, cero, valores frontera.
|
|
409
|
-
- **Apunta a 80 %+ de cobertura**: céntrate en las rutas de lógica de negocio.
|
|
410
|
-
- **Mantén los tests rápidos**: mockea la E/S, usa bases de datos en memoria.
|
|
411
|
-
|
|
412
|
-
### NO
|
|
413
|
-
|
|
414
|
-
- **No pruebes la implementación**: prueba el comportamiento y la salida, no las tripas.
|
|
415
|
-
- **No compartas estado entre subtests**: cada subtest debe ser independiente.
|
|
416
|
-
- **No omitas `done_testing`**: garantiza que todos los tests planificados corrieron.
|
|
417
|
-
- **No sobre-mockees**: mockea solo las fronteras, no el código bajo prueba.
|
|
418
|
-
- **No uses `Test::More` en proyectos nuevos**: prefiere Test2::V0.
|
|
419
|
-
- **No ignores los fallos de tests**: todos deben pasar antes del merge.
|
|
420
|
-
- **No pruebes los módulos de CPAN**: confía en que las librerías funcionan.
|
|
421
|
-
- **No escribas tests frágiles**: evita coincidencias de string demasiado específicas.
|
|
422
|
-
|
|
423
|
-
## Referencia rápida
|
|
424
|
-
|
|
425
|
-
| Tarea | Comando / patrón |
|
|
426
|
-
|---|---|
|
|
427
|
-
| Ejecutar todos los tests | `prove -lr t/` |
|
|
428
|
-
| Ejecutar un test en detalle | `prove -lv t/unit/user.t` |
|
|
429
|
-
| Corrida en paralelo | `prove -lr -j8 t/` |
|
|
430
|
-
| Informe de cobertura | `cover -test && cover -report html` |
|
|
431
|
-
| Probar igualdad | `is($got, $expected, 'etiqueta')` |
|
|
432
|
-
| Comparación profunda | `is($got, hash { field k => 'v'; etc() }, 'etiqueta')` |
|
|
433
|
-
| Probar una excepción | `like(dies { ... }, qr/msg/, 'etiqueta')` |
|
|
434
|
-
| Probar que no hay excepción | `ok(lives { ... }, 'etiqueta')` |
|
|
435
|
-
| Mockear un método | `Test::MockModule->new('Pkg')->mock(m => sub { ... })` |
|
|
436
|
-
| Omitir tests | `SKIP: { skip 'motivo', $count unless $cond; ... }` |
|
|
437
|
-
| Tests TODO | `TODO: { local $TODO = 'motivo'; ... }` |
|
|
438
|
-
|
|
439
|
-
## Errores comunes
|
|
440
|
-
|
|
441
|
-
### Olvidar `done_testing`
|
|
442
|
-
|
|
443
|
-
```perl
|
|
444
|
-
# Mal: el archivo de test corre pero no verifica que todo se ejecutó
|
|
445
|
-
use Test2::V0;
|
|
446
|
-
is(1, 1, 'funciona');
|
|
447
|
-
# Falta done_testing — bugs silenciosos si se salta código de test
|
|
448
|
-
|
|
449
|
-
# Bien: termina siempre con done_testing
|
|
450
|
-
use Test2::V0;
|
|
451
|
-
is(1, 1, 'funciona');
|
|
452
|
-
done_testing;
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
### Olvidar el flag `-l`
|
|
456
|
-
|
|
457
|
-
```bash
|
|
458
|
-
# Mal: no se encuentran los módulos de lib/
|
|
459
|
-
prove t/unit/user.t
|
|
460
|
-
# Can't locate MyApp/User.pm in @INC
|
|
461
|
-
|
|
462
|
-
# Bien: incluir lib/ en @INC
|
|
463
|
-
prove -l t/unit/user.t
|
|
464
|
-
```
|
|
465
|
-
|
|
466
|
-
### Sobre-mockear
|
|
467
|
-
|
|
468
|
-
Mockea la *dependencia*, no el código bajo prueba. Si tu test solo verifica que un mock devuelve lo que le dijiste, no prueba nada.
|
|
469
|
-
|
|
470
|
-
### Contaminación entre tests
|
|
471
|
-
|
|
472
|
-
Usa variables `my` dentro de los subtests — nunca `our` — para evitar que el estado se filtre entre tests.
|
|
473
|
-
|
|
474
|
-
**Recuerda**: los tests son tu red de seguridad. Mantenlos rápidos, enfocados e independientes. Usa Test2::V0 para proyectos nuevos, prove para ejecutarlos y Devel::Cover para rendir cuentas.
|
|
475
|
-
|
|
476
|
-
## Skills relacionadas
|
|
477
|
-
|
|
478
|
-
- `patrones-perl`
|
|
479
|
-
- `seguridad-perl`
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: testing-protocolos-di-swift
|
|
3
|
-
description: Inyección de dependencias basada en protocolos para código Swift testeable — mocks de
|
|
4
|
-
sistema de archivos, red y APIs externas mediante protocolos pequeños y enfocados, con Swift Testing.
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Inyección de dependencias por protocolos para testing en Swift
|
|
8
|
-
|
|
9
|
-
Patrones para hacer testeable el código Swift abstrayendo las dependencias externas (sistema de archivos, red, iCloud) detrás de protocolos pequeños y enfocados. Permite tests deterministas sin I/O real.
|
|
10
|
-
|
|
11
|
-
## Cuándo usarla
|
|
12
|
-
|
|
13
|
-
- Al escribir código Swift que accede al sistema de archivos, la red o APIs externas.
|
|
14
|
-
- Cuando necesitas probar rutas de manejo de errores sin provocar fallos reales.
|
|
15
|
-
- Al construir módulos que funcionan en varios entornos (app, tests, previews de SwiftUI).
|
|
16
|
-
- Al diseñar arquitectura testeable con concurrencia de Swift (actores, Sendable).
|
|
17
|
-
|
|
18
|
-
## Patrón central
|
|
19
|
-
|
|
20
|
-
### 1. Define protocolos pequeños y enfocados
|
|
21
|
-
|
|
22
|
-
Cada protocolo cubre exactamente una preocupación externa.
|
|
23
|
-
|
|
24
|
-
```swift
|
|
25
|
-
// Acceso al sistema de archivos
|
|
26
|
-
public protocol FileSystemProviding: Sendable {
|
|
27
|
-
func containerURL(for purpose: Purpose) -> URL?
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Operaciones de lectura/escritura de archivos
|
|
31
|
-
public protocol FileAccessorProviding: Sendable {
|
|
32
|
-
func read(from url: URL) throws -> Data
|
|
33
|
-
func write(_ data: Data, to url: URL) throws
|
|
34
|
-
func fileExists(at url: URL) -> Bool
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Almacenamiento de bookmarks (p. ej., para apps con sandbox)
|
|
38
|
-
public protocol BookmarkStorageProviding: Sendable {
|
|
39
|
-
func saveBookmark(_ data: Data, for key: String) throws
|
|
40
|
-
func loadBookmark(for key: String) throws -> Data?
|
|
41
|
-
}
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### 2. Crea las implementaciones por defecto (producción)
|
|
45
|
-
|
|
46
|
-
```swift
|
|
47
|
-
public struct DefaultFileSystemProvider: FileSystemProviding {
|
|
48
|
-
public init() {}
|
|
49
|
-
|
|
50
|
-
public func containerURL(for purpose: Purpose) -> URL? {
|
|
51
|
-
FileManager.default.url(forUbiquityContainerIdentifier: nil)
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
public struct DefaultFileAccessor: FileAccessorProviding {
|
|
56
|
-
public init() {}
|
|
57
|
-
|
|
58
|
-
public func read(from url: URL) throws -> Data {
|
|
59
|
-
try Data(contentsOf: url)
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
public func write(_ data: Data, to url: URL) throws {
|
|
63
|
-
try data.write(to: url, options: .atomic)
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
public func fileExists(at url: URL) -> Bool {
|
|
67
|
-
FileManager.default.fileExists(atPath: url.path)
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### 3. Crea implementaciones mock para los tests
|
|
73
|
-
|
|
74
|
-
```swift
|
|
75
|
-
public final class MockFileAccessor: FileAccessorProviding, @unchecked Sendable {
|
|
76
|
-
public var files: [URL: Data] = [:]
|
|
77
|
-
public var readError: Error?
|
|
78
|
-
public var writeError: Error?
|
|
79
|
-
|
|
80
|
-
public init() {}
|
|
81
|
-
|
|
82
|
-
public func read(from url: URL) throws -> Data {
|
|
83
|
-
if let error = readError { throw error }
|
|
84
|
-
guard let data = files[url] else {
|
|
85
|
-
throw CocoaError(.fileReadNoSuchFile)
|
|
86
|
-
}
|
|
87
|
-
return data
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
public func write(_ data: Data, to url: URL) throws {
|
|
91
|
-
if let error = writeError { throw error }
|
|
92
|
-
files[url] = data
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
public func fileExists(at url: URL) -> Bool {
|
|
96
|
-
files[url] != nil
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### 4. Inyecta las dependencias con parámetros por defecto
|
|
102
|
-
|
|
103
|
-
El código de producción usa los defaults; los tests inyectan mocks.
|
|
104
|
-
|
|
105
|
-
```swift
|
|
106
|
-
public actor SyncManager {
|
|
107
|
-
private let fileSystem: FileSystemProviding
|
|
108
|
-
private let fileAccessor: FileAccessorProviding
|
|
109
|
-
|
|
110
|
-
public init(
|
|
111
|
-
fileSystem: FileSystemProviding = DefaultFileSystemProvider(),
|
|
112
|
-
fileAccessor: FileAccessorProviding = DefaultFileAccessor()
|
|
113
|
-
) {
|
|
114
|
-
self.fileSystem = fileSystem
|
|
115
|
-
self.fileAccessor = fileAccessor
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
public func sync() async throws {
|
|
119
|
-
guard let containerURL = fileSystem.containerURL(for: .sync) else {
|
|
120
|
-
throw SyncError.containerNotAvailable
|
|
121
|
-
}
|
|
122
|
-
let data = try fileAccessor.read(
|
|
123
|
-
from: containerURL.appendingPathComponent("data.json")
|
|
124
|
-
)
|
|
125
|
-
// Procesar los datos...
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### 5. Escribe los tests con Swift Testing
|
|
131
|
-
|
|
132
|
-
```swift
|
|
133
|
-
import Testing
|
|
134
|
-
|
|
135
|
-
@Test("El sync manager maneja un contenedor ausente")
|
|
136
|
-
func testMissingContainer() async {
|
|
137
|
-
let mockFileSystem = MockFileSystemProvider(containerURL: nil)
|
|
138
|
-
let manager = SyncManager(fileSystem: mockFileSystem)
|
|
139
|
-
|
|
140
|
-
await #expect(throws: SyncError.containerNotAvailable) {
|
|
141
|
-
try await manager.sync()
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
@Test("El sync manager lee los datos correctamente")
|
|
146
|
-
func testReadData() async throws {
|
|
147
|
-
let mockFileAccessor = MockFileAccessor()
|
|
148
|
-
mockFileAccessor.files[testURL] = testData
|
|
149
|
-
|
|
150
|
-
let manager = SyncManager(fileAccessor: mockFileAccessor)
|
|
151
|
-
let result = try await manager.loadData()
|
|
152
|
-
|
|
153
|
-
#expect(result == expectedData)
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
@Test("El sync manager maneja errores de lectura con gracia")
|
|
157
|
-
func testReadError() async {
|
|
158
|
-
let mockFileAccessor = MockFileAccessor()
|
|
159
|
-
mockFileAccessor.readError = CocoaError(.fileReadCorruptFile)
|
|
160
|
-
|
|
161
|
-
let manager = SyncManager(fileAccessor: mockFileAccessor)
|
|
162
|
-
|
|
163
|
-
await #expect(throws: SyncError.self) {
|
|
164
|
-
try await manager.sync()
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
## Buenas prácticas
|
|
170
|
-
|
|
171
|
-
- **Responsabilidad única**: cada protocolo debe cubrir una sola preocupación — no crees "protocolos dios" con muchos métodos.
|
|
172
|
-
- **Conformance a Sendable**: obligatoria cuando los protocolos cruzan fronteras de actor.
|
|
173
|
-
- **Parámetros por defecto**: deja que producción use las implementaciones reales por defecto; solo los tests especifican mocks.
|
|
174
|
-
- **Simulación de errores**: diseña los mocks con propiedades de error configurables para probar las rutas de fallo.
|
|
175
|
-
- **Solo mockea las fronteras**: mockea dependencias externas (sistema de archivos, red, APIs), no tipos internos.
|
|
176
|
-
|
|
177
|
-
## Antipatrones a evitar
|
|
178
|
-
|
|
179
|
-
- Crear un único protocolo grande que cubra todo el acceso externo.
|
|
180
|
-
- Mockear tipos internos que no tienen dependencias externas.
|
|
181
|
-
- Usar condicionales `#if DEBUG` en lugar de inyección de dependencias real.
|
|
182
|
-
- Olvidar la conformance a `Sendable` cuando se usa con actores.
|
|
183
|
-
- Sobreingeniería: si un tipo no tiene dependencias externas, no necesita un protocolo.
|
|
184
|
-
|
|
185
|
-
## Cuándo aplicarla
|
|
186
|
-
|
|
187
|
-
- Cualquier código Swift que toque el sistema de archivos, la red o APIs externas.
|
|
188
|
-
- Tests de rutas de error difíciles de provocar en entornos reales.
|
|
189
|
-
- Módulos que deben funcionar en contextos de app, tests y previews de SwiftUI.
|
|
190
|
-
- Apps con concurrencia de Swift (actores, concurrencia estructurada) que necesitan arquitectura testeable.
|
|
191
|
-
|
|
192
|
-
## Skills relacionadas
|
|
193
|
-
|
|
194
|
-
- `patrones-swiftui`
|
|
195
|
-
- `concurrencia-swift-6-2`
|
|
196
|
-
- `persistencia-actores-swift`
|