agentic-qe 3.4.0 → 3.4.2

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 (498) hide show
  1. package/.claude/skills/.validation/README.md +111 -0
  2. package/.claude/skills/.validation/examples/chaos-engineering-output.example.json +530 -0
  3. package/.claude/skills/.validation/examples/performance-testing-output.example.json +252 -0
  4. package/.claude/skills/.validation/examples/security-testing-output.example.json +413 -0
  5. package/.claude/skills/.validation/examples/testability-scoring-output.example.json +350 -0
  6. package/.claude/skills/.validation/schemas/skill-eval.schema.json +452 -0
  7. package/.claude/skills/.validation/schemas/skill-frontmatter.schema.json +341 -0
  8. package/.claude/skills/.validation/schemas/skill-output-meta.schema.json +199 -0
  9. package/.claude/skills/.validation/schemas/skill-output.template.json +610 -0
  10. package/.claude/skills/.validation/skill-validation-mcp-integration.md +250 -0
  11. package/.claude/skills/.validation/templates/eval.template.yaml +366 -0
  12. package/.claude/skills/.validation/templates/schemas/output.json +145 -0
  13. package/.claude/skills/.validation/templates/security-testing-eval.template.yaml +725 -0
  14. package/.claude/skills/.validation/templates/skill-frontmatter.example.yaml +225 -0
  15. package/.claude/skills/.validation/templates/validate.template.sh +1060 -0
  16. package/.claude/skills/.validation/templates/validator-lib.sh +1031 -0
  17. package/.claude/skills/.validation/test-data/invalid-output.json +5 -0
  18. package/.claude/skills/.validation/test-data/minimal-output.json +9 -0
  19. package/.claude/skills/.validation/test-data/sample-output.json +73 -0
  20. package/.claude/skills/TRUST-TIERS.md +158 -0
  21. package/.claude/skills/a11y-ally/SKILL.md +1664 -1658
  22. package/.claude/skills/a11y-ally/evals/a11y-ally.yaml +376 -0
  23. package/.claude/skills/a11y-ally/schemas/output.json +549 -0
  24. package/.claude/skills/a11y-ally/scripts/validate.sh +690 -0
  25. package/.claude/skills/accessibility-testing/SKILL.md +8 -1
  26. package/.claude/skills/accessibility-testing/evals/accessibility-testing.yaml +719 -0
  27. package/.claude/skills/accessibility-testing/schemas/output.json +776 -0
  28. package/.claude/skills/accessibility-testing/scripts/validate.sh +943 -0
  29. package/.claude/skills/accessibility-testing/test-data/sample-output.json +191 -0
  30. package/.claude/skills/agentic-quality-engineering/SKILL.md +4 -0
  31. package/.claude/skills/agentic-quality-engineering/schemas/output.json +577 -0
  32. package/.claude/skills/api-testing-patterns/SKILL.md +5 -0
  33. package/.claude/skills/api-testing-patterns/evals/api-testing-patterns.yaml +696 -0
  34. package/.claude/skills/api-testing-patterns/schemas/output.json +845 -0
  35. package/.claude/skills/api-testing-patterns/scripts/validate.sh +931 -0
  36. package/.claude/skills/aqe-v2-v3-migration/schemas/output.json +513 -0
  37. package/.claude/skills/aqe-v2-v3-migration/skill.md +4 -0
  38. package/.claude/skills/brutal-honesty-review/SKILL.md +5 -0
  39. package/.claude/skills/brutal-honesty-review/schemas/output.json +291 -0
  40. package/.claude/skills/brutal-honesty-review/scripts/validate.sh +130 -0
  41. package/.claude/skills/bug-reporting-excellence/SKILL.md +5 -0
  42. package/.claude/skills/bug-reporting-excellence/schemas/output.json +288 -0
  43. package/.claude/skills/bug-reporting-excellence/scripts/validate.sh +108 -0
  44. package/.claude/skills/chaos-engineering-resilience/SKILL.md +5 -0
  45. package/.claude/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -0
  46. package/.claude/skills/chaos-engineering-resilience/schemas/output.json +1205 -0
  47. package/.claude/skills/chaos-engineering-resilience/scripts/validate.sh +1107 -0
  48. package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +6 -0
  49. package/.claude/skills/cicd-pipeline-qe-orchestrator/evals/cicd-pipeline-qe-orchestrator.yaml +157 -0
  50. package/.claude/skills/cicd-pipeline-qe-orchestrator/schemas/output.json +542 -0
  51. package/.claude/skills/cicd-pipeline-qe-orchestrator/scripts/validate.sh +310 -0
  52. package/.claude/skills/code-review-quality/SKILL.md +5 -0
  53. package/.claude/skills/code-review-quality/schemas/output.json +264 -0
  54. package/.claude/skills/code-review-quality/scripts/validate.sh +113 -0
  55. package/.claude/skills/compatibility-testing/evals/compatibility-testing.yaml +410 -0
  56. package/.claude/skills/compatibility-testing/schemas/output.json +551 -0
  57. package/.claude/skills/compatibility-testing/scripts/validate.sh +605 -0
  58. package/.claude/skills/compliance-testing/SKILL.md +7 -0
  59. package/.claude/skills/compliance-testing/evals/compliance-testing.yaml +1107 -0
  60. package/.claude/skills/compliance-testing/schemas/output.json +845 -0
  61. package/.claude/skills/compliance-testing/scripts/validate.sh +888 -0
  62. package/.claude/skills/consultancy-practices/SKILL.md +4 -0
  63. package/.claude/skills/consultancy-practices/schemas/output.json +282 -0
  64. package/.claude/skills/context-driven-testing/SKILL.md +3 -0
  65. package/.claude/skills/contract-testing/SKILL.md +5 -0
  66. package/.claude/skills/contract-testing/evals/contract-testing.yaml +748 -0
  67. package/.claude/skills/contract-testing/schemas/output.json +638 -0
  68. package/.claude/skills/contract-testing/scripts/validate.sh +1033 -0
  69. package/.claude/skills/database-testing/SKILL.md +5 -0
  70. package/.claude/skills/database-testing/evals/database-testing.yaml +968 -0
  71. package/.claude/skills/database-testing/schemas/output.json +1446 -0
  72. package/.claude/skills/database-testing/scripts/validate.sh +1099 -0
  73. package/.claude/skills/exploratory-testing-advanced/SKILL.md +3 -0
  74. package/.claude/skills/holistic-testing-pact/SKILL.md +3 -0
  75. package/.claude/skills/localization-testing/SKILL.md +6 -0
  76. package/.claude/skills/localization-testing/evals/localization-testing.yaml +544 -0
  77. package/.claude/skills/localization-testing/schemas/output.json +325 -0
  78. package/.claude/skills/localization-testing/scripts/validate.sh +131 -0
  79. package/.claude/skills/mobile-testing/SKILL.md +6 -0
  80. package/.claude/skills/mobile-testing/evals/mobile-testing.yaml +537 -0
  81. package/.claude/skills/mobile-testing/schemas/output.json +318 -0
  82. package/.claude/skills/mobile-testing/scripts/validate.sh +127 -0
  83. package/.claude/skills/mutation-testing/SKILL.md +8 -1
  84. package/.claude/skills/mutation-testing/evals/mutation-testing.yaml +652 -0
  85. package/.claude/skills/mutation-testing/schemas/output.json +707 -0
  86. package/.claude/skills/mutation-testing/scripts/validate.sh +992 -0
  87. package/.claude/skills/mutation-testing/test-data/sample-output.json +295 -0
  88. package/.claude/skills/n8n-expression-testing/SKILL.md +6 -0
  89. package/.claude/skills/n8n-expression-testing/evals/n8n-expression-testing.yaml +450 -0
  90. package/.claude/skills/n8n-expression-testing/schemas/output.json +369 -0
  91. package/.claude/skills/n8n-expression-testing/scripts/validate.sh +162 -0
  92. package/.claude/skills/n8n-integration-testing-patterns/SKILL.md +6 -0
  93. package/.claude/skills/n8n-integration-testing-patterns/evals/n8n-integration-testing-patterns.yaml +522 -0
  94. package/.claude/skills/n8n-integration-testing-patterns/schemas/output.json +291 -0
  95. package/.claude/skills/n8n-integration-testing-patterns/scripts/validate.sh +104 -0
  96. package/.claude/skills/n8n-security-testing/SKILL.md +6 -0
  97. package/.claude/skills/n8n-security-testing/evals/n8n-security-testing.yaml +493 -0
  98. package/.claude/skills/n8n-security-testing/schemas/output.json +293 -0
  99. package/.claude/skills/n8n-security-testing/scripts/validate.sh +120 -0
  100. package/.claude/skills/n8n-trigger-testing-strategies/SKILL.md +6 -0
  101. package/.claude/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +500 -0
  102. package/.claude/skills/n8n-trigger-testing-strategies/schemas/output.json +295 -0
  103. package/.claude/skills/n8n-trigger-testing-strategies/scripts/validate.sh +121 -0
  104. package/.claude/skills/n8n-workflow-testing-fundamentals/SKILL.md +6 -0
  105. package/.claude/skills/n8n-workflow-testing-fundamentals/evals/n8n-workflow-testing-fundamentals.yaml +497 -0
  106. package/.claude/skills/n8n-workflow-testing-fundamentals/schemas/output.json +254 -0
  107. package/.claude/skills/n8n-workflow-testing-fundamentals/scripts/validate.sh +126 -0
  108. package/.claude/skills/performance-analysis/SKILL.md +6 -0
  109. package/.claude/skills/performance-analysis/evals/performance-analysis.yaml +144 -0
  110. package/.claude/skills/performance-analysis/schemas/output.json +588 -0
  111. package/.claude/skills/performance-analysis/scripts/validate.sh +63 -0
  112. package/.claude/skills/performance-testing/SKILL.md +5 -0
  113. package/.claude/skills/performance-testing/evals/performance-testing.yaml +772 -0
  114. package/.claude/skills/performance-testing/schemas/output.json +1184 -0
  115. package/.claude/skills/performance-testing/scripts/validate.sh +1090 -0
  116. package/.claude/skills/qcsd-ideation-swarm/SKILL.md +1759 -1753
  117. package/.claude/skills/qcsd-ideation-swarm/evals/qcsd-ideation-swarm.yaml +138 -0
  118. package/.claude/skills/qcsd-ideation-swarm/schemas/output.json +568 -0
  119. package/.claude/skills/qcsd-ideation-swarm/scripts/validate.sh +56 -0
  120. package/.claude/skills/qe-chaos-resilience/SKILL.md +6 -0
  121. package/.claude/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +443 -0
  122. package/.claude/skills/qe-chaos-resilience/schemas/output.json +314 -0
  123. package/.claude/skills/qe-chaos-resilience/scripts/validate.sh +401 -0
  124. package/.claude/skills/qe-code-intelligence/SKILL.md +6 -0
  125. package/.claude/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +459 -0
  126. package/.claude/skills/qe-code-intelligence/schemas/output.json +315 -0
  127. package/.claude/skills/qe-code-intelligence/scripts/validate.sh +408 -0
  128. package/.claude/skills/qe-contract-testing/SKILL.md +6 -0
  129. package/.claude/skills/qe-contract-testing/evals/qe-contract-testing.yaml +513 -0
  130. package/.claude/skills/qe-contract-testing/schemas/output.json +295 -0
  131. package/.claude/skills/qe-contract-testing/scripts/validate.sh +421 -0
  132. package/.claude/skills/qe-coverage-analysis/SKILL.md +6 -0
  133. package/.claude/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +494 -0
  134. package/.claude/skills/qe-coverage-analysis/schemas/output.json +286 -0
  135. package/.claude/skills/qe-coverage-analysis/scripts/validate.sh +453 -0
  136. package/.claude/skills/qe-defect-intelligence/SKILL.md +6 -0
  137. package/.claude/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +511 -0
  138. package/.claude/skills/qe-defect-intelligence/schemas/output.json +283 -0
  139. package/.claude/skills/qe-defect-intelligence/scripts/validate.sh +466 -0
  140. package/.claude/skills/qe-iterative-loop/SKILL.md +445 -440
  141. package/.claude/skills/qe-iterative-loop/schemas/output.json +264 -0
  142. package/.claude/skills/qe-iterative-loop/scripts/validate.sh +474 -0
  143. package/.claude/skills/qe-learning-optimization/SKILL.md +6 -0
  144. package/.claude/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +144 -0
  145. package/.claude/skills/qe-learning-optimization/schemas/output.json +288 -0
  146. package/.claude/skills/qe-learning-optimization/scripts/validate.sh +56 -0
  147. package/.claude/skills/qe-quality-assessment/SKILL.md +6 -0
  148. package/.claude/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +506 -0
  149. package/.claude/skills/qe-quality-assessment/schemas/output.json +550 -0
  150. package/.claude/skills/qe-quality-assessment/scripts/validate.sh +352 -0
  151. package/.claude/skills/qe-requirements-validation/SKILL.md +6 -0
  152. package/.claude/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +598 -0
  153. package/.claude/skills/qe-requirements-validation/schemas/output.json +587 -0
  154. package/.claude/skills/qe-requirements-validation/scripts/validate.sh +275 -0
  155. package/.claude/skills/qe-security-compliance/SKILL.md +6 -0
  156. package/.claude/skills/qe-security-compliance/evals/qe-security-compliance.yaml +595 -0
  157. package/.claude/skills/qe-security-compliance/schemas/output.json +498 -0
  158. package/.claude/skills/qe-security-compliance/scripts/validate.sh +305 -0
  159. package/.claude/skills/qe-test-execution/SKILL.md +6 -0
  160. package/.claude/skills/qe-test-execution/evals/qe-test-execution.yaml +607 -0
  161. package/.claude/skills/qe-test-execution/schemas/output.json +529 -0
  162. package/.claude/skills/qe-test-execution/scripts/validate.sh +323 -0
  163. package/.claude/skills/qe-test-generation/SKILL.md +6 -0
  164. package/.claude/skills/qe-test-generation/evals/qe-test-generation.yaml +148 -0
  165. package/.claude/skills/qe-test-generation/schemas/output.json +439 -0
  166. package/.claude/skills/qe-test-generation/scripts/validate.sh +56 -0
  167. package/.claude/skills/qe-visual-accessibility/SKILL.md +6 -0
  168. package/.claude/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +142 -0
  169. package/.claude/skills/qe-visual-accessibility/schemas/output.json +491 -0
  170. package/.claude/skills/qe-visual-accessibility/scripts/validate.sh +56 -0
  171. package/.claude/skills/quality-metrics/SKILL.md +6 -0
  172. package/.claude/skills/quality-metrics/evals/quality-metrics.yaml +494 -0
  173. package/.claude/skills/quality-metrics/schemas/output.json +403 -0
  174. package/.claude/skills/quality-metrics/scripts/validate.sh +434 -0
  175. package/.claude/skills/refactoring-patterns/SKILL.md +5 -0
  176. package/.claude/skills/refactoring-patterns/schemas/output.json +475 -0
  177. package/.claude/skills/refactoring-patterns/scripts/validate.sh +241 -0
  178. package/.claude/skills/regression-testing/SKILL.md +6 -0
  179. package/.claude/skills/regression-testing/evals/regression-testing.yaml +504 -0
  180. package/.claude/skills/regression-testing/schemas/output.json +311 -0
  181. package/.claude/skills/regression-testing/scripts/validate.sh +130 -0
  182. package/.claude/skills/risk-based-testing/SKILL.md +6 -0
  183. package/.claude/skills/risk-based-testing/evals/risk-based-testing.yaml +141 -0
  184. package/.claude/skills/risk-based-testing/schemas/output.json +480 -0
  185. package/.claude/skills/risk-based-testing/scripts/validate.sh +56 -0
  186. package/.claude/skills/security-testing/SKILL.md +5 -0
  187. package/.claude/skills/security-testing/evals/security-testing.yaml +789 -0
  188. package/.claude/skills/security-testing/schemas/output.json +879 -0
  189. package/.claude/skills/security-testing/scripts/validate.sh +967 -0
  190. package/.claude/skills/security-visual-testing/SKILL.md +223 -217
  191. package/.claude/skills/security-visual-testing/evals/security-visual-testing.yaml +163 -0
  192. package/.claude/skills/security-visual-testing/schemas/output.json +486 -0
  193. package/.claude/skills/security-visual-testing/scripts/validate.sh +748 -0
  194. package/.claude/skills/sherlock-review/SKILL.md +5 -0
  195. package/.claude/skills/sherlock-review/schemas/output.json +297 -0
  196. package/.claude/skills/sherlock-review/scripts/validate.sh +115 -0
  197. package/.claude/skills/shift-left-testing/SKILL.md +6 -0
  198. package/.claude/skills/shift-left-testing/evals/shift-left-testing.yaml +145 -0
  199. package/.claude/skills/shift-left-testing/schemas/output.json +459 -0
  200. package/.claude/skills/shift-left-testing/scripts/validate.sh +56 -0
  201. package/.claude/skills/shift-right-testing/SKILL.md +6 -0
  202. package/.claude/skills/shift-right-testing/evals/shift-right-testing.yaml +147 -0
  203. package/.claude/skills/shift-right-testing/schemas/output.json +418 -0
  204. package/.claude/skills/shift-right-testing/scripts/validate.sh +56 -0
  205. package/.claude/skills/six-thinking-hats/SKILL.md +3 -0
  206. package/.claude/skills/tdd-london-chicago/SKILL.md +5 -0
  207. package/.claude/skills/tdd-london-chicago/schemas/output.json +444 -0
  208. package/.claude/skills/tdd-london-chicago/scripts/validate.sh +214 -0
  209. package/.claude/skills/technical-writing/SKILL.md +4 -0
  210. package/.claude/skills/technical-writing/schemas/output.json +268 -0
  211. package/.claude/skills/test-automation-strategy/SKILL.md +6 -0
  212. package/.claude/skills/test-automation-strategy/evals/test-automation-strategy.yaml +148 -0
  213. package/.claude/skills/test-automation-strategy/schemas/output.json +444 -0
  214. package/.claude/skills/test-automation-strategy/scripts/validate.sh +195 -0
  215. package/.claude/skills/test-data-management/SKILL.md +6 -0
  216. package/.claude/skills/test-data-management/evals/test-data-management.yaml +504 -0
  217. package/.claude/skills/test-data-management/schemas/output.json +284 -0
  218. package/.claude/skills/test-data-management/scripts/validate.sh +137 -0
  219. package/.claude/skills/test-design-techniques/SKILL.md +6 -0
  220. package/.claude/skills/test-design-techniques/evals/test-design-techniques.yaml +142 -0
  221. package/.claude/skills/test-design-techniques/schemas/output.json +295 -0
  222. package/.claude/skills/test-design-techniques/scripts/validate.sh +91 -0
  223. package/.claude/skills/test-environment-management/SKILL.md +4 -0
  224. package/.claude/skills/test-environment-management/schemas/output.json +310 -0
  225. package/.claude/skills/test-reporting-analytics/SKILL.md +6 -0
  226. package/.claude/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +155 -0
  227. package/.claude/skills/test-reporting-analytics/schemas/output.json +329 -0
  228. package/.claude/skills/test-reporting-analytics/scripts/validate.sh +77 -0
  229. package/.claude/skills/testability-scoring/SKILL.md +5 -0
  230. package/.claude/skills/testability-scoring/evals/testability-scoring.yaml +814 -0
  231. package/.claude/skills/testability-scoring/schemas/output.json +606 -0
  232. package/.claude/skills/testability-scoring/scripts/validate.sh +891 -0
  233. package/.claude/skills/trust-tier-manifest.json +2333 -0
  234. package/.claude/skills/verification-quality/SKILL.md +6 -0
  235. package/.claude/skills/verification-quality/evals/verification-quality.yaml +150 -0
  236. package/.claude/skills/verification-quality/schemas/output.json +432 -0
  237. package/.claude/skills/verification-quality/scripts/validate.sh +77 -0
  238. package/.claude/skills/visual-testing-advanced/SKILL.md +6 -0
  239. package/.claude/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +154 -0
  240. package/.claude/skills/visual-testing-advanced/schemas/output.json +294 -0
  241. package/.claude/skills/visual-testing-advanced/scripts/validate.sh +77 -0
  242. package/.claude/skills/xp-practices/SKILL.md +3 -0
  243. package/CHANGELOG.md +23 -0
  244. package/README.md +39 -2
  245. package/package.json +4 -1
  246. package/scripts/run-skill-eval.ts +1097 -0
  247. package/scripts/test-schema-validation.js +301 -0
  248. package/scripts/update-skill-manifest.ts +751 -0
  249. package/scripts/validate-skill-frontmatter.js +141 -0
  250. package/v3/CHANGELOG.md +21 -0
  251. package/v3/README.md +43 -3
  252. package/v3/assets/agents/v3/qe-test-idea-rewriter.md +375 -375
  253. package/v3/assets/skills/.validation/README.md +111 -0
  254. package/v3/assets/skills/.validation/examples/chaos-engineering-output.example.json +530 -0
  255. package/v3/assets/skills/.validation/examples/performance-testing-output.example.json +252 -0
  256. package/v3/assets/skills/.validation/examples/security-testing-output.example.json +413 -0
  257. package/v3/assets/skills/.validation/examples/testability-scoring-output.example.json +350 -0
  258. package/v3/assets/skills/.validation/schemas/skill-eval.schema.json +452 -0
  259. package/v3/assets/skills/.validation/schemas/skill-frontmatter.schema.json +341 -0
  260. package/v3/assets/skills/.validation/schemas/skill-output-meta.schema.json +199 -0
  261. package/v3/assets/skills/.validation/schemas/skill-output.template.json +610 -0
  262. package/v3/assets/skills/.validation/skill-validation-mcp-integration.md +250 -0
  263. package/v3/assets/skills/.validation/templates/eval.template.yaml +366 -0
  264. package/v3/assets/skills/.validation/templates/schemas/output.json +145 -0
  265. package/v3/assets/skills/.validation/templates/security-testing-eval.template.yaml +725 -0
  266. package/v3/assets/skills/.validation/templates/skill-frontmatter.example.yaml +225 -0
  267. package/v3/assets/skills/.validation/templates/validate.template.sh +1060 -0
  268. package/v3/assets/skills/.validation/templates/validator-lib.sh +1031 -0
  269. package/v3/assets/skills/.validation/test-data/invalid-output.json +5 -0
  270. package/v3/assets/skills/.validation/test-data/minimal-output.json +9 -0
  271. package/v3/assets/skills/.validation/test-data/sample-output.json +73 -0
  272. package/v3/assets/skills/accessibility-testing/SKILL.md +8 -1
  273. package/v3/assets/skills/accessibility-testing/evals/accessibility-testing.yaml +719 -0
  274. package/v3/assets/skills/accessibility-testing/schemas/output.json +776 -0
  275. package/v3/assets/skills/accessibility-testing/scripts/validate.sh +943 -0
  276. package/v3/assets/skills/accessibility-testing/test-data/sample-output.json +191 -0
  277. package/v3/assets/skills/agentic-quality-engineering/SKILL.md +4 -0
  278. package/v3/assets/skills/agentic-quality-engineering/schemas/output.json +577 -0
  279. package/v3/assets/skills/api-testing-patterns/SKILL.md +5 -0
  280. package/v3/assets/skills/api-testing-patterns/evals/api-testing-patterns.yaml +696 -0
  281. package/v3/assets/skills/api-testing-patterns/schemas/output.json +845 -0
  282. package/v3/assets/skills/api-testing-patterns/scripts/validate.sh +931 -0
  283. package/v3/assets/skills/aqe-v2-v3-migration/schemas/output.json +513 -0
  284. package/v3/assets/skills/aqe-v2-v3-migration/skill.md +20 -16
  285. package/v3/assets/skills/bug-reporting-excellence/SKILL.md +5 -0
  286. package/v3/assets/skills/bug-reporting-excellence/schemas/output.json +288 -0
  287. package/v3/assets/skills/bug-reporting-excellence/scripts/validate.sh +108 -0
  288. package/v3/assets/skills/chaos-engineering-resilience/SKILL.md +5 -0
  289. package/v3/assets/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -0
  290. package/v3/assets/skills/chaos-engineering-resilience/schemas/output.json +1205 -0
  291. package/v3/assets/skills/chaos-engineering-resilience/scripts/validate.sh +1107 -0
  292. package/v3/assets/skills/code-review-quality/SKILL.md +5 -0
  293. package/v3/assets/skills/code-review-quality/schemas/output.json +264 -0
  294. package/v3/assets/skills/code-review-quality/scripts/validate.sh +113 -0
  295. package/v3/assets/skills/compatibility-testing/evals/compatibility-testing.yaml +410 -0
  296. package/v3/assets/skills/compatibility-testing/schemas/output.json +551 -0
  297. package/v3/assets/skills/compatibility-testing/scripts/validate.sh +605 -0
  298. package/v3/assets/skills/compliance-testing/SKILL.md +7 -0
  299. package/v3/assets/skills/compliance-testing/evals/compliance-testing.yaml +1107 -0
  300. package/v3/assets/skills/compliance-testing/schemas/output.json +845 -0
  301. package/v3/assets/skills/compliance-testing/scripts/validate.sh +888 -0
  302. package/v3/assets/skills/consultancy-practices/SKILL.md +4 -0
  303. package/v3/assets/skills/consultancy-practices/schemas/output.json +282 -0
  304. package/v3/assets/skills/context-driven-testing/SKILL.md +3 -0
  305. package/v3/assets/skills/contract-testing/SKILL.md +5 -0
  306. package/v3/assets/skills/contract-testing/evals/contract-testing.yaml +748 -0
  307. package/v3/assets/skills/contract-testing/schemas/output.json +638 -0
  308. package/v3/assets/skills/contract-testing/scripts/validate.sh +1033 -0
  309. package/v3/assets/skills/database-testing/SKILL.md +5 -0
  310. package/v3/assets/skills/database-testing/evals/database-testing.yaml +968 -0
  311. package/v3/assets/skills/database-testing/schemas/output.json +1446 -0
  312. package/v3/assets/skills/database-testing/scripts/validate.sh +1099 -0
  313. package/v3/assets/skills/exploratory-testing-advanced/SKILL.md +3 -0
  314. package/v3/assets/skills/holistic-testing-pact/SKILL.md +3 -0
  315. package/v3/assets/skills/localization-testing/SKILL.md +6 -0
  316. package/v3/assets/skills/localization-testing/evals/localization-testing.yaml +544 -0
  317. package/v3/assets/skills/localization-testing/schemas/output.json +325 -0
  318. package/v3/assets/skills/localization-testing/scripts/validate.sh +131 -0
  319. package/v3/assets/skills/mobile-testing/SKILL.md +6 -0
  320. package/v3/assets/skills/mobile-testing/evals/mobile-testing.yaml +537 -0
  321. package/v3/assets/skills/mobile-testing/schemas/output.json +318 -0
  322. package/v3/assets/skills/mobile-testing/scripts/validate.sh +127 -0
  323. package/v3/assets/skills/mutation-testing/SKILL.md +8 -1
  324. package/v3/assets/skills/mutation-testing/evals/mutation-testing.yaml +652 -0
  325. package/v3/assets/skills/mutation-testing/schemas/output.json +707 -0
  326. package/v3/assets/skills/mutation-testing/scripts/validate.sh +992 -0
  327. package/v3/assets/skills/mutation-testing/test-data/sample-output.json +295 -0
  328. package/v3/assets/skills/n8n-expression-testing/scripts/validate.sh +162 -0
  329. package/v3/assets/skills/n8n-integration-testing-patterns/scripts/validate.sh +104 -0
  330. package/v3/assets/skills/n8n-security-testing/scripts/validate.sh +120 -0
  331. package/v3/assets/skills/n8n-trigger-testing-strategies/scripts/validate.sh +121 -0
  332. package/v3/assets/skills/n8n-workflow-testing-fundamentals/scripts/validate.sh +126 -0
  333. package/v3/assets/skills/performance-testing/SKILL.md +5 -0
  334. package/v3/assets/skills/performance-testing/evals/performance-testing.yaml +772 -0
  335. package/v3/assets/skills/performance-testing/schemas/output.json +1184 -0
  336. package/v3/assets/skills/performance-testing/scripts/validate.sh +1090 -0
  337. package/v3/assets/skills/qe-chaos-resilience/SKILL.md +6 -0
  338. package/v3/assets/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +443 -0
  339. package/v3/assets/skills/qe-chaos-resilience/schemas/output.json +314 -0
  340. package/v3/assets/skills/qe-chaos-resilience/scripts/validate.sh +401 -0
  341. package/v3/assets/skills/qe-code-intelligence/SKILL.md +6 -0
  342. package/v3/assets/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +459 -0
  343. package/v3/assets/skills/qe-code-intelligence/schemas/output.json +315 -0
  344. package/v3/assets/skills/qe-code-intelligence/scripts/validate.sh +408 -0
  345. package/v3/assets/skills/qe-contract-testing/SKILL.md +6 -0
  346. package/v3/assets/skills/qe-contract-testing/evals/qe-contract-testing.yaml +513 -0
  347. package/v3/assets/skills/qe-contract-testing/schemas/output.json +295 -0
  348. package/v3/assets/skills/qe-contract-testing/scripts/validate.sh +421 -0
  349. package/v3/assets/skills/qe-coverage-analysis/SKILL.md +6 -0
  350. package/v3/assets/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +494 -0
  351. package/v3/assets/skills/qe-coverage-analysis/schemas/output.json +286 -0
  352. package/v3/assets/skills/qe-coverage-analysis/scripts/validate.sh +453 -0
  353. package/v3/assets/skills/qe-defect-intelligence/SKILL.md +6 -0
  354. package/v3/assets/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +511 -0
  355. package/v3/assets/skills/qe-defect-intelligence/schemas/output.json +283 -0
  356. package/v3/assets/skills/qe-defect-intelligence/scripts/validate.sh +466 -0
  357. package/v3/assets/skills/qe-iterative-loop/SKILL.md +445 -443
  358. package/v3/assets/skills/qe-iterative-loop/schemas/output.json +264 -0
  359. package/v3/assets/skills/qe-iterative-loop/scripts/validate.sh +474 -0
  360. package/v3/assets/skills/qe-learning-optimization/SKILL.md +6 -0
  361. package/v3/assets/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +144 -0
  362. package/v3/assets/skills/qe-learning-optimization/schemas/output.json +288 -0
  363. package/v3/assets/skills/qe-learning-optimization/scripts/validate.sh +56 -0
  364. package/v3/assets/skills/qe-quality-assessment/SKILL.md +6 -0
  365. package/v3/assets/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +506 -0
  366. package/v3/assets/skills/qe-quality-assessment/schemas/output.json +550 -0
  367. package/v3/assets/skills/qe-quality-assessment/scripts/validate.sh +352 -0
  368. package/v3/assets/skills/qe-requirements-validation/SKILL.md +6 -0
  369. package/v3/assets/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +598 -0
  370. package/v3/assets/skills/qe-requirements-validation/schemas/output.json +587 -0
  371. package/v3/assets/skills/qe-requirements-validation/scripts/validate.sh +275 -0
  372. package/v3/assets/skills/qe-security-compliance/SKILL.md +6 -0
  373. package/v3/assets/skills/qe-security-compliance/evals/qe-security-compliance.yaml +595 -0
  374. package/v3/assets/skills/qe-security-compliance/schemas/output.json +498 -0
  375. package/v3/assets/skills/qe-security-compliance/scripts/validate.sh +305 -0
  376. package/v3/assets/skills/qe-test-execution/SKILL.md +6 -0
  377. package/v3/assets/skills/qe-test-execution/evals/qe-test-execution.yaml +607 -0
  378. package/v3/assets/skills/qe-test-execution/schemas/output.json +529 -0
  379. package/v3/assets/skills/qe-test-execution/scripts/validate.sh +323 -0
  380. package/v3/assets/skills/qe-test-generation/SKILL.md +6 -0
  381. package/v3/assets/skills/qe-test-generation/evals/qe-test-generation.yaml +148 -0
  382. package/v3/assets/skills/qe-test-generation/schemas/output.json +439 -0
  383. package/v3/assets/skills/qe-test-generation/scripts/validate.sh +56 -0
  384. package/v3/assets/skills/qe-visual-accessibility/SKILL.md +6 -0
  385. package/v3/assets/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +142 -0
  386. package/v3/assets/skills/qe-visual-accessibility/schemas/output.json +491 -0
  387. package/v3/assets/skills/qe-visual-accessibility/scripts/validate.sh +56 -0
  388. package/v3/assets/skills/quality-metrics/SKILL.md +6 -0
  389. package/v3/assets/skills/quality-metrics/evals/quality-metrics.yaml +494 -0
  390. package/v3/assets/skills/quality-metrics/schemas/output.json +403 -0
  391. package/v3/assets/skills/quality-metrics/scripts/validate.sh +434 -0
  392. package/v3/assets/skills/refactoring-patterns/SKILL.md +5 -0
  393. package/v3/assets/skills/refactoring-patterns/schemas/output.json +475 -0
  394. package/v3/assets/skills/refactoring-patterns/scripts/validate.sh +241 -0
  395. package/v3/assets/skills/regression-testing/SKILL.md +6 -0
  396. package/v3/assets/skills/regression-testing/evals/regression-testing.yaml +504 -0
  397. package/v3/assets/skills/regression-testing/schemas/output.json +311 -0
  398. package/v3/assets/skills/regression-testing/scripts/validate.sh +130 -0
  399. package/v3/assets/skills/risk-based-testing/SKILL.md +6 -0
  400. package/v3/assets/skills/risk-based-testing/evals/risk-based-testing.yaml +141 -0
  401. package/v3/assets/skills/risk-based-testing/schemas/output.json +480 -0
  402. package/v3/assets/skills/risk-based-testing/scripts/validate.sh +56 -0
  403. package/v3/assets/skills/security-testing/SKILL.md +5 -0
  404. package/v3/assets/skills/security-testing/evals/security-testing.yaml +789 -0
  405. package/v3/assets/skills/security-testing/schemas/output.json +879 -0
  406. package/v3/assets/skills/security-testing/scripts/validate.sh +967 -0
  407. package/v3/assets/skills/shift-left-testing/SKILL.md +6 -0
  408. package/v3/assets/skills/shift-left-testing/evals/shift-left-testing.yaml +145 -0
  409. package/v3/assets/skills/shift-left-testing/schemas/output.json +459 -0
  410. package/v3/assets/skills/shift-left-testing/scripts/validate.sh +56 -0
  411. package/v3/assets/skills/shift-right-testing/SKILL.md +6 -0
  412. package/v3/assets/skills/shift-right-testing/evals/shift-right-testing.yaml +147 -0
  413. package/v3/assets/skills/shift-right-testing/schemas/output.json +418 -0
  414. package/v3/assets/skills/shift-right-testing/scripts/validate.sh +56 -0
  415. package/v3/assets/skills/six-thinking-hats/SKILL.md +3 -0
  416. package/v3/assets/skills/tdd-london-chicago/SKILL.md +5 -0
  417. package/v3/assets/skills/tdd-london-chicago/schemas/output.json +444 -0
  418. package/v3/assets/skills/tdd-london-chicago/scripts/validate.sh +214 -0
  419. package/v3/assets/skills/technical-writing/SKILL.md +4 -0
  420. package/v3/assets/skills/technical-writing/schemas/output.json +268 -0
  421. package/v3/assets/skills/test-automation-strategy/SKILL.md +6 -0
  422. package/v3/assets/skills/test-automation-strategy/evals/test-automation-strategy.yaml +148 -0
  423. package/v3/assets/skills/test-automation-strategy/schemas/output.json +444 -0
  424. package/v3/assets/skills/test-automation-strategy/scripts/validate.sh +195 -0
  425. package/v3/assets/skills/test-data-management/SKILL.md +6 -0
  426. package/v3/assets/skills/test-data-management/evals/test-data-management.yaml +504 -0
  427. package/v3/assets/skills/test-data-management/schemas/output.json +284 -0
  428. package/v3/assets/skills/test-data-management/scripts/validate.sh +137 -0
  429. package/v3/assets/skills/test-design-techniques/SKILL.md +6 -0
  430. package/v3/assets/skills/test-design-techniques/evals/test-design-techniques.yaml +142 -0
  431. package/v3/assets/skills/test-design-techniques/schemas/output.json +295 -0
  432. package/v3/assets/skills/test-design-techniques/scripts/validate.sh +91 -0
  433. package/v3/assets/skills/test-environment-management/SKILL.md +4 -0
  434. package/v3/assets/skills/test-environment-management/schemas/output.json +310 -0
  435. package/v3/assets/skills/test-reporting-analytics/SKILL.md +6 -0
  436. package/v3/assets/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +155 -0
  437. package/v3/assets/skills/test-reporting-analytics/schemas/output.json +329 -0
  438. package/v3/assets/skills/test-reporting-analytics/scripts/validate.sh +77 -0
  439. package/v3/assets/skills/verification-quality/SKILL.md +6 -0
  440. package/v3/assets/skills/verification-quality/evals/verification-quality.yaml +150 -0
  441. package/v3/assets/skills/verification-quality/schemas/output.json +432 -0
  442. package/v3/assets/skills/verification-quality/scripts/validate.sh +77 -0
  443. package/v3/assets/skills/visual-testing-advanced/SKILL.md +6 -0
  444. package/v3/assets/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +154 -0
  445. package/v3/assets/skills/visual-testing-advanced/schemas/output.json +294 -0
  446. package/v3/assets/skills/visual-testing-advanced/scripts/validate.sh +77 -0
  447. package/v3/assets/skills/xp-practices/SKILL.md +3 -0
  448. package/v3/assets/templates/validation-report.md.hbs +139 -0
  449. package/v3/assets/templates/validation-summary.json +56 -0
  450. package/v3/dist/cli/bundle.js +11853 -5316
  451. package/v3/dist/cli/commands/eval.d.ts +18 -0
  452. package/v3/dist/cli/commands/eval.d.ts.map +1 -0
  453. package/v3/dist/cli/commands/eval.js +505 -0
  454. package/v3/dist/cli/commands/eval.js.map +1 -0
  455. package/v3/dist/cli/commands/validate-swarm.d.ts +16 -0
  456. package/v3/dist/cli/commands/validate-swarm.d.ts.map +1 -0
  457. package/v3/dist/cli/commands/validate-swarm.js +251 -0
  458. package/v3/dist/cli/commands/validate-swarm.js.map +1 -0
  459. package/v3/dist/cli/commands/validate.d.ts +14 -0
  460. package/v3/dist/cli/commands/validate.d.ts.map +1 -0
  461. package/v3/dist/cli/commands/validate.js +408 -0
  462. package/v3/dist/cli/commands/validate.js.map +1 -0
  463. package/v3/dist/cli/index.js +6 -0
  464. package/v3/dist/cli/index.js.map +1 -1
  465. package/v3/dist/index.d.ts +2 -0
  466. package/v3/dist/index.d.ts.map +1 -1
  467. package/v3/dist/index.js +10 -0
  468. package/v3/dist/index.js.map +1 -1
  469. package/v3/dist/init/skills-installer.d.ts +6 -0
  470. package/v3/dist/init/skills-installer.d.ts.map +1 -1
  471. package/v3/dist/init/skills-installer.js +48 -0
  472. package/v3/dist/init/skills-installer.js.map +1 -1
  473. package/v3/dist/learning/index.d.ts +2 -0
  474. package/v3/dist/learning/index.d.ts.map +1 -1
  475. package/v3/dist/learning/index.js +4 -0
  476. package/v3/dist/learning/index.js.map +1 -1
  477. package/v3/dist/learning/skill-validation-learner.d.ts +264 -0
  478. package/v3/dist/learning/skill-validation-learner.d.ts.map +1 -0
  479. package/v3/dist/learning/skill-validation-learner.js +515 -0
  480. package/v3/dist/learning/skill-validation-learner.js.map +1 -0
  481. package/v3/dist/mcp/bundle.js +10043 -3630
  482. package/v3/dist/validation/index.d.ts +19 -0
  483. package/v3/dist/validation/index.d.ts.map +1 -0
  484. package/v3/dist/validation/index.js +31 -0
  485. package/v3/dist/validation/index.js.map +1 -0
  486. package/v3/dist/validation/parallel-eval-runner.d.ts +307 -0
  487. package/v3/dist/validation/parallel-eval-runner.d.ts.map +1 -0
  488. package/v3/dist/validation/parallel-eval-runner.js +566 -0
  489. package/v3/dist/validation/parallel-eval-runner.js.map +1 -0
  490. package/v3/dist/validation/swarm-skill-validator.d.ts +282 -0
  491. package/v3/dist/validation/swarm-skill-validator.d.ts.map +1 -0
  492. package/v3/dist/validation/swarm-skill-validator.js +460 -0
  493. package/v3/dist/validation/swarm-skill-validator.js.map +1 -0
  494. package/v3/dist/validation/validation-result-aggregator.d.ts +232 -0
  495. package/v3/dist/validation/validation-result-aggregator.d.ts.map +1 -0
  496. package/v3/dist/validation/validation-result-aggregator.js +630 -0
  497. package/v3/dist/validation/validation-result-aggregator.js.map +1 -0
  498. package/v3/package.json +1 -1
@@ -0,0 +1,751 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * Update Skill Manifest
4
+ * ADR-056: Auto-updates skills-manifest.json with trust tiers
5
+ *
6
+ * Usage:
7
+ * npx tsx scripts/update-skill-manifest.ts
8
+ * npx tsx scripts/update-skill-manifest.ts --skill security-testing
9
+ * npx tsx scripts/update-skill-manifest.ts --generate-badges
10
+ * npx tsx scripts/update-skill-manifest.ts --dry-run
11
+ * npx tsx scripts/update-skill-manifest.ts --verbose
12
+ */
13
+
14
+ import { readFileSync, writeFileSync, existsSync, readdirSync, statSync } from 'fs';
15
+ import { join, dirname } from 'path';
16
+
17
+ // ============================================================================
18
+ // TYPES
19
+ // ============================================================================
20
+
21
+ interface ValidationConfig {
22
+ schemaPath?: string;
23
+ validatorPath?: string;
24
+ evalPath?: string;
25
+ lastValidated?: string;
26
+ status: 'passing' | 'failing' | 'unknown' | 'skipped';
27
+ passRate?: number;
28
+ criticalPassRate?: number;
29
+ }
30
+
31
+ interface SkillManifestEntry {
32
+ name: string;
33
+ description?: string;
34
+ category?: string;
35
+ trustTier: number;
36
+ validation: ValidationConfig;
37
+ file: string;
38
+ tokenEstimate?: number;
39
+ tags?: string[];
40
+ priority?: string;
41
+ lastUpdated?: string;
42
+ }
43
+
44
+ interface TrustTierSummary {
45
+ tier0: number;
46
+ tier1: number;
47
+ tier2: number;
48
+ tier3: number;
49
+ total: number;
50
+ }
51
+
52
+ interface SkillManifestOutput {
53
+ version: string;
54
+ generatedAt: string;
55
+ generator: string;
56
+ trustTierPolicy: string;
57
+ skills: SkillManifestEntry[];
58
+ summary: TrustTierSummary;
59
+ validationStatus: {
60
+ passing: number;
61
+ failing: number;
62
+ unknown: number;
63
+ skipped: number;
64
+ };
65
+ }
66
+
67
+ interface FrontmatterData {
68
+ name?: string;
69
+ description?: string;
70
+ category?: string;
71
+ priority?: string;
72
+ tokenEstimate?: number;
73
+ tags?: string[];
74
+ trust_tier?: number;
75
+ last_optimized?: string;
76
+ last_updated?: string;
77
+ validation?: {
78
+ schema_path?: string;
79
+ validator_path?: string;
80
+ eval_path?: string;
81
+ last_validated?: string;
82
+ validation_status?: string;
83
+ pass_rate?: number;
84
+ critical_pass_rate?: number;
85
+ };
86
+ }
87
+
88
+ // ============================================================================
89
+ // CONSTANTS
90
+ // ============================================================================
91
+
92
+ const SKILLS_DIR = '.claude/skills';
93
+ const MANIFEST_PATH = '.claude/skills/skills-manifest.json';
94
+ const TRUST_TIERS_PATH = '.claude/skills/TRUST-TIERS.md';
95
+ const VERSION = '2.0.0';
96
+
97
+ // Trust tier descriptions for documentation
98
+ const TRUST_TIER_DESCRIPTIONS: Record<number, string> = {
99
+ 0: 'Advisory - SKILL.md only, no validation',
100
+ 1: 'Structured - Has JSON output schema',
101
+ 2: 'Validated - Has executable validator script',
102
+ 3: 'Verified - Has evaluation test suite'
103
+ };
104
+
105
+ // ============================================================================
106
+ // YAML FRONTMATTER PARSER
107
+ // ============================================================================
108
+
109
+ /**
110
+ * Simple YAML frontmatter parser
111
+ * Handles the most common YAML structures in SKILL.md files
112
+ */
113
+ function parseYamlFrontmatter(content: string): FrontmatterData {
114
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
115
+ if (!frontmatterMatch) return {};
116
+
117
+ const yamlContent = frontmatterMatch[1];
118
+ const result: FrontmatterData = {};
119
+
120
+ // Parse line by line
121
+ const lines = yamlContent.split('\n');
122
+ let currentKey: string | null = null;
123
+ let currentIndent = 0;
124
+ let inNestedObject = false;
125
+ let nestedKey = '';
126
+ let nestedObject: Record<string, unknown> = {};
127
+
128
+ for (const line of lines) {
129
+ // Skip empty lines and comments
130
+ if (!line.trim() || line.trim().startsWith('#')) continue;
131
+
132
+ // Detect indentation
133
+ const indent = line.search(/\S/);
134
+ const trimmedLine = line.trim();
135
+
136
+ // Handle nested objects
137
+ if (indent > 0 && inNestedObject) {
138
+ const nestedMatch = trimmedLine.match(/^(\w+):\s*(.*)$/);
139
+ if (nestedMatch) {
140
+ const [, key, value] = nestedMatch;
141
+ nestedObject[key] = parseYamlValue(value);
142
+ }
143
+ continue;
144
+ }
145
+
146
+ // Check if we're exiting a nested object
147
+ if (indent === 0 && inNestedObject) {
148
+ (result as Record<string, unknown>)[nestedKey] = nestedObject;
149
+ inNestedObject = false;
150
+ nestedObject = {};
151
+ }
152
+
153
+ // Parse key-value pairs
154
+ const match = trimmedLine.match(/^(\w+):\s*(.*)$/);
155
+ if (match) {
156
+ const [, key, value] = match;
157
+ currentKey = key;
158
+ currentIndent = indent;
159
+
160
+ if (!value || value.trim() === '') {
161
+ // Start of nested object or array
162
+ if (key === 'validation') {
163
+ inNestedObject = true;
164
+ nestedKey = key;
165
+ nestedObject = {};
166
+ }
167
+ } else {
168
+ (result as Record<string, unknown>)[key] = parseYamlValue(value);
169
+ }
170
+ }
171
+ }
172
+
173
+ // Handle any remaining nested object
174
+ if (inNestedObject) {
175
+ (result as Record<string, unknown>)[nestedKey] = nestedObject;
176
+ }
177
+
178
+ return result;
179
+ }
180
+
181
+ /**
182
+ * Parse a YAML value to its appropriate type
183
+ */
184
+ function parseYamlValue(value: string): unknown {
185
+ const trimmed = value.trim();
186
+
187
+ // Handle quoted strings
188
+ if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
189
+ (trimmed.startsWith("'") && trimmed.endsWith("'"))) {
190
+ return trimmed.slice(1, -1);
191
+ }
192
+
193
+ // Handle arrays (inline format)
194
+ if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
195
+ const inner = trimmed.slice(1, -1);
196
+ return inner.split(',').map(item => {
197
+ const t = item.trim();
198
+ if ((t.startsWith('"') && t.endsWith('"')) || (t.startsWith("'") && t.endsWith("'"))) {
199
+ return t.slice(1, -1);
200
+ }
201
+ return parseYamlValue(t);
202
+ });
203
+ }
204
+
205
+ // Handle booleans
206
+ if (trimmed === 'true') return true;
207
+ if (trimmed === 'false') return false;
208
+
209
+ // Handle null
210
+ if (trimmed === 'null' || trimmed === '~') return null;
211
+
212
+ // Handle numbers
213
+ const num = Number(trimmed);
214
+ if (!isNaN(num) && trimmed !== '') return num;
215
+
216
+ return trimmed;
217
+ }
218
+
219
+ // ============================================================================
220
+ // SKILL DISCOVERY AND ANALYSIS
221
+ // ============================================================================
222
+
223
+ /**
224
+ * Get the project root directory
225
+ */
226
+ function getProjectRoot(): string {
227
+ let dir = process.cwd();
228
+ while (dir !== '/') {
229
+ if (existsSync(join(dir, 'package.json'))) {
230
+ return dir;
231
+ }
232
+ dir = dirname(dir);
233
+ }
234
+ return process.cwd();
235
+ }
236
+
237
+ /**
238
+ * Extract trust tier and validation info from SKILL.md frontmatter
239
+ */
240
+ function extractSkillInfo(skillDir: string, skillName: string): SkillManifestEntry | null {
241
+ const skillMdPath = join(skillDir, 'SKILL.md');
242
+ if (!existsSync(skillMdPath)) {
243
+ // Check for lowercase skill.md
244
+ const altPath = join(skillDir, 'skill.md');
245
+ if (!existsSync(altPath)) return null;
246
+ }
247
+
248
+ const content = readFileSync(
249
+ existsSync(skillMdPath) ? skillMdPath : join(skillDir, 'skill.md'),
250
+ 'utf-8'
251
+ );
252
+
253
+ const frontmatter = parseYamlFrontmatter(content);
254
+
255
+ // Determine trust tier based on available validation files
256
+ let trustTier = frontmatter.trust_tier ?? 0;
257
+ const validation: ValidationConfig = {
258
+ status: 'unknown'
259
+ };
260
+
261
+ // Check for schema
262
+ const schemaPath = join(skillDir, 'schemas', 'output.json');
263
+ if (existsSync(schemaPath)) {
264
+ validation.schemaPath = 'schemas/output.json';
265
+ if (trustTier < 1) trustTier = 1;
266
+ }
267
+
268
+ // Check for validator script
269
+ const validatorPaths = [
270
+ join(skillDir, 'scripts', 'validate.sh'),
271
+ join(skillDir, 'scripts', 'validate.ts'),
272
+ join(skillDir, 'scripts', 'validate.js')
273
+ ];
274
+ for (const vPath of validatorPaths) {
275
+ if (existsSync(vPath)) {
276
+ validation.validatorPath = vPath.replace(skillDir + '/', '');
277
+ if (trustTier < 2) trustTier = 2;
278
+ break;
279
+ }
280
+ }
281
+
282
+ // Check for eval suite
283
+ const evalsDir = join(skillDir, 'evals');
284
+ if (existsSync(evalsDir)) {
285
+ const evalFiles = readdirSync(evalsDir).filter(f =>
286
+ f.endsWith('.yaml') || f.endsWith('.yml')
287
+ );
288
+ if (evalFiles.length > 0) {
289
+ validation.evalPath = `evals/${evalFiles[0]}`;
290
+ if (trustTier < 3) trustTier = 3;
291
+ }
292
+ }
293
+
294
+ // Use explicit trust_tier from frontmatter if it's lower (manual override)
295
+ if (frontmatter.trust_tier !== undefined && frontmatter.trust_tier < trustTier) {
296
+ trustTier = frontmatter.trust_tier;
297
+ }
298
+
299
+ // Determine validation status
300
+ if (frontmatter.validation?.validation_status) {
301
+ validation.status = frontmatter.validation.validation_status as ValidationConfig['status'];
302
+ } else if (validation.schemaPath && validation.validatorPath && validation.evalPath) {
303
+ validation.status = 'passing'; // Assume passing if all files exist
304
+ } else if (validation.schemaPath || validation.validatorPath) {
305
+ validation.status = 'unknown';
306
+ } else {
307
+ validation.status = 'skipped';
308
+ }
309
+
310
+ // Get last validated date
311
+ if (frontmatter.validation?.last_validated) {
312
+ validation.lastValidated = frontmatter.validation.last_validated;
313
+ }
314
+
315
+ // Get pass rates if available
316
+ if (frontmatter.validation?.pass_rate !== undefined) {
317
+ validation.passRate = frontmatter.validation.pass_rate;
318
+ }
319
+ if (frontmatter.validation?.critical_pass_rate !== undefined) {
320
+ validation.criticalPassRate = frontmatter.validation.critical_pass_rate;
321
+ }
322
+
323
+ // Build the entry
324
+ const entry: SkillManifestEntry = {
325
+ name: skillName,
326
+ description: frontmatter.description,
327
+ category: frontmatter.category,
328
+ trustTier,
329
+ validation,
330
+ file: `${skillName}/SKILL.md`,
331
+ tokenEstimate: frontmatter.tokenEstimate,
332
+ tags: frontmatter.tags as string[] | undefined,
333
+ priority: frontmatter.priority,
334
+ lastUpdated: frontmatter.last_optimized || frontmatter.last_updated
335
+ };
336
+
337
+ return entry;
338
+ }
339
+
340
+ /**
341
+ * Scan all skills and build manifest
342
+ */
343
+ function buildManifest(projectRoot: string, filterSkill?: string): SkillManifestOutput {
344
+ const skillsPath = join(projectRoot, SKILLS_DIR);
345
+ const skills: SkillManifestEntry[] = [];
346
+
347
+ if (!existsSync(skillsPath)) {
348
+ console.error(`Skills directory not found: ${skillsPath}`);
349
+ process.exit(1);
350
+ }
351
+
352
+ // Get all skill directories
353
+ const entries = readdirSync(skillsPath);
354
+ const skillDirs = entries.filter(entry => {
355
+ const fullPath = join(skillsPath, entry);
356
+ // Skip hidden directories, files, and special directories
357
+ if (entry.startsWith('.')) return false;
358
+ if (!statSync(fullPath).isDirectory()) return false;
359
+ // Must have a SKILL.md or skill.md
360
+ return existsSync(join(fullPath, 'SKILL.md')) || existsSync(join(fullPath, 'skill.md'));
361
+ });
362
+
363
+ for (const skillName of skillDirs) {
364
+ // Apply filter if specified
365
+ if (filterSkill && skillName !== filterSkill) continue;
366
+
367
+ const skillDir = join(skillsPath, skillName);
368
+ const skillInfo = extractSkillInfo(skillDir, skillName);
369
+
370
+ if (skillInfo) {
371
+ skills.push(skillInfo);
372
+ }
373
+ }
374
+
375
+ // Sort by trust tier (descending) then name
376
+ skills.sort((a, b) => {
377
+ if (b.trustTier !== a.trustTier) return b.trustTier - a.trustTier;
378
+ return a.name.localeCompare(b.name);
379
+ });
380
+
381
+ // Calculate summary
382
+ const summary: TrustTierSummary = {
383
+ tier0: 0,
384
+ tier1: 0,
385
+ tier2: 0,
386
+ tier3: 0,
387
+ total: skills.length
388
+ };
389
+
390
+ const validationStatus = {
391
+ passing: 0,
392
+ failing: 0,
393
+ unknown: 0,
394
+ skipped: 0
395
+ };
396
+
397
+ for (const skill of skills) {
398
+ switch (skill.trustTier) {
399
+ case 0: summary.tier0++; break;
400
+ case 1: summary.tier1++; break;
401
+ case 2: summary.tier2++; break;
402
+ case 3: summary.tier3++; break;
403
+ }
404
+
405
+ switch (skill.validation.status) {
406
+ case 'passing': validationStatus.passing++; break;
407
+ case 'failing': validationStatus.failing++; break;
408
+ case 'unknown': validationStatus.unknown++; break;
409
+ case 'skipped': validationStatus.skipped++; break;
410
+ }
411
+ }
412
+
413
+ return {
414
+ version: VERSION,
415
+ generatedAt: new Date().toISOString(),
416
+ generator: 'scripts/update-skill-manifest.ts',
417
+ trustTierPolicy: 'ADR-056',
418
+ skills,
419
+ summary,
420
+ validationStatus
421
+ };
422
+ }
423
+
424
+ // ============================================================================
425
+ // BADGE GENERATION
426
+ // ============================================================================
427
+
428
+ /**
429
+ * Generate trust tier badges markdown
430
+ */
431
+ function generateBadges(manifest: SkillManifestOutput): string {
432
+ const { summary, validationStatus, skills } = manifest;
433
+
434
+ // Get tier 3 skills for the table
435
+ const tier3Skills = skills.filter(s => s.trustTier === 3);
436
+ const tier2Skills = skills.filter(s => s.trustTier === 2);
437
+ const tier1Skills = skills.filter(s => s.trustTier === 1);
438
+
439
+ const badge = (label: string, value: number, color: string) =>
440
+ `![${label}](https://img.shields.io/badge/${encodeURIComponent(label)}-${value}-${color})`;
441
+
442
+ return `# Trust Tier Badges
443
+
444
+ > Generated: ${new Date().toISOString()}
445
+ > Policy: ADR-056 - Trust But Verify
446
+
447
+ ## Overview
448
+
449
+ ${badge('Tier 3 (Verified)', summary.tier3, 'brightgreen')}
450
+ ${badge('Tier 2 (Validated)', summary.tier2, 'green')}
451
+ ${badge('Tier 1 (Structured)', summary.tier1, 'yellow')}
452
+ ${badge('Tier 0 (Advisory)', summary.tier0, 'lightgrey')}
453
+
454
+ **Total Skills**: ${summary.total}
455
+
456
+ ## Trust Tier Distribution
457
+
458
+ | Tier | Count | Description |
459
+ |------|-------|-------------|
460
+ | 3 - Verified | ${summary.tier3} | Full evaluation test suite |
461
+ | 2 - Validated | ${summary.tier2} | Has executable validator |
462
+ | 1 - Structured | ${summary.tier1} | Has JSON output schema |
463
+ | 0 - Advisory | ${summary.tier0} | SKILL.md only |
464
+
465
+ ## Validation Status
466
+
467
+ | Status | Count |
468
+ |--------|-------|
469
+ | Passing | ${validationStatus.passing} |
470
+ | Failing | ${validationStatus.failing} |
471
+ | Unknown | ${validationStatus.unknown} |
472
+ | Skipped | ${validationStatus.skipped} |
473
+
474
+ ---
475
+
476
+ ## Tier 3 Skills (Fully Verified)
477
+
478
+ These skills have complete validation infrastructure: JSON schema, validator script, and evaluation test suite.
479
+
480
+ | Skill | Category | Schema | Validator | Eval Suite | Status |
481
+ |-------|----------|--------|-----------|------------|--------|
482
+ ${tier3Skills.map(s => {
483
+ const schema = s.validation.schemaPath ? '`schemas/output.json`' : '-';
484
+ const validator = s.validation.validatorPath ? '`' + s.validation.validatorPath + '`' : '-';
485
+ const evalSuite = s.validation.evalPath ? '`' + s.validation.evalPath + '`' : '-';
486
+ const status = s.validation.status === 'passing' ? 'Passing' :
487
+ s.validation.status === 'failing' ? 'Failing' :
488
+ s.validation.status === 'unknown' ? 'Unknown' : 'Skipped';
489
+ return `| ${s.name} | ${s.category || '-'} | ${schema} | ${validator} | ${evalSuite} | ${status} |`;
490
+ }).join('\n')}
491
+
492
+ ---
493
+
494
+ ## Tier 2 Skills (Validated)
495
+
496
+ These skills have a validator script but no evaluation test suite yet.
497
+
498
+ | Skill | Category | Schema | Validator | Status |
499
+ |-------|----------|--------|-----------|--------|
500
+ ${tier2Skills.map(s => {
501
+ const schema = s.validation.schemaPath ? '`schemas/output.json`' : '-';
502
+ const validator = s.validation.validatorPath ? '`' + s.validation.validatorPath + '`' : '-';
503
+ const status = s.validation.status === 'passing' ? 'Passing' :
504
+ s.validation.status === 'failing' ? 'Failing' :
505
+ s.validation.status === 'unknown' ? 'Unknown' : 'Skipped';
506
+ return `| ${s.name} | ${s.category || '-'} | ${schema} | ${validator} | ${status} |`;
507
+ }).join('\n') || '| (none) | - | - | - | - |'}
508
+
509
+ ---
510
+
511
+ ## Tier 1 Skills (Structured)
512
+
513
+ These skills have a JSON output schema but no validator yet.
514
+
515
+ | Skill | Category | Schema |
516
+ |-------|----------|--------|
517
+ ${tier1Skills.map(s => {
518
+ const schema = s.validation.schemaPath ? '`schemas/output.json`' : '-';
519
+ return `| ${s.name} | ${s.category || '-'} | ${schema} |`;
520
+ }).join('\n') || '| (none) | - | - |'}
521
+
522
+ ---
523
+
524
+ ## Upgrading Skills
525
+
526
+ To upgrade a skill to a higher trust tier:
527
+
528
+ ### Tier 0 -> Tier 1 (Add Schema)
529
+ 1. Create \`{skill}/schemas/output.json\` with JSON Schema
530
+ 2. Add \`trust_tier: 1\` to frontmatter
531
+ 3. Run \`npx tsx scripts/update-skill-manifest.ts\`
532
+
533
+ ### Tier 1 -> Tier 2 (Add Validator)
534
+ 1. Create \`{skill}/scripts/validate.sh\` (or .ts/.js)
535
+ 2. Add \`trust_tier: 2\` and validation paths to frontmatter
536
+ 3. Run \`npx tsx scripts/update-skill-manifest.ts\`
537
+
538
+ ### Tier 2 -> Tier 3 (Add Evals)
539
+ 1. Create \`{skill}/evals/{skill}.yaml\` with test cases
540
+ 2. Add \`trust_tier: 3\` and eval_path to frontmatter
541
+ 3. Run \`npx tsx scripts/update-skill-manifest.ts\`
542
+
543
+ ---
544
+
545
+ ## CI Integration
546
+
547
+ Add this to your GitHub Actions workflow:
548
+
549
+ \`\`\`yaml
550
+ - name: Validate Skill Manifest
551
+ run: npx tsx scripts/update-skill-manifest.ts --dry-run
552
+
553
+ - name: Check Tier 3 Skills Pass
554
+ run: |
555
+ for skill in api-testing-patterns security-testing performance-testing; do
556
+ .claude/skills/\$skill/scripts/validate.sh --self-test
557
+ done
558
+ \`\`\`
559
+
560
+ ---
561
+
562
+ *Generated by update-skill-manifest.ts per ADR-056*
563
+ `;
564
+ }
565
+
566
+ // ============================================================================
567
+ // MAIN
568
+ // ============================================================================
569
+
570
+ function printUsage() {
571
+ console.log(`
572
+ Update Skill Manifest - ADR-056 Trust Tier Management
573
+
574
+ Usage:
575
+ npx tsx scripts/update-skill-manifest.ts [options]
576
+
577
+ Options:
578
+ --skill <name> Only process a specific skill
579
+ --generate-badges Generate TRUST-TIERS.md badges file
580
+ --dry-run Print manifest without writing files
581
+ --verbose Enable verbose output
582
+ --help Show this help message
583
+
584
+ Examples:
585
+ npx tsx scripts/update-skill-manifest.ts
586
+ npx tsx scripts/update-skill-manifest.ts --skill security-testing
587
+ npx tsx scripts/update-skill-manifest.ts --generate-badges
588
+ npx tsx scripts/update-skill-manifest.ts --dry-run --verbose
589
+ `);
590
+ }
591
+
592
+ function main() {
593
+ const args = process.argv.slice(2);
594
+
595
+ // Parse arguments
596
+ let filterSkill: string | undefined;
597
+ let generateBadgesFlag = false;
598
+ let dryRun = false;
599
+ let verbose = false;
600
+
601
+ for (let i = 0; i < args.length; i++) {
602
+ switch (args[i]) {
603
+ case '--skill':
604
+ filterSkill = args[++i];
605
+ break;
606
+ case '--generate-badges':
607
+ generateBadgesFlag = true;
608
+ break;
609
+ case '--dry-run':
610
+ dryRun = true;
611
+ break;
612
+ case '--verbose':
613
+ case '-v':
614
+ verbose = true;
615
+ break;
616
+ case '--help':
617
+ case '-h':
618
+ printUsage();
619
+ process.exit(0);
620
+ default:
621
+ if (args[i].startsWith('-')) {
622
+ console.error(`Unknown option: ${args[i]}`);
623
+ printUsage();
624
+ process.exit(1);
625
+ }
626
+ }
627
+ }
628
+
629
+ const projectRoot = getProjectRoot();
630
+
631
+ if (verbose) {
632
+ console.log(`Project root: ${projectRoot}`);
633
+ console.log(`Skills directory: ${join(projectRoot, SKILLS_DIR)}`);
634
+ if (filterSkill) console.log(`Filtering to skill: ${filterSkill}`);
635
+ }
636
+
637
+ // Build manifest
638
+ console.log('Scanning skills...');
639
+ const manifest = buildManifest(projectRoot, filterSkill);
640
+
641
+ // Print summary
642
+ console.log('\n=== Trust Tier Summary ===');
643
+ console.log(`Total skills: ${manifest.summary.total}`);
644
+ console.log(` Tier 3 (Verified): ${manifest.summary.tier3}`);
645
+ console.log(` Tier 2 (Validated): ${manifest.summary.tier2}`);
646
+ console.log(` Tier 1 (Structured): ${manifest.summary.tier1}`);
647
+ console.log(` Tier 0 (Advisory): ${manifest.summary.tier0}`);
648
+ console.log('\n=== Validation Status ===');
649
+ console.log(` Passing: ${manifest.validationStatus.passing}`);
650
+ console.log(` Failing: ${manifest.validationStatus.failing}`);
651
+ console.log(` Unknown: ${manifest.validationStatus.unknown}`);
652
+ console.log(` Skipped: ${manifest.validationStatus.skipped}`);
653
+
654
+ if (verbose) {
655
+ console.log('\n=== Skills by Trust Tier ===');
656
+ for (let tier = 3; tier >= 0; tier--) {
657
+ const tierSkills = manifest.skills.filter(s => s.trustTier === tier);
658
+ if (tierSkills.length > 0) {
659
+ console.log(`\nTier ${tier} (${TRUST_TIER_DESCRIPTIONS[tier]}):`);
660
+ for (const skill of tierSkills) {
661
+ console.log(` - ${skill.name} [${skill.validation.status}]`);
662
+ }
663
+ }
664
+ }
665
+ }
666
+
667
+ // Write manifest
668
+ if (!dryRun) {
669
+ // For the main manifest, we need to merge with the existing one to preserve
670
+ // category structures and other metadata
671
+ const manifestPath = join(projectRoot, MANIFEST_PATH);
672
+
673
+ // Create a trust-tier focused manifest for ADR-056
674
+ const trustTierManifest = {
675
+ '$schema': 'https://agentic-qe.dev/schemas/skill-manifest.json',
676
+ version: manifest.version,
677
+ generatedAt: manifest.generatedAt,
678
+ generator: manifest.generator,
679
+ trustTierPolicy: manifest.trustTierPolicy,
680
+ summary: manifest.summary,
681
+ validationStatus: manifest.validationStatus,
682
+ skillsByTier: {
683
+ tier3: manifest.skills.filter(s => s.trustTier === 3).map(s => ({
684
+ name: s.name,
685
+ category: s.category,
686
+ validation: s.validation,
687
+ file: s.file
688
+ })),
689
+ tier2: manifest.skills.filter(s => s.trustTier === 2).map(s => ({
690
+ name: s.name,
691
+ category: s.category,
692
+ validation: s.validation,
693
+ file: s.file
694
+ })),
695
+ tier1: manifest.skills.filter(s => s.trustTier === 1).map(s => ({
696
+ name: s.name,
697
+ category: s.category,
698
+ validation: s.validation,
699
+ file: s.file
700
+ })),
701
+ tier0: manifest.skills.filter(s => s.trustTier === 0).map(s => ({
702
+ name: s.name,
703
+ category: s.category,
704
+ file: s.file
705
+ }))
706
+ },
707
+ // Full skill list for lookup
708
+ skills: manifest.skills.reduce((acc, skill) => {
709
+ acc[skill.name] = {
710
+ trustTier: skill.trustTier,
711
+ category: skill.category,
712
+ priority: skill.priority,
713
+ validation: skill.validation,
714
+ file: skill.file,
715
+ tokenEstimate: skill.tokenEstimate,
716
+ tags: skill.tags,
717
+ lastUpdated: skill.lastUpdated
718
+ };
719
+ return acc;
720
+ }, {} as Record<string, unknown>)
721
+ };
722
+
723
+ // Write the trust tier manifest as a separate file
724
+ const trustTierManifestPath = join(projectRoot, '.claude/skills/trust-tier-manifest.json');
725
+ writeFileSync(trustTierManifestPath, JSON.stringify(trustTierManifest, null, 2));
726
+ console.log(`\nWritten: ${trustTierManifestPath}`);
727
+
728
+ // Generate badges if requested
729
+ if (generateBadgesFlag) {
730
+ const badgesPath = join(projectRoot, TRUST_TIERS_PATH);
731
+ const badges = generateBadges(manifest);
732
+ writeFileSync(badgesPath, badges);
733
+ console.log(`Written: ${badgesPath}`);
734
+ }
735
+ } else {
736
+ console.log('\n[DRY RUN] Would write:');
737
+ console.log(` - ${join(projectRoot, '.claude/skills/trust-tier-manifest.json')}`);
738
+ if (generateBadgesFlag) {
739
+ console.log(` - ${join(projectRoot, TRUST_TIERS_PATH)}`);
740
+ }
741
+
742
+ if (verbose) {
743
+ console.log('\n=== Manifest Preview ===');
744
+ console.log(JSON.stringify(manifest, null, 2));
745
+ }
746
+ }
747
+
748
+ console.log('\nDone.');
749
+ }
750
+
751
+ main();