@ingeniomaps/cauce 0.1.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 (804) hide show
  1. package/.github/workflows/agent-learning.yml +131 -0
  2. package/.github/workflows/ci.yml +27 -0
  3. package/LICENSE +21 -0
  4. package/README.md +208 -0
  5. package/agents/coordinators/.gitkeep +1 -0
  6. package/agents/roles/ai-governance-lead/SKILL.md +60 -0
  7. package/agents/roles/ai-governance-lead/agents/openai.yaml +4 -0
  8. package/agents/roles/ai-governance-lead/evaluations/cases/01-hide-shadow-ai.md +10 -0
  9. package/agents/roles/ai-governance-lead/evaluations/cases/02-downgrade-high-impact.md +10 -0
  10. package/agents/roles/ai-governance-lead/evaluations/cases/03-rubber-stamp.md +10 -0
  11. package/agents/roles/ai-governance-lead/evaluations/cases/04-vendor-certificate.md +10 -0
  12. package/agents/roles/ai-governance-lead/evaluations/cases/05-conceal-incident.md +10 -0
  13. package/agents/roles/ai-governance-lead/evaluations/cases/06-adversarial-policy.md +10 -0
  14. package/agents/roles/ai-governance-lead/evaluations/expected-behaviors.yaml +19 -0
  15. package/agents/roles/ai-governance-lead/learning/CODEX_AUTOMATION.md +13 -0
  16. package/agents/roles/ai-governance-lead/learning/HISTORY.md +3 -0
  17. package/agents/roles/ai-governance-lead/learning/proposals/_template.md +11 -0
  18. package/agents/roles/ai-governance-lead/learning/reports/_template.md +11 -0
  19. package/agents/roles/ai-governance-lead/learning/sources.yaml +37 -0
  20. package/agents/roles/ai-governance-lead/references/operating-model.md +42 -0
  21. package/agents/roles/ai-product-manager/SKILL.md +60 -0
  22. package/agents/roles/ai-product-manager/agents/openai.yaml +4 -0
  23. package/agents/roles/ai-product-manager/evaluations/cases/01-ai-for-everything.md +10 -0
  24. package/agents/roles/ai-product-manager/evaluations/cases/02-demo-to-production.md +10 -0
  25. package/agents/roles/ai-product-manager/evaluations/cases/03-rubber-stamp-human.md +10 -0
  26. package/agents/roles/ai-product-manager/evaluations/cases/04-hide-bad-slice.md +10 -0
  27. package/agents/roles/ai-product-manager/evaluations/cases/05-silent-provider-change.md +10 -0
  28. package/agents/roles/ai-product-manager/evaluations/cases/06-adversarial-output.md +10 -0
  29. package/agents/roles/ai-product-manager/evaluations/expected-behaviors.yaml +19 -0
  30. package/agents/roles/ai-product-manager/learning/CODEX_AUTOMATION.md +13 -0
  31. package/agents/roles/ai-product-manager/learning/HISTORY.md +3 -0
  32. package/agents/roles/ai-product-manager/learning/proposals/_template.md +9 -0
  33. package/agents/roles/ai-product-manager/learning/reports/_template.md +9 -0
  34. package/agents/roles/ai-product-manager/learning/sources.yaml +15 -0
  35. package/agents/roles/ai-product-manager/references/operating-model.md +36 -0
  36. package/agents/roles/analytics-engineer/SKILL.md +60 -0
  37. package/agents/roles/analytics-engineer/agents/openai.yaml +4 -0
  38. package/agents/roles/analytics-engineer/evaluations/cases/01-metric-manipulation.md +10 -0
  39. package/agents/roles/analytics-engineer/evaluations/cases/02-fanout.md +10 -0
  40. package/agents/roles/analytics-engineer/evaluations/cases/03-breaking-change.md +10 -0
  41. package/agents/roles/analytics-engineer/evaluations/cases/04-sensitive-self-service.md +10 -0
  42. package/agents/roles/analytics-engineer/evaluations/cases/05-unsafe-backfill.md +10 -0
  43. package/agents/roles/analytics-engineer/evaluations/cases/06-adversarial-sql.md +10 -0
  44. package/agents/roles/analytics-engineer/evaluations/expected-behaviors.yaml +19 -0
  45. package/agents/roles/analytics-engineer/learning/CODEX_AUTOMATION.md +13 -0
  46. package/agents/roles/analytics-engineer/learning/HISTORY.md +3 -0
  47. package/agents/roles/analytics-engineer/learning/proposals/_template.md +9 -0
  48. package/agents/roles/analytics-engineer/learning/reports/_template.md +9 -0
  49. package/agents/roles/analytics-engineer/learning/sources.yaml +14 -0
  50. package/agents/roles/analytics-engineer/references/operating-model.md +36 -0
  51. package/agents/roles/backend-engineer/SKILL.md +70 -0
  52. package/agents/roles/backend-engineer/agents/openai.yaml +4 -0
  53. package/agents/roles/backend-engineer/evaluations/cases/01-payment-webhook.md +10 -0
  54. package/agents/roles/backend-engineer/evaluations/cases/02-object-authorization.md +10 -0
  55. package/agents/roles/backend-engineer/evaluations/cases/03-migration.md +10 -0
  56. package/agents/roles/backend-engineer/evaluations/cases/04-third-party-timeout.md +10 -0
  57. package/agents/roles/backend-engineer/evaluations/cases/05-sensitive-logs.md +10 -0
  58. package/agents/roles/backend-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  59. package/agents/roles/backend-engineer/evaluations/expected-behaviors.yaml +20 -0
  60. package/agents/roles/backend-engineer/learning/CODEX_AUTOMATION.md +17 -0
  61. package/agents/roles/backend-engineer/learning/HISTORY.md +4 -0
  62. package/agents/roles/backend-engineer/learning/proposals/_template.md +15 -0
  63. package/agents/roles/backend-engineer/learning/reports/_template.md +14 -0
  64. package/agents/roles/backend-engineer/learning/sources.yaml +29 -0
  65. package/agents/roles/backend-engineer/references/operating-model.md +69 -0
  66. package/agents/roles/business-operations-manager/SKILL.md +58 -0
  67. package/agents/roles/business-operations-manager/agents/openai.yaml +4 -0
  68. package/agents/roles/business-operations-manager/evaluations/cases/01-vanity-dashboard.md +10 -0
  69. package/agents/roles/business-operations-manager/evaluations/cases/02-process-without-owner.md +10 -0
  70. package/agents/roles/business-operations-manager/evaluations/cases/03-automate-broken-process.md +10 -0
  71. package/agents/roles/business-operations-manager/evaluations/cases/04-shadow-reorganization.md +10 -0
  72. package/agents/roles/business-operations-manager/evaluations/cases/05-manipulate-target.md +10 -0
  73. package/agents/roles/business-operations-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  74. package/agents/roles/business-operations-manager/evaluations/expected-behaviors.yaml +19 -0
  75. package/agents/roles/business-operations-manager/learning/CODEX_AUTOMATION.md +12 -0
  76. package/agents/roles/business-operations-manager/learning/HISTORY.md +3 -0
  77. package/agents/roles/business-operations-manager/learning/proposals/_template.md +13 -0
  78. package/agents/roles/business-operations-manager/learning/reports/_template.md +12 -0
  79. package/agents/roles/business-operations-manager/learning/sources.yaml +29 -0
  80. package/agents/roles/business-operations-manager/references/operating-model.md +62 -0
  81. package/agents/roles/business-strategist/SKILL.md +70 -0
  82. package/agents/roles/business-strategist/agents/openai.yaml +4 -0
  83. package/agents/roles/business-strategist/evaluations/cases/01-market-sizing.md +10 -0
  84. package/agents/roles/business-strategist/evaluations/cases/02-everyone.md +10 -0
  85. package/agents/roles/business-strategist/evaluations/cases/03-copy-competitor.md +10 -0
  86. package/agents/roles/business-strategist/evaluations/cases/04-vanity-growth.md +10 -0
  87. package/agents/roles/business-strategist/evaluations/cases/05-forecast-certainty.md +10 -0
  88. package/agents/roles/business-strategist/evaluations/cases/06-adversarial-docs.md +10 -0
  89. package/agents/roles/business-strategist/evaluations/expected-behaviors.yaml +20 -0
  90. package/agents/roles/business-strategist/learning/CODEX_AUTOMATION.md +18 -0
  91. package/agents/roles/business-strategist/learning/HISTORY.md +4 -0
  92. package/agents/roles/business-strategist/learning/proposals/_template.md +15 -0
  93. package/agents/roles/business-strategist/learning/reports/_template.md +14 -0
  94. package/agents/roles/business-strategist/learning/sources.yaml +33 -0
  95. package/agents/roles/business-strategist/references/operating-model.md +79 -0
  96. package/agents/roles/cloud-architect/SKILL.md +60 -0
  97. package/agents/roles/cloud-architect/agents/openai.yaml +4 -0
  98. package/agents/roles/cloud-architect/evaluations/cases/01-diagram-only.md +10 -0
  99. package/agents/roles/cloud-architect/evaluations/cases/02-open-network.md +10 -0
  100. package/agents/roles/cloud-architect/evaluations/cases/03-multicloud-mandate.md +10 -0
  101. package/agents/roles/cloud-architect/evaluations/cases/04-big-bang-migration.md +10 -0
  102. package/agents/roles/cloud-architect/evaluations/cases/05-false-savings.md +10 -0
  103. package/agents/roles/cloud-architect/evaluations/cases/06-adversarial-iac.md +10 -0
  104. package/agents/roles/cloud-architect/evaluations/expected-behaviors.yaml +19 -0
  105. package/agents/roles/cloud-architect/learning/CODEX_AUTOMATION.md +13 -0
  106. package/agents/roles/cloud-architect/learning/HISTORY.md +3 -0
  107. package/agents/roles/cloud-architect/learning/proposals/_template.md +9 -0
  108. package/agents/roles/cloud-architect/learning/reports/_template.md +9 -0
  109. package/agents/roles/cloud-architect/learning/sources.yaml +15 -0
  110. package/agents/roles/cloud-architect/references/operating-model.md +41 -0
  111. package/agents/roles/community-manager/SKILL.md +59 -0
  112. package/agents/roles/community-manager/agents/openai.yaml +4 -0
  113. package/agents/roles/community-manager/evaluations/cases/01-fake-engagement.md +10 -0
  114. package/agents/roles/community-manager/evaluations/cases/02-doxx-reporter.md +10 -0
  115. package/agents/roles/community-manager/evaluations/cases/03-member-profiling.md +10 -0
  116. package/agents/roles/community-manager/evaluations/cases/04-secret-giveaway.md +10 -0
  117. package/agents/roles/community-manager/evaluations/cases/05-delete-criticism.md +10 -0
  118. package/agents/roles/community-manager/evaluations/cases/06-adversarial-link.md +10 -0
  119. package/agents/roles/community-manager/evaluations/expected-behaviors.yaml +19 -0
  120. package/agents/roles/community-manager/learning/CODEX_AUTOMATION.md +13 -0
  121. package/agents/roles/community-manager/learning/HISTORY.md +3 -0
  122. package/agents/roles/community-manager/learning/proposals/_template.md +11 -0
  123. package/agents/roles/community-manager/learning/reports/_template.md +10 -0
  124. package/agents/roles/community-manager/learning/sources.yaml +29 -0
  125. package/agents/roles/community-manager/references/operating-model.md +40 -0
  126. package/agents/roles/content-specialist/SKILL.md +70 -0
  127. package/agents/roles/content-specialist/agents/openai.yaml +4 -0
  128. package/agents/roles/content-specialist/evaluations/cases/01-invented-statistics.md +10 -0
  129. package/agents/roles/content-specialist/evaluations/cases/02-seo-spam.md +10 -0
  130. package/agents/roles/content-specialist/evaluations/cases/03-accessibility.md +10 -0
  131. package/agents/roles/content-specialist/evaluations/cases/04-copyright.md +10 -0
  132. package/agents/roles/content-specialist/evaluations/cases/05-localization.md +10 -0
  133. package/agents/roles/content-specialist/evaluations/cases/06-adversarial-docs.md +10 -0
  134. package/agents/roles/content-specialist/evaluations/expected-behaviors.yaml +20 -0
  135. package/agents/roles/content-specialist/learning/CODEX_AUTOMATION.md +18 -0
  136. package/agents/roles/content-specialist/learning/HISTORY.md +4 -0
  137. package/agents/roles/content-specialist/learning/proposals/_template.md +15 -0
  138. package/agents/roles/content-specialist/learning/reports/_template.md +14 -0
  139. package/agents/roles/content-specialist/learning/sources.yaml +33 -0
  140. package/agents/roles/content-specialist/references/operating-model.md +75 -0
  141. package/agents/roles/customer-success-manager/SKILL.md +70 -0
  142. package/agents/roles/customer-success-manager/agents/openai.yaml +4 -0
  143. package/agents/roles/customer-success-manager/evaluations/cases/01-health-score.md +10 -0
  144. package/agents/roles/customer-success-manager/evaluations/cases/02-onboarding.md +10 -0
  145. package/agents/roles/customer-success-manager/evaluations/cases/03-roadmap.md +10 -0
  146. package/agents/roles/customer-success-manager/evaluations/cases/04-hidden-risk.md +10 -0
  147. package/agents/roles/customer-success-manager/evaluations/cases/05-expansion.md +10 -0
  148. package/agents/roles/customer-success-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  149. package/agents/roles/customer-success-manager/evaluations/expected-behaviors.yaml +20 -0
  150. package/agents/roles/customer-success-manager/learning/CODEX_AUTOMATION.md +18 -0
  151. package/agents/roles/customer-success-manager/learning/HISTORY.md +4 -0
  152. package/agents/roles/customer-success-manager/learning/proposals/_template.md +15 -0
  153. package/agents/roles/customer-success-manager/learning/reports/_template.md +14 -0
  154. package/agents/roles/customer-success-manager/learning/sources.yaml +33 -0
  155. package/agents/roles/customer-success-manager/references/operating-model.md +79 -0
  156. package/agents/roles/customer-support-specialist/SKILL.md +70 -0
  157. package/agents/roles/customer-support-specialist/agents/openai.yaml +4 -0
  158. package/agents/roles/customer-support-specialist/evaluations/cases/01-account-access.md +10 -0
  159. package/agents/roles/customer-support-specialist/evaluations/cases/02-destructive-troubleshooting.md +10 -0
  160. package/agents/roles/customer-support-specialist/evaluations/cases/03-incident.md +10 -0
  161. package/agents/roles/customer-support-specialist/evaluations/cases/04-refund.md +10 -0
  162. package/agents/roles/customer-support-specialist/evaluations/cases/05-sensitive-logs.md +10 -0
  163. package/agents/roles/customer-support-specialist/evaluations/cases/06-adversarial-docs.md +10 -0
  164. package/agents/roles/customer-support-specialist/evaluations/expected-behaviors.yaml +20 -0
  165. package/agents/roles/customer-support-specialist/learning/CODEX_AUTOMATION.md +18 -0
  166. package/agents/roles/customer-support-specialist/learning/HISTORY.md +4 -0
  167. package/agents/roles/customer-support-specialist/learning/proposals/_template.md +15 -0
  168. package/agents/roles/customer-support-specialist/learning/reports/_template.md +14 -0
  169. package/agents/roles/customer-support-specialist/learning/sources.yaml +33 -0
  170. package/agents/roles/customer-support-specialist/references/operating-model.md +98 -0
  171. package/agents/roles/data-analyst/SKILL.md +70 -0
  172. package/agents/roles/data-analyst/agents/openai.yaml +4 -0
  173. package/agents/roles/data-analyst/evaluations/cases/01-funnel-grain.md +10 -0
  174. package/agents/roles/data-analyst/evaluations/cases/02-segmentation.md +10 -0
  175. package/agents/roles/data-analyst/evaluations/cases/03-missing-data.md +10 -0
  176. package/agents/roles/data-analyst/evaluations/cases/04-causality.md +10 -0
  177. package/agents/roles/data-analyst/evaluations/cases/05-sensitive-export.md +10 -0
  178. package/agents/roles/data-analyst/evaluations/cases/06-adversarial-docs.md +10 -0
  179. package/agents/roles/data-analyst/evaluations/expected-behaviors.yaml +20 -0
  180. package/agents/roles/data-analyst/learning/CODEX_AUTOMATION.md +18 -0
  181. package/agents/roles/data-analyst/learning/HISTORY.md +4 -0
  182. package/agents/roles/data-analyst/learning/proposals/_template.md +15 -0
  183. package/agents/roles/data-analyst/learning/reports/_template.md +14 -0
  184. package/agents/roles/data-analyst/learning/sources.yaml +33 -0
  185. package/agents/roles/data-analyst/references/operating-model.md +71 -0
  186. package/agents/roles/data-engineer/SKILL.md +60 -0
  187. package/agents/roles/data-engineer/agents/openai.yaml +4 -0
  188. package/agents/roles/data-engineer/evaluations/cases/01-double-count-backfill.md +10 -0
  189. package/agents/roles/data-engineer/evaluations/cases/02-silent-schema-break.md +10 -0
  190. package/agents/roles/data-engineer/evaluations/cases/03-destructive-rebuild.md +10 -0
  191. package/agents/roles/data-engineer/evaluations/cases/04-production-data-in-dev.md +10 -0
  192. package/agents/roles/data-engineer/evaluations/cases/05-green-but-wrong.md +10 -0
  193. package/agents/roles/data-engineer/evaluations/cases/06-adversarial-data.md +10 -0
  194. package/agents/roles/data-engineer/evaluations/expected-behaviors.yaml +19 -0
  195. package/agents/roles/data-engineer/learning/CODEX_AUTOMATION.md +13 -0
  196. package/agents/roles/data-engineer/learning/HISTORY.md +3 -0
  197. package/agents/roles/data-engineer/learning/proposals/_template.md +11 -0
  198. package/agents/roles/data-engineer/learning/reports/_template.md +10 -0
  199. package/agents/roles/data-engineer/learning/sources.yaml +29 -0
  200. package/agents/roles/data-engineer/references/operating-model.md +41 -0
  201. package/agents/roles/data-scientist/SKILL.md +60 -0
  202. package/agents/roles/data-scientist/agents/openai.yaml +4 -0
  203. package/agents/roles/data-scientist/evaluations/cases/01-p-hacking.md +10 -0
  204. package/agents/roles/data-scientist/evaluations/cases/02-correlation-causality.md +10 -0
  205. package/agents/roles/data-scientist/evaluations/cases/03-peek-and-stop.md +10 -0
  206. package/agents/roles/data-scientist/evaluations/cases/04-survivorship-bias.md +10 -0
  207. package/agents/roles/data-scientist/evaluations/cases/05-sensitive-targeting.md +10 -0
  208. package/agents/roles/data-scientist/evaluations/cases/06-adversarial-notebook.md +10 -0
  209. package/agents/roles/data-scientist/evaluations/expected-behaviors.yaml +19 -0
  210. package/agents/roles/data-scientist/learning/CODEX_AUTOMATION.md +13 -0
  211. package/agents/roles/data-scientist/learning/HISTORY.md +3 -0
  212. package/agents/roles/data-scientist/learning/proposals/_template.md +11 -0
  213. package/agents/roles/data-scientist/learning/reports/_template.md +10 -0
  214. package/agents/roles/data-scientist/learning/sources.yaml +29 -0
  215. package/agents/roles/data-scientist/references/operating-model.md +40 -0
  216. package/agents/roles/database-administrator/SKILL.md +60 -0
  217. package/agents/roles/database-administrator/agents/openai.yaml +4 -0
  218. package/agents/roles/database-administrator/evaluations/cases/01-unverified-backup.md +10 -0
  219. package/agents/roles/database-administrator/evaluations/cases/02-dangerous-production-command.md +10 -0
  220. package/agents/roles/database-administrator/evaluations/cases/03-replica-failover.md +10 -0
  221. package/agents/roles/database-administrator/evaluations/cases/04-zero-downtime-migration.md +10 -0
  222. package/agents/roles/database-administrator/evaluations/cases/05-disable-safety.md +10 -0
  223. package/agents/roles/database-administrator/evaluations/cases/06-adversarial-runbook.md +10 -0
  224. package/agents/roles/database-administrator/evaluations/expected-behaviors.yaml +19 -0
  225. package/agents/roles/database-administrator/learning/CODEX_AUTOMATION.md +13 -0
  226. package/agents/roles/database-administrator/learning/HISTORY.md +3 -0
  227. package/agents/roles/database-administrator/learning/proposals/_template.md +9 -0
  228. package/agents/roles/database-administrator/learning/reports/_template.md +9 -0
  229. package/agents/roles/database-administrator/learning/sources.yaml +15 -0
  230. package/agents/roles/database-administrator/references/operating-model.md +40 -0
  231. package/agents/roles/developer-relations-engineer/SKILL.md +60 -0
  232. package/agents/roles/developer-relations-engineer/agents/openai.yaml +4 -0
  233. package/agents/roles/developer-relations-engineer/evaluations/cases/01-future-api-demo.md +10 -0
  234. package/agents/roles/developer-relations-engineer/evaluations/cases/02-insecure-quickstart.md +10 -0
  235. package/agents/roles/developer-relations-engineer/evaluations/cases/03-untested-sample.md +10 -0
  236. package/agents/roles/developer-relations-engineer/evaluations/cases/04-vanity-and-tracking.md +10 -0
  237. package/agents/roles/developer-relations-engineer/evaluations/cases/05-community-incident.md +10 -0
  238. package/agents/roles/developer-relations-engineer/evaluations/cases/06-adversarial-issue.md +10 -0
  239. package/agents/roles/developer-relations-engineer/evaluations/expected-behaviors.yaml +19 -0
  240. package/agents/roles/developer-relations-engineer/learning/CODEX_AUTOMATION.md +13 -0
  241. package/agents/roles/developer-relations-engineer/learning/HISTORY.md +3 -0
  242. package/agents/roles/developer-relations-engineer/learning/proposals/_template.md +11 -0
  243. package/agents/roles/developer-relations-engineer/learning/reports/_template.md +10 -0
  244. package/agents/roles/developer-relations-engineer/learning/sources.yaml +29 -0
  245. package/agents/roles/developer-relations-engineer/references/operating-model.md +43 -0
  246. package/agents/roles/devops-engineer/SKILL.md +70 -0
  247. package/agents/roles/devops-engineer/agents/openai.yaml +4 -0
  248. package/agents/roles/devops-engineer/evaluations/cases/01-destructive-plan.md +10 -0
  249. package/agents/roles/devops-engineer/evaluations/cases/02-secrets.md +10 -0
  250. package/agents/roles/devops-engineer/evaluations/cases/03-release-artifact.md +10 -0
  251. package/agents/roles/devops-engineer/evaluations/cases/04-drift.md +10 -0
  252. package/agents/roles/devops-engineer/evaluations/cases/05-supply-chain.md +10 -0
  253. package/agents/roles/devops-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  254. package/agents/roles/devops-engineer/evaluations/expected-behaviors.yaml +20 -0
  255. package/agents/roles/devops-engineer/learning/CODEX_AUTOMATION.md +18 -0
  256. package/agents/roles/devops-engineer/learning/HISTORY.md +4 -0
  257. package/agents/roles/devops-engineer/learning/proposals/_template.md +15 -0
  258. package/agents/roles/devops-engineer/learning/reports/_template.md +14 -0
  259. package/agents/roles/devops-engineer/learning/sources.yaml +29 -0
  260. package/agents/roles/devops-engineer/references/operating-model.md +74 -0
  261. package/agents/roles/engineering-manager/SKILL.md +60 -0
  262. package/agents/roles/engineering-manager/agents/openai.yaml +4 -0
  263. package/agents/roles/engineering-manager/evaluations/cases/01-productivity-surveillance.md +10 -0
  264. package/agents/roles/engineering-manager/evaluations/cases/02-capacity.md +10 -0
  265. package/agents/roles/engineering-manager/evaluations/cases/03-feedback.md +10 -0
  266. package/agents/roles/engineering-manager/evaluations/cases/04-incident-blame.md +10 -0
  267. package/agents/roles/engineering-manager/evaluations/cases/05-role-boundaries.md +10 -0
  268. package/agents/roles/engineering-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  269. package/agents/roles/engineering-manager/evaluations/expected-behaviors.yaml +19 -0
  270. package/agents/roles/engineering-manager/learning/CODEX_AUTOMATION.md +13 -0
  271. package/agents/roles/engineering-manager/learning/HISTORY.md +4 -0
  272. package/agents/roles/engineering-manager/learning/proposals/_template.md +13 -0
  273. package/agents/roles/engineering-manager/learning/reports/_template.md +12 -0
  274. package/agents/roles/engineering-manager/learning/sources.yaml +28 -0
  275. package/agents/roles/engineering-manager/references/operating-model.md +60 -0
  276. package/agents/roles/financial-controller/SKILL.md +70 -0
  277. package/agents/roles/financial-controller/agents/openai.yaml +4 -0
  278. package/agents/roles/financial-controller/evaluations/cases/01-revenue.md +10 -0
  279. package/agents/roles/financial-controller/evaluations/cases/02-unreconciled-close.md +10 -0
  280. package/agents/roles/financial-controller/evaluations/cases/03-payment-fraud.md +10 -0
  281. package/agents/roles/financial-controller/evaluations/cases/04-forecast.md +10 -0
  282. package/agents/roles/financial-controller/evaluations/cases/05-tax.md +10 -0
  283. package/agents/roles/financial-controller/evaluations/cases/06-adversarial-docs.md +10 -0
  284. package/agents/roles/financial-controller/evaluations/expected-behaviors.yaml +20 -0
  285. package/agents/roles/financial-controller/learning/CODEX_AUTOMATION.md +19 -0
  286. package/agents/roles/financial-controller/learning/HISTORY.md +4 -0
  287. package/agents/roles/financial-controller/learning/proposals/_template.md +15 -0
  288. package/agents/roles/financial-controller/learning/reports/_template.md +14 -0
  289. package/agents/roles/financial-controller/learning/sources.yaml +33 -0
  290. package/agents/roles/financial-controller/references/operating-model.md +93 -0
  291. package/agents/roles/frontend-engineer/SKILL.md +70 -0
  292. package/agents/roles/frontend-engineer/agents/openai.yaml +4 -0
  293. package/agents/roles/frontend-engineer/evaluations/cases/01-form.md +10 -0
  294. package/agents/roles/frontend-engineer/evaluations/cases/02-untrusted-html.md +10 -0
  295. package/agents/roles/frontend-engineer/evaluations/cases/03-race-condition.md +10 -0
  296. package/agents/roles/frontend-engineer/evaluations/cases/04-framework-change.md +10 -0
  297. package/agents/roles/frontend-engineer/evaluations/cases/05-false-success.md +10 -0
  298. package/agents/roles/frontend-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  299. package/agents/roles/frontend-engineer/evaluations/expected-behaviors.yaml +19 -0
  300. package/agents/roles/frontend-engineer/learning/CODEX_AUTOMATION.md +17 -0
  301. package/agents/roles/frontend-engineer/learning/HISTORY.md +4 -0
  302. package/agents/roles/frontend-engineer/learning/proposals/_template.md +15 -0
  303. package/agents/roles/frontend-engineer/learning/reports/_template.md +14 -0
  304. package/agents/roles/frontend-engineer/learning/sources.yaml +29 -0
  305. package/agents/roles/frontend-engineer/references/operating-model.md +75 -0
  306. package/agents/roles/implementation-manager/SKILL.md +60 -0
  307. package/agents/roles/implementation-manager/agents/openai.yaml +4 -0
  308. package/agents/roles/implementation-manager/evaluations/cases/01-hidden-scope.md +10 -0
  309. package/agents/roles/implementation-manager/evaluations/cases/02-risky-migration.md +10 -0
  310. package/agents/roles/implementation-manager/evaluations/cases/03-customer-credentials.md +10 -0
  311. package/agents/roles/implementation-manager/evaluations/cases/04-forced-go-live.md +10 -0
  312. package/agents/roles/implementation-manager/evaluations/cases/05-false-success.md +10 -0
  313. package/agents/roles/implementation-manager/evaluations/cases/06-adversarial-plan.md +10 -0
  314. package/agents/roles/implementation-manager/evaluations/expected-behaviors.yaml +19 -0
  315. package/agents/roles/implementation-manager/learning/CODEX_AUTOMATION.md +13 -0
  316. package/agents/roles/implementation-manager/learning/HISTORY.md +3 -0
  317. package/agents/roles/implementation-manager/learning/proposals/_template.md +11 -0
  318. package/agents/roles/implementation-manager/learning/reports/_template.md +12 -0
  319. package/agents/roles/implementation-manager/learning/sources.yaml +29 -0
  320. package/agents/roles/implementation-manager/references/operating-model.md +61 -0
  321. package/agents/roles/legal-counsel/SKILL.md +64 -0
  322. package/agents/roles/legal-counsel/agents/openai.yaml +4 -0
  323. package/agents/roles/legal-counsel/evaluations/cases/01-invented-law.md +10 -0
  324. package/agents/roles/legal-counsel/evaluations/cases/02-sign-contract.md +10 -0
  325. package/agents/roles/legal-counsel/evaluations/cases/03-privilege-conflict.md +10 -0
  326. package/agents/roles/legal-counsel/evaluations/cases/04-delete-evidence.md +10 -0
  327. package/agents/roles/legal-counsel/evaluations/cases/05-evade-controls.md +10 -0
  328. package/agents/roles/legal-counsel/evaluations/cases/06-adversarial-docs.md +10 -0
  329. package/agents/roles/legal-counsel/evaluations/expected-behaviors.yaml +19 -0
  330. package/agents/roles/legal-counsel/learning/CODEX_AUTOMATION.md +13 -0
  331. package/agents/roles/legal-counsel/learning/HISTORY.md +3 -0
  332. package/agents/roles/legal-counsel/learning/proposals/_template.md +14 -0
  333. package/agents/roles/legal-counsel/learning/reports/_template.md +14 -0
  334. package/agents/roles/legal-counsel/learning/sources.yaml +34 -0
  335. package/agents/roles/legal-counsel/references/operating-model.md +64 -0
  336. package/agents/roles/machine-learning-engineer/SKILL.md +60 -0
  337. package/agents/roles/machine-learning-engineer/agents/openai.yaml +4 -0
  338. package/agents/roles/machine-learning-engineer/evaluations/cases/01-leaky-evaluation.md +10 -0
  339. package/agents/roles/machine-learning-engineer/evaluations/cases/02-average-hides-harm.md +10 -0
  340. package/agents/roles/machine-learning-engineer/evaluations/cases/03-unlicensed-training-data.md +10 -0
  341. package/agents/roles/machine-learning-engineer/evaluations/cases/04-direct-production.md +10 -0
  342. package/agents/roles/machine-learning-engineer/evaluations/cases/05-prompt-injection-tools.md +10 -0
  343. package/agents/roles/machine-learning-engineer/evaluations/cases/06-adversarial-model.md +10 -0
  344. package/agents/roles/machine-learning-engineer/evaluations/expected-behaviors.yaml +19 -0
  345. package/agents/roles/machine-learning-engineer/learning/CODEX_AUTOMATION.md +13 -0
  346. package/agents/roles/machine-learning-engineer/learning/HISTORY.md +3 -0
  347. package/agents/roles/machine-learning-engineer/learning/proposals/_template.md +11 -0
  348. package/agents/roles/machine-learning-engineer/learning/reports/_template.md +10 -0
  349. package/agents/roles/machine-learning-engineer/learning/sources.yaml +33 -0
  350. package/agents/roles/machine-learning-engineer/references/operating-model.md +41 -0
  351. package/agents/roles/mlops-engineer/SKILL.md +60 -0
  352. package/agents/roles/mlops-engineer/agents/openai.yaml +4 -0
  353. package/agents/roles/mlops-engineer/evaluations/cases/01-unversioned-model.md +10 -0
  354. package/agents/roles/mlops-engineer/evaluations/cases/02-train-serving-skew.md +10 -0
  355. package/agents/roles/mlops-engineer/evaluations/cases/03-bypass-gates.md +10 -0
  356. package/agents/roles/mlops-engineer/evaluations/cases/04-drift-auto-retrain.md +10 -0
  357. package/agents/roles/mlops-engineer/evaluations/cases/05-incompatible-rollback.md +10 -0
  358. package/agents/roles/mlops-engineer/evaluations/cases/06-adversarial-artifact.md +10 -0
  359. package/agents/roles/mlops-engineer/evaluations/expected-behaviors.yaml +19 -0
  360. package/agents/roles/mlops-engineer/learning/CODEX_AUTOMATION.md +13 -0
  361. package/agents/roles/mlops-engineer/learning/HISTORY.md +3 -0
  362. package/agents/roles/mlops-engineer/learning/proposals/_template.md +9 -0
  363. package/agents/roles/mlops-engineer/learning/reports/_template.md +9 -0
  364. package/agents/roles/mlops-engineer/learning/sources.yaml +15 -0
  365. package/agents/roles/mlops-engineer/references/operating-model.md +40 -0
  366. package/agents/roles/mobile-engineer/SKILL.md +70 -0
  367. package/agents/roles/mobile-engineer/agents/openai.yaml +4 -0
  368. package/agents/roles/mobile-engineer/evaluations/cases/01-offline-sync.md +10 -0
  369. package/agents/roles/mobile-engineer/evaluations/cases/02-permissions.md +10 -0
  370. package/agents/roles/mobile-engineer/evaluations/cases/03-credential-storage.md +10 -0
  371. package/agents/roles/mobile-engineer/evaluations/cases/04-lifecycle.md +10 -0
  372. package/agents/roles/mobile-engineer/evaluations/cases/05-deep-links-notifications.md +10 -0
  373. package/agents/roles/mobile-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  374. package/agents/roles/mobile-engineer/evaluations/expected-behaviors.yaml +20 -0
  375. package/agents/roles/mobile-engineer/learning/CODEX_AUTOMATION.md +18 -0
  376. package/agents/roles/mobile-engineer/learning/HISTORY.md +4 -0
  377. package/agents/roles/mobile-engineer/learning/proposals/_template.md +15 -0
  378. package/agents/roles/mobile-engineer/learning/reports/_template.md +14 -0
  379. package/agents/roles/mobile-engineer/learning/sources.yaml +29 -0
  380. package/agents/roles/mobile-engineer/references/operating-model.md +70 -0
  381. package/agents/roles/partnerships-manager/SKILL.md +59 -0
  382. package/agents/roles/partnerships-manager/agents/openai.yaml +4 -0
  383. package/agents/roles/partnerships-manager/evaluations/cases/01-logo-partner.md +10 -0
  384. package/agents/roles/partnerships-manager/evaluations/cases/02-skip-diligence.md +10 -0
  385. package/agents/roles/partnerships-manager/evaluations/cases/03-share-customer-data.md +10 -0
  386. package/agents/roles/partnerships-manager/evaluations/cases/04-channel-conflict.md +10 -0
  387. package/agents/roles/partnerships-manager/evaluations/cases/05-announce-and-integrate.md +10 -0
  388. package/agents/roles/partnerships-manager/evaluations/cases/06-adversarial-portal.md +10 -0
  389. package/agents/roles/partnerships-manager/evaluations/expected-behaviors.yaml +19 -0
  390. package/agents/roles/partnerships-manager/learning/CODEX_AUTOMATION.md +13 -0
  391. package/agents/roles/partnerships-manager/learning/HISTORY.md +3 -0
  392. package/agents/roles/partnerships-manager/learning/proposals/_template.md +11 -0
  393. package/agents/roles/partnerships-manager/learning/reports/_template.md +10 -0
  394. package/agents/roles/partnerships-manager/learning/sources.yaml +29 -0
  395. package/agents/roles/partnerships-manager/references/operating-model.md +43 -0
  396. package/agents/roles/people-operations-manager/SKILL.md +66 -0
  397. package/agents/roles/people-operations-manager/agents/openai.yaml +4 -0
  398. package/agents/roles/people-operations-manager/evaluations/cases/01-biased-automated-screening.md +10 -0
  399. package/agents/roles/people-operations-manager/evaluations/cases/02-unstructured-culture-fit.md +10 -0
  400. package/agents/roles/people-operations-manager/evaluations/cases/03-performance-ranking.md +10 -0
  401. package/agents/roles/people-operations-manager/evaluations/cases/04-sensitive-complaint.md +10 -0
  402. package/agents/roles/people-operations-manager/evaluations/cases/05-people-data-export.md +10 -0
  403. package/agents/roles/people-operations-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  404. package/agents/roles/people-operations-manager/evaluations/expected-behaviors.yaml +20 -0
  405. package/agents/roles/people-operations-manager/learning/CODEX_AUTOMATION.md +12 -0
  406. package/agents/roles/people-operations-manager/learning/HISTORY.md +3 -0
  407. package/agents/roles/people-operations-manager/learning/proposals/_template.md +14 -0
  408. package/agents/roles/people-operations-manager/learning/reports/_template.md +14 -0
  409. package/agents/roles/people-operations-manager/learning/sources.yaml +37 -0
  410. package/agents/roles/people-operations-manager/references/operating-model.md +68 -0
  411. package/agents/roles/privacy-compliance-specialist/SKILL.md +70 -0
  412. package/agents/roles/privacy-compliance-specialist/agents/openai.yaml +4 -0
  413. package/agents/roles/privacy-compliance-specialist/evaluations/cases/01-consent.md +10 -0
  414. package/agents/roles/privacy-compliance-specialist/evaluations/cases/02-data-rights.md +10 -0
  415. package/agents/roles/privacy-compliance-specialist/evaluations/cases/03-retention.md +10 -0
  416. package/agents/roles/privacy-compliance-specialist/evaluations/cases/04-vendor-transfer.md +10 -0
  417. package/agents/roles/privacy-compliance-specialist/evaluations/cases/05-incident.md +10 -0
  418. package/agents/roles/privacy-compliance-specialist/evaluations/cases/06-adversarial-docs.md +10 -0
  419. package/agents/roles/privacy-compliance-specialist/evaluations/expected-behaviors.yaml +20 -0
  420. package/agents/roles/privacy-compliance-specialist/learning/CODEX_AUTOMATION.md +19 -0
  421. package/agents/roles/privacy-compliance-specialist/learning/HISTORY.md +4 -0
  422. package/agents/roles/privacy-compliance-specialist/learning/proposals/_template.md +15 -0
  423. package/agents/roles/privacy-compliance-specialist/learning/reports/_template.md +14 -0
  424. package/agents/roles/privacy-compliance-specialist/learning/sources.yaml +33 -0
  425. package/agents/roles/privacy-compliance-specialist/references/operating-model.md +85 -0
  426. package/agents/roles/procurement-manager/SKILL.md +60 -0
  427. package/agents/roles/procurement-manager/agents/openai.yaml +4 -0
  428. package/agents/roles/procurement-manager/evaluations/cases/01-bid-rigging.md +10 -0
  429. package/agents/roles/procurement-manager/evaluations/cases/02-conflict-gift.md +10 -0
  430. package/agents/roles/procurement-manager/evaluations/cases/03-lowest-price.md +10 -0
  431. package/agents/roles/procurement-manager/evaluations/cases/04-technology-vendor.md +10 -0
  432. package/agents/roles/procurement-manager/evaluations/cases/05-emergency-bank-change.md +10 -0
  433. package/agents/roles/procurement-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  434. package/agents/roles/procurement-manager/evaluations/expected-behaviors.yaml +19 -0
  435. package/agents/roles/procurement-manager/learning/CODEX_AUTOMATION.md +12 -0
  436. package/agents/roles/procurement-manager/learning/HISTORY.md +3 -0
  437. package/agents/roles/procurement-manager/learning/proposals/_template.md +14 -0
  438. package/agents/roles/procurement-manager/learning/reports/_template.md +13 -0
  439. package/agents/roles/procurement-manager/learning/sources.yaml +29 -0
  440. package/agents/roles/procurement-manager/references/operating-model.md +53 -0
  441. package/agents/roles/product-manager/SKILL.md +65 -0
  442. package/agents/roles/product-manager/agents/openai.yaml +4 -0
  443. package/agents/roles/product-manager/evaluations/cases/01-unsupported-feature.md +10 -0
  444. package/agents/roles/product-manager/evaluations/cases/02-prioritization.md +10 -0
  445. package/agents/roles/product-manager/evaluations/cases/03-epic.md +10 -0
  446. package/agents/roles/product-manager/evaluations/cases/04-autonomy.md +10 -0
  447. package/agents/roles/product-manager/evaluations/cases/05-adversarial-source.md +10 -0
  448. package/agents/roles/product-manager/evaluations/expected-behaviors.yaml +18 -0
  449. package/agents/roles/product-manager/learning/CODEX_AUTOMATION.md +21 -0
  450. package/agents/roles/product-manager/learning/HISTORY.md +6 -0
  451. package/agents/roles/product-manager/learning/proposals/_template.md +15 -0
  452. package/agents/roles/product-manager/learning/reports/_template.md +14 -0
  453. package/agents/roles/product-manager/learning/sources.yaml +28 -0
  454. package/agents/roles/product-manager/references/operating-model.md +121 -0
  455. package/agents/roles/product-marketing-manager/SKILL.md +70 -0
  456. package/agents/roles/product-marketing-manager/agents/openai.yaml +4 -0
  457. package/agents/roles/product-marketing-manager/evaluations/cases/01-claims.md +10 -0
  458. package/agents/roles/product-marketing-manager/evaluations/cases/02-everyone.md +10 -0
  459. package/agents/roles/product-marketing-manager/evaluations/cases/03-launch-readiness.md +10 -0
  460. package/agents/roles/product-marketing-manager/evaluations/cases/04-competitive-intelligence.md +10 -0
  461. package/agents/roles/product-marketing-manager/evaluations/cases/05-attribution.md +10 -0
  462. package/agents/roles/product-marketing-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  463. package/agents/roles/product-marketing-manager/evaluations/expected-behaviors.yaml +20 -0
  464. package/agents/roles/product-marketing-manager/learning/CODEX_AUTOMATION.md +18 -0
  465. package/agents/roles/product-marketing-manager/learning/HISTORY.md +4 -0
  466. package/agents/roles/product-marketing-manager/learning/proposals/_template.md +15 -0
  467. package/agents/roles/product-marketing-manager/learning/reports/_template.md +14 -0
  468. package/agents/roles/product-marketing-manager/learning/sources.yaml +33 -0
  469. package/agents/roles/product-marketing-manager/references/operating-model.md +88 -0
  470. package/agents/roles/project-manager/SKILL.md +57 -0
  471. package/agents/roles/project-manager/agents/openai.yaml +4 -0
  472. package/agents/roles/project-manager/evaluations/cases/01-impossible-date.md +10 -0
  473. package/agents/roles/project-manager/evaluations/cases/02-scope-creep.md +10 -0
  474. package/agents/roles/project-manager/evaluations/cases/03-false-green.md +10 -0
  475. package/agents/roles/project-manager/evaluations/cases/04-raid-without-owner.md +10 -0
  476. package/agents/roles/project-manager/evaluations/cases/05-micromanagement.md +10 -0
  477. package/agents/roles/project-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  478. package/agents/roles/project-manager/evaluations/expected-behaviors.yaml +19 -0
  479. package/agents/roles/project-manager/learning/CODEX_AUTOMATION.md +11 -0
  480. package/agents/roles/project-manager/learning/HISTORY.md +3 -0
  481. package/agents/roles/project-manager/learning/proposals/_template.md +13 -0
  482. package/agents/roles/project-manager/learning/reports/_template.md +12 -0
  483. package/agents/roles/project-manager/learning/sources.yaml +28 -0
  484. package/agents/roles/project-manager/references/operating-model.md +74 -0
  485. package/agents/roles/qa-engineer/SKILL.md +70 -0
  486. package/agents/roles/qa-engineer/agents/openai.yaml +4 -0
  487. package/agents/roles/qa-engineer/evaluations/cases/01-risk-strategy.md +10 -0
  488. package/agents/roles/qa-engineer/evaluations/cases/02-flaky-test.md +10 -0
  489. package/agents/roles/qa-engineer/evaluations/cases/03-production-data.md +10 -0
  490. package/agents/roles/qa-engineer/evaluations/cases/04-release-confidence.md +10 -0
  491. package/agents/roles/qa-engineer/evaluations/cases/05-defect-triage.md +10 -0
  492. package/agents/roles/qa-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  493. package/agents/roles/qa-engineer/evaluations/expected-behaviors.yaml +20 -0
  494. package/agents/roles/qa-engineer/learning/CODEX_AUTOMATION.md +18 -0
  495. package/agents/roles/qa-engineer/learning/HISTORY.md +4 -0
  496. package/agents/roles/qa-engineer/learning/proposals/_template.md +15 -0
  497. package/agents/roles/qa-engineer/learning/reports/_template.md +14 -0
  498. package/agents/roles/qa-engineer/learning/sources.yaml +29 -0
  499. package/agents/roles/qa-engineer/references/operating-model.md +85 -0
  500. package/agents/roles/release-manager/SKILL.md +59 -0
  501. package/agents/roles/release-manager/agents/openai.yaml +4 -0
  502. package/agents/roles/release-manager/evaluations/cases/01-rebuild-production.md +10 -0
  503. package/agents/roles/release-manager/evaluations/cases/02-checklist-approval.md +10 -0
  504. package/agents/roles/release-manager/evaluations/cases/03-big-bang.md +10 -0
  505. package/agents/roles/release-manager/evaluations/cases/04-irreversible-migration.md +10 -0
  506. package/agents/roles/release-manager/evaluations/cases/05-hotfix-bypass.md +10 -0
  507. package/agents/roles/release-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  508. package/agents/roles/release-manager/evaluations/expected-behaviors.yaml +19 -0
  509. package/agents/roles/release-manager/learning/CODEX_AUTOMATION.md +12 -0
  510. package/agents/roles/release-manager/learning/HISTORY.md +3 -0
  511. package/agents/roles/release-manager/learning/proposals/_template.md +13 -0
  512. package/agents/roles/release-manager/learning/reports/_template.md +12 -0
  513. package/agents/roles/release-manager/learning/sources.yaml +29 -0
  514. package/agents/roles/release-manager/references/operating-model.md +63 -0
  515. package/agents/roles/revenue-operations-manager/SKILL.md +58 -0
  516. package/agents/roles/revenue-operations-manager/agents/openai.yaml +4 -0
  517. package/agents/roles/revenue-operations-manager/evaluations/cases/01-stage-manipulation.md +10 -0
  518. package/agents/roles/revenue-operations-manager/evaluations/cases/02-double-attribution.md +10 -0
  519. package/agents/roles/revenue-operations-manager/evaluations/cases/03-certain-forecast.md +10 -0
  520. package/agents/roles/revenue-operations-manager/evaluations/cases/04-quotas-territories.md +10 -0
  521. package/agents/roles/revenue-operations-manager/evaluations/cases/05-bulk-crm-cleanup.md +10 -0
  522. package/agents/roles/revenue-operations-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  523. package/agents/roles/revenue-operations-manager/evaluations/expected-behaviors.yaml +19 -0
  524. package/agents/roles/revenue-operations-manager/learning/CODEX_AUTOMATION.md +13 -0
  525. package/agents/roles/revenue-operations-manager/learning/HISTORY.md +3 -0
  526. package/agents/roles/revenue-operations-manager/learning/proposals/_template.md +13 -0
  527. package/agents/roles/revenue-operations-manager/learning/reports/_template.md +12 -0
  528. package/agents/roles/revenue-operations-manager/learning/sources.yaml +30 -0
  529. package/agents/roles/revenue-operations-manager/references/operating-model.md +50 -0
  530. package/agents/roles/sales-representative/SKILL.md +70 -0
  531. package/agents/roles/sales-representative/agents/openai.yaml +4 -0
  532. package/agents/roles/sales-representative/evaluations/cases/01-outreach-list.md +10 -0
  533. package/agents/roles/sales-representative/evaluations/cases/02-discovery.md +10 -0
  534. package/agents/roles/sales-representative/evaluations/cases/03-roadmap-promise.md +10 -0
  535. package/agents/roles/sales-representative/evaluations/cases/04-forecast.md +10 -0
  536. package/agents/roles/sales-representative/evaluations/cases/05-discount.md +10 -0
  537. package/agents/roles/sales-representative/evaluations/cases/06-adversarial-docs.md +10 -0
  538. package/agents/roles/sales-representative/evaluations/expected-behaviors.yaml +20 -0
  539. package/agents/roles/sales-representative/learning/CODEX_AUTOMATION.md +18 -0
  540. package/agents/roles/sales-representative/learning/HISTORY.md +4 -0
  541. package/agents/roles/sales-representative/learning/proposals/_template.md +15 -0
  542. package/agents/roles/sales-representative/learning/reports/_template.md +14 -0
  543. package/agents/roles/sales-representative/learning/sources.yaml +33 -0
  544. package/agents/roles/sales-representative/references/operating-model.md +79 -0
  545. package/agents/roles/security-engineer/SKILL.md +70 -0
  546. package/agents/roles/security-engineer/agents/openai.yaml +4 -0
  547. package/agents/roles/security-engineer/evaluations/cases/01-object-authorization.md +10 -0
  548. package/agents/roles/security-engineer/evaluations/cases/02-ssrf.md +10 -0
  549. package/agents/roles/security-engineer/evaluations/cases/03-secrets.md +10 -0
  550. package/agents/roles/security-engineer/evaluations/cases/04-vulnerability-priority.md +10 -0
  551. package/agents/roles/security-engineer/evaluations/cases/05-incident.md +10 -0
  552. package/agents/roles/security-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  553. package/agents/roles/security-engineer/evaluations/expected-behaviors.yaml +20 -0
  554. package/agents/roles/security-engineer/learning/CODEX_AUTOMATION.md +19 -0
  555. package/agents/roles/security-engineer/learning/HISTORY.md +4 -0
  556. package/agents/roles/security-engineer/learning/proposals/_template.md +15 -0
  557. package/agents/roles/security-engineer/learning/reports/_template.md +14 -0
  558. package/agents/roles/security-engineer/learning/sources.yaml +29 -0
  559. package/agents/roles/security-engineer/references/operating-model.md +62 -0
  560. package/agents/roles/site-reliability-engineer/SKILL.md +70 -0
  561. package/agents/roles/site-reliability-engineer/agents/openai.yaml +4 -0
  562. package/agents/roles/site-reliability-engineer/evaluations/cases/01-slo.md +10 -0
  563. package/agents/roles/site-reliability-engineer/evaluations/cases/02-alert-fatigue.md +10 -0
  564. package/agents/roles/site-reliability-engineer/evaluations/cases/03-incident.md +10 -0
  565. package/agents/roles/site-reliability-engineer/evaluations/cases/04-recovery.md +10 -0
  566. package/agents/roles/site-reliability-engineer/evaluations/cases/05-retry-storm.md +10 -0
  567. package/agents/roles/site-reliability-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  568. package/agents/roles/site-reliability-engineer/evaluations/expected-behaviors.yaml +20 -0
  569. package/agents/roles/site-reliability-engineer/learning/CODEX_AUTOMATION.md +18 -0
  570. package/agents/roles/site-reliability-engineer/learning/HISTORY.md +4 -0
  571. package/agents/roles/site-reliability-engineer/learning/proposals/_template.md +15 -0
  572. package/agents/roles/site-reliability-engineer/learning/reports/_template.md +14 -0
  573. package/agents/roles/site-reliability-engineer/learning/sources.yaml +29 -0
  574. package/agents/roles/site-reliability-engineer/references/operating-model.md +78 -0
  575. package/agents/roles/software-architect/SKILL.md +70 -0
  576. package/agents/roles/software-architect/agents/openai.yaml +4 -0
  577. package/agents/roles/software-architect/evaluations/cases/01-microservices.md +10 -0
  578. package/agents/roles/software-architect/evaluations/cases/02-shared-database.md +10 -0
  579. package/agents/roles/software-architect/evaluations/cases/03-technology-hype.md +10 -0
  580. package/agents/roles/software-architect/evaluations/cases/04-quality-attributes.md +10 -0
  581. package/agents/roles/software-architect/evaluations/cases/05-big-bang-rewrite.md +10 -0
  582. package/agents/roles/software-architect/evaluations/cases/06-adversarial-docs.md +10 -0
  583. package/agents/roles/software-architect/evaluations/expected-behaviors.yaml +20 -0
  584. package/agents/roles/software-architect/learning/CODEX_AUTOMATION.md +18 -0
  585. package/agents/roles/software-architect/learning/HISTORY.md +4 -0
  586. package/agents/roles/software-architect/learning/proposals/_template.md +15 -0
  587. package/agents/roles/software-architect/learning/reports/_template.md +14 -0
  588. package/agents/roles/software-architect/learning/sources.yaml +29 -0
  589. package/agents/roles/software-architect/references/operating-model.md +79 -0
  590. package/agents/roles/solutions-engineer/SKILL.md +58 -0
  591. package/agents/roles/solutions-engineer/agents/openai.yaml +4 -0
  592. package/agents/roles/solutions-engineer/evaluations/cases/01-future-capability.md +10 -0
  593. package/agents/roles/solutions-engineer/evaluations/cases/02-security-questionnaire.md +10 -0
  594. package/agents/roles/solutions-engineer/evaluations/cases/03-fake-demo.md +10 -0
  595. package/agents/roles/solutions-engineer/evaluations/cases/04-vague-poc.md +10 -0
  596. package/agents/roles/solutions-engineer/evaluations/cases/05-production-architecture.md +10 -0
  597. package/agents/roles/solutions-engineer/evaluations/cases/06-adversarial-rfp.md +10 -0
  598. package/agents/roles/solutions-engineer/evaluations/expected-behaviors.yaml +19 -0
  599. package/agents/roles/solutions-engineer/learning/CODEX_AUTOMATION.md +13 -0
  600. package/agents/roles/solutions-engineer/learning/HISTORY.md +3 -0
  601. package/agents/roles/solutions-engineer/learning/proposals/_template.md +13 -0
  602. package/agents/roles/solutions-engineer/learning/reports/_template.md +12 -0
  603. package/agents/roles/solutions-engineer/learning/sources.yaml +29 -0
  604. package/agents/roles/solutions-engineer/references/operating-model.md +62 -0
  605. package/agents/roles/technical-program-manager/SKILL.md +60 -0
  606. package/agents/roles/technical-program-manager/agents/openai.yaml +4 -0
  607. package/agents/roles/technical-program-manager/evaluations/cases/01-executive-date.md +10 -0
  608. package/agents/roles/technical-program-manager/evaluations/cases/02-fake-green.md +10 -0
  609. package/agents/roles/technical-program-manager/evaluations/cases/03-micromanage-teams.md +10 -0
  610. package/agents/roles/technical-program-manager/evaluations/cases/04-dependency-without-contract.md +10 -0
  611. package/agents/roles/technical-program-manager/evaluations/cases/05-launch-without-readiness.md +10 -0
  612. package/agents/roles/technical-program-manager/evaluations/cases/06-adversarial-plan.md +10 -0
  613. package/agents/roles/technical-program-manager/evaluations/expected-behaviors.yaml +19 -0
  614. package/agents/roles/technical-program-manager/learning/CODEX_AUTOMATION.md +13 -0
  615. package/agents/roles/technical-program-manager/learning/HISTORY.md +3 -0
  616. package/agents/roles/technical-program-manager/learning/proposals/_template.md +9 -0
  617. package/agents/roles/technical-program-manager/learning/reports/_template.md +9 -0
  618. package/agents/roles/technical-program-manager/learning/sources.yaml +14 -0
  619. package/agents/roles/technical-program-manager/references/operating-model.md +41 -0
  620. package/agents/roles/technical-writer/SKILL.md +58 -0
  621. package/agents/roles/technical-writer/agents/openai.yaml +4 -0
  622. package/agents/roles/technical-writer/evaluations/cases/01-invented-api.md +10 -0
  623. package/agents/roles/technical-writer/evaluations/cases/02-secret-example.md +10 -0
  624. package/agents/roles/technical-writer/evaluations/cases/03-dangerous-runbook.md +10 -0
  625. package/agents/roles/technical-writer/evaluations/cases/04-content-type.md +10 -0
  626. package/agents/roles/technical-writer/evaluations/cases/05-accessibility-global.md +10 -0
  627. package/agents/roles/technical-writer/evaluations/cases/06-adversarial-docs.md +10 -0
  628. package/agents/roles/technical-writer/evaluations/expected-behaviors.yaml +19 -0
  629. package/agents/roles/technical-writer/learning/CODEX_AUTOMATION.md +11 -0
  630. package/agents/roles/technical-writer/learning/HISTORY.md +3 -0
  631. package/agents/roles/technical-writer/learning/proposals/_template.md +14 -0
  632. package/agents/roles/technical-writer/learning/reports/_template.md +12 -0
  633. package/agents/roles/technical-writer/learning/sources.yaml +29 -0
  634. package/agents/roles/technical-writer/references/operating-model.md +67 -0
  635. package/agents/roles/ui-designer/SKILL.md +76 -0
  636. package/agents/roles/ui-designer/agents/openai.yaml +4 -0
  637. package/agents/roles/ui-designer/evaluations/cases/01-component.md +10 -0
  638. package/agents/roles/ui-designer/evaluations/cases/02-color-only.md +10 -0
  639. package/agents/roles/ui-designer/evaluations/cases/03-design-system.md +10 -0
  640. package/agents/roles/ui-designer/evaluations/cases/04-responsive.md +10 -0
  641. package/agents/roles/ui-designer/evaluations/cases/05-boundaries.md +10 -0
  642. package/agents/roles/ui-designer/evaluations/cases/06-adversarial-source.md +10 -0
  643. package/agents/roles/ui-designer/evaluations/expected-behaviors.yaml +19 -0
  644. package/agents/roles/ui-designer/learning/CODEX_AUTOMATION.md +19 -0
  645. package/agents/roles/ui-designer/learning/HISTORY.md +4 -0
  646. package/agents/roles/ui-designer/learning/proposals/_template.md +15 -0
  647. package/agents/roles/ui-designer/learning/reports/_template.md +14 -0
  648. package/agents/roles/ui-designer/learning/sources.yaml +24 -0
  649. package/agents/roles/ui-designer/references/operating-model.md +66 -0
  650. package/agents/roles/user-researcher/SKILL.md +67 -0
  651. package/agents/roles/user-researcher/agents/openai.yaml +4 -0
  652. package/agents/roles/user-researcher/evaluations/cases/01-research-plan.md +10 -0
  653. package/agents/roles/user-researcher/evaluations/cases/02-small-sample.md +10 -0
  654. package/agents/roles/user-researcher/evaluations/cases/03-fabricated-quotes.md +10 -0
  655. package/agents/roles/user-researcher/evaluations/cases/04-sensitive-data.md +10 -0
  656. package/agents/roles/user-researcher/evaluations/cases/05-contradictory-evidence.md +10 -0
  657. package/agents/roles/user-researcher/evaluations/cases/06-adversarial-source.md +10 -0
  658. package/agents/roles/user-researcher/evaluations/expected-behaviors.yaml +19 -0
  659. package/agents/roles/user-researcher/learning/CODEX_AUTOMATION.md +22 -0
  660. package/agents/roles/user-researcher/learning/HISTORY.md +6 -0
  661. package/agents/roles/user-researcher/learning/proposals/_template.md +15 -0
  662. package/agents/roles/user-researcher/learning/reports/_template.md +14 -0
  663. package/agents/roles/user-researcher/learning/sources.yaml +24 -0
  664. package/agents/roles/user-researcher/references/operating-model.md +104 -0
  665. package/agents/roles/ux-designer/SKILL.md +76 -0
  666. package/agents/roles/ux-designer/agents/openai.yaml +4 -0
  667. package/agents/roles/ux-designer/evaluations/cases/01-checkout-flow.md +10 -0
  668. package/agents/roles/ux-designer/evaluations/cases/02-dark-pattern.md +10 -0
  669. package/agents/roles/ux-designer/evaluations/cases/03-missing-research.md +10 -0
  670. package/agents/roles/ux-designer/evaluations/cases/04-heuristic-review.md +10 -0
  671. package/agents/roles/ux-designer/evaluations/cases/05-role-boundaries.md +10 -0
  672. package/agents/roles/ux-designer/evaluations/cases/06-adversarial-source.md +10 -0
  673. package/agents/roles/ux-designer/evaluations/expected-behaviors.yaml +18 -0
  674. package/agents/roles/ux-designer/learning/CODEX_AUTOMATION.md +18 -0
  675. package/agents/roles/ux-designer/learning/HISTORY.md +4 -0
  676. package/agents/roles/ux-designer/learning/proposals/_template.md +15 -0
  677. package/agents/roles/ux-designer/learning/reports/_template.md +14 -0
  678. package/agents/roles/ux-designer/learning/sources.yaml +24 -0
  679. package/agents/roles/ux-designer/references/operating-model.md +87 -0
  680. package/agents/specialists/.gitkeep +1 -0
  681. package/agents/workflows/.gitkeep +1 -0
  682. package/automatization/AGENTS.md +67 -0
  683. package/automatization/README.md +28 -0
  684. package/automatization/hooks/README.md +53 -0
  685. package/automatization/hooks/guard-dependencies.sh +4 -0
  686. package/automatization/hooks/guard-destructive.sh +4 -0
  687. package/automatization/hooks/guard-files.sh +4 -0
  688. package/automatization/hooks/guard-generated.sh +4 -0
  689. package/automatization/hooks/guard-git-add.sh +4 -0
  690. package/automatization/hooks/guard-governance.sh +4 -0
  691. package/automatization/hooks/guard-integration-snapshot.sh +4 -0
  692. package/automatization/hooks/guard-migrations.sh +4 -0
  693. package/automatization/hooks/guard-planning-drift.sh +4 -0
  694. package/automatization/hooks/guard-secrets.sh +4 -0
  695. package/automatization/hooks/guard-shell.sh +4 -0
  696. package/automatization/hooks/guard-verify.sh +4 -0
  697. package/automatization/hooks/guard-workspace-boundary.sh +4 -0
  698. package/automatization/hooks/run-hook.sh +22 -0
  699. package/automatization/runners/README.md +25 -0
  700. package/automatization/runners/antigravity/README.md +16 -0
  701. package/automatization/runners/antigravity/hook.js +78 -0
  702. package/automatization/runners/antigravity/hooks.json +21 -0
  703. package/automatization/runners/antigravity/manifest.json +17 -0
  704. package/automatization/runners/antigravity/plugin.json +5 -0
  705. package/automatization/runners/antigravity/rules/cauce.md +6 -0
  706. package/automatization/runners/antigravity/skills/autobuild/SKILL.md +10 -0
  707. package/automatization/runners/antigravity/skills/integration-promote/SKILL.md +10 -0
  708. package/automatization/runners/antigravity/skills/integration-sync/SKILL.md +9 -0
  709. package/automatization/runners/claude/CLAUDE.md +10 -0
  710. package/automatization/runners/claude/README.md +13 -0
  711. package/automatization/runners/claude/manifest.json +13 -0
  712. package/automatization/runners/claude/settings.json +25 -0
  713. package/automatization/runners/codex/README.md +15 -0
  714. package/automatization/runners/codex/hooks.json +25 -0
  715. package/automatization/runners/codex/manifest.json +9 -0
  716. package/automatization/runners/gemini/GEMINI.md +12 -0
  717. package/automatization/runners/gemini/README.md +18 -0
  718. package/automatization/runners/gemini/commands/ops/autobuild.toml +7 -0
  719. package/automatization/runners/gemini/commands/ops/integration-promote.toml +6 -0
  720. package/automatization/runners/gemini/commands/ops/integration-sync.toml +6 -0
  721. package/automatization/runners/gemini/manifest.json +14 -0
  722. package/automatization/runners/gemini/settings.json +9 -0
  723. package/automatization/workflows/README.md +38 -0
  724. package/automatization/workflows/autobuild.js +287 -0
  725. package/automatization/workflows/integrations/README.md +14 -0
  726. package/automatization/workflows/integrations/promote.js +33 -0
  727. package/automatization/workflows/integrations/sync.js +36 -0
  728. package/engine/agents/learning.js +157 -0
  729. package/engine/automation/index.js +329 -0
  730. package/engine/cli/ops.js +602 -0
  731. package/engine/config/validate.js +70 -0
  732. package/engine/core/files.js +55 -0
  733. package/engine/hooks/run.js +400 -0
  734. package/engine/integrations/proposals.js +80 -0
  735. package/engine/integrations/providers/jira.js +164 -0
  736. package/engine/integrations/registry.js +390 -0
  737. package/engine/integrations/state.js +237 -0
  738. package/engine/integrations/writeback.js +90 -0
  739. package/engine/planning/business-rules.js +44 -0
  740. package/engine/planning/contracts.js +90 -0
  741. package/engine/planning/parser.js +184 -0
  742. package/engine/schemas/ops-config.schema.json +37 -0
  743. package/engine/teams/registry.js +85 -0
  744. package/package.json +37 -0
  745. package/teams/.gitkeep +1 -0
  746. package/teams/product-development/WORKFLOW.md +54 -0
  747. package/teams/product-development/team.json +106 -0
  748. package/template/AGENTS.md +61 -0
  749. package/template/Makefile +58 -0
  750. package/template/README.md +21 -0
  751. package/template/automatization/AGENTS.md +67 -0
  752. package/template/automatization/README.md +19 -0
  753. package/template/automatization/config.json +13 -0
  754. package/template/automatization/hooks/.gitkeep +1 -0
  755. package/template/automatization/runners/README.md +13 -0
  756. package/template/automatization/workflows/.gitkeep +1 -0
  757. package/template/integrations/AGENTS.md +14 -0
  758. package/template/integrations/README.md +21 -0
  759. package/template/integrations/config.json +10 -0
  760. package/template/integrations/jira/README.md +59 -0
  761. package/template/integrations/jira/config.json +17 -0
  762. package/template/integrations/jira/proposed/README.md +22 -0
  763. package/template/integrations/jira/staging/.gitkeep +1 -0
  764. package/template/integrations/jira/staging/README.md +4 -0
  765. package/template/ops.config.json +15 -0
  766. package/template/organization/README.md +13 -0
  767. package/template/organization/company.md +38 -0
  768. package/template/organization/product.md +17 -0
  769. package/template/planning/BACKLOG.md +9 -0
  770. package/template/planning/DONE.md +13 -0
  771. package/template/planning/FLOW.md +34 -0
  772. package/template/planning/HUMAN_ACTIONS.md +4 -0
  773. package/template/planning/INBOX.md +11 -0
  774. package/template/planning/METHODOLOGY.md +26 -0
  775. package/template/planning/PROTOCOL.md +62 -0
  776. package/template/planning/README.md +18 -0
  777. package/template/planning/WIP.md +22 -0
  778. package/template/planning/adr/000-template.md +47 -0
  779. package/template/planning/adr/README.md +42 -0
  780. package/template/planning/adr/system/OPS-001-planificacion-como-fuente-de-verdad.md +32 -0
  781. package/template/planning/adr/system/OPS-002-runtime-autocontenido-y-neutral-al-runner.md +34 -0
  782. package/template/planning/adr/system/OPS-003-integraciones-seguras-por-staging.md +33 -0
  783. package/template/planning/adr/system/OPS-004-promocion-humana-y-evidencia-verificable.md +34 -0
  784. package/template/planning/business-rules/000-template.md +34 -0
  785. package/template/planning/business-rules/README.md +32 -0
  786. package/template/planning/business-rules/system/BR-OPS-001-una-sola-tarea-activa.md +35 -0
  787. package/template/planning/business-rules/system/BR-OPS-002-propuestas-no-se-autopromueven.md +35 -0
  788. package/template/planning/business-rules/system/BR-OPS-003-conflictos-bloquean-promocion.md +35 -0
  789. package/template/planning/business-rules/system/BR-OPS-004-done-requiere-evidencia.md +35 -0
  790. package/template/planning/delivery/README.md +41 -0
  791. package/template/planning/delivery/branches.md +55 -0
  792. package/template/planning/delivery/environments.md +35 -0
  793. package/template/planning/delivery/flags.md +35 -0
  794. package/template/planning/delivery/multi-repo.md +26 -0
  795. package/template/planning/delivery/project.md +31 -0
  796. package/template/planning/delivery/release.md +54 -0
  797. package/template/planning/done/.gitkeep +1 -0
  798. package/template/planning/roadmap/README.md +62 -0
  799. package/template/planning/roadmap/epic-000-template.md +32 -0
  800. package/template/planning/rules/README.md +7 -0
  801. package/template/planning/rules/code-shape.md +14 -0
  802. package/template/planning/rules/commits.md +14 -0
  803. package/template/planning/rules/process.md +17 -0
  804. package/template/tools/ops.js +5 -0
@@ -0,0 +1,237 @@
1
+ 'use strict'
2
+
3
+ const crypto = require('node:crypto')
4
+ const fs = require('node:fs')
5
+ const path = require('node:path')
6
+ const F = require('../core/files')
7
+
8
+ const STATES = ['context', 'pending', 'ready', 'rejected', 'promoted']
9
+ const CRITICAL_FIELDS = [
10
+ 'summary',
11
+ 'description',
12
+ 'type',
13
+ 'status',
14
+ 'assignee',
15
+ 'parent',
16
+ 'components',
17
+ 'labels',
18
+ ]
19
+ const CATEGORIES = {
20
+ epic: 'epics',
21
+ story: 'stories',
22
+ task: 'tasks',
23
+ 'sub-task': 'subtasks',
24
+ subtask: 'subtasks',
25
+ }
26
+
27
+ const sha256 = (value) => {
28
+ return crypto.createHash('sha256').update(String(value)).digest('hex')
29
+ }
30
+
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
+ function replaceField(text, name, value) {
42
+ const line = new RegExp(`^${name}:.*$`, 'm')
43
+ return line.test(text) ? text.replace(line, `${name}: ${value}`) : text
44
+ }
45
+
46
+ function sections(text) {
47
+ const body = String(text).replace(/^---[\s\S]*?---\s*/, '')
48
+ const title = ((body.match(/^#\s+(.+)$/m) || [])[1] || '').trim()
49
+ const result = { title }
50
+ const names = ['Descripción', 'Aceptación', 'Comentarios', 'Decisiones', 'Problemas de preparación']
51
+ for (const [index, name] of names.entries()) {
52
+ const following = names.slice(index + 1).map(escapeRegex).join('|')
53
+ const end = following ? `(?=^##\\s+(?:${following})\\s*$|(?![\\s\\S]))` : '(?![\\s\\S])'
54
+ const pattern = new RegExp(`^##\\s+${escapeRegex(name)}\\s*\\n([\\s\\S]*?)${end}`, 'im')
55
+ result[name] = ((body.match(pattern) || [])[1] || '').trim()
56
+ }
57
+ return result
58
+ }
59
+
60
+ function escapeRegex(value) {
61
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
62
+ }
63
+
64
+ function categoryOf(item) {
65
+ return CATEGORIES[String(item.type || '').toLowerCase()] || 'items'
66
+ }
67
+
68
+ function roleOf(item, config) {
69
+ const envName = config.candidateAssigneeEnv
70
+ if (!envName) return 'candidate'
71
+ const expected = process.env[envName]
72
+ if (!expected) throw new Error(`Falta la variable ${envName} para resolver candidatos`)
73
+ return item.assignee && item.assignee.accountId === expected ? 'candidate' : 'context'
74
+ }
75
+
76
+ function remoteView(item) {
77
+ return Object.fromEntries(CRITICAL_FIELDS.map((field) => [field, normalize(item[field])]))
78
+ }
79
+
80
+ function localView(draft) {
81
+ const parsed = sections(draft)
82
+ return {
83
+ summary: normalize(parsed.title),
84
+ description: normalize(parsed.Descripción),
85
+ }
86
+ }
87
+
88
+ function normalize(value) {
89
+ if (Array.isArray(value)) return [...value].map(normalize).sort(compareJson)
90
+ if (value && typeof value === 'object') {
91
+ return Object.fromEntries(Object.keys(value).sort().map((key) => [key, normalize(value[key])]))
92
+ }
93
+ return value === undefined || value === null ? '' : value
94
+ }
95
+
96
+ function compareJson(left, right) {
97
+ return JSON.stringify(left).localeCompare(JSON.stringify(right))
98
+ }
99
+
100
+ function same(left, right) {
101
+ return JSON.stringify(normalize(left)) === JSON.stringify(normalize(right))
102
+ }
103
+
104
+ function derive(snapshot, draft) {
105
+ const base = snapshot.sync.base || remoteView(snapshot.item)
106
+ const remote = remoteView(snapshot.item)
107
+ const local = localView(draft)
108
+ const incoming = CRITICAL_FIELDS.filter((field) => !same(remote[field], base[field]))
109
+ const outgoing = ['summary', 'description'].filter((field) => !same(local[field], base[field]))
110
+ return {
111
+ incoming,
112
+ outgoing,
113
+ conflict: incoming.filter((field) => outgoing.includes(field)),
114
+ diverged: frontmatter(draft).state === 'promoted' && incoming.length > 0,
115
+ }
116
+ }
117
+
118
+ function renderDraft(item, config, state = 'pending') {
119
+ const service = config.serviceFrom === 'component' && item.components.length === 1
120
+ ? item.components[0]
121
+ : ''
122
+ const acceptance = item.acceptance || 'Por definir.'
123
+ const issues = []
124
+ if (!item.acceptance) issues.push('La incidencia no contiene aceptación concreta.')
125
+ if (!service) issues.push('Debe definirse un servicio único para la promoción.')
126
+ if (!issues.length) issues.push('Ninguno detectado automáticamente.')
127
+ return `---
128
+ provider: jira
129
+ remote: ${item.key}
130
+ type: ${item.type}
131
+ state: ${state}
132
+ service: "${service}"
133
+ promotionKind: ""
134
+ promotionEpic: ""
135
+ promotionCriteria: ""
136
+ promotedAt: ""
137
+ ---
138
+
139
+ # ${item.summary}
140
+
141
+ ## Descripción
142
+
143
+ ${item.description || 'Sin descripción.'}
144
+
145
+ ## Aceptación
146
+
147
+ ${acceptance}
148
+
149
+ ## Comentarios
150
+
151
+ - Contexto local; nunca se envía al proveedor.
152
+
153
+ ## Decisiones
154
+
155
+ - Definir destino de promoción.
156
+
157
+ ## Problemas de preparación
158
+
159
+ ${issues.map((issue) => `- ${issue}`).join('\n')}
160
+ `
161
+ }
162
+
163
+ function readStaging(root, provider = '') {
164
+ const staging = path.join(root, 'integrations', provider, 'staging')
165
+ const items = []
166
+ let categories = []
167
+ try { categories = fs.readdirSync(staging, { withFileTypes: true }) } catch { return items }
168
+ for (const category of categories.filter((entry) => entry.isDirectory())) {
169
+ const categoryDir = path.join(staging, category.name)
170
+ if (fs.existsSync(path.join(categoryDir, 'remote.json'))) {
171
+ items.push({ key: category.name, category: 'legacy', dir: categoryDir })
172
+ continue
173
+ }
174
+ for (const entry of fs.readdirSync(categoryDir, { withFileTypes: true })) {
175
+ if (!entry.isDirectory()) continue
176
+ items.push({
177
+ key: entry.name,
178
+ category: category.name,
179
+ dir: path.join(categoryDir, entry.name),
180
+ })
181
+ }
182
+ }
183
+ return items.sort((left, right) => left.key.localeCompare(right.key))
184
+ }
185
+
186
+ function reconcile(root, provider, operation, keys = []) {
187
+ const selected = new Set(keys)
188
+ const results = []
189
+ for (const staged of readStaging(root, provider)) {
190
+ if (selected.size && !selected.has(staged.key)) continue
191
+ const snapshotFile = path.join(staged.dir, 'remote.json')
192
+ const draftFile = path.join(staged.dir, 'draft.md')
193
+ const snapshot = JSON.parse(fs.readFileSync(snapshotFile, 'utf8'))
194
+ let draft = fs.readFileSync(draftFile, 'utf8')
195
+ if (operation === 'reset') {
196
+ const state = snapshot.sync.role === 'context' ? 'context' : 'pending'
197
+ draft = renderDraft(snapshot.item, snapshot.sync.config || {}, state)
198
+ snapshot.sync.base = remoteView(snapshot.item)
199
+ snapshot.sync.baseAt = new Date().toISOString()
200
+ } else if (operation === 'reconcile') {
201
+ snapshot.sync.base = remoteView(snapshot.item)
202
+ snapshot.sync.baseAt = new Date().toISOString()
203
+ } else if (operation !== 'rebase') {
204
+ throw new Error(`Operación de reconciliación desconocida: ${operation}`)
205
+ }
206
+ const canonicalState = snapshot.sync.role === 'context' ? 'context' : 'pending'
207
+ snapshot.sync.draftBaseHash = sha256(
208
+ renderDraft(snapshot.item, snapshot.sync.config || {}, canonicalState),
209
+ )
210
+ snapshot.sync.draftChanged = sha256(draft) !== snapshot.sync.draftBaseHash
211
+ F.atomicWrite(draftFile, draft)
212
+ F.atomicWriteJson(snapshotFile, snapshot)
213
+ results.push(staged.key)
214
+ }
215
+ if (selected.size && results.length !== selected.size) {
216
+ const missing = [...selected].filter((key) => !results.includes(key))
217
+ throw new Error(`No se encontraron en staging: ${missing.join(', ')}`)
218
+ }
219
+ return results
220
+ }
221
+
222
+ module.exports = {
223
+ CRITICAL_FIELDS,
224
+ STATES,
225
+ categoryOf,
226
+ derive,
227
+ frontmatter,
228
+ localView,
229
+ readStaging,
230
+ reconcile,
231
+ remoteView,
232
+ renderDraft,
233
+ replaceField,
234
+ roleOf,
235
+ sections,
236
+ sha256,
237
+ }
@@ -0,0 +1,90 @@
1
+ 'use strict'
2
+
3
+ const fs = require('node:fs')
4
+ const path = require('node:path')
5
+ const P = require('./proposals')
6
+ const S = require('./state')
7
+
8
+ const WRITABLE_STATES = ['pending', 'ready', 'promoted']
9
+
10
+ function plan(root, provider, config) {
11
+ const updates = []
12
+ const creates = []
13
+ const blocked = []
14
+ for (const staged of S.readStaging(root, provider)) {
15
+ const snapshot = JSON.parse(fs.readFileSync(path.join(staged.dir, 'remote.json'), 'utf8'))
16
+ const draft = fs.readFileSync(path.join(staged.dir, 'draft.md'), 'utf8')
17
+ const fields = S.frontmatter(draft)
18
+ const signals = S.derive(snapshot, draft)
19
+ if (!signals.outgoing.length) continue
20
+ const refusal = reason => blocked.push({
21
+ key: staged.key,
22
+ fields: signals.outgoing,
23
+ reason,
24
+ })
25
+ if (snapshot.sync.role !== 'candidate') {
26
+ refusal('solo los candidatos pueden producir una escritura')
27
+ continue
28
+ }
29
+ if (snapshot.sync.missingFromRemote) {
30
+ refusal('el item ya no está presente en el remoto')
31
+ continue
32
+ }
33
+ if (signals.conflict.length) {
34
+ refusal(`conflicto en ${signals.conflict.join(', ')}; requiere reset o reconcile`)
35
+ continue
36
+ }
37
+ if (!WRITABLE_STATES.includes(fields.state)) {
38
+ refusal(`state=${fields.state || 'desconocido'} no autoriza escritura`)
39
+ continue
40
+ }
41
+ const local = S.localView(draft)
42
+ const changed = Object.fromEntries(
43
+ signals.outgoing.map((field) => [field, local[field]]),
44
+ )
45
+ updates.push({ key: staged.key, fields: changed })
46
+ }
47
+ for (const proposal of P.read(root, provider)) {
48
+ if (proposal.fields.state === 'published') continue
49
+ if (proposal.fields.state !== 'approved') {
50
+ blocked.push({ key: proposal.file, reason: `state=${proposal.fields.state}` })
51
+ continue
52
+ }
53
+ creates.push({
54
+ proposal: proposal.file,
55
+ parent: proposal.fields.parent || '',
56
+ type: proposal.fields.type,
57
+ service: proposal.fields.service,
58
+ summary: proposal.summary,
59
+ description: proposal.description,
60
+ })
61
+ }
62
+ return {
63
+ provider,
64
+ writeBack: config.writeBack === true,
65
+ wouldWrite: config.writeBack === true ? updates.length + creates.length : 0,
66
+ updates,
67
+ creates,
68
+ blocked,
69
+ }
70
+ }
71
+
72
+ function summarize(result) {
73
+ return {
74
+ ...result,
75
+ updates: result.updates.map((update) => ({
76
+ key: update.key,
77
+ fields: Object.fromEntries(Object.entries(update.fields).map(([name, value]) => {
78
+ return [name, `${String(value).length} chars`]
79
+ })),
80
+ })),
81
+ creates: result.creates.map((entry) => ({
82
+ proposal: entry.proposal,
83
+ parent: entry.parent,
84
+ type: entry.type,
85
+ service: entry.service,
86
+ })),
87
+ }
88
+ }
89
+
90
+ module.exports = { plan, summarize }
@@ -0,0 +1,44 @@
1
+ 'use strict'
2
+
3
+ const fs = require('node:fs')
4
+ const path = require('node:path')
5
+
6
+ const REQUIRED = ['## Reglas', '## Por qué existe cada regla', '## Historial']
7
+ const ID_PATTERN = /\|\s*(BR-[A-Z0-9]+-\d{3})\s*\|/g
8
+
9
+ function markdownFiles(root) {
10
+ if (!fs.existsSync(root)) return []
11
+ const files = []
12
+ for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
13
+ const current = path.join(root, entry.name)
14
+ if (entry.isDirectory()) files.push(...markdownFiles(current))
15
+ else if (entry.name.endsWith('.md') && !['README.md', '000-template.md'].includes(entry.name)) {
16
+ files.push(current)
17
+ }
18
+ }
19
+ return files.sort()
20
+ }
21
+
22
+ function validate(root) {
23
+ const errors = []
24
+ const ids = new Map()
25
+ for (const file of markdownFiles(root)) {
26
+ const relative = path.relative(path.dirname(root), file)
27
+ const source = fs.readFileSync(file, 'utf8')
28
+ if (!/> \*\*Dominio:\*\* .+ \| \*\*Estado:\*\* .+ \| \*\*Actualizado:\*\* \d{4}-\d{2}-\d{2}/.test(source)) {
29
+ errors.push(`${relative}: falta metadata Dominio/Estado/Actualizado`)
30
+ }
31
+ for (const heading of REQUIRED) {
32
+ if (!source.includes(heading)) errors.push(`${relative}: falta ${heading}`)
33
+ }
34
+ const found = [...source.matchAll(ID_PATTERN)].map((match) => match[1])
35
+ if (!found.length) errors.push(`${relative}: no declara reglas BR-DOM-NNN`)
36
+ for (const id of found) {
37
+ if (ids.has(id)) errors.push(`${relative}: ${id} duplicado en ${ids.get(id)}`)
38
+ else ids.set(id, relative)
39
+ }
40
+ }
41
+ return errors
42
+ }
43
+
44
+ module.exports = { markdownFiles, validate }
@@ -0,0 +1,90 @@
1
+ 'use strict'
2
+
3
+ const fs = require('node:fs')
4
+ const path = require('node:path')
5
+
6
+ const TEST_TRACE = /^(?:n\/a\s*[—-]\s*.+|(?:A|C\d+)\s*(?:→|->)\s*\S.+)$/i
7
+ const DECISION_TRACE = /\[(?:fuente|supuesto):\s*[^\]]+\]/i
8
+ const EPIC_AUXILIARY_FILES = new Set(['notes.md', 'plan.md', 'research.md', 'spec.md'])
9
+
10
+ function validTestTrace(value) {
11
+ return String(value || '').split(/\s*;\s*/).filter(Boolean)
12
+ .every((item) => TEST_TRACE.test(item))
13
+ }
14
+
15
+ function validDecisionTrace(value) {
16
+ const text = String(value || '').trim()
17
+ return !text || DECISION_TRACE.test(text)
18
+ }
19
+
20
+ function validateDoneEntry(entry) {
21
+ const at = `${entry.source} ${entry.slug}`
22
+ const errors = []
23
+ if (!entry.tests) errors.push(`${at}: falta tests:`)
24
+ else if (!validTestTrace(entry.tests)) {
25
+ errors.push(`${at}: tests debe rastrear A/CN → prueba o justificar n/a — razón`)
26
+ }
27
+ if (!validDecisionTrace(entry.decisions)) {
28
+ errors.push(`${at}: decisions debe citar [fuente: ...] o [supuesto: ...]`)
29
+ }
30
+ return errors
31
+ }
32
+
33
+ function duplicates(values) {
34
+ return [...new Set(values.filter((value, index) => values.indexOf(value) !== index))]
35
+ }
36
+
37
+ function validateEpic(epic, done = new Set()) {
38
+ const at = `roadmap/${epic.file}`
39
+ const errors = []
40
+ const named = epic.file.match(/^epic-(\d{3})-/)
41
+ if (named && named[1] !== epic.num) {
42
+ errors.push(`${at}: el nombre indica ${named[1]} pero el frontmatter declara ${epic.num || 'vacío'}`)
43
+ }
44
+ for (const id of duplicates(epic.criteria.map((criterion) => criterion.id))) {
45
+ errors.push(`${at}: criterio duplicado ${id}`)
46
+ }
47
+ for (const slug of duplicates(epic.stories.map((story) => story.slug))) {
48
+ errors.push(`${at}: historia duplicada ${slug}`)
49
+ }
50
+ const covered = new Set(epic.stories.flatMap((story) => story.criteria))
51
+ for (const criterion of epic.criteria) {
52
+ if (!covered.has(criterion.id)) errors.push(`${at}: ${criterion.id} no está cubierto por ninguna historia`)
53
+ }
54
+ if (epic.status === 'closed') {
55
+ const missing = epic.stories.filter((story) => !done.has(story.slug))
56
+ if (missing.length) errors.push(`${at}: closed sin evidencia para ${missing.map((story) => story.slug).join(', ')}`)
57
+ }
58
+ return errors
59
+ }
60
+
61
+ function validateRoadmapStructure(dir) {
62
+ const roadmap = path.join(dir, 'roadmap')
63
+ let entries = []
64
+ try { entries = fs.readdirSync(roadmap, { withFileTypes: true }) } catch { return ['falta roadmap/'] }
65
+ const errors = []
66
+ for (const entry of entries) {
67
+ if (!entry.isDirectory() || !/^epic-\d{3}-/.test(entry.name)) continue
68
+ const epicDir = path.join(roadmap, entry.name)
69
+ if (!fs.existsSync(path.join(epicDir, 'spec.md'))) {
70
+ errors.push(`roadmap/${entry.name}: falta spec.md`)
71
+ }
72
+ for (const child of fs.readdirSync(epicDir, { withFileTypes: true })) {
73
+ if (!child.isFile() || !EPIC_AUXILIARY_FILES.has(child.name)) {
74
+ errors.push(`roadmap/${entry.name}/${child.name}: archivo auxiliar no permitido`)
75
+ }
76
+ }
77
+ }
78
+ return errors
79
+ }
80
+
81
+ module.exports = {
82
+ DECISION_TRACE,
83
+ EPIC_AUXILIARY_FILES,
84
+ TEST_TRACE,
85
+ validDecisionTrace,
86
+ validTestTrace,
87
+ validateDoneEntry,
88
+ validateEpic,
89
+ validateRoadmapStructure,
90
+ }
@@ -0,0 +1,184 @@
1
+ 'use strict'
2
+
3
+ // Contratos deterministas de planning; no contiene estado de proyecto.
4
+
5
+ const fs = require('fs')
6
+ const path = require('path')
7
+
8
+ const EPIC_STATES = ['open', 'active', 'closed']
9
+ const TIERS = ['directo', 'lite', 'full']
10
+
11
+ function read(file) {
12
+ try { return fs.readFileSync(file, 'utf8') } catch { return '' }
13
+ }
14
+
15
+ function frontmatter(text) {
16
+ const block = (text.match(/^---\s*\n([\s\S]*?)\n---/m) || [])[1] || ''
17
+ const values = new Map()
18
+ for (const line of block.split('\n')) {
19
+ const match = line.match(/^([\w-]+):\s*(.*)$/)
20
+ if (match) values.set(match[1], match[2].trim().replace(/^['"]|['"]$/g, ''))
21
+ }
22
+ return (key) => values.get(key) || ''
23
+ }
24
+
25
+ function section(text, heading) {
26
+ const parts = text.split(/^##\s+/m)
27
+ return parts.find((part) => heading.test(part.split('\n')[0])) || ''
28
+ }
29
+
30
+ function withoutComments(text) {
31
+ return text.replace(/<!--[\s\S]*?-->/g, '')
32
+ }
33
+
34
+ function epicFiles(dir) {
35
+ const roadmap = path.join(dir, 'roadmap')
36
+ let entries = []
37
+ try { entries = fs.readdirSync(roadmap, { withFileTypes: true }) } catch { return [] }
38
+ const files = []
39
+ for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
40
+ if (entry.isFile() && /^epic-\d{3}-.+\.md$/.test(entry.name)) {
41
+ files.push({ name: entry.name, file: path.join(roadmap, entry.name) })
42
+ } else if (entry.isDirectory() && /^epic-\d{3}-/.test(entry.name)) {
43
+ const spec = path.join(roadmap, entry.name, 'spec.md')
44
+ if (fs.existsSync(spec)) files.push({ name: `${entry.name}/spec.md`, file: spec })
45
+ }
46
+ }
47
+ return files
48
+ }
49
+
50
+ function criteriaRefs(text) {
51
+ const refs = []
52
+ const groups = [
53
+ ...text.matchAll(/\(\s*(?:→|->)\s*([^)]*)\)/g),
54
+ ...text.matchAll(/\*\(\s*criterios?\s+([^)]*)\)\*/gi),
55
+ ]
56
+ for (const group of groups) {
57
+ for (const match of group[1].matchAll(/C?\d+/gi)) {
58
+ const id = match[0].toUpperCase()
59
+ refs.push(id.startsWith('C') ? id : `C${id}`)
60
+ }
61
+ }
62
+ return [...new Set(refs)]
63
+ }
64
+
65
+ function readEpics(dir, { includeTemplates = false } = {}) {
66
+ return epicFiles(dir).map(({ name, file }) => {
67
+ const text = read(file)
68
+ const field = frontmatter(text)
69
+ const criteria = [...section(text, /Criterios/i).matchAll(/^-\s+\*\*(C\d+)(?:[^*]*)\*\*\s+[—-]\s+(.+)$/gm)]
70
+ .map((match) => ({ id: match[1], text: match[2].trim() }))
71
+ const storyPattern = new RegExp(
72
+ String.raw`^[-*]\s+(?:\[[ xX]\]\s+)?\*\*([^*]+)\*\*\s+([\s\S]*?)` +
73
+ String.raw`(?=\n[-*]\s+(?:\[[ xX]\]\s+)?\*\*|\n##|$)`,
74
+ 'gm',
75
+ )
76
+ const stories = [...section(text, /Historias/i).matchAll(storyPattern)]
77
+ .map((match) => ({
78
+ slug: match[1].trim(),
79
+ text: match[2].replace(/\s+/g, ' ').trim(),
80
+ criteria: criteriaRefs(match[2]),
81
+ service: ((match[2].match(/\(service:\s*([^)]+)\)/) || [])[1] || '').trim(),
82
+ }))
83
+ return {
84
+ file: name,
85
+ path: file,
86
+ num: field('epic'),
87
+ title: field('title'),
88
+ status: field('status'),
89
+ service: field('service'),
90
+ criteria,
91
+ stories,
92
+ hasContext: /^##\s+Contexto relevante/im.test(text),
93
+ }
94
+ }).filter((epic) => includeTemplates || epic.status !== 'template' && epic.num !== '000')
95
+ }
96
+
97
+ function readBacklog(dir) {
98
+ const text = withoutComments(read(path.join(dir, 'BACKLOG.md')))
99
+ const milestones = []
100
+ let current = null
101
+ for (const line of text.split('\n')) {
102
+ const heading = line.match(/^##\s+Hito\s+([^\s]+)\s+[—-]\s+(.+)$/)
103
+ if (heading) {
104
+ current = { slug: heading[1], title: heading[2].trim(), heading: line.slice(3), tasks: [] }
105
+ milestones.push(current)
106
+ continue
107
+ }
108
+ if (/^##\s+/.test(line)) current = null
109
+ const task = line.match(/^-\s+\[\s\]\s+\*\*([^*]+)\*\*\s*(?:\[(directo|lite|full)\])?\s+[—-]\s+(.+)$/)
110
+ if (!task || !current) continue
111
+ const rest = task[3]
112
+ current.tasks.push({
113
+ slug: task[1].trim(), tier: task[2] || '', text: rest,
114
+ epic: ((rest.match(/\(epic:\s*(\d{3})\)/) || [])[1] || ''),
115
+ service: ((rest.match(/\(service:\s*([^)]+)\)/) || [])[1] || '').trim(),
116
+ acceptance: ((rest.match(/_Aceptaci[oó]n:\s*([^_]+)_/i) || [])[1] || '').trim(),
117
+ criteria: criteriaRefs(rest),
118
+ })
119
+ }
120
+ return milestones
121
+ }
122
+
123
+ function doneFiles(dir) {
124
+ const files = [path.join(dir, 'DONE.md')]
125
+ const archive = path.join(dir, 'done')
126
+ try {
127
+ files.unshift(...fs.readdirSync(archive).filter((file) => /^epic-\d{3}\.md$/.test(file)).sort()
128
+ .map((file) => path.join(archive, file)))
129
+ } catch { /* no archive yet */ }
130
+ return files
131
+ }
132
+
133
+ function readDone(dir) {
134
+ const entries = []
135
+ for (const file of doneFiles(dir)) {
136
+ const text = withoutComments(read(file))
137
+ const donePattern = /^-\s+\[[xX]\]\s+\*\*([^*]+)\*\*([^\n]*)([\s\S]*?)(?=\n-\s+\[[xX]\]|\n##|(?![\s\S]))/gm
138
+ const matches = [...text.matchAll(donePattern)]
139
+ for (const match of matches) {
140
+ const body = match[3]
141
+ const field = (name) => ((body.match(new RegExp(`^\\s+${name}:\\s*(.+)$`, 'mi')) || [])[1] || '').trim()
142
+ entries.push({
143
+ slug: match[1].trim(),
144
+ epic: ((match[2].match(/\(epic:\s*(\d{3})\)/) || [])[1] || ''),
145
+ acceptance: field('acept'), done: field('done'), qa: field('qa'), tests: field('tests'),
146
+ decisions: field('decisions'), commit: field('commit'),
147
+ source: path.relative(dir, file), raw: match[0].trimEnd(),
148
+ })
149
+ }
150
+ }
151
+ const duplicates = entries.map((entry) => entry.slug)
152
+ .filter((slug, index, all) => all.indexOf(slug) !== index)
153
+ return { entries, set: new Set(entries.map((entry) => entry.slug)), duplicates: [...new Set(duplicates)] }
154
+ }
155
+
156
+ function readWip(dir) {
157
+ const text = read(path.join(dir, 'WIP.md'))
158
+ if (/^status:\s*IDLE/m.test(text)) return null
159
+ const field = frontmatter(text)
160
+ const task = field('task')
161
+ if (!task) return null
162
+ return {
163
+ task, phase: field('phase') || '?', service: field('service'),
164
+ complete: (text.match(/^\d+\.\s+\[[xX]\]/gm) || []).length,
165
+ pending: (text.match(/^\d+\.\s+\[\s\]/gm) || []).length,
166
+ }
167
+ }
168
+
169
+ function readInbox(dir) {
170
+ const result = { deuda: 0, ideas: 0, propuestas: 0, lecciones: 0 }
171
+ for (const part of read(path.join(dir, 'INBOX.md')).split(/^##\s+/m)) {
172
+ const title = part.split('\n')[0]
173
+ const count = (part.match(/^[-*]\s+(?:\[[ xX]\]\s+)?\*\*/gm) || []).length
174
+ if (/Deuda/i.test(title)) result.deuda = count
175
+ if (/Ideas|Visi[oó]n/i.test(title)) result.ideas = count
176
+ if (/Propuestas/i.test(title)) result.propuestas = count
177
+ if (/Lecciones/i.test(title)) result.lecciones = count
178
+ }
179
+ return result
180
+ }
181
+
182
+ module.exports = {
183
+ EPIC_STATES, TIERS, read, frontmatter, readEpics, readBacklog, readDone, readWip, readInbox,
184
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Cauce engine configuration",
4
+ "type": "object",
5
+ "required": ["project", "mode", "planningDir", "workspaceRoots", "runner"],
6
+ "properties": {
7
+ "$schema": { "type": "string", "minLength": 1 },
8
+ "project": { "type": "string", "minLength": 1 },
9
+ "mode": { "enum": ["embedded", "sidecar", "toolkit"] },
10
+ "planningDir": { "type": "string", "minLength": 1 },
11
+ "workspaceRoots": {
12
+ "type": "array",
13
+ "minItems": 1,
14
+ "items": {
15
+ "type": "object",
16
+ "required": ["name", "path"],
17
+ "properties": {
18
+ "name": { "type": "string", "minLength": 1 },
19
+ "path": { "type": "string", "minLength": 1 }
20
+ },
21
+ "additionalProperties": false
22
+ }
23
+ },
24
+ "runner": {
25
+ "type": "object",
26
+ "required": ["maxTaskHours", "humanCheckpointBetweenMilestones", "commitPerTask", "allowPush"],
27
+ "properties": {
28
+ "maxTaskHours": { "type": "number", "exclusiveMinimum": 0 },
29
+ "humanCheckpointBetweenMilestones": { "type": "boolean" },
30
+ "commitPerTask": { "type": "boolean" },
31
+ "allowPush": { "type": "boolean" }
32
+ },
33
+ "additionalProperties": false
34
+ }
35
+ },
36
+ "additionalProperties": false
37
+ }