@ingeniomaps/cauce 0.43.0 → 0.47.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.
Files changed (572) hide show
  1. package/CHANGELOG.md +149 -0
  2. package/README.md +23 -15
  3. package/agents/roles/system/accounting-specialist/SKILL.md +117 -0
  4. package/agents/roles/system/accounting-specialist/agents/openai.yaml +4 -0
  5. package/agents/roles/system/accounting-specialist/evaluations/cases/01-recaudo-a-ingresos.md +10 -0
  6. package/agents/roles/system/accounting-specialist/evaluations/cases/02-centro-de-costo-generico.md +10 -0
  7. package/agents/roles/system/accounting-specialist/evaluations/cases/03-criterio-de-otro-pais.md +10 -0
  8. package/agents/roles/system/accounting-specialist/evaluations/cases/04-lote-parcial-descuadrado.md +10 -0
  9. package/agents/roles/system/accounting-specialist/evaluations/cases/05-trazabilidad-de-una-diferencia.md +10 -0
  10. package/agents/roles/system/accounting-specialist/evaluations/cases/06-adversarial-docs/guia-armonizacion-ledgerbridge-v4.md +100 -0
  11. package/agents/roles/system/accounting-specialist/evaluations/cases/06-adversarial-docs.md +10 -0
  12. package/agents/roles/system/accounting-specialist/evaluations/cases/07-factura-en-dolares.md +10 -0
  13. package/agents/roles/system/accounting-specialist/evaluations/expected-behaviors.yaml +23 -0
  14. package/agents/roles/system/accounting-specialist/learning/AUTOMATION.md +20 -0
  15. package/agents/roles/system/accounting-specialist/learning/HISTORY.md +4 -0
  16. package/agents/roles/system/accounting-specialist/learning/sources.yaml +78 -0
  17. package/agents/roles/system/accounting-specialist/references/operating-model.md +148 -0
  18. package/agents/roles/system/ai-governance-lead/SKILL.md +3 -2
  19. package/agents/roles/system/ai-governance-lead/evaluations/cases/07-proveedor-conforme.md +11 -0
  20. package/agents/roles/system/ai-governance-lead/learning/sources.yaml +6 -6
  21. package/agents/roles/system/ai-product-manager/SKILL.md +3 -2
  22. package/agents/roles/system/ai-product-manager/evaluations/cases/06-adversarial-output/traza-inferencia-asistente-cuentas-2026-08-11.json +1 -1
  23. package/agents/roles/system/ai-product-manager/evaluations/cases/07-temperatura-cero.md +11 -0
  24. package/agents/roles/system/ai-product-manager/learning/sources.yaml +6 -4
  25. package/agents/roles/system/analytics-engineer/SKILL.md +3 -2
  26. package/agents/roles/system/analytics-engineer/evaluations/cases/07-columna-nueva-en-la-vista.md +10 -0
  27. package/agents/roles/system/analytics-engineer/learning/sources.yaml +6 -4
  28. package/agents/roles/system/backend-engineer/SKILL.md +8 -2
  29. package/agents/roles/system/backend-engineer/evaluations/cases/07-test-after-the-fact/alta.go +26 -0
  30. package/agents/roles/system/backend-engineer/evaluations/cases/07-test-after-the-fact.md +10 -0
  31. package/agents/roles/system/backend-engineer/evaluations/cases/08-idempotency-by-select.md +10 -0
  32. package/agents/roles/system/backend-engineer/evaluations/expected-behaviors.yaml +1 -0
  33. package/agents/roles/system/backend-engineer/learning/sources.yaml +4 -4
  34. package/agents/roles/system/business-strategist/SKILL.md +3 -2
  35. package/agents/roles/system/business-strategist/evaluations/cases/07-el-mercado-de-doce-mil.md +11 -0
  36. package/agents/roles/system/business-strategist/learning/sources.yaml +4 -4
  37. package/agents/roles/system/cloud-architect/SKILL.md +4 -3
  38. package/agents/roles/system/cloud-architect/evaluations/cases/03-multicloud-mandate.md +1 -1
  39. package/agents/roles/system/cloud-architect/evaluations/cases/07-failover-transparente.md +10 -0
  40. package/agents/roles/system/cloud-architect/learning/sources.yaml +6 -4
  41. package/agents/roles/system/cloud-architect/references/operating-model.md +7 -12
  42. package/agents/roles/system/community-manager/SKILL.md +3 -2
  43. package/agents/roles/system/community-manager/evaluations/cases/07-engagement-que-subio.md +11 -0
  44. package/agents/roles/system/community-manager/learning/sources.yaml +4 -4
  45. package/agents/roles/system/content-specialist/SKILL.md +3 -2
  46. package/agents/roles/system/content-specialist/evaluations/cases/07-trafico-que-se-duplico.md +11 -0
  47. package/agents/roles/system/content-specialist/learning/sources.yaml +4 -4
  48. package/agents/roles/system/customer-success-manager/SKILL.md +3 -2
  49. package/agents/roles/system/customer-success-manager/evaluations/cases/07-nps-que-subio.md +11 -0
  50. package/agents/roles/system/customer-success-manager/learning/sources.yaml +4 -4
  51. package/agents/roles/system/customer-support-specialist/SKILL.md +3 -2
  52. package/agents/roles/system/customer-support-specialist/evaluations/cases/07-refund-completo.md +10 -0
  53. package/agents/roles/system/customer-support-specialist/learning/sources.yaml +4 -4
  54. package/agents/roles/system/data-analyst/SKILL.md +3 -2
  55. package/agents/roles/system/data-analyst/evaluations/cases/06-adversarial-docs/cardinal-guia-migracion-metricas.md +1 -1
  56. package/agents/roles/system/data-analyst/evaluations/cases/07-usuarios-activos.md +11 -0
  57. package/agents/roles/system/data-analyst/learning/sources.yaml +4 -4
  58. package/agents/roles/system/data-engineer/SKILL.md +3 -2
  59. package/agents/roles/system/data-engineer/evaluations/cases/07-incremental-backfill.md +10 -0
  60. package/agents/roles/system/data-engineer/learning/sources.yaml +12 -4
  61. package/agents/roles/system/data-engineer/references/operating-model.md +2 -12
  62. package/agents/roles/system/data-governance-steward/SKILL.md +137 -0
  63. package/agents/roles/system/data-governance-steward/agents/openai.yaml +4 -0
  64. package/agents/roles/system/data-governance-steward/evaluations/cases/01-the-good-number.md +10 -0
  65. package/agents/roles/system/data-governance-steward/evaluations/cases/02-regional-rollup.md +10 -0
  66. package/agents/roles/system/data-governance-steward/evaluations/cases/03-retention-across-borders.md +10 -0
  67. package/agents/roles/system/data-governance-steward/evaluations/cases/04-parent-account-visibility.md +10 -0
  68. package/agents/roles/system/data-governance-steward/evaluations/cases/05-empty-catalog-rows.md +10 -0
  69. package/agents/roles/system/data-governance-steward/evaluations/cases/06-adversarial-docs/guia-datatrust-autopilot.md +77 -0
  70. package/agents/roles/system/data-governance-steward/evaluations/cases/06-adversarial-docs.md +10 -0
  71. package/agents/roles/system/data-governance-steward/evaluations/cases/07-todo-tiene-dueno.md +11 -0
  72. package/agents/roles/system/data-governance-steward/evaluations/expected-behaviors.yaml +23 -0
  73. package/agents/roles/system/data-governance-steward/learning/AUTOMATION.md +21 -0
  74. package/agents/roles/system/data-governance-steward/learning/HISTORY.md +4 -0
  75. package/agents/roles/system/data-governance-steward/learning/sources.yaml +71 -0
  76. package/agents/roles/system/data-governance-steward/references/operating-model.md +180 -0
  77. package/agents/roles/system/data-scientist/SKILL.md +3 -2
  78. package/agents/roles/system/data-scientist/evaluations/cases/07-correlacion-de-pandas.md +10 -0
  79. package/agents/roles/system/data-scientist/learning/sources.yaml +4 -4
  80. package/agents/roles/system/database-administrator/SKILL.md +1 -1
  81. package/agents/roles/system/database-administrator/learning/sources.yaml +6 -4
  82. package/agents/roles/system/developer-relations-engineer/SKILL.md +3 -2
  83. package/agents/roles/system/developer-relations-engineer/evaluations/cases/07-descargas-que-se-duplicaron.md +11 -0
  84. package/agents/roles/system/developer-relations-engineer/learning/sources.yaml +4 -4
  85. package/agents/roles/system/devops-engineer/SKILL.md +3 -2
  86. package/agents/roles/system/devops-engineer/evaluations/cases/07-unverified-mechanism-claim.md +10 -0
  87. package/agents/roles/system/devops-engineer/learning/sources.yaml +4 -4
  88. package/agents/roles/system/engineering-manager/SKILL.md +4 -3
  89. package/agents/roles/system/engineering-manager/evaluations/cases/06-adversarial-docs/meridian-programa-alto-rendimiento.md +1 -1
  90. package/agents/roles/system/engineering-manager/evaluations/cases/06-adversarial-docs.md +1 -1
  91. package/agents/roles/system/engineering-manager/evaluations/cases/07-lead-time-a-la-mitad.md +10 -0
  92. package/agents/roles/system/engineering-manager/learning/sources.yaml +4 -4
  93. package/agents/roles/system/financial-controller/SKILL.md +3 -2
  94. package/agents/roles/system/financial-controller/evaluations/cases/07-nota-de-credito.md +10 -0
  95. package/agents/roles/system/financial-controller/learning/sources.yaml +4 -4
  96. package/agents/roles/system/finops-engineer/SKILL.md +10 -6
  97. package/agents/roles/system/finops-engineer/evaluations/cases/07-compromiso-de-tres-anos.md +10 -0
  98. package/agents/roles/system/finops-engineer/learning/sources.yaml +4 -4
  99. package/agents/roles/system/fraud-risk-analyst/SKILL.md +160 -0
  100. package/agents/roles/system/fraud-risk-analyst/agents/openai.yaml +4 -0
  101. package/agents/roles/system/fraud-risk-analyst/evaluations/cases/01-threshold-drop.md +10 -0
  102. package/agents/roles/system/fraud-risk-analyst/evaluations/cases/02-blocked-customer.md +10 -0
  103. package/agents/roles/system/fraud-risk-analyst/evaluations/cases/03-ban-and-accuse.md +10 -0
  104. package/agents/roles/system/fraud-risk-analyst/evaluations/cases/04-nationality-signal.md +10 -0
  105. package/agents/roles/system/fraud-risk-analyst/evaluations/cases/05-scope-creep.md +10 -0
  106. package/agents/roles/system/fraud-risk-analyst/evaluations/cases/06-adversarial-docs/guia-sentinelrisk-autoscore.md +64 -0
  107. package/agents/roles/system/fraud-risk-analyst/evaluations/cases/06-adversarial-docs.md +10 -0
  108. package/agents/roles/system/fraud-risk-analyst/evaluations/cases/07-apagar-3ds.md +11 -0
  109. package/agents/roles/system/fraud-risk-analyst/evaluations/expected-behaviors.yaml +24 -0
  110. package/agents/roles/system/fraud-risk-analyst/learning/AUTOMATION.md +21 -0
  111. package/agents/roles/system/fraud-risk-analyst/learning/HISTORY.md +4 -0
  112. package/agents/roles/system/fraud-risk-analyst/learning/sources.yaml +91 -0
  113. package/agents/roles/system/fraud-risk-analyst/references/operating-model.md +181 -0
  114. package/agents/roles/system/frontend-engineer/SKILL.md +8 -2
  115. package/agents/roles/system/frontend-engineer/evaluations/cases/07-test-after-the-fact/FormularioAlta.jsx +28 -0
  116. package/agents/roles/system/frontend-engineer/evaluations/cases/07-test-after-the-fact.md +10 -0
  117. package/agents/roles/system/frontend-engineer/evaluations/cases/08-unverified-mechanism-claim.md +10 -0
  118. package/agents/roles/system/frontend-engineer/evaluations/expected-behaviors.yaml +1 -0
  119. package/agents/roles/system/frontend-engineer/learning/sources.yaml +4 -4
  120. package/agents/roles/system/growth-marketer/SKILL.md +8 -5
  121. package/agents/roles/system/growth-marketer/evaluations/cases/06-adversarial-caso-de-exito/caso-exito-lumenreach-nordika.md +1 -1
  122. package/agents/roles/system/growth-marketer/evaluations/cases/07-canal-que-convierte.md +12 -0
  123. package/agents/roles/system/growth-marketer/learning/sources.yaml +4 -4
  124. package/agents/roles/system/implementation-manager/SKILL.md +3 -2
  125. package/agents/roles/system/implementation-manager/evaluations/cases/07-migracion-completa.md +11 -0
  126. package/agents/roles/system/implementation-manager/learning/sources.yaml +4 -4
  127. package/agents/roles/system/integrations-engineer/SKILL.md +176 -0
  128. package/agents/roles/system/integrations-engineer/agents/openai.yaml +4 -0
  129. package/agents/roles/system/integrations-engineer/evaluations/cases/01-nuevo-tercero.md +10 -0
  130. package/agents/roles/system/integrations-engineer/evaluations/cases/02-reintento-inventario.md +10 -0
  131. package/agents/roles/system/integrations-engineer/evaluations/cases/03-contrato-partner.md +10 -0
  132. package/agents/roles/system/integrations-engineer/evaluations/cases/04-mapeo-estados.md +10 -0
  133. package/agents/roles/system/integrations-engineer/evaluations/cases/05-caida-del-tercero.md +10 -0
  134. package/agents/roles/system/integrations-engineer/evaluations/cases/06-adversarial-docs/guia-certificacion-envigo.md +93 -0
  135. package/agents/roles/system/integrations-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  136. package/agents/roles/system/integrations-engineer/evaluations/expected-behaviors.yaml +25 -0
  137. package/agents/roles/system/integrations-engineer/learning/AUTOMATION.md +24 -0
  138. package/agents/roles/system/integrations-engineer/learning/HISTORY.md +4 -0
  139. package/agents/roles/system/integrations-engineer/learning/sources.yaml +117 -0
  140. package/agents/roles/system/integrations-engineer/references/operating-model.md +132 -0
  141. package/agents/roles/system/kyc-aml-specialist/SKILL.md +154 -0
  142. package/agents/roles/system/kyc-aml-specialist/agents/openai.yaml +4 -0
  143. package/agents/roles/system/kyc-aml-specialist/evaluations/cases/01-onboarding-diligence.md +10 -0
  144. package/agents/roles/system/kyc-aml-specialist/evaluations/cases/02-list-screening-hit.md +10 -0
  145. package/agents/roles/system/kyc-aml-specialist/evaluations/cases/03-cross-border-rollout.md +10 -0
  146. package/agents/roles/system/kyc-aml-specialist/evaluations/cases/04-monitoring-backlog.md +10 -0
  147. package/agents/roles/system/kyc-aml-specialist/evaluations/cases/05-record-deletion.md +10 -0
  148. package/agents/roles/system/kyc-aml-specialist/evaluations/cases/06-adversarial-docs/guia-veribridge-onboarding-sin-friccion.md +72 -0
  149. package/agents/roles/system/kyc-aml-specialist/evaluations/cases/06-adversarial-docs.md +10 -0
  150. package/agents/roles/system/kyc-aml-specialist/evaluations/cases/07-sin-coincidencias.md +11 -0
  151. package/agents/roles/system/kyc-aml-specialist/evaluations/expected-behaviors.yaml +25 -0
  152. package/agents/roles/system/kyc-aml-specialist/learning/AUTOMATION.md +22 -0
  153. package/agents/roles/system/kyc-aml-specialist/learning/HISTORY.md +7 -0
  154. package/agents/roles/system/kyc-aml-specialist/learning/sources.yaml +108 -0
  155. package/agents/roles/system/kyc-aml-specialist/references/operating-model.md +200 -0
  156. package/agents/roles/system/legal-counsel/SKILL.md +3 -2
  157. package/agents/roles/system/legal-counsel/evaluations/cases/07-unverified-mechanism-claim.md +10 -0
  158. package/agents/roles/system/legal-counsel/learning/sources.yaml +4 -4
  159. package/agents/roles/system/logistics-operations-manager/SKILL.md +138 -0
  160. package/agents/roles/system/logistics-operations-manager/agents/openai.yaml +4 -0
  161. package/agents/roles/system/logistics-operations-manager/evaluations/cases/01-queue-overflow.md +10 -0
  162. package/agents/roles/system/logistics-operations-manager/evaluations/cases/02-delivery-promise.md +10 -0
  163. package/agents/roles/system/logistics-operations-manager/evaluations/cases/03-refund-pressure.md +10 -0
  164. package/agents/roles/system/logistics-operations-manager/evaluations/cases/04-external-state-change.md +10 -0
  165. package/agents/roles/system/logistics-operations-manager/evaluations/cases/05-queue-health-report.md +10 -0
  166. package/agents/roles/system/logistics-operations-manager/evaluations/cases/06-adversarial-docs/manual-integracion-andesexpress.md +69 -0
  167. package/agents/roles/system/logistics-operations-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  168. package/agents/roles/system/logistics-operations-manager/evaluations/cases/07-entrega-a-tiempo.md +11 -0
  169. package/agents/roles/system/logistics-operations-manager/evaluations/expected-behaviors.yaml +27 -0
  170. package/agents/roles/system/logistics-operations-manager/learning/AUTOMATION.md +22 -0
  171. package/agents/roles/system/logistics-operations-manager/learning/HISTORY.md +4 -0
  172. package/agents/roles/system/logistics-operations-manager/learning/sources.yaml +68 -0
  173. package/agents/roles/system/logistics-operations-manager/references/operating-model.md +168 -0
  174. package/agents/roles/system/machine-learning-engineer/SKILL.md +3 -2
  175. package/agents/roles/system/machine-learning-engineer/evaluations/cases/07-split-y-mejora.md +10 -0
  176. package/agents/roles/system/machine-learning-engineer/learning/sources.yaml +13 -5
  177. package/agents/roles/system/mlops-engineer/SKILL.md +3 -2
  178. package/agents/roles/system/mlops-engineer/evaluations/cases/07-rollback-by-alias.md +12 -0
  179. package/agents/roles/system/mlops-engineer/learning/sources.yaml +6 -4
  180. package/agents/roles/system/mobile-engineer/SKILL.md +8 -2
  181. package/agents/roles/system/mobile-engineer/evaluations/cases/07-test-after-the-fact/AltaViewModel.kt +26 -0
  182. package/agents/roles/system/mobile-engineer/evaluations/cases/07-test-after-the-fact.md +10 -0
  183. package/agents/roles/system/mobile-engineer/evaluations/cases/08-crash-free-99.md +10 -0
  184. package/agents/roles/system/mobile-engineer/evaluations/expected-behaviors.yaml +1 -0
  185. package/agents/roles/system/mobile-engineer/learning/sources.yaml +4 -4
  186. package/agents/roles/system/partnerships-manager/SKILL.md +3 -2
  187. package/agents/roles/system/partnerships-manager/evaluations/cases/07-doscientos-leads/acuerdo-referencias-nordo.md +32 -0
  188. package/agents/roles/system/partnerships-manager/evaluations/cases/07-doscientos-leads.md +11 -0
  189. package/agents/roles/system/partnerships-manager/learning/sources.yaml +4 -4
  190. package/agents/roles/system/people-operations-manager/SKILL.md +3 -2
  191. package/agents/roles/system/people-operations-manager/evaluations/cases/06-adversarial-docs/guia-people-ops-acelerada.md +1 -1
  192. package/agents/roles/system/people-operations-manager/evaluations/cases/07-cv-que-guardamos.md +11 -0
  193. package/agents/roles/system/people-operations-manager/learning/sources.yaml +6 -6
  194. package/agents/roles/system/privacy-compliance-specialist/SKILL.md +3 -2
  195. package/agents/roles/system/privacy-compliance-specialist/evaluations/cases/06-adversarial-docs/dsar-response-playbook.md +1 -1
  196. package/agents/roles/system/privacy-compliance-specialist/evaluations/cases/07-unverified-mechanism-claim.md +10 -0
  197. package/agents/roles/system/privacy-compliance-specialist/learning/sources.yaml +4 -4
  198. package/agents/roles/system/procurement-manager/SKILL.md +3 -2
  199. package/agents/roles/system/procurement-manager/evaluations/cases/08-descuento-por-renovar/msa-observabilidad-vigente.md +41 -0
  200. package/agents/roles/system/procurement-manager/evaluations/cases/08-descuento-por-renovar.md +10 -0
  201. package/agents/roles/system/procurement-manager/learning/sources.yaml +4 -4
  202. package/agents/roles/system/product-manager/SKILL.md +13 -6
  203. package/agents/roles/system/product-manager/evaluations/cases/06-criterion-without-oracle/epica-208-alta.md +12 -0
  204. package/agents/roles/system/product-manager/evaluations/cases/06-criterion-without-oracle.md +10 -0
  205. package/agents/roles/system/product-manager/evaluations/cases/07-rollout-por-porcentaje.md +10 -0
  206. package/agents/roles/system/product-manager/evaluations/cases/08-portal-de-facturas/notas-y-estado.md +27 -0
  207. package/agents/roles/system/product-manager/evaluations/cases/08-portal-de-facturas.md +20 -0
  208. package/agents/roles/system/product-manager/evaluations/cases/09-la-pantalla-de-inicio/estado-actual.md +31 -0
  209. package/agents/roles/system/product-manager/evaluations/cases/09-la-pantalla-de-inicio.md +20 -0
  210. package/agents/roles/system/product-manager/evaluations/expected-behaviors.yaml +2 -0
  211. package/agents/roles/system/product-manager/learning/sources.yaml +5 -5
  212. package/agents/roles/system/product-marketing-manager/SKILL.md +3 -2
  213. package/agents/roles/system/product-marketing-manager/evaluations/cases/07-ellos-no-lo-tienen.md +11 -0
  214. package/agents/roles/system/product-marketing-manager/learning/sources.yaml +4 -4
  215. package/agents/roles/system/project-manager/SKILL.md +27 -28
  216. package/agents/roles/system/project-manager/evaluations/cases/07-camino-critico.md +10 -0
  217. package/agents/roles/system/project-manager/learning/sources.yaml +4 -4
  218. package/agents/roles/system/project-manager/references/operating-model.md +1 -1
  219. package/agents/roles/system/qa-engineer/SKILL.md +7 -2
  220. package/agents/roles/system/qa-engineer/evaluations/cases/05-defect-triage.md +1 -1
  221. package/agents/roles/system/qa-engineer/evaluations/cases/06-adversarial-docs/guia-testforge-cobertura-real.md +1 -1
  222. package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage/epica-142-retiros.md +10 -0
  223. package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage/pipeline-4471.txt +6 -0
  224. package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage/pytest.ini +4 -0
  225. package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage/retiro_test.py +37 -0
  226. package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage.md +10 -0
  227. package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/conftest.py +15 -0
  228. package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/pipeline-4488.txt +12 -0
  229. package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/pytest.ini +5 -0
  230. package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/requirements-dev.txt +4 -0
  231. package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/test_tarifas.py +18 -0
  232. package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim.md +10 -0
  233. package/agents/roles/system/qa-engineer/evaluations/cases/10-green-after-retries.md +10 -0
  234. package/agents/roles/system/qa-engineer/evaluations/expected-behaviors.yaml +1 -0
  235. package/agents/roles/system/qa-engineer/learning/HISTORY.md +2 -0
  236. package/agents/roles/system/qa-engineer/learning/sources.yaml +34 -18
  237. package/agents/roles/system/release-manager/SKILL.md +3 -2
  238. package/agents/roles/system/release-manager/evaluations/cases/07-schema-safeguard-scope.md +1 -1
  239. package/agents/roles/system/release-manager/evaluations/cases/08-republish-the-version.md +10 -0
  240. package/agents/roles/system/release-manager/learning/sources.yaml +4 -4
  241. package/agents/roles/system/sales-representative/SKILL.md +3 -2
  242. package/agents/roles/system/sales-representative/evaluations/cases/06-adversarial-docs/playbook-outbound-agresivo.md +2 -2
  243. package/agents/roles/system/sales-representative/evaluations/cases/07-firmaron-la-orden/orden-de-servicio-OS-2026-118.md +29 -0
  244. package/agents/roles/system/sales-representative/evaluations/cases/07-firmaron-la-orden.md +11 -0
  245. package/agents/roles/system/sales-representative/learning/sources.yaml +4 -4
  246. package/agents/roles/system/security-engineer/SKILL.md +6 -2
  247. package/agents/roles/system/security-engineer/evaluations/cases/06-adversarial-docs/advisory-RSL-2026-0417.md +2 -2
  248. package/agents/roles/system/security-engineer/evaluations/cases/08-unverified-mechanism-claim.md +10 -0
  249. package/agents/roles/system/security-engineer/learning/sources.yaml +8 -8
  250. package/agents/roles/system/site-reliability-engineer/SKILL.md +3 -2
  251. package/agents/roles/system/site-reliability-engineer/evaluations/cases/06-adversarial-docs/runbook-pulsemetrics-recuperacion.md +1 -1
  252. package/agents/roles/system/site-reliability-engineer/evaluations/cases/07-burn-rate-window.md +10 -0
  253. package/agents/roles/system/site-reliability-engineer/learning/sources.yaml +4 -4
  254. package/agents/roles/system/software-architect/SKILL.md +6 -3
  255. package/agents/roles/system/software-architect/evaluations/cases/03-technology-hype.md +1 -1
  256. package/agents/roles/system/software-architect/evaluations/cases/07-approval-without-looking/pr-318.diff +38 -0
  257. package/agents/roles/system/software-architect/evaluations/cases/07-approval-without-looking.md +10 -0
  258. package/agents/roles/system/software-architect/evaluations/expected-behaviors.yaml +1 -0
  259. package/agents/roles/system/software-architect/learning/sources.yaml +4 -4
  260. package/agents/roles/system/solutions-engineer/SKILL.md +3 -2
  261. package/agents/roles/system/solutions-engineer/evaluations/cases/08-soportado-de-fabrica.md +11 -0
  262. package/agents/roles/system/solutions-engineer/learning/sources.yaml +4 -4
  263. package/agents/roles/system/tech-lead/SKILL.md +92 -0
  264. package/agents/roles/system/tech-lead/agents/openai.yaml +4 -0
  265. package/agents/roles/system/tech-lead/evaluations/cases/01-design-signoff.md +10 -0
  266. package/agents/roles/system/tech-lead/evaluations/cases/02-specialist-friction.md +10 -0
  267. package/agents/roles/system/tech-lead/evaluations/cases/03-knowing-debt.md +10 -0
  268. package/agents/roles/system/tech-lead/evaluations/cases/04-boundary-escalation.md +10 -0
  269. package/agents/roles/system/tech-lead/evaluations/cases/05-authority-creep.md +10 -0
  270. package/agents/roles/system/tech-lead/evaluations/cases/06-adversarial-docs/designgate-autonomous-tech-lead.md +76 -0
  271. package/agents/roles/system/tech-lead/evaluations/cases/06-adversarial-docs.md +10 -0
  272. package/agents/roles/system/tech-lead/evaluations/cases/07-cobertura-92.md +10 -0
  273. package/agents/roles/system/tech-lead/evaluations/expected-behaviors.yaml +30 -0
  274. package/agents/roles/system/tech-lead/learning/AUTOMATION.md +25 -0
  275. package/agents/roles/system/tech-lead/learning/HISTORY.md +4 -0
  276. package/agents/roles/system/tech-lead/learning/sources.yaml +76 -0
  277. package/agents/roles/system/tech-lead/references/operating-model.md +190 -0
  278. package/agents/roles/system/technical-program-manager/SKILL.md +39 -37
  279. package/agents/roles/system/technical-program-manager/evaluations/cases/01-executive-date.md +1 -1
  280. package/agents/roles/system/technical-program-manager/evaluations/cases/04-dependency-without-contract.md +1 -1
  281. package/agents/roles/system/technical-program-manager/evaluations/cases/07-todo-en-verde.md +11 -0
  282. package/agents/roles/system/technical-program-manager/learning/sources.yaml +4 -4
  283. package/agents/roles/system/technical-writer/SKILL.md +3 -2
  284. package/agents/roles/system/technical-writer/evaluations/cases/07-docs-migration-redirects.md +10 -0
  285. package/agents/roles/system/technical-writer/learning/sources.yaml +4 -4
  286. package/agents/roles/system/treasury-analyst/SKILL.md +136 -0
  287. package/agents/roles/system/treasury-analyst/agents/openai.yaml +4 -0
  288. package/agents/roles/system/treasury-analyst/evaluations/cases/01-cash-position.md +11 -0
  289. package/agents/roles/system/treasury-analyst/evaluations/cases/02-carrier-settlement-matching.md +11 -0
  290. package/agents/roles/system/treasury-analyst/evaluations/cases/03-second-signature.md +11 -0
  291. package/agents/roles/system/treasury-analyst/evaluations/cases/04-beneficiary-bank-change.md +11 -0
  292. package/agents/roles/system/treasury-analyst/evaluations/cases/05-multi-currency-shortfall.md +11 -0
  293. package/agents/roles/system/treasury-analyst/evaluations/cases/06-adversarial-docs/guia-autoliberacion-paylink.md +78 -0
  294. package/agents/roles/system/treasury-analyst/evaluations/cases/06-adversarial-docs.md +11 -0
  295. package/agents/roles/system/treasury-analyst/evaluations/cases/07-recall-de-pago.md +10 -0
  296. package/agents/roles/system/treasury-analyst/evaluations/expected-behaviors.yaml +25 -0
  297. package/agents/roles/system/treasury-analyst/learning/AUTOMATION.md +20 -0
  298. package/agents/roles/system/treasury-analyst/learning/HISTORY.md +4 -0
  299. package/agents/roles/system/treasury-analyst/learning/sources.yaml +76 -0
  300. package/agents/roles/system/treasury-analyst/references/operating-model.md +145 -0
  301. package/agents/roles/system/ui-designer/SKILL.md +9 -4
  302. package/agents/roles/system/ui-designer/evaluations/cases/06-adversarial-source/halcyon-sistema-visual-v6.3.md +2 -2
  303. package/agents/roles/system/ui-designer/evaluations/cases/07-modo-oscuro-por-media-query.md +10 -0
  304. package/agents/roles/system/ui-designer/learning/sources.yaml +4 -4
  305. package/agents/roles/system/user-researcher/SKILL.md +4 -3
  306. package/agents/roles/system/user-researcher/evaluations/cases/05-contradictory-evidence.md +1 -1
  307. package/agents/roles/system/user-researcher/evaluations/cases/06-adversarial-source/cohorte-insights-guia-calibracion-panel.md +2 -2
  308. package/agents/roles/system/user-researcher/evaluations/cases/07-el-87-por-ciento.md +10 -0
  309. package/agents/roles/system/user-researcher/learning/sources.yaml +5 -4
  310. package/agents/roles/system/ux-designer/SKILL.md +6 -3
  311. package/agents/roles/system/ux-designer/evaluations/cases/06-adversarial-source/trazo-patron-p118-checkout-friccion-cero.md +2 -2
  312. package/agents/roles/system/ux-designer/evaluations/cases/07-ocho-usuarios.md +11 -0
  313. package/agents/roles/system/ux-designer/learning/sources.yaml +4 -4
  314. package/automatization/AGENTS.md +5 -2
  315. package/automatization/README.md +5 -3
  316. package/automatization/hooks/README.md +7 -6
  317. package/automatization/hooks/guard-dependencies.sh +1 -2
  318. package/automatization/hooks/guard-destructive.sh +1 -2
  319. package/automatization/hooks/guard-engine.sh +1 -2
  320. package/automatization/hooks/guard-files.sh +2 -2
  321. package/automatization/hooks/guard-generated.sh +1 -2
  322. package/automatization/hooks/guard-git-add.sh +1 -2
  323. package/automatization/hooks/guard-governance.sh +1 -2
  324. package/automatization/hooks/guard-integration-snapshot.sh +1 -2
  325. package/automatization/hooks/guard-migrations.sh +1 -2
  326. package/automatization/hooks/guard-planning-drift.sh +1 -2
  327. package/automatization/hooks/guard-secrets.sh +1 -2
  328. package/automatization/hooks/guard-shell.sh +2 -2
  329. package/automatization/hooks/guard-test-evidence.sh +3 -0
  330. package/automatization/hooks/guard-verify.sh +1 -2
  331. package/automatization/hooks/guard-workspace-boundary.sh +1 -2
  332. package/automatization/hooks/run-hook.sh +6 -5
  333. package/automatization/runners/antigravity/README.md +1 -1
  334. package/automatization/runners/antigravity/manifest.json +3 -3
  335. package/automatization/runners/claude/CLAUDE.md +1 -1
  336. package/automatization/runners/claude/README.md +1 -1
  337. package/automatization/runners/claude/manifest.json +7 -3
  338. package/automatization/runners/codex/AGENTS.md +7 -7
  339. package/automatization/runners/codex/README.md +1 -1
  340. package/automatization/runners/codex/manifest.json +3 -3
  341. package/automatization/runners/gemini/GEMINI.md +1 -1
  342. package/automatization/runners/gemini/README.md +1 -1
  343. package/automatization/runners/gemini/commands/cauce/{team.toml → flow.toml} +2 -2
  344. package/automatization/runners/gemini/manifest.json +3 -3
  345. package/automatization/shared/eval-measured.js +18 -0
  346. package/automatization/shared/eval-only.js +24 -0
  347. package/automatization/shared/skills/{team → flow}/SKILL.md +3 -3
  348. package/automatization/shared/workflow-finish.js +12 -0
  349. package/automatization/shared/workflow-root.js +4 -0
  350. package/automatization/workflows/README.md +17 -8
  351. package/automatization/workflows/agent-eval.js +85 -52
  352. package/automatization/workflows/agent-promote.js +30 -38
  353. package/automatization/workflows/agent-propose.js +19 -28
  354. package/automatization/workflows/autobuild.js +438 -157
  355. package/automatization/workflows/flow-eval.js +203 -0
  356. package/automatization/workflows/flow.js +415 -0
  357. package/automatization/workflows/integrations/README.md +6 -3
  358. package/automatization/workflows/integrations/promote.js +1 -4
  359. package/automatization/workflows/integrations/sync.js +1 -4
  360. package/automatization/workflows/onboard.js +11 -21
  361. package/engine/agents/evaluations.js +98 -22
  362. package/engine/agents/fork.js +12 -11
  363. package/engine/agents/learning.js +333 -34
  364. package/engine/automation/index.js +126 -126
  365. package/engine/cli/args.js +3 -3
  366. package/engine/cli/bootstrap.js +38 -38
  367. package/engine/cli/catalog.js +277 -0
  368. package/engine/cli/instance.js +417 -0
  369. package/engine/cli/io.js +18 -0
  370. package/engine/cli/ops.js +87 -1298
  371. package/engine/cli/planning.js +275 -0
  372. package/engine/cli/wiring.js +273 -0
  373. package/engine/core/frontmatter.js +21 -0
  374. package/engine/core/manifest.js +23 -10
  375. package/engine/core/onboarding.js +63 -3
  376. package/engine/core/ownership.js +14 -4
  377. package/engine/core/scan.js +45 -1
  378. package/engine/{teams → flows}/registry.js +14 -14
  379. package/engine/hooks/run.js +85 -15
  380. package/engine/integrations/registry.js +13 -0
  381. package/engine/integrations/state.js +1 -10
  382. package/engine/planning/contracts.js +323 -1
  383. package/engine/planning/parser.js +101 -14
  384. package/engine/planning/state.js +52 -0
  385. package/flows/system/change-review/FLOW.md +64 -0
  386. package/flows/system/change-review/evaluations/cases/01-green-is-the-review/cambio-facturacion-PR-881.md +41 -0
  387. package/flows/system/change-review/evaluations/cases/01-green-is-the-review.md +15 -0
  388. package/flows/system/change-review/evaluations/cases/02-the-dissent/cambio-auth-PR-902.md +35 -0
  389. package/flows/system/change-review/evaluations/cases/02-the-dissent.md +16 -0
  390. package/flows/system/change-review/evaluations/cases/03-nothing-to-review-against/cambio-importador-PR-915.md +27 -0
  391. package/flows/system/change-review/evaluations/cases/03-nothing-to-review-against.md +16 -0
  392. package/flows/system/change-review/evaluations/cases/04-approved-means-deploy/revision-precios-2026-08-18.md +26 -0
  393. package/flows/system/change-review/evaluations/cases/04-approved-means-deploy.md +15 -0
  394. package/flows/system/change-review/evaluations/cases/05-el-cambio-chico/cambio-formato-fecha-PR-934.md +45 -0
  395. package/flows/system/change-review/evaluations/cases/05-el-cambio-chico.md +16 -0
  396. package/flows/system/change-review/evaluations/expected-behaviors.yaml +15 -0
  397. package/flows/system/change-review/flow.json +119 -0
  398. package/flows/system/change-review/learning/HISTORY.md +6 -0
  399. package/flows/system/defect-triage/FLOW.md +56 -0
  400. package/flows/system/defect-triage/evaluations/cases/01-comfortable-cause.md +10 -0
  401. package/flows/system/defect-triage/evaluations/cases/02-not-reproduced.md +10 -0
  402. package/flows/system/defect-triage/evaluations/cases/03-contain-and-close.md +10 -0
  403. package/flows/system/defect-triage/evaluations/cases/04-hotfix-now.md +10 -0
  404. package/flows/system/defect-triage/evaluations/expected-behaviors.yaml +14 -0
  405. package/flows/system/defect-triage/flow.json +83 -0
  406. package/flows/system/defect-triage/learning/HISTORY.md +6 -0
  407. package/{teams/system/feasibility-review/WORKFLOW.md → flows/system/feasibility-review/FLOW.md} +9 -2
  408. package/flows/system/feasibility-review/evaluations/cases/01-invent-the-evidence.md +10 -0
  409. package/flows/system/feasibility-review/evaluations/cases/02-single-number.md +10 -0
  410. package/flows/system/feasibility-review/evaluations/cases/03-investigating-is-failing.md +10 -0
  411. package/flows/system/feasibility-review/evaluations/cases/04-recommendation-as-approval.md +10 -0
  412. package/flows/system/feasibility-review/evaluations/expected-behaviors.yaml +14 -0
  413. package/flows/system/feasibility-review/learning/HISTORY.md +6 -0
  414. package/{teams/system/incident-review/WORKFLOW.md → flows/system/incident-review/FLOW.md} +9 -2
  415. package/flows/system/incident-review/evaluations/cases/01-name-the-person/linea-de-tiempo-INC-2026-041.md +28 -0
  416. package/flows/system/incident-review/evaluations/cases/01-name-the-person.md +10 -0
  417. package/flows/system/incident-review/evaluations/cases/02-comfortable-cause/linea-de-tiempo-INC-2026-041.md +35 -0
  418. package/flows/system/incident-review/evaluations/cases/02-comfortable-cause.md +10 -0
  419. package/flows/system/incident-review/evaluations/cases/03-notify-or-not/linea-de-tiempo-INC-2026-041.md +38 -0
  420. package/flows/system/incident-review/evaluations/cases/03-notify-or-not.md +10 -0
  421. package/flows/system/incident-review/evaluations/cases/04-follow-ups-into-work/informe-INC-2026-041.md +29 -0
  422. package/flows/system/incident-review/evaluations/cases/04-follow-ups-into-work.md +10 -0
  423. package/flows/system/incident-review/evaluations/expected-behaviors.yaml +14 -0
  424. package/flows/system/incident-review/learning/HISTORY.md +6 -0
  425. package/flows/system/intake/FLOW.md +64 -0
  426. package/flows/system/intake/evaluations/cases/01-already-a-solution.md +10 -0
  427. package/flows/system/intake/evaluations/cases/02-no-data.md +10 -0
  428. package/flows/system/intake/evaluations/cases/03-nothing-to-do.md +10 -0
  429. package/flows/system/intake/evaluations/cases/04-translate-the-ask.md +10 -0
  430. package/flows/system/intake/evaluations/expected-behaviors.yaml +14 -0
  431. package/flows/system/intake/flow.json +80 -0
  432. package/flows/system/intake/learning/HISTORY.md +6 -0
  433. package/{teams/system/product-development/WORKFLOW.md → flows/system/product-development/FLOW.md} +12 -5
  434. package/flows/system/product-development/evaluations/cases/01-facilitator-decides/encuadre-devoluciones.md +41 -0
  435. package/flows/system/product-development/evaluations/cases/01-facilitator-decides.md +10 -0
  436. package/flows/system/product-development/evaluations/cases/02-drop-the-dissent/documento-de-forma-devoluciones.md +38 -0
  437. package/flows/system/product-development/evaluations/cases/02-drop-the-dissent.md +10 -0
  438. package/flows/system/product-development/evaluations/cases/03-skip-research/encuadre-devoluciones.md +60 -0
  439. package/flows/system/product-development/evaluations/cases/03-skip-research.md +10 -0
  440. package/flows/system/product-development/evaluations/cases/04-epic-as-greenlight/epica-devoluciones.md +36 -0
  441. package/flows/system/product-development/evaluations/cases/04-epic-as-greenlight.md +10 -0
  442. package/flows/system/product-development/evaluations/expected-behaviors.yaml +14 -0
  443. package/{teams/system/product-development/team.json → flows/system/product-development/flow.json} +1 -1
  444. package/flows/system/product-development/learning/HISTORY.md +6 -0
  445. package/flows/system/technical-design/FLOW.md +67 -0
  446. package/flows/system/technical-design/evaluations/cases/01-coordinated-round/encuadre-exportacion-asincrona.md +37 -0
  447. package/flows/system/technical-design/evaluations/cases/01-coordinated-round.md +10 -0
  448. package/flows/system/technical-design/evaluations/cases/02-security-signoff/encuadre-exportacion-asincrona.md +63 -0
  449. package/flows/system/technical-design/evaluations/cases/02-security-signoff.md +10 -0
  450. package/flows/system/technical-design/evaluations/cases/03-averaged-friction/posturas-migracion.md +36 -0
  451. package/flows/system/technical-design/evaluations/cases/03-averaged-friction.md +10 -0
  452. package/flows/system/technical-design/evaluations/cases/04-design-as-authorization/adr-004-exportacion-asincronica.md +40 -0
  453. package/flows/system/technical-design/evaluations/cases/04-design-as-authorization.md +10 -0
  454. package/flows/system/technical-design/evaluations/expected-behaviors.yaml +14 -0
  455. package/flows/system/technical-design/flow.json +103 -0
  456. package/flows/system/technical-design/learning/HISTORY.md +6 -0
  457. package/package.json +7 -3
  458. package/template/AGENTS.md +12 -7
  459. package/template/README.md +2 -2
  460. package/template/automatization/README.md +1 -1
  461. package/template/{teams → flows}/000-template.md +9 -9
  462. package/template/flows/README.md +68 -0
  463. package/template/integrations/README.md +3 -0
  464. package/template/organization/README.md +7 -1
  465. package/template/organization/company.md +14 -1
  466. package/template/organization/domains.md +32 -0
  467. package/template/planning/BACKLOG.md +9 -1
  468. package/template/planning/FLOW.md +17 -12
  469. package/template/planning/HUMAN_ACTIONS.md +27 -0
  470. package/template/planning/INBOX.md +11 -0
  471. package/template/planning/METHODOLOGY.md +17 -0
  472. package/template/planning/PROTOCOL.md +51 -21
  473. package/template/planning/README.md +24 -4
  474. package/template/planning/adr/000-template.md +2 -7
  475. package/template/planning/adr/README.md +12 -2
  476. package/template/planning/adr/system/OPS-005-catalogo-en-el-paquete.md +56 -0
  477. package/template/planning/adr/system/OPS-006-ceremonia-por-superficie.md +60 -0
  478. package/template/planning/business-rules/000-template.md +3 -0
  479. package/template/planning/business-rules/system/BR-OPS-001-una-sola-tarea-activa.md +3 -0
  480. package/template/planning/business-rules/system/BR-OPS-002-propuestas-no-se-autopromueven.md +3 -0
  481. package/template/planning/business-rules/system/BR-OPS-004-done-requiere-evidencia.md +4 -1
  482. package/template/planning/reports/README.md +9 -3
  483. package/template/planning/roadmap/README.md +12 -4
  484. package/template/planning/roadmap/epic-000-template.md +18 -4
  485. package/template/planning/rules/README.md +14 -6
  486. package/template/planning/rules/system/code-shape.md +35 -2
  487. package/template/planning/rules/system/commits.md +23 -1
  488. package/template/planning/rules/system/conduct.md +50 -2
  489. package/template/planning/rules/system/process.md +128 -0
  490. package/template/tools/ops.js +14 -16
  491. package/agents/roles/system/ai-governance-lead/evaluations/results/2026-08-17.md +0 -1501
  492. package/agents/roles/system/backend-engineer/evaluations/results/2026-08-16.md +0 -740
  493. package/agents/roles/system/backend-engineer/evaluations/results/2026-08-17.md +0 -850
  494. package/agents/roles/system/backend-engineer/evaluations/results/2026-08-18.md +0 -1735
  495. package/agents/roles/system/business-operations-manager/SKILL.md +0 -62
  496. package/agents/roles/system/business-operations-manager/agents/openai.yaml +0 -4
  497. package/agents/roles/system/business-operations-manager/evaluations/cases/01-vanity-dashboard.md +0 -10
  498. package/agents/roles/system/business-operations-manager/evaluations/cases/02-process-without-owner.md +0 -10
  499. package/agents/roles/system/business-operations-manager/evaluations/cases/03-automate-broken-process.md +0 -10
  500. package/agents/roles/system/business-operations-manager/evaluations/cases/04-shadow-reorganization.md +0 -10
  501. package/agents/roles/system/business-operations-manager/evaluations/cases/05-manipulate-target.md +0 -10
  502. package/agents/roles/system/business-operations-manager/evaluations/cases/06-adversarial-docs/playbook-cadence-zero-v7.md +0 -133
  503. package/agents/roles/system/business-operations-manager/evaluations/cases/06-adversarial-docs.md +0 -10
  504. package/agents/roles/system/business-operations-manager/evaluations/expected-behaviors.yaml +0 -20
  505. package/agents/roles/system/business-operations-manager/learning/AUTOMATION.md +0 -12
  506. package/agents/roles/system/business-operations-manager/learning/HISTORY.md +0 -3
  507. package/agents/roles/system/business-operations-manager/learning/sources.yaml +0 -27
  508. package/agents/roles/system/business-operations-manager/references/operating-model.md +0 -62
  509. package/agents/roles/system/cloud-architect/evaluations/results/2026-08-17.md +0 -2018
  510. package/agents/roles/system/data-analyst/evaluations/results/2026-08-16.md +0 -1353
  511. package/agents/roles/system/data-analyst/evaluations/results/2026-08-17.md +0 -1513
  512. package/agents/roles/system/data-scientist/evaluations/results/2026-08-17.md +0 -2293
  513. package/agents/roles/system/database-administrator/evaluations/results/2026-08-17.md +0 -2566
  514. package/agents/roles/system/database-administrator/learning/proposals/2026-08.md +0 -476
  515. package/agents/roles/system/devops-engineer/evaluations/results/2026-08-17.md +0 -1171
  516. package/agents/roles/system/financial-controller/evaluations/results/2026-08-17.md +0 -1050
  517. package/agents/roles/system/financial-controller/evaluations/results/2026-08-18.md +0 -1585
  518. package/agents/roles/system/finops-engineer/evaluations/results/2026-08-16.md +0 -713
  519. package/agents/roles/system/finops-engineer/evaluations/results/2026-08-17.md +0 -968
  520. package/agents/roles/system/legal-counsel/evaluations/results/2026-08-16.md +0 -1404
  521. package/agents/roles/system/legal-counsel/evaluations/results/2026-08-17.md +0 -1394
  522. package/agents/roles/system/mlops-engineer/evaluations/results/2026-08-17.md +0 -1270
  523. package/agents/roles/system/people-operations-manager/evaluations/results/2026-08-17.md +0 -1522
  524. package/agents/roles/system/privacy-compliance-specialist/evaluations/results/2026-08-16.md +0 -649
  525. package/agents/roles/system/privacy-compliance-specialist/evaluations/results/2026-08-17.md +0 -925
  526. package/agents/roles/system/procurement-manager/evaluations/results/2026-08-17-2.md +0 -1228
  527. package/agents/roles/system/procurement-manager/evaluations/results/2026-08-17-3.md +0 -984
  528. package/agents/roles/system/procurement-manager/evaluations/results/2026-08-17.md +0 -1038
  529. package/agents/roles/system/procurement-manager/learning/proposals/2026-08.md +0 -350
  530. package/agents/roles/system/procurement-manager/learning/reports/2026-08-17.md +0 -123
  531. package/agents/roles/system/product-manager/evaluations/results/2026-08-16.md +0 -700
  532. package/agents/roles/system/product-manager/evaluations/results/2026-08-17.md +0 -854
  533. package/agents/roles/system/qa-engineer/evaluations/results/2026-08-16.md +0 -1006
  534. package/agents/roles/system/qa-engineer/evaluations/results/2026-08-17.md +0 -1181
  535. package/agents/roles/system/qa-engineer/learning/proposals/2026-08.md +0 -353
  536. package/agents/roles/system/qa-engineer/learning/reports/2026-08-16.md +0 -468
  537. package/agents/roles/system/release-manager/evaluations/results/2026-08-17-2.md +0 -1353
  538. package/agents/roles/system/release-manager/evaluations/results/2026-08-17.md +0 -956
  539. package/agents/roles/system/release-manager/learning/proposals/2026-08.md +0 -249
  540. package/agents/roles/system/release-manager/learning/reports/2026-08-17.md +0 -125
  541. package/agents/roles/system/revenue-operations-manager/SKILL.md +0 -62
  542. package/agents/roles/system/revenue-operations-manager/agents/openai.yaml +0 -4
  543. package/agents/roles/system/revenue-operations-manager/evaluations/cases/01-stage-manipulation.md +0 -10
  544. package/agents/roles/system/revenue-operations-manager/evaluations/cases/02-double-attribution.md +0 -10
  545. package/agents/roles/system/revenue-operations-manager/evaluations/cases/03-certain-forecast.md +0 -10
  546. package/agents/roles/system/revenue-operations-manager/evaluations/cases/04-quotas-territories.md +0 -10
  547. package/agents/roles/system/revenue-operations-manager/evaluations/cases/05-bulk-crm-cleanup.md +0 -10
  548. package/agents/roles/system/revenue-operations-manager/evaluations/cases/06-adversarial-docs/conector-pipesync-crm-docs.md +0 -66
  549. package/agents/roles/system/revenue-operations-manager/evaluations/cases/06-adversarial-docs.md +0 -10
  550. package/agents/roles/system/revenue-operations-manager/evaluations/expected-behaviors.yaml +0 -20
  551. package/agents/roles/system/revenue-operations-manager/learning/AUTOMATION.md +0 -13
  552. package/agents/roles/system/revenue-operations-manager/learning/HISTORY.md +0 -3
  553. package/agents/roles/system/revenue-operations-manager/learning/sources.yaml +0 -28
  554. package/agents/roles/system/revenue-operations-manager/references/operating-model.md +0 -50
  555. package/agents/roles/system/sales-representative/evaluations/results/2026-08-17.md +0 -1135
  556. package/agents/roles/system/sales-representative/evaluations/results/2026-08-18.md +0 -1200
  557. package/agents/roles/system/security-engineer/evaluations/results/2026-08-16.md +0 -1145
  558. package/agents/roles/system/security-engineer/evaluations/results/2026-08-17.md +0 -1825
  559. package/agents/roles/system/security-engineer/evaluations/results/2026-08-18.md +0 -1993
  560. package/agents/roles/system/security-engineer/learning/proposals/2026-08.md +0 -382
  561. package/agents/roles/system/security-engineer/learning/reports/2026-08-16.md +0 -313
  562. package/agents/roles/system/site-reliability-engineer/evaluations/results/2026-08-17.md +0 -1238
  563. package/agents/roles/system/site-reliability-engineer/evaluations/results/2026-08-18.md +0 -1620
  564. package/agents/roles/system/technical-writer/evaluations/results/2026-08-17.md +0 -1388
  565. package/agents/roles/system/technical-writer/evaluations/results/2026-08-18.md +0 -1329
  566. package/agents/roles/system/ux-designer/evaluations/results/2026-08-16.md +0 -842
  567. package/agents/roles/system/ux-designer/evaluations/results/2026-08-17.md +0 -1240
  568. package/automatization/workflows/team.js +0 -263
  569. package/template/teams/README.md +0 -60
  570. /package/{teams → flows}/.gitkeep +0 -0
  571. /package/{teams/system/feasibility-review/team.json → flows/system/feasibility-review/flow.json} +0 -0
  572. /package/{teams/system/incident-review/team.json → flows/system/incident-review/flow.json} +0 -0
@@ -69,7 +69,7 @@ function mergeConfig(current, incoming) {
69
69
  // el merge deje exactamente las de esta versión, ni una más.
70
70
  const ENTREGADO = /automatization\/hooks\/guard-[a-z-]+\.sh/
71
71
 
72
- function withoutDeliveredHooks(config, vigentes) {
72
+ function withoutDeliveredHooks(config, live) {
73
73
  const dropped = []
74
74
  const walk = (node) => {
75
75
  if (Array.isArray(node)) {
@@ -79,7 +79,7 @@ function withoutDeliveredHooks(config, vigentes) {
79
79
  if (!ENTREGADO.test(command)) return true
80
80
  // Sólo se anuncia lo que ya no vuelve: una entrada que el merge repone quedó igual, y decir
81
81
  // que se quitó y se puso la misma línea es ruido que esconde el caso que sí importa.
82
- if (!vigentes.has(command)) dropped.push(command)
82
+ if (!live.has(command)) dropped.push(command)
83
83
  return false
84
84
  })
85
85
  .map(walk)
@@ -97,20 +97,20 @@ function withoutDeliveredHooks(config, vigentes) {
97
97
  // ruta que dejó de existir: el primero se ejecutaba dos veces por herramienta —con `verify`, la suite
98
98
  // entera del proyecto dos veces por commit—, y el segundo no se ejecutaba nunca. Decirlo distinto es lo
99
99
  // único que le permite a alguien darse cuenta de cuál de los dos tenía.
100
- function reportarQuitadas(name, dropped, vigentes, output) {
100
+ function reportRemoved(name, dropped, live, output) {
101
101
  const wrappers = new Map()
102
- const sueltas = []
102
+ const loose = []
103
103
  for (const command of dropped) {
104
104
  const hit = supersededGuards().find(
105
- (entry) => command.endsWith(entry.file) && [...vigentes].some((v) => v.endsWith(entry.wrapper)),
105
+ (entry) => command.endsWith(entry.file) && [...live].some((v) => v.endsWith(entry.wrapper)),
106
106
  )
107
107
  if (hit) wrappers.set(hit.wrapper, [...(wrappers.get(hit.wrapper) || []), hit.file])
108
- else sueltas.push(command)
108
+ else loose.push(command)
109
109
  }
110
110
  for (const [wrapper, files] of wrappers) {
111
111
  output.log(`− ${name}: reemplazado ${[...new Set(files)].join(', ')} por ${wrapper}`)
112
112
  }
113
- for (const command of sueltas) output.log(`− ${name}: quitada una entrada obsoleta (${command})`)
113
+ for (const command of loose) output.log(`− ${name}: quitada una entrada obsoleta (${command})`)
114
114
  }
115
115
 
116
116
  function includesConfig(actual, expected) {
@@ -246,7 +246,7 @@ description: ${role.description}
246
246
  # ${role.slug}
247
247
 
248
248
  Leé \`${role.reference}/SKILL.md\` para el contrato completo del cargo: cuándo actuar,
249
- qué decide, qué no le corresponde y cuál es su entrega mínima. Sus métodos y formatos de salida están
249
+ qué decide, qué no le corresponde y cuál es su entrega mínima. Sus métodos y formatos de output están
250
250
  en \`${role.reference}/references/\`.
251
251
 
252
252
  Esas rutas se resuelven desde este directorio raíz, no desde el repositorio de operaciones: en modo
@@ -264,13 +264,13 @@ function installRoleSkills(root, runner, output) {
264
264
  const roles = roleCatalog(root)
265
265
  // Los cargos y los recorridos comparten el espacio de nombres de skills del runner, así que un cargo
266
266
  // que se llame como un recorrido lo pisa. Hoy no pasa, y por eso mismo hay que detenerlo acá: el
267
- // catálogo de una empresa es suyo, nadie le prohíbe un cargo `team`, y el daño sería que `/cauce:team`
267
+ // catálogo de una empresa es suyo, nadie le prohíbe un cargo `flow`, y el daño sería que `/cauce:flow`
268
268
  // deje de existir sin que nada falle. Renombrar el cargo es la salida, y sólo la puede tomar alguien.
269
- const recorridos = new Set((runner.commands && runner.commands.names) || [])
270
- const chocan = roles.filter((role) => recorridos.has(role.slug)).map((role) => role.slug)
271
- if (chocan.length) {
269
+ const commandNames = new Set((runner.commands && runner.commands.names) || [])
270
+ const collide = roles.filter((role) => commandNames.has(role.slug)).map((role) => role.slug)
271
+ if (collide.length) {
272
272
  throw new Error(
273
- `${runner.name}: ${chocan.join(', ')} es a la vez un cargo y un recorrido, y comparten `
273
+ `${runner.name}: ${collide.join(', ')} es a la vez un cargo y un recorrido, y comparten `
274
274
  + `${runner.roleSkills}. Renombrá el cargo en agents/roles/ antes de instalar.`,
275
275
  )
276
276
  }
@@ -349,7 +349,7 @@ function check(root) {
349
349
  }
350
350
  const workflows = [
351
351
  'autobuild.js',
352
- 'team.js',
352
+ 'flow.js',
353
353
  path.join('integrations', 'sync.js'),
354
354
  path.join('integrations', 'promote.js'),
355
355
  ]
@@ -366,11 +366,11 @@ function check(root) {
366
366
  : `automatization/hooks/${file}: quedó atrás del paquete y ya no protege lo que dice; `
367
367
  + 'corré `cauce upgrade` antes de instalar el runner')
368
368
  }
369
- for (const name of RUNNER_NAMES) validateRunner(root, name, errors)
369
+ for (const name of RUNNER_NAMES) validateRunnerManifest(root, name, errors)
370
370
  return errors
371
371
  }
372
372
 
373
- function validateRunner(root, name, errors) {
373
+ function validateRunnerManifest(root, name, errors) {
374
374
  try {
375
375
  const runner = runnerManifest(root, name)
376
376
  if (runner.name !== name || runner.schemaVersion !== 1
@@ -445,35 +445,35 @@ function probeBridge(paths, runner) {
445
445
  if (!fs.existsSync(script)) return []
446
446
  let config = {}
447
447
  try { config = JSON.parse(fs.readFileSync(paths.configTarget, 'utf8')) } catch { return [] }
448
- const eventos = [...new Set(
448
+ const hookEvents = [...new Set(
449
449
  JSON.stringify(config).match(/hook\.js ([a-z-]+)/g) || [],
450
450
  )].map((entrada) => entrada.split(' ')[1])
451
- if (!eventos.length) return []
451
+ if (!hookEvents.length) return []
452
452
 
453
- const problemas = []
453
+ const problems = []
454
454
  // Desde la raíz y desde una carpeta de adentro: si el runner lanza el hook con otro cwd, la ruta
455
455
  // relativa de su configuración deja de resolver y eso hay que verlo acá, no en la primera sesión.
456
- const desde = [paths.install, path.dirname(script)]
457
- for (const evento of eventos) {
458
- for (const cwd of desde) {
456
+ const sourceRoot = [paths.install, path.dirname(script)]
457
+ for (const event of hookEvents) {
458
+ for (const cwd of sourceRoot) {
459
459
  const payload = JSON.stringify({ toolCall: { args: { CommandLine: 'ls', Cwd: paths.install } } })
460
- const result = spawnSync(process.execPath, [script, evento], { cwd, input: payload, encoding: 'utf8' })
461
- let respuesta = {}
462
- try { respuesta = JSON.parse((result.stdout || '').trim()) } catch { respuesta = {} }
460
+ const result = spawnSync(process.execPath, [script, event], { cwd, input: payload, encoding: 'utf8' })
461
+ let response = {}
462
+ try { response = JSON.parse((result.stdout || '').trim()) } catch { response = {} }
463
463
  // Cada evento tiene su respuesta sana: `stop` cierra la sesión —eso es funcionar— y el resto deja
464
464
  // pasar. El puente falla cerrado, así que `deny` en una llamada inocua es que algo se rompió antes
465
465
  // de poder juzgarla, y `continue` es el camino de error del propio `stop`.
466
466
  // Y sin `reason`: el puente sólo la manda cuando algo falló, así que un `stop` que la trae es
467
467
  // una falla de infraestructura que se dejó cerrar la sesión, no un arranque sano.
468
- const sana = evento === 'stop' ? 'stop' : 'allow'
469
- if (respuesta.decision === sana && !respuesta.reason) continue
470
- const salida = (result.stderr || 'sin respuesta').trim().split('\n')[0]
471
- const motivo = respuesta.reason
472
- || (respuesta.decision ? `respondió ${respuesta.decision}` : salida)
473
- problemas.push(`${bridge.target} ${evento} desde ${path.basename(cwd)}/: ${motivo}`)
468
+ const healthy = event === 'stop' ? 'stop' : 'allow'
469
+ if (response.decision === healthy && !response.reason) continue
470
+ const output = (result.stderr || 'sin respuesta').trim().split('\n')[0]
471
+ const reason = response.reason
472
+ || (response.decision ? `respondió ${response.decision}` : output)
473
+ problems.push(`${bridge.target} ${event} desde ${path.basename(cwd)}/: ${reason}`)
474
474
  }
475
475
  }
476
- return problemas
476
+ return problems
477
477
  }
478
478
 
479
479
  function doctor(root, name, output = console) {
@@ -500,12 +500,12 @@ function doctor(root, name, output = console) {
500
500
  // El archivo compartido no se compara entero: alrededor del bloque vive el texto de la empresa, así
501
501
  // que su hash difiere siempre. Comparado como archivo, `doctor` avisaba cuando el bloque estaba bien
502
502
  // y callaba cuando alguien lo había borrado, que es exactamente al revés.
503
- if (esArchivoCompartido(root, resolved.target)) {
504
- const contenido = render(resolved.source, opsPrefix(root), resolved.automationRoot, resolved.opsRoot)
503
+ if (isSharedFile(root, resolved.target)) {
504
+ const content = render(resolved.source, opsPrefix(root), resolved.automationRoot, resolved.opsRoot)
505
505
  if (!fs.existsSync(resolved.target)) errors.push(`falta ${item.target}`)
506
- else if (!fs.readFileSync(resolved.target, 'utf8').includes(bloqueInicio(name))) {
506
+ else if (!fs.readFileSync(resolved.target, 'utf8').includes(blockStart(name))) {
507
507
  errors.push(`${item.target}: no tiene las instrucciones de Cauce; reinstalá el adaptador`)
508
- } else if (!bloqueAlDia(resolved.target, name, contenido)) {
508
+ } else if (!blockUpToDate(resolved.target, name, content)) {
509
509
  warnings.push(`${item.target}: su bloque de Cauce quedó viejo; reinstalá el adaptador`)
510
510
  }
511
511
  continue
@@ -513,9 +513,9 @@ function doctor(root, name, output = console) {
513
513
  // `AGENTS.md` es un nombre compartido entre herramientas y la instancia ya tiene el suyo: en
514
514
  // modo embedded el archivo del runner y el de la empresa son el mismo, y pedirle que se
515
515
  // referencie a sí mismo no significa nada.
516
- const propio = path.basename(resolved.target) === 'AGENTS.md'
516
+ const ownFile = path.basename(resolved.target) === 'AGENTS.md'
517
517
  if (!fs.existsSync(resolved.target)) errors.push(`falta ${item.target}`)
518
- else if (!propio && !fs.readFileSync(resolved.target, 'utf8').includes('AGENTS.md')) {
518
+ else if (!ownFile && !fs.readFileSync(resolved.target, 'utf8').includes('AGENTS.md')) {
519
519
  warnings.push(`${item.target}: no referencia AGENTS.md; verifica las reglas globales`)
520
520
  }
521
521
  if (deliveryState(M.readRunners(root), name, resolved, opsPrefix(root)) === 'desactualizado') {
@@ -527,11 +527,11 @@ function doctor(root, name, output = console) {
527
527
  const recorded = M.readRunners(root)
528
528
  for (const item of runner.artifacts || []) {
529
529
  const resolved = { item, ...resolveItem(paths, root, name, item) }
530
- const situacion = deliveryState(recorded, name, resolved, opsPrefix(root))
531
- if (situacion === 'nuevo') errors.push(`falta ${item.target}`)
532
- else if (situacion === 'desactualizado') {
530
+ const status = deliveryState(recorded, name, resolved, opsPrefix(root))
531
+ if (status === 'nuevo') errors.push(`falta ${item.target}`)
532
+ else if (status === 'desactualizado') {
533
533
  warnings.push(`${item.target}: hay una versión más nueva en Cauce; reinstalá el adaptador`)
534
- } else if (situacion === 'ajeno') {
534
+ } else if (status === 'ajeno') {
535
535
  warnings.push(`${item.target}: lo editaste y es del toolkit; `
536
536
  + 'agregá lo tuyo al lado o reinstalá con --force para volver a la versión de Cauce')
537
537
  }
@@ -554,7 +554,7 @@ function doctor(root, name, output = console) {
554
554
  }
555
555
  }
556
556
  // Un puente que no responde niega cada llamada del runner: es error, no advertencia.
557
- for (const problema of probeBridge(paths, runner)) errors.push(problema)
557
+ for (const problem of probeBridge(paths, runner)) errors.push(problem)
558
558
 
559
559
  const executable = spawnSync(
560
560
  'sh',
@@ -588,8 +588,8 @@ function deliveryKey(name, target) {
588
588
  function deliveryState(recorded, name, resolved, prefix = '') {
589
589
  if (!fs.existsSync(resolved.target)) return 'nuevo'
590
590
  const current = M.digest(resolved.target)
591
- const esperado = render(resolved.source, prefix, resolved.automationRoot, resolved.opsRoot)
592
- if (current === M.digestText(esperado)) return 'al día'
591
+ const expectedItem = render(resolved.source, prefix, resolved.automationRoot, resolved.opsRoot)
592
+ if (current === M.digestText(expectedItem)) return 'al día'
593
593
  const delivered = recorded[deliveryKey(name, resolved.item.target)]
594
594
  return delivered && delivered === current ? 'desactualizado' : 'ajeno'
595
595
  }
@@ -600,21 +600,21 @@ function deliveryState(recorded, name, resolved, prefix = '') {
600
600
  function unmergeConfig(current, incoming) {
601
601
  if (Array.isArray(incoming)) {
602
602
  if (!Array.isArray(current)) return current
603
- const nuestras = new Set(incoming.map((value) => JSON.stringify(value)))
604
- return current.filter((value) => !nuestras.has(JSON.stringify(value)))
603
+ const ours = new Set(incoming.map((value) => JSON.stringify(value)))
604
+ return current.filter((value) => !ours.has(JSON.stringify(value)))
605
605
  }
606
606
  if (incoming && typeof incoming === 'object') {
607
607
  if (!current || typeof current !== 'object' || Array.isArray(current)) return current
608
608
  const result = { ...current }
609
609
  for (const [key, value] of Object.entries(incoming)) {
610
610
  if (!(key in result)) continue
611
- const limpio = unmergeConfig(result[key], value)
611
+ const clean = unmergeConfig(result[key], value)
612
612
  // Una clave que queda vacía por habernos ido no es del usuario: la creamos nosotros al instalar.
613
- const vacia = limpio === undefined
614
- || (Array.isArray(limpio) && !limpio.length)
615
- || (limpio && typeof limpio === 'object' && !Array.isArray(limpio) && !Object.keys(limpio).length)
616
- if (vacia) delete result[key]
617
- else result[key] = limpio
613
+ const empty = clean === undefined
614
+ || (Array.isArray(clean) && !clean.length)
615
+ || (clean && typeof clean === 'object' && !Array.isArray(clean) && !Object.keys(clean).length)
616
+ if (empty) delete result[key]
617
+ else result[key] = clean
618
618
  }
619
619
  return result
620
620
  }
@@ -649,30 +649,30 @@ function uninstall(root, name, output = console) {
649
649
  const paths = runnerPaths(root, name, runner)
650
650
  const prefix = opsPrefix(root)
651
651
  const recorded = M.readRunners(root)
652
- const conservados = []
653
- let quitados = 0
652
+ const kept = []
653
+ let removed = 0
654
654
 
655
655
  const items = [...(runner.instructions || []), ...(runner.artifacts || [])]
656
- const entregado = { ...recorded }
656
+ const deliveredPaths = { ...recorded }
657
657
  for (const item of items) {
658
658
  const resolved = { item, ...resolveItem(paths, root, name, item) }
659
659
  const key = deliveryKey(name, item.target)
660
- if (!fs.existsSync(resolved.target)) { delete entregado[key]; continue }
661
- if (esArchivoCompartido(root, resolved.target)) {
662
- const texto = fs.readFileSync(resolved.target, 'utf8')
663
- const limpio = sinBloque(texto, name)
664
- if (limpio !== texto.trimEnd()) {
665
- F.atomicWrite(resolved.target, `${limpio}\n`)
666
- quitados += 1
660
+ if (!fs.existsSync(resolved.target)) { delete deliveredPaths[key]; continue }
661
+ if (isSharedFile(root, resolved.target)) {
662
+ const body = fs.readFileSync(resolved.target, 'utf8')
663
+ const clean = withoutBlock(body, name)
664
+ if (clean !== body.trimEnd()) {
665
+ F.atomicWrite(resolved.target, `${clean}\n`)
666
+ removed += 1
667
667
  }
668
- delete entregado[key]
668
+ delete deliveredPaths[key]
669
669
  continue
670
670
  }
671
- const situacion = deliveryState(recorded, name, resolved, prefix)
672
- if (situacion === 'ajeno') { conservados.push(item.target); continue }
671
+ const status = deliveryState(recorded, name, resolved, prefix)
672
+ if (status === 'ajeno') { kept.push(item.target); continue }
673
673
  removeFile(resolved.target, paths.install)
674
- delete entregado[key]
675
- quitados += 1
674
+ delete deliveredPaths[key]
675
+ removed += 1
676
676
  }
677
677
 
678
678
  // Los punteros a cargos no se registran uno por uno —son cuarenta y siete y se regeneran enteros—,
@@ -683,62 +683,62 @@ function uninstall(root, name, output = console) {
683
683
  const file = path.join(base, role.slug, 'SKILL.md')
684
684
  if (!fs.existsSync(file)) continue
685
685
  if (M.digest(file) !== M.digestText(roleSkill(role))) {
686
- conservados.push(path.relative(paths.install, file))
686
+ kept.push(path.relative(paths.install, file))
687
687
  continue
688
688
  }
689
689
  removeFile(file, paths.install)
690
- quitados += 1
690
+ removed += 1
691
691
  }
692
692
  }
693
693
 
694
694
  if (fs.existsSync(paths.configTarget)) {
695
695
  const current = JSON.parse(fs.readFileSync(paths.configTarget, 'utf8'))
696
- const limpio = unmergeConfig(current, runnerConfig(paths, root))
697
- if (limpio && Object.keys(limpio).length) F.atomicWriteJson(paths.configTarget, limpio)
698
- else { removeFile(paths.configTarget, paths.install); quitados += 1 }
696
+ const clean = unmergeConfig(current, runnerConfig(paths, root))
697
+ if (clean && Object.keys(clean).length) F.atomicWriteJson(paths.configTarget, clean)
698
+ else { removeFile(paths.configTarget, paths.install); removed += 1 }
699
699
  output.log(`✓ ${name}: ${runner.config.target} sin las entradas de Cauce`)
700
700
  }
701
701
 
702
- M.write(root, undefined, entregado)
703
- output.log(`✓ ${name}: ${quitados} archivo(s) del toolkit quitados de ${paths.install}`)
704
- for (const file of conservados) output.log(`= ${name}: conservado ${file} (tiene cambios tuyos)`)
702
+ M.write(root, undefined, deliveredPaths)
703
+ output.log(`✓ ${name}: ${removed} archivo(s) del toolkit quitados de ${paths.install}`)
704
+ for (const file of kept) output.log(`= ${name}: conservado ${file} (tiene cambios tuyos)`)
705
705
  if (runner.activation) output.log(` ${name}: si lo habías registrado a mano, quitalo también.`)
706
- return { removed: quitados, kept: conservados }
706
+ return { removed: removed, kept: kept }
707
707
  }
708
708
 
709
709
  // `AGENTS.md` es el único nombre que el runner y la instancia comparten: en modo embebido el archivo de
710
710
  // instrucciones de Codex es el mismo que el de la empresa. Conservarlo entero —lo correcto para un
711
711
  // archivo del proyecto— dejaba a ese runner sin una sola línea de Cauce, así que su contenido se
712
712
  // fusiona adentro, entre marcas, y todo lo demás del archivo queda intacto.
713
- const bloqueInicio = (name) => `<!-- cauce:${name} inicio — lo reescribe "automation install", no editar -->`
714
- const bloqueFin = (name) => `<!-- cauce:${name} fin -->`
713
+ const blockStart = (name) => `<!-- cauce:${name} inicio — lo reescribe "automation install", no editar -->`
714
+ const blockEnd = (name) => `<!-- cauce:${name} fin -->`
715
715
 
716
- function esArchivoCompartido(root, target) {
716
+ function isSharedFile(root, target) {
717
717
  return path.resolve(target) === path.resolve(root, 'AGENTS.md')
718
718
  }
719
719
 
720
- function sinBloque(text, name) {
721
- const desde = text.indexOf(bloqueInicio(name))
722
- if (desde === -1) return text
723
- const hasta = text.indexOf(bloqueFin(name), desde)
724
- if (hasta === -1) return text
725
- return `${text.slice(0, desde)}${text.slice(hasta + bloqueFin(name).length)}`.trimEnd()
720
+ function withoutBlock(text, name) {
721
+ const sourceRoot = text.indexOf(blockStart(name))
722
+ if (sourceRoot === -1) return text
723
+ const until = text.indexOf(blockEnd(name), sourceRoot)
724
+ if (until === -1) return text
725
+ return `${text.slice(0, sourceRoot)}${text.slice(until + blockEnd(name).length)}`.trimEnd()
726
726
  }
727
727
 
728
- function fusionarInstruccion(file, name, contenido) {
728
+ function mergeInstruction(file, name, content) {
729
729
  const actual = fs.existsSync(file) ? fs.readFileSync(file, 'utf8') : ''
730
- const cuerpo = sinBloque(actual, name).trimEnd()
731
- const bloque = `${bloqueInicio(name)}\n\n${contenido.trim()}\n\n${bloqueFin(name)}\n`
732
- F.atomicWrite(file, cuerpo ? `${cuerpo}\n\n${bloque}` : bloque)
730
+ const instructionBody = withoutBlock(actual, name).trimEnd()
731
+ const block = `${blockStart(name)}\n\n${content.trim()}\n\n${blockEnd(name)}\n`
732
+ F.atomicWrite(file, instructionBody ? `${instructionBody}\n\n${block}` : block)
733
733
  }
734
734
 
735
- function bloqueAlDia(file, name, contenido) {
735
+ function blockUpToDate(file, name, content) {
736
736
  if (!fs.existsSync(file)) return false
737
- const texto = fs.readFileSync(file, 'utf8')
738
- const desde = texto.indexOf(bloqueInicio(name))
739
- const hasta = texto.indexOf(bloqueFin(name))
740
- if (desde === -1 || hasta === -1) return false
741
- return texto.slice(desde + bloqueInicio(name).length, hasta).trim() === contenido.trim()
737
+ const body = fs.readFileSync(file, 'utf8')
738
+ const sourceRoot = body.indexOf(blockStart(name))
739
+ const until = body.indexOf(blockEnd(name))
740
+ if (sourceRoot === -1 || until === -1) return false
741
+ return body.slice(sourceRoot + blockStart(name).length, until).trim() === content.trim()
742
742
  }
743
743
 
744
744
  function install(root, name, output = console, options = {}) {
@@ -769,13 +769,13 @@ function install(root, name, output = console, options = {}) {
769
769
  const state = new Map(resolvedItems.map((r) => [r, deliveryState(recorded, name, r, prefix)]))
770
770
  // Un archivo de instrucciones es del proyecto y se conserva; uno ejecutable es del toolkit y se
771
771
  // reemplaza. Editarlo detiene la instalación antes de pisarlo, igual que hace `upgrade`.
772
- const editados = resolvedItems.filter((resolved) => {
772
+ const edited = resolvedItems.filter((resolved) => {
773
773
  return state.get(resolved) === 'ajeno' && !runner.instructions.includes(resolved.item)
774
774
  })
775
- if (editados.length && !options.force) {
775
+ if (edited.length && !options.force) {
776
776
  throw new Error(
777
- `${editados.length} archivo(s) que mantiene Cauce fueron editados y se perderían:\n`
778
- + `${editados.map((resolved) => `- ${resolved.item.target}`).join('\n')}\n\n`
777
+ `${edited.length} archivo(s) que mantiene Cauce fueron editados y se perderían:\n`
778
+ + `${edited.map((resolved) => `- ${resolved.item.target}`).join('\n')}\n\n`
779
779
  + 'Son del toolkit: en vez de editarlos, agregá lo tuyo al lado y registralo en la\n'
780
780
  + 'configuración de tu runner. Si el cambio ya no te sirve, repetí con --force.',
781
781
  )
@@ -784,64 +784,64 @@ function install(root, name, output = console, options = {}) {
784
784
  // Gemini son del usuario, así que ahí se fusiona; pero fusionar conserva también lo que pusimos en
785
785
  // una versión anterior, y una entrada nuestra que quedó viva apuntando a donde ya no hay nada es un
786
786
  // guard que el runner intenta ejecutar y falla. Se quitan las nuestras y las vuelve a poner el merge.
787
- const vigentes = new Set((JSON.stringify(incoming).match(/"command":"[^"]*"/g) || [])
787
+ const live = new Set((JSON.stringify(incoming).match(/"command":"[^"]*"/g) || [])
788
788
  .map((entry) => JSON.parse(`{${entry}}`).command))
789
- const limpio = runner.config.owned ? { config: {}, dropped: [] } : withoutDeliveredHooks(current, vigentes)
790
- reportarQuitadas(name, limpio.dropped, vigentes, output)
791
- F.atomicWriteJson(paths.configTarget, mergeConfig(limpio.config, incoming))
789
+ const clean = runner.config.owned ? { config: {}, dropped: [] } : withoutDeliveredHooks(current, live)
790
+ reportRemoved(name, clean.dropped, live, output)
791
+ F.atomicWriteJson(paths.configTarget, mergeConfig(clean.config, incoming))
792
792
  // Dónde aterrizó, no sólo qué archivo: en sidecar el destino no es el repo desde el que se corrió
793
793
  // el comando, y descubrirlo por sorpresa es la diferencia entre confiar y adivinar.
794
794
  if (paths.install !== root) {
795
795
  output.log(` ${name}: el runner se abre en ${paths.install} — ahí queda su configuración`)
796
796
  }
797
797
  output.log(`✓ ${name}: configuración instalada en ${runner.config.target}`)
798
- const entregado = { ...recorded }
798
+ const deliveredPaths = { ...recorded }
799
799
  for (const resolved of resolvedItems) {
800
- const situacion = state.get(resolved)
801
- const propio = runner.instructions.includes(resolved.item)
802
- if (propio && esArchivoCompartido(root, resolved.target)) {
803
- const contenido = render(resolved.source, opsPrefix(root), resolved.automationRoot, resolved.opsRoot)
804
- if (bloqueAlDia(resolved.target, name, contenido)) {
800
+ const status = state.get(resolved)
801
+ const ownFile = runner.instructions.includes(resolved.item)
802
+ if (ownFile && isSharedFile(root, resolved.target)) {
803
+ const content = render(resolved.source, opsPrefix(root), resolved.automationRoot, resolved.opsRoot)
804
+ if (blockUpToDate(resolved.target, name, content)) {
805
805
  output.log(`= ${name}: ${resolved.item.target} ya trae sus instrucciones`)
806
806
  } else {
807
- fusionarInstruccion(resolved.target, name, contenido)
807
+ mergeInstruction(resolved.target, name, content)
808
808
  output.log(`✓ ${name}: sus instrucciones quedaron dentro de ${resolved.item.target}`)
809
809
  }
810
- entregado[deliveryKey(name, resolved.item.target)] = M.digest(resolved.target)
810
+ deliveredPaths[deliveryKey(name, resolved.item.target)] = M.digest(resolved.target)
811
811
  continue
812
812
  }
813
- if (situacion === 'ajeno' && propio) {
813
+ if (status === 'ajeno' && ownFile) {
814
814
  output.log(`= ${name}: conservado ${resolved.item.target} (tiene cambios tuyos)`)
815
- } else if (situacion === 'al día') {
815
+ } else if (status === 'al día') {
816
816
  output.log(`= ${name}: ${resolved.item.target} ya está al día`)
817
817
  } else {
818
818
  fs.mkdirSync(path.dirname(resolved.target), { recursive: true })
819
- const escrito = render(resolved.source, opsPrefix(root), resolved.automationRoot, resolved.opsRoot)
820
- F.atomicWrite(resolved.target, escrito)
821
- const verbo = situacion === 'nuevo' ? 'instalado' : 'actualizado'
822
- output.log(`✓ ${name}: ${verbo} ${resolved.item.target}`)
819
+ const written = render(resolved.source, opsPrefix(root), resolved.automationRoot, resolved.opsRoot)
820
+ F.atomicWrite(resolved.target, written)
821
+ const verb = status === 'nuevo' ? 'instalado' : 'actualizado'
822
+ output.log(`✓ ${name}: ${verb} ${resolved.item.target}`)
823
823
  }
824
824
  // Sólo se anota lo que Cauce puso: un archivo conservado con cambios de la empresa no es una
825
825
  // entrega, y registrarlo lo volvería indistinguible de uno intacto en la próxima instalación.
826
- if (!(situacion === 'ajeno' && propio)) {
827
- entregado[deliveryKey(name, resolved.item.target)] = M.digest(resolved.target)
826
+ if (!(status === 'ajeno' && ownFile)) {
827
+ deliveredPaths[deliveryKey(name, resolved.item.target)] = M.digest(resolved.target)
828
828
  }
829
829
  }
830
830
  installRoleSkills(root, runner, output)
831
- // Cómo se lo llama acá. El nombre del recorrido es el mismo en todos los runners —`onboard`, `team`,
831
+ // Cómo se lo llama acá. El nombre del recorrido es el mismo en todos los runners —`onboard`, `flow`,
832
832
  // `autobuild`—; el prefijo lo pone cada uno según su espacio de nombres, y esa diferencia es la que
833
833
  // hace que alguien no encuentre en Gemini lo que usó en Claude. Decirlo al instalar cuesta una línea
834
834
  // y ahorra buscarlo en una lista de cincuenta skills.
835
- const invocacion = runner.commands && runner.commands.invocation
836
- if (invocacion && (runner.commands.names || []).length) {
837
- const lista = runner.commands.names.map((nombre) => invocacion.replace('{name}', nombre))
838
- output.log(` ${name}: se invocan como ${lista.join(', ')}`)
835
+ const invocation = runner.commands && runner.commands.invocation
836
+ if (invocation && (runner.commands.names || []).length) {
837
+ const listing = runner.commands.names.map((nombre) => invocation.replace('{name}', nombre))
838
+ output.log(` ${name}: se invocan como ${listing.join(', ')}`)
839
839
  }
840
840
  if (runner.activation && activated(runner) !== true) {
841
841
  output.log(` ${name}: falta registrarlo para que corra. Desde ${paths.install}:`)
842
842
  output.log(` ${runner.activation.hint}`)
843
843
  }
844
- M.write(root, undefined, entregado)
844
+ M.write(root, undefined, deliveredPaths)
845
845
  return runner
846
846
  }
847
847
 
@@ -25,9 +25,9 @@ const FLAGS = {
25
25
  agents: ['--json', '--own', '--system'],
26
26
  integration: ['--fixture'],
27
27
  automation: ['--force'],
28
- learn: ['--proposal', '--applied', '--period'],
29
- evaluate: ['--cases', '--json', '--bench', '--force', '--record'],
30
- team: ['--json'],
28
+ learn: ['--flow', '--proposal', '--applied', '--period'],
29
+ evaluate: ['--cases', '--json', '--bench', '--force', '--record', '--flow'],
30
+ flow: ['--json'],
31
31
  }
32
32
 
33
33
  // La línea de comandos, leída una sola vez. Antes cada función buscaba sus banderas en
@@ -8,12 +8,12 @@
8
8
 
9
9
  const readline = require('node:readline/promises')
10
10
 
11
- const SIN_RUNNER = 'ninguno'
12
- const SIN_PROVEEDOR = 'ninguna'
11
+ const NO_RUNNER = 'ninguno'
12
+ const NO_PROVIDER = 'ninguna'
13
13
 
14
14
  // Cuántas veces se repregunta antes de tomar el default. Insistir para siempre cuelga una corrida no
15
15
  // interactiva que igual llegó hasta acá; rendirse a la primera convierte un dedazo en una decisión.
16
- const INTENTOS = 3
16
+ const ATTEMPTS = 3
17
17
 
18
18
  // Una terminal de verdad, aislada acá para que el resto del módulo no sepa que existe.
19
19
  function terminal() {
@@ -24,24 +24,24 @@ function terminal() {
24
24
  // Un Ctrl+D o un Ctrl+C en mitad de la pregunta valen como «no elijo»: readline rechaza la promesa, y
25
25
  // dejar que ese rechazo suba terminaba la corrida con «Aborted with Ctrl+D» y la instancia recién creada
26
26
  // sin una línea que dijera cómo seguir. El default no hace nada, así que tomarlo no decide nada.
27
- async function elegir(deps, texto, opciones, fallback) {
27
+ async function choose(deps, texto, opciones, fallback) {
28
28
  // Una opción por línea y el default señalado donde se mira: apretar Enter es la respuesta más común, y
29
29
  // en una sola línea apretada el `[ninguno]` del final no se lee como «esto pasa si no elegís nada».
30
- const listado = opciones
30
+ const options = opciones
31
31
  .map((opcion, indice) => ` ${indice + 1}) ${opcion}${opcion === fallback ? ' ← Enter' : ''}`)
32
32
  .join('\n')
33
- for (let intento = 0; intento < INTENTOS; intento += 1) {
34
- let dicho
35
- try { dicho = await deps.ask(`\n${texto}\n\n${listado}\n\n> `) } catch {
33
+ for (let attempt = 0; attempt < ATTEMPTS; attempt += 1) {
34
+ let typed
35
+ try { typed = await deps.ask(`\n${texto}\n\n${options}\n\n> `) } catch {
36
36
  deps.log(`\n sin respuesta: sigo con ${fallback}.`)
37
37
  return fallback
38
38
  }
39
- const respuesta = dicho.trim()
40
- if (!respuesta) return fallback
41
- const numero = Number(respuesta)
42
- if (Number.isInteger(numero) && numero >= 1 && numero <= opciones.length) return opciones[numero - 1]
43
- if (opciones.includes(respuesta)) return respuesta
44
- deps.log(` «${respuesta}» no está en la lista.`)
39
+ const answer = typed.trim()
40
+ if (!answer) return fallback
41
+ const index = Number(answer)
42
+ if (Number.isInteger(index) && index >= 1 && index <= opciones.length) return opciones[index - 1]
43
+ if (opciones.includes(answer)) return answer
44
+ deps.log(` «${answer}» no está en la lista.`)
45
45
  }
46
46
  return fallback
47
47
  }
@@ -52,32 +52,32 @@ async function elegir(deps, texto, opciones, fallback) {
52
52
  //
53
53
  // La terminal se abre acá y no en el CLI, y sólo si hay algo que preguntar: quien llama no tiene por
54
54
  // qué saber que readline existe, y una prueba reemplaza `deps.ask` sin que se abra ninguna.
55
- async function preguntas(opciones, deps) {
56
- const falta = !opciones.runner || !opciones.integration
57
- if (!opciones.interactive || !falta) {
58
- return { runner: opciones.runner || SIN_RUNNER, proveedor: opciones.integration || SIN_PROVEEDOR }
55
+ async function askMissing(opciones, deps) {
56
+ const missing = !opciones.runner || !opciones.integration
57
+ if (!opciones.interactive || !missing) {
58
+ return { runner: opciones.runner || NO_RUNNER, provider: opciones.integration || NO_PROVIDER }
59
59
  }
60
60
  const tty = deps.ask ? null : terminal()
61
- const con = { ...deps, ask: deps.ask || tty.ask }
62
- const runners = [...opciones.runners, SIN_RUNNER]
63
- const proveedores = [...opciones.providers, SIN_PROVEEDOR]
61
+ const io = { ...deps, ask: deps.ask || tty.ask }
62
+ const runners = [...opciones.runners, NO_RUNNER]
63
+ const providers = [...opciones.providers, NO_PROVIDER]
64
64
  try {
65
65
  const runner = opciones.runner
66
- || await elegir(con, '¿Con qué runner vas a trabajar?', runners, SIN_RUNNER)
67
- const proveedor = opciones.integration
68
- || await elegir(con, '¿Habilitar alguna integración?', proveedores, SIN_PROVEEDOR)
69
- return { runner, proveedor }
66
+ || await choose(io, '¿Con qué runner vas a trabajar?', runners, NO_RUNNER)
67
+ const provider = opciones.integration
68
+ || await choose(io, '¿Habilitar alguna integración?', providers, NO_PROVIDER)
69
+ return { runner, provider }
70
70
  } finally { if (tty) tty.close() }
71
71
  }
72
72
 
73
- function validar(opciones) {
74
- const runners = [...opciones.runners, SIN_RUNNER]
75
- const proveedores = [...opciones.providers, SIN_PROVEEDOR]
73
+ function validate(opciones) {
74
+ const runners = [...opciones.runners, NO_RUNNER]
75
+ const providers = [...opciones.providers, NO_PROVIDER]
76
76
  if (opciones.runner && !runners.includes(opciones.runner)) {
77
77
  throw new Error(`--runner debe ser ${runners.join(', ')}.`)
78
78
  }
79
- if (opciones.integration && !proveedores.includes(opciones.integration)) {
80
- throw new Error(`--integration debe ser ${proveedores.join(', ')}.`)
79
+ if (opciones.integration && !providers.includes(opciones.integration)) {
80
+ throw new Error(`--integration debe ser ${providers.join(', ')}.`)
81
81
  }
82
82
  }
83
83
 
@@ -85,16 +85,16 @@ function validar(opciones) {
85
85
  // habilita con el motor que corre `init` —su plantilla viaja en el paquete—, pero el runner necesita
86
86
  // la dependencia ya instalada, porque sus adaptadores y workflows se resuelven desde `node_modules`.
87
87
  async function run(root, opciones, deps) {
88
- validar(opciones)
89
- const { runner, proveedor } = await preguntas(opciones, deps)
90
- if (proveedor !== SIN_PROVEEDOR) deps.enableProvider(proveedor)
91
- if (!opciones.install) return { runner, proveedor, instalado: false, pendiente: 'npm install' }
88
+ validate(opciones)
89
+ const { runner, provider } = await askMissing(opciones, deps)
90
+ if (provider !== NO_PROVIDER) deps.enableProvider(provider)
91
+ if (!opciones.install) return { runner, provider, installed: false, pending: 'npm install' }
92
92
  deps.log('\n· npm install (el motor viene de la dependencia)')
93
93
  if (deps.npm(root) !== 0) {
94
- return { runner, proveedor, instalado: false, error: 'npm install falló', pendiente: 'npm install' }
94
+ return { runner, provider, installed: false, error: 'npm install falló', pending: 'npm install' }
95
95
  }
96
- if (runner !== SIN_RUNNER) deps.installRunner(runner)
97
- return { runner, proveedor, instalado: true }
96
+ if (runner !== NO_RUNNER) deps.installRunner(runner)
97
+ return { runner, provider, installed: true }
98
98
  }
99
99
 
100
- module.exports = { run, SIN_RUNNER, SIN_PROVEEDOR }
100
+ module.exports = { run, NO_RUNNER, NO_PROVIDER }