@harness-engineering/cli 1.14.0 → 1.16.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 (499) hide show
  1. package/dist/agents/commands/codex/AGENTS.md +39 -0
  2. package/dist/agents/commands/codex/harness/add-harness-component/SKILL.md +195 -0
  3. package/dist/agents/commands/codex/harness/add-harness-component/agents/openai.yaml +3 -0
  4. package/dist/agents/commands/codex/harness/cleanup-dead-code/SKILL.md +248 -0
  5. package/dist/agents/commands/codex/harness/cleanup-dead-code/agents/openai.yaml +3 -0
  6. package/dist/agents/commands/codex/harness/detect-doc-drift/SKILL.md +182 -0
  7. package/dist/agents/commands/codex/harness/detect-doc-drift/agents/openai.yaml +3 -0
  8. package/dist/agents/commands/codex/harness/enforce-architecture/SKILL.md +299 -0
  9. package/dist/agents/commands/codex/harness/enforce-architecture/agents/openai.yaml +3 -0
  10. package/dist/agents/commands/codex/harness/harness-architecture-advisor/SKILL.md +452 -0
  11. package/dist/agents/commands/codex/harness/harness-architecture-advisor/agents/openai.yaml +3 -0
  12. package/dist/agents/commands/codex/harness/harness-autopilot/SKILL.md +919 -0
  13. package/dist/agents/commands/codex/harness/harness-autopilot/agents/openai.yaml +3 -0
  14. package/dist/agents/commands/codex/harness/harness-brainstorming/SKILL.md +409 -0
  15. package/dist/agents/commands/codex/harness/harness-brainstorming/agents/openai.yaml +3 -0
  16. package/dist/agents/commands/codex/harness/harness-code-review/SKILL.md +860 -0
  17. package/dist/agents/commands/codex/harness/harness-code-review/agents/openai.yaml +3 -0
  18. package/dist/agents/commands/codex/harness/harness-codebase-cleanup/SKILL.md +227 -0
  19. package/dist/agents/commands/codex/harness/harness-codebase-cleanup/agents/openai.yaml +3 -0
  20. package/dist/agents/commands/codex/harness/harness-debugging/SKILL.md +369 -0
  21. package/dist/agents/commands/codex/harness/harness-debugging/agents/openai.yaml +3 -0
  22. package/dist/agents/commands/codex/harness/harness-dependency-health/SKILL.md +182 -0
  23. package/dist/agents/commands/codex/harness/harness-dependency-health/agents/openai.yaml +3 -0
  24. package/dist/agents/commands/codex/harness/harness-docs-pipeline/SKILL.md +463 -0
  25. package/dist/agents/commands/codex/harness/harness-docs-pipeline/agents/openai.yaml +3 -0
  26. package/dist/agents/commands/codex/harness/harness-execution/SKILL.md +513 -0
  27. package/dist/agents/commands/codex/harness/harness-execution/agents/openai.yaml +3 -0
  28. package/dist/agents/commands/codex/harness/harness-hotspot-detector/SKILL.md +164 -0
  29. package/dist/agents/commands/codex/harness/harness-hotspot-detector/agents/openai.yaml +3 -0
  30. package/dist/agents/commands/codex/harness/harness-impact-analysis/SKILL.md +187 -0
  31. package/dist/agents/commands/codex/harness/harness-impact-analysis/agents/openai.yaml +3 -0
  32. package/dist/agents/commands/codex/harness/harness-integrity/SKILL.md +170 -0
  33. package/dist/agents/commands/codex/harness/harness-integrity/agents/openai.yaml +3 -0
  34. package/dist/agents/commands/codex/harness/harness-onboarding/SKILL.md +291 -0
  35. package/dist/agents/commands/codex/harness/harness-onboarding/agents/openai.yaml +3 -0
  36. package/dist/agents/commands/codex/harness/harness-perf/SKILL.md +263 -0
  37. package/dist/agents/commands/codex/harness/harness-perf/agents/openai.yaml +3 -0
  38. package/dist/agents/commands/codex/harness/harness-planning/SKILL.md +582 -0
  39. package/dist/agents/commands/codex/harness/harness-planning/agents/openai.yaml +3 -0
  40. package/dist/agents/commands/codex/harness/harness-refactoring/SKILL.md +172 -0
  41. package/dist/agents/commands/codex/harness/harness-refactoring/agents/openai.yaml +3 -0
  42. package/dist/agents/commands/codex/harness/harness-release-readiness/SKILL.md +692 -0
  43. package/dist/agents/commands/codex/harness/harness-release-readiness/agents/openai.yaml +3 -0
  44. package/dist/agents/commands/codex/harness/harness-roadmap/SKILL.md +598 -0
  45. package/dist/agents/commands/codex/harness/harness-roadmap/agents/openai.yaml +3 -0
  46. package/dist/agents/commands/codex/harness/harness-security-scan/SKILL.md +157 -0
  47. package/dist/agents/commands/codex/harness/harness-security-scan/agents/openai.yaml +3 -0
  48. package/dist/agents/commands/codex/harness/harness-skill-authoring/SKILL.md +295 -0
  49. package/dist/agents/commands/codex/harness/harness-skill-authoring/agents/openai.yaml +3 -0
  50. package/dist/agents/commands/codex/harness/harness-soundness-review/SKILL.md +1270 -0
  51. package/dist/agents/commands/codex/harness/harness-soundness-review/agents/openai.yaml +3 -0
  52. package/dist/agents/commands/codex/harness/harness-supply-chain-audit/SKILL.md +247 -0
  53. package/dist/agents/commands/codex/harness/harness-supply-chain-audit/agents/openai.yaml +3 -0
  54. package/dist/agents/commands/codex/harness/harness-tdd/SKILL.md +180 -0
  55. package/dist/agents/commands/codex/harness/harness-tdd/agents/openai.yaml +3 -0
  56. package/dist/agents/commands/codex/harness/harness-test-advisor/SKILL.md +163 -0
  57. package/dist/agents/commands/codex/harness/harness-test-advisor/agents/openai.yaml +3 -0
  58. package/dist/agents/commands/codex/harness/harness-verification/SKILL.md +424 -0
  59. package/dist/agents/commands/codex/harness/harness-verification/agents/openai.yaml +3 -0
  60. package/dist/agents/commands/codex/harness/harness-verify/SKILL.md +162 -0
  61. package/dist/agents/commands/codex/harness/harness-verify/agents/openai.yaml +3 -0
  62. package/dist/agents/commands/codex/harness/initialize-harness-project/SKILL.md +235 -0
  63. package/dist/agents/commands/codex/harness/initialize-harness-project/agents/openai.yaml +3 -0
  64. package/dist/agents/commands/cursor/harness/add-harness-component.mdc +200 -0
  65. package/dist/agents/commands/cursor/harness/cleanup-dead-code.mdc +253 -0
  66. package/dist/agents/commands/cursor/harness/detect-doc-drift.mdc +187 -0
  67. package/dist/agents/commands/cursor/harness/enforce-architecture.mdc +304 -0
  68. package/dist/agents/commands/cursor/harness/harness-architecture-advisor.mdc +457 -0
  69. package/dist/agents/commands/cursor/harness/harness-autopilot.mdc +924 -0
  70. package/dist/agents/commands/cursor/harness/harness-brainstorming.mdc +414 -0
  71. package/dist/agents/commands/cursor/harness/harness-code-review.mdc +865 -0
  72. package/dist/agents/commands/cursor/harness/harness-codebase-cleanup.mdc +232 -0
  73. package/dist/agents/commands/cursor/harness/harness-debugging.mdc +374 -0
  74. package/dist/agents/commands/cursor/harness/harness-dependency-health.mdc +187 -0
  75. package/dist/agents/commands/cursor/harness/harness-docs-pipeline.mdc +468 -0
  76. package/dist/agents/commands/cursor/harness/harness-execution.mdc +518 -0
  77. package/dist/agents/commands/cursor/harness/harness-hotspot-detector.mdc +169 -0
  78. package/dist/agents/commands/cursor/harness/harness-impact-analysis.mdc +192 -0
  79. package/dist/agents/commands/cursor/harness/harness-integrity.mdc +175 -0
  80. package/dist/agents/commands/cursor/harness/harness-onboarding.mdc +296 -0
  81. package/dist/agents/commands/cursor/harness/harness-perf.mdc +268 -0
  82. package/dist/agents/commands/cursor/harness/harness-planning.mdc +587 -0
  83. package/dist/agents/commands/cursor/harness/harness-refactoring.mdc +177 -0
  84. package/dist/agents/commands/cursor/harness/harness-release-readiness.mdc +697 -0
  85. package/dist/agents/commands/cursor/harness/harness-roadmap.mdc +603 -0
  86. package/dist/agents/commands/cursor/harness/harness-security-scan.mdc +162 -0
  87. package/dist/agents/commands/cursor/harness/harness-skill-authoring.mdc +300 -0
  88. package/dist/agents/commands/cursor/harness/harness-soundness-review.mdc +1275 -0
  89. package/dist/agents/commands/cursor/harness/harness-supply-chain-audit.mdc +252 -0
  90. package/dist/agents/commands/cursor/harness/harness-tdd.mdc +185 -0
  91. package/dist/agents/commands/cursor/harness/harness-test-advisor.mdc +168 -0
  92. package/dist/agents/commands/cursor/harness/harness-verification.mdc +429 -0
  93. package/dist/agents/commands/cursor/harness/harness-verify.mdc +167 -0
  94. package/dist/agents/commands/cursor/harness/initialize-harness-project.mdc +240 -0
  95. package/dist/agents/skills/claude-code/enforce-architecture/SKILL.md +52 -0
  96. package/dist/agents/skills/claude-code/harness-api-design/SKILL.md +52 -0
  97. package/dist/agents/skills/claude-code/harness-architecture-advisor/SKILL.md +52 -0
  98. package/dist/agents/skills/claude-code/harness-auth/SKILL.md +52 -0
  99. package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +355 -45
  100. package/dist/agents/skills/claude-code/harness-autopilot/skill.yaml +12 -0
  101. package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +97 -3
  102. package/dist/agents/skills/claude-code/harness-code-review/skill.yaml +6 -0
  103. package/dist/agents/skills/claude-code/harness-codebase-cleanup/SKILL.md +2 -4
  104. package/dist/agents/skills/claude-code/harness-database/SKILL.md +52 -0
  105. package/dist/agents/skills/claude-code/harness-deployment/SKILL.md +52 -0
  106. package/dist/agents/skills/claude-code/harness-planning/SKILL.md +99 -3
  107. package/dist/agents/skills/claude-code/harness-planning/skill.yaml +6 -0
  108. package/dist/agents/skills/claude-code/harness-pre-commit-review/SKILL.md +1 -1
  109. package/dist/agents/skills/claude-code/harness-product-spec/SKILL.md +5 -5
  110. package/dist/agents/skills/claude-code/harness-security-review/SKILL.md +27 -7
  111. package/dist/agents/skills/claude-code/harness-security-scan/SKILL.md +52 -0
  112. package/dist/agents/skills/claude-code/harness-supply-chain-audit/SKILL.md +281 -0
  113. package/dist/agents/skills/claude-code/harness-supply-chain-audit/skill.yaml +51 -0
  114. package/dist/agents/skills/codex/add-harness-component/SKILL.md +192 -0
  115. package/dist/agents/skills/codex/add-harness-component/skill.yaml +33 -0
  116. package/dist/agents/skills/codex/align-documentation/SKILL.md +213 -0
  117. package/dist/agents/skills/codex/align-documentation/skill.yaml +32 -0
  118. package/dist/agents/skills/codex/check-mechanical-constraints/SKILL.md +191 -0
  119. package/dist/agents/skills/codex/check-mechanical-constraints/skill.yaml +33 -0
  120. package/dist/agents/skills/codex/cleanup-dead-code/SKILL.md +245 -0
  121. package/dist/agents/skills/codex/cleanup-dead-code/skill.yaml +34 -0
  122. package/dist/agents/skills/codex/detect-doc-drift/SKILL.md +179 -0
  123. package/dist/agents/skills/codex/detect-doc-drift/skill.yaml +31 -0
  124. package/dist/agents/skills/codex/enforce-architecture/SKILL.md +296 -0
  125. package/dist/agents/skills/codex/enforce-architecture/skill.yaml +35 -0
  126. package/dist/agents/skills/codex/harness-accessibility/SKILL.md +281 -0
  127. package/dist/agents/skills/codex/harness-accessibility/skill.yaml +52 -0
  128. package/dist/agents/skills/codex/harness-api-design/SKILL.md +356 -0
  129. package/dist/agents/skills/codex/harness-api-design/skill.yaml +74 -0
  130. package/dist/agents/skills/codex/harness-architecture-advisor/SKILL.md +449 -0
  131. package/dist/agents/skills/codex/harness-architecture-advisor/skill.yaml +49 -0
  132. package/dist/agents/skills/codex/harness-auth/SKILL.md +331 -0
  133. package/dist/agents/skills/codex/harness-auth/skill.yaml +81 -0
  134. package/dist/agents/skills/codex/harness-autopilot/SKILL.md +916 -0
  135. package/dist/agents/skills/codex/harness-autopilot/skill.yaml +67 -0
  136. package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +406 -0
  137. package/dist/agents/skills/codex/harness-brainstorming/skill.yaml +50 -0
  138. package/dist/agents/skills/codex/harness-caching/SKILL.md +309 -0
  139. package/dist/agents/skills/codex/harness-caching/skill.yaml +73 -0
  140. package/dist/agents/skills/codex/harness-chaos/SKILL.md +295 -0
  141. package/dist/agents/skills/codex/harness-chaos/skill.yaml +72 -0
  142. package/dist/agents/skills/codex/harness-code-review/SKILL.md +857 -0
  143. package/dist/agents/skills/codex/harness-code-review/skill.yaml +52 -0
  144. package/dist/agents/skills/codex/harness-codebase-cleanup/SKILL.md +224 -0
  145. package/dist/agents/skills/codex/harness-codebase-cleanup/skill.yaml +65 -0
  146. package/dist/agents/skills/codex/harness-compliance/SKILL.md +303 -0
  147. package/dist/agents/skills/codex/harness-compliance/skill.yaml +78 -0
  148. package/dist/agents/skills/codex/harness-containerization/SKILL.md +284 -0
  149. package/dist/agents/skills/codex/harness-containerization/skill.yaml +80 -0
  150. package/dist/agents/skills/codex/harness-data-pipeline/SKILL.md +274 -0
  151. package/dist/agents/skills/codex/harness-data-pipeline/skill.yaml +81 -0
  152. package/dist/agents/skills/codex/harness-data-validation/SKILL.md +343 -0
  153. package/dist/agents/skills/codex/harness-data-validation/skill.yaml +75 -0
  154. package/dist/agents/skills/codex/harness-database/SKILL.md +310 -0
  155. package/dist/agents/skills/codex/harness-database/skill.yaml +80 -0
  156. package/dist/agents/skills/codex/harness-debugging/SKILL.md +366 -0
  157. package/dist/agents/skills/codex/harness-debugging/skill.yaml +48 -0
  158. package/dist/agents/skills/codex/harness-dependency-health/SKILL.md +179 -0
  159. package/dist/agents/skills/codex/harness-dependency-health/skill.yaml +42 -0
  160. package/dist/agents/skills/codex/harness-deployment/SKILL.md +307 -0
  161. package/dist/agents/skills/codex/harness-deployment/skill.yaml +77 -0
  162. package/dist/agents/skills/codex/harness-design/SKILL.md +265 -0
  163. package/dist/agents/skills/codex/harness-design/skill.yaml +54 -0
  164. package/dist/agents/skills/codex/harness-design-mobile/SKILL.md +336 -0
  165. package/dist/agents/skills/codex/harness-design-mobile/skill.yaml +50 -0
  166. package/dist/agents/skills/codex/harness-design-system/SKILL.md +282 -0
  167. package/dist/agents/skills/codex/harness-design-system/skill.yaml +51 -0
  168. package/dist/agents/skills/codex/harness-design-web/SKILL.md +360 -0
  169. package/dist/agents/skills/codex/harness-design-web/skill.yaml +53 -0
  170. package/dist/agents/skills/codex/harness-diagnostics/SKILL.md +318 -0
  171. package/dist/agents/skills/codex/harness-diagnostics/skill.yaml +51 -0
  172. package/dist/agents/skills/codex/harness-docs-pipeline/SKILL.md +460 -0
  173. package/dist/agents/skills/codex/harness-docs-pipeline/skill.yaml +70 -0
  174. package/dist/agents/skills/codex/harness-dx/SKILL.md +276 -0
  175. package/dist/agents/skills/codex/harness-dx/skill.yaml +76 -0
  176. package/dist/agents/skills/codex/harness-e2e/SKILL.md +245 -0
  177. package/dist/agents/skills/codex/harness-e2e/skill.yaml +78 -0
  178. package/dist/agents/skills/codex/harness-event-driven/SKILL.md +280 -0
  179. package/dist/agents/skills/codex/harness-event-driven/skill.yaml +77 -0
  180. package/dist/agents/skills/codex/harness-execution/SKILL.md +510 -0
  181. package/dist/agents/skills/codex/harness-execution/skill.yaml +52 -0
  182. package/dist/agents/skills/codex/harness-feature-flags/SKILL.md +287 -0
  183. package/dist/agents/skills/codex/harness-feature-flags/skill.yaml +74 -0
  184. package/dist/agents/skills/codex/harness-git-workflow/SKILL.md +268 -0
  185. package/dist/agents/skills/codex/harness-git-workflow/skill.yaml +32 -0
  186. package/dist/agents/skills/codex/harness-hotspot-detector/SKILL.md +161 -0
  187. package/dist/agents/skills/codex/harness-hotspot-detector/skill.yaml +45 -0
  188. package/dist/agents/skills/codex/harness-i18n/SKILL.md +484 -0
  189. package/dist/agents/skills/codex/harness-i18n/skill.yaml +55 -0
  190. package/dist/agents/skills/codex/harness-i18n-process/SKILL.md +388 -0
  191. package/dist/agents/skills/codex/harness-i18n-process/skill.yaml +44 -0
  192. package/dist/agents/skills/codex/harness-i18n-workflow/SKILL.md +512 -0
  193. package/dist/agents/skills/codex/harness-i18n-workflow/skill.yaml +54 -0
  194. package/dist/agents/skills/codex/harness-impact-analysis/SKILL.md +184 -0
  195. package/dist/agents/skills/codex/harness-impact-analysis/skill.yaml +45 -0
  196. package/dist/agents/skills/codex/harness-incident-response/SKILL.md +223 -0
  197. package/dist/agents/skills/codex/harness-incident-response/skill.yaml +78 -0
  198. package/dist/agents/skills/codex/harness-infrastructure-as-code/SKILL.md +279 -0
  199. package/dist/agents/skills/codex/harness-infrastructure-as-code/skill.yaml +80 -0
  200. package/dist/agents/skills/codex/harness-integration-test/SKILL.md +271 -0
  201. package/dist/agents/skills/codex/harness-integration-test/skill.yaml +73 -0
  202. package/dist/agents/skills/codex/harness-integrity/SKILL.md +167 -0
  203. package/dist/agents/skills/codex/harness-integrity/skill.yaml +48 -0
  204. package/dist/agents/skills/codex/harness-knowledge-mapper/SKILL.md +195 -0
  205. package/dist/agents/skills/codex/harness-knowledge-mapper/skill.yaml +50 -0
  206. package/dist/agents/skills/codex/harness-load-testing/SKILL.md +274 -0
  207. package/dist/agents/skills/codex/harness-load-testing/skill.yaml +79 -0
  208. package/dist/agents/skills/codex/harness-ml-ops/SKILL.md +341 -0
  209. package/dist/agents/skills/codex/harness-ml-ops/skill.yaml +79 -0
  210. package/dist/agents/skills/codex/harness-mobile-patterns/SKILL.md +326 -0
  211. package/dist/agents/skills/codex/harness-mobile-patterns/skill.yaml +82 -0
  212. package/dist/agents/skills/codex/harness-mutation-test/SKILL.md +251 -0
  213. package/dist/agents/skills/codex/harness-mutation-test/skill.yaml +70 -0
  214. package/dist/agents/skills/codex/harness-observability/SKILL.md +283 -0
  215. package/dist/agents/skills/codex/harness-observability/skill.yaml +78 -0
  216. package/dist/agents/skills/codex/harness-onboarding/SKILL.md +288 -0
  217. package/dist/agents/skills/codex/harness-onboarding/skill.yaml +31 -0
  218. package/dist/agents/skills/codex/harness-parallel-agents/SKILL.md +256 -0
  219. package/dist/agents/skills/codex/harness-parallel-agents/skill.yaml +34 -0
  220. package/dist/agents/skills/codex/harness-perf/SKILL.md +260 -0
  221. package/dist/agents/skills/codex/harness-perf/skill.yaml +51 -0
  222. package/dist/agents/skills/codex/harness-perf-tdd/SKILL.md +249 -0
  223. package/dist/agents/skills/codex/harness-perf-tdd/skill.yaml +48 -0
  224. package/dist/agents/skills/codex/harness-planning/SKILL.md +579 -0
  225. package/dist/agents/skills/codex/harness-planning/skill.yaml +56 -0
  226. package/dist/agents/skills/codex/harness-pre-commit-review/SKILL.md +324 -0
  227. package/dist/agents/skills/codex/harness-pre-commit-review/skill.yaml +34 -0
  228. package/dist/agents/skills/codex/harness-product-spec/SKILL.md +285 -0
  229. package/dist/agents/skills/codex/harness-product-spec/skill.yaml +72 -0
  230. package/dist/agents/skills/codex/harness-property-test/SKILL.md +281 -0
  231. package/dist/agents/skills/codex/harness-property-test/skill.yaml +71 -0
  232. package/dist/agents/skills/codex/harness-refactoring/SKILL.md +169 -0
  233. package/dist/agents/skills/codex/harness-refactoring/skill.yaml +34 -0
  234. package/dist/agents/skills/codex/harness-release-readiness/SKILL.md +689 -0
  235. package/dist/agents/skills/codex/harness-release-readiness/skill.yaml +58 -0
  236. package/dist/agents/skills/codex/harness-resilience/SKILL.md +255 -0
  237. package/dist/agents/skills/codex/harness-resilience/skill.yaml +76 -0
  238. package/dist/agents/skills/codex/harness-roadmap/SKILL.md +595 -0
  239. package/dist/agents/skills/codex/harness-roadmap/skill.yaml +44 -0
  240. package/dist/agents/skills/codex/harness-secrets/SKILL.md +293 -0
  241. package/dist/agents/skills/codex/harness-secrets/skill.yaml +76 -0
  242. package/dist/agents/skills/codex/harness-security-review/SKILL.md +260 -0
  243. package/dist/agents/skills/codex/harness-security-review/skill.yaml +53 -0
  244. package/dist/agents/skills/codex/harness-security-scan/SKILL.md +154 -0
  245. package/dist/agents/skills/codex/harness-security-scan/skill.yaml +42 -0
  246. package/dist/agents/skills/codex/harness-skill-authoring/SKILL.md +292 -0
  247. package/dist/agents/skills/codex/harness-skill-authoring/skill.yaml +33 -0
  248. package/dist/agents/skills/codex/harness-soundness-review/SKILL.md +1267 -0
  249. package/dist/agents/skills/codex/harness-soundness-review/skill.yaml +49 -0
  250. package/dist/agents/skills/codex/harness-sql-review/SKILL.md +315 -0
  251. package/dist/agents/skills/codex/harness-sql-review/skill.yaml +74 -0
  252. package/dist/agents/skills/codex/harness-state-management/SKILL.md +309 -0
  253. package/dist/agents/skills/codex/harness-state-management/skill.yaml +33 -0
  254. package/dist/agents/skills/codex/harness-supply-chain-audit/SKILL.md +281 -0
  255. package/dist/agents/skills/codex/harness-supply-chain-audit/skill.yaml +51 -0
  256. package/dist/agents/skills/codex/harness-tdd/SKILL.md +177 -0
  257. package/dist/agents/skills/codex/harness-tdd/skill.yaml +49 -0
  258. package/dist/agents/skills/codex/harness-test-advisor/SKILL.md +160 -0
  259. package/dist/agents/skills/codex/harness-test-advisor/skill.yaml +45 -0
  260. package/dist/agents/skills/codex/harness-test-data/SKILL.md +268 -0
  261. package/dist/agents/skills/codex/harness-test-data/skill.yaml +74 -0
  262. package/dist/agents/skills/codex/harness-ux-copy/SKILL.md +271 -0
  263. package/dist/agents/skills/codex/harness-ux-copy/skill.yaml +77 -0
  264. package/dist/agents/skills/codex/harness-verification/SKILL.md +421 -0
  265. package/dist/agents/skills/codex/harness-verification/skill.yaml +43 -0
  266. package/dist/agents/skills/codex/harness-verify/SKILL.md +159 -0
  267. package/dist/agents/skills/codex/harness-verify/skill.yaml +41 -0
  268. package/dist/agents/skills/codex/harness-visual-regression/SKILL.md +257 -0
  269. package/dist/agents/skills/codex/harness-visual-regression/skill.yaml +74 -0
  270. package/dist/agents/skills/codex/initialize-harness-project/SKILL.md +232 -0
  271. package/dist/agents/skills/codex/initialize-harness-project/skill.yaml +32 -0
  272. package/dist/agents/skills/codex/validate-context-engineering/SKILL.md +150 -0
  273. package/dist/agents/skills/codex/validate-context-engineering/skill.yaml +32 -0
  274. package/dist/agents/skills/cursor/add-harness-component/SKILL.md +192 -0
  275. package/dist/agents/skills/cursor/add-harness-component/skill.yaml +33 -0
  276. package/dist/agents/skills/cursor/align-documentation/SKILL.md +213 -0
  277. package/dist/agents/skills/cursor/align-documentation/skill.yaml +32 -0
  278. package/dist/agents/skills/cursor/check-mechanical-constraints/SKILL.md +191 -0
  279. package/dist/agents/skills/cursor/check-mechanical-constraints/skill.yaml +33 -0
  280. package/dist/agents/skills/cursor/cleanup-dead-code/SKILL.md +245 -0
  281. package/dist/agents/skills/cursor/cleanup-dead-code/skill.yaml +34 -0
  282. package/dist/agents/skills/cursor/detect-doc-drift/SKILL.md +179 -0
  283. package/dist/agents/skills/cursor/detect-doc-drift/skill.yaml +31 -0
  284. package/dist/agents/skills/cursor/enforce-architecture/SKILL.md +296 -0
  285. package/dist/agents/skills/cursor/enforce-architecture/skill.yaml +35 -0
  286. package/dist/agents/skills/cursor/harness-accessibility/SKILL.md +281 -0
  287. package/dist/agents/skills/cursor/harness-accessibility/skill.yaml +52 -0
  288. package/dist/agents/skills/cursor/harness-api-design/SKILL.md +356 -0
  289. package/dist/agents/skills/cursor/harness-api-design/skill.yaml +74 -0
  290. package/dist/agents/skills/cursor/harness-architecture-advisor/SKILL.md +449 -0
  291. package/dist/agents/skills/cursor/harness-architecture-advisor/skill.yaml +49 -0
  292. package/dist/agents/skills/cursor/harness-auth/SKILL.md +331 -0
  293. package/dist/agents/skills/cursor/harness-auth/skill.yaml +81 -0
  294. package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +916 -0
  295. package/dist/agents/skills/cursor/harness-autopilot/skill.yaml +67 -0
  296. package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +406 -0
  297. package/dist/agents/skills/cursor/harness-brainstorming/skill.yaml +50 -0
  298. package/dist/agents/skills/cursor/harness-caching/SKILL.md +309 -0
  299. package/dist/agents/skills/cursor/harness-caching/skill.yaml +73 -0
  300. package/dist/agents/skills/cursor/harness-chaos/SKILL.md +295 -0
  301. package/dist/agents/skills/cursor/harness-chaos/skill.yaml +72 -0
  302. package/dist/agents/skills/cursor/harness-code-review/SKILL.md +857 -0
  303. package/dist/agents/skills/cursor/harness-code-review/skill.yaml +52 -0
  304. package/dist/agents/skills/cursor/harness-codebase-cleanup/SKILL.md +224 -0
  305. package/dist/agents/skills/cursor/harness-codebase-cleanup/skill.yaml +65 -0
  306. package/dist/agents/skills/cursor/harness-compliance/SKILL.md +303 -0
  307. package/dist/agents/skills/cursor/harness-compliance/skill.yaml +78 -0
  308. package/dist/agents/skills/cursor/harness-containerization/SKILL.md +284 -0
  309. package/dist/agents/skills/cursor/harness-containerization/skill.yaml +80 -0
  310. package/dist/agents/skills/cursor/harness-data-pipeline/SKILL.md +274 -0
  311. package/dist/agents/skills/cursor/harness-data-pipeline/skill.yaml +81 -0
  312. package/dist/agents/skills/cursor/harness-data-validation/SKILL.md +343 -0
  313. package/dist/agents/skills/cursor/harness-data-validation/skill.yaml +75 -0
  314. package/dist/agents/skills/cursor/harness-database/SKILL.md +310 -0
  315. package/dist/agents/skills/cursor/harness-database/skill.yaml +80 -0
  316. package/dist/agents/skills/cursor/harness-debugging/SKILL.md +366 -0
  317. package/dist/agents/skills/cursor/harness-debugging/skill.yaml +48 -0
  318. package/dist/agents/skills/cursor/harness-dependency-health/SKILL.md +179 -0
  319. package/dist/agents/skills/cursor/harness-dependency-health/skill.yaml +42 -0
  320. package/dist/agents/skills/cursor/harness-deployment/SKILL.md +307 -0
  321. package/dist/agents/skills/cursor/harness-deployment/skill.yaml +77 -0
  322. package/dist/agents/skills/cursor/harness-design/SKILL.md +265 -0
  323. package/dist/agents/skills/cursor/harness-design/skill.yaml +54 -0
  324. package/dist/agents/skills/cursor/harness-design-mobile/SKILL.md +336 -0
  325. package/dist/agents/skills/cursor/harness-design-mobile/skill.yaml +50 -0
  326. package/dist/agents/skills/cursor/harness-design-system/SKILL.md +282 -0
  327. package/dist/agents/skills/cursor/harness-design-system/skill.yaml +51 -0
  328. package/dist/agents/skills/cursor/harness-design-web/SKILL.md +360 -0
  329. package/dist/agents/skills/cursor/harness-design-web/skill.yaml +53 -0
  330. package/dist/agents/skills/cursor/harness-diagnostics/SKILL.md +318 -0
  331. package/dist/agents/skills/cursor/harness-diagnostics/skill.yaml +51 -0
  332. package/dist/agents/skills/cursor/harness-docs-pipeline/SKILL.md +460 -0
  333. package/dist/agents/skills/cursor/harness-docs-pipeline/skill.yaml +70 -0
  334. package/dist/agents/skills/cursor/harness-dx/SKILL.md +276 -0
  335. package/dist/agents/skills/cursor/harness-dx/skill.yaml +76 -0
  336. package/dist/agents/skills/cursor/harness-e2e/SKILL.md +245 -0
  337. package/dist/agents/skills/cursor/harness-e2e/skill.yaml +78 -0
  338. package/dist/agents/skills/cursor/harness-event-driven/SKILL.md +280 -0
  339. package/dist/agents/skills/cursor/harness-event-driven/skill.yaml +77 -0
  340. package/dist/agents/skills/cursor/harness-execution/SKILL.md +510 -0
  341. package/dist/agents/skills/cursor/harness-execution/skill.yaml +52 -0
  342. package/dist/agents/skills/cursor/harness-feature-flags/SKILL.md +287 -0
  343. package/dist/agents/skills/cursor/harness-feature-flags/skill.yaml +74 -0
  344. package/dist/agents/skills/cursor/harness-git-workflow/SKILL.md +268 -0
  345. package/dist/agents/skills/cursor/harness-git-workflow/skill.yaml +32 -0
  346. package/dist/agents/skills/cursor/harness-hotspot-detector/SKILL.md +161 -0
  347. package/dist/agents/skills/cursor/harness-hotspot-detector/skill.yaml +45 -0
  348. package/dist/agents/skills/cursor/harness-i18n/SKILL.md +484 -0
  349. package/dist/agents/skills/cursor/harness-i18n/skill.yaml +55 -0
  350. package/dist/agents/skills/cursor/harness-i18n-process/SKILL.md +388 -0
  351. package/dist/agents/skills/cursor/harness-i18n-process/skill.yaml +44 -0
  352. package/dist/agents/skills/cursor/harness-i18n-workflow/SKILL.md +512 -0
  353. package/dist/agents/skills/cursor/harness-i18n-workflow/skill.yaml +54 -0
  354. package/dist/agents/skills/cursor/harness-impact-analysis/SKILL.md +184 -0
  355. package/dist/agents/skills/cursor/harness-impact-analysis/skill.yaml +45 -0
  356. package/dist/agents/skills/cursor/harness-incident-response/SKILL.md +223 -0
  357. package/dist/agents/skills/cursor/harness-incident-response/skill.yaml +78 -0
  358. package/dist/agents/skills/cursor/harness-infrastructure-as-code/SKILL.md +279 -0
  359. package/dist/agents/skills/cursor/harness-infrastructure-as-code/skill.yaml +80 -0
  360. package/dist/agents/skills/cursor/harness-integration-test/SKILL.md +271 -0
  361. package/dist/agents/skills/cursor/harness-integration-test/skill.yaml +73 -0
  362. package/dist/agents/skills/cursor/harness-integrity/SKILL.md +167 -0
  363. package/dist/agents/skills/cursor/harness-integrity/skill.yaml +48 -0
  364. package/dist/agents/skills/cursor/harness-knowledge-mapper/SKILL.md +195 -0
  365. package/dist/agents/skills/cursor/harness-knowledge-mapper/skill.yaml +50 -0
  366. package/dist/agents/skills/cursor/harness-load-testing/SKILL.md +274 -0
  367. package/dist/agents/skills/cursor/harness-load-testing/skill.yaml +79 -0
  368. package/dist/agents/skills/cursor/harness-ml-ops/SKILL.md +341 -0
  369. package/dist/agents/skills/cursor/harness-ml-ops/skill.yaml +79 -0
  370. package/dist/agents/skills/cursor/harness-mobile-patterns/SKILL.md +326 -0
  371. package/dist/agents/skills/cursor/harness-mobile-patterns/skill.yaml +82 -0
  372. package/dist/agents/skills/cursor/harness-mutation-test/SKILL.md +251 -0
  373. package/dist/agents/skills/cursor/harness-mutation-test/skill.yaml +70 -0
  374. package/dist/agents/skills/cursor/harness-observability/SKILL.md +283 -0
  375. package/dist/agents/skills/cursor/harness-observability/skill.yaml +78 -0
  376. package/dist/agents/skills/cursor/harness-onboarding/SKILL.md +288 -0
  377. package/dist/agents/skills/cursor/harness-onboarding/skill.yaml +31 -0
  378. package/dist/agents/skills/cursor/harness-parallel-agents/SKILL.md +256 -0
  379. package/dist/agents/skills/cursor/harness-parallel-agents/skill.yaml +34 -0
  380. package/dist/agents/skills/cursor/harness-perf/SKILL.md +260 -0
  381. package/dist/agents/skills/cursor/harness-perf/skill.yaml +51 -0
  382. package/dist/agents/skills/cursor/harness-perf-tdd/SKILL.md +249 -0
  383. package/dist/agents/skills/cursor/harness-perf-tdd/skill.yaml +48 -0
  384. package/dist/agents/skills/cursor/harness-planning/SKILL.md +579 -0
  385. package/dist/agents/skills/cursor/harness-planning/skill.yaml +56 -0
  386. package/dist/agents/skills/cursor/harness-pre-commit-review/SKILL.md +324 -0
  387. package/dist/agents/skills/cursor/harness-pre-commit-review/skill.yaml +34 -0
  388. package/dist/agents/skills/cursor/harness-product-spec/SKILL.md +285 -0
  389. package/dist/agents/skills/cursor/harness-product-spec/skill.yaml +72 -0
  390. package/dist/agents/skills/cursor/harness-property-test/SKILL.md +281 -0
  391. package/dist/agents/skills/cursor/harness-property-test/skill.yaml +71 -0
  392. package/dist/agents/skills/cursor/harness-refactoring/SKILL.md +169 -0
  393. package/dist/agents/skills/cursor/harness-refactoring/skill.yaml +34 -0
  394. package/dist/agents/skills/cursor/harness-release-readiness/SKILL.md +689 -0
  395. package/dist/agents/skills/cursor/harness-release-readiness/skill.yaml +58 -0
  396. package/dist/agents/skills/cursor/harness-resilience/SKILL.md +255 -0
  397. package/dist/agents/skills/cursor/harness-resilience/skill.yaml +76 -0
  398. package/dist/agents/skills/cursor/harness-roadmap/SKILL.md +595 -0
  399. package/dist/agents/skills/cursor/harness-roadmap/skill.yaml +44 -0
  400. package/dist/agents/skills/cursor/harness-secrets/SKILL.md +293 -0
  401. package/dist/agents/skills/cursor/harness-secrets/skill.yaml +76 -0
  402. package/dist/agents/skills/cursor/harness-security-review/SKILL.md +260 -0
  403. package/dist/agents/skills/cursor/harness-security-review/skill.yaml +53 -0
  404. package/dist/agents/skills/cursor/harness-security-scan/SKILL.md +154 -0
  405. package/dist/agents/skills/cursor/harness-security-scan/skill.yaml +42 -0
  406. package/dist/agents/skills/cursor/harness-skill-authoring/SKILL.md +292 -0
  407. package/dist/agents/skills/cursor/harness-skill-authoring/skill.yaml +33 -0
  408. package/dist/agents/skills/cursor/harness-soundness-review/SKILL.md +1267 -0
  409. package/dist/agents/skills/cursor/harness-soundness-review/skill.yaml +49 -0
  410. package/dist/agents/skills/cursor/harness-sql-review/SKILL.md +315 -0
  411. package/dist/agents/skills/cursor/harness-sql-review/skill.yaml +74 -0
  412. package/dist/agents/skills/cursor/harness-state-management/SKILL.md +309 -0
  413. package/dist/agents/skills/cursor/harness-state-management/skill.yaml +33 -0
  414. package/dist/agents/skills/cursor/harness-supply-chain-audit/SKILL.md +281 -0
  415. package/dist/agents/skills/cursor/harness-supply-chain-audit/skill.yaml +51 -0
  416. package/dist/agents/skills/cursor/harness-tdd/SKILL.md +177 -0
  417. package/dist/agents/skills/cursor/harness-tdd/skill.yaml +49 -0
  418. package/dist/agents/skills/cursor/harness-test-advisor/SKILL.md +160 -0
  419. package/dist/agents/skills/cursor/harness-test-advisor/skill.yaml +45 -0
  420. package/dist/agents/skills/cursor/harness-test-data/SKILL.md +268 -0
  421. package/dist/agents/skills/cursor/harness-test-data/skill.yaml +74 -0
  422. package/dist/agents/skills/cursor/harness-ux-copy/SKILL.md +271 -0
  423. package/dist/agents/skills/cursor/harness-ux-copy/skill.yaml +77 -0
  424. package/dist/agents/skills/cursor/harness-verification/SKILL.md +421 -0
  425. package/dist/agents/skills/cursor/harness-verification/skill.yaml +43 -0
  426. package/dist/agents/skills/cursor/harness-verify/SKILL.md +159 -0
  427. package/dist/agents/skills/cursor/harness-verify/skill.yaml +41 -0
  428. package/dist/agents/skills/cursor/harness-visual-regression/SKILL.md +257 -0
  429. package/dist/agents/skills/cursor/harness-visual-regression/skill.yaml +74 -0
  430. package/dist/agents/skills/cursor/initialize-harness-project/SKILL.md +232 -0
  431. package/dist/agents/skills/cursor/initialize-harness-project/skill.yaml +32 -0
  432. package/dist/agents/skills/cursor/validate-context-engineering/SKILL.md +150 -0
  433. package/dist/agents/skills/cursor/validate-context-engineering/skill.yaml +32 -0
  434. package/dist/agents/skills/gemini-cli/enforce-architecture/SKILL.md +52 -0
  435. package/dist/agents/skills/gemini-cli/harness-api-design/SKILL.md +52 -0
  436. package/dist/agents/skills/gemini-cli/harness-architecture-advisor/SKILL.md +52 -0
  437. package/dist/agents/skills/gemini-cli/harness-auth/SKILL.md +52 -0
  438. package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +355 -45
  439. package/dist/agents/skills/gemini-cli/harness-autopilot/skill.yaml +12 -0
  440. package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +97 -3
  441. package/dist/agents/skills/gemini-cli/harness-code-review/skill.yaml +6 -0
  442. package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/SKILL.md +2 -4
  443. package/dist/agents/skills/gemini-cli/harness-database/SKILL.md +52 -0
  444. package/dist/agents/skills/gemini-cli/harness-deployment/SKILL.md +52 -0
  445. package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +99 -3
  446. package/dist/agents/skills/gemini-cli/harness-planning/skill.yaml +6 -0
  447. package/dist/agents/skills/gemini-cli/harness-pre-commit-review/SKILL.md +1 -1
  448. package/dist/agents/skills/gemini-cli/harness-product-spec/SKILL.md +5 -5
  449. package/dist/agents/skills/gemini-cli/harness-security-review/SKILL.md +27 -7
  450. package/dist/agents/skills/gemini-cli/harness-security-scan/SKILL.md +52 -0
  451. package/dist/agents/skills/gemini-cli/harness-supply-chain-audit/SKILL.md +281 -0
  452. package/dist/agents/skills/gemini-cli/harness-supply-chain-audit/skill.yaml +51 -0
  453. package/dist/agents/skills/package.json +1 -0
  454. package/dist/agents/skills/templates/discipline-template.md +49 -0
  455. package/dist/agents/skills/tests/schema.ts +1 -1
  456. package/dist/agents/skills/vitest.config.mts +5 -0
  457. package/dist/{agents-md-YTYQDA3P.js → agents-md-VYDFPIRW.js} +1 -1
  458. package/dist/{architecture-JQZYM4US.js → architecture-K5HSRBGB.js} +2 -2
  459. package/dist/bin/harness-mcp.js +13 -13
  460. package/dist/bin/harness.js +21 -19
  461. package/dist/{check-phase-gate-L3RADYWO.js → check-phase-gate-5AS6SXL6.js} +3 -3
  462. package/dist/{chunk-6KTUUFRN.js → chunk-5ZXHMCPL.js} +1 -1
  463. package/dist/{chunk-RCWZBSK5.js → chunk-6KWBH4EO.js} +1 -1
  464. package/dist/{chunk-ABQHQ6I5.js → chunk-ALFKNAZW.js} +2436 -233
  465. package/dist/{chunk-OXLLOSSR.js → chunk-AV6KMDO5.js} +2 -2
  466. package/dist/{chunk-7IP4JIFL.js → chunk-C7DTKLPW.js} +4 -4
  467. package/dist/{chunk-ZOAWBDWU.js → chunk-CJDVBBPB.js} +5 -1
  468. package/dist/{chunk-YPYGXRDR.js → chunk-DNDBFIZN.js} +18 -4
  469. package/dist/{chunk-XYLGHKG6.js → chunk-HKUX2X7O.js} +11 -2
  470. package/dist/{chunk-YZD2MRNQ.js → chunk-JOP2NDNB.js} +684 -142
  471. package/dist/{chunk-YBJ262QL.js → chunk-LRG3B43J.js} +1 -1
  472. package/dist/{chunk-AOZRDOIP.js → chunk-M6TIO6NF.js} +1 -1
  473. package/dist/{chunk-O5OJVPL6.js → chunk-OCDDCGDE.js} +9 -1
  474. package/dist/{chunk-OSXBPAMK.js → chunk-QDF7COPQ.js} +1 -1
  475. package/dist/{chunk-TPOTOBR7.js → chunk-RWZPHW4H.js} +3 -3
  476. package/dist/{chunk-3C2MLBPJ.js → chunk-SFRGPAK6.js} +1 -1
  477. package/dist/{chunk-XKECDXJS.js → chunk-SHYWICGA.js} +2184 -456
  478. package/dist/{chunk-S2FXOWOR.js → chunk-TF6ZLHJV.js} +2 -2
  479. package/dist/{chunk-NLVUVUGD.js → chunk-ZJMU7MEV.js} +1 -1
  480. package/dist/{ci-workflow-EQZFVX3P.js → ci-workflow-CRWU723U.js} +1 -1
  481. package/dist/{create-skill-XSWHMSM5.js → create-skill-NDXQSTIK.js} +2 -2
  482. package/dist/{dist-HWXF2C3R.js → dist-4LPXJYVZ.js} +105 -1
  483. package/dist/{docs-7ECGYMAV.js → docs-4JRHTLUZ.js} +3 -3
  484. package/dist/{engine-EG4EH4IX.js → engine-3G3VIM6L.js} +1 -1
  485. package/dist/{entropy-5USWKLVS.js → entropy-G6CZ2A6P.js} +2 -2
  486. package/dist/{feedback-UTBXZZHF.js → feedback-QYKQ65HB.js} +1 -1
  487. package/dist/{generate-agent-definitions-3PM5EU7V.js → generate-agent-definitions-SAAOAPT4.js} +3 -3
  488. package/dist/index.d.ts +25 -4
  489. package/dist/index.js +18 -18
  490. package/dist/{loader-ZPALXIVR.js → loader-VCOK3PF7.js} +1 -1
  491. package/dist/{mcp-362EZHF4.js → mcp-YENEPHBW.js} +13 -13
  492. package/dist/{performance-OQAFMJUD.js → performance-UBCFI2UP.js} +4 -2
  493. package/dist/{review-pipeline-C4GCFVGP.js → review-pipeline-IQAVCWAX.js} +1 -1
  494. package/dist/{runtime-7YLVK453.js → runtime-PYFFIESU.js} +1 -1
  495. package/dist/{security-PZOX7AQS.js → security-ZDADTPYW.js} +1 -1
  496. package/dist/{skill-executor-XZLYZYAK.js → skill-executor-XEVDGXUM.js} +2 -2
  497. package/dist/{validate-FD3Z6VJD.js → validate-VRTUHALQ.js} +2 -2
  498. package/dist/{validate-cross-check-WNJM6H2D.js → validate-cross-check-4Y6NHNK3.js} +1 -1
  499. package/package.json +8 -5
@@ -0,0 +1,279 @@
1
+ # Harness Infrastructure as Code
2
+
3
+ > Terraform, CloudFormation, and Pulumi analysis. Module structure, state management, drift prevention, and security posture for infrastructure definitions.
4
+
5
+ ## When to Use
6
+
7
+ - When reviewing or designing Terraform, CloudFormation, or Pulumi configurations
8
+ - When auditing IaC module structure, naming conventions, and state management
9
+ - On PRs that modify infrastructure definitions or add new cloud resources
10
+ - NOT for CI/CD pipeline configuration (use harness-deployment)
11
+ - NOT for container orchestration (use harness-containerization)
12
+ - NOT for application-level security (use harness-security-review)
13
+
14
+ ## Process
15
+
16
+ ### Phase 1: DETECT -- Identify IaC Tool and Structure
17
+
18
+ 1. **Detect IaC tooling.** Scan the project for infrastructure definitions:
19
+ - `*.tf` files -- Terraform (HCL)
20
+ - `terraform/` directory with `.terraform.lock.hcl`
21
+ - `cloudformation/`, `*.template.yaml`, `*.template.json` -- CloudFormation
22
+ - `Pulumi.yaml`, `Pulumi.*.yaml` -- Pulumi
23
+ - `cdk.json`, `cdk.out/` -- AWS CDK
24
+ - `infrastructure/`, `infra/` -- common IaC directories
25
+
26
+ 2. **Identify provider and backend.** Parse configuration for:
27
+ - Cloud providers (AWS, GCP, Azure) and their versions
28
+ - State backend (S3, GCS, Azure Blob, Terraform Cloud, local)
29
+ - Provider authentication method (environment variables, profiles, OIDC)
30
+ - Lock file presence and provider version constraints
31
+
32
+ 3. **Map module structure.** Build a dependency tree of modules:
33
+ - Root modules and their child module references
34
+ - Module source types (local path, registry, git)
35
+ - Module versioning (pinned vs. unpinned)
36
+ - Input variables and output values per module
37
+ - Shared modules used across multiple root configurations
38
+
39
+ 4. **Detect environment separation.** Identify how environments are managed:
40
+ - Workspaces (Terraform workspaces)
41
+ - Directory-per-environment (`environments/dev/`, `environments/prod/`)
42
+ - Variable files per environment (`terraform.tfvars`, `prod.tfvars`)
43
+ - Backend configuration per environment
44
+
45
+ 5. **Present detection summary:**
46
+
47
+ ```
48
+ IaC Detection:
49
+ Tool: Terraform v1.7
50
+ Provider: AWS (us-east-1, us-west-2)
51
+ Backend: S3 with DynamoDB locking
52
+ Modules: 8 local, 3 registry
53
+ Environments: dev, staging, prod (directory-per-env)
54
+ State files: 3 (one per environment)
55
+ ```
56
+
57
+ ---
58
+
59
+ ### Phase 2: ANALYZE -- Evaluate Patterns and Anti-Patterns
60
+
61
+ 1. **Check state management.** Verify state is properly configured:
62
+ - Remote backend with locking (not local state for shared infrastructure)
63
+ - State encryption at rest enabled
64
+ - State file does not contain secrets in plain text
65
+ - State is segmented per environment (no single state file for all environments)
66
+ - Backend configuration uses variables, not hardcoded values
67
+
68
+ 2. **Evaluate module design.** Check modules for:
69
+ - Single responsibility (one module does one thing)
70
+ - Input validation (variable validation blocks or type constraints)
71
+ - Output completeness (downstream consumers can get what they need)
72
+ - No hardcoded values that should be variables
73
+ - README or documentation for each module
74
+ - Consistent naming conventions across modules
75
+
76
+ 3. **Check resource naming and tagging.** Verify:
77
+ - Resources follow a consistent naming convention (e.g., `{project}-{env}-{resource}`)
78
+ - Required tags are present on all taggable resources (environment, team, cost-center)
79
+ - Tag values are consistent (no mix of "prod" and "production")
80
+ - Names do not contain environment-specific values in shared modules
81
+
82
+ 4. **Analyze dependency management.** Check for:
83
+ - Provider version constraints (required_providers block)
84
+ - Module version pinning (exact version or range)
85
+ - Lock file committed to version control
86
+ - No circular dependencies between modules
87
+ - Implicit dependencies are made explicit with depends_on where needed
88
+
89
+ 5. **Check for common anti-patterns:**
90
+ - Monolithic root modules (everything in one configuration)
91
+ - Hardcoded AMI IDs, account numbers, or region values
92
+ - Resources created outside of IaC (drift risk)
93
+ - Overly permissive IAM policies (wildcards on actions or resources)
94
+ - Missing lifecycle rules (prevent_destroy on critical resources)
95
+
96
+ ---
97
+
98
+ ### Phase 3: DESIGN -- Recommend Structure and Patterns
99
+
100
+ 1. **Recommend module decomposition.** If monolithic configurations are detected:
101
+ - Propose a module hierarchy based on service boundaries
102
+ - Separate networking, compute, storage, and security into distinct modules
103
+ - Design shared modules for common patterns (e.g., tagged S3 bucket, VPC)
104
+ - Provide module interface design (inputs, outputs)
105
+
106
+ 2. **Design state management strategy.** Recommend:
107
+ - One state file per environment per service
108
+ - Remote backend with encryption and locking
109
+ - State import plan for any resources created outside IaC
110
+ - Cross-state data sharing via `terraform_remote_state` or SSM parameters
111
+
112
+ 3. **Recommend drift detection workflow.** Design a process to catch manual changes:
113
+ - Scheduled `terraform plan` in CI to detect drift
114
+ - Alert on any planned changes that were not initiated by a PR
115
+ - Runbook for reconciling detected drift (import vs. revert)
116
+ - Tag resources as IaC-managed for auditability
117
+
118
+ 4. **Design environment promotion.** Recommend a workflow for infrastructure changes:
119
+ - Changes applied to dev first, then promoted to staging, then production
120
+ - Variable files per environment with appropriate overrides
121
+ - Approval gates before production applies
122
+ - Plan output reviewed as part of PR process
123
+
124
+ 5. **Recommend security hardening.** For each provider:
125
+ - Least-privilege IAM roles for IaC execution
126
+ - No inline policies (use managed policies or policy documents)
127
+ - Encryption enabled by default on all storage resources
128
+ - Network security groups with explicit deny rules
129
+ - Sensitive variables marked with `sensitive = true`
130
+
131
+ ---
132
+
133
+ ### Phase 4: VALIDATE -- Verify Configuration Correctness
134
+
135
+ 1. **Run static analysis.** Execute available validation tools:
136
+ - Terraform: `terraform validate`, `terraform fmt -check`
137
+ - CloudFormation: `cfn-lint` or `aws cloudformation validate-template`
138
+ - Pulumi: type checking via the chosen language runtime
139
+ - CDK: `cdk synth` to verify template generation
140
+ - General: `tflint`, `checkov`, or `tfsec` for security checks
141
+
142
+ 2. **Verify variable completeness.** For each root module:
143
+ - All declared variables have descriptions
144
+ - Required variables have no default values
145
+ - Optional variables have sensible defaults
146
+ - Variable types are specific (not `any`)
147
+ - Validation blocks exist for constrained values (e.g., allowed regions)
148
+
149
+ 3. **Check plan safety.** If a plan output is available:
150
+ - No unexpected resource deletions
151
+ - No changes to resources marked with `prevent_destroy`
152
+ - Replacements are expected (not caused by force-new arguments)
153
+ - Plan matches the intended change described in the PR
154
+
155
+ 4. **Verify security posture.** Run security-focused checks:
156
+ - No public S3 buckets or storage accounts
157
+ - No security groups allowing 0.0.0.0/0 on sensitive ports
158
+ - Encryption enabled on RDS, EBS, S3, and other storage
159
+ - IAM policies follow least privilege
160
+ - No credentials or secrets in variable defaults or outputs
161
+
162
+ 5. **Generate validation report:**
163
+
164
+ ```
165
+ IaC Validation: [PASS/WARN/FAIL]
166
+
167
+ Format check: PASS (all files formatted)
168
+ Validate: PASS (no syntax errors)
169
+ Security scan: WARN (2 findings)
170
+ - modules/storage/main.tf: S3 bucket missing server-side encryption
171
+ - modules/network/main.tf: security group allows 0.0.0.0/0 on port 22
172
+ Module design: WARN (3 modules missing input validation)
173
+ State management: PASS (remote backend with locking)
174
+
175
+ Recommendations:
176
+ 1. Add aws_s3_bucket_server_side_encryption_configuration resource
177
+ 2. Restrict SSH access to VPN CIDR range
178
+ 3. Add variable validation blocks to network, compute, and storage modules
179
+ ```
180
+
181
+ ---
182
+
183
+ ## Harness Integration
184
+
185
+ - **`harness skill run harness-infrastructure-as-code`** -- Primary invocation for IaC analysis.
186
+ - **`harness validate`** -- Run after configuration changes to verify project health.
187
+ - **`harness check-deps`** -- Verify IaC tool dependencies are installed.
188
+ - **`emit_interaction`** -- Present design recommendations and gather decisions on module structure.
189
+
190
+ ## Success Criteria
191
+
192
+ - IaC tooling, provider, and backend are correctly identified
193
+ - Module structure is mapped with dependency relationships
194
+ - State management is verified as remote, encrypted, and locked
195
+ - Resource naming and tagging follow consistent conventions
196
+ - Security posture is evaluated with no critical findings unaddressed
197
+ - Static analysis tools pass without errors
198
+
199
+ ## Examples
200
+
201
+ ### Example: Terraform AWS Multi-Environment Setup
202
+
203
+ ```
204
+ Phase 1: DETECT
205
+ Tool: Terraform v1.6.4
206
+ Provider: AWS (hashicorp/aws ~> 5.0)
207
+ Backend: S3 (us-east-1) with DynamoDB locking
208
+ Modules: 5 local (vpc, ecs, rds, s3, iam), 2 registry (datadog, cloudwatch)
209
+ Environments: dev, staging, prod (directory-per-env with shared modules)
210
+
211
+ Phase 2: ANALYZE
212
+ State management: PASS (remote, encrypted, locked, per-env)
213
+ Module design: WARN
214
+ - modules/ecs has 450 lines -- recommend splitting into ecs-cluster
215
+ and ecs-service modules
216
+ - modules/rds missing variable validation for instance_class
217
+ Naming: PASS (consistent {project}-{env}-{resource} pattern)
218
+ Tags: WARN (cost-center tag missing on 3 resources)
219
+ Anti-patterns: 1 hardcoded AMI in modules/ecs/main.tf
220
+
221
+ Phase 3: DESIGN
222
+ 1. Split modules/ecs into ecs-cluster and ecs-service
223
+ 2. Add data source for AMI lookup instead of hardcoded value
224
+ 3. Add variable validation: instance_class must be db.t3.* or db.r6g.*
225
+ 4. Add cost-center tag to default_tags in provider configuration
226
+ 5. Add scheduled terraform plan for drift detection in CI
227
+
228
+ Phase 4: VALIDATE
229
+ terraform fmt: PASS
230
+ terraform validate: PASS
231
+ tfsec: WARN (2 findings -- see above)
232
+ checkov: PASS
233
+ Result: WARN -- 5 improvements recommended, no blocking issues
234
+ ```
235
+
236
+ ### Example: CloudFormation with CDK
237
+
238
+ ```
239
+ Phase 1: DETECT
240
+ Tool: AWS CDK v2.120 (TypeScript)
241
+ Provider: AWS (us-west-2)
242
+ Backend: CloudFormation (managed by CDK)
243
+ Stacks: 3 (NetworkStack, ComputeStack, StorageStack)
244
+ Environments: dev and prod via CDK context
245
+
246
+ Phase 2: ANALYZE
247
+ Stack design: PASS (clean separation by concern)
248
+ Cross-stack references: PASS (using CfnOutput and Fn::ImportValue)
249
+ Security: WARN
250
+ - ComputeStack: EC2 instance has public IP and open SSH
251
+ - StorageStack: DynamoDB table missing point-in-time recovery
252
+ CDK constructs: Using L2 constructs (good -- higher abstraction)
253
+
254
+ Phase 3: DESIGN
255
+ 1. Add bastion host pattern instead of direct SSH to EC2
256
+ 2. Enable point-in-time recovery on DynamoDB table
257
+ 3. Add cdk-nag for automated security checks in synthesis
258
+ 4. Add stack-level tags via Tags.of(stack).add()
259
+
260
+ Phase 4: VALIDATE
261
+ cdk synth: PASS (3 templates generated)
262
+ cfn-lint: PASS (all templates valid)
263
+ Security: WARN (2 findings)
264
+ Result: WARN -- 2 security improvements needed
265
+ ```
266
+
267
+ ## Gates
268
+
269
+ - **No local state for shared infrastructure.** Terraform configurations managing shared resources must use a remote backend with locking. Local state is blocking for any non-experimental configuration.
270
+ - **No unpinned provider versions.** Provider version constraints must be explicit. Using `>=` without an upper bound or omitting version constraints entirely is a blocking finding.
271
+ - **No public access to sensitive resources.** S3 buckets, databases, or storage accounts with public access enabled are blocking security findings.
272
+ - **No credentials in IaC files.** Hardcoded access keys, passwords, or tokens in Terraform variables, CloudFormation parameters, or Pulumi configuration are blocking findings.
273
+
274
+ ## Escalation
275
+
276
+ - **When state is corrupted or diverged:** Do not attempt automatic recovery. Report the state of divergence, recommend `terraform state pull` for backup, and advise manual reconciliation with a plan review before any apply.
277
+ - **When resources exist outside IaC management:** Recommend a phased import strategy. Provide `terraform import` commands for each resource and note that import does not generate configuration -- the HCL must be written manually.
278
+ - **When module versions are significantly outdated:** Present the version gap and changelog summary. If breaking changes exist, recommend a separate PR for the upgrade with a plan review before applying.
279
+ - **When IaC tool version conflicts exist between team members:** Recommend pinning the tool version in `.terraform-version` (tfenv) or `Pulumi.yaml` and adding version checks to CI.
@@ -0,0 +1,80 @@
1
+ name: harness-infrastructure-as-code
2
+ version: "1.0.0"
3
+ description: Terraform, CloudFormation, Pulumi patterns and IaC best practices
4
+ cognitive_mode: advisory-guide
5
+ tier: 3
6
+ internal: false
7
+ keywords:
8
+ - Terraform
9
+ - CloudFormation
10
+ - Pulumi
11
+ - IaC
12
+ - infrastructure
13
+ - HCL
14
+ - CDK
15
+ - AWS
16
+ - GCP
17
+ - Azure
18
+ - state
19
+ - module
20
+ - provider
21
+ - resource
22
+ stack_signals:
23
+ - "*.tf"
24
+ - "terraform/"
25
+ - "cloudformation/"
26
+ - "*.template.yaml"
27
+ - "*.template.json"
28
+ - "Pulumi.yaml"
29
+ - "cdk.json"
30
+ - "infrastructure/"
31
+ triggers:
32
+ - manual
33
+ - on_new_feature
34
+ - on_pr
35
+ platforms:
36
+ - claude-code
37
+ - gemini-cli
38
+ tools:
39
+ - Bash
40
+ - Read
41
+ - Write
42
+ - Edit
43
+ - Glob
44
+ - Grep
45
+ - emit_interaction
46
+ cli:
47
+ command: harness skill run harness-infrastructure-as-code
48
+ args:
49
+ - name: path
50
+ description: Project root path
51
+ required: false
52
+ - name: provider
53
+ description: Cloud provider context (aws, gcp, azure)
54
+ required: false
55
+ - name: tool
56
+ description: IaC tool to focus on (terraform, cloudformation, pulumi, cdk)
57
+ required: false
58
+ mcp:
59
+ tool: run_skill
60
+ input:
61
+ skill: harness-infrastructure-as-code
62
+ path: string
63
+ type: rigid
64
+ phases:
65
+ - name: detect
66
+ description: Identify IaC tool, provider, and module structure
67
+ required: true
68
+ - name: analyze
69
+ description: Evaluate resource definitions, state management, and module patterns
70
+ required: true
71
+ - name: design
72
+ description: Recommend module decomposition, naming, and drift prevention
73
+ required: true
74
+ - name: validate
75
+ description: Verify configuration correctness and security posture
76
+ required: true
77
+ state:
78
+ persistent: false
79
+ files: []
80
+ depends_on: []
@@ -0,0 +1,271 @@
1
+ # Harness Integration Test
2
+
3
+ > Service boundary testing, API contract verification, and consumer-driven contract validation. Ensures services communicate correctly without requiring full end-to-end infrastructure.
4
+
5
+ ## When to Use
6
+
7
+ - Testing API endpoints with real HTTP requests against a running service
8
+ - Validating consumer-driven contracts between microservices (Pact, Spring Cloud Contract)
9
+ - Verifying database interactions through repository or data access layers
10
+ - NOT when testing pure business logic with no I/O (use unit tests or harness-tdd instead)
11
+ - NOT when testing full user flows through a browser (use harness-e2e instead)
12
+ - NOT when performing load or stress testing on APIs (use harness-load-testing instead)
13
+
14
+ ## Process
15
+
16
+ ### Phase 1: DISCOVER -- Map Service Boundaries and Dependencies
17
+
18
+ 1. **Identify service boundaries.** Scan the project structure for:
19
+ - API route definitions (Express routers, FastAPI endpoints, Spring controllers, Go HTTP handlers)
20
+ - Service client code (HTTP clients, gRPC stubs, message queue publishers/consumers)
21
+ - Shared type definitions or API schemas (OpenAPI specs, proto files, GraphQL schemas)
22
+
23
+ 2. **Map inter-service dependencies.** For each service, catalog:
24
+ - Upstream dependencies: services this service calls
25
+ - Downstream consumers: services that call this service
26
+ - Shared resources: databases, message queues, caches
27
+
28
+ 3. **Inventory existing integration tests.** Glob for test files in `tests/integration/`, `__integration__/`, `tests/api/`, and `contract-tests/`. Classify by type:
29
+ - API tests: send HTTP requests and assert responses
30
+ - Contract tests: verify provider/consumer agreements
31
+ - Repository tests: test data access against a real database
32
+
33
+ 4. **Identify coverage gaps.** Cross-reference discovered endpoints and service boundaries against existing tests. Flag untested:
34
+ - API endpoints with no request/response validation
35
+ - Service boundaries with no contract tests
36
+ - Error scenarios (4xx responses, timeout handling, retry behavior)
37
+
38
+ 5. **Select test strategy.** Based on the architecture:
39
+ - Monolith: API tests with supertest/httptest against the running application
40
+ - Microservices: consumer-driven contract tests with Pact plus API tests per service
41
+ - Event-driven: message contract tests plus async handler integration tests
42
+
43
+ ### Phase 2: MOCK -- Configure Test Doubles and Infrastructure
44
+
45
+ 1. **Set up test database.** Choose the appropriate strategy:
46
+ - **Testcontainers:** Spin up a real database in Docker for each test suite. Preferred for PostgreSQL, MySQL, MongoDB.
47
+ - **In-memory database:** SQLite in-memory for lightweight tests. Only when schema compatibility is confirmed.
48
+ - **Transaction rollback:** Wrap each test in a transaction and roll back. Fast but requires careful connection management.
49
+
50
+ 2. **Configure mock services for external dependencies.** For each upstream dependency:
51
+ - Create a mock server using the framework's built-in tools (Pact mock, WireMock, nock, MSW)
52
+ - Define request/response pairs from the API contract or OpenAPI spec
53
+ - Configure realistic error responses (500, 503, timeout) for error path testing
54
+
55
+ 3. **Set up contract broker (if using Pact).** Configure:
56
+ - Pact broker URL and authentication
57
+ - Consumer and provider version tagging strategy
58
+ - Webhook configuration for provider verification on deploy
59
+
60
+ 4. **Create test fixtures and seed data.** Generate:
61
+ - Database seed scripts for required reference data
62
+ - Request/response fixtures for common API payloads
63
+ - Factory functions for building test entities with sensible defaults
64
+
65
+ 5. **Verify mock infrastructure starts.** Run a smoke test that:
66
+ - Starts the test database and confirms connectivity
67
+ - Starts mock services and confirms they respond
68
+ - Seeds baseline data and confirms it is queryable
69
+
70
+ ### Phase 3: IMPLEMENT -- Write Integration Tests
71
+
72
+ 1. **Write API endpoint tests.** For each endpoint, test:
73
+ - Happy path: valid request returns expected response with correct status code and body
74
+ - Validation: invalid input returns 400 with descriptive error messages
75
+ - Authentication: unauthenticated requests return 401, unauthorized return 403
76
+ - Not found: requests for non-existent resources return 404
77
+ - Edge cases: empty collections, pagination boundaries, large payloads
78
+
79
+ 2. **Write consumer-driven contract tests (when applicable).** For each consumer-provider pair:
80
+ - Consumer side: define interactions (request/response pairs) the consumer expects
81
+ - Provider side: verify the provider satisfies all consumer contracts
82
+ - Use Pact matchers for flexible verification (type matching, regex, array-like)
83
+
84
+ 3. **Write repository/data access tests.** For each data access layer:
85
+ - CRUD operations with valid data
86
+ - Constraint violations (unique, foreign key, not-null)
87
+ - Query correctness (filters, sorting, pagination)
88
+ - Transaction behavior (isolation, rollback on error)
89
+
90
+ 4. **Write error handling and resilience tests.** Verify:
91
+ - Timeout behavior: service responds within SLA when dependency is slow
92
+ - Retry logic: transient failures trigger retries with backoff
93
+ - Circuit breaker: repeated failures open the circuit and return fallback
94
+ - Graceful degradation: partial dependency failure does not crash the service
95
+
96
+ 5. **Organize tests by execution speed.** Tag or separate:
97
+ - Fast integration tests (in-memory mocks, < 5 seconds): run on every commit
98
+ - Slow integration tests (testcontainers, external services, > 5 seconds): run on PR
99
+
100
+ ### Phase 4: VALIDATE -- Execute and Verify Contract Compliance
101
+
102
+ 1. **Run the full integration test suite.** Execute all tests with verbose output. Collect:
103
+ - Pass/fail counts per test category (API, contract, repository)
104
+ - Execution time per test and per suite
105
+ - Any tests that require external services to be running
106
+
107
+ 2. **Verify contract compliance.** If using Pact:
108
+ - Publish consumer pacts to the broker
109
+ - Run provider verification against published pacts
110
+ - Confirm the can-i-deploy check passes for the target environment
111
+
112
+ 3. **Validate test isolation.** Run tests in random order (if the framework supports it). Any test that fails only when run after a specific other test has a shared-state bug. Fix immediately.
113
+
114
+ 4. **Run `harness validate`.** Confirm the project passes all harness checks including the new integration test infrastructure.
115
+
116
+ 5. **Generate coverage report.** Summarize:
117
+ - Endpoints tested vs. total endpoints discovered
118
+ - Contract coverage: consumer-provider pairs with verified contracts
119
+ - Error scenarios covered vs. identified
120
+ - Recommended next steps for remaining gaps
121
+
122
+ ### Graph Refresh
123
+
124
+ If a knowledge graph exists at `.harness/graph/`, refresh it after code changes to keep graph queries accurate:
125
+
126
+ ```
127
+ harness scan [path]
128
+ ```
129
+
130
+ ## Harness Integration
131
+
132
+ - **`harness validate`** -- Run in VALIDATE phase after all integration tests are implemented. Confirms project-wide health.
133
+ - **`harness check-deps`** -- Run after MOCK phase to verify test infrastructure dependencies do not leak into production bundles.
134
+ - **`emit_interaction`** -- Used at checkpoints to present contract verification results and coverage gaps to the human.
135
+ - **Grep** -- Used in DISCOVER phase to find route definitions, HTTP client usage, and service boundary patterns.
136
+ - **Glob** -- Used to catalog existing integration tests and contract files.
137
+
138
+ ## Success Criteria
139
+
140
+ - Every API endpoint has at least one integration test covering the happy path
141
+ - Every consumer-provider boundary has a verified contract (when using microservices)
142
+ - Error scenarios (400, 401, 403, 404, 500, timeout) are tested for all public endpoints
143
+ - All integration tests pass with test doubles -- no dependency on external staging environments for CI
144
+ - Test isolation is verified: tests pass in any execution order
145
+ - `harness validate` passes with the integration test suite in place
146
+
147
+ ## Examples
148
+
149
+ ### Example: Express API with Supertest and Testcontainers
150
+
151
+ **DISCOVER output:**
152
+
153
+ ```
154
+ Framework: Express 4.18 with TypeScript
155
+ Database: PostgreSQL via Prisma
156
+ Endpoints: 14 routes across 4 controllers (users, projects, tasks, auth)
157
+ Existing tests: 3 integration tests in tests/integration/ (auth only)
158
+ Coverage gaps: projects CRUD, tasks filtering, user profile update
159
+ ```
160
+
161
+ **IMPLEMENT -- API endpoint test with supertest:**
162
+
163
+ ```typescript
164
+ // tests/integration/projects.test.ts
165
+ import request from 'supertest';
166
+ import { app } from '../../src/app';
167
+ import { prisma } from '../../src/db';
168
+ import { createTestUser, generateAuthToken } from '../helpers/auth';
169
+
170
+ describe('POST /api/projects', () => {
171
+ let authToken: string;
172
+
173
+ beforeAll(async () => {
174
+ const user = await createTestUser(prisma);
175
+ authToken = generateAuthToken(user.id);
176
+ });
177
+
178
+ afterAll(async () => {
179
+ await prisma.project.deleteMany();
180
+ await prisma.user.deleteMany();
181
+ });
182
+
183
+ it('creates a project with valid data', async () => {
184
+ const response = await request(app)
185
+ .post('/api/projects')
186
+ .set('Authorization', `Bearer ${authToken}`)
187
+ .send({ name: 'Test Project', description: 'Integration test' });
188
+
189
+ expect(response.status).toBe(201);
190
+ expect(response.body).toMatchObject({
191
+ name: 'Test Project',
192
+ description: 'Integration test',
193
+ });
194
+ expect(response.body.id).toBeDefined();
195
+ });
196
+
197
+ it('returns 400 when name is missing', async () => {
198
+ const response = await request(app)
199
+ .post('/api/projects')
200
+ .set('Authorization', `Bearer ${authToken}`)
201
+ .send({ description: 'No name' });
202
+
203
+ expect(response.status).toBe(400);
204
+ expect(response.body.errors).toContainEqual(expect.objectContaining({ field: 'name' }));
205
+ });
206
+
207
+ it('returns 401 without auth token', async () => {
208
+ const response = await request(app).post('/api/projects').send({ name: 'Unauthorized' });
209
+
210
+ expect(response.status).toBe(401);
211
+ });
212
+ });
213
+ ```
214
+
215
+ ### Example: Pact Consumer-Driven Contract Test
216
+
217
+ **IMPLEMENT -- Consumer side (frontend):**
218
+
219
+ ```typescript
220
+ // contract-tests/consumer/project-service.pact.ts
221
+ import { PactV3, MatchersV3 } from '@pact-foundation/pact';
222
+ import { ProjectClient } from '../../src/clients/project-client';
223
+
224
+ const { like, eachLike, uuid } = MatchersV3;
225
+
226
+ const provider = new PactV3({
227
+ consumer: 'Dashboard',
228
+ provider: 'ProjectService',
229
+ });
230
+
231
+ describe('ProjectService contract', () => {
232
+ it('returns a list of projects', async () => {
233
+ await provider
234
+ .given('projects exist for user')
235
+ .uponReceiving('a request for user projects')
236
+ .withRequest({
237
+ method: 'GET',
238
+ path: '/api/projects',
239
+ headers: { Authorization: like('Bearer token-123') },
240
+ })
241
+ .willRespondWith({
242
+ status: 200,
243
+ body: eachLike({
244
+ id: uuid(),
245
+ name: like('Project Alpha'),
246
+ createdAt: like('2026-01-15T10:30:00Z'),
247
+ }),
248
+ })
249
+ .executeTest(async (mockServer) => {
250
+ const client = new ProjectClient(mockServer.url);
251
+ const projects = await client.listProjects('token-123');
252
+ expect(projects).toHaveLength(1);
253
+ expect(projects[0].name).toBe('Project Alpha');
254
+ });
255
+ });
256
+ });
257
+ ```
258
+
259
+ ## Gates
260
+
261
+ - **No integration tests that require external staging environments for CI.** Every integration test must run with local test doubles (mocks, containers, in-memory databases). Tests that fail without a staging VPN are not integration tests -- they are environment tests.
262
+ - **No shared mutable state between tests.** Each test must set up and tear down its own data. If tests fail when run in random order, shared state exists. Fix it before proceeding.
263
+ - **No testing implementation details.** Integration tests assert on API contracts (status codes, response shapes, headers) and observable data changes -- not on internal function calls or database column values that are not part of the public contract.
264
+ - **Contract changes must be coordinated.** If a provider contract test reveals a breaking change, do not silently update the consumer expectation. Flag it as a coordination point between teams.
265
+
266
+ ## Escalation
267
+
268
+ - **When a service dependency has no API documentation or schema:** Cannot write accurate contract tests without knowing the contract. Escalate to the dependency team to provide an OpenAPI spec, proto file, or at minimum a Pact broker with published contracts.
269
+ - **When Testcontainers fails in CI (Docker-in-Docker issues, resource limits):** Fall back to in-memory alternatives where possible. For databases that have no in-memory mode, escalate to DevOps to configure CI runners with Docker support.
270
+ - **When contract verification fails on the provider side:** This indicates a real incompatibility between consumer expectations and provider implementation. Do not adjust the consumer test to match the provider bug. Escalate to the provider team with the failing interaction details.
271
+ - **When integration tests exceed 5 minutes for a single service:** Triage by separating fast tests (mocked dependencies) from slow tests (testcontainers). Run fast tests on every commit, slow tests on PR only.