@harness-engineering/cli 1.13.0 → 1.13.1

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 (267) hide show
  1. package/dist/agents/skills/claude-code/add-harness-component/skill.yaml +1 -0
  2. package/dist/agents/skills/claude-code/align-documentation/skill.yaml +1 -0
  3. package/dist/agents/skills/claude-code/check-mechanical-constraints/skill.yaml +1 -0
  4. package/dist/agents/skills/claude-code/cleanup-dead-code/skill.yaml +1 -0
  5. package/dist/agents/skills/claude-code/detect-doc-drift/skill.yaml +1 -0
  6. package/dist/agents/skills/claude-code/enforce-architecture/skill.yaml +1 -0
  7. package/dist/agents/skills/claude-code/harness-accessibility/skill.yaml +1 -0
  8. package/dist/agents/skills/claude-code/harness-api-design/SKILL.md +304 -0
  9. package/dist/agents/skills/claude-code/harness-api-design/skill.yaml +74 -0
  10. package/dist/agents/skills/claude-code/harness-architecture-advisor/skill.yaml +1 -0
  11. package/dist/agents/skills/claude-code/harness-auth/SKILL.md +279 -0
  12. package/dist/agents/skills/claude-code/harness-auth/skill.yaml +81 -0
  13. package/dist/agents/skills/claude-code/harness-autopilot/skill.yaml +1 -0
  14. package/dist/agents/skills/claude-code/harness-brainstorming/skill.yaml +1 -0
  15. package/dist/agents/skills/claude-code/harness-caching/SKILL.md +309 -0
  16. package/dist/agents/skills/claude-code/harness-caching/skill.yaml +73 -0
  17. package/dist/agents/skills/claude-code/harness-chaos/SKILL.md +295 -0
  18. package/dist/agents/skills/claude-code/harness-chaos/skill.yaml +72 -0
  19. package/dist/agents/skills/claude-code/harness-code-review/skill.yaml +1 -0
  20. package/dist/agents/skills/claude-code/harness-codebase-cleanup/skill.yaml +1 -0
  21. package/dist/agents/skills/claude-code/harness-compliance/SKILL.md +303 -0
  22. package/dist/agents/skills/claude-code/harness-compliance/skill.yaml +78 -0
  23. package/dist/agents/skills/claude-code/harness-containerization/SKILL.md +284 -0
  24. package/dist/agents/skills/claude-code/harness-containerization/skill.yaml +80 -0
  25. package/dist/agents/skills/claude-code/harness-data-pipeline/SKILL.md +274 -0
  26. package/dist/agents/skills/claude-code/harness-data-pipeline/skill.yaml +81 -0
  27. package/dist/agents/skills/claude-code/harness-data-validation/SKILL.md +343 -0
  28. package/dist/agents/skills/claude-code/harness-data-validation/skill.yaml +75 -0
  29. package/dist/agents/skills/claude-code/harness-database/SKILL.md +258 -0
  30. package/dist/agents/skills/claude-code/harness-database/skill.yaml +80 -0
  31. package/dist/agents/skills/claude-code/harness-debugging/skill.yaml +1 -0
  32. package/dist/agents/skills/claude-code/harness-dependency-health/skill.yaml +1 -0
  33. package/dist/agents/skills/claude-code/harness-deployment/SKILL.md +255 -0
  34. package/dist/agents/skills/claude-code/harness-deployment/skill.yaml +77 -0
  35. package/dist/agents/skills/claude-code/harness-design/skill.yaml +1 -0
  36. package/dist/agents/skills/claude-code/harness-design-mobile/skill.yaml +1 -0
  37. package/dist/agents/skills/claude-code/harness-design-system/skill.yaml +1 -0
  38. package/dist/agents/skills/claude-code/harness-design-web/skill.yaml +1 -0
  39. package/dist/agents/skills/claude-code/harness-diagnostics/skill.yaml +1 -0
  40. package/dist/agents/skills/claude-code/harness-docs-pipeline/skill.yaml +1 -0
  41. package/dist/agents/skills/claude-code/harness-dx/SKILL.md +276 -0
  42. package/dist/agents/skills/claude-code/harness-dx/skill.yaml +76 -0
  43. package/dist/agents/skills/claude-code/harness-e2e/SKILL.md +245 -0
  44. package/dist/agents/skills/claude-code/harness-e2e/skill.yaml +78 -0
  45. package/dist/agents/skills/claude-code/harness-event-driven/SKILL.md +280 -0
  46. package/dist/agents/skills/claude-code/harness-event-driven/skill.yaml +77 -0
  47. package/dist/agents/skills/claude-code/harness-execution/skill.yaml +1 -0
  48. package/dist/agents/skills/claude-code/harness-feature-flags/SKILL.md +287 -0
  49. package/dist/agents/skills/claude-code/harness-feature-flags/skill.yaml +74 -0
  50. package/dist/agents/skills/claude-code/harness-git-workflow/skill.yaml +1 -0
  51. package/dist/agents/skills/claude-code/harness-hotspot-detector/skill.yaml +1 -0
  52. package/dist/agents/skills/claude-code/harness-i18n/skill.yaml +1 -0
  53. package/dist/agents/skills/claude-code/harness-i18n-process/skill.yaml +1 -0
  54. package/dist/agents/skills/claude-code/harness-i18n-workflow/skill.yaml +1 -0
  55. package/dist/agents/skills/claude-code/harness-impact-analysis/skill.yaml +1 -0
  56. package/dist/agents/skills/claude-code/harness-incident-response/SKILL.md +223 -0
  57. package/dist/agents/skills/claude-code/harness-incident-response/skill.yaml +78 -0
  58. package/dist/agents/skills/claude-code/harness-infrastructure-as-code/SKILL.md +279 -0
  59. package/dist/agents/skills/claude-code/harness-infrastructure-as-code/skill.yaml +80 -0
  60. package/dist/agents/skills/claude-code/harness-integration-test/SKILL.md +271 -0
  61. package/dist/agents/skills/claude-code/harness-integration-test/skill.yaml +73 -0
  62. package/dist/agents/skills/claude-code/harness-integrity/skill.yaml +1 -0
  63. package/dist/agents/skills/claude-code/harness-knowledge-mapper/skill.yaml +1 -0
  64. package/dist/agents/skills/claude-code/harness-load-testing/SKILL.md +274 -0
  65. package/dist/agents/skills/claude-code/harness-load-testing/skill.yaml +79 -0
  66. package/dist/agents/skills/claude-code/harness-ml-ops/SKILL.md +341 -0
  67. package/dist/agents/skills/claude-code/harness-ml-ops/skill.yaml +79 -0
  68. package/dist/agents/skills/claude-code/harness-mobile-patterns/SKILL.md +326 -0
  69. package/dist/agents/skills/claude-code/harness-mobile-patterns/skill.yaml +82 -0
  70. package/dist/agents/skills/claude-code/harness-mutation-test/SKILL.md +251 -0
  71. package/dist/agents/skills/claude-code/harness-mutation-test/skill.yaml +70 -0
  72. package/dist/agents/skills/claude-code/harness-observability/SKILL.md +283 -0
  73. package/dist/agents/skills/claude-code/harness-observability/skill.yaml +78 -0
  74. package/dist/agents/skills/claude-code/harness-onboarding/skill.yaml +1 -0
  75. package/dist/agents/skills/claude-code/harness-parallel-agents/skill.yaml +1 -0
  76. package/dist/agents/skills/claude-code/harness-perf/skill.yaml +1 -0
  77. package/dist/agents/skills/claude-code/harness-perf-tdd/skill.yaml +1 -0
  78. package/dist/agents/skills/claude-code/harness-planning/skill.yaml +1 -0
  79. package/dist/agents/skills/claude-code/harness-pre-commit-review/skill.yaml +1 -0
  80. package/dist/agents/skills/claude-code/harness-product-spec/SKILL.md +285 -0
  81. package/dist/agents/skills/claude-code/harness-product-spec/skill.yaml +72 -0
  82. package/dist/agents/skills/claude-code/harness-property-test/SKILL.md +281 -0
  83. package/dist/agents/skills/claude-code/harness-property-test/skill.yaml +71 -0
  84. package/dist/agents/skills/claude-code/harness-refactoring/skill.yaml +1 -0
  85. package/dist/agents/skills/claude-code/harness-release-readiness/skill.yaml +1 -0
  86. package/dist/agents/skills/claude-code/harness-resilience/SKILL.md +255 -0
  87. package/dist/agents/skills/claude-code/harness-resilience/skill.yaml +76 -0
  88. package/dist/agents/skills/claude-code/harness-roadmap/skill.yaml +1 -0
  89. package/dist/agents/skills/claude-code/harness-secrets/SKILL.md +293 -0
  90. package/dist/agents/skills/claude-code/harness-secrets/skill.yaml +76 -0
  91. package/dist/agents/skills/claude-code/harness-security-review/skill.yaml +1 -0
  92. package/dist/agents/skills/claude-code/harness-security-scan/skill.yaml +1 -0
  93. package/dist/agents/skills/claude-code/harness-skill-authoring/skill.yaml +1 -0
  94. package/dist/agents/skills/claude-code/harness-soundness-review/skill.yaml +1 -0
  95. package/dist/agents/skills/claude-code/harness-sql-review/SKILL.md +315 -0
  96. package/dist/agents/skills/claude-code/harness-sql-review/skill.yaml +74 -0
  97. package/dist/agents/skills/claude-code/harness-state-management/skill.yaml +1 -0
  98. package/dist/agents/skills/claude-code/harness-tdd/skill.yaml +1 -0
  99. package/dist/agents/skills/claude-code/harness-test-advisor/skill.yaml +1 -0
  100. package/dist/agents/skills/claude-code/harness-test-data/SKILL.md +268 -0
  101. package/dist/agents/skills/claude-code/harness-test-data/skill.yaml +74 -0
  102. package/dist/agents/skills/claude-code/harness-ux-copy/SKILL.md +271 -0
  103. package/dist/agents/skills/claude-code/harness-ux-copy/skill.yaml +77 -0
  104. package/dist/agents/skills/claude-code/harness-verification/skill.yaml +1 -0
  105. package/dist/agents/skills/claude-code/harness-verify/skill.yaml +1 -0
  106. package/dist/agents/skills/claude-code/harness-visual-regression/SKILL.md +257 -0
  107. package/dist/agents/skills/claude-code/harness-visual-regression/skill.yaml +74 -0
  108. package/dist/agents/skills/claude-code/initialize-harness-project/skill.yaml +1 -0
  109. package/dist/agents/skills/claude-code/validate-context-engineering/skill.yaml +1 -0
  110. package/dist/agents/skills/gemini-cli/add-harness-component/skill.yaml +1 -0
  111. package/dist/agents/skills/gemini-cli/align-documentation/skill.yaml +1 -0
  112. package/dist/agents/skills/gemini-cli/check-mechanical-constraints/skill.yaml +1 -0
  113. package/dist/agents/skills/gemini-cli/cleanup-dead-code/skill.yaml +1 -0
  114. package/dist/agents/skills/gemini-cli/detect-doc-drift/skill.yaml +1 -0
  115. package/dist/agents/skills/gemini-cli/enforce-architecture/skill.yaml +1 -0
  116. package/dist/agents/skills/gemini-cli/harness-accessibility/skill.yaml +1 -0
  117. package/dist/agents/skills/gemini-cli/harness-api-design/SKILL.md +304 -0
  118. package/dist/agents/skills/gemini-cli/harness-api-design/skill.yaml +74 -0
  119. package/dist/agents/skills/gemini-cli/harness-architecture-advisor/skill.yaml +1 -0
  120. package/dist/agents/skills/gemini-cli/harness-auth/SKILL.md +279 -0
  121. package/dist/agents/skills/gemini-cli/harness-auth/skill.yaml +81 -0
  122. package/dist/agents/skills/gemini-cli/harness-autopilot/skill.yaml +1 -0
  123. package/dist/agents/skills/gemini-cli/harness-brainstorming/skill.yaml +1 -0
  124. package/dist/agents/skills/gemini-cli/harness-caching/SKILL.md +309 -0
  125. package/dist/agents/skills/gemini-cli/harness-caching/skill.yaml +73 -0
  126. package/dist/agents/skills/gemini-cli/harness-chaos/SKILL.md +295 -0
  127. package/dist/agents/skills/gemini-cli/harness-chaos/skill.yaml +72 -0
  128. package/dist/agents/skills/gemini-cli/harness-code-review/skill.yaml +1 -0
  129. package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/skill.yaml +1 -0
  130. package/dist/agents/skills/gemini-cli/harness-compliance/SKILL.md +303 -0
  131. package/dist/agents/skills/gemini-cli/harness-compliance/skill.yaml +78 -0
  132. package/dist/agents/skills/gemini-cli/harness-containerization/SKILL.md +284 -0
  133. package/dist/agents/skills/gemini-cli/harness-containerization/skill.yaml +80 -0
  134. package/dist/agents/skills/gemini-cli/harness-data-pipeline/SKILL.md +274 -0
  135. package/dist/agents/skills/gemini-cli/harness-data-pipeline/skill.yaml +81 -0
  136. package/dist/agents/skills/gemini-cli/harness-data-validation/SKILL.md +343 -0
  137. package/dist/agents/skills/gemini-cli/harness-data-validation/skill.yaml +75 -0
  138. package/dist/agents/skills/gemini-cli/harness-database/SKILL.md +258 -0
  139. package/dist/agents/skills/gemini-cli/harness-database/skill.yaml +80 -0
  140. package/dist/agents/skills/gemini-cli/harness-debugging/skill.yaml +1 -0
  141. package/dist/agents/skills/gemini-cli/harness-dependency-health/skill.yaml +1 -0
  142. package/dist/agents/skills/gemini-cli/harness-deployment/SKILL.md +255 -0
  143. package/dist/agents/skills/gemini-cli/harness-deployment/skill.yaml +77 -0
  144. package/dist/agents/skills/gemini-cli/harness-design/skill.yaml +1 -0
  145. package/dist/agents/skills/gemini-cli/harness-design-mobile/skill.yaml +1 -0
  146. package/dist/agents/skills/gemini-cli/harness-design-system/skill.yaml +1 -0
  147. package/dist/agents/skills/gemini-cli/harness-design-web/skill.yaml +1 -0
  148. package/dist/agents/skills/gemini-cli/harness-diagnostics/skill.yaml +1 -0
  149. package/dist/agents/skills/gemini-cli/harness-docs-pipeline/skill.yaml +1 -0
  150. package/dist/agents/skills/gemini-cli/harness-dx/SKILL.md +276 -0
  151. package/dist/agents/skills/gemini-cli/harness-dx/skill.yaml +76 -0
  152. package/dist/agents/skills/gemini-cli/harness-e2e/SKILL.md +245 -0
  153. package/dist/agents/skills/gemini-cli/harness-e2e/skill.yaml +78 -0
  154. package/dist/agents/skills/gemini-cli/harness-event-driven/SKILL.md +280 -0
  155. package/dist/agents/skills/gemini-cli/harness-event-driven/skill.yaml +77 -0
  156. package/dist/agents/skills/gemini-cli/harness-execution/skill.yaml +1 -0
  157. package/dist/agents/skills/gemini-cli/harness-feature-flags/SKILL.md +287 -0
  158. package/dist/agents/skills/gemini-cli/harness-feature-flags/skill.yaml +74 -0
  159. package/dist/agents/skills/gemini-cli/harness-git-workflow/skill.yaml +1 -0
  160. package/dist/agents/skills/gemini-cli/harness-hotspot-detector/skill.yaml +1 -0
  161. package/dist/agents/skills/gemini-cli/harness-i18n/skill.yaml +1 -0
  162. package/dist/agents/skills/gemini-cli/harness-i18n-process/skill.yaml +1 -0
  163. package/dist/agents/skills/gemini-cli/harness-i18n-workflow/skill.yaml +1 -0
  164. package/dist/agents/skills/gemini-cli/harness-impact-analysis/skill.yaml +1 -0
  165. package/dist/agents/skills/gemini-cli/harness-incident-response/SKILL.md +223 -0
  166. package/dist/agents/skills/gemini-cli/harness-incident-response/skill.yaml +78 -0
  167. package/dist/agents/skills/gemini-cli/harness-infrastructure-as-code/SKILL.md +279 -0
  168. package/dist/agents/skills/gemini-cli/harness-infrastructure-as-code/skill.yaml +80 -0
  169. package/dist/agents/skills/gemini-cli/harness-integration-test/SKILL.md +271 -0
  170. package/dist/agents/skills/gemini-cli/harness-integration-test/skill.yaml +73 -0
  171. package/dist/agents/skills/gemini-cli/harness-integrity/skill.yaml +1 -0
  172. package/dist/agents/skills/gemini-cli/harness-knowledge-mapper/skill.yaml +1 -0
  173. package/dist/agents/skills/gemini-cli/harness-load-testing/SKILL.md +274 -0
  174. package/dist/agents/skills/gemini-cli/harness-load-testing/skill.yaml +79 -0
  175. package/dist/agents/skills/gemini-cli/harness-ml-ops/SKILL.md +341 -0
  176. package/dist/agents/skills/gemini-cli/harness-ml-ops/skill.yaml +79 -0
  177. package/dist/agents/skills/gemini-cli/harness-mobile-patterns/SKILL.md +326 -0
  178. package/dist/agents/skills/gemini-cli/harness-mobile-patterns/skill.yaml +82 -0
  179. package/dist/agents/skills/gemini-cli/harness-mutation-test/SKILL.md +251 -0
  180. package/dist/agents/skills/gemini-cli/harness-mutation-test/skill.yaml +70 -0
  181. package/dist/agents/skills/gemini-cli/harness-observability/SKILL.md +283 -0
  182. package/dist/agents/skills/gemini-cli/harness-observability/skill.yaml +78 -0
  183. package/dist/agents/skills/gemini-cli/harness-onboarding/skill.yaml +1 -0
  184. package/dist/agents/skills/gemini-cli/harness-parallel-agents/skill.yaml +1 -0
  185. package/dist/agents/skills/gemini-cli/harness-perf/skill.yaml +1 -0
  186. package/dist/agents/skills/gemini-cli/harness-perf-tdd/skill.yaml +1 -0
  187. package/dist/agents/skills/gemini-cli/harness-planning/skill.yaml +1 -0
  188. package/dist/agents/skills/gemini-cli/harness-pre-commit-review/skill.yaml +1 -0
  189. package/dist/agents/skills/gemini-cli/harness-product-spec/SKILL.md +285 -0
  190. package/dist/agents/skills/gemini-cli/harness-product-spec/skill.yaml +72 -0
  191. package/dist/agents/skills/gemini-cli/harness-property-test/SKILL.md +281 -0
  192. package/dist/agents/skills/gemini-cli/harness-property-test/skill.yaml +71 -0
  193. package/dist/agents/skills/gemini-cli/harness-refactoring/skill.yaml +1 -0
  194. package/dist/agents/skills/gemini-cli/harness-release-readiness/skill.yaml +1 -0
  195. package/dist/agents/skills/gemini-cli/harness-resilience/SKILL.md +255 -0
  196. package/dist/agents/skills/gemini-cli/harness-resilience/skill.yaml +76 -0
  197. package/dist/agents/skills/gemini-cli/harness-roadmap/skill.yaml +1 -0
  198. package/dist/agents/skills/gemini-cli/harness-secrets/SKILL.md +293 -0
  199. package/dist/agents/skills/gemini-cli/harness-secrets/skill.yaml +76 -0
  200. package/dist/agents/skills/gemini-cli/harness-security-review/SKILL.md +240 -0
  201. package/dist/agents/skills/gemini-cli/harness-security-review/skill.yaml +1 -0
  202. package/dist/agents/skills/gemini-cli/harness-security-scan/skill.yaml +1 -0
  203. package/dist/agents/skills/gemini-cli/harness-skill-authoring/skill.yaml +1 -0
  204. package/dist/agents/skills/gemini-cli/harness-soundness-review/skill.yaml +1 -0
  205. package/dist/agents/skills/gemini-cli/harness-sql-review/SKILL.md +315 -0
  206. package/dist/agents/skills/gemini-cli/harness-sql-review/skill.yaml +74 -0
  207. package/dist/agents/skills/gemini-cli/harness-state-management/skill.yaml +1 -0
  208. package/dist/agents/skills/gemini-cli/harness-tdd/skill.yaml +1 -0
  209. package/dist/agents/skills/gemini-cli/harness-test-advisor/skill.yaml +1 -0
  210. package/dist/agents/skills/gemini-cli/harness-test-data/SKILL.md +268 -0
  211. package/dist/agents/skills/gemini-cli/harness-test-data/skill.yaml +74 -0
  212. package/dist/agents/skills/gemini-cli/harness-ux-copy/SKILL.md +271 -0
  213. package/dist/agents/skills/gemini-cli/harness-ux-copy/skill.yaml +77 -0
  214. package/dist/agents/skills/gemini-cli/harness-verification/skill.yaml +1 -0
  215. package/dist/agents/skills/gemini-cli/harness-verify/skill.yaml +1 -0
  216. package/dist/agents/skills/gemini-cli/harness-visual-regression/SKILL.md +257 -0
  217. package/dist/agents/skills/gemini-cli/harness-visual-regression/skill.yaml +74 -0
  218. package/dist/agents/skills/gemini-cli/initialize-harness-project/skill.yaml +1 -0
  219. package/dist/agents/skills/gemini-cli/validate-context-engineering/skill.yaml +1 -0
  220. package/dist/{agents-md-P2RHSUV7.js → agents-md-XU3BHE22.js} +1 -1
  221. package/dist/{architecture-ESOOE26S.js → architecture-2R5Z4ZAF.js} +2 -2
  222. package/dist/bin/harness-mcp.js +14 -13
  223. package/dist/bin/harness.js +22 -21
  224. package/dist/{check-phase-gate-S2MZKLFQ.js → check-phase-gate-2OFZ7OWW.js} +3 -2
  225. package/dist/{chunk-LD3DKUK5.js → chunk-4ZMOCPYO.js} +1 -1
  226. package/dist/{chunk-5VY23YK3.js → chunk-65FRIL4D.js} +2 -2
  227. package/dist/{chunk-L2KLU56K.js → chunk-AOZRDOIP.js} +2 -2
  228. package/dist/{chunk-MACVXDZK.js → chunk-DZS7CJKL.js} +4 -4
  229. package/dist/{chunk-7PZWR4LI.js → chunk-IM32EEDM.js} +9 -9
  230. package/dist/{chunk-2YPZKGAG.js → chunk-IMFVFNJE.js} +1 -1
  231. package/dist/{chunk-HD4IBGLA.js → chunk-N5G5QMS3.js} +24 -1
  232. package/dist/{chunk-MI5XJQDY.js → chunk-ND6PNADU.js} +23 -9
  233. package/dist/{chunk-7KQSUZVG.js → chunk-NERR4TAO.js} +729 -436
  234. package/dist/{chunk-PSNN4LWX.js → chunk-NOPU4RZ4.js} +2 -2
  235. package/dist/{chunk-KELT6K6M.js → chunk-PQ5YK4AY.js} +287 -258
  236. package/dist/{chunk-WPPDRIJL.js → chunk-QY4T6YAZ.js} +3 -3
  237. package/dist/{chunk-RZSUJBZZ.js → chunk-SSKDAOX5.js} +31 -28
  238. package/dist/{chunk-2VU4MFM3.js → chunk-TKJZKICB.js} +6 -6
  239. package/dist/{chunk-GNGELAXY.js → chunk-TS3XWPW5.js} +1 -1
  240. package/dist/chunk-UAX4I5ZE.js +217 -0
  241. package/dist/{chunk-VRFZWGMS.js → chunk-XYLGHKG6.js} +5 -1
  242. package/dist/{chunk-6N4R6FVX.js → chunk-YBJ262QL.js} +1 -1
  243. package/dist/{chunk-3KOLLWWE.js → chunk-Z77YQRQT.js} +11 -207
  244. package/dist/{ci-workflow-4NYBUG6R.js → ci-workflow-EHV65NQB.js} +1 -1
  245. package/dist/{create-skill-WPXHSLX2.js → create-skill-XSWHMSM5.js} +2 -2
  246. package/dist/{dist-WF4C7A4A.js → dist-2B363XUH.js} +1 -1
  247. package/dist/{dist-M6BQODWC.js → dist-HXHWB7SV.js} +2 -2
  248. package/dist/{docs-BPYCN2DR.js → docs-FZOPM4GK.js} +4 -2
  249. package/dist/{engine-LXLIWQQ3.js → engine-OL4T6NZS.js} +1 -1
  250. package/dist/{entropy-4VDVV5CR.js → entropy-LVHJMFGH.js} +2 -2
  251. package/dist/{feedback-63QB5RCA.js → feedback-IHLVLMRD.js} +1 -1
  252. package/dist/{generate-agent-definitions-QABOJG56.js → generate-agent-definitions-64S3CLEZ.js} +3 -3
  253. package/dist/{glob-helper-5OHBUQAI.js → glob-helper-R5FXNUPS.js} +1 -1
  254. package/dist/{graph-loader-KO4GJ5N2.js → graph-loader-GJZ4FN4Y.js} +1 -1
  255. package/dist/index.d.ts +35 -8
  256. package/dist/index.js +23 -21
  257. package/dist/{loader-Z2IT7QX3.js → loader-DPYFB6R6.js} +1 -1
  258. package/dist/{mcp-KQHEL5IF.js → mcp-JQUI7BVZ.js} +14 -13
  259. package/dist/{performance-26BH47O4.js → performance-ZTVSUANN.js} +2 -2
  260. package/dist/{review-pipeline-GHR3WFBI.js → review-pipeline-76JHKGSV.js} +1 -1
  261. package/dist/{runtime-PDWD7UIK.js → runtime-X7U6SC7K.js} +1 -1
  262. package/dist/{security-UQFUZXEN.js → security-FWQZF2IZ.js} +1 -1
  263. package/dist/skill-executor-XZLYZYAK.js +8 -0
  264. package/dist/{validate-N7QJOKFZ.js → validate-GCHZJIL7.js} +2 -2
  265. package/dist/{validate-cross-check-EDQ5QGTM.js → validate-cross-check-STFHYMAZ.js} +1 -1
  266. package/package.json +3 -3
  267. package/dist/skill-executor-RG45LUO5.js +0 -8
@@ -0,0 +1,258 @@
1
+ # Harness Database
2
+
3
+ > Advisory guide for schema design, migrations, ORM patterns, and migration safety. Detects your ORM, analyzes schema health, produces safe migrations, and validates backward compatibility.
4
+
5
+ ## When to Use
6
+
7
+ - When designing a new database schema for a feature
8
+ - When writing or reviewing migration files (Prisma, Drizzle, Knex, TypeORM, Sequelize, raw SQL)
9
+ - When evaluating schema normalization, indexing, or relationship design
10
+ - When checking migration safety before deploying to production
11
+ - When adding a new model or entity to an existing ORM setup
12
+ - When troubleshooting slow queries caused by missing indexes or poor schema design
13
+ - NOT for API endpoint design that exposes database models (use harness-api-design for that)
14
+ - NOT for caching layers in front of the database (use harness-caching for Redis/Memcached strategy)
15
+ - NOT for data validation at the application layer (use harness-data-validation for Zod/Joi schemas)
16
+ - NOT for event sourcing storage patterns (use harness-event-driven for event store design)
17
+
18
+ ## Process
19
+
20
+ ### Phase 1: DETECT -- Identify Database Engine and ORM
21
+
22
+ 1. **Identify the ORM or query builder.** Scan for stack signals: `prisma/schema.prisma` for Prisma, `drizzle.config.*` for Drizzle, `knexfile.*` for Knex, `typeorm.config.*` or `ormconfig.*` for TypeORM, `sequelize.config.*` or `.sequelizerc` for Sequelize. If the `--orm` argument is provided, use that instead of auto-detection.
23
+
24
+ 2. **Identify the database engine.** Parse the ORM configuration for the connection string or provider field. Detect PostgreSQL, MySQL, SQLite, MongoDB, or SQL Server. Record the engine version if specified in the config or docker-compose file.
25
+
26
+ 3. **Map existing schema.** For Prisma, parse `schema.prisma` for models, relations, and indexes. For Drizzle, parse table definitions in `src/**/schema.*`. For Knex/raw SQL, scan the `migrations/` directory and reconstruct the current schema state. For TypeORM/Sequelize, scan entity or model files.
27
+
28
+ 4. **Assess migration state.** List pending migrations (not yet applied). Check for migration gaps (missing sequence numbers) or conflicts (multiple migrations with the same timestamp). WHERE a migration history table is accessible, THEN compare applied vs. on-disk migrations.
29
+
30
+ 5. **Catalog existing patterns.** Record naming conventions (snake_case vs camelCase for columns), soft-delete patterns (`deletedAt` column), audit patterns (`createdAt`, `updatedAt`), and relationship styles (join tables vs embedded references). These become the baseline for new schema work.
31
+
32
+ ### Phase 2: ANALYZE -- Evaluate Schema Design
33
+
34
+ 1. **Check normalization.** Identify denormalized data that may cause update anomalies. Flag tables with repeated groups of columns (e.g., `address1`, `address2`, `address3`) that should be a separate table. Distinguish intentional denormalization (for read performance) from accidental duplication.
35
+
36
+ 2. **Evaluate indexing.** For every foreign key column, verify an index exists. For columns used in WHERE clauses or ORDER BY (inferred from query patterns in the codebase), check for supporting indexes. Flag tables with more than 8 indexes (write performance concern) or zero indexes beyond the primary key.
37
+
38
+ 3. **Analyze relationships.** Verify that every foreign key has a corresponding ON DELETE action (CASCADE, SET NULL, or RESTRICT). Flag orphan risk where ON DELETE is not specified. Check for circular references that may complicate migrations or deletes.
39
+
40
+ 4. **Review data types.** Flag columns using overly broad types (e.g., `TEXT` where `VARCHAR(255)` suffices, `FLOAT` for monetary values instead of `DECIMAL`). Check for missing NOT NULL constraints on fields that should never be null. Verify ENUM types are used appropriately.
41
+
42
+ 5. **Check for N+1 query patterns.** Scan ORM usage in the codebase for eager vs lazy loading configuration. WHERE a model is loaded in a loop without includes/joins, THEN flag the N+1 risk with a specific file and line reference.
43
+
44
+ ### Phase 3: ADVISE -- Produce Schema Changes and Migrations
45
+
46
+ 1. **Generate schema changes.** Based on the feature requirements and phase 2 analysis, produce the schema modifications. For Prisma, write the `schema.prisma` model additions. For Drizzle, write the table definition. For Knex, write the migration `up` and `down` functions. Match the project's existing conventions.
47
+
48
+ 2. **Write migration files.** Generate the migration in the ORM's native format. For Prisma: `npx prisma migrate dev --name <name>`. For Drizzle: `npx drizzle-kit generate`. For Knex: `npx knex migrate:make <name>`. Include both `up` (apply) and `down` (rollback) logic.
49
+
50
+ 3. **Add indexes for the new schema.** For every foreign key in the new schema, include an index. For columns that will be used in filters or sorting (based on the feature requirements), include a covering index. Justify each index with the expected query pattern.
51
+
52
+ 4. **Handle seed data.** WHERE the new schema requires initial data (enum lookup tables, default configuration rows), THEN include a seed script or migration data insertion. Separate structural migrations from data migrations.
53
+
54
+ 5. **Produce ORM pattern recommendations.** For the new models, recommend the query patterns: which relations to eager-load by default, where to use transactions, and how to handle optimistic locking if the feature requires concurrent writes.
55
+
56
+ ### Phase 4: VALIDATE -- Verify Migration Safety
57
+
58
+ 1. **Check backward compatibility.** WHERE the migration drops a column, renames a table, or changes a column type, THEN flag it as a destructive migration. Destructive migrations require a multi-step deployment: add new column, backfill data, deploy code using new column, drop old column.
59
+
60
+ 2. **Verify rollback safety.** Run the `down` migration mentally (or actually if a test database is available). Confirm that rolling back does not lose data. WHERE the `up` migration drops a column, THEN the `down` migration cannot restore it -- flag this as an irreversible migration.
61
+
62
+ 3. **Check for long-running locks.** WHERE the migration adds a NOT NULL column to a large table without a default value, THEN flag it: the database will lock the table for a full rewrite. Recommend adding the column as nullable first, backfilling, then adding the constraint. WHERE the migration creates an index on a large table, THEN recommend `CREATE INDEX CONCURRENTLY` (PostgreSQL) or equivalent.
63
+
64
+ 4. **Validate constraint additions.** WHERE a new UNIQUE constraint is added, THEN verify existing data will not violate it. WHERE a new FOREIGN KEY is added, THEN verify the referenced table and column exist and have an index. WHERE a CHECK constraint is added, THEN verify the expression syntax is valid for the target engine.
65
+
66
+ 5. **Run migration dry-run.** WHERE a test database connection is available, THEN run the migration in a transaction and roll it back. Report success or failure. WHERE no database is available, THEN validate the migration SQL syntax against the target engine's dialect.
67
+
68
+ ## Harness Integration
69
+
70
+ - **`harness validate`** -- Run after generating migrations to confirm project health
71
+ - **`harness scan`** -- Refresh the knowledge graph after adding new model files
72
+ - **`query_graph`** -- Trace which services depend on a table before modifying it
73
+ - **`get_impact`** -- Understand blast radius when modifying a shared schema table
74
+
75
+ ## Success Criteria
76
+
77
+ - ORM and database engine were correctly detected or explicitly specified
78
+ - Existing schema conventions were identified and followed in new designs
79
+ - Every new table has appropriate indexes, constraints, and foreign key actions
80
+ - Migration files include both `up` and `down` logic
81
+ - Destructive migrations are flagged and a safe multi-step deployment plan is provided
82
+ - No long-running table locks are introduced without explicit warning
83
+ - N+1 query risks are identified for new models
84
+ - Migration SQL syntax is valid for the target database engine
85
+
86
+ ## Examples
87
+
88
+ ### Example: Prisma Schema Addition for a Comments Feature
89
+
90
+ **Input:** "Add a comments model to our Prisma/PostgreSQL app."
91
+
92
+ **Phase 1 -- DETECT:**
93
+
94
+ ```
95
+ ORM: Prisma 5.x
96
+ Engine: PostgreSQL 15 (from DATABASE_URL in .env.example)
97
+ Existing models: User, Post, Category
98
+ Conventions: camelCase fields, @updatedAt on all models, soft deletes (deletedAt DateTime?)
99
+ Migrations: 12 applied, 0 pending, no gaps
100
+ ```
101
+
102
+ **Phase 2 -- ANALYZE:**
103
+
104
+ ```
105
+ Normalization: PASS -- no denormalized data detected
106
+ Indexing: WARN -- Post.authorId has no index (FK without index)
107
+ Relationships: PASS -- all FKs have onDelete specified
108
+ Data types: PASS
109
+ N+1 risk: WARN -- src/routes/posts.ts:42 loads post.author in a loop without include
110
+ ```
111
+
112
+ **Phase 3 -- ADVISE:**
113
+
114
+ ```prisma
115
+ model Comment {
116
+ id String @id @default(cuid())
117
+ body String
118
+ postId String
119
+ post Post @relation(fields: [postId], references: [id], onDelete: Cascade)
120
+ authorId String
121
+ author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
122
+ parentId String?
123
+ parent Comment? @relation("CommentReplies", fields: [parentId], references: [id], onDelete: Cascade)
124
+ replies Comment[] @relation("CommentReplies")
125
+ createdAt DateTime @default(now())
126
+ updatedAt DateTime @updatedAt
127
+ deletedAt DateTime?
128
+
129
+ @@index([postId])
130
+ @@index([authorId])
131
+ @@index([parentId])
132
+ }
133
+ ```
134
+
135
+ Migration generated: `npx prisma migrate dev --name add-comments`
136
+
137
+ **Phase 4 -- VALIDATE:**
138
+
139
+ ```
140
+ Backward compatibility: PASS -- additive change only
141
+ Rollback safety: PASS -- dropping Comment table is safe (no data loss for existing tables)
142
+ Lock risk: PASS -- new table, no ALTER on existing tables
143
+ Constraints: PASS -- all FK targets exist and are indexed
144
+ ```
145
+
146
+ ### Example: Knex Migration Safety Check
147
+
148
+ **Input:** "Review this migration that adds a required email column to the users table."
149
+
150
+ **Phase 1 -- DETECT:**
151
+
152
+ ```
153
+ ORM: Knex 3.x
154
+ Engine: PostgreSQL 14
155
+ Existing schema: users (id, name, created_at), posts (id, user_id, title, body)
156
+ ```
157
+
158
+ **Phase 4 -- VALIDATE (fast-path for --check-migrations):**
159
+
160
+ ```
161
+ DANGER: Migration adds NOT NULL column 'email' to users table without a default value.
162
+
163
+ Impact: PostgreSQL will attempt to rewrite the entire users table, acquiring an
164
+ ACCESS EXCLUSIVE lock. If the users table has >10K rows, this will block all
165
+ reads and writes for the duration.
166
+
167
+ Existing rows will fail the NOT NULL constraint, causing the migration to abort.
168
+
169
+ Recommended safe approach (3-step migration):
170
+
171
+ Step 1 (migration: add-email-nullable):
172
+ exports.up = (knex) => knex.schema.alterTable('users', (t) => {
173
+ t.string('email', 255); // nullable first
174
+ t.index('email');
175
+ });
176
+
177
+ Step 2 (data migration: backfill-emails):
178
+ exports.up = async (knex) => {
179
+ await knex.raw(`
180
+ UPDATE users SET email = name || '@placeholder.example'
181
+ WHERE email IS NULL
182
+ `);
183
+ };
184
+
185
+ Step 3 (migration: enforce-email-not-null):
186
+ exports.up = (knex) => knex.schema.alterTable('users', (t) => {
187
+ t.string('email', 255).notNullable().alter();
188
+ });
189
+ ```
190
+
191
+ ### Example: Drizzle Schema for Multi-Tenant SaaS
192
+
193
+ **Input:** "Design a multi-tenant schema with row-level security for our Drizzle/PostgreSQL app."
194
+
195
+ **Phase 1 -- DETECT:**
196
+
197
+ ```
198
+ ORM: Drizzle 0.30.x
199
+ Engine: PostgreSQL 16
200
+ Config: drizzle.config.ts (schema: ./src/db/schema.ts)
201
+ Existing tables: none (greenfield)
202
+ ```
203
+
204
+ **Phase 3 -- ADVISE:**
205
+
206
+ ```typescript
207
+ // src/db/schema.ts
208
+ import { pgTable, text, timestamp, uuid, index } from 'drizzle-orm/pg-core';
209
+
210
+ export const tenants = pgTable('tenants', {
211
+ id: uuid('id').primaryKey().defaultRandom(),
212
+ name: text('name').notNull(),
213
+ slug: text('slug').notNull().unique(),
214
+ createdAt: timestamp('created_at').defaultNow().notNull(),
215
+ });
216
+
217
+ export const users = pgTable(
218
+ 'users',
219
+ {
220
+ id: uuid('id').primaryKey().defaultRandom(),
221
+ tenantId: uuid('tenant_id')
222
+ .notNull()
223
+ .references(() => tenants.id, { onDelete: 'cascade' }),
224
+ email: text('email').notNull(),
225
+ name: text('name').notNull(),
226
+ role: text('role', { enum: ['owner', 'admin', 'member'] })
227
+ .notNull()
228
+ .default('member'),
229
+ createdAt: timestamp('created_at').defaultNow().notNull(),
230
+ },
231
+ (table) => ({
232
+ tenantIdx: index('users_tenant_id_idx').on(table.tenantId),
233
+ emailTenantUnique: index('users_email_tenant_unique').on(table.email, table.tenantId).unique(),
234
+ })
235
+ );
236
+ ```
237
+
238
+ Row-level security policy:
239
+
240
+ ```sql
241
+ ALTER TABLE users ENABLE ROW LEVEL SECURITY;
242
+ CREATE POLICY tenant_isolation ON users
243
+ USING (tenant_id = current_setting('app.current_tenant_id')::uuid);
244
+ ```
245
+
246
+ ## Gates
247
+
248
+ - **Destructive migrations must not proceed without flagging.** WHERE a migration drops a column, drops a table, renames a column, or changes a column type, THEN the skill must halt and present a safe multi-step alternative. Silently executing destructive DDL against production is not recoverable.
249
+ - **Every foreign key must have an ON DELETE action.** No foreign key may be created without an explicit `onDelete` (CASCADE, SET NULL, or RESTRICT). The database default (NO ACTION) creates orphan rows and constraint violation errors during deletes.
250
+ - **Migration files must include rollback logic.** Every `up` function must have a corresponding `down` function. WHERE a migration is irreversible (data loss on rollback), THEN it must be explicitly marked as such with a comment explaining why.
251
+ - **No migrations that lock large tables without warning.** WHERE a migration performs an ALTER TABLE that acquires an ACCESS EXCLUSIVE lock on a table estimated to have more than 10,000 rows, THEN the skill must flag the lock risk and suggest a non-locking alternative.
252
+
253
+ ## Escalation
254
+
255
+ - **Production data at risk:** When a migration would delete or overwrite existing data (DROP COLUMN, column type change that truncates), report: "This migration will permanently delete data in column `X`. Provide a data backup confirmation or approve a non-destructive alternative (add new column, backfill, drop old) before proceeding."
256
+ - **ORM auto-detection fails:** When no ORM configuration file is found and no `--orm` flag is provided, report: "No ORM detected. Found raw `.sql` files in `migrations/`. Specify the ORM with `--orm` or confirm this is a raw SQL migration project."
257
+ - **Schema conflicts between team members:** When two pending migrations modify the same table, report: "Migrations `20240315_add_email` and `20240316_add_phone` both ALTER the `users` table. These must be reviewed together to avoid lock contention and ordering issues. Recommend merging into a single migration."
258
+ - **Database engine feature not available:** When the recommended approach uses a feature not available in the detected engine version (e.g., `CREATE INDEX CONCURRENTLY` is PostgreSQL-only), report: "The recommended non-locking index creation is not available in MySQL 5.7. Alternative: schedule the migration during a maintenance window or upgrade to MySQL 8.0+ which supports `ALGORITHM=INPLACE`."
@@ -0,0 +1,80 @@
1
+ name: harness-database
2
+ version: "1.0.0"
3
+ description: Schema design, migrations, ORM patterns, and migration safety checks
4
+ cognitive_mode: advisory-guide
5
+ triggers:
6
+ - manual
7
+ - on_new_feature
8
+ platforms:
9
+ - claude-code
10
+ - gemini-cli
11
+ tools:
12
+ - Bash
13
+ - Read
14
+ - Write
15
+ - Edit
16
+ - Glob
17
+ - Grep
18
+ cli:
19
+ command: harness skill run harness-database
20
+ args:
21
+ - name: path
22
+ description: Project root path
23
+ required: false
24
+ - name: orm
25
+ description: "ORM/query builder: prisma, drizzle, knex, typeorm, sequelize. Auto-detected when omitted."
26
+ required: false
27
+ - name: check-migrations
28
+ description: Run migration safety analysis on pending migrations
29
+ required: false
30
+ mcp:
31
+ tool: run_skill
32
+ input:
33
+ skill: harness-database
34
+ path: string
35
+ type: rigid
36
+ tier: 3
37
+ internal: false
38
+ keywords:
39
+ - database
40
+ - migration
41
+ - schema
42
+ - ORM
43
+ - prisma
44
+ - knex
45
+ - drizzle
46
+ - typeorm
47
+ - sequelize
48
+ - SQL
49
+ - DDL
50
+ - postgresql
51
+ - mysql
52
+ - sqlite
53
+ - mongodb
54
+ stack_signals:
55
+ - "prisma/schema.prisma"
56
+ - "drizzle.config.*"
57
+ - "knexfile.*"
58
+ - "migrations/"
59
+ - "*.sql"
60
+ - "typeorm.config.*"
61
+ - "sequelize.config.*"
62
+ - "src/**/models/**"
63
+ - "src/**/entities/**"
64
+ phases:
65
+ - name: detect
66
+ description: Identify database engine, ORM, existing schema, and migration state
67
+ required: true
68
+ - name: analyze
69
+ description: Evaluate schema design, indexing, relationships, and normalization
70
+ required: true
71
+ - name: advise
72
+ description: Produce schema changes, migration scripts, and ORM pattern recommendations
73
+ required: true
74
+ - name: validate
75
+ description: Verify migration safety, backward compatibility, and data integrity
76
+ required: true
77
+ state:
78
+ persistent: false
79
+ files: []
80
+ depends_on: []
@@ -27,6 +27,7 @@ mcp:
27
27
  skill: harness-debugging
28
28
  path: string
29
29
  type: rigid
30
+ tier: 1
30
31
  phases:
31
32
  - name: investigate
32
33
  description: Entropy analysis and root cause search
@@ -25,6 +25,7 @@ mcp:
25
25
  skill: harness-dependency-health
26
26
  path: string
27
27
  type: rigid
28
+ tier: 2
28
29
  phases:
29
30
  - name: metrics
30
31
  description: Compute graph structural metrics
@@ -0,0 +1,255 @@
1
+ # Harness Deployment
2
+
3
+ > CI/CD pipeline analysis, deployment strategy design, and environment management. From commit to production with confidence.
4
+
5
+ ## When to Use
6
+
7
+ - When setting up or reviewing CI/CD pipelines for a new or existing project
8
+ - When evaluating deployment strategies (blue-green, canary, rolling) for a service
9
+ - When auditing environment separation and promotion workflows
10
+ - NOT for container image building or registry management (use harness-containerization)
11
+ - NOT for infrastructure provisioning (use harness-infrastructure-as-code)
12
+ - NOT for application performance under load (use harness-perf)
13
+
14
+ ## Process
15
+
16
+ ### Phase 1: DETECT -- Identify Pipeline and Environment Configuration
17
+
18
+ 1. **Scan for CI/CD configuration files.** Search the project root for pipeline definitions:
19
+ - `.github/workflows/*.yml` -- GitHub Actions
20
+ - `.gitlab-ci.yml` -- GitLab CI
21
+ - `Jenkinsfile` -- Jenkins
22
+ - `.circleci/config.yml` -- CircleCI
23
+ - `bitbucket-pipelines.yml` -- Bitbucket Pipelines
24
+ - `azure-pipelines.yml` -- Azure DevOps
25
+ - `deploy/`, `scripts/deploy*` -- custom deployment scripts
26
+
27
+ 2. **Identify deployment targets.** Parse pipeline files for deployment steps and extract:
28
+ - Target environments (dev, staging, production)
29
+ - Deployment mechanisms (kubectl apply, aws ecs update-service, serverless deploy, rsync)
30
+ - Cloud provider and region information
31
+ - Container registry references
32
+
33
+ 3. **Detect environment configuration.** Look for environment-specific config:
34
+ - `.env.production`, `.env.staging` files
35
+ - Environment variable injection in pipeline definitions
36
+ - Secret references (GitHub Secrets, GitLab CI variables, Vault paths)
37
+ - Feature flag provider configuration per environment
38
+
39
+ 4. **Map the deployment topology.** Build a summary of what gets deployed where:
40
+ - Service name, pipeline file, target environment, deployment mechanism
41
+ - Dependencies between services (deploy order constraints)
42
+ - Manual approval gates vs. automatic promotion
43
+
44
+ 5. **Present detection summary.** Output the discovered topology before proceeding:
45
+
46
+ ```
47
+ Deployment Topology:
48
+ Platform: GitHub Actions
49
+ Pipelines: 3 workflow files
50
+ Environments: dev, staging, production
51
+ Strategy: Rolling (detected from kubectl rolling-update)
52
+ Approval gates: production (manual)
53
+ ```
54
+
55
+ ---
56
+
57
+ ### Phase 2: ANALYZE -- Evaluate Pipeline Quality and Gaps
58
+
59
+ 1. **Check pipeline stage completeness.** A mature pipeline includes these stages. Flag any that are missing:
60
+ - Build and compile
61
+ - Unit tests
62
+ - Integration tests
63
+ - Security scan (SAST/DAST)
64
+ - Artifact packaging
65
+ - Deploy to staging
66
+ - Smoke tests post-deploy
67
+ - Deploy to production
68
+ - Post-deploy verification
69
+
70
+ 2. **Evaluate environment isolation.** Verify that environments are properly separated:
71
+ - Staging and production use different credentials
72
+ - Environment-specific variables are not shared across environments
73
+ - Database connections point to the correct environment
74
+ - No hardcoded production URLs in non-production configs
75
+
76
+ 3. **Check deployment safety mechanisms.** Verify the pipeline includes:
77
+ - Rollback procedures (automatic or documented manual)
78
+ - Health checks after deployment
79
+ - Timeout configuration on deployment steps
80
+ - Concurrency controls (prevent parallel deploys to the same environment)
81
+ - Branch protection rules that gate production deploys
82
+
83
+ 4. **Analyze pipeline performance.** Identify bottlenecks:
84
+ - Steps that could run in parallel but are sequential
85
+ - Missing caching (dependencies, build artifacts, Docker layers)
86
+ - Redundant steps across workflows
87
+ - Total pipeline duration from commit to production
88
+
89
+ 5. **Check secret hygiene in pipelines.** Verify:
90
+ - No secrets hardcoded in pipeline files
91
+ - Secrets are scoped to the minimum required environment
92
+ - Secret rotation is possible without pipeline changes
93
+ - OIDC or workload identity is used where available instead of long-lived credentials
94
+
95
+ ---
96
+
97
+ ### Phase 3: DESIGN -- Recommend Strategy Improvements
98
+
99
+ 1. **Recommend deployment strategy.** Based on the service characteristics:
100
+ - **Rolling** -- suitable for stateless services with backward-compatible changes
101
+ - **Blue-green** -- suitable when zero-downtime cutover is required and rollback must be instant
102
+ - **Canary** -- suitable for high-traffic services where gradual validation reduces blast radius
103
+ - **Recreate** -- suitable only for development environments or when downtime is acceptable
104
+
105
+ 2. **Design missing pipeline stages.** For each gap identified in Phase 2, provide:
106
+ - The stage definition in the project's CI/CD platform syntax
107
+ - Where it fits in the pipeline order
108
+ - What tools or services it requires
109
+ - Example configuration snippet
110
+
111
+ 3. **Recommend environment promotion workflow.** Design the path from commit to production:
112
+ - Automatic promotion from dev to staging after tests pass
113
+ - Manual approval gate before production (with notification to the team channel)
114
+ - Smoke test suite that runs post-deploy in each environment
115
+ - Rollback trigger conditions (error rate spike, health check failure)
116
+
117
+ 4. **Design rollback procedure.** Every deployment must have a documented rollback:
118
+ - For container deployments: revert to previous image tag
119
+ - For serverless: revert to previous function version
120
+ - For database migrations: backward-compatible migration strategy
121
+ - Maximum rollback time target (e.g., under 5 minutes)
122
+
123
+ 5. **Recommend monitoring integration.** Connect deployment events to observability:
124
+ - Deploy markers in APM tools (Datadog, New Relic, Grafana)
125
+ - Automated alerts on error rate increase after deploy
126
+ - Deployment frequency and lead time tracking
127
+
128
+ ---
129
+
130
+ ### Phase 4: VALIDATE -- Verify Pipeline Correctness
131
+
132
+ 1. **Lint pipeline configuration.** Run syntax validation:
133
+ - GitHub Actions: `actionlint` or YAML schema validation
134
+ - GitLab CI: `gitlab-ci-lint` API endpoint
135
+ - Jenkinsfile: Groovy syntax check
136
+ - General: YAML structure validation for all config files
137
+
138
+ 2. **Verify environment variable completeness.** For each environment:
139
+ - All required variables are defined
140
+ - No placeholder values remain (TODO, CHANGEME, xxx)
141
+ - Variables referenced in code exist in the pipeline configuration
142
+
143
+ 3. **Verify branch protection alignment.** Confirm that:
144
+ - Production deploy pipelines only trigger from protected branches
145
+ - Required status checks match the pipeline stages
146
+ - Force-push is disabled on deployment branches
147
+
148
+ 4. **Generate deployment readiness report.** Summarize findings:
149
+
150
+ ```
151
+ Deployment Readiness: [PASS/WARN/FAIL]
152
+
153
+ Pipeline stages: 7/9 present (missing: security scan, smoke tests)
154
+ Environment isolation: PASS
155
+ Rollback procedure: WARN (documented but not automated)
156
+ Secret hygiene: PASS
157
+ Pipeline performance: 12m avg (recommend parallelizing test stages)
158
+
159
+ Recommendations:
160
+ 1. Add SAST scan stage between build and deploy
161
+ 2. Add post-deploy smoke test stage
162
+ 3. Automate rollback on health check failure
163
+ ```
164
+
165
+ 5. **Present results.** Use `emit_interaction` to deliver the report and ask whether to proceed with implementing recommendations.
166
+
167
+ ---
168
+
169
+ ## Harness Integration
170
+
171
+ - **`harness skill run harness-deployment`** -- Primary invocation for deployment analysis.
172
+ - **`harness validate`** -- Run after any pipeline configuration changes to verify project health.
173
+ - **`harness check-deps`** -- Verify deployment script dependencies are available.
174
+ - **`emit_interaction`** -- Present deployment readiness report and gather decisions on strategy.
175
+
176
+ ## Success Criteria
177
+
178
+ - All CI/CD configuration files in the project are identified and cataloged
179
+ - Pipeline stage completeness is assessed against the standard checklist
180
+ - Environment isolation is verified with no cross-environment credential leakage
181
+ - A deployment strategy recommendation is provided with rationale
182
+ - Rollback procedures are documented or flagged as missing
183
+ - Pipeline lint passes without errors
184
+
185
+ ## Examples
186
+
187
+ ### Example: Node.js API with GitHub Actions
188
+
189
+ ```
190
+ Phase 1: DETECT
191
+ Found: .github/workflows/ci.yml, .github/workflows/deploy.yml
192
+ Environments: staging (auto), production (manual dispatch)
193
+ Strategy: Rolling (kubectl set image)
194
+ Registry: ghcr.io/org/api-server
195
+
196
+ Phase 2: ANALYZE
197
+ Missing stages: security scan, post-deploy smoke tests
198
+ Environment isolation: PASS
199
+ Secret hygiene: WARN -- AWS_ACCESS_KEY_ID used instead of OIDC
200
+ Pipeline duration: 18m (test and lint run sequentially)
201
+
202
+ Phase 3: DESIGN
203
+ Recommendation: Add trivy scan after Docker build
204
+ Recommendation: Switch to AWS OIDC for keyless authentication
205
+ Recommendation: Parallelize lint and test jobs (saves ~4m)
206
+ Recommendation: Add smoke test job after deploy-staging
207
+
208
+ Phase 4: VALIDATE
209
+ actionlint: PASS
210
+ Environment variables: PASS
211
+ Branch protection: WARN -- main branch allows force-push
212
+ Result: WARN -- 3 recommendations, 1 security improvement needed
213
+ ```
214
+
215
+ ### Example: Python Service with GitLab CI and Canary Deploy
216
+
217
+ ```
218
+ Phase 1: DETECT
219
+ Found: .gitlab-ci.yml with 5 stages
220
+ Environments: dev, staging, production
221
+ Strategy: Canary (Istio VirtualService weight shifting)
222
+ Registry: registry.gitlab.com/org/service
223
+
224
+ Phase 2: ANALYZE
225
+ All 9 standard stages present
226
+ Environment isolation: PASS
227
+ Canary configuration: 5% -> 25% -> 75% -> 100% over 30 minutes
228
+ Rollback: Automatic on 5xx rate > 1%
229
+
230
+ Phase 3: DESIGN
231
+ Current strategy is well-configured. Minor recommendations:
232
+ - Add canary duration metrics to Grafana dashboard
233
+ - Add deployment event annotation to Prometheus
234
+ - Consider adding a manual gate between 75% and 100%
235
+
236
+ Phase 4: VALIDATE
237
+ GitLab CI lint: PASS
238
+ Environment variables: PASS
239
+ Branch protection: PASS
240
+ Result: PASS -- pipeline is production-ready
241
+ ```
242
+
243
+ ## Gates
244
+
245
+ - **No production deploy without staging validation.** If the pipeline allows direct-to-production deployment without a prior staging step, flag as a blocking issue.
246
+ - **No long-lived credentials in pipelines.** Hardcoded secrets or long-lived access keys in pipeline files are blocking findings. OIDC or short-lived tokens must be used.
247
+ - **No deploy without rollback.** Every deployment target must have a documented or automated rollback mechanism. Missing rollback is a blocking warning.
248
+ - **No skipping pipeline lint.** Pipeline configuration must pass syntax validation before recommendations are made.
249
+
250
+ ## Escalation
251
+
252
+ - **When the CI/CD platform is unsupported:** Report which platform was detected and that analysis is limited to general best practices. Recommend the user provide platform-specific documentation for deeper analysis.
253
+ - **When secrets are found hardcoded in pipeline files:** Immediately flag as a critical finding. Do not proceed with strategy recommendations until secrets are remediated. Recommend rotating the exposed credentials.
254
+ - **When multiple deployment strategies are mixed across environments:** This is valid (e.g., rolling for staging, canary for production). Analyze each independently and verify the promotion workflow handles the strategy transition.
255
+ - **When pipeline configuration is generated by a tool (Terraform, Pulumi):** Analyze the generated output but note that fixes must be applied to the generator configuration, not the output files.
@@ -0,0 +1,77 @@
1
+ name: harness-deployment
2
+ version: "1.0.0"
3
+ description: CI/CD pipelines, blue-green, canary, and environment management
4
+ cognitive_mode: advisory-guide
5
+ tier: 3
6
+ internal: false
7
+ keywords:
8
+ - deployment
9
+ - CI/CD
10
+ - pipeline
11
+ - GitHub Actions
12
+ - GitLab CI
13
+ - Jenkins
14
+ - blue-green
15
+ - canary
16
+ - rolling
17
+ - environment
18
+ - staging
19
+ - production
20
+ - CD
21
+ stack_signals:
22
+ - ".github/workflows/"
23
+ - ".gitlab-ci.yml"
24
+ - "Jenkinsfile"
25
+ - "deploy/"
26
+ - "infrastructure/"
27
+ - ".circleci/"
28
+ - "bitbucket-pipelines.yml"
29
+ triggers:
30
+ - manual
31
+ - on_new_feature
32
+ platforms:
33
+ - claude-code
34
+ - gemini-cli
35
+ tools:
36
+ - Bash
37
+ - Read
38
+ - Write
39
+ - Edit
40
+ - Glob
41
+ - Grep
42
+ - emit_interaction
43
+ cli:
44
+ command: harness skill run harness-deployment
45
+ args:
46
+ - name: path
47
+ description: Project root path
48
+ required: false
49
+ - name: strategy
50
+ description: Deployment strategy to evaluate (blue-green, canary, rolling)
51
+ required: false
52
+ - name: platform
53
+ description: Target CI/CD platform (github-actions, gitlab-ci, jenkins)
54
+ required: false
55
+ mcp:
56
+ tool: run_skill
57
+ input:
58
+ skill: harness-deployment
59
+ path: string
60
+ type: rigid
61
+ phases:
62
+ - name: detect
63
+ description: Identify existing CI/CD configuration and deployment targets
64
+ required: true
65
+ - name: analyze
66
+ description: Evaluate pipeline structure, stages, and environment separation
67
+ required: true
68
+ - name: design
69
+ description: Recommend deployment strategy improvements and missing stages
70
+ required: true
71
+ - name: validate
72
+ description: Verify pipeline correctness and environment isolation
73
+ required: true
74
+ state:
75
+ persistent: false
76
+ files: []
77
+ depends_on: []