@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
|
@@ -8,9 +8,16 @@
|
|
|
8
8
|
|
|
9
9
|
const fs = require('node:fs')
|
|
10
10
|
const path = require('node:path')
|
|
11
|
+
const { inventory } = require('./scan')
|
|
11
12
|
|
|
12
|
-
//
|
|
13
|
-
const
|
|
13
|
+
// La raíz del paquete: el molde contra el que se compara lo que una instancia escribió.
|
|
14
|
+
const PACKAGE_ROOT = path.resolve(__dirname, '..', '..')
|
|
15
|
+
|
|
16
|
+
// El molde llega con estos marcadores, y quien redacta los deja donde todavía no hay decisión. Que
|
|
17
|
+
// sigan ahí es la señal de que nadie escribió: vale para una instancia sin arrancar y para una épica
|
|
18
|
+
// que no se puede activar. Sin distinguir mayúsculas, porque `por definir` en medio de una frase dice
|
|
19
|
+
// exactamente lo mismo que al principio de una.
|
|
20
|
+
const PLACEHOLDERS = /Por completar|Por definir/i
|
|
14
21
|
|
|
15
22
|
// La única pregunta que no depende de ninguna respuesta, y por eso la única que se puede escribir de
|
|
16
23
|
// antemano. Las cuatro fijas que había antes daban por sentado que el proyecto vende algo: a uno libre,
|
|
@@ -64,4 +71,57 @@ function guide(root, services = []) {
|
|
|
64
71
|
}
|
|
65
72
|
}
|
|
66
73
|
|
|
67
|
-
|
|
74
|
+
function missingSections(root) {
|
|
75
|
+
const warnings = []
|
|
76
|
+
const template = path.join(PACKAGE_ROOT, 'template', 'organization')
|
|
77
|
+
for (const name of ['company.md', 'product.md', 'domains.md']) {
|
|
78
|
+
const written = path.join(root, 'organization', name)
|
|
79
|
+
if (!fs.existsSync(written) || !fs.existsSync(path.join(template, name))) continue
|
|
80
|
+
const headings = (text) => new Set((text.match(/^##\s+(.+)$/gm) || []).map((line) => line.trim()))
|
|
81
|
+
const expected = headings(fs.readFileSync(path.join(template, name), 'utf8'))
|
|
82
|
+
const present = headings(fs.readFileSync(written, 'utf8'))
|
|
83
|
+
const missing = [...expected].filter((heading) => !present.has(heading))
|
|
84
|
+
if (!missing.length) continue
|
|
85
|
+
// Reescrito entero, faltan todas: enumerarlas hace una línea ilegible y el número dice más.
|
|
86
|
+
const summary = missing.length > 3
|
|
87
|
+
? `${missing.slice(0, 3).join(', ')} y ${missing.length - 3} más`
|
|
88
|
+
: missing.join(', ')
|
|
89
|
+
warnings.push(`organization/${name}: sin ${summary} — el molde las trae y acá no están`)
|
|
90
|
+
}
|
|
91
|
+
return warnings
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Credenciales que el proyecto declara y que no aparecen en ningún contrato. El arranque tiene que
|
|
95
|
+
// dejar una fila por cada una —quién la carga y dónde— y en la práctica cubre las que se hablaron en la
|
|
96
|
+
// conversación: las que sólo estaban en el inventario se pierden, y con ellas el servicio externo que
|
|
97
|
+
// hay detrás. Una variable sin dueño no rompe nada hoy; rompe el día que alguien tiene que desplegar.
|
|
98
|
+
//
|
|
99
|
+
// Sólo cuando la instancia ya tiene contexto escrito: antes del arranque no hay dónde estuvieran.
|
|
100
|
+
function orphanCredentials(root) {
|
|
101
|
+
if (guide(root).fresh) return []
|
|
102
|
+
const contracts = ['AGENTS.md', path.join('planning', 'HUMAN_ACTIONS.md')]
|
|
103
|
+
.map((file) => { try { return fs.readFileSync(path.join(root, file), 'utf8') } catch { return '' } })
|
|
104
|
+
.join('\n')
|
|
105
|
+
if (!contracts) return []
|
|
106
|
+
const orphans = []
|
|
107
|
+
for (const service of inventory(root)) {
|
|
108
|
+
for (const name of (service.env || {}).names || []) {
|
|
109
|
+
if (!contracts.includes(name)) orphans.push(`${name} (${service.path})`)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (!orphans.length) return []
|
|
113
|
+
const summary = orphans.length > 4
|
|
114
|
+
? `${orphans.slice(0, 4).join(', ')} y ${orphans.length - 4} más`
|
|
115
|
+
: orphans.join(', ')
|
|
116
|
+
return [`el proyecto declara ${summary} y no aparecen en el mapa ni en HUMAN_ACTIONS: nadie las carga`]
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
module.exports = {
|
|
120
|
+
missingSections,
|
|
121
|
+
orphanCredentials,
|
|
122
|
+
guide,
|
|
123
|
+
OPENING,
|
|
124
|
+
DIMENSIONS,
|
|
125
|
+
FOLLOW_UPS,
|
|
126
|
+
PLACEHOLDERS,
|
|
127
|
+
}
|
package/engine/core/ownership.js
CHANGED
|
@@ -22,9 +22,19 @@ const SYSTEM_FILES = [
|
|
|
22
22
|
'planning/rules/README.md',
|
|
23
23
|
'planning/roadmap/README.md',
|
|
24
24
|
'planning/roadmap/epic-000-template.md',
|
|
25
|
+
// La guía de entrega no tiene una línea de la empresa: describe el camino que Cauce recomienda, y lo
|
|
26
|
+
// que el proyecto declara vive en `delivery/project.md`, que sí es suyo. Sin declararla, cada mejora
|
|
27
|
+
// de la guía se quedaba en el molde: una instancia conservaba para siempre la versión del día que se
|
|
28
|
+
// creó, y `upgrade` informaba «todo lo propio quedó intacto» sobre algo que nunca fue propio.
|
|
29
|
+
'planning/delivery/README.md',
|
|
30
|
+
'planning/delivery/branches.md',
|
|
31
|
+
'planning/delivery/release.md',
|
|
32
|
+
'planning/delivery/environments.md',
|
|
33
|
+
'planning/delivery/flags.md',
|
|
34
|
+
'planning/delivery/multi-repo.md',
|
|
25
35
|
'organization/roles/README.md',
|
|
26
|
-
'
|
|
27
|
-
'
|
|
36
|
+
'flows/000-template.md',
|
|
37
|
+
'flows/README.md',
|
|
28
38
|
'automatization/README.md',
|
|
29
39
|
'automatization/AGENTS.md',
|
|
30
40
|
'integrations/README.md',
|
|
@@ -60,7 +70,7 @@ const TEMPLATE_PREFIXES = [
|
|
|
60
70
|
'planning/',
|
|
61
71
|
'organization/',
|
|
62
72
|
'integrations/',
|
|
63
|
-
'
|
|
73
|
+
'flows/',
|
|
64
74
|
'automatization/',
|
|
65
75
|
'tools/',
|
|
66
76
|
]
|
|
@@ -163,7 +173,7 @@ function overrides(root) {
|
|
|
163
173
|
// alguna versión suya copió: `upgrade` agrega y reemplaza, pero nunca quitaba nada.
|
|
164
174
|
const RETIRED = [
|
|
165
175
|
'agents/roles/system',
|
|
166
|
-
'
|
|
176
|
+
'flows/system',
|
|
167
177
|
'.github/workflows/agent-learning.yml',
|
|
168
178
|
'automatization/runners',
|
|
169
179
|
'automatization/workflows',
|
package/engine/core/scan.js
CHANGED
|
@@ -171,4 +171,48 @@ function scan(root, skip = '') {
|
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
function workspaceRoots(root) {
|
|
175
|
+
try {
|
|
176
|
+
const config = JSON.parse(fs.readFileSync(path.join(root, 'ops.config.json'), 'utf8'))
|
|
177
|
+
const declared = (config.workspaceRoots || []).map((entry) => path.resolve(root, entry.path || '.'))
|
|
178
|
+
return declared.length ? declared : [root]
|
|
179
|
+
} catch { return [root] }
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Qué hay en las raíces declaradas, antes de que nadie razone sobre ello. La raíz ops se saltea: no es
|
|
183
|
+
// un servicio del proyecto, y su `package.json` sólo declara el motor.
|
|
184
|
+
// Los candidatos de una raíz, con el proyecto que vive en ella misma primero: un monolito declara sus
|
|
185
|
+
// comandos en el nivel de arriba, y dejarlo afuera hacía desaparecer justo al proyecto principal.
|
|
186
|
+
function candidates(workspace, skip = '') {
|
|
187
|
+
const result = scan(workspace, skip)
|
|
188
|
+
const found = result.rootManifests.length
|
|
189
|
+
? [{ path: '.', root: workspace, runtimes: ['raíz'], commands: result.rootCommands, env: result.rootEnv }]
|
|
190
|
+
: []
|
|
191
|
+
return [...found, ...result.services.map((service) => ({ ...service, root: workspace }))]
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Con varias raíces, cada repositorio es la raíz de su propio escaneo y su candidato principal se llama
|
|
195
|
+
// `.`: tres servicios con el mismo nombre y nada que los distinga. El prefijo los vuelve nombrables, que
|
|
196
|
+
// es la única forma de que una credencial pueda atribuirse a un servicio en vez de quedar suelta.
|
|
197
|
+
function inventory(root) {
|
|
198
|
+
const roots = workspaceRoots(root)
|
|
199
|
+
if (roots.length === 1) return candidates(roots[0], root)
|
|
200
|
+
return roots.flatMap((workspace) => candidates(workspace, root).map((service) => ({
|
|
201
|
+
...service,
|
|
202
|
+
path: service.path === '.' ? path.basename(workspace) : `${path.basename(workspace)}/${service.path}`,
|
|
203
|
+
})))
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function commandsLine(commands) {
|
|
207
|
+
const entries = Object.entries(commands || {})
|
|
208
|
+
if (!entries.length) return ' — sin comandos declarados'
|
|
209
|
+
return ` — ${entries.map(([kind, value]) => `${kind}: ${value.command} (${value.source})`).join(', ')}`
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// La guía de arranque: qué hay, qué falta y qué preguntar. Determinista y en milisegundos, porque es lo
|
|
213
|
+
// primero que ve alguien que acaba de instalar y todavía no sabe qué hace la herramienta.
|
|
214
|
+
module.exports = {
|
|
215
|
+
workspaceRoots,
|
|
216
|
+
candidates,
|
|
217
|
+
inventory,
|
|
218
|
+
commandsLine, scan, services, expectedEnv, IGNORED, DEPTH, ENV_MAX }
|
|
@@ -10,18 +10,18 @@ const PHASES = ['discovery', 'delivery']
|
|
|
10
10
|
// lo aprendido. Sin declararlo, el workflow sólo sabría terminar de una forma.
|
|
11
11
|
const OUTCOMES = ['epic', 'report']
|
|
12
12
|
|
|
13
|
-
// El proyecto manda sobre el sistema: un
|
|
13
|
+
// El proyecto manda sobre el sistema: un flow propio con el mismo slug reemplaza al de `system/`,
|
|
14
14
|
// que se sigue actualizando debajo sin que nadie tenga que forkearlo.
|
|
15
15
|
function systemTeams(root) {
|
|
16
|
-
return require('../core/ownership').packageDir(root, '
|
|
16
|
+
return require('../core/ownership').packageDir(root, 'flows')
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
function
|
|
20
|
-
if (!SLUG.test(slug || '')) throw new Error(`
|
|
21
|
-
const own = path.join(root, '
|
|
19
|
+
function flowFile(root, slug) {
|
|
20
|
+
if (!SLUG.test(slug || '')) throw new Error(`flow inválido: ${slug || '(vacío)'}`)
|
|
21
|
+
const own = path.join(root, 'flows', slug, 'flow.json')
|
|
22
22
|
if (fs.existsSync(own)) return own
|
|
23
23
|
const system = systemTeams(root)
|
|
24
|
-
return system ? path.join(system, 'system', slug, '
|
|
24
|
+
return system ? path.join(system, 'system', slug, 'flow.json') : own
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
// Devuelve el motivo real: "no existe" y "ambiguo" piden acciones distintas de quien lo lea.
|
|
@@ -32,11 +32,11 @@ function agentProblem(root, slug) {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
function read(root, slug) {
|
|
35
|
-
const file =
|
|
36
|
-
if (!fs.existsSync(file)) throw new Error(`no existe
|
|
35
|
+
const file = flowFile(root, slug)
|
|
36
|
+
if (!fs.existsSync(file)) throw new Error(`no existe flows/${slug}/flow.json`)
|
|
37
37
|
let manifest
|
|
38
38
|
try { manifest = JSON.parse(fs.readFileSync(file, 'utf8')) } catch (error) {
|
|
39
|
-
throw new Error(`
|
|
39
|
+
throw new Error(`flows/${slug}/flow.json inválido: ${error.message}`)
|
|
40
40
|
}
|
|
41
41
|
return { file, manifest }
|
|
42
42
|
}
|
|
@@ -86,9 +86,9 @@ function validate(root, slug) {
|
|
|
86
86
|
if (!(manifest.stages || []).some((stage) => stage.phase === 'discovery')) {
|
|
87
87
|
errors.push('falta al menos una etapa de discovery: un equipo sin descubrimiento no propone nada')
|
|
88
88
|
}
|
|
89
|
-
// Junto al
|
|
90
|
-
const workflow = path.join(path.dirname(
|
|
91
|
-
if (!fs.existsSync(workflow)) errors.push('falta
|
|
89
|
+
// Junto al flow.json que ganó la resolución, no en una ruta fija: el flow puede venir de system/.
|
|
90
|
+
const workflow = path.join(path.dirname(flowFile(root, slug)), 'FLOW.md')
|
|
91
|
+
if (!fs.existsSync(workflow)) errors.push('falta FLOW.md')
|
|
92
92
|
return { errors, stages: (manifest.stages || []).length, agents: agents.size, manifest }
|
|
93
93
|
}
|
|
94
94
|
|
|
@@ -96,7 +96,7 @@ function slugsIn(dir) {
|
|
|
96
96
|
try {
|
|
97
97
|
return fs.readdirSync(dir, { withFileTypes: true })
|
|
98
98
|
.filter((entry) => entry.isDirectory() && entry.name !== 'system')
|
|
99
|
-
.filter((entry) => fs.existsSync(path.join(dir, entry.name, '
|
|
99
|
+
.filter((entry) => fs.existsSync(path.join(dir, entry.name, 'flow.json')))
|
|
100
100
|
.map((entry) => entry.name)
|
|
101
101
|
} catch { return [] }
|
|
102
102
|
}
|
|
@@ -106,7 +106,7 @@ function slugsIn(dir) {
|
|
|
106
106
|
function list(root) {
|
|
107
107
|
const system = systemTeams(root)
|
|
108
108
|
const slugs = new Set([
|
|
109
|
-
...slugsIn(path.join(root, '
|
|
109
|
+
...slugsIn(path.join(root, 'flows')),
|
|
110
110
|
...(system ? slugsIn(path.join(system, 'system')) : []),
|
|
111
111
|
])
|
|
112
112
|
return [...slugs].sort()
|
package/engine/hooks/run.js
CHANGED
|
@@ -35,10 +35,10 @@ function fileOf(input) {
|
|
|
35
35
|
// encabezado en vez de aceptar cualquier `command`, para no leer un comando de shell como si fuera
|
|
36
36
|
// contenido de archivo.
|
|
37
37
|
function patchOf(input) {
|
|
38
|
-
const
|
|
39
|
-
const command = String(
|
|
40
|
-
const
|
|
41
|
-
return String(
|
|
38
|
+
const fields = input.tool_input || {}
|
|
39
|
+
const command = String(fields.command || '')
|
|
40
|
+
const envelope = command.startsWith('*** Begin Patch') ? command : ''
|
|
41
|
+
return String(fields.patch || fields.input || input.patch || envelope || '')
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
function filesOf(input) {
|
|
@@ -181,6 +181,51 @@ function generated(input) {
|
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
+
// Las dos formas de que una prueba deje de juzgar sin que nadie lo note: apagarla o borrarla. Ninguna
|
|
185
|
+
// sale roja —el runner informa una suite verde más corta—, así que el verde pasa de decir «el
|
|
186
|
+
// comportamiento está» a decir «nadie lo miró», y `verify` tampoco lo ve porque también lee exit codes.
|
|
187
|
+
// Lo que se inspecciona es el contenido entrante, no el archivo: una marca que ya estaba no la apagó
|
|
188
|
+
// este cambio.
|
|
189
|
+
const TEST_OFF = [
|
|
190
|
+
[/\b(?:describe|context|it|test|suite)\s*\.\s*(?:skip|only|todo)\b/, 'skip/only'],
|
|
191
|
+
[/\b[xf](?:it|test|describe|context)\s*[("'`]/, 'xit/fit'],
|
|
192
|
+
[/\bt\.Skip(?:Now)?\s*\(/, 't.Skip'],
|
|
193
|
+
[/@pytest\.mark\.(?:skip|skipif|xfail)\b/, 'pytest.mark.skip'],
|
|
194
|
+
[/@unittest\.skip/, 'unittest.skip'],
|
|
195
|
+
[/@(?:Ignore|Disabled)\b/, 'Ignore/Disabled'],
|
|
196
|
+
[/#\[ignore\]/, 'ignore'],
|
|
197
|
+
]
|
|
198
|
+
|
|
199
|
+
function isTestFile(raw) {
|
|
200
|
+
const file = raw.replace(/\\/g, '/')
|
|
201
|
+
const base = path.basename(file)
|
|
202
|
+
return /(?:^|\/)(?:tests?|specs?|__tests__)\//i.test(file)
|
|
203
|
+
|| /\.(?:test|spec)\.[jt]sx?$/i.test(base)
|
|
204
|
+
|| /_(?:test|spec)\.(?:go|py|rb|ts|js|jsx|tsx|rs|exs?)$/i.test(base)
|
|
205
|
+
|| /^test_.+\.py$/i.test(base)
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function testEvidence(input) {
|
|
209
|
+
if (process.env.OPS_TEST_EVIDENCE_OVERRIDE === '1') return
|
|
210
|
+
const why = 'Una prueba apagada no falla y una suite sin ella sale verde igual: el verde deja de ' +
|
|
211
|
+
'decir que el comportamiento está y pasa a decir que nadie lo miró.\n' +
|
|
212
|
+
'Si la aserción está mal, corregila; si el comportamiento cambió, cambialo junto con la prueba que ' +
|
|
213
|
+
'lo fija. Si tiene que quedar afuera igual —flake conocido, entorno que acá no existe—, es una ' +
|
|
214
|
+
'decisión con dueño: OPS_TEST_EVIDENCE_OVERRIDE=1 y que conste en el commit.'
|
|
215
|
+
for (const match of patchOf(input).matchAll(/^\*\*\* Delete File:\s*(.+)$/gm)) {
|
|
216
|
+
const removed = match[1].trim()
|
|
217
|
+
if (isTestFile(removed)) block(`${removed} borra una prueba.\n${why}`)
|
|
218
|
+
}
|
|
219
|
+
const content = contentOf(input)
|
|
220
|
+
if (!content) return
|
|
221
|
+
for (const raw of filesOf(input)) {
|
|
222
|
+
if (!isTestFile(raw)) continue
|
|
223
|
+
for (const [marca, nombre] of TEST_OFF) {
|
|
224
|
+
if (marca.test(content)) block(`${raw} apaga una prueba con ${nombre}.\n${why}`)
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
184
229
|
function workspaceBoundary(input) {
|
|
185
230
|
const root = findOpsRoot(process.env.OPS_ROOT || process.env.CLAUDE_PROJECT_DIR || cwdOf(input))
|
|
186
231
|
if (!root) return
|
|
@@ -413,14 +458,14 @@ function engineWrites(input) {
|
|
|
413
458
|
const guards = {
|
|
414
459
|
destructive, 'git-add': gitAdd, secrets, generated, 'workspace-boundary': workspaceBoundary,
|
|
415
460
|
migrations, dependencies, governance, verify, 'planning-drift': planningDrift,
|
|
416
|
-
'integration-snapshot': integrationSnapshot, engine: engineWrites,
|
|
461
|
+
'integration-snapshot': integrationSnapshot, engine: engineWrites, 'test-evidence': testEvidence,
|
|
417
462
|
}
|
|
418
463
|
|
|
419
464
|
// Grupos por evento: un runner corre el grupo entero en un solo proceso en lugar de un guard por hook.
|
|
420
465
|
const hookGroups = {
|
|
421
466
|
'pre-shell': ['destructive', 'git-add', 'dependencies', 'governance', 'verify'],
|
|
422
467
|
'pre-files': ['secrets', 'generated', 'workspace-boundary', 'engine', 'migrations',
|
|
423
|
-
'integration-snapshot'],
|
|
468
|
+
'integration-snapshot', 'test-evidence'],
|
|
424
469
|
stop: ['planning-drift'],
|
|
425
470
|
}
|
|
426
471
|
|
|
@@ -428,38 +473,63 @@ const hookMetadata = [
|
|
|
428
473
|
{
|
|
429
474
|
name: 'destructive',
|
|
430
475
|
event: 'PreToolUse · shell',
|
|
431
|
-
purpose: 'Bloquea publicación y comandos
|
|
476
|
+
purpose: 'Bloquea publicación y comandos capaces de destruir datos o el working tree.',
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
name: 'git-add',
|
|
480
|
+
event: 'PreToolUse · shell',
|
|
481
|
+
purpose: 'Impide `git add .`, `-A` y `--all`; exige rutas explícitas.',
|
|
432
482
|
},
|
|
433
|
-
{ name: 'git-add', event: 'PreToolUse · shell', purpose: 'Exige stagear rutas explícitas.' },
|
|
434
483
|
{
|
|
435
484
|
name: 'dependencies',
|
|
436
485
|
event: 'PreToolUse · shell',
|
|
437
|
-
purpose: 'Protege manifests
|
|
486
|
+
purpose: 'Protege manifests y lockfiles; bloquea publicar e instalar global.',
|
|
438
487
|
},
|
|
439
488
|
{
|
|
440
489
|
name: 'governance',
|
|
441
490
|
event: 'PreToolUse · shell',
|
|
442
491
|
purpose: 'Impide commitear cambios de gobernanza sin aprobación.',
|
|
443
492
|
},
|
|
444
|
-
{
|
|
445
|
-
|
|
493
|
+
{
|
|
494
|
+
name: 'verify',
|
|
495
|
+
event: 'PreToolUse · shell',
|
|
496
|
+
purpose: 'Ejecuta los gates del stack y comprueba drift generado antes de un commit.',
|
|
497
|
+
},
|
|
498
|
+
{
|
|
499
|
+
name: 'secrets',
|
|
500
|
+
event: 'PreToolUse · files',
|
|
501
|
+
purpose: 'Bloquea escribir secretos, claves privadas y credenciales en texto plano.',
|
|
502
|
+
},
|
|
446
503
|
{ name: 'generated', event: 'PreToolUse · files', purpose: 'Impide editar código generado manualmente.' },
|
|
447
|
-
{
|
|
504
|
+
{
|
|
505
|
+
name: 'workspace-boundary',
|
|
506
|
+
event: 'PreToolUse · files',
|
|
507
|
+
purpose: 'Limita escrituras a las raíces declaradas en ops.config.json.',
|
|
508
|
+
},
|
|
448
509
|
{
|
|
449
510
|
name: 'engine',
|
|
450
511
|
event: 'PreToolUse · files',
|
|
451
|
-
purpose: 'Impide editar el motor instalado
|
|
512
|
+
purpose: 'Impide editar el motor instalado por npm. Inerte en el propio toolkit.',
|
|
513
|
+
},
|
|
514
|
+
{
|
|
515
|
+
name: 'migrations',
|
|
516
|
+
event: 'PreToolUse · files',
|
|
517
|
+
purpose: 'Protege migraciones existentes y bloquea SQL destructivo sin override.',
|
|
452
518
|
},
|
|
453
|
-
{ name: 'migrations', event: 'PreToolUse · files', purpose: 'Protege migraciones existentes y SQL destructivo.' },
|
|
454
519
|
{
|
|
455
520
|
name: 'integration-snapshot',
|
|
456
521
|
event: 'PreToolUse · files',
|
|
457
522
|
purpose: 'Protege snapshots administrados por integraciones.',
|
|
458
523
|
},
|
|
524
|
+
{
|
|
525
|
+
name: 'test-evidence',
|
|
526
|
+
event: 'PreToolUse · files',
|
|
527
|
+
purpose: 'Impide apagar o borrar la prueba que juzga el cambio.',
|
|
528
|
+
},
|
|
459
529
|
{
|
|
460
530
|
name: 'planning-drift',
|
|
461
531
|
event: 'Stop / SessionEnd',
|
|
462
|
-
purpose: 'Evita cerrar con planning o integraciones desalineados.',
|
|
532
|
+
purpose: 'Evita cerrar una sesión con planning o integraciones desalineados.',
|
|
463
533
|
},
|
|
464
534
|
]
|
|
465
535
|
|
|
@@ -381,7 +381,20 @@ const slugify = (value) => String(value).normalize('NFD').replace(/[\u0300-\u036
|
|
|
381
381
|
.replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '').slice(0, 70)
|
|
382
382
|
const oneLine = (value) => String(value).replace(/\s+/g, ' ').trim()
|
|
383
383
|
|
|
384
|
+
// En cuál de tres estados está el proveedor: `ready`, `incomplete` o `unreadable`. Lee su propio
|
|
385
|
+
// `config.json`, que es donde vive la decisión, y no el registro: un proveedor listado y apagado no es
|
|
386
|
+
// un proveedor disponible.
|
|
387
|
+
function providerState(root, name) {
|
|
388
|
+
const configFile = path.join(root, 'integrations', name, 'config.json')
|
|
389
|
+
let raw
|
|
390
|
+
// Ausente y roto son distintos y decían lo mismo. Al que falta hay que completarlo; al que no parsea,
|
|
391
|
+
// mandarlo a completar manda a reescribir lo que ya estaba escrito, y el error queda sin nombrar.
|
|
392
|
+
try { raw = fs.readFileSync(configFile, 'utf8') } catch { return 'incomplete' }
|
|
393
|
+
try { return JSON.parse(raw).enabled === true ? 'ready' : 'incomplete' } catch { return 'unreadable' }
|
|
394
|
+
}
|
|
395
|
+
|
|
384
396
|
module.exports = {
|
|
397
|
+
providerState,
|
|
385
398
|
STATES,
|
|
386
399
|
adapter,
|
|
387
400
|
frontmatter,
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
const crypto = require('node:crypto')
|
|
4
4
|
const fs = require('node:fs')
|
|
5
5
|
const path = require('node:path')
|
|
6
|
+
const { frontmatter } = require('../core/frontmatter')
|
|
6
7
|
const F = require('../core/files')
|
|
7
8
|
|
|
8
9
|
const STATES = ['context', 'pending', 'ready', 'rejected', 'promoted']
|
|
@@ -28,16 +29,6 @@ const sha256 = (value) => {
|
|
|
28
29
|
return crypto.createHash('sha256').update(String(value)).digest('hex')
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
function frontmatter(text) {
|
|
32
|
-
const block = (String(text).match(/^---\s*\n([\s\S]*?)\n---/) || [])[1] || ''
|
|
33
|
-
const values = {}
|
|
34
|
-
for (const line of block.split('\n')) {
|
|
35
|
-
const match = line.match(/^([A-Za-z][\w-]*):\s*(.*)$/)
|
|
36
|
-
if (match) values[match[1]] = match[2].trim().replace(/^['"]|['"]$/g, '')
|
|
37
|
-
}
|
|
38
|
-
return values
|
|
39
|
-
}
|
|
40
|
-
|
|
41
32
|
function replaceField(text, name, value) {
|
|
42
33
|
const line = new RegExp(`^${name}:.*$`, 'm')
|
|
43
34
|
return line.test(text) ? text.replace(line, `${name}: ${value}`) : text
|