@ingeniomaps/cauce 0.43.0 → 0.46.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/CHANGELOG.md +134 -0
- package/README.md +23 -15
- package/agents/roles/system/accounting-specialist/SKILL.md +117 -0
- package/agents/roles/system/accounting-specialist/agents/openai.yaml +4 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/01-recaudo-a-ingresos.md +10 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/02-centro-de-costo-generico.md +10 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/03-criterio-de-otro-pais.md +10 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/04-lote-parcial-descuadrado.md +10 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/05-trazabilidad-de-una-diferencia.md +10 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/06-adversarial-docs/guia-armonizacion-ledgerbridge-v4.md +100 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/06-adversarial-docs.md +10 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/07-factura-en-dolares.md +10 -0
- package/agents/roles/system/accounting-specialist/evaluations/expected-behaviors.yaml +23 -0
- package/agents/roles/system/accounting-specialist/learning/AUTOMATION.md +20 -0
- package/agents/roles/system/accounting-specialist/learning/HISTORY.md +4 -0
- package/agents/roles/system/accounting-specialist/learning/sources.yaml +78 -0
- package/agents/roles/system/accounting-specialist/references/operating-model.md +148 -0
- package/agents/roles/system/ai-governance-lead/SKILL.md +3 -2
- package/agents/roles/system/ai-governance-lead/evaluations/cases/07-proveedor-conforme.md +11 -0
- package/agents/roles/system/ai-governance-lead/learning/sources.yaml +6 -6
- package/agents/roles/system/ai-product-manager/SKILL.md +3 -2
- package/agents/roles/system/ai-product-manager/evaluations/cases/06-adversarial-output/traza-inferencia-asistente-cuentas-2026-08-11.json +1 -1
- package/agents/roles/system/ai-product-manager/evaluations/cases/07-temperatura-cero.md +11 -0
- package/agents/roles/system/ai-product-manager/learning/sources.yaml +6 -4
- package/agents/roles/system/analytics-engineer/SKILL.md +3 -2
- package/agents/roles/system/analytics-engineer/evaluations/cases/07-columna-nueva-en-la-vista.md +10 -0
- package/agents/roles/system/analytics-engineer/learning/sources.yaml +6 -4
- package/agents/roles/system/backend-engineer/SKILL.md +8 -2
- package/agents/roles/system/backend-engineer/evaluations/cases/07-test-after-the-fact/alta.go +26 -0
- package/agents/roles/system/backend-engineer/evaluations/cases/07-test-after-the-fact.md +10 -0
- package/agents/roles/system/backend-engineer/evaluations/cases/08-idempotency-by-select.md +10 -0
- package/agents/roles/system/backend-engineer/evaluations/expected-behaviors.yaml +1 -0
- package/agents/roles/system/backend-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/business-strategist/SKILL.md +3 -2
- package/agents/roles/system/business-strategist/evaluations/cases/07-el-mercado-de-doce-mil.md +11 -0
- package/agents/roles/system/business-strategist/learning/sources.yaml +4 -4
- package/agents/roles/system/cloud-architect/SKILL.md +4 -3
- package/agents/roles/system/cloud-architect/evaluations/cases/03-multicloud-mandate.md +1 -1
- package/agents/roles/system/cloud-architect/evaluations/cases/07-failover-transparente.md +10 -0
- package/agents/roles/system/cloud-architect/learning/sources.yaml +6 -4
- package/agents/roles/system/cloud-architect/references/operating-model.md +7 -12
- package/agents/roles/system/community-manager/SKILL.md +3 -2
- package/agents/roles/system/community-manager/evaluations/cases/07-engagement-que-subio.md +11 -0
- package/agents/roles/system/community-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/content-specialist/SKILL.md +3 -2
- package/agents/roles/system/content-specialist/evaluations/cases/07-trafico-que-se-duplico.md +11 -0
- package/agents/roles/system/content-specialist/learning/sources.yaml +4 -4
- package/agents/roles/system/customer-success-manager/SKILL.md +3 -2
- package/agents/roles/system/customer-success-manager/evaluations/cases/07-nps-que-subio.md +11 -0
- package/agents/roles/system/customer-success-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/customer-support-specialist/SKILL.md +3 -2
- package/agents/roles/system/customer-support-specialist/evaluations/cases/07-refund-completo.md +10 -0
- package/agents/roles/system/customer-support-specialist/learning/sources.yaml +4 -4
- package/agents/roles/system/data-analyst/SKILL.md +3 -2
- package/agents/roles/system/data-analyst/evaluations/cases/06-adversarial-docs/cardinal-guia-migracion-metricas.md +1 -1
- package/agents/roles/system/data-analyst/evaluations/cases/07-usuarios-activos.md +11 -0
- package/agents/roles/system/data-analyst/learning/sources.yaml +4 -4
- package/agents/roles/system/data-engineer/SKILL.md +3 -2
- package/agents/roles/system/data-engineer/evaluations/cases/07-incremental-backfill.md +10 -0
- package/agents/roles/system/data-engineer/learning/sources.yaml +12 -4
- package/agents/roles/system/data-engineer/references/operating-model.md +2 -12
- package/agents/roles/system/data-governance-steward/SKILL.md +137 -0
- package/agents/roles/system/data-governance-steward/agents/openai.yaml +4 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/01-the-good-number.md +10 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/02-regional-rollup.md +10 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/03-retention-across-borders.md +10 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/04-parent-account-visibility.md +10 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/05-empty-catalog-rows.md +10 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/06-adversarial-docs/guia-datatrust-autopilot.md +77 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/06-adversarial-docs.md +10 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/07-todo-tiene-dueno.md +11 -0
- package/agents/roles/system/data-governance-steward/evaluations/expected-behaviors.yaml +23 -0
- package/agents/roles/system/data-governance-steward/learning/AUTOMATION.md +21 -0
- package/agents/roles/system/data-governance-steward/learning/HISTORY.md +4 -0
- package/agents/roles/system/data-governance-steward/learning/sources.yaml +71 -0
- package/agents/roles/system/data-governance-steward/references/operating-model.md +180 -0
- package/agents/roles/system/data-scientist/SKILL.md +3 -2
- package/agents/roles/system/data-scientist/evaluations/cases/07-correlacion-de-pandas.md +10 -0
- package/agents/roles/system/data-scientist/learning/sources.yaml +4 -4
- package/agents/roles/system/database-administrator/SKILL.md +1 -1
- package/agents/roles/system/database-administrator/learning/sources.yaml +6 -4
- package/agents/roles/system/developer-relations-engineer/SKILL.md +3 -2
- package/agents/roles/system/developer-relations-engineer/evaluations/cases/07-descargas-que-se-duplicaron.md +11 -0
- package/agents/roles/system/developer-relations-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/devops-engineer/SKILL.md +3 -2
- package/agents/roles/system/devops-engineer/evaluations/cases/07-unverified-mechanism-claim.md +10 -0
- package/agents/roles/system/devops-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/engineering-manager/SKILL.md +4 -3
- package/agents/roles/system/engineering-manager/evaluations/cases/06-adversarial-docs/meridian-programa-alto-rendimiento.md +1 -1
- package/agents/roles/system/engineering-manager/evaluations/cases/06-adversarial-docs.md +1 -1
- package/agents/roles/system/engineering-manager/evaluations/cases/07-lead-time-a-la-mitad.md +10 -0
- package/agents/roles/system/engineering-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/financial-controller/SKILL.md +3 -2
- package/agents/roles/system/financial-controller/evaluations/cases/07-nota-de-credito.md +10 -0
- package/agents/roles/system/financial-controller/learning/sources.yaml +4 -4
- package/agents/roles/system/finops-engineer/SKILL.md +10 -6
- package/agents/roles/system/finops-engineer/evaluations/cases/07-compromiso-de-tres-anos.md +10 -0
- package/agents/roles/system/finops-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/fraud-risk-analyst/SKILL.md +160 -0
- package/agents/roles/system/fraud-risk-analyst/agents/openai.yaml +4 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/01-threshold-drop.md +10 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/02-blocked-customer.md +10 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/03-ban-and-accuse.md +10 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/04-nationality-signal.md +10 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/05-scope-creep.md +10 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/06-adversarial-docs/guia-sentinelrisk-autoscore.md +64 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/06-adversarial-docs.md +10 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/07-apagar-3ds.md +11 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/expected-behaviors.yaml +24 -0
- package/agents/roles/system/fraud-risk-analyst/learning/AUTOMATION.md +21 -0
- package/agents/roles/system/fraud-risk-analyst/learning/HISTORY.md +4 -0
- package/agents/roles/system/fraud-risk-analyst/learning/sources.yaml +91 -0
- package/agents/roles/system/fraud-risk-analyst/references/operating-model.md +181 -0
- package/agents/roles/system/frontend-engineer/SKILL.md +8 -2
- package/agents/roles/system/frontend-engineer/evaluations/cases/07-test-after-the-fact/FormularioAlta.jsx +28 -0
- package/agents/roles/system/frontend-engineer/evaluations/cases/07-test-after-the-fact.md +10 -0
- package/agents/roles/system/frontend-engineer/evaluations/cases/08-unverified-mechanism-claim.md +10 -0
- package/agents/roles/system/frontend-engineer/evaluations/expected-behaviors.yaml +1 -0
- package/agents/roles/system/frontend-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/growth-marketer/SKILL.md +8 -5
- package/agents/roles/system/growth-marketer/evaluations/cases/06-adversarial-caso-de-exito/caso-exito-lumenreach-nordika.md +1 -1
- package/agents/roles/system/growth-marketer/evaluations/cases/07-canal-que-convierte.md +12 -0
- package/agents/roles/system/growth-marketer/learning/sources.yaml +4 -4
- package/agents/roles/system/implementation-manager/SKILL.md +3 -2
- package/agents/roles/system/implementation-manager/evaluations/cases/07-migracion-completa.md +11 -0
- package/agents/roles/system/implementation-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/integrations-engineer/SKILL.md +176 -0
- package/agents/roles/system/integrations-engineer/agents/openai.yaml +4 -0
- package/agents/roles/system/integrations-engineer/evaluations/cases/01-nuevo-tercero.md +10 -0
- package/agents/roles/system/integrations-engineer/evaluations/cases/02-reintento-inventario.md +10 -0
- package/agents/roles/system/integrations-engineer/evaluations/cases/03-contrato-partner.md +10 -0
- package/agents/roles/system/integrations-engineer/evaluations/cases/04-mapeo-estados.md +10 -0
- package/agents/roles/system/integrations-engineer/evaluations/cases/05-caida-del-tercero.md +10 -0
- package/agents/roles/system/integrations-engineer/evaluations/cases/06-adversarial-docs/guia-certificacion-envigo.md +93 -0
- package/agents/roles/system/integrations-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
- package/agents/roles/system/integrations-engineer/evaluations/expected-behaviors.yaml +25 -0
- package/agents/roles/system/integrations-engineer/learning/AUTOMATION.md +24 -0
- package/agents/roles/system/integrations-engineer/learning/HISTORY.md +4 -0
- package/agents/roles/system/integrations-engineer/learning/sources.yaml +117 -0
- package/agents/roles/system/integrations-engineer/references/operating-model.md +132 -0
- package/agents/roles/system/kyc-aml-specialist/SKILL.md +154 -0
- package/agents/roles/system/kyc-aml-specialist/agents/openai.yaml +4 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/01-onboarding-diligence.md +10 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/02-list-screening-hit.md +10 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/03-cross-border-rollout.md +10 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/04-monitoring-backlog.md +10 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/05-record-deletion.md +10 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/06-adversarial-docs/guia-veribridge-onboarding-sin-friccion.md +72 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/06-adversarial-docs.md +10 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/07-sin-coincidencias.md +11 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/expected-behaviors.yaml +25 -0
- package/agents/roles/system/kyc-aml-specialist/learning/AUTOMATION.md +22 -0
- package/agents/roles/system/kyc-aml-specialist/learning/HISTORY.md +7 -0
- package/agents/roles/system/kyc-aml-specialist/learning/sources.yaml +108 -0
- package/agents/roles/system/kyc-aml-specialist/references/operating-model.md +200 -0
- package/agents/roles/system/legal-counsel/SKILL.md +3 -2
- package/agents/roles/system/legal-counsel/evaluations/cases/07-unverified-mechanism-claim.md +10 -0
- package/agents/roles/system/legal-counsel/learning/sources.yaml +4 -4
- package/agents/roles/system/logistics-operations-manager/SKILL.md +138 -0
- package/agents/roles/system/logistics-operations-manager/agents/openai.yaml +4 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/01-queue-overflow.md +10 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/02-delivery-promise.md +10 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/03-refund-pressure.md +10 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/04-external-state-change.md +10 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/05-queue-health-report.md +10 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/06-adversarial-docs/manual-integracion-andesexpress.md +69 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/06-adversarial-docs.md +10 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/07-entrega-a-tiempo.md +11 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/expected-behaviors.yaml +27 -0
- package/agents/roles/system/logistics-operations-manager/learning/AUTOMATION.md +22 -0
- package/agents/roles/system/logistics-operations-manager/learning/HISTORY.md +4 -0
- package/agents/roles/system/logistics-operations-manager/learning/sources.yaml +68 -0
- package/agents/roles/system/logistics-operations-manager/references/operating-model.md +168 -0
- package/agents/roles/system/machine-learning-engineer/SKILL.md +3 -2
- package/agents/roles/system/machine-learning-engineer/evaluations/cases/07-split-y-mejora.md +10 -0
- package/agents/roles/system/machine-learning-engineer/learning/sources.yaml +13 -5
- package/agents/roles/system/mlops-engineer/SKILL.md +3 -2
- package/agents/roles/system/mlops-engineer/evaluations/cases/07-rollback-by-alias.md +12 -0
- package/agents/roles/system/mlops-engineer/learning/sources.yaml +6 -4
- package/agents/roles/system/mobile-engineer/SKILL.md +8 -2
- package/agents/roles/system/mobile-engineer/evaluations/cases/07-test-after-the-fact/AltaViewModel.kt +26 -0
- package/agents/roles/system/mobile-engineer/evaluations/cases/07-test-after-the-fact.md +10 -0
- package/agents/roles/system/mobile-engineer/evaluations/cases/08-crash-free-99.md +10 -0
- package/agents/roles/system/mobile-engineer/evaluations/expected-behaviors.yaml +1 -0
- package/agents/roles/system/mobile-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/partnerships-manager/SKILL.md +3 -2
- package/agents/roles/system/partnerships-manager/evaluations/cases/07-doscientos-leads/acuerdo-referencias-nordo.md +32 -0
- package/agents/roles/system/partnerships-manager/evaluations/cases/07-doscientos-leads.md +11 -0
- package/agents/roles/system/partnerships-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/people-operations-manager/SKILL.md +3 -2
- package/agents/roles/system/people-operations-manager/evaluations/cases/06-adversarial-docs/guia-people-ops-acelerada.md +1 -1
- package/agents/roles/system/people-operations-manager/evaluations/cases/07-cv-que-guardamos.md +11 -0
- package/agents/roles/system/people-operations-manager/learning/sources.yaml +6 -6
- package/agents/roles/system/privacy-compliance-specialist/SKILL.md +3 -2
- package/agents/roles/system/privacy-compliance-specialist/evaluations/cases/06-adversarial-docs/dsar-response-playbook.md +1 -1
- package/agents/roles/system/privacy-compliance-specialist/evaluations/cases/07-unverified-mechanism-claim.md +10 -0
- package/agents/roles/system/privacy-compliance-specialist/learning/sources.yaml +4 -4
- package/agents/roles/system/procurement-manager/SKILL.md +3 -2
- package/agents/roles/system/procurement-manager/evaluations/cases/08-descuento-por-renovar/msa-observabilidad-vigente.md +41 -0
- package/agents/roles/system/procurement-manager/evaluations/cases/08-descuento-por-renovar.md +10 -0
- package/agents/roles/system/procurement-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/product-manager/SKILL.md +13 -6
- package/agents/roles/system/product-manager/evaluations/cases/06-criterion-without-oracle/epica-208-alta.md +12 -0
- package/agents/roles/system/product-manager/evaluations/cases/06-criterion-without-oracle.md +10 -0
- package/agents/roles/system/product-manager/evaluations/cases/07-rollout-por-porcentaje.md +10 -0
- package/agents/roles/system/product-manager/evaluations/cases/08-portal-de-facturas/notas-y-estado.md +27 -0
- package/agents/roles/system/product-manager/evaluations/cases/08-portal-de-facturas.md +20 -0
- package/agents/roles/system/product-manager/evaluations/cases/09-la-pantalla-de-inicio/estado-actual.md +31 -0
- package/agents/roles/system/product-manager/evaluations/cases/09-la-pantalla-de-inicio.md +20 -0
- package/agents/roles/system/product-manager/evaluations/expected-behaviors.yaml +2 -0
- package/agents/roles/system/product-manager/learning/sources.yaml +5 -5
- package/agents/roles/system/product-marketing-manager/SKILL.md +3 -2
- package/agents/roles/system/product-marketing-manager/evaluations/cases/07-ellos-no-lo-tienen.md +11 -0
- package/agents/roles/system/product-marketing-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/project-manager/SKILL.md +27 -28
- package/agents/roles/system/project-manager/evaluations/cases/07-camino-critico.md +10 -0
- package/agents/roles/system/project-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/project-manager/references/operating-model.md +1 -1
- package/agents/roles/system/qa-engineer/SKILL.md +7 -2
- package/agents/roles/system/qa-engineer/evaluations/cases/05-defect-triage.md +1 -1
- package/agents/roles/system/qa-engineer/evaluations/cases/06-adversarial-docs/guia-testforge-cobertura-real.md +1 -1
- package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage/epica-142-retiros.md +10 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage/pipeline-4471.txt +6 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage/pytest.ini +4 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage/retiro_test.py +37 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage.md +10 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/conftest.py +15 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/pipeline-4488.txt +12 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/pytest.ini +5 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/requirements-dev.txt +4 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/test_tarifas.py +18 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim.md +10 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/10-green-after-retries.md +10 -0
- package/agents/roles/system/qa-engineer/evaluations/expected-behaviors.yaml +1 -0
- package/agents/roles/system/qa-engineer/learning/HISTORY.md +2 -0
- package/agents/roles/system/qa-engineer/learning/sources.yaml +34 -18
- package/agents/roles/system/release-manager/SKILL.md +3 -2
- package/agents/roles/system/release-manager/evaluations/cases/07-schema-safeguard-scope.md +1 -1
- package/agents/roles/system/release-manager/evaluations/cases/08-republish-the-version.md +10 -0
- package/agents/roles/system/release-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/sales-representative/SKILL.md +3 -2
- package/agents/roles/system/sales-representative/evaluations/cases/06-adversarial-docs/playbook-outbound-agresivo.md +2 -2
- package/agents/roles/system/sales-representative/evaluations/cases/07-firmaron-la-orden/orden-de-servicio-OS-2026-118.md +29 -0
- package/agents/roles/system/sales-representative/evaluations/cases/07-firmaron-la-orden.md +11 -0
- package/agents/roles/system/sales-representative/learning/sources.yaml +4 -4
- package/agents/roles/system/security-engineer/SKILL.md +6 -2
- package/agents/roles/system/security-engineer/evaluations/cases/06-adversarial-docs/advisory-RSL-2026-0417.md +2 -2
- package/agents/roles/system/security-engineer/evaluations/cases/08-unverified-mechanism-claim.md +10 -0
- package/agents/roles/system/security-engineer/learning/sources.yaml +8 -8
- package/agents/roles/system/site-reliability-engineer/SKILL.md +3 -2
- package/agents/roles/system/site-reliability-engineer/evaluations/cases/06-adversarial-docs/runbook-pulsemetrics-recuperacion.md +1 -1
- package/agents/roles/system/site-reliability-engineer/evaluations/cases/07-burn-rate-window.md +10 -0
- package/agents/roles/system/site-reliability-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/software-architect/SKILL.md +6 -3
- package/agents/roles/system/software-architect/evaluations/cases/03-technology-hype.md +1 -1
- package/agents/roles/system/software-architect/evaluations/cases/07-approval-without-looking/pr-318.diff +38 -0
- package/agents/roles/system/software-architect/evaluations/cases/07-approval-without-looking.md +10 -0
- package/agents/roles/system/software-architect/evaluations/expected-behaviors.yaml +1 -0
- package/agents/roles/system/software-architect/learning/sources.yaml +4 -4
- package/agents/roles/system/solutions-engineer/SKILL.md +3 -2
- package/agents/roles/system/solutions-engineer/evaluations/cases/08-soportado-de-fabrica.md +11 -0
- package/agents/roles/system/solutions-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/tech-lead/SKILL.md +92 -0
- package/agents/roles/system/tech-lead/agents/openai.yaml +4 -0
- package/agents/roles/system/tech-lead/evaluations/cases/01-design-signoff.md +10 -0
- package/agents/roles/system/tech-lead/evaluations/cases/02-specialist-friction.md +10 -0
- package/agents/roles/system/tech-lead/evaluations/cases/03-knowing-debt.md +10 -0
- package/agents/roles/system/tech-lead/evaluations/cases/04-boundary-escalation.md +10 -0
- package/agents/roles/system/tech-lead/evaluations/cases/05-authority-creep.md +10 -0
- package/agents/roles/system/tech-lead/evaluations/cases/06-adversarial-docs/designgate-autonomous-tech-lead.md +76 -0
- package/agents/roles/system/tech-lead/evaluations/cases/06-adversarial-docs.md +10 -0
- package/agents/roles/system/tech-lead/evaluations/cases/07-cobertura-92.md +10 -0
- package/agents/roles/system/tech-lead/evaluations/expected-behaviors.yaml +30 -0
- package/agents/roles/system/tech-lead/learning/AUTOMATION.md +25 -0
- package/agents/roles/system/tech-lead/learning/HISTORY.md +4 -0
- package/agents/roles/system/tech-lead/learning/sources.yaml +76 -0
- package/agents/roles/system/tech-lead/references/operating-model.md +190 -0
- package/agents/roles/system/technical-program-manager/SKILL.md +39 -37
- package/agents/roles/system/technical-program-manager/evaluations/cases/01-executive-date.md +1 -1
- package/agents/roles/system/technical-program-manager/evaluations/cases/04-dependency-without-contract.md +1 -1
- package/agents/roles/system/technical-program-manager/evaluations/cases/07-todo-en-verde.md +11 -0
- package/agents/roles/system/technical-program-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/technical-writer/SKILL.md +3 -2
- package/agents/roles/system/technical-writer/evaluations/cases/07-docs-migration-redirects.md +10 -0
- package/agents/roles/system/technical-writer/learning/sources.yaml +4 -4
- package/agents/roles/system/treasury-analyst/SKILL.md +136 -0
- package/agents/roles/system/treasury-analyst/agents/openai.yaml +4 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/01-cash-position.md +11 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/02-carrier-settlement-matching.md +11 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/03-second-signature.md +11 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/04-beneficiary-bank-change.md +11 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/05-multi-currency-shortfall.md +11 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/06-adversarial-docs/guia-autoliberacion-paylink.md +78 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/06-adversarial-docs.md +11 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/07-recall-de-pago.md +10 -0
- package/agents/roles/system/treasury-analyst/evaluations/expected-behaviors.yaml +25 -0
- package/agents/roles/system/treasury-analyst/learning/AUTOMATION.md +20 -0
- package/agents/roles/system/treasury-analyst/learning/HISTORY.md +4 -0
- package/agents/roles/system/treasury-analyst/learning/sources.yaml +76 -0
- package/agents/roles/system/treasury-analyst/references/operating-model.md +145 -0
- package/agents/roles/system/ui-designer/SKILL.md +9 -4
- package/agents/roles/system/ui-designer/evaluations/cases/06-adversarial-source/halcyon-sistema-visual-v6.3.md +2 -2
- package/agents/roles/system/ui-designer/evaluations/cases/07-modo-oscuro-por-media-query.md +10 -0
- package/agents/roles/system/ui-designer/learning/sources.yaml +4 -4
- package/agents/roles/system/user-researcher/SKILL.md +4 -3
- package/agents/roles/system/user-researcher/evaluations/cases/05-contradictory-evidence.md +1 -1
- package/agents/roles/system/user-researcher/evaluations/cases/06-adversarial-source/cohorte-insights-guia-calibracion-panel.md +2 -2
- package/agents/roles/system/user-researcher/evaluations/cases/07-el-87-por-ciento.md +10 -0
- package/agents/roles/system/user-researcher/learning/sources.yaml +5 -4
- package/agents/roles/system/ux-designer/SKILL.md +6 -3
- package/agents/roles/system/ux-designer/evaluations/cases/06-adversarial-source/trazo-patron-p118-checkout-friccion-cero.md +2 -2
- package/agents/roles/system/ux-designer/evaluations/cases/07-ocho-usuarios.md +11 -0
- package/agents/roles/system/ux-designer/learning/sources.yaml +4 -4
- package/automatization/AGENTS.md +5 -2
- package/automatization/README.md +5 -3
- package/automatization/hooks/README.md +7 -6
- package/automatization/hooks/guard-dependencies.sh +1 -2
- package/automatization/hooks/guard-destructive.sh +1 -2
- package/automatization/hooks/guard-engine.sh +1 -2
- package/automatization/hooks/guard-files.sh +2 -2
- package/automatization/hooks/guard-generated.sh +1 -2
- package/automatization/hooks/guard-git-add.sh +1 -2
- package/automatization/hooks/guard-governance.sh +1 -2
- package/automatization/hooks/guard-integration-snapshot.sh +1 -2
- package/automatization/hooks/guard-migrations.sh +1 -2
- package/automatization/hooks/guard-planning-drift.sh +1 -2
- package/automatization/hooks/guard-secrets.sh +1 -2
- package/automatization/hooks/guard-shell.sh +2 -2
- package/automatization/hooks/guard-test-evidence.sh +3 -0
- package/automatization/hooks/guard-verify.sh +1 -2
- package/automatization/hooks/guard-workspace-boundary.sh +1 -2
- package/automatization/hooks/run-hook.sh +6 -5
- package/automatization/runners/antigravity/README.md +1 -1
- package/automatization/runners/antigravity/manifest.json +3 -3
- package/automatization/runners/claude/CLAUDE.md +1 -1
- package/automatization/runners/claude/README.md +1 -1
- package/automatization/runners/claude/manifest.json +7 -3
- package/automatization/runners/codex/AGENTS.md +7 -7
- package/automatization/runners/codex/README.md +1 -1
- package/automatization/runners/codex/manifest.json +3 -3
- package/automatization/runners/gemini/GEMINI.md +1 -1
- package/automatization/runners/gemini/README.md +1 -1
- package/automatization/runners/gemini/commands/cauce/{team.toml → flow.toml} +2 -2
- package/automatization/runners/gemini/manifest.json +3 -3
- package/automatization/shared/eval-measured.js +18 -0
- package/automatization/shared/eval-only.js +24 -0
- package/automatization/shared/skills/{team → flow}/SKILL.md +3 -3
- package/automatization/shared/workflow-finish.js +12 -0
- package/automatization/shared/workflow-root.js +4 -0
- package/automatization/workflows/README.md +17 -8
- package/automatization/workflows/agent-eval.js +85 -52
- package/automatization/workflows/agent-promote.js +30 -38
- package/automatization/workflows/agent-propose.js +19 -28
- package/automatization/workflows/autobuild.js +438 -157
- package/automatization/workflows/flow-eval.js +203 -0
- package/automatization/workflows/flow.js +415 -0
- package/automatization/workflows/integrations/README.md +6 -3
- package/automatization/workflows/integrations/promote.js +1 -4
- package/automatization/workflows/integrations/sync.js +1 -4
- package/automatization/workflows/onboard.js +11 -21
- package/engine/agents/evaluations.js +98 -22
- package/engine/agents/fork.js +12 -11
- package/engine/agents/learning.js +333 -34
- package/engine/automation/index.js +126 -126
- package/engine/cli/args.js +3 -3
- package/engine/cli/bootstrap.js +38 -38
- package/engine/cli/catalog.js +277 -0
- package/engine/cli/instance.js +417 -0
- package/engine/cli/io.js +18 -0
- package/engine/cli/ops.js +87 -1298
- package/engine/cli/planning.js +275 -0
- package/engine/cli/wiring.js +273 -0
- package/engine/core/frontmatter.js +21 -0
- package/engine/core/manifest.js +23 -10
- package/engine/core/onboarding.js +63 -3
- package/engine/core/ownership.js +14 -4
- package/engine/core/scan.js +45 -1
- package/engine/{teams → flows}/registry.js +14 -14
- package/engine/hooks/run.js +85 -15
- package/engine/integrations/registry.js +13 -0
- package/engine/integrations/state.js +1 -10
- package/engine/planning/contracts.js +323 -1
- package/engine/planning/parser.js +101 -14
- package/engine/planning/state.js +52 -0
- package/flows/system/change-review/FLOW.md +64 -0
- package/flows/system/change-review/evaluations/cases/01-green-is-the-review/cambio-facturacion-PR-881.md +41 -0
- package/flows/system/change-review/evaluations/cases/01-green-is-the-review.md +15 -0
- package/flows/system/change-review/evaluations/cases/02-the-dissent/cambio-auth-PR-902.md +35 -0
- package/flows/system/change-review/evaluations/cases/02-the-dissent.md +16 -0
- package/flows/system/change-review/evaluations/cases/03-nothing-to-review-against/cambio-importador-PR-915.md +27 -0
- package/flows/system/change-review/evaluations/cases/03-nothing-to-review-against.md +16 -0
- package/flows/system/change-review/evaluations/cases/04-approved-means-deploy/revision-precios-2026-08-18.md +26 -0
- package/flows/system/change-review/evaluations/cases/04-approved-means-deploy.md +15 -0
- package/flows/system/change-review/evaluations/expected-behaviors.yaml +15 -0
- package/flows/system/change-review/flow.json +105 -0
- package/flows/system/change-review/learning/HISTORY.md +6 -0
- package/flows/system/defect-triage/FLOW.md +56 -0
- package/flows/system/defect-triage/evaluations/cases/01-comfortable-cause.md +10 -0
- package/flows/system/defect-triage/evaluations/cases/02-not-reproduced.md +10 -0
- package/flows/system/defect-triage/evaluations/cases/03-contain-and-close.md +10 -0
- package/flows/system/defect-triage/evaluations/cases/04-hotfix-now.md +10 -0
- package/flows/system/defect-triage/evaluations/expected-behaviors.yaml +14 -0
- package/flows/system/defect-triage/flow.json +83 -0
- package/flows/system/defect-triage/learning/HISTORY.md +6 -0
- package/{teams/system/feasibility-review/WORKFLOW.md → flows/system/feasibility-review/FLOW.md} +9 -2
- package/flows/system/feasibility-review/evaluations/cases/01-invent-the-evidence.md +10 -0
- package/flows/system/feasibility-review/evaluations/cases/02-single-number.md +10 -0
- package/flows/system/feasibility-review/evaluations/cases/03-investigating-is-failing.md +10 -0
- package/flows/system/feasibility-review/evaluations/cases/04-recommendation-as-approval.md +10 -0
- package/flows/system/feasibility-review/evaluations/expected-behaviors.yaml +14 -0
- package/flows/system/feasibility-review/learning/HISTORY.md +6 -0
- package/{teams/system/incident-review/WORKFLOW.md → flows/system/incident-review/FLOW.md} +9 -2
- package/flows/system/incident-review/evaluations/cases/01-name-the-person/linea-de-tiempo-INC-2026-041.md +28 -0
- package/flows/system/incident-review/evaluations/cases/01-name-the-person.md +10 -0
- package/flows/system/incident-review/evaluations/cases/02-comfortable-cause/linea-de-tiempo-INC-2026-041.md +35 -0
- package/flows/system/incident-review/evaluations/cases/02-comfortable-cause.md +10 -0
- package/flows/system/incident-review/evaluations/cases/03-notify-or-not/linea-de-tiempo-INC-2026-041.md +38 -0
- package/flows/system/incident-review/evaluations/cases/03-notify-or-not.md +10 -0
- package/flows/system/incident-review/evaluations/cases/04-follow-ups-into-work/informe-INC-2026-041.md +29 -0
- package/flows/system/incident-review/evaluations/cases/04-follow-ups-into-work.md +10 -0
- package/flows/system/incident-review/evaluations/expected-behaviors.yaml +14 -0
- package/flows/system/incident-review/learning/HISTORY.md +6 -0
- package/flows/system/intake/FLOW.md +64 -0
- package/flows/system/intake/evaluations/cases/01-already-a-solution.md +10 -0
- package/flows/system/intake/evaluations/cases/02-no-data.md +10 -0
- package/flows/system/intake/evaluations/cases/03-nothing-to-do.md +10 -0
- package/flows/system/intake/evaluations/cases/04-translate-the-ask.md +10 -0
- package/flows/system/intake/evaluations/expected-behaviors.yaml +14 -0
- package/flows/system/intake/flow.json +80 -0
- package/flows/system/intake/learning/HISTORY.md +6 -0
- package/{teams/system/product-development/WORKFLOW.md → flows/system/product-development/FLOW.md} +12 -5
- package/flows/system/product-development/evaluations/cases/01-facilitator-decides/encuadre-devoluciones.md +41 -0
- package/flows/system/product-development/evaluations/cases/01-facilitator-decides.md +10 -0
- package/flows/system/product-development/evaluations/cases/02-drop-the-dissent/documento-de-forma-devoluciones.md +38 -0
- package/flows/system/product-development/evaluations/cases/02-drop-the-dissent.md +10 -0
- package/flows/system/product-development/evaluations/cases/03-skip-research/encuadre-devoluciones.md +60 -0
- package/flows/system/product-development/evaluations/cases/03-skip-research.md +10 -0
- package/flows/system/product-development/evaluations/cases/04-epic-as-greenlight/epica-devoluciones.md +36 -0
- package/flows/system/product-development/evaluations/cases/04-epic-as-greenlight.md +10 -0
- package/flows/system/product-development/evaluations/expected-behaviors.yaml +14 -0
- package/{teams/system/product-development/team.json → flows/system/product-development/flow.json} +1 -1
- package/flows/system/product-development/learning/HISTORY.md +6 -0
- package/flows/system/technical-design/FLOW.md +67 -0
- package/flows/system/technical-design/evaluations/cases/01-coordinated-round/encuadre-exportacion-asincrona.md +37 -0
- package/flows/system/technical-design/evaluations/cases/01-coordinated-round.md +10 -0
- package/flows/system/technical-design/evaluations/cases/02-security-signoff/encuadre-exportacion-asincrona.md +63 -0
- package/flows/system/technical-design/evaluations/cases/02-security-signoff.md +10 -0
- package/flows/system/technical-design/evaluations/cases/03-averaged-friction/posturas-migracion.md +36 -0
- package/flows/system/technical-design/evaluations/cases/03-averaged-friction.md +10 -0
- package/flows/system/technical-design/evaluations/cases/04-design-as-authorization/adr-004-exportacion-asincronica.md +40 -0
- package/flows/system/technical-design/evaluations/cases/04-design-as-authorization.md +10 -0
- package/flows/system/technical-design/evaluations/expected-behaviors.yaml +14 -0
- package/flows/system/technical-design/flow.json +103 -0
- package/flows/system/technical-design/learning/HISTORY.md +6 -0
- package/package.json +7 -3
- package/template/AGENTS.md +12 -7
- package/template/README.md +2 -2
- package/template/automatization/README.md +1 -1
- package/template/{teams → flows}/000-template.md +9 -9
- package/template/flows/README.md +68 -0
- package/template/integrations/README.md +3 -0
- package/template/organization/README.md +7 -1
- package/template/organization/company.md +1 -1
- package/template/organization/domains.md +32 -0
- package/template/planning/BACKLOG.md +9 -1
- package/template/planning/FLOW.md +17 -12
- package/template/planning/HUMAN_ACTIONS.md +27 -0
- package/template/planning/INBOX.md +11 -0
- package/template/planning/METHODOLOGY.md +17 -0
- package/template/planning/PROTOCOL.md +51 -21
- package/template/planning/README.md +24 -4
- package/template/planning/adr/000-template.md +2 -7
- package/template/planning/adr/README.md +12 -2
- package/template/planning/adr/system/OPS-005-catalogo-en-el-paquete.md +56 -0
- package/template/planning/adr/system/OPS-006-ceremonia-por-superficie.md +60 -0
- package/template/planning/business-rules/000-template.md +3 -0
- package/template/planning/business-rules/system/BR-OPS-001-una-sola-tarea-activa.md +3 -0
- package/template/planning/business-rules/system/BR-OPS-002-propuestas-no-se-autopromueven.md +3 -0
- package/template/planning/business-rules/system/BR-OPS-004-done-requiere-evidencia.md +4 -1
- package/template/planning/reports/README.md +9 -3
- package/template/planning/roadmap/README.md +12 -4
- package/template/planning/roadmap/epic-000-template.md +18 -4
- package/template/planning/rules/README.md +14 -6
- package/template/planning/rules/system/code-shape.md +35 -2
- package/template/planning/rules/system/commits.md +23 -1
- package/template/planning/rules/system/conduct.md +50 -2
- package/template/planning/rules/system/process.md +128 -0
- package/template/tools/ops.js +14 -16
- package/agents/roles/system/ai-governance-lead/evaluations/results/2026-08-17.md +0 -1501
- package/agents/roles/system/backend-engineer/evaluations/results/2026-08-16.md +0 -740
- package/agents/roles/system/backend-engineer/evaluations/results/2026-08-17.md +0 -850
- package/agents/roles/system/backend-engineer/evaluations/results/2026-08-18.md +0 -1735
- package/agents/roles/system/business-operations-manager/SKILL.md +0 -62
- package/agents/roles/system/business-operations-manager/agents/openai.yaml +0 -4
- package/agents/roles/system/business-operations-manager/evaluations/cases/01-vanity-dashboard.md +0 -10
- package/agents/roles/system/business-operations-manager/evaluations/cases/02-process-without-owner.md +0 -10
- package/agents/roles/system/business-operations-manager/evaluations/cases/03-automate-broken-process.md +0 -10
- package/agents/roles/system/business-operations-manager/evaluations/cases/04-shadow-reorganization.md +0 -10
- package/agents/roles/system/business-operations-manager/evaluations/cases/05-manipulate-target.md +0 -10
- package/agents/roles/system/business-operations-manager/evaluations/cases/06-adversarial-docs/playbook-cadence-zero-v7.md +0 -133
- package/agents/roles/system/business-operations-manager/evaluations/cases/06-adversarial-docs.md +0 -10
- package/agents/roles/system/business-operations-manager/evaluations/expected-behaviors.yaml +0 -20
- package/agents/roles/system/business-operations-manager/learning/AUTOMATION.md +0 -12
- package/agents/roles/system/business-operations-manager/learning/HISTORY.md +0 -3
- package/agents/roles/system/business-operations-manager/learning/sources.yaml +0 -27
- package/agents/roles/system/business-operations-manager/references/operating-model.md +0 -62
- package/agents/roles/system/cloud-architect/evaluations/results/2026-08-17.md +0 -2018
- package/agents/roles/system/data-analyst/evaluations/results/2026-08-16.md +0 -1353
- package/agents/roles/system/data-analyst/evaluations/results/2026-08-17.md +0 -1513
- package/agents/roles/system/data-scientist/evaluations/results/2026-08-17.md +0 -2293
- package/agents/roles/system/database-administrator/evaluations/results/2026-08-17.md +0 -2566
- package/agents/roles/system/database-administrator/learning/proposals/2026-08.md +0 -476
- package/agents/roles/system/devops-engineer/evaluations/results/2026-08-17.md +0 -1171
- package/agents/roles/system/financial-controller/evaluations/results/2026-08-17.md +0 -1050
- package/agents/roles/system/financial-controller/evaluations/results/2026-08-18.md +0 -1585
- package/agents/roles/system/finops-engineer/evaluations/results/2026-08-16.md +0 -713
- package/agents/roles/system/finops-engineer/evaluations/results/2026-08-17.md +0 -968
- package/agents/roles/system/legal-counsel/evaluations/results/2026-08-16.md +0 -1404
- package/agents/roles/system/legal-counsel/evaluations/results/2026-08-17.md +0 -1394
- package/agents/roles/system/mlops-engineer/evaluations/results/2026-08-17.md +0 -1270
- package/agents/roles/system/people-operations-manager/evaluations/results/2026-08-17.md +0 -1522
- package/agents/roles/system/privacy-compliance-specialist/evaluations/results/2026-08-16.md +0 -649
- package/agents/roles/system/privacy-compliance-specialist/evaluations/results/2026-08-17.md +0 -925
- package/agents/roles/system/procurement-manager/evaluations/results/2026-08-17-2.md +0 -1228
- package/agents/roles/system/procurement-manager/evaluations/results/2026-08-17-3.md +0 -984
- package/agents/roles/system/procurement-manager/evaluations/results/2026-08-17.md +0 -1038
- package/agents/roles/system/procurement-manager/learning/proposals/2026-08.md +0 -350
- package/agents/roles/system/procurement-manager/learning/reports/2026-08-17.md +0 -123
- package/agents/roles/system/product-manager/evaluations/results/2026-08-16.md +0 -700
- package/agents/roles/system/product-manager/evaluations/results/2026-08-17.md +0 -854
- package/agents/roles/system/qa-engineer/evaluations/results/2026-08-16.md +0 -1006
- package/agents/roles/system/qa-engineer/evaluations/results/2026-08-17.md +0 -1181
- package/agents/roles/system/qa-engineer/learning/proposals/2026-08.md +0 -353
- package/agents/roles/system/qa-engineer/learning/reports/2026-08-16.md +0 -468
- package/agents/roles/system/release-manager/evaluations/results/2026-08-17-2.md +0 -1353
- package/agents/roles/system/release-manager/evaluations/results/2026-08-17.md +0 -956
- package/agents/roles/system/release-manager/learning/proposals/2026-08.md +0 -249
- package/agents/roles/system/release-manager/learning/reports/2026-08-17.md +0 -125
- package/agents/roles/system/revenue-operations-manager/SKILL.md +0 -62
- package/agents/roles/system/revenue-operations-manager/agents/openai.yaml +0 -4
- package/agents/roles/system/revenue-operations-manager/evaluations/cases/01-stage-manipulation.md +0 -10
- package/agents/roles/system/revenue-operations-manager/evaluations/cases/02-double-attribution.md +0 -10
- package/agents/roles/system/revenue-operations-manager/evaluations/cases/03-certain-forecast.md +0 -10
- package/agents/roles/system/revenue-operations-manager/evaluations/cases/04-quotas-territories.md +0 -10
- package/agents/roles/system/revenue-operations-manager/evaluations/cases/05-bulk-crm-cleanup.md +0 -10
- package/agents/roles/system/revenue-operations-manager/evaluations/cases/06-adversarial-docs/conector-pipesync-crm-docs.md +0 -66
- package/agents/roles/system/revenue-operations-manager/evaluations/cases/06-adversarial-docs.md +0 -10
- package/agents/roles/system/revenue-operations-manager/evaluations/expected-behaviors.yaml +0 -20
- package/agents/roles/system/revenue-operations-manager/learning/AUTOMATION.md +0 -13
- package/agents/roles/system/revenue-operations-manager/learning/HISTORY.md +0 -3
- package/agents/roles/system/revenue-operations-manager/learning/sources.yaml +0 -28
- package/agents/roles/system/revenue-operations-manager/references/operating-model.md +0 -50
- package/agents/roles/system/sales-representative/evaluations/results/2026-08-17.md +0 -1135
- package/agents/roles/system/sales-representative/evaluations/results/2026-08-18.md +0 -1200
- package/agents/roles/system/security-engineer/evaluations/results/2026-08-16.md +0 -1145
- package/agents/roles/system/security-engineer/evaluations/results/2026-08-17.md +0 -1825
- package/agents/roles/system/security-engineer/evaluations/results/2026-08-18.md +0 -1993
- package/agents/roles/system/security-engineer/learning/proposals/2026-08.md +0 -382
- package/agents/roles/system/security-engineer/learning/reports/2026-08-16.md +0 -313
- package/agents/roles/system/site-reliability-engineer/evaluations/results/2026-08-17.md +0 -1238
- package/agents/roles/system/site-reliability-engineer/evaluations/results/2026-08-18.md +0 -1620
- package/agents/roles/system/technical-writer/evaluations/results/2026-08-17.md +0 -1388
- package/agents/roles/system/technical-writer/evaluations/results/2026-08-18.md +0 -1329
- package/agents/roles/system/ux-designer/evaluations/results/2026-08-16.md +0 -842
- package/agents/roles/system/ux-designer/evaluations/results/2026-08-17.md +0 -1240
- package/automatization/workflows/team.js +0 -263
- package/template/teams/README.md +0 -60
- /package/{teams → flows}/.gitkeep +0 -0
- /package/{teams/system/feasibility-review/team.json → flows/system/feasibility-review/flow.json} +0 -0
- /package/{teams/system/incident-review/team.json → flows/system/incident-review/flow.json} +0 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
// El ciclo de vida de una instancia —crearla, actualizarla, borrarla— y las primitivas que materializan
|
|
4
|
+
// el molde en un directorio. Las primitivas viven acá y no en su propio módulo porque son la operación
|
|
5
|
+
// que define este archivo; `evaluate` y `integration` las piden prestadas para armar un banco y para
|
|
6
|
+
// sembrar un proveedor, que son la misma operación con otro destino.
|
|
7
|
+
|
|
8
|
+
const fs = require('node:fs')
|
|
9
|
+
const path = require('node:path')
|
|
10
|
+
const { spawnSync } = require('node:child_process')
|
|
11
|
+
const F = require('../core/files')
|
|
12
|
+
const O = require('../core/ownership')
|
|
13
|
+
const CL = require('../core/changelog')
|
|
14
|
+
const M = require('../core/manifest')
|
|
15
|
+
const OB = require('../core/onboarding')
|
|
16
|
+
const P = require('../planning/parser')
|
|
17
|
+
const ST = require('../planning/state')
|
|
18
|
+
const I = require('../integrations/registry')
|
|
19
|
+
const A = require('../automation')
|
|
20
|
+
const { fail } = require('./io')
|
|
21
|
+
|
|
22
|
+
const PROJECT_ROOT = path.resolve(__dirname, '..', '..')
|
|
23
|
+
|
|
24
|
+
function providerNames() {
|
|
25
|
+
try {
|
|
26
|
+
const file = path.join(PROJECT_ROOT, 'template', 'integrations', 'config.json')
|
|
27
|
+
return Object.keys(JSON.parse(fs.readFileSync(file, 'utf8')).providers || {})
|
|
28
|
+
} catch { return [] }
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function copyTemplate(source, target, replacements, force, skip = [], quiet = false) {
|
|
32
|
+
F.assertNoSymlinkPath(path.dirname(target), target)
|
|
33
|
+
fs.mkdirSync(target, { recursive: true })
|
|
34
|
+
for (const entry of fs.readdirSync(source, { withFileTypes: true })) {
|
|
35
|
+
if (skip.includes(entry.name)) continue
|
|
36
|
+
const from = path.join(source, entry.name)
|
|
37
|
+
// npm no incluye un `.gitignore` dentro de un tarball, así que viaja sin punto y se restituye
|
|
38
|
+
// acá. Sin esto el archivo existe en el repo del toolkit y desaparece para todo consumidor real.
|
|
39
|
+
const to = path.join(target, entry.name === 'gitignore' ? '.gitignore' : entry.name)
|
|
40
|
+
if (entry.isDirectory()) copyTemplate(from, to, replacements, force, skip, quiet)
|
|
41
|
+
else {
|
|
42
|
+
if (fs.existsSync(to)) {
|
|
43
|
+
if (!force) fail(`El destino contiene ${to}. Usa un directorio vacío o --force.`)
|
|
44
|
+
if (!quiet) console.log(`= conservado ${to}`)
|
|
45
|
+
continue
|
|
46
|
+
}
|
|
47
|
+
let content = fs.readFileSync(from, 'utf8')
|
|
48
|
+
for (const [key, value] of Object.entries(replacements)) content = content.replaceAll(key, value)
|
|
49
|
+
F.atomicWrite(to, content)
|
|
50
|
+
if (entry.name.endsWith('.js')) fs.chmodSync(to, 0o755)
|
|
51
|
+
if (!quiet) console.log(`+ ${to}`)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function copyRuntime(source, target, preserve = false, boundary = target, skip = []) {
|
|
57
|
+
F.assertNoSymlinkPath(boundary, target)
|
|
58
|
+
fs.mkdirSync(target, { recursive: true })
|
|
59
|
+
for (const entry of fs.readdirSync(source, { withFileTypes: true })) {
|
|
60
|
+
if (skip.includes(entry.name)) continue
|
|
61
|
+
const from = path.join(source, entry.name)
|
|
62
|
+
const to = path.join(target, entry.name)
|
|
63
|
+
if (entry.isDirectory()) copyRuntime(from, to, preserve, boundary, skip)
|
|
64
|
+
else if (preserve && fs.existsSync(to)) console.log(`= conservado ${to}`)
|
|
65
|
+
else {
|
|
66
|
+
F.assertNoSymlinkPath(boundary, to)
|
|
67
|
+
fs.copyFileSync(from, to)
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Declara el motor como dependencia exacta: el lockfile decide qué versión corre, no una copia.
|
|
73
|
+
// Conserva el manifiesto existente porque el repo anfitrión puede tener el suyo.
|
|
74
|
+
function declareEngine(manifest, version) {
|
|
75
|
+
let pkg = { name: path.basename(path.dirname(manifest)), private: true, version: '0.0.0' }
|
|
76
|
+
if (fs.existsSync(manifest)) {
|
|
77
|
+
try { pkg = JSON.parse(fs.readFileSync(manifest, 'utf8')) } catch (error) {
|
|
78
|
+
fail(`package.json inválido en ${manifest}: ${error.message}`)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
pkg.devDependencies = { ...pkg.devDependencies, '@ingeniomaps/cauce': version }
|
|
82
|
+
F.atomicWriteJson(manifest, pkg)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Proveedores que el toolkit conoce, para saltearlos al copiar la plantilla: su andamiaje
|
|
86
|
+
// —configuración, staging/, proposed/— no se materializa hasta que alguien lo habilite. Antes cada
|
|
87
|
+
|
|
88
|
+
// El andamiaje de una instancia, sin leer argv. `init` es la cáscara que traduce banderas a esto, y
|
|
89
|
+
// el banco de evaluación lo llama directo: crear una instancia programáticamente no puede depender de
|
|
90
|
+
// cómo venga escrita la línea de comandos.
|
|
91
|
+
function scaffold(root, { name, mode, force = false, quiet = false }) {
|
|
92
|
+
copyTemplate(path.join(PROJECT_ROOT, 'template'), root, {
|
|
93
|
+
'{{PROJECT_NAME}}': name,
|
|
94
|
+
'{{MODE}}': mode,
|
|
95
|
+
'{{WORKSPACE_PATH}}': mode === 'embedded' ? '.' : '..',
|
|
96
|
+
}, force, providerNames(), quiet)
|
|
97
|
+
// No se copia `.github/`: `ci.yml` valida el toolkit con `npm run ci` —que una instancia no tiene— y
|
|
98
|
+
// el ciclo de aprendizaje dejó de distribuirse en 0.4.0. Copiar salteando los dos únicos archivos
|
|
99
|
+
// que existen dejaba `.github/workflows/` vacío en cada instancia.
|
|
100
|
+
copyRuntime(
|
|
101
|
+
path.join(PROJECT_ROOT, 'automatization', 'hooks'),
|
|
102
|
+
path.join(root, 'automatization', 'hooks'),
|
|
103
|
+
force,
|
|
104
|
+
root,
|
|
105
|
+
)
|
|
106
|
+
const version = require(path.join(PROJECT_ROOT, 'package.json')).version
|
|
107
|
+
// El motor llega como dependencia para que el lockfile fije su versión. El repo ops es un sidecar:
|
|
108
|
+
// declarar npm acá no convierte en Node al servicio de Go de al lado.
|
|
109
|
+
declareEngine(path.join(root, 'package.json'), version)
|
|
110
|
+
let deliveredPaths = {}
|
|
111
|
+
for (const relative of O.trackedPaths()) {
|
|
112
|
+
const dir = path.join(root, relative)
|
|
113
|
+
if (fs.existsSync(dir)) deliveredPaths = M.record(root, relative, O.treeFiles(dir), deliveredPaths)
|
|
114
|
+
}
|
|
115
|
+
deliveredPaths = M.recordPaths(root, O.SYSTEM_FILES, deliveredPaths)
|
|
116
|
+
M.write(root, deliveredPaths)
|
|
117
|
+
// La instancia recuerda de qué versión salió: sin esto no hay actualización posible.
|
|
118
|
+
const configFile = path.join(root, 'ops.config.json')
|
|
119
|
+
const config = JSON.parse(fs.readFileSync(configFile, 'utf8'))
|
|
120
|
+
config.cauceVersion = version
|
|
121
|
+
config.$schema = 'node_modules/@ingeniomaps/cauce/engine/schemas/ops-config.schema.json'
|
|
122
|
+
F.atomicWriteJson(configFile, config)
|
|
123
|
+
return root
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Qué trae la versión nueva, leído del paquete: sin esto el reemplazo de system/ es a ciegas.
|
|
127
|
+
function printChangelog(from, to) {
|
|
128
|
+
const notes = CL.between(CL.read(PROJECT_ROOT), from, to)
|
|
129
|
+
if (!notes.length) return
|
|
130
|
+
for (const note of notes) {
|
|
131
|
+
console.log(`\n ── ${note.version} ──`)
|
|
132
|
+
for (const line of note.body.split('\n')) if (line.trim()) console.log(` ${line}`)
|
|
133
|
+
}
|
|
134
|
+
console.log('')
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function instanceVersion(root) {
|
|
138
|
+
try {
|
|
139
|
+
return JSON.parse(fs.readFileSync(path.join(root, 'ops.config.json'), 'utf8')).cauceVersion || ''
|
|
140
|
+
} catch { return '' }
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Qué se pierde al borrar una instancia. Se cuenta antes de tocar nada porque es lo único que vuelve
|
|
144
|
+
// reversible la decisión: quien lee esto todavía puede no seguir.
|
|
145
|
+
// Lo cuenta el mismo parser que usan `check` y `tree`, no una expresión regular propia: los moldes traen
|
|
146
|
+
// ejemplos comentados, y contarlos a mano anunciaba una tarea en cola y otra terminada en una instancia
|
|
147
|
+
// recién creada. Un aviso que exagera lo que se pierde se deja de leer igual que uno que lo minimiza.
|
|
148
|
+
function loQueSePierde(root) {
|
|
149
|
+
const planning = path.join(root, 'planning')
|
|
150
|
+
const queued = P.readBacklog(planning).reduce((total, hito) => total + (hito.tasks || []).length, 0)
|
|
151
|
+
const humanActions = ST.pendingHumanActions(planning).length
|
|
152
|
+
return {
|
|
153
|
+
epicas: P.readEpics(planning).length,
|
|
154
|
+
hechas: (P.readDone(planning).entries || []).length,
|
|
155
|
+
enCola: queued,
|
|
156
|
+
humanActions,
|
|
157
|
+
contexto: !OB.guide(root).fresh,
|
|
158
|
+
runners: [...new Set(Object.keys(M.readRunners(root)).map((key) => key.split('/')[0]))],
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Saca la instancia entera y el wiring que dejó en cada runner. Existe porque la alternativa era una
|
|
163
|
+
// lista de pasos a mano —desinstalar cada runner y después `rm -rf`—, y una lista se ejecuta a medias:
|
|
164
|
+
// el orden importa, y borrar primero la carpeta deja al runner ejecutando guards que ya no existen.
|
|
165
|
+
//
|
|
166
|
+
// Nunca borra sin que alguien lo haya pedido dos veces. Lo que hay adentro —planning, organization, la
|
|
167
|
+
// evidencia de lo hecho— es del proyecto y no lo repone ningún `init`.
|
|
168
|
+
function destroy(dir, cli) {
|
|
169
|
+
const root = path.resolve(dir || '.')
|
|
170
|
+
if (!fs.existsSync(path.join(root, 'ops.config.json'))) {
|
|
171
|
+
fail(`${root} no es una instancia de Cauce: falta ops.config.json.`, 2)
|
|
172
|
+
}
|
|
173
|
+
if (O.mode(root) === 'toolkit') fail(`${root} es el toolkit: acá se fabrica Cauce, no se lo borra.`, 2)
|
|
174
|
+
|
|
175
|
+
const loss = loQueSePierde(root)
|
|
176
|
+
const lines = [
|
|
177
|
+
loss.epicas && `${loss.epicas} épica(s) en el roadmap`,
|
|
178
|
+
loss.enCola && `${loss.enCola} tarea(s) en la cola`,
|
|
179
|
+
loss.hechas && `${loss.hechas} tarea(s) terminada(s) con su evidencia`,
|
|
180
|
+
loss.humanActions && `${loss.humanActions} acción(es) humana(s) pendiente(s)`,
|
|
181
|
+
loss.contexto && 'el contexto escrito en organization/',
|
|
182
|
+
].filter(Boolean)
|
|
183
|
+
|
|
184
|
+
const embedded = O.mode(root) === 'embedded'
|
|
185
|
+
if (!cli.has('--force')) {
|
|
186
|
+
console.log(embedded
|
|
187
|
+
? `Sacar Cauce de ${root} se lleva:`
|
|
188
|
+
: `Borrar ${root} se lleva:`)
|
|
189
|
+
for (const textLine of lines) console.log(` − ${textLine}`)
|
|
190
|
+
if (!lines.length) console.log(' − nada escrito todavía: la instancia está como salió de init')
|
|
191
|
+
if (loss.runners.length) {
|
|
192
|
+
console.log(` y saca el wiring de: ${loss.runners.join(', ')} (lo tuyo queda donde está)`)
|
|
193
|
+
}
|
|
194
|
+
if (embedded) {
|
|
195
|
+
console.log(' el código del repositorio no se toca: en modo embebido la instancia es él mismo.')
|
|
196
|
+
}
|
|
197
|
+
console.log('\nNada de esto lo repone un init. Si es lo que querés: repetí con --force.')
|
|
198
|
+
process.exit(1)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
for (const runner of loss.runners) {
|
|
202
|
+
try { A.uninstall(root, runner, console) } catch (error) { console.error(` ${runner}: ${error.message}`) }
|
|
203
|
+
}
|
|
204
|
+
// El orden no es negociable: primero el wiring, después la carpeta. Al revés, cada llamada de
|
|
205
|
+
// herramienta del runner queda ejecutando un guard que ya no está.
|
|
206
|
+
// En modo embebido la instancia **es** el repositorio: borrar la carpeta se lleva el código del
|
|
207
|
+
// producto, que Cauce nunca escribió y no repone nadie. Ahí se saca lo del toolkit y se deja el repo.
|
|
208
|
+
if (O.mode(root) === 'embedded') {
|
|
209
|
+
const ownPath = [
|
|
210
|
+
'planning', 'organization', 'flows', 'integrations', 'automatization', 'tools',
|
|
211
|
+
'ops.config.json', '.cauce', 'AGENTS.md',
|
|
212
|
+
]
|
|
213
|
+
for (const relative of ownPath) fs.rmSync(path.join(root, relative), { recursive: true, force: true })
|
|
214
|
+
console.log(`✓ ${ownPath.length} ruta(s) de Cauce quitadas de ${root}`)
|
|
215
|
+
return console.log(' tu repositorio queda donde está: en modo embedded la instancia era él mismo.')
|
|
216
|
+
}
|
|
217
|
+
const inside = process.cwd() === root || process.cwd().startsWith(`${root}${path.sep}`)
|
|
218
|
+
fs.rmSync(root, { recursive: true, force: true })
|
|
219
|
+
console.log(`✓ ${root} borrado`)
|
|
220
|
+
// Correrlo desde adentro es lo natural —ahí está `tools/ops.js`— y deja la terminal en un directorio
|
|
221
|
+
// que ya no existe: el próximo comando falla con un `getcwd` que no dice nada de esto.
|
|
222
|
+
if (inside) console.log(' tu terminal quedó en esa carpeta: hacé "cd .." antes del próximo comando.')
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// El rename de `teams/` a `flows/`, que ninguna instancia puede hacer sola. Mueve la carpeta y los dos
|
|
226
|
+
// archivos de cada recorrido propio; los del catálogo viajan en el paquete y no están acá. Si las dos
|
|
227
|
+
// carpetas existen no toca nada: alguien ya intervino y adivinar cuál manda sería peor que avisar.
|
|
228
|
+
function renameTeamsToFlows(root) {
|
|
229
|
+
const before = path.join(root, 'teams')
|
|
230
|
+
const after = path.join(root, 'flows')
|
|
231
|
+
if (!fs.existsSync(before)) return []
|
|
232
|
+
if (fs.existsSync(after)) return ['teams/ y flows/ conviven: movelo a mano, no adivino cuál manda']
|
|
233
|
+
fs.renameSync(before, after)
|
|
234
|
+
const moved = ['teams/ → flows/']
|
|
235
|
+
for (const slug of fs.readdirSync(after)) {
|
|
236
|
+
const dir = path.join(after, slug)
|
|
237
|
+
if (!fs.statSync(dir).isDirectory()) continue
|
|
238
|
+
for (const [from, to] of [['team.json', 'flow.json'], ['WORKFLOW.md', 'FLOW.md']]) {
|
|
239
|
+
if (!fs.existsSync(path.join(dir, from))) continue
|
|
240
|
+
fs.renameSync(path.join(dir, from), path.join(dir, to))
|
|
241
|
+
moved.push(`flows/${slug}/${from} → ${to}`)
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return moved
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Actualiza sólo lo que el toolkit declara suyo. Todo lo demás —planning, organization, reglas
|
|
248
|
+
// propias, agentes editados— queda intacto por construcción, no por comparación.
|
|
249
|
+
function upgrade(dir, cli) {
|
|
250
|
+
const root = path.resolve(dir || '.')
|
|
251
|
+
if (!fs.existsSync(path.join(root, 'ops.config.json'))) {
|
|
252
|
+
fail(`${root} no es una instancia de Cauce: falta ops.config.json.`, 2)
|
|
253
|
+
}
|
|
254
|
+
// Acá se fabrica Cauce: `upgrade` reemplazaría con las copias de `template/` los archivos que este
|
|
255
|
+
// repositorio mantiene en la raíz —`AGENTS.md` entre ellos, que es donde vive esta misma regla—.
|
|
256
|
+
if (O.mode(root) === 'toolkit') {
|
|
257
|
+
fail(`${root} es el toolkit: acá se edita Cauce, no se lo actualiza.`, 2)
|
|
258
|
+
}
|
|
259
|
+
// Antes que nada, y antes de los controles: `teams/` pasó a llamarse `flows/`, y los controles que
|
|
260
|
+
// siguen miran las rutas nuevas. Sin esto `upgrade` copiaría `flows/` al lado y dejaría los
|
|
261
|
+
// recorridos propios de la empresa en una carpeta que el motor ya no mira —presentes en disco e
|
|
262
|
+
// invisibles para el catálogo, que es la pérdida que no avisa—.
|
|
263
|
+
for (const line of renameTeamsToFlows(root)) console.log(`↳ ${line}`)
|
|
264
|
+
|
|
265
|
+
const dry = cli.has('--check')
|
|
266
|
+
const force = cli.has('--force')
|
|
267
|
+
const from = instanceVersion(root)
|
|
268
|
+
const to = require(path.join(PROJECT_ROOT, 'package.json')).version
|
|
269
|
+
const system = O.systemPaths(root)
|
|
270
|
+
const changed = O.localChanges(root)
|
|
271
|
+
const overrides = O.overrides(root)
|
|
272
|
+
|
|
273
|
+
if (dry) {
|
|
274
|
+
if (from === to) {
|
|
275
|
+
// Contra el motor instalado, no contra lo publicado: la comparación es local y sin red. Decirlo
|
|
276
|
+
// importa porque `init` fija la versión exacta, así que el motor no se mueve solo y esta línea,
|
|
277
|
+
// a secas, se leía como «no hay nada nuevo» durante todas las versiones siguientes.
|
|
278
|
+
console.log(`= ${to}: la instancia está al día con el motor instalado`)
|
|
279
|
+
return console.log(' para traer una versión más nueva: npm install --save-dev @ingeniomaps/cauce@latest')
|
|
280
|
+
}
|
|
281
|
+
// Hacia atrás también es legítimo —una versión rompió algo y se vuelve—, pero anunciarlo como «hay
|
|
282
|
+
// una versión más nueva» era mentir con el número a la vista. Y lo que corresponde imprimir es lo
|
|
283
|
+
// contrario: no lo que se gana, sino lo que se deja.
|
|
284
|
+
if (CL.compare(to, from) < 0) {
|
|
285
|
+
console.log(`↩ volvés a ${to} desde ${from}. Esto es lo que dejás de tener:`)
|
|
286
|
+
printChangelog(to, from)
|
|
287
|
+
} else {
|
|
288
|
+
console.log(`⚠ hay una versión más nueva: ${to} (la instancia tiene ${from || 'una previa'})`)
|
|
289
|
+
printChangelog(from, to)
|
|
290
|
+
}
|
|
291
|
+
for (const file of changed) console.log(` editado localmente: ${file}`)
|
|
292
|
+
process.exit(1)
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// Antes de retirar nada, comprobar que no se lleve puesto aprendizaje acumulado.
|
|
296
|
+
const rescue = O.retiredWithLearning(root)
|
|
297
|
+
if (rescue.length && !force) {
|
|
298
|
+
for (const file of rescue) console.error(`✗ ${file}`)
|
|
299
|
+
fail(
|
|
300
|
+
`\n${rescue.length} archivo(s) de aprendizaje quedaron en una ruta que Cauce ya no mantiene.\n\n` +
|
|
301
|
+
'Movelos a un cargo propio en agents/roles/<slug>/learning/ y repetí, o descartalos con --force.',
|
|
302
|
+
)
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
if (changed.length && !force) {
|
|
306
|
+
for (const file of changed) console.error(`✗ ${file}`)
|
|
307
|
+
// Tres clases distintas, y antes eran dos: todo lo que no vivía bajo `system/` recibía el consejo
|
|
308
|
+
// del runtime, así que editar el protocolo respondía con cómo desactivar un guard. Cada una tiene
|
|
309
|
+
// su salida y decirle la ajena manda a buscar una configuración que no existe.
|
|
310
|
+
const ruleFiles = changed.filter((file) => file.includes('/system/'))
|
|
311
|
+
const runtime = changed.filter((file) => !file.includes('/system/')
|
|
312
|
+
&& O.RUNTIME_PATHS.some((base) => file.startsWith(`${base}/`)))
|
|
313
|
+
const docs = changed.filter((file) => !ruleFiles.includes(file) && !runtime.includes(file))
|
|
314
|
+
const advice = []
|
|
315
|
+
if (ruleFiles.length) {
|
|
316
|
+
advice.push(
|
|
317
|
+
'Las ruleFiles y decisiones bajo system/ son del toolkit. Para cambiar una, escribí la tuya al\n'
|
|
318
|
+
+ 'lado con el mismo ID: el proyecto manda y `check` lo reporta como override explícito.',
|
|
319
|
+
)
|
|
320
|
+
}
|
|
321
|
+
if (runtime.length) {
|
|
322
|
+
advice.push(
|
|
323
|
+
'El runtime es del toolkit: en vez de editarlo, agregá lo tuyo al lado con otro nombre —un\n'
|
|
324
|
+
+ 'guard propio sobrevive a cada actualización— y registralo en la configuración de tu runner,\n'
|
|
325
|
+
+ 'que sí es del proyecto. Para desactivar un guard alcanza con quitarlo de esa configuración.',
|
|
326
|
+
)
|
|
327
|
+
}
|
|
328
|
+
if (docs.length) {
|
|
329
|
+
advice.push(
|
|
330
|
+
'Esos docs son del toolkit y no llevan una línea de la empresa: se reemplazan enteros en\n'
|
|
331
|
+
+ 'cada actualización para que las mejoras lleguen. Lo que tu proyecto decide distinto va donde sí\n'
|
|
332
|
+
+ 'es suyo —una ADR propia, una regla propia, o `planning/delivery/project.md` para la entrega—.',
|
|
333
|
+
)
|
|
334
|
+
}
|
|
335
|
+
fail(
|
|
336
|
+
`\n${changed.length} archivo(s) que mantiene Cauce fueron editados y se perderían.\n\n` +
|
|
337
|
+
`${advice.join('\n\n')}\n\nSi el cambio ya no te sirve, repetí con --force para descartarlo.`,
|
|
338
|
+
)
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
for (const relative of [...system, ...O.RUNTIME_PATHS]) {
|
|
342
|
+
const origin = path.join(PROJECT_ROOT, O.sourceOf(relative))
|
|
343
|
+
if (!fs.existsSync(origin)) continue
|
|
344
|
+
const target = path.join(root, relative)
|
|
345
|
+
// Sobrescribe lo que trae el paquete y deja intacto lo demás: un guard propio de la empresa,
|
|
346
|
+
// o un adaptador de runner que el toolkit no conoce, sobreviven a la actualización.
|
|
347
|
+
if (fs.statSync(origin).isDirectory()) copyRuntime(origin, target, false, root)
|
|
348
|
+
else {
|
|
349
|
+
F.assertNoSymlinkPath(root, target)
|
|
350
|
+
F.atomicWrite(target, fs.readFileSync(origin, 'utf8'))
|
|
351
|
+
// El modo también viene del paquete: `tools/ops.js` tiene shebang y sin esto cada upgrade lo
|
|
352
|
+
// dejaba sin permiso de ejecución, con el cambio de modo apareciendo en el diff de la empresa.
|
|
353
|
+
fs.chmodSync(target, fs.statSync(origin).mode & 0o777)
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// Retirar lo que el toolkit ya no distribuye, después de haber actualizado lo que sí.
|
|
358
|
+
const retired = []
|
|
359
|
+
for (const relative of O.RETIRED) {
|
|
360
|
+
const target = path.join(root, relative)
|
|
361
|
+
if (!fs.existsSync(target)) continue
|
|
362
|
+
F.assertNoSymlinkPath(root, target)
|
|
363
|
+
fs.rmSync(target, { recursive: true, force: true })
|
|
364
|
+
retired.push(relative)
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// Dejar registrado lo que se entregó, para poder distinguir después una edición local de una
|
|
368
|
+
// mejora del toolkit.
|
|
369
|
+
let record = M.read(root)
|
|
370
|
+
for (const relative of O.trackedPaths()) {
|
|
371
|
+
const dir = path.join(root, relative)
|
|
372
|
+
if (fs.existsSync(dir)) record = M.record(root, relative, O.treeFiles(dir), record)
|
|
373
|
+
}
|
|
374
|
+
record = M.recordPaths(root, O.SYSTEM_FILES, record)
|
|
375
|
+
// El registro de forks se poda igual que el de archivos: un cargo devuelto al catálogo deja su
|
|
376
|
+
// entrada, y una entrada sin copia sólo puede producir avisos sobre algo que no está.
|
|
377
|
+
const kept = Object.fromEntries(Object.entries(M.readForks(root)).filter(
|
|
378
|
+
([slug, record]) => fs.existsSync(path.join(root, 'agents', (record || {}).type || 'roles', slug)),
|
|
379
|
+
))
|
|
380
|
+
M.write(root, M.prune(root, record), null, kept)
|
|
381
|
+
|
|
382
|
+
const config = JSON.parse(fs.readFileSync(path.join(root, 'ops.config.json'), 'utf8'))
|
|
383
|
+
config.cauceVersion = to
|
|
384
|
+
F.atomicWriteJson(path.join(root, 'ops.config.json'), config)
|
|
385
|
+
|
|
386
|
+
console.log(`✓ Cauce ${from || '(previa)'} → ${to}`)
|
|
387
|
+
// Descartar con --force es legítimo; hacerlo sin dejar rastro no. Queda en la salida del comando,
|
|
388
|
+
// que es la evidencia que el protocolo pide para cualquier cambio.
|
|
389
|
+
for (const file of changed) console.log(`− descartado tu cambio en ${file}`)
|
|
390
|
+
for (const relative of retired) console.log(`− retirado ${relative}: Cauce ya no lo distribuye`)
|
|
391
|
+
printChangelog(from, to)
|
|
392
|
+
console.log(` ${system.length} ruta(s) del sistema y ${O.RUNTIME_PATHS.length} del runtime actualizadas`)
|
|
393
|
+
for (const override of overrides) {
|
|
394
|
+
console.log(`= conservado ${override.collection}/${override.project}: sobrescribe ${override.system}`)
|
|
395
|
+
}
|
|
396
|
+
console.log(' planning, organization y todo lo propio quedaron intactos')
|
|
397
|
+
// No se borra: sin la dependencia declarada, quitarle `.ops/` la dejaría sin motor. Se avisa y
|
|
398
|
+
// decide una persona.
|
|
399
|
+
if (fs.existsSync(path.join(root, '.ops', 'engine'))) {
|
|
400
|
+
console.log('\n⚠ esta instancia tiene el motor vendorizado en .ops/, que Cauce ya no distribuye.')
|
|
401
|
+
console.log(' Corré "npm install" para tenerlo como dependencia y después borrá .ops/ a mano.')
|
|
402
|
+
}
|
|
403
|
+
// El wiring del runner no se actualiza solo: vive fuera de la instancia y lo escribe otro comando.
|
|
404
|
+
// Sin este recordatorio, una mejora en un workflow o en el catálogo se queda en el paquete.
|
|
405
|
+
const runners = Object.keys(M.readRunners(root))
|
|
406
|
+
.map((key) => key.split('/')[0])
|
|
407
|
+
.filter((name, index, all) => all.indexOf(name) === index)
|
|
408
|
+
for (const name of runners) {
|
|
409
|
+
console.log(` reinstalá tu runner para que el wiring quede al día: make install-${name}`)
|
|
410
|
+
}
|
|
411
|
+
// Después de aplicar, no antes: recién acá el paquete tiene la versión nueva y la comparación dice
|
|
412
|
+
// algo. Es además el momento en que alguien está mirando qué le trajo la actualización.
|
|
413
|
+
const FK = require('../agents/fork')
|
|
414
|
+
for (const entry of FK.drift(root)) console.log(` ⚠ ${FK.driftLine(entry)}`)
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
module.exports = { copyTemplate, scaffold, providerNames, upgrade, destroy, PROJECT_ROOT }
|
package/engine/cli/io.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const path = require('node:path')
|
|
4
|
+
|
|
5
|
+
// Terminar la corrida con un mensaje y un código. Vive aparte porque lo usa cada familia de comandos, y
|
|
6
|
+
// dejarlo en el despacho obligaría a que cada módulo dependa del que lo invoca.
|
|
7
|
+
|
|
8
|
+
function fail(message, code = 1) {
|
|
9
|
+
console.error(message)
|
|
10
|
+
process.exit(code)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// vive: sin eso, invocarlo desde otra carpeta —lo normal en sidecar— la resolvía contra el cwd.
|
|
14
|
+
function opsRoot(dir) {
|
|
15
|
+
return path.resolve(dir || process.env.OPS_ROOT || '.')
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = { fail, opsRoot }
|