@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,74 @@
1
+ name: harness-test-data
2
+ version: "1.0.0"
3
+ description: Test factories, fixtures, database seeding, and test data isolation
4
+ cognitive_mode: advisory-guide
5
+ triggers:
6
+ - manual
7
+ - on_new_feature
8
+ platforms:
9
+ - claude-code
10
+ - gemini-cli
11
+ tools:
12
+ - Bash
13
+ - Read
14
+ - Write
15
+ - Edit
16
+ - Glob
17
+ - Grep
18
+ - emit_interaction
19
+ cli:
20
+ command: harness skill run harness-test-data
21
+ args:
22
+ - name: path
23
+ description: Project root path
24
+ required: false
25
+ - name: pattern
26
+ description: "Data pattern: factory, fixture, builder, or seed. Auto-detected when omitted."
27
+ required: false
28
+ - name: model
29
+ description: "Target model or entity name for focused factory generation."
30
+ required: false
31
+ mcp:
32
+ tool: run_skill
33
+ input:
34
+ skill: harness-test-data
35
+ path: string
36
+ type: rigid
37
+ tier: 3
38
+ internal: false
39
+ keywords:
40
+ - test data
41
+ - factory
42
+ - fixture
43
+ - seed
44
+ - faker
45
+ - test database
46
+ - isolation
47
+ - cleanup
48
+ - test container
49
+ - builder pattern
50
+ - mother object
51
+ stack_signals:
52
+ - "tests/factories/"
53
+ - "tests/fixtures/"
54
+ - "src/**/factories/**"
55
+ - "seeds/"
56
+ - "test-data/"
57
+ - "src/**/__fixtures__/"
58
+ phases:
59
+ - name: detect
60
+ description: Identify data models, existing test data patterns, and database schema
61
+ required: true
62
+ - name: design
63
+ description: Choose factory pattern, define builder interfaces, and plan data relationships
64
+ required: true
65
+ - name: scaffold
66
+ description: Generate factories, fixtures, seed scripts, and cleanup utilities
67
+ required: true
68
+ - name: validate
69
+ description: Verify data isolation, cleanup correctness, and factory composability
70
+ required: true
71
+ state:
72
+ persistent: false
73
+ files: []
74
+ depends_on: []
@@ -0,0 +1,271 @@
1
+ # Harness UX Copy
2
+
3
+ > Audit microcopy, error messages, and UI strings for voice/tone consistency, clarity, and actionability. Produces a structured report with specific rewrites and a project voice guide when none exists.
4
+
5
+ ## When to Use
6
+
7
+ - When reviewing a PR that adds or changes user-facing text (labels, error messages, tooltips, onboarding flows)
8
+ - When establishing or enforcing a voice/tone guide across a product
9
+ - When error messages are vague, blame the user, or lack actionable next steps
10
+ - NOT for internationalization string extraction (use harness-i18n)
11
+ - NOT for accessibility auditing of non-text elements (use harness-accessibility)
12
+ - NOT for marketing copy or landing page content outside the application
13
+
14
+ ## Process
15
+
16
+ ### Phase 1: DISCOVER -- Locate UI String Sources
17
+
18
+ 1. **Resolve project root.** Use provided path or cwd.
19
+
20
+ 2. **Locate voice/tone guide.** Search for `VOICE.md`, `STYLE.md`, `docs/voice-guide.md`, `docs/tone.md`, or a `voice` section in `harness.config.json`. If no guide is found, flag this as a gap and use sensible defaults (clear, concise, respectful, action-oriented).
21
+
22
+ 3. **Identify string sources.** Scan the project for UI text using multiple strategies:
23
+ - Component files: `src/**/components/**/*.{tsx,jsx,vue,svelte}` for inline text
24
+ - String constants: `src/**/strings*`, `src/**/messages*`, `src/**/copy*` for centralized copy
25
+ - i18n files: `src/**/i18n/**`, `locales/`, `translations/` for translation keys
26
+ - Error definitions: files containing `throw new Error`, `toast.error`, `setError`, `addNotification`
27
+ - Form labels: files containing `label=`, `placeholder=`, `aria-label=`, `helperText=`
28
+
29
+ 4. **Determine audit scope.** If `--scope` is provided, filter to the specified category. If triggered by a PR, scope to changed files only using `git diff --name-only`.
30
+
31
+ 5. **Build string inventory.** Extract all user-facing strings with their source location, category (error, label, help, onboarding, confirmation, empty-state), and surrounding context.
32
+
33
+ 6. **Report discovery summary.** Output the count of strings found by category and source type:
34
+ ```
35
+ Discovery: 142 strings found
36
+ Errors: 23 | Labels: 48 | Help text: 31 | Onboarding: 12 | Empty states: 8 | Other: 20
37
+ Sources: 18 components, 3 string files, 2 i18n bundles
38
+ ```
39
+
40
+ ---
41
+
42
+ ### Phase 2: AUDIT -- Evaluate Copy Quality
43
+
44
+ 1. **Check error messages against quality rules.** Every error message must satisfy:
45
+ - **What happened:** Describe the problem without technical jargon
46
+ - **Why it happened:** Provide context when possible (not "An error occurred")
47
+ - **What to do next:** Include an actionable recovery step
48
+ - **No blame language:** Avoid "you failed to," "invalid input," "wrong password" -- prefer "we couldn't," "please check," "that password didn't match"
49
+
50
+ 2. **Check labels and form text.** Evaluate:
51
+ - **Clarity:** Can the user understand what is expected without additional context?
52
+ - **Consistency:** Are similar fields labeled the same way across the app? (e.g., "Email" vs "Email address" vs "E-mail")
53
+ - **Brevity:** Are labels concise without sacrificing clarity?
54
+ - **Placeholder misuse:** Are placeholders being used as labels? (accessibility anti-pattern)
55
+
56
+ 3. **Check voice/tone alignment.** Compare strings against the voice guide (or defaults):
57
+ - **Formality level:** Is the tone consistent? (e.g., mixing "gonna" with "We regret to inform you")
58
+ - **Pronoun usage:** Is first/second person used consistently? ("your account" vs "the account")
59
+ - **Technical jargon:** Are technical terms exposed to non-technical users?
60
+ - **Emotional tone:** Are error states empathetic? Are success states appropriately celebratory?
61
+
62
+ 4. **Check empty states and onboarding.** Evaluate:
63
+ - Do empty states explain what will appear and how to get started?
64
+ - Do onboarding flows use progressive disclosure?
65
+ - Are CTAs clear and specific? ("Add your first project" vs "Get started")
66
+
67
+ 5. **Check confirmation dialogs.** Evaluate:
68
+ - Is the consequence of the action clearly stated?
69
+ - Are button labels specific? ("Delete project" vs "OK")
70
+ - Is the destructive action visually distinct?
71
+
72
+ 6. **Classify findings by severity:**
73
+ - **Error:** Misleading text, blame language, missing recovery steps, accessibility violations
74
+ - **Warning:** Inconsistent terminology, vague CTAs, jargon exposure
75
+ - **Info:** Style preferences, minor tone adjustments, punctuation inconsistencies
76
+
77
+ ---
78
+
79
+ ### Phase 3: GUIDE -- Produce Recommendations
80
+
81
+ 1. **Generate specific rewrites.** For every error and warning finding, provide:
82
+ - The current string (with file location)
83
+ - The recommended rewrite
84
+ - The rule that triggered the finding
85
+ - A brief rationale
86
+
87
+ 2. **Produce consistency patches.** When terminology is inconsistent (e.g., "Sign in" vs "Log in"), recommend a single canonical term and list all locations that need updating.
88
+
89
+ 3. **Generate voice guide draft.** If no voice guide was found in Phase 1, produce a draft `VOICE.md` covering:
90
+ - Brand voice attributes (3-5 adjectives with examples)
91
+ - Tone spectrum (how voice changes by context: error, success, onboarding, help)
92
+ - Word list (preferred terms and terms to avoid)
93
+ - Punctuation and capitalization rules
94
+ - Example patterns for common UI scenarios
95
+
96
+ 4. **Produce error message template.** Generate a reusable template for error messages:
97
+
98
+ ```
99
+ [What happened]. [Why / context]. [What to do next].
100
+ Example: "We couldn't save your changes. The file may have been modified by someone else. Try refreshing the page and saving again."
101
+ ```
102
+
103
+ 5. **Prioritize recommendations.** Order by impact: error-severity findings first, then warnings grouped by frequency (most repeated patterns first), then informational suggestions.
104
+
105
+ ---
106
+
107
+ ### Phase 4: VALIDATE -- Verify Recommendations
108
+
109
+ 1. **Check rewrites preserve meaning.** Verify each recommended rewrite conveys the same information as the original. Flag any rewrite that changes the semantic meaning.
110
+
111
+ 2. **Check i18n compatibility.** If the project uses i18n:
112
+ - Verify recommended strings do not break interpolation variables (`{count}`, `{{name}}`)
113
+ - Verify string key references remain valid
114
+ - Flag any rewrites that would require translator review
115
+
116
+ 3. **Check length constraints.** Verify rewrites fit within UI constraints:
117
+ - Button labels: typically under 25 characters
118
+ - Toast messages: typically under 100 characters
119
+ - Form labels: typically under 40 characters
120
+ - Flag any rewrite that significantly increases string length
121
+
122
+ 4. **Output structured report.** Present findings in a format suitable for PR review:
123
+
124
+ ```
125
+ UX Copy Audit: [PASS/NEEDS_ATTENTION/FAIL]
126
+ Strings audited: N
127
+ Findings: E errors, W warnings, I info
128
+
129
+ ERRORS:
130
+ [UXC-ERR-001] src/components/LoginForm.tsx:42
131
+ Current: "Invalid credentials"
132
+ Recommended: "That email and password combination didn't match. Please try again or reset your password."
133
+ Rule: error-missing-recovery-step
134
+
135
+ WARNINGS:
136
+ [UXC-WARN-001] Inconsistent terminology: "Sign in" (4 occurrences) vs "Log in" (2 occurrences)
137
+ Recommendation: Standardize on "Sign in" across all 6 locations.
138
+ ```
139
+
140
+ 5. **Verify voice guide completeness.** If a voice guide was generated, confirm it covers all required sections and includes at least 3 examples per section.
141
+
142
+ ---
143
+
144
+ ## Harness Integration
145
+
146
+ - **`harness skill run harness-ux-copy`** -- Primary command for running the UX copy audit.
147
+ - **`harness validate`** -- Run after applying recommended changes to verify project health.
148
+ - **`Glob`** -- Used to locate string sources, component files, and voice guides.
149
+ - **`Grep`** -- Used to extract inline strings, error patterns, and label attributes from source files.
150
+ - **`Read`** -- Used to read voice guides, component files, and string constant files.
151
+ - **`Write`** -- Used to generate voice guide drafts when none exists.
152
+ - **`emit_interaction`** -- Used to present findings and request confirmation on bulk terminology changes.
153
+
154
+ ## Success Criteria
155
+
156
+ - All user-facing strings in scope are audited
157
+ - Every error message is evaluated for what-happened, why, and what-to-do-next
158
+ - Terminology inconsistencies are identified with canonical term recommendations
159
+ - Specific rewrites are provided for every error and warning finding
160
+ - Rewrites preserve semantic meaning and i18n compatibility
161
+ - Voice guide exists (found or generated) with actionable patterns
162
+ - Report follows structured format with severity classification
163
+
164
+ ## Examples
165
+
166
+ ### Example: React Application with Vague Error Messages
167
+
168
+ ```
169
+ Phase 1: DISCOVER
170
+ Scanned: 34 components, 2 string files, 1 i18n bundle
171
+ Found: 89 strings (18 errors, 32 labels, 14 help text, 25 other)
172
+ Voice guide: not found (will generate draft)
173
+
174
+ Phase 2: AUDIT
175
+ [UXC-ERR-001] src/components/CheckoutForm.tsx:78
176
+ "Payment failed" -- missing context and recovery step
177
+ [UXC-ERR-002] src/components/SignupForm.tsx:33
178
+ "Invalid email" -- blame language, no guidance
179
+ [UXC-WARN-001] Terminology inconsistency:
180
+ "Shopping cart" (3 files) vs "Cart" (5 files) vs "Basket" (1 file)
181
+ [UXC-WARN-002] src/components/EmptyOrders.tsx:12
182
+ "No orders" -- empty state missing guidance on what to do
183
+
184
+ Phase 3: GUIDE
185
+ Rewrite: "Payment failed" ->
186
+ "Your payment didn't go through. Please check your card details and try again, or use a different payment method."
187
+ Rewrite: "Invalid email" ->
188
+ "Please enter a valid email address, like name@example.com."
189
+ Terminology: Standardize on "Cart" (most frequent, shortest)
190
+ Generated: VOICE.md draft with friendly-professional tone
191
+
192
+ Phase 4: VALIDATE
193
+ All rewrites preserve original meaning: YES
194
+ i18n interpolation variables intact: YES
195
+ Length constraints met: 1 warning (payment rewrite exceeds toast limit, suggest truncated variant)
196
+ Result: NEEDS_ATTENTION -- 2 errors, 2 warnings
197
+ ```
198
+
199
+ ### Example: Vue.js SaaS Dashboard with Existing Voice Guide
200
+
201
+ ```
202
+ Phase 1: DISCOVER
203
+ Voice guide found: docs/VOICE.md (professional, empathetic, action-oriented)
204
+ Scanned: 52 components, 4 string files
205
+ Scope: PR diff (8 changed files, 14 new/modified strings)
206
+
207
+ Phase 2: AUDIT
208
+ [UXC-ERR-001] src/views/Settings.vue:145
209
+ "Error: 403 Forbidden" -- exposes HTTP status, no user context
210
+ [UXC-WARN-001] src/views/Dashboard.vue:67
211
+ "Click here to learn more" -- vague CTA, accessibility concern
212
+ [UXC-INFO-001] src/components/Sidebar.vue:23
213
+ "Organisations" -- British spelling, rest of app uses American English
214
+
215
+ Phase 3: GUIDE
216
+ Rewrite: "Error: 403 Forbidden" ->
217
+ "You don't have permission to change these settings. Ask your workspace admin to update your role."
218
+ Rewrite: "Click here to learn more" ->
219
+ "Learn how to configure integrations"
220
+ Consistency: Standardize on American English per voice guide
221
+
222
+ Phase 4: VALIDATE
223
+ All rewrites align with VOICE.md tone: YES
224
+ Result: NEEDS_ATTENTION -- 1 error, 1 warning, 1 info
225
+ ```
226
+
227
+ ### Example: Next.js E-commerce with i18n (next-intl)
228
+
229
+ ```
230
+ Phase 1: DISCOVER
231
+ i18n framework: next-intl (detected via next.config.js and messages/ directory)
232
+ Locales: en, es, fr, de
233
+ Scanned: messages/en.json (312 keys)
234
+ Scope: --scope errors
235
+
236
+ Phase 2: AUDIT
237
+ [UXC-ERR-001] messages/en.json -> errors.generic
238
+ "Something went wrong" -- no context, no recovery
239
+ [UXC-ERR-002] messages/en.json -> errors.network
240
+ "Network error" -- technical, no user action
241
+ [UXC-ERR-003] messages/en.json -> checkout.cardDeclined
242
+ "Your card was declined" -- blame language
243
+
244
+ Phase 3: GUIDE
245
+ Rewrite: errors.generic ->
246
+ "Something unexpected happened on our end. Please try again, or contact support if the problem continues."
247
+ Rewrite: errors.network ->
248
+ "We're having trouble connecting. Please check your internet connection and try again."
249
+ Rewrite: checkout.cardDeclined ->
250
+ "This card couldn't be processed. Please try a different card or contact your bank."
251
+ Note: All rewrites use {variable} interpolation compatible with next-intl
252
+
253
+ Phase 4: VALIDATE
254
+ Interpolation variables preserved: YES (no variables in affected keys)
255
+ Translator review needed: YES (3 keys modified, flag for es/fr/de update)
256
+ Result: NEEDS_ATTENTION -- 3 errors requiring translator coordination
257
+ ```
258
+
259
+ ## Gates
260
+
261
+ - **No rewrite may change semantic meaning.** If a recommended rewrite alters what the user understands about the situation or available actions, it is rejected. Rewrites improve clarity and tone, not content.
262
+ - **No breaking i18n interpolation.** Rewrites must preserve all interpolation variables exactly as they appear in the original string. A rewrite that drops `{count}` or renames `{{userName}}` is invalid.
263
+ - **No applying bulk changes without confirmation.** When a terminology standardization affects more than 5 files, present the change list and wait for human confirmation before recommending the batch edit.
264
+ - **No generating a voice guide that contradicts an existing one.** If a voice guide exists, recommendations must align with it. If the guide itself has problems, flag them separately rather than overriding.
265
+
266
+ ## Escalation
267
+
268
+ - **When the voice guide conflicts with accessibility best practices:** Flag the conflict. Accessibility requirements take precedence over voice guide preferences. Example: the guide says "use playful language for errors" but playful error messages can confuse screen reader users. Recommend a voice guide amendment.
269
+ - **When terminology standardization has brand implications:** If the inconsistency involves brand-specific terms (product names, feature names), do not auto-recommend. Present the variants and escalate to the product team: "Found 3 variants of the product tier name. This needs a product decision."
270
+ - **When rewrites significantly increase string length:** If a rewrite exceeds UI constraints and cannot be shortened without losing critical information, flag the constraint: "This error message needs more space than the current toast component allows. Consider using an inline error or expanding the toast max-width."
271
+ - **When error messages require backend changes:** If an error message improvement requires the backend to send more specific error codes or context, document the dependency: "Improving this message requires the API to distinguish between 'card declined' and 'card expired' -- currently both return PAYMENT_FAILED."
@@ -0,0 +1,77 @@
1
+ name: harness-ux-copy
2
+ version: "1.0.0"
3
+ description: Microcopy auditing, error message quality, voice/tone guides, and UI string consistency
4
+ cognitive_mode: advisory-guide
5
+ triggers:
6
+ - manual
7
+ - on_pr
8
+ - on_review
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-ux-copy
22
+ args:
23
+ - name: path
24
+ description: Project root path
25
+ required: false
26
+ - name: scope
27
+ description: "Audit scope: all, errors, labels, onboarding, help. Defaults to all."
28
+ required: false
29
+ - name: voice-guide
30
+ description: Path to a custom voice/tone guide file
31
+ required: false
32
+ mcp:
33
+ tool: run_skill
34
+ input:
35
+ skill: harness-ux-copy
36
+ path: string
37
+ type: rigid
38
+ tier: 3
39
+ internal: false
40
+ keywords:
41
+ - UX copy
42
+ - microcopy
43
+ - error messages
44
+ - voice
45
+ - tone
46
+ - UI text
47
+ - labels
48
+ - onboarding
49
+ - help text
50
+ - style guide
51
+ - content design
52
+ - UX writing
53
+ stack_signals:
54
+ - "src/**/components/**"
55
+ - "src/**/messages*"
56
+ - "src/**/strings*"
57
+ - "src/**/i18n/**"
58
+ - "src/**/copy*"
59
+ - "VOICE.md"
60
+ - "STYLE.md"
61
+ phases:
62
+ - name: discover
63
+ description: Locate UI string sources, voice guides, and component text across the project
64
+ required: true
65
+ - name: audit
66
+ description: Evaluate microcopy against voice/tone consistency, clarity, and error message quality
67
+ required: true
68
+ - name: guide
69
+ description: Produce recommendations for string improvements, pattern standardization, and voice alignment
70
+ required: true
71
+ - name: validate
72
+ description: Verify recommended changes preserve meaning, match voice guide, and maintain i18n compatibility
73
+ required: true
74
+ state:
75
+ persistent: false
76
+ files: []
77
+ depends_on: []
@@ -291,6 +291,41 @@ When verifying a bug fix, apply this extended protocol:
291
291
 
292
292
  If step 4 passes (test does not fail without the fix), the test is not a valid regression test. It does not catch the bug. Rewrite it.
293
293
 
294
+ ## Evidence Requirements
295
+
296
+ This skill is the primary evidence producer in the workflow. Every pass/fail assertion in the verification report MUST include concrete evidence. The words "should", "probably", and "seems to" are already forbidden by the Iron Law -- this section defines HOW to cite evidence.
297
+
298
+ Every verification claim MUST use one of:
299
+
300
+ 1. **File reference:** `file:line` format with observed content (e.g., `src/services/user-service.ts:42` -- "create method validates email format before insert")
301
+ 2. **Test output:** Include the actual test command and its complete output:
302
+ ```
303
+ $ npx vitest run src/services/user-service.test.ts
304
+ PASS src/services/user-service.test.ts
305
+ UserService
306
+ create (4 tests)
307
+ list (3 tests)
308
+ expiry (2 tests)
309
+ Tests: 9 passed, 9 total
310
+ ```
311
+ 3. **Harness output:** Include full `harness validate` and `harness check-deps` output
312
+ 4. **Anti-pattern scan output:** Include the actual grep/search command and results (or absence of results)
313
+ 5. **Import chain evidence:** Include the actual import statements found when verifying WIRED level
314
+ 6. **Session evidence:** Write to the `evidence` session section for each verification level:
315
+ ```json
316
+ manage_state({
317
+ action: "append_entry",
318
+ session: "<current-session>",
319
+ section: "evidence",
320
+ authorSkill: "harness-verification",
321
+ content: "[EXISTS:PASS] src/services/user-service.ts (189 lines) -- verified via direct file read"
322
+ })
323
+ ```
324
+
325
+ **When to cite:** At every verification level. Level 1 (EXISTS) cites file reads. Level 2 (SUBSTANTIVE) cites specific line content. Level 3 (WIRED) cites import statements, test execution output, and harness check output. The verification report format already requires `[PASS]`/`[FAIL]` markers -- each marker must be accompanied by the evidence that produced it.
326
+
327
+ **Uncited claims:** ANY verification assertion without direct evidence is a verification failure, not merely an uncited claim. This skill does not use `[UNVERIFIED]` -- if evidence cannot be produced, the verdict is FAIL or INCOMPLETE.
328
+
294
329
  ## Harness Integration
295
330
 
296
331
  - **`harness validate`** — Run in Level 3 WIRED check. Verifies project-wide health and constraint compliance.
@@ -26,6 +26,7 @@ mcp:
26
26
  skill: harness-verification
27
27
  path: string
28
28
  type: rigid
29
+ tier: 2
29
30
  phases:
30
31
  - name: check
31
32
  description: Run all harness validation commands
@@ -23,6 +23,7 @@ mcp:
23
23
  skill: harness-verify
24
24
  path: string
25
25
  type: rigid
26
+ tier: 2
26
27
  cognitive_mode: meticulous-verifier
27
28
  phases:
28
29
  - name: detect