@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
@@ -33,6 +33,7 @@ mcp:
33
33
  skill: harness-design
34
34
  path: string
35
35
  type: flexible
36
+ tier: 3
36
37
  phases:
37
38
  - name: intent
38
39
  description: Capture aesthetic intent, style, tone, and differentiator
@@ -31,6 +31,7 @@ mcp:
31
31
  skill: harness-design-mobile
32
32
  path: string
33
33
  type: rigid
34
+ tier: 3
34
35
  phases:
35
36
  - name: scaffold
36
37
  description: Read tokens and design intent, detect mobile platform, plan component structure with platform-specific rules
@@ -31,6 +31,7 @@ mcp:
31
31
  skill: harness-design-system
32
32
  path: string
33
33
  type: rigid
34
+ tier: 3
34
35
  phases:
35
36
  - name: discover
36
37
  description: Detect existing design system, tokens, frameworks, and project context
@@ -34,6 +34,7 @@ mcp:
34
34
  skill: harness-design-web
35
35
  path: string
36
36
  type: rigid
37
+ tier: 3
37
38
  phases:
38
39
  - name: scaffold
39
40
  description: Read tokens and design intent, detect framework and CSS strategy, plan component structure
@@ -30,6 +30,7 @@ mcp:
30
30
  skill: harness-diagnostics
31
31
  path: string
32
32
  type: rigid
33
+ tier: 3
33
34
  phases:
34
35
  - name: classify
35
36
  description: Categorize the error into one of 7 taxonomy categories
@@ -39,6 +39,7 @@ mcp:
39
39
  skill: harness-docs-pipeline
40
40
  path: string
41
41
  type: rigid
42
+ tier: 2
42
43
  phases:
43
44
  - name: freshen
44
45
  description: Check graph freshness, detect AGENTS.md, trigger bootstrap if needed
@@ -0,0 +1,276 @@
1
+ # Harness DX
2
+
3
+ > Audit developer experience artifacts -- README quality, API documentation coverage, getting-started guides, and example code validation. Produces a structured DX scorecard with specific improvements and scaffolds missing documentation.
4
+
5
+ ## When to Use
6
+
7
+ - When preparing a library, SDK, or open-source project for release and developer adoption matters
8
+ - When reviewing a PR that changes public API surface and documentation should match
9
+ - When onboarding friction is high and you need to identify where developers get stuck
10
+ - NOT for internal architecture documentation (use harness-docs-pipeline)
11
+ - NOT for user-facing product copy (use harness-ux-copy)
12
+ - NOT for API design decisions like REST vs GraphQL (use harness-api-design)
13
+
14
+ ## Process
15
+
16
+ ### Phase 1: AUDIT -- Evaluate Documentation Quality
17
+
18
+ 1. **Resolve project root.** Use provided path or cwd.
19
+
20
+ 2. **Locate documentation artifacts.** Search for:
21
+ - README files: `README.md`, `README.rst`, `readme.md`
22
+ - Getting started: `GETTING_STARTED.md`, `QUICKSTART.md`, `docs/getting-started.md`
23
+ - API docs: `docs/api/`, `API.md`, generated docs in `docs/`, `site/`
24
+ - Examples: `examples/`, `demos/`, `samples/`, code blocks in README
25
+ - Changelog: `CHANGELOG.md`, `CHANGES.md`, `HISTORY.md`
26
+ - Contributing: `CONTRIBUTING.md`, `.github/CONTRIBUTING.md`
27
+
28
+ 3. **Score README completeness.** Check for the presence and quality of each section:
29
+ - **Title and description** (what is this project?) -- 0-2 points
30
+ - **Installation/setup** (how do I get it?) -- 0-3 points
31
+ - **Quick example** (show me it working in under 30 seconds) -- 0-3 points
32
+ - **API reference or link** (where is the full documentation?) -- 0-2 points
33
+ - **Contributing guide or link** -- 0-1 point
34
+ - **License** -- 0-1 point
35
+ - Total: score out of 12, grade A (10+), B (7-9), C (4-6), D (0-3)
36
+
37
+ 4. **Evaluate installation instructions.** Check:
38
+ - Are all package managers covered? (npm, yarn, pnpm for JS; pip, poetry for Python; cargo for Rust)
39
+ - Are prerequisites listed? (Node version, OS requirements, system dependencies)
40
+ - Is there a one-liner to get started? (copy-paste friendly)
41
+ - Do the instructions work on all documented platforms?
42
+
43
+ 5. **Assess API documentation coverage.** For every exported function, class, or endpoint:
44
+ - Is it documented?
45
+ - Does it have parameter descriptions?
46
+ - Does it have a usage example?
47
+ - Does it have return type documentation?
48
+ - Calculate coverage percentage: `documented / total * 100`
49
+
50
+ 6. **Check for time-to-hello-world.** Estimate the number of steps from `git clone` to seeing the project work. Fewer than 5 steps is good. More than 10 is a problem.
51
+
52
+ ---
53
+
54
+ ### Phase 2: EXTRACT -- Identify and Validate Examples
55
+
56
+ 1. **Extract code examples from documentation.** Parse all markdown files for fenced code blocks with language annotations. Track:
57
+ - File location and line number
58
+ - Language (js, ts, python, bash, etc.)
59
+ - Whether it is a complete runnable example or a fragment
60
+
61
+ 2. **Extract standalone examples.** Scan `examples/`, `demos/`, `samples/` for:
62
+ - Example projects with their own package.json/requirements.txt
63
+ - Single-file examples
64
+ - Example README files explaining what each example demonstrates
65
+
66
+ 3. **Validate example syntax.** For each extracted code example:
67
+ - Check for syntax errors (missing imports, unclosed brackets, invalid syntax)
68
+ - Check for references to APIs that no longer exist (stale examples)
69
+ - Check that import paths match the actual package name and exports
70
+
71
+ 4. **Run executable examples.** When `--validate-examples` is set:
72
+ - For JavaScript/TypeScript: attempt `node` or `tsx` execution
73
+ - For Python: attempt `python` execution
74
+ - For shell commands: validate they reference real scripts and flags
75
+ - Record pass/fail for each example with error output
76
+
77
+ 5. **Check example freshness.** Compare examples against the current API surface:
78
+ - Are there deprecated APIs used in examples?
79
+ - Are there new APIs with no examples?
80
+ - When was each example file last modified relative to the source it demonstrates?
81
+
82
+ 6. **Build coverage map.** Map examples to the APIs they demonstrate. Identify APIs with zero examples (documentation gaps).
83
+
84
+ ---
85
+
86
+ ### Phase 3: SCAFFOLD -- Generate Missing Documentation
87
+
88
+ 1. **Generate README sections.** For any missing README section identified in Phase 1:
89
+ - Draft installation instructions by reading `package.json`, `setup.py`, `Cargo.toml`, or equivalent
90
+ - Draft a quick-start example using the project's main export
91
+ - Draft a features list from the project's exports and test descriptions
92
+
93
+ 2. **Generate API documentation stubs.** For undocumented exports:
94
+ - Extract function signatures, parameter types, and return types from source
95
+ - Generate JSDoc/docstring stubs with parameter descriptions inferred from type names
96
+ - Include a usage example skeleton derived from test files when available
97
+
98
+ 3. **Generate example files.** For APIs with no examples:
99
+ - Create a minimal working example in `examples/`
100
+ - Include comments explaining each step
101
+ - Ensure the example is self-contained (includes imports, setup, and cleanup)
102
+
103
+ 4. **Generate getting-started guide.** If no quickstart exists:
104
+ - Write a step-by-step guide from installation through first meaningful use
105
+ - Include expected output at each step
106
+ - Target under 5 minutes to complete
107
+
108
+ 5. **Propose documentation structure.** If documentation is scattered or missing:
109
+ - Recommend a `docs/` directory structure
110
+ - Map content to sections (guides, reference, examples, tutorials)
111
+ - Suggest a documentation site generator if the project is large enough (Docusaurus, MkDocs, mdBook)
112
+
113
+ ---
114
+
115
+ ### Phase 4: VALIDATE -- Verify Documentation Accuracy
116
+
117
+ 1. **Check link integrity.** Verify all links in documentation:
118
+ - Internal links: do referenced files and anchors exist?
119
+ - External links: are they well-formed? (do not make HTTP requests)
120
+ - Badge URLs: are shields.io and similar badge URLs using the correct repo/package name?
121
+
122
+ 2. **Check version consistency.** Verify documentation matches the current version:
123
+ - Does the installation section reference the correct package version?
124
+ - Do API examples use the current function signatures?
125
+ - Is the changelog up to date with the latest release?
126
+
127
+ 3. **Check cross-references.** Verify README links to detailed docs, and detailed docs link back to the README and to each other where appropriate.
128
+
129
+ 4. **Output DX scorecard.** Present the complete audit results:
130
+
131
+ ```
132
+ DX Scorecard: [GRADE]
133
+ README: [score]/12 ([grade])
134
+ API Coverage: [N]% ([documented]/[total] exports)
135
+ Examples: [working]/[total] passing
136
+ Time to Hello World: ~[N] steps
137
+ Links: [valid]/[total] verified
138
+
139
+ GAPS:
140
+ - Missing: getting-started guide
141
+ - Missing: 12 undocumented exports
142
+ - Broken: examples/advanced.ts references removed API
143
+
144
+ GENERATED:
145
+ - docs/getting-started.md (draft)
146
+ - 4 API documentation stubs added
147
+ - examples/basic-usage.ts created
148
+ ```
149
+
150
+ 5. **Verify scaffolded content compiles.** If documentation was generated, verify:
151
+ - Generated code examples have valid syntax
152
+ - Generated markdown renders correctly (no broken formatting)
153
+ - Generated files are placed in the correct directories
154
+
155
+ ---
156
+
157
+ ## Harness Integration
158
+
159
+ - **`harness skill run harness-dx`** -- Primary command for running the DX audit.
160
+ - **`harness validate`** -- Run after scaffolding documentation to verify project health.
161
+ - **`Glob`** -- Used to locate README files, documentation directories, example folders, and API docs.
162
+ - **`Grep`** -- Used to extract exported symbols, find documentation comments, and locate code examples in markdown.
163
+ - **`Read`** -- Used to read documentation files, package manifests, and source files for API extraction.
164
+ - **`Write`** -- Used to scaffold missing documentation, generate example files, and create getting-started guides.
165
+ - **`Bash`** -- Used to run example validation, check link targets, and execute code snippets.
166
+ - **`emit_interaction`** -- Used to present the DX scorecard and request confirmation before generating scaffolded files.
167
+
168
+ ## Success Criteria
169
+
170
+ - README is scored against all 6 completeness criteria with specific gap identification
171
+ - API documentation coverage percentage is calculated against actual exported surface
172
+ - All code examples in documentation are syntax-checked
173
+ - Executable examples pass when `--validate-examples` is set
174
+ - Missing documentation is scaffolded with accurate, runnable content
175
+ - DX scorecard provides an at-a-glance quality grade
176
+ - Time-to-hello-world is estimated and actionable if too high
177
+
178
+ ## Examples
179
+
180
+ ### Example: Node.js SDK with Sparse Documentation
181
+
182
+ ```
183
+ Phase 1: AUDIT
184
+ README score: 5/12 (C)
185
+ Present: title, description, license
186
+ Missing: installation, quick example, API reference link, contributing
187
+ API coverage: 23% (7/30 exports documented)
188
+ Time to hello world: ~14 steps (too many, target: <5)
189
+
190
+ Phase 2: EXTRACT
191
+ Code examples found: 3 (all in README)
192
+ examples/ directory: empty
193
+ Validation: 2/3 examples pass syntax check
194
+ Broken: README line 45 references `sdk.connect()` -- renamed to `sdk.init()` in v2.0
195
+
196
+ Phase 3: SCAFFOLD
197
+ Generated: docs/getting-started.md (5-step quickstart)
198
+ Generated: examples/basic-usage.ts (demonstrates init, query, cleanup)
199
+ Generated: 23 JSDoc stubs from TypeScript signatures
200
+ README patches: added installation section, updated broken example
201
+
202
+ Phase 4: VALIDATE
203
+ Links: 8/10 valid (2 broken anchors in README)
204
+ Generated examples: syntax valid
205
+ DX Scorecard: C -> B (projected after applying changes)
206
+ ```
207
+
208
+ ### Example: Python Library with Comprehensive Docs (Sphinx)
209
+
210
+ ```
211
+ Phase 1: AUDIT
212
+ README score: 11/12 (A)
213
+ Missing only: contributing guide link
214
+ API coverage: 89% (142/160 functions documented)
215
+ Sphinx docs at docs/_build/html: present, 45 pages
216
+ Time to hello world: ~4 steps (good)
217
+
218
+ Phase 2: EXTRACT
219
+ Code examples: 28 in docs, 12 in examples/
220
+ Validation: 37/40 pass (3 use deprecated pandas.append)
221
+ Stale examples: 3 files last modified 8 months ago, source changed since
222
+
223
+ Phase 3: SCAFFOLD
224
+ Generated: 18 docstring stubs for undocumented functions
225
+ Updated: 3 stale examples to use pandas.concat
226
+ Added: CONTRIBUTING.md link to README
227
+
228
+ Phase 4: VALIDATE
229
+ Links: 52/52 valid
230
+ DX Scorecard: A (maintained, minor freshness issues resolved)
231
+ ```
232
+
233
+ ### Example: Rust CLI Tool Missing Getting Started
234
+
235
+ ```
236
+ Phase 1: AUDIT
237
+ README score: 7/12 (B)
238
+ Present: title, description, installation (cargo install), license, API link
239
+ Missing: quick example showing actual CLI usage, contributing
240
+ API coverage: N/A (CLI tool, not library)
241
+ CLI help text: present via clap derive
242
+ Time to hello world: ~6 steps
243
+
244
+ Phase 2: EXTRACT
245
+ Code examples: 2 in README (both installation commands)
246
+ examples/ directory: 1 example config file, no runnable examples
247
+ Missing: actual usage examples showing command output
248
+
249
+ Phase 3: SCAFFOLD
250
+ Generated: docs/getting-started.md with:
251
+ 1. cargo install myctl
252
+ 2. myctl init
253
+ 3. myctl run --config example.toml
254
+ (with expected output at each step)
255
+ Generated: examples/basic-config.toml with annotated comments
256
+ Generated: README quick-example section with terminal output
257
+
258
+ Phase 4: VALIDATE
259
+ CLI help flags match documented flags: YES
260
+ Config example matches current schema: YES
261
+ DX Scorecard: B -> A (projected after applying changes)
262
+ ```
263
+
264
+ ## Gates
265
+
266
+ - **No scaffolding without human confirmation.** Generated documentation is always presented as a draft for review. Do not commit generated files automatically. Use `emit_interaction` to present scaffolded content and wait for approval.
267
+ - **No overwriting existing documentation.** If a README section already exists, do not replace it. Only fill gaps. Existing content may have been carefully written and should not be clobbered.
268
+ - **No fabricating API behavior.** Generated documentation and examples must be derived from actual source code (type signatures, test files, existing docs). Do not guess what an undocumented function does based on its name alone.
269
+ - **No marking stale examples as passing.** If an example references a renamed or removed API, it is broken regardless of whether it happens to still parse syntactically.
270
+
271
+ ## Escalation
272
+
273
+ - **When API documentation requires domain expertise:** If function behavior cannot be inferred from types and tests alone, flag it: "These 5 functions need developer-written documentation -- their behavior is domain-specific and cannot be reliably inferred."
274
+ - **When examples require external services:** If running an example requires a database, API key, or external service, flag the dependency rather than failing: "This example requires a running PostgreSQL instance. Consider adding a Docker Compose file for example dependencies."
275
+ - **When documentation tooling is broken:** If Sphinx, TypeDoc, or other doc generators fail to build, report the error but do not attempt to fix the toolchain. That is outside this skill's scope.
276
+ - **When README and API docs contradict each other:** Flag the contradiction with both sources quoted. Do not choose which one is correct -- the developer must resolve the conflict: "README says `init()` accepts a string, but the TypeDoc shows it accepts `InitConfig`. Which is current?"
@@ -0,0 +1,76 @@
1
+ name: harness-dx
2
+ version: "1.0.0"
3
+ description: Developer experience auditing — README quality, API documentation, getting-started guides, and example validation
4
+ cognitive_mode: advisory-guide
5
+ triggers:
6
+ - manual
7
+ - on_milestone
8
+ - on_pr
9
+ platforms:
10
+ - claude-code
11
+ - gemini-cli
12
+ tools:
13
+ - Bash
14
+ - Read
15
+ - Write
16
+ - Edit
17
+ - Glob
18
+ - Grep
19
+ - emit_interaction
20
+ cli:
21
+ command: harness skill run harness-dx
22
+ args:
23
+ - name: path
24
+ description: Project root path
25
+ required: false
26
+ - name: focus
27
+ description: "Audit focus: readme, api-docs, examples, quickstart, all. Defaults to all."
28
+ required: false
29
+ - name: validate-examples
30
+ description: Run example code snippets to verify they execute successfully
31
+ required: false
32
+ mcp:
33
+ tool: run_skill
34
+ input:
35
+ skill: harness-dx
36
+ path: string
37
+ type: rigid
38
+ tier: 3
39
+ internal: false
40
+ keywords:
41
+ - developer experience
42
+ - DX
43
+ - README
44
+ - API docs
45
+ - getting started
46
+ - examples
47
+ - SDK
48
+ - onboarding
49
+ - documentation quality
50
+ - quickstart
51
+ - tutorials
52
+ stack_signals:
53
+ - "README.md"
54
+ - "docs/"
55
+ - "examples/"
56
+ - "GETTING_STARTED.md"
57
+ - "QUICKSTART.md"
58
+ - "docs/api/"
59
+ - "sdk/"
60
+ phases:
61
+ - name: audit
62
+ description: Evaluate README completeness, API doc coverage, and getting-started guide quality
63
+ required: true
64
+ - name: extract
65
+ description: Identify code examples, API references, and installation instructions for validation
66
+ required: true
67
+ - name: scaffold
68
+ description: Generate missing documentation, fix broken examples, and fill coverage gaps
69
+ required: true
70
+ - name: validate
71
+ description: Verify examples run, links resolve, and documentation matches current API surface
72
+ required: true
73
+ state:
74
+ persistent: false
75
+ files: []
76
+ depends_on: []
@@ -0,0 +1,245 @@
1
+ # Harness E2E
2
+
3
+ > End-to-end browser testing with Playwright, Cypress, or Selenium. Covers page object scaffolding, critical-path test implementation, and systematic flakiness remediation.
4
+
5
+ ## When to Use
6
+
7
+ - Writing browser-level tests for critical user flows (login, checkout, onboarding)
8
+ - Adding E2E coverage for a new feature that touches the UI
9
+ - Diagnosing and remediating flaky E2E tests that block CI pipelines
10
+ - NOT when testing API-only behavior with no UI (use harness-integration-test instead)
11
+ - NOT when testing individual component rendering in isolation (use unit tests or harness-tdd instead)
12
+ - NOT when performing visual screenshot comparison (use harness-visual-regression instead)
13
+
14
+ ## Process
15
+
16
+ ### Phase 1: DETECT -- Identify Framework and Application Structure
17
+
18
+ 1. **Scan for E2E configuration.** Search for `playwright.config.ts`, `playwright.config.js`, `cypress.config.ts`, `cypress.config.js`, `wdio.conf.js`, or `selenium` directories. If multiple frameworks are present, prefer the one with the most existing tests.
19
+
20
+ 2. **Catalog existing E2E tests.** Glob for `*.spec.ts`, `*.e2e.ts`, `*.cy.ts`, `*.test.ts` within E2E directories. Count tests per file and identify patterns: naming conventions, folder structure, shared utilities.
21
+
22
+ 3. **Map application entry points.** Identify the base URL, authentication flow, and route structure. Check for:
23
+ - Environment configuration (`.env.test`, `playwright.config.ts` baseURL)
24
+ - Authentication fixtures (stored auth state, login helpers)
25
+ - Route definitions (Next.js pages, React Router config, Express routes)
26
+
27
+ 4. **Identify the test execution environment.** Determine whether tests run against a dev server, a preview deployment, or a Docker Compose stack. Check `package.json` scripts for `e2e`, `test:e2e`, or `playwright test` commands.
28
+
29
+ 5. **Report findings.** Summarize: framework detected, number of existing tests, coverage gaps relative to application routes, and any configuration issues (missing base URL, no auth setup).
30
+
31
+ ### Phase 2: SCAFFOLD -- Generate Page Objects and Test Infrastructure
32
+
33
+ 1. **Create the page object directory.** Follow the project's existing conventions. If no convention exists, use `e2e/pages/` for Playwright or `cypress/pages/` for Cypress.
34
+
35
+ 2. **Generate page objects for target flows.** Each page object encapsulates:
36
+ - Locator definitions using stable selectors (`data-testid`, `role`, `aria-label`) -- never CSS classes or XPath positional selectors
37
+ - Action methods (click, fill, navigate) that return the next page object for chaining
38
+ - Assertion helpers that verify page state without exposing DOM internals
39
+
40
+ 3. **Create shared fixtures and helpers.** Generate:
41
+ - Authentication fixture that stores and reuses auth state across tests
42
+ - Test data factory integration (API calls or database seeds for prerequisite data)
43
+ - Custom assertions for domain-specific validations
44
+
45
+ 4. **Configure test parallelization.** Set up:
46
+ - Worker count based on CI environment capabilities
47
+ - Test isolation (each test gets its own browser context)
48
+ - Retry configuration (1 retry for CI, 0 for local development)
49
+ - Screenshot and trace capture on failure
50
+
51
+ 5. **Verify scaffold compiles.** Run the test command with `--list` or `--dry-run` to confirm all imports resolve and page objects instantiate without errors.
52
+
53
+ ### Phase 3: IMPLEMENT -- Write E2E Tests for Critical Paths
54
+
55
+ 1. **Prioritize user flows by business impact.** Order test implementation:
56
+ - Smoke tests: application loads, critical pages render
57
+ - Authentication: login, logout, session persistence
58
+ - Primary flows: the 3-5 flows that represent 80% of user value
59
+ - Error paths: form validation, 404 handling, permission denied
60
+
61
+ 2. **Write each test following the Arrange-Act-Assert pattern.**
62
+ - Arrange: set up test data via API calls or fixtures (never through the UI for setup)
63
+ - Act: perform the user flow through page object methods
64
+ - Assert: verify the expected outcome using page object assertion helpers
65
+
66
+ 3. **Use explicit waits, never arbitrary timeouts.** Where the framework provides an auto-waiting mechanism (Playwright `expect` with auto-retry, Cypress implicit waits), rely on it. Where explicit waits are needed, wait for specific network responses, DOM mutations, or URL changes -- never `page.waitForTimeout()`.
67
+
68
+ 4. **Isolate tests from each other.** Each test must:
69
+ - Create its own test data (no shared mutable state between tests)
70
+ - Clean up after itself or rely on test isolation (separate browser context)
71
+ - Pass when run individually and when run in any order
72
+
73
+ 5. **Tag tests by scope.** Apply tags or annotations:
74
+ - `@smoke` for tests that must pass on every deployment
75
+ - `@critical-path` for primary business flow coverage
76
+ - `@slow` for tests that exceed 30 seconds
77
+
78
+ 6. **Run the full E2E suite.** Verify all tests pass locally before proceeding to validation.
79
+
80
+ ### Phase 4: VALIDATE -- Execute, Detect Flakiness, and Remediate
81
+
82
+ 1. **Run the suite 3 times consecutively.** Track pass/fail per test across runs. Any test that fails in at least one run but passes in another is flagged as flaky.
83
+
84
+ 2. **Classify flaky tests by root cause.** Common categories:
85
+ - **Race condition:** test asserts before async operation completes. Fix: add explicit wait for the specific condition.
86
+ - **Shared state:** test depends on data from a previous test. Fix: make test data independent.
87
+ - **Animation/transition:** assertion fires during CSS transition. Fix: wait for animation to complete or disable animations in test mode.
88
+ - **Network timing:** API response arrives before or after expected. Fix: intercept and mock the network request, or wait for the specific response.
89
+
90
+ 3. **Apply remediation for each flaky test.** Do not simply add retries -- fix the root cause. Retries mask problems. After remediation, rerun the previously-flaky test 5 times to confirm stability.
91
+
92
+ 4. **Run `harness validate`.** Confirm the project passes all harness checks with the new E2E tests in place.
93
+
94
+ 5. **Generate a coverage summary.** Report:
95
+ - Number of user flows covered vs. total identified
96
+ - Flaky tests found and remediated
97
+ - Remaining coverage gaps with recommended next steps
98
+
99
+ ### Graph Refresh
100
+
101
+ If a knowledge graph exists at `.harness/graph/`, refresh it after code changes to keep graph queries accurate:
102
+
103
+ ```
104
+ harness scan [path]
105
+ ```
106
+
107
+ ## Harness Integration
108
+
109
+ - **`harness validate`** -- Run in VALIDATE phase after all tests are implemented. Confirms project health including new E2E infrastructure.
110
+ - **`harness check-deps`** -- Run after SCAFFOLD phase to verify E2E test dependencies do not introduce forbidden imports into production code.
111
+ - **`emit_interaction`** -- Used at checkpoints to present flakiness findings and remediation options to the human for approval.
112
+ - **Glob** -- Used in DETECT phase to catalog existing test files and page objects.
113
+ - **Grep** -- Used to search for selector patterns, wait strategies, and anti-patterns in existing tests.
114
+
115
+ ## Success Criteria
116
+
117
+ - Every critical user flow identified in DETECT has a corresponding E2E test
118
+ - All E2E tests pass on 3 consecutive local runs with zero flaky failures
119
+ - Page objects use stable selectors (`data-testid`, ARIA roles) -- no CSS class selectors or XPath positional selectors
120
+ - No test uses arbitrary timeouts (`waitForTimeout`, `cy.wait(N)`, `Thread.sleep`)
121
+ - Test data is created via API or fixtures, not through UI interactions during setup
122
+ - Each test is independent and passes when run in isolation
123
+ - `harness validate` passes after the full suite is in place
124
+
125
+ ## Examples
126
+
127
+ ### Example: Playwright E2E for a SaaS Dashboard
128
+
129
+ **DETECT output:**
130
+
131
+ ```
132
+ Framework: Playwright 1.42 (playwright.config.ts found)
133
+ Existing tests: 12 specs in e2e/tests/
134
+ Base URL: http://localhost:3000
135
+ Auth: Cookie-based, no stored auth state found
136
+ Coverage gaps: settings page, billing flow, team invitation
137
+ ```
138
+
139
+ **SCAFFOLD -- Page object for dashboard:**
140
+
141
+ ```typescript
142
+ // e2e/pages/dashboard.page.ts
143
+ import { type Page, type Locator, expect } from '@playwright/test';
144
+
145
+ export class DashboardPage {
146
+ readonly page: Page;
147
+ readonly heading: Locator;
148
+ readonly projectList: Locator;
149
+ readonly createButton: Locator;
150
+
151
+ constructor(page: Page) {
152
+ this.page = page;
153
+ this.heading = page.getByRole('heading', { name: 'Dashboard' });
154
+ this.projectList = page.getByTestId('project-list');
155
+ this.createButton = page.getByRole('button', { name: 'New Project' });
156
+ }
157
+
158
+ async goto() {
159
+ await this.page.goto('/dashboard');
160
+ await expect(this.heading).toBeVisible();
161
+ }
162
+
163
+ async createProject(name: string) {
164
+ await this.createButton.click();
165
+ await this.page.getByLabel('Project name').fill(name);
166
+ await this.page.getByRole('button', { name: 'Create' }).click();
167
+ await expect(this.page.getByText(name)).toBeVisible();
168
+ }
169
+
170
+ async expectProjectCount(count: number) {
171
+ await expect(this.projectList.getByRole('listitem')).toHaveCount(count);
172
+ }
173
+ }
174
+ ```
175
+
176
+ **IMPLEMENT -- Critical path test:**
177
+
178
+ ```typescript
179
+ // e2e/tests/project-creation.spec.ts
180
+ import { test, expect } from '@playwright/test';
181
+ import { DashboardPage } from '../pages/dashboard.page';
182
+ import { LoginPage } from '../pages/login.page';
183
+
184
+ test.describe('Project creation', () => {
185
+ test('user can create a project from the dashboard', async ({ page }) => {
186
+ // Arrange: authenticate via stored state
187
+ const loginPage = new LoginPage(page);
188
+ await loginPage.loginAs('test-user@example.com');
189
+
190
+ // Act: create a new project
191
+ const dashboard = new DashboardPage(page);
192
+ await dashboard.goto();
193
+ await dashboard.createProject('My Test Project');
194
+
195
+ // Assert: project appears in the list
196
+ await expect(page.getByText('My Test Project')).toBeVisible();
197
+ await expect(page).toHaveURL(/\/projects\/[\w-]+/);
198
+ });
199
+ });
200
+ ```
201
+
202
+ ### Example: Cypress E2E for an E-Commerce Checkout
203
+
204
+ **IMPLEMENT -- Checkout flow with network interception:**
205
+
206
+ ```typescript
207
+ // cypress/e2e/checkout.cy.ts
208
+ describe('Checkout flow', () => {
209
+ beforeEach(() => {
210
+ cy.intercept('POST', '/api/orders', { fixture: 'order-success.json' }).as('createOrder');
211
+ cy.loginByApi('customer@shop.com', 'testpass123');
212
+ });
213
+
214
+ it('completes checkout with valid payment', () => {
215
+ cy.visit('/cart');
216
+ cy.findByTestId('cart-item').should('have.length.at.least', 1);
217
+
218
+ cy.findByRole('button', { name: 'Proceed to Checkout' }).click();
219
+ cy.url().should('include', '/checkout');
220
+
221
+ cy.findByLabelText('Card number').type('4242424242424242');
222
+ cy.findByLabelText('Expiry').type('12/28');
223
+ cy.findByLabelText('CVC').type('123');
224
+
225
+ cy.findByRole('button', { name: 'Place Order' }).click();
226
+ cy.wait('@createOrder');
227
+
228
+ cy.findByRole('heading', { name: 'Order Confirmed' }).should('be.visible');
229
+ });
230
+ });
231
+ ```
232
+
233
+ ## Gates
234
+
235
+ - **No CSS class selectors in page objects.** If a locator uses `.btn-primary` or `[class*="header"]`, the test is brittle. Use `data-testid`, ARIA roles, or accessible labels. Rewrite before merging.
236
+ - **No arbitrary waits.** If any test contains `waitForTimeout`, `cy.wait(number)`, or `Thread.sleep`, it is not ready. Replace with explicit condition waits.
237
+ - **No shared mutable state.** If test B depends on data created by test A, both tests are broken. Each test must create its own data. Fix before proceeding.
238
+ - **Flaky tests block merge.** Any test that fails intermittently on 3 consecutive runs must be remediated or quarantined with a tracking issue before the suite is considered complete.
239
+
240
+ ## Escalation
241
+
242
+ - **When the application requires a complex auth flow (OAuth, SSO, MFA):** Do not automate the full OAuth redirect in the browser. Use API-based authentication to obtain tokens, then inject them as cookies or headers. If API auth is not available, escalate to the team to expose a test-only auth bypass.
243
+ - **When tests require infrastructure not available locally (third-party APIs, payment processors):** Mock the external dependency at the network layer using Playwright route interception or Cypress intercept. If the mock is insufficient for confidence, escalate for a staging environment with sandbox credentials.
244
+ - **When flakiness persists after 3 remediation attempts on the same test:** The test may be exposing a real race condition in the application. Escalate the finding as a potential production bug rather than continuing to patch the test.
245
+ - **When the E2E suite exceeds 10 minutes on CI:** Triage tests into smoke (must run on every commit) and full (runs on PR merge or nightly). Do not simply accept slow pipelines.