@harness-engineering/cli 1.13.0 → 1.14.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 (367) 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.md +39 -0
  15. package/dist/agents/skills/claude-code/harness-brainstorming/skill.yaml +1 -0
  16. package/dist/agents/skills/claude-code/harness-caching/SKILL.md +309 -0
  17. package/dist/agents/skills/claude-code/harness-caching/skill.yaml +73 -0
  18. package/dist/agents/skills/claude-code/harness-chaos/SKILL.md +295 -0
  19. package/dist/agents/skills/claude-code/harness-chaos/skill.yaml +72 -0
  20. package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +44 -0
  21. package/dist/agents/skills/claude-code/harness-code-review/skill.yaml +1 -0
  22. package/dist/agents/skills/claude-code/harness-codebase-cleanup/skill.yaml +1 -0
  23. package/dist/agents/skills/claude-code/harness-compliance/SKILL.md +303 -0
  24. package/dist/agents/skills/claude-code/harness-compliance/skill.yaml +78 -0
  25. package/dist/agents/skills/claude-code/harness-containerization/SKILL.md +284 -0
  26. package/dist/agents/skills/claude-code/harness-containerization/skill.yaml +80 -0
  27. package/dist/agents/skills/claude-code/harness-data-pipeline/SKILL.md +274 -0
  28. package/dist/agents/skills/claude-code/harness-data-pipeline/skill.yaml +81 -0
  29. package/dist/agents/skills/claude-code/harness-data-validation/SKILL.md +343 -0
  30. package/dist/agents/skills/claude-code/harness-data-validation/skill.yaml +75 -0
  31. package/dist/agents/skills/claude-code/harness-database/SKILL.md +258 -0
  32. package/dist/agents/skills/claude-code/harness-database/skill.yaml +80 -0
  33. package/dist/agents/skills/claude-code/harness-debugging/skill.yaml +1 -0
  34. package/dist/agents/skills/claude-code/harness-dependency-health/skill.yaml +1 -0
  35. package/dist/agents/skills/claude-code/harness-deployment/SKILL.md +255 -0
  36. package/dist/agents/skills/claude-code/harness-deployment/skill.yaml +77 -0
  37. package/dist/agents/skills/claude-code/harness-design/skill.yaml +1 -0
  38. package/dist/agents/skills/claude-code/harness-design-mobile/skill.yaml +1 -0
  39. package/dist/agents/skills/claude-code/harness-design-system/skill.yaml +1 -0
  40. package/dist/agents/skills/claude-code/harness-design-web/skill.yaml +1 -0
  41. package/dist/agents/skills/claude-code/harness-diagnostics/skill.yaml +1 -0
  42. package/dist/agents/skills/claude-code/harness-docs-pipeline/skill.yaml +1 -0
  43. package/dist/agents/skills/claude-code/harness-dx/SKILL.md +276 -0
  44. package/dist/agents/skills/claude-code/harness-dx/skill.yaml +76 -0
  45. package/dist/agents/skills/claude-code/harness-e2e/SKILL.md +245 -0
  46. package/dist/agents/skills/claude-code/harness-e2e/skill.yaml +78 -0
  47. package/dist/agents/skills/claude-code/harness-event-driven/SKILL.md +280 -0
  48. package/dist/agents/skills/claude-code/harness-event-driven/skill.yaml +77 -0
  49. package/dist/agents/skills/claude-code/harness-execution/SKILL.md +44 -0
  50. package/dist/agents/skills/claude-code/harness-execution/skill.yaml +1 -0
  51. package/dist/agents/skills/claude-code/harness-feature-flags/SKILL.md +287 -0
  52. package/dist/agents/skills/claude-code/harness-feature-flags/skill.yaml +74 -0
  53. package/dist/agents/skills/claude-code/harness-git-workflow/skill.yaml +1 -0
  54. package/dist/agents/skills/claude-code/harness-hotspot-detector/skill.yaml +1 -0
  55. package/dist/agents/skills/claude-code/harness-i18n/skill.yaml +1 -0
  56. package/dist/agents/skills/claude-code/harness-i18n-process/skill.yaml +1 -0
  57. package/dist/agents/skills/claude-code/harness-i18n-workflow/skill.yaml +1 -0
  58. package/dist/agents/skills/claude-code/harness-impact-analysis/skill.yaml +1 -0
  59. package/dist/agents/skills/claude-code/harness-incident-response/SKILL.md +223 -0
  60. package/dist/agents/skills/claude-code/harness-incident-response/skill.yaml +78 -0
  61. package/dist/agents/skills/claude-code/harness-infrastructure-as-code/SKILL.md +279 -0
  62. package/dist/agents/skills/claude-code/harness-infrastructure-as-code/skill.yaml +80 -0
  63. package/dist/agents/skills/claude-code/harness-integration-test/SKILL.md +271 -0
  64. package/dist/agents/skills/claude-code/harness-integration-test/skill.yaml +73 -0
  65. package/dist/agents/skills/claude-code/harness-integrity/skill.yaml +1 -0
  66. package/dist/agents/skills/claude-code/harness-knowledge-mapper/skill.yaml +1 -0
  67. package/dist/agents/skills/claude-code/harness-load-testing/SKILL.md +274 -0
  68. package/dist/agents/skills/claude-code/harness-load-testing/skill.yaml +79 -0
  69. package/dist/agents/skills/claude-code/harness-ml-ops/SKILL.md +341 -0
  70. package/dist/agents/skills/claude-code/harness-ml-ops/skill.yaml +79 -0
  71. package/dist/agents/skills/claude-code/harness-mobile-patterns/SKILL.md +326 -0
  72. package/dist/agents/skills/claude-code/harness-mobile-patterns/skill.yaml +82 -0
  73. package/dist/agents/skills/claude-code/harness-mutation-test/SKILL.md +251 -0
  74. package/dist/agents/skills/claude-code/harness-mutation-test/skill.yaml +70 -0
  75. package/dist/agents/skills/claude-code/harness-observability/SKILL.md +283 -0
  76. package/dist/agents/skills/claude-code/harness-observability/skill.yaml +78 -0
  77. package/dist/agents/skills/claude-code/harness-onboarding/skill.yaml +1 -0
  78. package/dist/agents/skills/claude-code/harness-parallel-agents/skill.yaml +1 -0
  79. package/dist/agents/skills/claude-code/harness-perf/skill.yaml +1 -0
  80. package/dist/agents/skills/claude-code/harness-perf-tdd/skill.yaml +1 -0
  81. package/dist/agents/skills/claude-code/harness-planning/SKILL.md +39 -0
  82. package/dist/agents/skills/claude-code/harness-planning/skill.yaml +1 -0
  83. package/dist/agents/skills/claude-code/harness-pre-commit-review/skill.yaml +1 -0
  84. package/dist/agents/skills/claude-code/harness-product-spec/SKILL.md +285 -0
  85. package/dist/agents/skills/claude-code/harness-product-spec/skill.yaml +72 -0
  86. package/dist/agents/skills/claude-code/harness-property-test/SKILL.md +281 -0
  87. package/dist/agents/skills/claude-code/harness-property-test/skill.yaml +71 -0
  88. package/dist/agents/skills/claude-code/harness-refactoring/skill.yaml +1 -0
  89. package/dist/agents/skills/claude-code/harness-release-readiness/SKILL.md +3 -3
  90. package/dist/agents/skills/claude-code/harness-release-readiness/skill.yaml +1 -0
  91. package/dist/agents/skills/claude-code/harness-resilience/SKILL.md +255 -0
  92. package/dist/agents/skills/claude-code/harness-resilience/skill.yaml +76 -0
  93. package/dist/agents/skills/claude-code/harness-roadmap/skill.yaml +1 -0
  94. package/dist/agents/skills/claude-code/harness-secrets/SKILL.md +293 -0
  95. package/dist/agents/skills/claude-code/harness-secrets/skill.yaml +76 -0
  96. package/dist/agents/skills/claude-code/harness-security-review/skill.yaml +1 -0
  97. package/dist/agents/skills/claude-code/harness-security-scan/skill.yaml +1 -0
  98. package/dist/agents/skills/claude-code/harness-skill-authoring/skill.yaml +1 -0
  99. package/dist/agents/skills/claude-code/harness-soundness-review/skill.yaml +1 -0
  100. package/dist/agents/skills/claude-code/harness-sql-review/SKILL.md +315 -0
  101. package/dist/agents/skills/claude-code/harness-sql-review/skill.yaml +74 -0
  102. package/dist/agents/skills/claude-code/harness-state-management/skill.yaml +1 -0
  103. package/dist/agents/skills/claude-code/harness-tdd/skill.yaml +1 -0
  104. package/dist/agents/skills/claude-code/harness-test-advisor/skill.yaml +1 -0
  105. package/dist/agents/skills/claude-code/harness-test-data/SKILL.md +268 -0
  106. package/dist/agents/skills/claude-code/harness-test-data/skill.yaml +74 -0
  107. package/dist/agents/skills/claude-code/harness-ux-copy/SKILL.md +271 -0
  108. package/dist/agents/skills/claude-code/harness-ux-copy/skill.yaml +77 -0
  109. package/dist/agents/skills/claude-code/harness-verification/SKILL.md +35 -0
  110. package/dist/agents/skills/claude-code/harness-verification/skill.yaml +1 -0
  111. package/dist/agents/skills/claude-code/harness-verify/skill.yaml +1 -0
  112. package/dist/agents/skills/claude-code/harness-visual-regression/SKILL.md +257 -0
  113. package/dist/agents/skills/claude-code/harness-visual-regression/skill.yaml +74 -0
  114. package/dist/agents/skills/claude-code/initialize-harness-project/SKILL.md +11 -3
  115. package/dist/agents/skills/claude-code/initialize-harness-project/skill.yaml +1 -0
  116. package/dist/agents/skills/claude-code/validate-context-engineering/skill.yaml +1 -0
  117. package/dist/agents/skills/gemini-cli/add-harness-component/skill.yaml +1 -0
  118. package/dist/agents/skills/gemini-cli/align-documentation/skill.yaml +1 -0
  119. package/dist/agents/skills/gemini-cli/check-mechanical-constraints/skill.yaml +1 -0
  120. package/dist/agents/skills/gemini-cli/cleanup-dead-code/skill.yaml +1 -0
  121. package/dist/agents/skills/gemini-cli/detect-doc-drift/skill.yaml +1 -0
  122. package/dist/agents/skills/gemini-cli/enforce-architecture/skill.yaml +1 -0
  123. package/dist/agents/skills/gemini-cli/harness-accessibility/skill.yaml +1 -0
  124. package/dist/agents/skills/gemini-cli/harness-api-design/SKILL.md +304 -0
  125. package/dist/agents/skills/gemini-cli/harness-api-design/skill.yaml +74 -0
  126. package/dist/agents/skills/gemini-cli/harness-architecture-advisor/skill.yaml +1 -0
  127. package/dist/agents/skills/gemini-cli/harness-auth/SKILL.md +279 -0
  128. package/dist/agents/skills/gemini-cli/harness-auth/skill.yaml +81 -0
  129. package/dist/agents/skills/gemini-cli/harness-autopilot/skill.yaml +1 -0
  130. package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +39 -0
  131. package/dist/agents/skills/gemini-cli/harness-brainstorming/skill.yaml +1 -0
  132. package/dist/agents/skills/gemini-cli/harness-caching/SKILL.md +309 -0
  133. package/dist/agents/skills/gemini-cli/harness-caching/skill.yaml +73 -0
  134. package/dist/agents/skills/gemini-cli/harness-chaos/SKILL.md +295 -0
  135. package/dist/agents/skills/gemini-cli/harness-chaos/skill.yaml +72 -0
  136. package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +44 -0
  137. package/dist/agents/skills/gemini-cli/harness-code-review/skill.yaml +1 -0
  138. package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/skill.yaml +1 -0
  139. package/dist/agents/skills/gemini-cli/harness-compliance/SKILL.md +303 -0
  140. package/dist/agents/skills/gemini-cli/harness-compliance/skill.yaml +78 -0
  141. package/dist/agents/skills/gemini-cli/harness-containerization/SKILL.md +284 -0
  142. package/dist/agents/skills/gemini-cli/harness-containerization/skill.yaml +80 -0
  143. package/dist/agents/skills/gemini-cli/harness-data-pipeline/SKILL.md +274 -0
  144. package/dist/agents/skills/gemini-cli/harness-data-pipeline/skill.yaml +81 -0
  145. package/dist/agents/skills/gemini-cli/harness-data-validation/SKILL.md +343 -0
  146. package/dist/agents/skills/gemini-cli/harness-data-validation/skill.yaml +75 -0
  147. package/dist/agents/skills/gemini-cli/harness-database/SKILL.md +258 -0
  148. package/dist/agents/skills/gemini-cli/harness-database/skill.yaml +80 -0
  149. package/dist/agents/skills/gemini-cli/harness-debugging/skill.yaml +1 -0
  150. package/dist/agents/skills/gemini-cli/harness-dependency-health/skill.yaml +1 -0
  151. package/dist/agents/skills/gemini-cli/harness-deployment/SKILL.md +255 -0
  152. package/dist/agents/skills/gemini-cli/harness-deployment/skill.yaml +77 -0
  153. package/dist/agents/skills/gemini-cli/harness-design/skill.yaml +1 -0
  154. package/dist/agents/skills/gemini-cli/harness-design-mobile/skill.yaml +1 -0
  155. package/dist/agents/skills/gemini-cli/harness-design-system/skill.yaml +1 -0
  156. package/dist/agents/skills/gemini-cli/harness-design-web/skill.yaml +1 -0
  157. package/dist/agents/skills/gemini-cli/harness-diagnostics/skill.yaml +1 -0
  158. package/dist/agents/skills/gemini-cli/harness-docs-pipeline/skill.yaml +1 -0
  159. package/dist/agents/skills/gemini-cli/harness-dx/SKILL.md +276 -0
  160. package/dist/agents/skills/gemini-cli/harness-dx/skill.yaml +76 -0
  161. package/dist/agents/skills/gemini-cli/harness-e2e/SKILL.md +245 -0
  162. package/dist/agents/skills/gemini-cli/harness-e2e/skill.yaml +78 -0
  163. package/dist/agents/skills/gemini-cli/harness-event-driven/SKILL.md +280 -0
  164. package/dist/agents/skills/gemini-cli/harness-event-driven/skill.yaml +77 -0
  165. package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +44 -0
  166. package/dist/agents/skills/gemini-cli/harness-execution/skill.yaml +1 -0
  167. package/dist/agents/skills/gemini-cli/harness-feature-flags/SKILL.md +287 -0
  168. package/dist/agents/skills/gemini-cli/harness-feature-flags/skill.yaml +74 -0
  169. package/dist/agents/skills/gemini-cli/harness-git-workflow/skill.yaml +1 -0
  170. package/dist/agents/skills/gemini-cli/harness-hotspot-detector/skill.yaml +1 -0
  171. package/dist/agents/skills/gemini-cli/harness-i18n/skill.yaml +1 -0
  172. package/dist/agents/skills/gemini-cli/harness-i18n-process/skill.yaml +1 -0
  173. package/dist/agents/skills/gemini-cli/harness-i18n-workflow/skill.yaml +1 -0
  174. package/dist/agents/skills/gemini-cli/harness-impact-analysis/skill.yaml +1 -0
  175. package/dist/agents/skills/gemini-cli/harness-incident-response/SKILL.md +223 -0
  176. package/dist/agents/skills/gemini-cli/harness-incident-response/skill.yaml +78 -0
  177. package/dist/agents/skills/gemini-cli/harness-infrastructure-as-code/SKILL.md +279 -0
  178. package/dist/agents/skills/gemini-cli/harness-infrastructure-as-code/skill.yaml +80 -0
  179. package/dist/agents/skills/gemini-cli/harness-integration-test/SKILL.md +271 -0
  180. package/dist/agents/skills/gemini-cli/harness-integration-test/skill.yaml +73 -0
  181. package/dist/agents/skills/gemini-cli/harness-integrity/skill.yaml +1 -0
  182. package/dist/agents/skills/gemini-cli/harness-knowledge-mapper/skill.yaml +1 -0
  183. package/dist/agents/skills/gemini-cli/harness-load-testing/SKILL.md +274 -0
  184. package/dist/agents/skills/gemini-cli/harness-load-testing/skill.yaml +79 -0
  185. package/dist/agents/skills/gemini-cli/harness-ml-ops/SKILL.md +341 -0
  186. package/dist/agents/skills/gemini-cli/harness-ml-ops/skill.yaml +79 -0
  187. package/dist/agents/skills/gemini-cli/harness-mobile-patterns/SKILL.md +326 -0
  188. package/dist/agents/skills/gemini-cli/harness-mobile-patterns/skill.yaml +82 -0
  189. package/dist/agents/skills/gemini-cli/harness-mutation-test/SKILL.md +251 -0
  190. package/dist/agents/skills/gemini-cli/harness-mutation-test/skill.yaml +70 -0
  191. package/dist/agents/skills/gemini-cli/harness-observability/SKILL.md +283 -0
  192. package/dist/agents/skills/gemini-cli/harness-observability/skill.yaml +78 -0
  193. package/dist/agents/skills/gemini-cli/harness-onboarding/skill.yaml +1 -0
  194. package/dist/agents/skills/gemini-cli/harness-parallel-agents/skill.yaml +1 -0
  195. package/dist/agents/skills/gemini-cli/harness-perf/skill.yaml +1 -0
  196. package/dist/agents/skills/gemini-cli/harness-perf-tdd/skill.yaml +1 -0
  197. package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +39 -0
  198. package/dist/agents/skills/gemini-cli/harness-planning/skill.yaml +1 -0
  199. package/dist/agents/skills/gemini-cli/harness-pre-commit-review/skill.yaml +1 -0
  200. package/dist/agents/skills/gemini-cli/harness-product-spec/SKILL.md +285 -0
  201. package/dist/agents/skills/gemini-cli/harness-product-spec/skill.yaml +72 -0
  202. package/dist/agents/skills/gemini-cli/harness-property-test/SKILL.md +281 -0
  203. package/dist/agents/skills/gemini-cli/harness-property-test/skill.yaml +71 -0
  204. package/dist/agents/skills/gemini-cli/harness-refactoring/skill.yaml +1 -0
  205. package/dist/agents/skills/gemini-cli/harness-release-readiness/SKILL.md +3 -3
  206. package/dist/agents/skills/gemini-cli/harness-release-readiness/skill.yaml +1 -0
  207. package/dist/agents/skills/gemini-cli/harness-resilience/SKILL.md +255 -0
  208. package/dist/agents/skills/gemini-cli/harness-resilience/skill.yaml +76 -0
  209. package/dist/agents/skills/gemini-cli/harness-roadmap/skill.yaml +1 -0
  210. package/dist/agents/skills/gemini-cli/harness-secrets/SKILL.md +293 -0
  211. package/dist/agents/skills/gemini-cli/harness-secrets/skill.yaml +76 -0
  212. package/dist/agents/skills/gemini-cli/harness-security-review/SKILL.md +240 -0
  213. package/dist/agents/skills/gemini-cli/harness-security-review/skill.yaml +1 -0
  214. package/dist/agents/skills/gemini-cli/harness-security-scan/skill.yaml +1 -0
  215. package/dist/agents/skills/gemini-cli/harness-skill-authoring/skill.yaml +1 -0
  216. package/dist/agents/skills/gemini-cli/harness-soundness-review/skill.yaml +1 -0
  217. package/dist/agents/skills/gemini-cli/harness-sql-review/SKILL.md +315 -0
  218. package/dist/agents/skills/gemini-cli/harness-sql-review/skill.yaml +74 -0
  219. package/dist/agents/skills/gemini-cli/harness-state-management/skill.yaml +1 -0
  220. package/dist/agents/skills/gemini-cli/harness-tdd/skill.yaml +1 -0
  221. package/dist/agents/skills/gemini-cli/harness-test-advisor/skill.yaml +1 -0
  222. package/dist/agents/skills/gemini-cli/harness-test-data/SKILL.md +268 -0
  223. package/dist/agents/skills/gemini-cli/harness-test-data/skill.yaml +74 -0
  224. package/dist/agents/skills/gemini-cli/harness-ux-copy/SKILL.md +271 -0
  225. package/dist/agents/skills/gemini-cli/harness-ux-copy/skill.yaml +77 -0
  226. package/dist/agents/skills/gemini-cli/harness-verification/SKILL.md +35 -0
  227. package/dist/agents/skills/gemini-cli/harness-verification/skill.yaml +1 -0
  228. package/dist/agents/skills/gemini-cli/harness-verify/skill.yaml +1 -0
  229. package/dist/agents/skills/gemini-cli/harness-visual-regression/SKILL.md +257 -0
  230. package/dist/agents/skills/gemini-cli/harness-visual-regression/skill.yaml +74 -0
  231. package/dist/agents/skills/gemini-cli/initialize-harness-project/SKILL.md +11 -3
  232. package/dist/agents/skills/gemini-cli/initialize-harness-project/skill.yaml +1 -0
  233. package/dist/agents/skills/gemini-cli/validate-context-engineering/skill.yaml +1 -0
  234. package/dist/agents-md-YTYQDA3P.js +8 -0
  235. package/dist/{architecture-ESOOE26S.js → architecture-JQZYM4US.js} +4 -4
  236. package/dist/bin/harness-mcp.js +16 -15
  237. package/dist/bin/harness.js +31 -30
  238. package/dist/{check-phase-gate-S2MZKLFQ.js → check-phase-gate-L3RADYWO.js} +4 -3
  239. package/dist/{chunk-WPPDRIJL.js → chunk-3C2MLBPJ.js} +4 -4
  240. package/dist/chunk-6KTUUFRN.js +217 -0
  241. package/dist/{chunk-MI5XJQDY.js → chunk-7IP4JIFL.js} +24 -10
  242. package/dist/{chunk-C2ERUR3L.js → chunk-7MJAPE3Z.js} +165 -49
  243. package/dist/{chunk-KELT6K6M.js → chunk-ABQHQ6I5.js} +1861 -1418
  244. package/dist/{chunk-L2KLU56K.js → chunk-AOZRDOIP.js} +2 -2
  245. package/dist/{chunk-QPEH2QPG.js → chunk-DBSOCI3G.js} +53 -54
  246. package/dist/{chunk-MHBMTPW7.js → chunk-ERS5EVUZ.js} +9 -0
  247. package/dist/{chunk-JSTQ3AWB.js → chunk-FIAPHX37.js} +1 -1
  248. package/dist/{chunk-2YPZKGAG.js → chunk-FTMXDOR6.js} +1 -1
  249. package/dist/{chunk-72GHBOL2.js → chunk-GZKSBLQL.js} +1 -1
  250. package/dist/{chunk-K6XAPGML.js → chunk-H7Y5CKTM.js} +1 -1
  251. package/dist/{chunk-HD4IBGLA.js → chunk-N5G5QMS3.js} +24 -1
  252. package/dist/{chunk-LD3DKUK5.js → chunk-NLVUVUGD.js} +1 -1
  253. package/dist/{chunk-3KOLLWWE.js → chunk-O5OJVPL6.js} +26 -211
  254. package/dist/{chunk-NKDM3FMH.js → chunk-OD3S2NHN.js} +1 -1
  255. package/dist/{chunk-5VY23YK3.js → chunk-OSXBPAMK.js} +2 -2
  256. package/dist/{chunk-MACVXDZK.js → chunk-OXLLOSSR.js} +45 -47
  257. package/dist/{chunk-GNGELAXY.js → chunk-RCWZBSK5.js} +2 -2
  258. package/dist/{chunk-PSNN4LWX.js → chunk-S2FXOWOR.js} +3 -3
  259. package/dist/{chunk-VUCPTQ6G.js → chunk-SD3SQOZ2.js} +1 -1
  260. package/dist/{chunk-7PZWR4LI.js → chunk-TPOTOBR7.js} +9 -9
  261. package/dist/{chunk-RZSUJBZZ.js → chunk-XKECDXJS.js} +452 -353
  262. package/dist/{chunk-VRFZWGMS.js → chunk-XYLGHKG6.js} +5 -1
  263. package/dist/{chunk-6N4R6FVX.js → chunk-YBJ262QL.js} +1 -1
  264. package/dist/{chunk-2VU4MFM3.js → chunk-YPYGXRDR.js} +7 -7
  265. package/dist/{chunk-Q6AB7W5Z.js → chunk-YQ6KC6TE.js} +1 -1
  266. package/dist/{chunk-7KQSUZVG.js → chunk-YZD2MRNQ.js} +1528 -1010
  267. package/dist/ci-workflow-EQZFVX3P.js +8 -0
  268. package/dist/{create-skill-WPXHSLX2.js → create-skill-XSWHMSM5.js} +2 -2
  269. package/dist/{dist-M6BQODWC.js → dist-B26DFXMP.js} +573 -480
  270. package/dist/{dist-L7LAAQAS.js → dist-DZ63LLUD.js} +1 -1
  271. package/dist/{dist-WF4C7A4A.js → dist-HWXF2C3R.js} +18 -2
  272. package/dist/{dist-D4RYGUZE.js → dist-USY2C5JL.js} +3 -1
  273. package/dist/{docs-BPYCN2DR.js → docs-7ECGYMAV.js} +5 -3
  274. package/dist/engine-EG4EH4IX.js +8 -0
  275. package/dist/{entropy-4VDVV5CR.js → entropy-5USWKLVS.js} +3 -3
  276. package/dist/{feedback-63QB5RCA.js → feedback-UTBXZZHF.js} +1 -1
  277. package/dist/{generate-agent-definitions-QABOJG56.js → generate-agent-definitions-3PM5EU7V.js} +5 -5
  278. package/dist/{glob-helper-5OHBUQAI.js → glob-helper-R5FXNUPS.js} +1 -1
  279. package/dist/{graph-loader-KO4GJ5N2.js → graph-loader-2M2HXDQI.js} +1 -1
  280. package/dist/index.d.ts +183 -17
  281. package/dist/index.js +32 -30
  282. package/dist/loader-ZPALXIVR.js +10 -0
  283. package/dist/mcp-362EZHF4.js +35 -0
  284. package/dist/{performance-26BH47O4.js → performance-OQAFMJUD.js} +3 -3
  285. package/dist/{review-pipeline-GHR3WFBI.js → review-pipeline-C4GCFVGP.js} +1 -1
  286. package/dist/runtime-7YLVK453.js +9 -0
  287. package/dist/{security-UQFUZXEN.js → security-PZOX7AQS.js} +1 -1
  288. package/dist/skill-executor-XZLYZYAK.js +8 -0
  289. package/dist/templates/axum/Cargo.toml.hbs +8 -0
  290. package/dist/templates/axum/src/main.rs +12 -0
  291. package/dist/templates/axum/template.json +16 -0
  292. package/dist/templates/django/manage.py.hbs +19 -0
  293. package/dist/templates/django/requirements.txt.hbs +1 -0
  294. package/dist/templates/django/src/settings.py.hbs +44 -0
  295. package/dist/templates/django/src/urls.py +6 -0
  296. package/dist/templates/django/src/wsgi.py.hbs +9 -0
  297. package/dist/templates/django/template.json +21 -0
  298. package/dist/templates/express/package.json.hbs +15 -0
  299. package/dist/templates/express/src/app.ts +12 -0
  300. package/dist/templates/express/src/lib/.gitkeep +0 -0
  301. package/dist/templates/express/template.json +16 -0
  302. package/dist/templates/fastapi/requirements.txt.hbs +2 -0
  303. package/dist/templates/fastapi/src/main.py +8 -0
  304. package/dist/templates/fastapi/template.json +20 -0
  305. package/dist/templates/gin/go.mod.hbs +5 -0
  306. package/dist/templates/gin/main.go +15 -0
  307. package/dist/templates/gin/template.json +19 -0
  308. package/dist/templates/go-base/.golangci.yml +16 -0
  309. package/dist/templates/go-base/AGENTS.md.hbs +35 -0
  310. package/dist/templates/go-base/go.mod.hbs +3 -0
  311. package/dist/templates/go-base/harness.config.json.hbs +17 -0
  312. package/dist/templates/go-base/main.go +7 -0
  313. package/dist/templates/go-base/template.json +14 -0
  314. package/dist/templates/java-base/AGENTS.md.hbs +35 -0
  315. package/dist/templates/java-base/checkstyle.xml +20 -0
  316. package/dist/templates/java-base/harness.config.json.hbs +16 -0
  317. package/dist/templates/java-base/pom.xml.hbs +39 -0
  318. package/dist/templates/java-base/src/main/java/App.java.hbs +5 -0
  319. package/dist/templates/java-base/template.json +13 -0
  320. package/dist/templates/nestjs/nest-cli.json +5 -0
  321. package/dist/templates/nestjs/package.json.hbs +18 -0
  322. package/dist/templates/nestjs/src/app.module.ts +8 -0
  323. package/dist/templates/nestjs/src/lib/.gitkeep +0 -0
  324. package/dist/templates/nestjs/src/main.ts +11 -0
  325. package/dist/templates/nestjs/template.json +16 -0
  326. package/dist/templates/nextjs/template.json +15 -1
  327. package/dist/templates/python-base/.python-version +1 -0
  328. package/dist/templates/python-base/AGENTS.md.hbs +32 -0
  329. package/dist/templates/python-base/harness.config.json.hbs +16 -0
  330. package/dist/templates/python-base/pyproject.toml.hbs +18 -0
  331. package/dist/templates/python-base/ruff.toml +5 -0
  332. package/dist/templates/python-base/src/__init__.py +0 -0
  333. package/dist/templates/python-base/template.json +13 -0
  334. package/dist/templates/react-vite/index.html +12 -0
  335. package/dist/templates/react-vite/package.json.hbs +18 -0
  336. package/dist/templates/react-vite/src/App.tsx +7 -0
  337. package/dist/templates/react-vite/src/lib/.gitkeep +0 -0
  338. package/dist/templates/react-vite/src/main.tsx +9 -0
  339. package/dist/templates/react-vite/template.json +19 -0
  340. package/dist/templates/react-vite/vite.config.ts +6 -0
  341. package/dist/templates/rust-base/AGENTS.md.hbs +35 -0
  342. package/dist/templates/rust-base/Cargo.toml.hbs +6 -0
  343. package/dist/templates/rust-base/clippy.toml +2 -0
  344. package/dist/templates/rust-base/harness.config.json.hbs +17 -0
  345. package/dist/templates/rust-base/src/main.rs +3 -0
  346. package/dist/templates/rust-base/template.json +14 -0
  347. package/dist/templates/spring-boot/pom.xml.hbs +50 -0
  348. package/dist/templates/spring-boot/src/main/java/Application.java.hbs +19 -0
  349. package/dist/templates/spring-boot/template.json +15 -0
  350. package/dist/templates/vue/index.html +12 -0
  351. package/dist/templates/vue/package.json.hbs +16 -0
  352. package/dist/templates/vue/src/App.vue +7 -0
  353. package/dist/templates/vue/src/lib/.gitkeep +0 -0
  354. package/dist/templates/vue/src/main.ts +4 -0
  355. package/dist/templates/vue/template.json +19 -0
  356. package/dist/templates/vue/vite.config.ts +6 -0
  357. package/dist/{validate-N7QJOKFZ.js → validate-FD3Z6VJD.js} +4 -4
  358. package/dist/validate-cross-check-WNJM6H2D.js +8 -0
  359. package/package.json +6 -6
  360. package/dist/agents-md-P2RHSUV7.js +0 -8
  361. package/dist/ci-workflow-4NYBUG6R.js +0 -8
  362. package/dist/engine-LXLIWQQ3.js +0 -8
  363. package/dist/loader-Z2IT7QX3.js +0 -10
  364. package/dist/mcp-KQHEL5IF.js +0 -34
  365. package/dist/runtime-PDWD7UIK.js +0 -9
  366. package/dist/skill-executor-RG45LUO5.js +0 -8
  367. package/dist/validate-cross-check-EDQ5QGTM.js +0 -8
@@ -0,0 +1,287 @@
1
+ # Harness Feature Flags
2
+
3
+ > Flag lifecycle management, A/B testing infrastructure, and gradual rollout design. Ship features safely with controlled exposure and clean retirement.
4
+
5
+ ## When to Use
6
+
7
+ - When designing feature flag architecture for a new project or feature
8
+ - When auditing existing flags for staleness, test coverage, or hygiene
9
+ - When planning gradual rollout or A/B testing strategies
10
+ - NOT for deployment pipeline configuration (use harness-deployment)
11
+ - NOT for environment variable management (use harness-secrets)
12
+ - NOT for application performance testing under flag variants (use harness-perf)
13
+
14
+ ## Process
15
+
16
+ ### Phase 1: DETECT -- Discover Flag Definitions and Usage
17
+
18
+ 1. **Identify flag provider.** Scan the project for feature flag infrastructure:
19
+ - **Third-party SDKs:** LaunchDarkly (`launchdarkly-node-server-sdk`), Unleash (`unleash-client`), Flagsmith (`flagsmith-nodejs`), Split (`@splitsoftware/splitio`)
20
+ - **Custom implementations:** Files matching `*feature-flag*`, `*toggle*`, `*flags*`
21
+ - **Configuration-based:** `flags.json`, `features.json`, `feature-flags.yaml`
22
+ - **Environment-based:** Feature flags controlled via environment variables (`FEATURE_*`, `FF_*`)
23
+
24
+ 2. **Catalog all flag definitions.** For each flag found, record:
25
+ - Flag name/key
26
+ - Flag type (boolean, multivariate, percentage rollout)
27
+ - Default value (what happens when the flag service is unreachable)
28
+ - Where it is defined (provider dashboard, config file, code)
29
+ - Creation date or first appearance in git history
30
+
31
+ 3. **Map flag usage in code.** For each flag, find all evaluation points:
32
+ - Source files that check the flag value
33
+ - Conditional branches gated by the flag
34
+ - Components that render differently based on flag state
35
+ - API endpoints with flag-dependent behavior
36
+ - Test files that exercise flag variants
37
+
38
+ 4. **Detect flag categories.** Classify each flag:
39
+ - **Release flag:** Gates a new feature for gradual rollout (temporary)
40
+ - **Experiment flag:** Controls A/B test variants (temporary)
41
+ - **Ops flag:** Circuit breaker or kill switch (permanent)
42
+ - **Permission flag:** Controls access to premium features (permanent)
43
+
44
+ 5. **Present detection summary:**
45
+
46
+ ```
47
+ Feature Flag Detection:
48
+ Provider: LaunchDarkly (SDK v7.x)
49
+ Flags defined: 23
50
+ Flags evaluated in code: 19 (4 defined but unused)
51
+ Categories: 12 release, 5 experiment, 4 ops, 2 permission
52
+ Stale candidates: 6 (release flags older than 90 days)
53
+ ```
54
+
55
+ ---
56
+
57
+ ### Phase 2: DESIGN -- Recommend Flag Architecture and Rollout Strategy
58
+
59
+ 1. **Evaluate flag naming convention.** Check for consistency:
60
+ - Recommended format: `{team}.{feature}.{variant}` (e.g., `payments.stripe-v2.enabled`)
61
+ - Flags should have descriptive names (not `flag_123` or `test_flag`)
62
+ - Naming should indicate category (prefix with `ops.` for operational flags)
63
+ - Temporary flags should include a target removal date in metadata
64
+
65
+ 2. **Design flag evaluation architecture.** Recommend patterns for:
66
+ - **Server-side evaluation:** Flags evaluated on the backend, consistent behavior
67
+ - **Client-side evaluation:** Flags evaluated in the browser/app, real-time updates
68
+ - **Edge evaluation:** Flags evaluated at CDN layer for zero-latency decisions
69
+ - **Default values:** Every flag must have a safe default (feature off) for provider outages
70
+
71
+ 3. **Design rollout strategy.** For release flags:
72
+ - **Percentage rollout:** Start at 1%, monitor metrics, increase to 5%, 25%, 50%, 100%
73
+ - **User segment targeting:** Internal users first, then beta users, then general availability
74
+ - **Geographic rollout:** Single region first, expand after validation
75
+ - **Time-based gates:** Enable during low-traffic periods for initial validation
76
+ - Define success criteria for each rollout stage (error rate, latency, conversion)
77
+
78
+ 4. **Design A/B testing infrastructure.** For experiment flags:
79
+ - Consistent user assignment (same user always sees same variant)
80
+ - Statistical significance calculation before declaring a winner
81
+ - Event tracking integration for measuring experiment outcomes
82
+ - Guardrail metrics that auto-disable experiments if health degrades
83
+ - Experiment duration limits (no indefinite experiments)
84
+
85
+ 5. **Design fallback behavior.** Ensure resilience:
86
+ - Provider SDK timeout configuration (fail fast, not block)
87
+ - Local cache for flag values (stale-while-revalidate)
88
+ - Default values that are safe (feature disabled, not enabled)
89
+ - Circuit breaker on flag evaluation errors
90
+ - Monitoring on flag evaluation latency and error rate
91
+
92
+ ---
93
+
94
+ ### Phase 3: VALIDATE -- Verify Flag Hygiene and Test Coverage
95
+
96
+ 1. **Check test coverage per flag.** For each flag, verify:
97
+ - Tests exist for both the flag-on and flag-off code paths
98
+ - Integration tests cover the default value behavior (provider down scenario)
99
+ - No tests depend on a specific flag value being set in production
100
+ - Test utilities exist for overriding flag values in test context
101
+
102
+ 2. **Validate flag consistency.** Check for common issues:
103
+ - Flags checked in code but not defined in the provider (will use defaults)
104
+ - Flags defined in the provider but never checked in code (dead flags)
105
+ - Same flag checked with different keys in different files (typos)
106
+ - Nested flag checks that create combinatorial complexity
107
+
108
+ 3. **Check for flag coupling.** Identify problematic patterns:
109
+ - Flags that depend on other flags (if A and B, then C)
110
+ - Flags that must be enabled in a specific order
111
+ - Flags that share state or side effects
112
+ - Recommend decoupling or consolidating dependent flags
113
+
114
+ 4. **Validate rollout configuration.** For active rollouts:
115
+ - Percentage values are within expected ranges
116
+ - Targeting rules are correctly configured
117
+ - Kill switch is functional (can disable the feature instantly)
118
+ - Rollback plan is documented
119
+
120
+ 5. **Generate validation report:**
121
+
122
+ ```
123
+ Flag Validation: [PASS/WARN/FAIL]
124
+
125
+ Test coverage: WARN (3 flags missing flag-off tests)
126
+ Consistency: PASS (all code references match definitions)
127
+ Coupling: WARN (2 flags have interdependencies)
128
+ Rollout config: PASS (active rollouts correctly configured)
129
+
130
+ Issues:
131
+ 1. payments.stripe-v2 -- no test for flag-off fallback path
132
+ 2. search.new-algorithm + search.reranking -- coupled flags
133
+ 3. checkout.express -- missing kill switch test
134
+ ```
135
+
136
+ ---
137
+
138
+ ### Phase 4: LIFECYCLE -- Audit Stale Flags and Plan Cleanup
139
+
140
+ 1. **Identify stale flags.** Flag candidates for removal:
141
+ - Release flags that have been at 100% for more than 30 days
142
+ - Experiment flags past their declared end date
143
+ - Flags with no evaluation in the last 90 days (from provider analytics)
144
+ - Flags whose feature has been fully adopted (no rollback expected)
145
+
146
+ 2. **Generate cleanup plan.** For each stale flag:
147
+ - List all code locations that reference the flag
148
+ - Identify which branch to keep (the flag-on path for graduated features)
149
+ - Estimate lines of code to remove (dead branch cleanup)
150
+ - Determine if any tests need updating after flag removal
151
+ - Assign a cleanup owner and deadline
152
+
153
+ 3. **Assess technical debt.** Calculate flag burden:
154
+ - Total active flags per service (recommend under 20)
155
+ - Ratio of temporary to permanent flags
156
+ - Average flag age for temporary flags
157
+ - Code complexity added by flag branching (conditional paths)
158
+ - Estimate of test matrix growth due to flags
159
+
160
+ 4. **Recommend lifecycle policies.** Design governance:
161
+ - Maximum lifetime for release flags (e.g., 90 days)
162
+ - Maximum lifetime for experiment flags (e.g., 30 days)
163
+ - Required metadata: owner, creation date, expiry date, cleanup ticket
164
+ - Automated alerting when flags exceed their lifetime
165
+ - Monthly flag review cadence with the team
166
+
167
+ 5. **Generate lifecycle report:**
168
+
169
+ ```
170
+ Flag Lifecycle Report:
171
+
172
+ Active flags: 23
173
+ Stale flags: 6 (candidates for removal)
174
+ Technical debt: ~340 lines of dead code across 6 stale flags
175
+
176
+ Cleanup plan:
177
+ 1. payments.old-checkout -- at 100% for 45 days, 4 files, ~80 LOC to remove
178
+ 2. search.v1-algorithm -- experiment ended 60 days ago, 2 files, ~40 LOC
179
+ 3. onboarding.legacy-flow -- at 100% for 90 days, 6 files, ~120 LOC
180
+ 4. notifications.email-v1 -- unused for 120 days, 3 files, ~50 LOC
181
+ 5. dashboard.old-charts -- at 100% for 35 days, 2 files, ~30 LOC
182
+ 6. auth.password-reset-v1 -- at 100% for 60 days, 1 file, ~20 LOC
183
+
184
+ Recommendations:
185
+ - Adopt 90-day maximum lifetime policy for release flags
186
+ - Add flag expiry dates to LaunchDarkly metadata
187
+ - Schedule monthly flag cleanup sprint
188
+ - Target: reduce active flag count from 23 to 17
189
+ ```
190
+
191
+ ---
192
+
193
+ ## Harness Integration
194
+
195
+ - **`harness skill run harness-feature-flags`** -- Primary invocation for flag analysis and lifecycle management.
196
+ - **`harness validate`** -- Run after flag cleanup to verify project health.
197
+ - **`harness check-deps`** -- Verify flag provider SDK dependencies are installed.
198
+ - **`emit_interaction`** -- Present lifecycle report and gather decisions on cleanup priorities.
199
+
200
+ ## Success Criteria
201
+
202
+ - All feature flags in the project are discovered and cataloged
203
+ - Flags are categorized by type (release, experiment, ops, permission)
204
+ - Stale flags are identified with specific cleanup plans
205
+ - Test coverage for both flag-on and flag-off paths is verified
206
+ - Rollout configuration is validated for active flags
207
+ - Lifecycle policies are recommended with enforcement mechanisms
208
+
209
+ ## Examples
210
+
211
+ ### Example: React SPA with LaunchDarkly
212
+
213
+ ```
214
+ Phase 1: DETECT
215
+ Provider: LaunchDarkly (React SDK v3.x)
216
+ Flags defined: 15 (in LaunchDarkly dashboard)
217
+ Flags in code: 13 (2 unused in dashboard)
218
+ Categories: 8 release, 3 experiment, 2 ops
219
+
220
+ Phase 2: DESIGN
221
+ Naming: WARN -- inconsistent (mix of camelCase and kebab-case)
222
+ Recommended convention: team.feature.variant (kebab-case)
223
+ Evaluation: Client-side (React SDK), 200ms init timeout
224
+ Default values: WARN -- 2 flags default to true (should default to false)
225
+ Rollout: checkout.express-pay at 25% (targeting premium users)
226
+
227
+ Phase 3: VALIDATE
228
+ Test coverage: WARN -- 4 flags missing useFlags mock in component tests
229
+ Consistency: PASS
230
+ Coupling: PASS (no interdependent flags)
231
+ Kill switch: PASS (all release flags can be instantly disabled)
232
+
233
+ Phase 4: LIFECYCLE
234
+ Stale: 3 flags at 100% for 30+ days
235
+ Cleanup estimate: 180 LOC across 8 files
236
+ Recommendation: Remove search.v2-results (at 100% for 65 days, 3 components)
237
+ Result: WARN -- 3 stale flags, 4 missing tests, 2 unsafe defaults
238
+ ```
239
+
240
+ ### Example: Spring Boot API with Custom Flag System
241
+
242
+ ```
243
+ Phase 1: DETECT
244
+ Provider: Custom implementation (FeatureFlagService.java)
245
+ Flag store: PostgreSQL table (feature_flags)
246
+ Flags defined: 28
247
+ Flags in code: 24 (4 in database but unreferenced)
248
+ Categories: 15 release, 6 experiment, 5 ops, 2 permission
249
+
250
+ Phase 2: DESIGN
251
+ Architecture: Server-side evaluation with 60s cache refresh
252
+ Concern: No SDK resilience -- database outage disables all flags
253
+ Recommend: Add in-memory cache with stale-while-revalidate pattern
254
+ Recommend: Add health check endpoint for flag service status
255
+ Rollout: Using percentage field in database -- no segment targeting
256
+ Recommend: Add user segment support for targeted rollouts
257
+
258
+ Phase 3: VALIDATE
259
+ Test coverage: WARN -- @FeatureFlag annotation used but no test helper
260
+ to toggle flags in test context (tests rely on database state)
261
+ Consistency: WARN -- 4 database entries have no code references
262
+ Coupling: FAIL -- 3 flags form a dependency chain
263
+ (billing.new-pricing requires billing.tax-calc-v2 requires billing.currency-v3)
264
+ Recommend: Consolidate into single billing.pricing-v3 flag
265
+
266
+ Phase 4: LIFECYCLE
267
+ Stale: 8 flags enabled for all users for 60+ days
268
+ Technical debt: ~520 LOC of dead code
269
+ Flag count: 28 (above recommended 20 per service)
270
+ Recommendation: Immediate cleanup sprint targeting 8 stale flags
271
+ Recommendation: Enforce 60-day lifetime policy going forward
272
+ Result: FAIL -- flag coupling detected, high stale flag count
273
+ ```
274
+
275
+ ## Gates
276
+
277
+ - **No flags without default values.** Every flag evaluation must specify a default value for provider outage scenarios. Missing defaults are blocking findings.
278
+ - **No stale release flags beyond policy limit.** Release flags that exceed their maximum lifetime (default 90 days at 100%) are blocking warnings. They must be cleaned up or have an explicit extension with documented justification.
279
+ - **No coupled flag dependencies.** Flags that require other flags to be in a specific state create combinatorial complexity and are fragile. Flag coupling is a blocking finding that requires consolidation.
280
+ - **No flags without test coverage for both paths.** Feature flags that lack tests for the off-path leave the fallback behavior unverified. Both paths must be tested.
281
+
282
+ ## Escalation
283
+
284
+ - **When flag count exceeds 30 per service:** The flag system is becoming a maintenance burden. Recommend a flag audit sprint with a target of reducing to under 20. Prioritize removing the oldest release flags first.
285
+ - **When a flag provider outage affects production:** If the application does not handle provider unavailability gracefully, this is an architectural issue. Recommend implementing local caching, safe defaults, and a circuit breaker pattern before adding more flags.
286
+ - **When experiment results are inconclusive:** Do not extend the experiment indefinitely. Recommend increasing sample size (broader targeting), simplifying the variants, or declaring the experiment inconclusive and removing it.
287
+ - **When flag cleanup requires database migration:** Removing flags that are stored in a database may require migration scripts. Coordinate cleanup with a release cycle and ensure rollback is possible if the migration fails.
@@ -0,0 +1,74 @@
1
+ name: harness-feature-flags
2
+ version: "1.0.0"
3
+ description: Flag lifecycle management, A/B testing infrastructure, and gradual rollouts
4
+ cognitive_mode: advisory-guide
5
+ tier: 3
6
+ internal: false
7
+ keywords:
8
+ - feature flags
9
+ - feature toggles
10
+ - LaunchDarkly
11
+ - Unleash
12
+ - Flagsmith
13
+ - A/B testing
14
+ - canary
15
+ - gradual rollout
16
+ - kill switch
17
+ - experiment
18
+ stack_signals:
19
+ - "src/**/flags/**"
20
+ - "src/**/features/**"
21
+ - "src/**/*feature-flag*"
22
+ - "src/**/*toggle*"
23
+ - "flags.json"
24
+ - "features.json"
25
+ triggers:
26
+ - manual
27
+ - on_new_feature
28
+ platforms:
29
+ - claude-code
30
+ - gemini-cli
31
+ tools:
32
+ - Bash
33
+ - Read
34
+ - Write
35
+ - Edit
36
+ - Glob
37
+ - Grep
38
+ - emit_interaction
39
+ cli:
40
+ command: harness skill run harness-feature-flags
41
+ args:
42
+ - name: path
43
+ description: Project root path
44
+ required: false
45
+ - name: audit
46
+ description: Run stale flag audit to find flags past their expiry
47
+ type: boolean
48
+ required: false
49
+ - name: provider
50
+ description: Flag provider context (launchdarkly, unleash, flagsmith, custom)
51
+ required: false
52
+ mcp:
53
+ tool: run_skill
54
+ input:
55
+ skill: harness-feature-flags
56
+ path: string
57
+ type: rigid
58
+ phases:
59
+ - name: detect
60
+ description: Discover flag definitions, providers, and usage patterns
61
+ required: true
62
+ - name: design
63
+ description: Recommend flag architecture, naming, and rollout strategies
64
+ required: true
65
+ - name: validate
66
+ description: Verify flag hygiene, test coverage, and fallback behavior
67
+ required: true
68
+ - name: lifecycle
69
+ description: Audit stale flags and recommend cleanup or graduation
70
+ required: true
71
+ state:
72
+ persistent: false
73
+ files: []
74
+ depends_on: []
@@ -25,6 +25,7 @@ mcp:
25
25
  skill: harness-git-workflow
26
26
  path: string
27
27
  type: flexible
28
+ tier: 3
28
29
  state:
29
30
  persistent: false
30
31
  files: []
@@ -25,6 +25,7 @@ mcp:
25
25
  skill: harness-hotspot-detector
26
26
  path: string
27
27
  type: rigid
28
+ tier: 2
28
29
  phases:
29
30
  - name: co-change
30
31
  description: Analyze co-change patterns from git history
@@ -35,6 +35,7 @@ mcp:
35
35
  skill: harness-i18n
36
36
  path: string
37
37
  type: rigid
38
+ tier: 3
38
39
  phases:
39
40
  - name: detect
40
41
  description: Identify project platform(s), i18n framework in use, existing translation files, and locale config
@@ -27,6 +27,7 @@ mcp:
27
27
  skill: harness-i18n-process
28
28
  path: string
29
29
  type: flexible
30
+ tier: 3
30
31
  phases:
31
32
  - name: check-config
32
33
  description: Read harness.config.json to determine mode — gate mode when i18n.enabled is true, prompt mode when unconfigured or disabled
@@ -33,6 +33,7 @@ mcp:
33
33
  skill: harness-i18n-workflow
34
34
  path: string
35
35
  type: flexible
36
+ tier: 3
36
37
  phases:
37
38
  - name: configure
38
39
  description: Set up i18n config in harness.config.json with opinionated defaults or guided customization
@@ -28,6 +28,7 @@ mcp:
28
28
  skill: harness-impact-analysis
29
29
  path: string
30
30
  type: rigid
31
+ tier: 2
31
32
  phases:
32
33
  - name: identify
33
34
  description: Identify changed files from diff or input
@@ -0,0 +1,223 @@
1
+ # Harness Incident Response
2
+
3
+ > Runbook generation, postmortem analysis, and SLO/SLA tracking. Diagnoses incidents by tracing symptoms through services, produces structured postmortems, and maintains error budget accounting.
4
+
5
+ ## When to Use
6
+
7
+ - After a production incident to generate a structured postmortem with timeline and action items
8
+ - To create or audit runbooks for critical services and failure scenarios
9
+ - To define, track, or adjust SLOs/SLAs and monitor error budget consumption
10
+ - NOT for real-time incident coordination (use PagerDuty, OpsGenie, or incident.io for live response)
11
+ - NOT for infrastructure provisioning or remediation (use harness-infrastructure-as-code)
12
+ - NOT for performance benchmarking (use harness-load-testing for capacity planning)
13
+
14
+ ## Process
15
+
16
+ ### Phase 1: ASSESS -- Determine Scope and Severity
17
+
18
+ 1. **Identify the incident signal.** Scan available evidence to determine what triggered the investigation:
19
+ - Check for existing incident reports in `docs/incidents/` or `docs/postmortems/`
20
+ - Look for recent error spikes in log files, monitoring configs, or alerting rules
21
+ - Review recent deployments via `git log --oneline --since="48 hours ago"` for correlated changes
22
+
23
+ 2. **Map affected services.** Trace the blast radius from the incident signal:
24
+ - Identify the originating service from error messages or alert metadata
25
+ - Walk dependency chains using import graphs or service manifests (`docker-compose.yml`, `kubernetes/`, service mesh configs)
26
+ - List all downstream services that depend on the affected component
27
+
28
+ 3. **Classify severity.** Apply the project's severity matrix if one exists in `docs/runbooks/severity-matrix.md`. Otherwise, use standard classification:
29
+ - **SEV1:** Complete service outage, data loss, or security breach affecting all users
30
+ - **SEV2:** Major feature degradation affecting a significant subset of users
31
+ - **SEV3:** Minor feature degradation with workaround available
32
+ - **SEV4:** Cosmetic issue or internal tooling degradation
33
+
34
+ 4. **Establish timeline boundaries.** Determine:
35
+ - When the incident started (first error, first alert, or first user report)
36
+ - When it was detected (MTTD -- Mean Time to Detect)
37
+ - When mitigation began
38
+ - When the incident was resolved (MTTR -- Mean Time to Recover)
39
+
40
+ 5. **Check for existing runbooks.** Search `docs/runbooks/` and `runbooks/` for procedures matching the affected service or failure mode. If a runbook exists, evaluate whether it was followed and whether it was effective.
41
+
42
+ ---
43
+
44
+ ### Phase 2: INVESTIGATE -- Trace Root Cause
45
+
46
+ 1. **Correlate with recent changes.** Run `git log --oneline --since="7 days ago"` and cross-reference commits with the incident timeline. Flag commits that touched affected services or their dependencies.
47
+
48
+ 2. **Analyze error patterns.** Search the codebase for error handling related to the failure:
49
+ - Grep for error messages, exception types, or error codes mentioned in the incident
50
+ - Check retry logic, timeout configurations, and circuit breaker states
51
+ - Identify whether the failure was transient (timeout, network) or persistent (logic error, data corruption)
52
+
53
+ 3. **Trace data flow.** Map the request path from entry point to failure point:
54
+ - Identify API endpoints, message queues, or cron jobs involved
55
+ - Check database queries and external API calls along the path
56
+ - Look for missing validation, unhandled edge cases, or race conditions
57
+
58
+ 4. **Identify contributing factors.** Distinguish between root cause and contributing factors:
59
+ - Root cause: the single change or condition that directly caused the failure
60
+ - Contributing factors: conditions that allowed the failure to reach production (missing tests, inadequate monitoring, deployment without canary)
61
+
62
+ 5. **Validate the hypothesis.** Confirm the root cause by checking:
63
+ - Does reverting the identified change (or simulating the revert) resolve the issue?
64
+ - Does the failure reproduce under the identified conditions?
65
+ - Are there other incidents with the same root cause pattern?
66
+
67
+ ---
68
+
69
+ ### Phase 3: DOCUMENT -- Generate Artifacts
70
+
71
+ 1. **Generate the postmortem report.** Create a structured document in `docs/postmortems/YYYY-MM-DD-<slug>.md` with these sections:
72
+ - **Summary:** One-paragraph description of what happened, impact, and duration
73
+ - **Timeline:** Chronological list of events from first signal to resolution
74
+ - **Root Cause:** Clear statement of what went wrong and why
75
+ - **Contributing Factors:** Conditions that enabled the failure
76
+ - **Impact:** User-facing impact, data impact, SLO impact, revenue impact if applicable
77
+ - **Detection:** How the incident was detected and time to detection
78
+ - **Mitigation:** Steps taken to resolve the incident
79
+ - **Action Items:** Numbered list with owner, priority, and due date
80
+
81
+ 2. **Create or update runbooks.** For each failure mode identified:
82
+ - If no runbook exists, create one in `docs/runbooks/<service>-<failure-mode>.md`
83
+ - Structure: Symptoms, Diagnosis Steps, Mitigation Steps, Escalation Path, Recovery Verification
84
+ - Include concrete commands (kubectl, database queries, API calls) not just prose descriptions
85
+ - Reference monitoring dashboards and alert names
86
+
87
+ 3. **Update the incident log.** If `docs/incidents/index.md` exists, append the new incident with date, severity, MTTR, and link to the postmortem.
88
+
89
+ 4. **Tag related code.** Add or update `// INCIDENT-YYYY-MM-DD: <description>` comments at the code locations involved in the root cause. This creates a searchable history of incident-prone code.
90
+
91
+ ---
92
+
93
+ ### Phase 4: IMPROVE -- SLO Adjustments and Prevention
94
+
95
+ 1. **Calculate SLO impact.** If `slo.yaml` or equivalent SLO definitions exist:
96
+ - Determine how much error budget the incident consumed
97
+ - Calculate remaining error budget for the current window
98
+ - If error budget is exhausted, flag that feature development should pause for reliability work
99
+
100
+ 2. **Evaluate alerting effectiveness.** For each alert that fired (or should have fired):
101
+ - Was the alert timely? Compare alert time to incident start time
102
+ - Was the alert actionable? Did it point to the right service and include enough context?
103
+ - Were there false negatives? Identify monitoring gaps that should have caught the issue earlier
104
+
105
+ 3. **Propose SLO adjustments.** Based on the incident analysis:
106
+ - If the SLO was violated but the impact was acceptable, the SLO may be too tight
107
+ - If the SLO was not violated but users were impacted, the SLO may be too loose
108
+ - Recommend specific SLI (Service Level Indicator) thresholds with justification
109
+
110
+ 4. **Generate preventive action items.** Categorize actions by type:
111
+ - **Code fixes:** Specific bugs or missing validations to address
112
+ - **Testing gaps:** Missing integration tests, chaos tests, or load tests to add
113
+ - **Monitoring improvements:** New alerts, dashboards, or SLIs to implement
114
+ - **Process improvements:** Deployment safeguards, runbook updates, or on-call training
115
+ - **Architecture changes:** Circuit breakers, bulkheads, or redundancy to add
116
+
117
+ 5. **Produce the improvement summary.** Output a prioritized action list with effort estimates and expected impact on MTTD and MTTR.
118
+
119
+ ---
120
+
121
+ ## Harness Integration
122
+
123
+ - **`harness skill run harness-incident-response`** -- Primary CLI entry point. Runs all four phases.
124
+ - **`harness validate`** -- Run after generating documents to ensure project structure is intact.
125
+ - **`harness check-deps`** -- Verify service dependency declarations match the incident trace.
126
+ - **`emit_interaction`** -- Used at severity classification (checkpoint:decision) to confirm severity with the operator before proceeding.
127
+ - **`Glob`** -- Discover existing runbooks, postmortems, and SLO definitions.
128
+ - **`Grep`** -- Search for error patterns, alert configurations, and incident-related code comments.
129
+ - **`Write`** -- Generate postmortem reports and runbook documents.
130
+ - **`Edit`** -- Update existing runbooks and incident indexes.
131
+
132
+ ## Success Criteria
133
+
134
+ - Postmortem document is complete with all required sections (summary, timeline, root cause, action items)
135
+ - Timeline includes MTTD and MTTR calculations with specific timestamps
136
+ - Root cause is a specific, falsifiable statement (not "the system failed")
137
+ - Action items have owners, priorities, and due dates
138
+ - Runbooks contain concrete commands, not just descriptive prose
139
+ - SLO impact is quantified against the error budget when SLO definitions exist
140
+
141
+ ## Examples
142
+
143
+ ### Example: Node.js API Timeout Incident with Datadog Alerts
144
+
145
+ ```
146
+ Phase 1: ASSESS
147
+ Signal: Datadog alert "api-gateway p99 latency > 2000ms" fired at 14:32 UTC
148
+ Affected: api-gateway -> user-service -> PostgreSQL
149
+ Severity: SEV2 (major degradation, 40% of requests timing out)
150
+ MTTD: 4 minutes (alert fired 4 min after first error)
151
+ MTTR: 47 minutes (resolved at 15:19 UTC)
152
+
153
+ Phase 2: INVESTIGATE
154
+ Correlated change: commit abc123 "add user preferences join" deployed at 14:25 UTC
155
+ Root cause: N+1 query in GET /api/users/:id/preferences — new LEFT JOIN
156
+ on unindexed column `preferences.user_id` caused full table scan
157
+ Contributing factors:
158
+ - No query performance test for the preferences endpoint
159
+ - Missing database index on preferences.user_id
160
+ - No circuit breaker between api-gateway and user-service
161
+
162
+ Phase 3: DOCUMENT
163
+ Created: docs/postmortems/2026-03-15-user-service-timeout.md
164
+ Created: docs/runbooks/user-service-database-slow-query.md
165
+ Updated: docs/incidents/index.md
166
+
167
+ Phase 4: IMPROVE
168
+ SLO impact: Consumed 12% of monthly error budget (88% remaining)
169
+ Action items:
170
+ 1. [P0] Add index on preferences.user_id (owner: @backend, due: 2026-03-16)
171
+ 2. [P1] Add query execution time assertions to integration tests (owner: @backend, due: 2026-03-22)
172
+ 3. [P1] Add circuit breaker on api-gateway -> user-service (owner: @platform, due: 2026-03-22)
173
+ 4. [P2] Add Datadog query performance monitor for user-service (owner: @sre, due: 2026-03-29)
174
+ ```
175
+
176
+ ### Example: Kubernetes Pod CrashLoopBackOff with PagerDuty Escalation
177
+
178
+ ```
179
+ Phase 1: ASSESS
180
+ Signal: PagerDuty incident #4521 — payment-service pods in CrashLoopBackOff
181
+ Affected: payment-service -> Stripe API -> order-service (downstream)
182
+ Severity: SEV1 (payment processing completely down)
183
+ MTTD: 2 minutes (PagerDuty auto-detected from Kubernetes health checks)
184
+ MTTR: 23 minutes
185
+
186
+ Phase 2: INVESTIGATE
187
+ Root cause: Environment variable STRIPE_WEBHOOK_SECRET rotated in Vault
188
+ but payment-service pods were not restarted to pick up new value.
189
+ Stripe signature verification failed on all incoming webhooks, causing
190
+ panic in the webhook handler (no error recovery).
191
+ Contributing factors:
192
+ - Vault secret rotation did not trigger pod restart
193
+ - Webhook handler used panic instead of returning error
194
+ - No runbook for secret rotation procedures
195
+
196
+ Phase 3: DOCUMENT
197
+ Created: docs/postmortems/2026-03-20-payment-service-crashloop.md
198
+ Created: docs/runbooks/payment-service-secret-rotation.md
199
+ Created: docs/runbooks/payment-service-stripe-webhook-failure.md
200
+ Updated: docs/incidents/index.md
201
+
202
+ Phase 4: IMPROVE
203
+ SLO impact: Consumed 100% of weekly error budget. Feature freeze recommended.
204
+ Action items:
205
+ 1. [P0] Add Vault agent sidecar with auto-restart on secret change (owner: @platform)
206
+ 2. [P0] Replace panic with error return in webhook handler (owner: @payments)
207
+ 3. [P1] Add synthetic Stripe webhook test to canary suite (owner: @payments)
208
+ 4. [P2] Create secret rotation runbook for all services (owner: @sre)
209
+ ```
210
+
211
+ ## Gates
212
+
213
+ - **No postmortem without a root cause statement.** A postmortem that says "cause unknown" is incomplete. If the root cause cannot be determined, the postmortem must document what was investigated, what was ruled out, and what additional data is needed. Do not close the investigation.
214
+ - **No action items without owners.** Every action item must have an assigned owner and a due date. Unowned action items are never completed. If no owner can be identified, escalate to the team lead.
215
+ - **No severity downgrade without justification.** If a severity is reclassified during investigation, the reason must be documented in the postmortem timeline. Severity downgrades without evidence indicate pressure to minimize, not genuine reassessment.
216
+ - **No skipping the improvement phase.** Documentation without follow-through produces shelf-ware. The improvement phase must produce at least one concrete, actionable item per contributing factor identified.
217
+
218
+ ## Escalation
219
+
220
+ - **When root cause cannot be determined from code alone:** The incident may require production logs, metrics, or traces that are not available in the codebase. Report: "Root cause analysis requires access to [specific observability data]. Recommend reviewing [Datadog/Grafana/CloudWatch] dashboards for the incident window."
221
+ - **When the incident reveals a systemic architecture issue:** A single postmortem action item is insufficient. Report: "This incident pattern indicates a systemic issue with [description]. Recommend a dedicated architecture review using harness-architecture-advisor."
222
+ - **When SLO definitions do not exist:** Error budget calculation is impossible without SLOs. Report: "No SLO definitions found. Recommend establishing baseline SLOs before the next incident review. See the SLO starter template in docs/runbooks/slo-template.yaml."
223
+ - **When multiple teams are involved in the blast radius:** A single postmortem owner may not have visibility into all contributing factors. Report: "This incident spans [N] services owned by [teams]. Recommend a joint postmortem review with representatives from each team."