qa360 2.1.7 → 2.2.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 (906) hide show
  1. package/.BETA_TESTING_FEEDBACK.md +256 -0
  2. package/.claude/settings.local.json +154 -0
  3. package/.editorconfig +21 -0
  4. package/.github/CODEOWNERS +23 -0
  5. package/.github/ISSUE_TEMPLATE/bug_report.yml +108 -0
  6. package/.github/ISSUE_TEMPLATE/feedback_dx.yml +121 -0
  7. package/.github/dependabot.yml +35 -0
  8. package/.github/workflows/mcp-dx.yml +106 -0
  9. package/.github/workflows/release.yml +26 -0
  10. package/.github/workflows/test.yml +93 -0
  11. package/.nvmrc +1 -0
  12. package/.qa360-artifacts/.gitkeep +0 -0
  13. package/.qa360-artifacts/baselines/.gitkeep +0 -0
  14. package/.qa360-artifacts/cache/.gitkeep +0 -0
  15. package/.qa360-artifacts/reports/.gitkeep +0 -0
  16. package/.qa360-artifacts/screenshots/.gitkeep +0 -0
  17. package/.qa360-baselines/www_xyqo_ai.baseline.json +33 -0
  18. package/CHANGELOG.md +234 -0
  19. package/CODEOWNERS +43 -0
  20. package/CONTRIBUTING.md +273 -0
  21. package/NOVICE_USER_GUIDE.md +272 -0
  22. package/QUICK_START.md +191 -0
  23. package/README.md +191 -163
  24. package/adapters/README.md +46 -0
  25. package/check-branches.sh +32 -0
  26. package/cli/.qa360/keys/ed25519.key +1 -0
  27. package/cli/.qa360/keys/ed25519.pub +1 -0
  28. package/cli/CHANGELOG.md +84 -0
  29. package/cli/LICENSE +24 -0
  30. package/cli/README.md +222 -0
  31. package/cli/examples/README.md +160 -0
  32. package/cli/package.json +76 -0
  33. package/cli/scripts/bundle-for-npm.sh +51 -0
  34. package/cli/scripts/validate-package.js +116 -0
  35. package/cli/src/__tests__/commands/doctor.test.ts +108 -0
  36. package/cli/src/__tests__/index.test.ts +15 -0
  37. package/cli/src/cli-minimal.ts +44 -0
  38. package/cli/src/commands/__tests__/crawl.test.ts +412 -0
  39. package/cli/src/commands/__tests__/doctor-qa360-home.test.ts +156 -0
  40. package/cli/src/commands/__tests__/e2e-ui-tests.test.ts +494 -0
  41. package/cli/src/commands/__tests__/e2e.test.ts +187 -0
  42. package/cli/src/commands/__tests__/flakiness.test.ts +528 -0
  43. package/cli/src/commands/__tests__/generate.test.ts +507 -0
  44. package/cli/src/commands/__tests__/history.integration.test.ts +358 -0
  45. package/cli/src/commands/__tests__/history.test.ts +433 -0
  46. package/cli/src/commands/__tests__/monitor-realworld.test.ts +199 -0
  47. package/cli/src/commands/__tests__/monitor.test.ts +81 -0
  48. package/cli/src/commands/__tests__/ollama.test.ts +529 -0
  49. package/cli/src/commands/__tests__/repair.test.ts +225 -0
  50. package/cli/src/commands/__tests__/report.integration.test.ts +167 -0
  51. package/cli/src/commands/__tests__/report.test.ts +294 -0
  52. package/cli/src/commands/__tests__/report.vitest.ts +288 -0
  53. package/cli/src/commands/__tests__/retry.test.ts +78 -0
  54. package/cli/src/commands/__tests__/run.integration.test.ts +240 -0
  55. package/cli/src/commands/__tests__/run.test.ts +346 -0
  56. package/cli/src/commands/__tests__/run.vitest.ts +301 -0
  57. package/cli/src/commands/__tests__/secrets.test.ts +114 -0
  58. package/cli/src/commands/__tests__/serve.test.ts +80 -0
  59. package/cli/src/commands/__tests__/verify.test.ts +103 -0
  60. package/cli/src/commands/ai.ts +702 -0
  61. package/cli/src/commands/ask.ts +678 -0
  62. package/cli/src/commands/coverage.ts +305 -0
  63. package/cli/src/commands/crawl.ts +155 -0
  64. package/cli/src/commands/doctor.ts +610 -0
  65. package/cli/src/commands/examples.ts +248 -0
  66. package/cli/src/commands/explain.ts +710 -0
  67. package/cli/src/commands/flakiness.ts +560 -0
  68. package/cli/src/commands/generate.ts +566 -0
  69. package/cli/src/commands/history.ts +914 -0
  70. package/cli/src/commands/init.ts +777 -0
  71. package/cli/src/commands/monitor.ts +270 -0
  72. package/cli/src/commands/ollama.ts +337 -0
  73. package/cli/src/commands/pack.ts +497 -0
  74. package/cli/src/commands/regression.ts +400 -0
  75. package/cli/src/commands/repair.ts +356 -0
  76. package/cli/src/commands/report.ts +463 -0
  77. package/cli/src/commands/retry.ts +380 -0
  78. package/cli/src/commands/run.ts +218 -0
  79. package/cli/src/commands/scan.ts +177 -0
  80. package/cli/src/commands/secrets.ts +340 -0
  81. package/cli/src/commands/serve.ts +194 -0
  82. package/cli/src/commands/slo.ts +387 -0
  83. package/cli/src/commands/verify-temp-note.md +11 -0
  84. package/cli/src/commands/verify.ts +322 -0
  85. package/cli/src/generators/index.ts +6 -0
  86. package/cli/src/generators/json-reporter.ts +15 -0
  87. package/cli/src/generators/test-generator.ts +90 -0
  88. package/cli/src/index.ts +289 -0
  89. package/cli/src/scanners/dom-scanner.ts +360 -0
  90. package/cli/src/scanners/index.ts +5 -0
  91. package/cli/src/types/scan.ts +84 -0
  92. package/cli/src/utils/config.ts +145 -0
  93. package/cli/tsconfig.bundle.json +12 -0
  94. package/cli/tsconfig.json +23 -0
  95. package/cli/vitest.config.ts +59 -0
  96. package/core/LICENSE +24 -0
  97. package/core/README.md +64 -0
  98. package/core/package.json +81 -0
  99. package/core/src/__tests__/adapters-contract/adapters-contract.test.md +156 -0
  100. package/core/src/__tests__/index.test.ts +31 -0
  101. package/core/src/__tests__/integration/phase3.test.ts +405 -0
  102. package/core/src/__tests__/pack/validator.test.ts +312 -0
  103. package/core/src/__tests__/secrets/crypto.test.ts +190 -0
  104. package/core/src/__tests__/secrets/manager.test.ts +316 -0
  105. package/core/src/__tests__/security/redactor-phase3.test.ts +233 -0
  106. package/core/src/__tests__/serve/health-checker.test.ts +155 -0
  107. package/core/src/__tests__/serve/process-manager.test.ts +213 -0
  108. package/core/src/__tests__/serve/server.test.ts +103 -0
  109. package/core/src/__tests__/vault/cas.test.ts +178 -0
  110. package/core/src/__tests__/vault/vault.test.ts +296 -0
  111. package/core/src/adapters/__tests__/fixtures/jest-coverage.json +8 -0
  112. package/core/src/adapters/__tests__/fixtures/jest-results.json +41 -0
  113. package/core/src/adapters/__tests__/fixtures/pytest-junit.xml +16 -0
  114. package/core/src/adapters/__tests__/fixtures/vitest-coverage.json +8 -0
  115. package/core/src/adapters/__tests__/fixtures/vitest-results.json +50 -0
  116. package/core/src/adapters/__tests__/gitleaks-secrets.test.ts +452 -0
  117. package/core/src/adapters/__tests__/jest-adapter.test.ts +276 -0
  118. package/core/src/adapters/__tests__/k6-perf.test.ts +538 -0
  119. package/core/src/adapters/__tests__/osv-deps.test.ts +471 -0
  120. package/core/src/adapters/__tests__/playwright-native-api.test.ts +792 -0
  121. package/core/src/adapters/__tests__/playwright-ui-e2e.test.ts +431 -0
  122. package/core/src/adapters/__tests__/playwright-ui.test.ts +1073 -0
  123. package/core/src/adapters/__tests__/pytest-adapter.test.ts +207 -0
  124. package/core/src/adapters/__tests__/semgrep-sast.test.ts +436 -0
  125. package/core/src/adapters/__tests__/vitest-adapter.test.ts +208 -0
  126. package/core/src/adapters/__tests__/zap-dast.test.ts +453 -0
  127. package/core/src/adapters/gitleaks-secrets.ts +521 -0
  128. package/core/src/adapters/jest-adapter.ts +306 -0
  129. package/core/src/adapters/k6-perf.ts +479 -0
  130. package/core/src/adapters/osv-deps.ts +467 -0
  131. package/core/src/adapters/playwright-native-adapter.ts +472 -0
  132. package/core/src/adapters/playwright-native-api.ts +619 -0
  133. package/core/src/adapters/playwright-ui.ts +1088 -0
  134. package/core/src/adapters/pytest-adapter.ts +472 -0
  135. package/core/src/adapters/semgrep-sast.ts +410 -0
  136. package/core/src/adapters/unit-test-types.ts +106 -0
  137. package/core/src/adapters/vitest-adapter.ts +295 -0
  138. package/core/src/adapters/zap-dast.ts +551 -0
  139. package/core/src/ai/__tests__/deepseek-provider.test.ts +586 -0
  140. package/core/src/ai/__tests__/ollama-provider.test.ts +641 -0
  141. package/core/src/ai/anthropic-provider.ts +262 -0
  142. package/core/src/ai/deepseek-provider.ts +315 -0
  143. package/core/src/ai/index.ts +87 -0
  144. package/core/src/ai/llm-client.ts +52 -0
  145. package/core/src/ai/mock-provider.ts +146 -0
  146. package/core/src/ai/ollama-provider.ts +269 -0
  147. package/core/src/ai/openai-provider.ts +240 -0
  148. package/core/src/ai/provider-factory.ts +408 -0
  149. package/core/src/artifacts/README.md +78 -0
  150. package/core/src/artifacts/index.ts +16 -0
  151. package/core/src/artifacts/ui-artifacts.ts +412 -0
  152. package/core/src/assertions/__tests__/engine.test.ts +360 -0
  153. package/core/src/assertions/engine.ts +577 -0
  154. package/core/src/assertions/index.ts +13 -0
  155. package/core/src/assertions/types.ts +229 -0
  156. package/core/src/auth/__tests__/api-key-provider.test.ts +282 -0
  157. package/core/src/auth/__tests__/auth-manager.test.ts +430 -0
  158. package/core/src/auth/__tests__/basic-auth-provider.test.ts +364 -0
  159. package/core/src/auth/__tests__/cloud-providers.test.ts +751 -0
  160. package/core/src/auth/__tests__/jwt-provider.test.ts +400 -0
  161. package/core/src/auth/__tests__/oauth2-provider.test.ts +383 -0
  162. package/core/src/auth/__tests__/totp-provider.test.ts +294 -0
  163. package/core/src/auth/__tests__/ui-login-provider.test.ts +323 -0
  164. package/core/src/auth/api-key-provider.ts +75 -0
  165. package/core/src/auth/aws-iam-provider.ts +212 -0
  166. package/core/src/auth/azure-ad-provider.ts +126 -0
  167. package/core/src/auth/basic-auth-provider.ts +133 -0
  168. package/core/src/auth/gcp-adc-provider.ts +146 -0
  169. package/core/src/auth/index.ts +342 -0
  170. package/core/src/auth/jwt-provider.ts +193 -0
  171. package/core/src/auth/manager.ts +281 -0
  172. package/core/src/auth/oauth2-provider.ts +141 -0
  173. package/core/src/auth/totp-provider.ts +163 -0
  174. package/core/src/auth/ui-login-provider.ts +242 -0
  175. package/core/src/cache/__tests__/lru-cache.test.ts +564 -0
  176. package/core/src/cache/index.ts +13 -0
  177. package/core/src/cache/lru-cache.ts +536 -0
  178. package/core/src/crawler/__tests__/journey-generator.test.ts +344 -0
  179. package/core/src/crawler/__tests__/selector-generator.test.ts +211 -0
  180. package/core/src/crawler/index.ts +335 -0
  181. package/core/src/crawler/journey-generator.ts +471 -0
  182. package/core/src/crawler/page-analyzer.ts +857 -0
  183. package/core/src/crawler/selector-generator.ts +280 -0
  184. package/core/src/crawler/types.ts +475 -0
  185. package/core/src/dashboard/__tests__/real-world.test.ts +430 -0
  186. package/core/src/dashboard/__tests__/server.test.ts +283 -0
  187. package/core/src/dashboard/__tests__/types.test.ts +208 -0
  188. package/core/src/dashboard/assets.ts +692 -0
  189. package/core/src/dashboard/index.ts +17 -0
  190. package/core/src/dashboard/server.ts +401 -0
  191. package/core/src/dashboard/types.ts +78 -0
  192. package/core/src/discoverer/__tests__/test-discoverer.test.ts +444 -0
  193. package/core/src/discoverer/index.ts +374 -0
  194. package/core/src/fixtures/__tests__/loader.test.ts +246 -0
  195. package/core/src/fixtures/__tests__/resolver.test.ts +334 -0
  196. package/core/src/fixtures/index.ts +9 -0
  197. package/core/src/fixtures/loader.ts +189 -0
  198. package/core/src/fixtures/resolver.ts +221 -0
  199. package/core/src/fixtures/types.ts +86 -0
  200. package/core/src/flakiness/__tests__/flakiness.test.ts +554 -0
  201. package/core/src/flakiness/index.ts +536 -0
  202. package/core/src/generation/__tests__/code-formatter.test.ts +170 -0
  203. package/core/src/generation/__tests__/code-generator-contract.test.ts +207 -0
  204. package/core/src/generation/__tests__/code-generator.test.ts +586 -0
  205. package/core/src/generation/__tests__/crawler-pack-generator.test.ts +479 -0
  206. package/core/src/generation/__tests__/generation-e2e-b2bshop.test.ts +718 -0
  207. package/core/src/generation/__tests__/generation-integration.test.ts +655 -0
  208. package/core/src/generation/__tests__/pack-generator.test.ts +408 -0
  209. package/core/src/generation/__tests__/prompt-builder.test.ts +200 -0
  210. package/core/src/generation/__tests__/real-provider-integration.test.ts +414 -0
  211. package/core/src/generation/__tests__/source-analyzer.test.ts +774 -0
  212. package/core/src/generation/__tests__/test-optimizer.test.ts +255 -0
  213. package/core/src/generation/code-formatter.ts +408 -0
  214. package/core/src/generation/code-generator.ts +470 -0
  215. package/core/src/generation/crawler-pack-generator.ts +289 -0
  216. package/core/src/generation/generator.ts +113 -0
  217. package/core/src/generation/index.ts +59 -0
  218. package/core/src/generation/pack-generator.ts +527 -0
  219. package/core/src/generation/prompt-builder.ts +772 -0
  220. package/core/src/generation/source-analyzer.ts +830 -0
  221. package/core/src/generation/test-optimizer.ts +474 -0
  222. package/core/src/generation/types.ts +217 -0
  223. package/core/src/hooks/__tests__/compose.test.ts +636 -0
  224. package/core/src/hooks/__tests__/runner.test.ts +478 -0
  225. package/core/src/hooks/compose.ts +268 -0
  226. package/core/src/hooks/runner.ts +364 -0
  227. package/core/src/index.ts +255 -0
  228. package/core/src/pack/__tests__/migrator.test.ts +594 -0
  229. package/core/src/pack/__tests__/validator.test.ts +759 -0
  230. package/core/src/pack/migrator.ts +353 -0
  231. package/core/src/pack/validator.ts +359 -0
  232. package/core/src/pack-v2/__tests__/loader.test.ts +533 -0
  233. package/core/src/pack-v2/__tests__/migrator.test.ts +455 -0
  234. package/core/src/pack-v2/__tests__/validator.test.ts +609 -0
  235. package/core/src/pack-v2/index.ts +41 -0
  236. package/core/src/pack-v2/loader.ts +358 -0
  237. package/core/src/pack-v2/migrator.ts +540 -0
  238. package/core/src/pack-v2/validator.ts +726 -0
  239. package/core/src/parallel/README.md +143 -0
  240. package/core/src/parallel/index.ts +16 -0
  241. package/core/src/parallel/parallel-runner.ts +282 -0
  242. package/core/src/pom/__tests__/loader.test.ts +378 -0
  243. package/core/src/pom/base-page.ts +425 -0
  244. package/core/src/pom/index.ts +45 -0
  245. package/core/src/pom/loader.ts +480 -0
  246. package/core/src/pom/types.ts +146 -0
  247. package/core/src/proof/__tests__/proof-roundtrip.test.ts +149 -0
  248. package/core/src/proof/__tests__/schema-validation-manual.mjs +211 -0
  249. package/core/src/proof/__tests__/schema-validation.test.ts +336 -0
  250. package/core/src/proof/__tests__/signer.test.ts +486 -0
  251. package/core/src/proof/__tests__/temporal-regression.test.ts +537 -0
  252. package/core/src/proof/__tests__/verifier-advanced.test.ts +588 -0
  253. package/core/src/proof/__tests__/verifier.test.ts +413 -0
  254. package/core/src/proof/bundle.ts +290 -0
  255. package/core/src/proof/canonicalize.ts +116 -0
  256. package/core/src/proof/index.ts +74 -0
  257. package/core/src/proof/schema.ts +285 -0
  258. package/core/src/proof/signer.ts +293 -0
  259. package/core/src/proof/verifier.ts +380 -0
  260. package/core/src/regression/__tests__/detector.test.ts +396 -0
  261. package/core/src/regression/__tests__/trend-analyzer.test.ts +300 -0
  262. package/core/src/regression/detector.ts +629 -0
  263. package/core/src/regression/index.ts +34 -0
  264. package/core/src/regression/trend-analyzer.ts +468 -0
  265. package/core/src/regression/types.ts +295 -0
  266. package/core/src/regression/vault.ts +419 -0
  267. package/core/src/repair/__tests__/repairer.test.ts +572 -0
  268. package/core/src/repair/__tests__/types.test.ts +302 -0
  269. package/core/src/repair/engine/__tests__/fixer.test.ts +482 -0
  270. package/core/src/repair/engine/__tests__/suggestion-engine.test.ts +395 -0
  271. package/core/src/repair/engine/fixer.ts +271 -0
  272. package/core/src/repair/engine/suggestion-engine.ts +234 -0
  273. package/core/src/repair/index.ts +53 -0
  274. package/core/src/repair/repairer.ts +376 -0
  275. package/core/src/repair/types.ts +119 -0
  276. package/core/src/repair/utils/__tests__/error-analyzer.test.ts +454 -0
  277. package/core/src/repair/utils/error-analyzer.ts +308 -0
  278. package/core/src/reporting/README.md +144 -0
  279. package/core/src/reporting/html-reporter.ts +835 -0
  280. package/core/src/reporting/index.ts +16 -0
  281. package/core/src/retry/README.md +192 -0
  282. package/core/src/retry/__tests__/flakiness-integration.test.ts +475 -0
  283. package/core/src/retry/__tests__/retry-engine.test.ts +424 -0
  284. package/core/src/retry/flakiness-integration.ts +267 -0
  285. package/core/src/retry/index.ts +48 -0
  286. package/core/src/retry/retry-engine.ts +368 -0
  287. package/core/src/retry/types.ts +208 -0
  288. package/core/src/retry/vault.ts +413 -0
  289. package/core/src/runner/__tests__/flakiness-integration.test.ts +566 -0
  290. package/core/src/runner/__tests__/phase3-e2e-b2bshop.test.ts +218 -0
  291. package/core/src/runner/__tests__/phase3-e2e-reqres.test.ts +199 -0
  292. package/core/src/runner/__tests__/phase3-runner.test.ts +1118 -0
  293. package/core/src/runner/e2e-helpers.ts +216 -0
  294. package/core/src/runner/phase3-runner.ts +1236 -0
  295. package/core/src/schemas/gherkin-report.json +122 -0
  296. package/core/src/secrets/__tests__/crypto.test.ts +180 -0
  297. package/core/src/secrets/crypto.ts +289 -0
  298. package/core/src/secrets/manager.ts +272 -0
  299. package/core/src/security/__tests__/hardening.test.ts +480 -0
  300. package/core/src/security/redaction-patterns-extended.ts +278 -0
  301. package/core/src/security/redactor.ts +326 -0
  302. package/core/src/self-healing/assertion-healer.ts +485 -0
  303. package/core/src/self-healing/engine.ts +626 -0
  304. package/core/src/self-healing/index.ts +33 -0
  305. package/core/src/self-healing/selector-healer.ts +488 -0
  306. package/core/src/self-healing/types.ts +193 -0
  307. package/core/src/serve/diagnostics-collector.ts +201 -0
  308. package/core/src/serve/health-checker.ts +274 -0
  309. package/core/src/serve/index.ts +9 -0
  310. package/core/src/serve/metrics-collector.ts +386 -0
  311. package/core/src/serve/process-manager.ts +265 -0
  312. package/core/src/serve/server.ts +230 -0
  313. package/core/src/slo/config.ts +408 -0
  314. package/core/src/slo/index.ts +68 -0
  315. package/core/src/slo/sli-calculator.ts +474 -0
  316. package/core/src/slo/slo-tracker.ts +481 -0
  317. package/core/src/slo/types.ts +408 -0
  318. package/core/src/slo/vault.ts +600 -0
  319. package/core/src/tui/__tests__/monitor.test.ts +336 -0
  320. package/core/src/tui/__tests__/real-world.test.ts +376 -0
  321. package/core/src/tui/__tests__/renderer.test.ts +201 -0
  322. package/core/src/tui/__tests__/types.test.ts +295 -0
  323. package/core/src/tui/index.ts +19 -0
  324. package/core/src/tui/monitor.ts +331 -0
  325. package/core/src/tui/renderer.ts +269 -0
  326. package/core/src/tui/types.ts +68 -0
  327. package/core/src/types/pack-v1.ts +305 -0
  328. package/core/src/types/pack-v2.ts +501 -0
  329. package/core/src/types/trust-score.ts +258 -0
  330. package/core/src/vault/__tests__/flakiness-vault.test.ts +562 -0
  331. package/core/src/vault/__tests__/vault.test.ts +259 -0
  332. package/core/src/vault/cas.ts +323 -0
  333. package/core/src/vault/index.ts +1361 -0
  334. package/core/src/vault/schema.sql +168 -0
  335. package/core/src/visual/README.md +185 -0
  336. package/core/src/visual/index.ts +14 -0
  337. package/core/src/visual/visual-regression.ts +347 -0
  338. package/core/src/watch/__tests__/watch-mode.test.ts +192 -0
  339. package/core/src/watch/index.ts +14 -0
  340. package/core/src/watch/watch-mode.ts +565 -0
  341. package/core/tsconfig.json +12 -0
  342. package/core/vitest.config.ts +52 -0
  343. package/docs/ARCHITECTURE.md +901 -0
  344. package/docs/AUDIT-GLOBAL-DEC2025.md +271 -0
  345. package/docs/BETA_TESTING.md +257 -0
  346. package/docs/BETA_TESTING_PLAN.md +727 -0
  347. package/docs/CERTIFICATION-REPORT.md +142 -0
  348. package/docs/COMPLETE_AUDIT_REFACTORING.md +965 -0
  349. package/docs/DEVELOPMENT.md +545 -0
  350. package/docs/DEVELOPMENT_HISTORY.md +345 -0
  351. package/docs/LIMITATIONS.md +176 -0
  352. package/docs/MIGRATION.md +303 -0
  353. package/docs/OPTION_3_4_EXPLORATION.md +1257 -0
  354. package/docs/PHASE1_PERFORMANCE.md +144 -0
  355. package/docs/QA360_Cloud.postman_collection.json +89 -0
  356. package/docs/QA360_TESTING_PHILOSOPHY.md +769 -0
  357. package/docs/QA_TEST_PLAN.md +727 -0
  358. package/docs/README.md +50 -0
  359. package/docs/STATUS.md +198 -0
  360. package/docs/STRATEGIC_STUDY_GOOSE_INTEGRATION.md +615 -0
  361. package/docs/USER_GUIDE.md +687 -0
  362. package/docs/WORK-DONE-ADAPTER-TESTS.md +136 -0
  363. package/docs/adapters-security.md +485 -0
  364. package/docs/architecture-diagram.mmd +168 -0
  365. package/docs/archive/ARCH-01-DAY6-BUILD-FIXES.md +396 -0
  366. package/docs/archive/ARCH-01-DAY6-FINAL-STATUS.md +324 -0
  367. package/docs/archive/ARCH-01_MCP_MERGE_ANALYSIS.md +644 -0
  368. package/docs/archive/ARCH-01_NEXT_STEPS.md +60 -0
  369. package/docs/archive/BRANCH_PROTECTION.md +183 -0
  370. package/docs/archive/CI_LOCKDOWN_CHECKLIST.md +222 -0
  371. package/docs/archive/HANDOFF_TEST-01.md +669 -0
  372. package/docs/archive/LEGAL_READY_PLACEHOLDERS.md +372 -0
  373. package/docs/archive/NODE_UPGRADE_GUIDE.md +188 -0
  374. package/docs/archive/PHASE1_COMPLETION.md +386 -0
  375. package/docs/archive/PHASE2_COMPLETION.md +404 -0
  376. package/docs/archive/PHASE3_AND_4_FINAL.md +360 -0
  377. package/docs/archive/PHASE3_COMPLETE.md +301 -0
  378. package/docs/archive/PHASE3_STATUS.md +255 -0
  379. package/docs/archive/PRE-WEEK2-AUDIT.md +364 -0
  380. package/docs/archive/README.md +16 -0
  381. package/docs/archive/SCHEMA_AJV_2020_FIX.md +245 -0
  382. package/docs/archive/TEST-01_AUDIT_REPORT.md +240 -0
  383. package/docs/archive/TEST-01_COVERAGE_PLAN.md +423 -0
  384. package/docs/archive/obsolete-proposals/dom-element-discovery-mode.md +250 -0
  385. package/docs/archive/obsolete-proposals/qa360-comprehensive-test-plan.md +1249 -0
  386. package/docs/archive/obsolete-proposals/qa360-quick-start-guide.md +298 -0
  387. package/docs/archive/obsolete-proposals/technical-plan-dom-discovery.md +870 -0
  388. package/docs/budgets-advanced.md +308 -0
  389. package/docs/examples/history-export-gc.md +285 -0
  390. package/docs/examples/pack-v2-complete.yaml +158 -0
  391. package/docs/examples/pack-v2-quickstart.yaml +24 -0
  392. package/docs/examples/pack-v2-ui-login.yaml +81 -0
  393. package/docs/examples/qa360-report.json +50 -0
  394. package/docs/history.md +565 -0
  395. package/docs/hooks.md +304 -0
  396. package/docs/llm-providers.md +512 -0
  397. package/docs/mcp-server.md +651 -0
  398. package/docs/mcp-tools.md +1131 -0
  399. package/docs/pack-v1.md +383 -0
  400. package/docs/pack-v2.md +558 -0
  401. package/docs/page-objects.md +366 -0
  402. package/docs/proofs.md +670 -0
  403. package/docs/quickstart-5min.md +257 -0
  404. package/docs/readiness-ci.md +654 -0
  405. package/docs/rfc/README.md +20 -0
  406. package/docs/rfc/proof-bundle-v1.md +787 -0
  407. package/docs/secrets.md +392 -0
  408. package/docs/serve.md +494 -0
  409. package/docs/unit-test-adapters.md +168 -0
  410. package/docs/vault.md +491 -0
  411. package/e2e/qa360-e2e.test.ts +696 -0
  412. package/e2e/vitest.config.ts +18 -0
  413. package/examples/README.md +30 -140
  414. package/examples/ci/docker-compose-serve.yml +375 -0
  415. package/examples/ci/github-actions-serve.yml +345 -0
  416. package/examples/ci/gitlab-ci-serve.yml +407 -0
  417. package/examples/datasets/README.md +101 -0
  418. package/examples/datasets/b2bshop.ts +155 -0
  419. package/examples/datasets/index.ts +57 -0
  420. package/examples/datasets/reqres.ts +195 -0
  421. package/examples/fixtures-demo/fixtures/users.yml +39 -0
  422. package/examples/fixtures-demo/pack.yml +71 -0
  423. package/examples/future-api/README.md +16 -0
  424. package/examples/future-api/diag.js +7 -0
  425. package/examples/future-api/health.js +4 -0
  426. package/examples/future-api/packs.js +13 -0
  427. package/examples/future-api/runpack.js +10 -0
  428. package/examples/generation/README.md +148 -0
  429. package/examples/generation/pack-generator-example.js +115 -0
  430. package/examples/generation/source-analyzer-example.js +115 -0
  431. package/examples/httpbin/pack.yml +59 -0
  432. package/examples/load-testing/mcp-load.yml +115 -0
  433. package/examples/load-testing/mcp-stdio.yml +95 -0
  434. package/examples/mcp/claude-desktop-config.json +33 -0
  435. package/examples/mcp/claude-desktop.json +16 -0
  436. package/examples/mcp/conversation-sample.md +131 -0
  437. package/examples/mcp/demo-60s.md +330 -0
  438. package/examples/mcp/sample-conversation.jsonl +21 -0
  439. package/examples/mcp/vscode-settings.json +22 -0
  440. package/examples/pack-v2-complete.yml +242 -0
  441. package/examples/pack-v2-examples.md +244 -0
  442. package/examples/pack-v2-quickstart.yml +55 -0
  443. package/examples/packs-business/ecommerce-api.yml +121 -0
  444. package/examples/packs-business/saas-dashboard-ui.yml +133 -0
  445. package/examples/packs-conformance/compose-multi.yml +174 -0
  446. package/examples/packs-conformance/full.yml +152 -0
  447. package/examples/packs-conformance/heavy-artifacts.yml +152 -0
  448. package/examples/packs-conformance/minimal.yml +71 -0
  449. package/examples/packs-conformance/secrets-missing.yml +97 -0
  450. package/examples/packs-conformance/timeouts.yml +77 -0
  451. package/examples/pom-demo/README.md +104 -0
  452. package/examples/pom-demo/pack.yml +60 -0
  453. package/examples/pom-demo/pages/DashboardPage.page.ts +73 -0
  454. package/examples/pom-demo/pages/LoginPage.page.ts +76 -0
  455. package/examples/proofs/e2e-playwright-proof.json +75 -0
  456. package/examples/proofs/httpbin-proof.json +69 -0
  457. package/examples/proofs/multi-adapter-proof.json +117 -0
  458. package/examples/proofs/test-proof.json +26 -0
  459. package/examples/restful-api-dev/README.md +102 -0
  460. package/examples/restful-api-dev/restful-api-advanced.yml +29 -0
  461. package/examples/restful-api-dev/restful-api-basic.yml +29 -0
  462. package/examples/web-lite/.github/workflows/qa360-phase3.yml +73 -0
  463. package/examples/web-lite/api-mock/server.js +258 -0
  464. package/examples/web-lite/pack.yml +71 -0
  465. package/examples/web-lite/services.yml +43 -0
  466. package/examples/web-lite/web-content/healthz +1 -0
  467. package/examples/web-lite/web-content/index.html +259 -0
  468. package/package.json +55 -45
  469. package/packages/mcp/CHANGELOG.md +109 -0
  470. package/packages/mcp/IMPLEMENTATION_SUMMARY.md +350 -0
  471. package/packages/mcp/LICENSE +21 -0
  472. package/packages/mcp/QUICK_START.md +291 -0
  473. package/packages/mcp/README.md +294 -0
  474. package/packages/mcp/TELEMETRY.md +220 -0
  475. package/packages/mcp/package.json +91 -0
  476. package/packages/mcp/scripts/generate-sbom-fallback.cjs +84 -0
  477. package/packages/mcp/scripts/safe-postinstall.cjs +32 -0
  478. package/packages/mcp/src/__tests__/contract.test.ts +902 -0
  479. package/packages/mcp/src/cli/cli.ts +137 -0
  480. package/packages/mcp/src/cli/doctor.ts +286 -0
  481. package/packages/mcp/src/cli/fix.ts +99 -0
  482. package/packages/mcp/src/cli/init.ts +233 -0
  483. package/packages/mcp/src/cli/postinstall.ts +14 -0
  484. package/packages/mcp/src/cli/reset.ts +44 -0
  485. package/packages/mcp/src/cli/telemetry.ts +166 -0
  486. package/packages/mcp/src/cli/test-dx.ts +94 -0
  487. package/packages/mcp/src/cli/uninstall.ts +80 -0
  488. package/packages/mcp/src/cli/up.ts +178 -0
  489. package/packages/mcp/src/index.ts +12 -0
  490. package/packages/mcp/src/scripts/e2e-local.ts +337 -0
  491. package/packages/mcp/src/scripts/verify-settings.ts +242 -0
  492. package/packages/mcp/src/security/audit.ts +244 -0
  493. package/packages/mcp/src/security/manager.ts +242 -0
  494. package/packages/mcp/src/server/full-server.ts +212 -0
  495. package/packages/mcp/src/server/minimal-server.ts +134 -0
  496. package/packages/mcp/src/tools/history.ts +388 -0
  497. package/packages/mcp/src/tools/pack.ts +449 -0
  498. package/packages/mcp/src/tools/registry.ts +638 -0
  499. package/packages/mcp/src/tools/report.ts +100 -0
  500. package/packages/mcp/src/tools/run.ts +268 -0
  501. package/packages/mcp/src/tools/secrets.ts +198 -0
  502. package/packages/mcp/src/tools/serve.ts +221 -0
  503. package/packages/mcp/src/tools/triage.ts +532 -0
  504. package/packages/mcp/src/tools/types.ts +26 -0
  505. package/packages/mcp/src/tools/vault.ts +164 -0
  506. package/packages/mcp/src/tools/verify.ts +166 -0
  507. package/packages/mcp/src/types/index.ts +311 -0
  508. package/packages/mcp/src/types/mcp-stubs.ts +83 -0
  509. package/packages/mcp/tsconfig.json +16 -0
  510. package/playwright.config.ts +20 -0
  511. package/pnpm-workspace.yaml +4 -0
  512. package/run-test-and-push.sh +20 -0
  513. package/scripts/build-proof-cli.sh +110 -0
  514. package/scripts/ci/check-windows-paths.js +92 -0
  515. package/scripts/ci/invariants.sh +124 -0
  516. package/scripts/ci/make-final-bundle.js +106 -0
  517. package/scripts/ci/mcp-run-multipack.js +305 -0
  518. package/scripts/ci/run-pack-suite.sh +103 -0
  519. package/scripts/ci/run-phase7-final.sh +190 -0
  520. package/scripts/ci/slo-assert.js +158 -0
  521. package/scripts/ci/test-fault-tolerance.sh +301 -0
  522. package/scripts/install-mcp.sh +66 -0
  523. package/scripts/mcp-smoke.mjs +27 -0
  524. package/scripts/smoke.sh +26 -0
  525. package/scripts/stress-test.js +288 -0
  526. package/scripts/sync-version.mjs +50 -0
  527. package/scripts/validate-examples.mjs +404 -0
  528. package/scripts/validation/simple-pack-check.sh +51 -0
  529. package/scripts/validation/validate-universal-pack.mjs +77 -0
  530. package/scripts/verify-persistence.js +127 -0
  531. package/test-pack.yaml +43 -0
  532. package/test-results/.last-run.json +4 -0
  533. package/test-runner.mjs +87 -0
  534. package/tests/artifacts.spec.js +147 -0
  535. package/tests/contracts.spec.js +239 -0
  536. package/tests/e2e/assertions.test.mjs +370 -0
  537. package/tests/e2e/crawler.test.mjs +451 -0
  538. package/tests/e2e/playwright-plus-plus.test.mjs +604 -0
  539. package/tests/e2e/proof-bundle.test.mjs +258 -0
  540. package/tests/e2e/real-world/saucedemo.test.mjs +714 -0
  541. package/tests/e2e/real-world/the-internet-herokuapp.test.mjs +760 -0
  542. package/tests/e2e/ui-actions.test.mjs +546 -0
  543. package/tests/gherkin.e2e.spec.ts +310 -0
  544. package/tests/no-console-errors.spec.js +136 -0
  545. package/tests/pdf.spec.ts +252 -0
  546. package/tests/run-pack.spec.ts +58 -0
  547. package/tsconfig.base.json +15 -0
  548. package/tsconfig.build.json +8 -0
  549. package/tsconfig.json +37 -0
  550. package/tsconfig.test.json +18 -0
  551. package/typedoc.json +37 -0
  552. package/ui/README.md +50 -0
  553. package/verify-proof.mjs +60 -0
  554. package/dist/cli-minimal.d.ts +0 -6
  555. package/dist/cli-minimal.js +0 -36
  556. package/dist/commands/ai.d.ts +0 -43
  557. package/dist/commands/ai.js +0 -616
  558. package/dist/commands/ask.d.ts +0 -94
  559. package/dist/commands/ask.js +0 -582
  560. package/dist/commands/coverage.d.ts +0 -8
  561. package/dist/commands/coverage.js +0 -252
  562. package/dist/commands/crawl.d.ts +0 -24
  563. package/dist/commands/crawl.js +0 -121
  564. package/dist/commands/doctor.d.ts +0 -54
  565. package/dist/commands/doctor.js +0 -513
  566. package/dist/commands/examples.d.ts +0 -33
  567. package/dist/commands/examples.js +0 -193
  568. package/dist/commands/explain.d.ts +0 -27
  569. package/dist/commands/explain.js +0 -630
  570. package/dist/commands/flakiness.d.ts +0 -73
  571. package/dist/commands/flakiness.js +0 -435
  572. package/dist/commands/generate.d.ts +0 -66
  573. package/dist/commands/generate.js +0 -438
  574. package/dist/commands/history.d.ts +0 -76
  575. package/dist/commands/history.js +0 -755
  576. package/dist/commands/init.d.ts +0 -106
  577. package/dist/commands/init.js +0 -616
  578. package/dist/commands/monitor.d.ts +0 -27
  579. package/dist/commands/monitor.js +0 -225
  580. package/dist/commands/ollama.d.ts +0 -40
  581. package/dist/commands/ollama.js +0 -301
  582. package/dist/commands/pack.d.ts +0 -70
  583. package/dist/commands/pack.js +0 -413
  584. package/dist/commands/regression.d.ts +0 -8
  585. package/dist/commands/regression.js +0 -340
  586. package/dist/commands/repair.d.ts +0 -26
  587. package/dist/commands/repair.js +0 -307
  588. package/dist/commands/report.d.ts +0 -62
  589. package/dist/commands/report.js +0 -378
  590. package/dist/commands/retry.d.ts +0 -43
  591. package/dist/commands/retry.js +0 -275
  592. package/dist/commands/run.d.ts +0 -41
  593. package/dist/commands/run.js +0 -169
  594. package/dist/commands/scan.d.ts +0 -5
  595. package/dist/commands/scan.js +0 -155
  596. package/dist/commands/secrets.d.ts +0 -58
  597. package/dist/commands/secrets.js +0 -289
  598. package/dist/commands/serve.d.ts +0 -13
  599. package/dist/commands/serve.js +0 -156
  600. package/dist/commands/slo.d.ts +0 -8
  601. package/dist/commands/slo.js +0 -327
  602. package/dist/commands/verify.d.ts +0 -32
  603. package/dist/commands/verify.js +0 -278
  604. package/dist/core/adapters/gitleaks-secrets.d.ts +0 -114
  605. package/dist/core/adapters/gitleaks-secrets.js +0 -410
  606. package/dist/core/adapters/k6-perf.d.ts +0 -85
  607. package/dist/core/adapters/k6-perf.js +0 -398
  608. package/dist/core/adapters/osv-deps.d.ts +0 -123
  609. package/dist/core/adapters/osv-deps.js +0 -372
  610. package/dist/core/adapters/playwright-native-adapter.d.ts +0 -121
  611. package/dist/core/adapters/playwright-native-adapter.js +0 -339
  612. package/dist/core/adapters/playwright-native-api.d.ts +0 -183
  613. package/dist/core/adapters/playwright-native-api.js +0 -465
  614. package/dist/core/adapters/playwright-ui.d.ts +0 -197
  615. package/dist/core/adapters/playwright-ui.js +0 -840
  616. package/dist/core/adapters/semgrep-sast.d.ts +0 -99
  617. package/dist/core/adapters/semgrep-sast.js +0 -322
  618. package/dist/core/adapters/zap-dast.d.ts +0 -133
  619. package/dist/core/adapters/zap-dast.js +0 -424
  620. package/dist/core/ai/anthropic-provider.d.ts +0 -50
  621. package/dist/core/ai/anthropic-provider.js +0 -223
  622. package/dist/core/ai/deepseek-provider.d.ts +0 -81
  623. package/dist/core/ai/deepseek-provider.js +0 -266
  624. package/dist/core/ai/index.d.ts +0 -60
  625. package/dist/core/ai/index.js +0 -18
  626. package/dist/core/ai/llm-client.d.ts +0 -45
  627. package/dist/core/ai/llm-client.js +0 -7
  628. package/dist/core/ai/mock-provider.d.ts +0 -49
  629. package/dist/core/ai/mock-provider.js +0 -121
  630. package/dist/core/ai/ollama-provider.d.ts +0 -78
  631. package/dist/core/ai/ollama-provider.js +0 -204
  632. package/dist/core/ai/openai-provider.d.ts +0 -48
  633. package/dist/core/ai/openai-provider.js +0 -200
  634. package/dist/core/ai/provider-factory.d.ts +0 -160
  635. package/dist/core/ai/provider-factory.js +0 -269
  636. package/dist/core/artifacts/index.d.ts +0 -6
  637. package/dist/core/artifacts/index.js +0 -6
  638. package/dist/core/artifacts/ui-artifacts.d.ts +0 -133
  639. package/dist/core/artifacts/ui-artifacts.js +0 -304
  640. package/dist/core/assertions/engine.d.ts +0 -51
  641. package/dist/core/assertions/engine.js +0 -530
  642. package/dist/core/assertions/index.d.ts +0 -11
  643. package/dist/core/assertions/index.js +0 -11
  644. package/dist/core/assertions/types.d.ts +0 -121
  645. package/dist/core/assertions/types.js +0 -37
  646. package/dist/core/auth/api-key-provider.d.ts +0 -16
  647. package/dist/core/auth/api-key-provider.js +0 -63
  648. package/dist/core/auth/aws-iam-provider.d.ts +0 -35
  649. package/dist/core/auth/aws-iam-provider.js +0 -177
  650. package/dist/core/auth/azure-ad-provider.d.ts +0 -15
  651. package/dist/core/auth/azure-ad-provider.js +0 -99
  652. package/dist/core/auth/basic-auth-provider.d.ts +0 -26
  653. package/dist/core/auth/basic-auth-provider.js +0 -111
  654. package/dist/core/auth/gcp-adc-provider.d.ts +0 -27
  655. package/dist/core/auth/gcp-adc-provider.js +0 -126
  656. package/dist/core/auth/index.d.ts +0 -238
  657. package/dist/core/auth/index.js +0 -82
  658. package/dist/core/auth/jwt-provider.d.ts +0 -19
  659. package/dist/core/auth/jwt-provider.js +0 -160
  660. package/dist/core/auth/manager.d.ts +0 -84
  661. package/dist/core/auth/manager.js +0 -230
  662. package/dist/core/auth/oauth2-provider.d.ts +0 -17
  663. package/dist/core/auth/oauth2-provider.js +0 -114
  664. package/dist/core/auth/totp-provider.d.ts +0 -31
  665. package/dist/core/auth/totp-provider.js +0 -134
  666. package/dist/core/auth/ui-login-provider.d.ts +0 -26
  667. package/dist/core/auth/ui-login-provider.js +0 -198
  668. package/dist/core/cache/index.d.ts +0 -7
  669. package/dist/core/cache/index.js +0 -6
  670. package/dist/core/cache/lru-cache.d.ts +0 -203
  671. package/dist/core/cache/lru-cache.js +0 -397
  672. package/dist/core/core/coverage/analyzer.d.ts +0 -101
  673. package/dist/core/core/coverage/analyzer.js +0 -415
  674. package/dist/core/core/coverage/collector.d.ts +0 -74
  675. package/dist/core/core/coverage/collector.js +0 -459
  676. package/dist/core/core/coverage/config.d.ts +0 -37
  677. package/dist/core/core/coverage/config.js +0 -156
  678. package/dist/core/core/coverage/index.d.ts +0 -11
  679. package/dist/core/core/coverage/index.js +0 -15
  680. package/dist/core/core/coverage/types.d.ts +0 -267
  681. package/dist/core/core/coverage/types.js +0 -6
  682. package/dist/core/core/coverage/vault.d.ts +0 -95
  683. package/dist/core/core/coverage/vault.js +0 -405
  684. package/dist/core/coverage/analyzer.d.ts +0 -101
  685. package/dist/core/coverage/analyzer.js +0 -415
  686. package/dist/core/coverage/collector.d.ts +0 -74
  687. package/dist/core/coverage/collector.js +0 -459
  688. package/dist/core/coverage/config.d.ts +0 -37
  689. package/dist/core/coverage/config.js +0 -156
  690. package/dist/core/coverage/index.d.ts +0 -11
  691. package/dist/core/coverage/index.js +0 -15
  692. package/dist/core/coverage/types.d.ts +0 -267
  693. package/dist/core/coverage/types.js +0 -6
  694. package/dist/core/coverage/vault.d.ts +0 -95
  695. package/dist/core/coverage/vault.js +0 -405
  696. package/dist/core/crawler/index.d.ts +0 -57
  697. package/dist/core/crawler/index.js +0 -281
  698. package/dist/core/crawler/journey-generator.d.ts +0 -49
  699. package/dist/core/crawler/journey-generator.js +0 -412
  700. package/dist/core/crawler/page-analyzer.d.ts +0 -88
  701. package/dist/core/crawler/page-analyzer.js +0 -709
  702. package/dist/core/crawler/selector-generator.d.ts +0 -34
  703. package/dist/core/crawler/selector-generator.js +0 -240
  704. package/dist/core/crawler/types.d.ts +0 -353
  705. package/dist/core/crawler/types.js +0 -6
  706. package/dist/core/dashboard/assets.d.ts +0 -6
  707. package/dist/core/dashboard/assets.js +0 -690
  708. package/dist/core/dashboard/index.d.ts +0 -6
  709. package/dist/core/dashboard/index.js +0 -5
  710. package/dist/core/dashboard/server.d.ts +0 -72
  711. package/dist/core/dashboard/server.js +0 -354
  712. package/dist/core/dashboard/types.d.ts +0 -70
  713. package/dist/core/dashboard/types.js +0 -5
  714. package/dist/core/discoverer/index.d.ts +0 -115
  715. package/dist/core/discoverer/index.js +0 -250
  716. package/dist/core/flakiness/index.d.ts +0 -228
  717. package/dist/core/flakiness/index.js +0 -384
  718. package/dist/core/generation/code-formatter.d.ts +0 -111
  719. package/dist/core/generation/code-formatter.js +0 -307
  720. package/dist/core/generation/code-generator.d.ts +0 -144
  721. package/dist/core/generation/code-generator.js +0 -293
  722. package/dist/core/generation/crawler-pack-generator.d.ts +0 -44
  723. package/dist/core/generation/crawler-pack-generator.js +0 -231
  724. package/dist/core/generation/generator.d.ts +0 -40
  725. package/dist/core/generation/generator.js +0 -76
  726. package/dist/core/generation/index.d.ts +0 -32
  727. package/dist/core/generation/index.js +0 -30
  728. package/dist/core/generation/pack-generator.d.ts +0 -107
  729. package/dist/core/generation/pack-generator.js +0 -416
  730. package/dist/core/generation/prompt-builder.d.ts +0 -132
  731. package/dist/core/generation/prompt-builder.js +0 -672
  732. package/dist/core/generation/source-analyzer.d.ts +0 -213
  733. package/dist/core/generation/source-analyzer.js +0 -657
  734. package/dist/core/generation/test-optimizer.d.ts +0 -117
  735. package/dist/core/generation/test-optimizer.js +0 -328
  736. package/dist/core/generation/types.d.ts +0 -214
  737. package/dist/core/generation/types.js +0 -4
  738. package/dist/core/hooks/compose.d.ts +0 -61
  739. package/dist/core/hooks/compose.js +0 -225
  740. package/dist/core/hooks/runner.d.ts +0 -68
  741. package/dist/core/hooks/runner.js +0 -303
  742. package/dist/core/index.d.ts +0 -104
  743. package/dist/core/index.js +0 -91
  744. package/dist/core/pack/migrator.d.ts +0 -51
  745. package/dist/core/pack/migrator.js +0 -304
  746. package/dist/core/pack/validator.d.ts +0 -42
  747. package/dist/core/pack/validator.js +0 -322
  748. package/dist/core/pack-v2/index.d.ts +0 -9
  749. package/dist/core/pack-v2/index.js +0 -8
  750. package/dist/core/pack-v2/loader.d.ts +0 -63
  751. package/dist/core/pack-v2/loader.js +0 -292
  752. package/dist/core/pack-v2/migrator.d.ts +0 -61
  753. package/dist/core/pack-v2/migrator.js +0 -480
  754. package/dist/core/pack-v2/validator.d.ts +0 -61
  755. package/dist/core/pack-v2/validator.js +0 -577
  756. package/dist/core/parallel/index.d.ts +0 -6
  757. package/dist/core/parallel/index.js +0 -6
  758. package/dist/core/parallel/parallel-runner.d.ts +0 -107
  759. package/dist/core/parallel/parallel-runner.js +0 -192
  760. package/dist/core/proof/bundle.d.ts +0 -137
  761. package/dist/core/proof/bundle.js +0 -160
  762. package/dist/core/proof/canonicalize.d.ts +0 -47
  763. package/dist/core/proof/canonicalize.js +0 -105
  764. package/dist/core/proof/index.d.ts +0 -13
  765. package/dist/core/proof/index.js +0 -18
  766. package/dist/core/proof/schema.d.ts +0 -217
  767. package/dist/core/proof/schema.js +0 -263
  768. package/dist/core/proof/signer.d.ts +0 -111
  769. package/dist/core/proof/signer.js +0 -226
  770. package/dist/core/proof/verifier.d.ts +0 -97
  771. package/dist/core/proof/verifier.js +0 -308
  772. package/dist/core/regression/detector.d.ts +0 -107
  773. package/dist/core/regression/detector.js +0 -497
  774. package/dist/core/regression/index.d.ts +0 -9
  775. package/dist/core/regression/index.js +0 -11
  776. package/dist/core/regression/trend-analyzer.d.ts +0 -102
  777. package/dist/core/regression/trend-analyzer.js +0 -345
  778. package/dist/core/regression/types.d.ts +0 -222
  779. package/dist/core/regression/types.js +0 -7
  780. package/dist/core/regression/vault.d.ts +0 -87
  781. package/dist/core/regression/vault.js +0 -289
  782. package/dist/core/repair/engine/fixer.d.ts +0 -24
  783. package/dist/core/repair/engine/fixer.js +0 -226
  784. package/dist/core/repair/engine/suggestion-engine.d.ts +0 -18
  785. package/dist/core/repair/engine/suggestion-engine.js +0 -187
  786. package/dist/core/repair/index.d.ts +0 -10
  787. package/dist/core/repair/index.js +0 -13
  788. package/dist/core/repair/repairer.d.ts +0 -90
  789. package/dist/core/repair/repairer.js +0 -284
  790. package/dist/core/repair/types.d.ts +0 -91
  791. package/dist/core/repair/types.js +0 -6
  792. package/dist/core/repair/utils/error-analyzer.d.ts +0 -28
  793. package/dist/core/repair/utils/error-analyzer.js +0 -264
  794. package/dist/core/reporting/html-reporter.d.ts +0 -119
  795. package/dist/core/reporting/html-reporter.js +0 -737
  796. package/dist/core/reporting/index.d.ts +0 -6
  797. package/dist/core/reporting/index.js +0 -6
  798. package/dist/core/retry/flakiness-integration.d.ts +0 -60
  799. package/dist/core/retry/flakiness-integration.js +0 -228
  800. package/dist/core/retry/index.d.ts +0 -14
  801. package/dist/core/retry/index.js +0 -16
  802. package/dist/core/retry/retry-engine.d.ts +0 -80
  803. package/dist/core/retry/retry-engine.js +0 -296
  804. package/dist/core/retry/types.d.ts +0 -178
  805. package/dist/core/retry/types.js +0 -52
  806. package/dist/core/retry/vault.d.ts +0 -77
  807. package/dist/core/retry/vault.js +0 -304
  808. package/dist/core/runner/e2e-helpers.d.ts +0 -102
  809. package/dist/core/runner/e2e-helpers.js +0 -153
  810. package/dist/core/runner/phase3-runner.d.ts +0 -200
  811. package/dist/core/runner/phase3-runner.js +0 -1041
  812. package/dist/core/secrets/crypto.d.ts +0 -75
  813. package/dist/core/secrets/crypto.js +0 -223
  814. package/dist/core/secrets/manager.d.ts +0 -76
  815. package/dist/core/secrets/manager.js +0 -219
  816. package/dist/core/security/redaction-patterns-extended.d.ts +0 -27
  817. package/dist/core/security/redaction-patterns-extended.js +0 -247
  818. package/dist/core/security/redactor.d.ts +0 -71
  819. package/dist/core/security/redactor.js +0 -279
  820. package/dist/core/self-healing/assertion-healer.d.ts +0 -97
  821. package/dist/core/self-healing/assertion-healer.js +0 -371
  822. package/dist/core/self-healing/engine.d.ts +0 -122
  823. package/dist/core/self-healing/engine.js +0 -538
  824. package/dist/core/self-healing/index.d.ts +0 -10
  825. package/dist/core/self-healing/index.js +0 -11
  826. package/dist/core/self-healing/selector-healer.d.ts +0 -103
  827. package/dist/core/self-healing/selector-healer.js +0 -372
  828. package/dist/core/self-healing/types.d.ts +0 -152
  829. package/dist/core/self-healing/types.js +0 -6
  830. package/dist/core/serve/diagnostics-collector.d.ts +0 -32
  831. package/dist/core/serve/diagnostics-collector.js +0 -149
  832. package/dist/core/serve/health-checker.d.ts +0 -44
  833. package/dist/core/serve/health-checker.js +0 -219
  834. package/dist/core/serve/index.d.ts +0 -8
  835. package/dist/core/serve/index.js +0 -8
  836. package/dist/core/serve/metrics-collector.d.ts +0 -24
  837. package/dist/core/serve/metrics-collector.js +0 -322
  838. package/dist/core/serve/process-manager.d.ts +0 -36
  839. package/dist/core/serve/process-manager.js +0 -213
  840. package/dist/core/serve/server.d.ts +0 -36
  841. package/dist/core/serve/server.js +0 -191
  842. package/dist/core/slo/config.d.ts +0 -107
  843. package/dist/core/slo/config.js +0 -360
  844. package/dist/core/slo/index.d.ts +0 -11
  845. package/dist/core/slo/index.js +0 -15
  846. package/dist/core/slo/sli-calculator.d.ts +0 -92
  847. package/dist/core/slo/sli-calculator.js +0 -364
  848. package/dist/core/slo/slo-tracker.d.ts +0 -148
  849. package/dist/core/slo/slo-tracker.js +0 -379
  850. package/dist/core/slo/types.d.ts +0 -281
  851. package/dist/core/slo/types.js +0 -7
  852. package/dist/core/slo/vault.d.ts +0 -102
  853. package/dist/core/slo/vault.js +0 -427
  854. package/dist/core/tui/index.d.ts +0 -7
  855. package/dist/core/tui/index.js +0 -6
  856. package/dist/core/tui/monitor.d.ts +0 -92
  857. package/dist/core/tui/monitor.js +0 -271
  858. package/dist/core/tui/renderer.d.ts +0 -33
  859. package/dist/core/tui/renderer.js +0 -218
  860. package/dist/core/tui/types.d.ts +0 -63
  861. package/dist/core/tui/types.js +0 -5
  862. package/dist/core/types/pack-v1.d.ts +0 -251
  863. package/dist/core/types/pack-v1.js +0 -5
  864. package/dist/core/types/pack-v2.d.ts +0 -425
  865. package/dist/core/types/pack-v2.js +0 -8
  866. package/dist/core/types/trust-score.d.ts +0 -69
  867. package/dist/core/types/trust-score.js +0 -191
  868. package/dist/core/vault/cas.d.ts +0 -90
  869. package/dist/core/vault/cas.js +0 -261
  870. package/dist/core/vault/index.d.ts +0 -326
  871. package/dist/core/vault/index.js +0 -1042
  872. package/dist/core/visual/index.d.ts +0 -6
  873. package/dist/core/visual/index.js +0 -6
  874. package/dist/core/visual/visual-regression.d.ts +0 -113
  875. package/dist/core/visual/visual-regression.js +0 -236
  876. package/dist/core/watch/index.d.ts +0 -7
  877. package/dist/core/watch/index.js +0 -6
  878. package/dist/core/watch/watch-mode.d.ts +0 -213
  879. package/dist/core/watch/watch-mode.js +0 -389
  880. package/dist/generators/index.d.ts +0 -5
  881. package/dist/generators/index.js +0 -5
  882. package/dist/generators/json-reporter.d.ts +0 -10
  883. package/dist/generators/json-reporter.js +0 -12
  884. package/dist/generators/test-generator.d.ts +0 -18
  885. package/dist/generators/test-generator.js +0 -78
  886. package/dist/index.d.ts +0 -8
  887. package/dist/index.js +0 -246
  888. package/dist/scanners/dom-scanner.d.ts +0 -52
  889. package/dist/scanners/dom-scanner.js +0 -296
  890. package/dist/scanners/index.d.ts +0 -4
  891. package/dist/scanners/index.js +0 -4
  892. package/dist/schemas/pack.schema.json +0 -236
  893. package/dist/types/scan.d.ts +0 -68
  894. package/dist/types/scan.js +0 -4
  895. package/dist/utils/config.d.ts +0 -5
  896. package/dist/utils/config.js +0 -136
  897. /package/{bin → cli/bin}/qa360.js +0 -0
  898. /package/{examples → cli/examples}/accessibility.yml +0 -0
  899. /package/{examples → cli/examples}/api-basic.yml +0 -0
  900. /package/{examples → cli/examples}/complete.yml +0 -0
  901. /package/{examples → cli/examples}/crawler.yml +0 -0
  902. /package/{examples → cli/examples}/fullstack.yml +0 -0
  903. /package/{examples → cli/examples}/security.yml +0 -0
  904. /package/{examples → cli/examples}/ui-advanced.yml +0 -0
  905. /package/{examples → cli/examples}/ui-basic.yml +0 -0
  906. /package/{dist/core → core}/schemas/pack.schema.json +0 -0
@@ -0,0 +1,404 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * QA360 Examples Validator
4
+ *
5
+ * Validates all example pack files to ensure they are syntactically correct
6
+ * and follow the Pack v2 schema.
7
+ *
8
+ * Usage:
9
+ * node scripts/validate-examples.mjs
10
+ * node scripts/validate-examples.mjs --check-exists
11
+ */
12
+
13
+ import { readFileSync, readdirSync, existsSync, statSync } from 'fs';
14
+ import { resolve, join, dirname, relative } from 'path';
15
+ import { fileURLToPath } from 'url';
16
+
17
+ const __filename = fileURLToPath(import.meta.url);
18
+ const __dirname = dirname(__filename);
19
+ const rootDir = resolve(__dirname, '..');
20
+
21
+ // ANSI colors
22
+ const colors = {
23
+ reset: '\x1b[0m',
24
+ red: '\x1b[31m',
25
+ green: '\x1b[32m',
26
+ yellow: '\x1b[33m',
27
+ blue: '\x1b[34m',
28
+ magenta: '\x1b[35m',
29
+ cyan: '\x1b[36m',
30
+ gray: '\x1b[90m'
31
+ };
32
+
33
+ function colorize(color, text) {
34
+ return `${colors[color]}${text}${colors.reset}`;
35
+ }
36
+
37
+ // Directories to skip (non-pack YAML files)
38
+ const SKIP_DIRS = [
39
+ '.github',
40
+ '.gitlab-ci',
41
+ 'ci',
42
+ 'load-testing', // K6/mcp files, not packs
43
+ 'packs-conformance', // Pack v1 format, validated separately
44
+ ];
45
+
46
+ // Files that are definitely pack files (validate these)
47
+ const KNOWN_PACK_FILES = [
48
+ 'pack.yml',
49
+ 'pack.yaml',
50
+ ];
51
+
52
+ // Find all YAML files in a directory recursively
53
+ function findYamlFiles(dir, results = []) {
54
+ if (!existsSync(dir)) return results;
55
+
56
+ const entries = readdirSync(dir, { withFileTypes: true });
57
+
58
+ for (const entry of entries) {
59
+ const fullPath = join(dir, entry.name);
60
+
61
+ // Skip certain directories
62
+ if (entry.isDirectory()) {
63
+ if (SKIP_DIRS.includes(entry.name) || entry.name.startsWith('.') || entry.name === 'node_modules') {
64
+ continue;
65
+ }
66
+ findYamlFiles(fullPath, results);
67
+ } else if (entry.isFile() && (entry.name.endsWith('.yml') || entry.name.endsWith('.yaml'))) {
68
+ // Include if it's a known pack file name or in a pack directory
69
+ const relativePath = relative(rootDir, fullPath);
70
+ const pathParts = relativePath.split('/');
71
+
72
+ // Include if it's named pack.yml/pack.yaml
73
+ if (KNOWN_PACK_FILES.includes(entry.name)) {
74
+ results.push(fullPath);
75
+ }
76
+ // Include if in a directory that contains "pack" in the name
77
+ else if (pathParts.some(p => p.includes('pack'))) {
78
+ results.push(fullPath);
79
+ }
80
+ // Include files in restful-api-dev, web-lite, httpbin, packs-business
81
+ else if (pathParts[0] === 'restful-api-dev' ||
82
+ pathParts[0] === 'web-lite' && entry.name === 'pack.yml' ||
83
+ pathParts[0] === 'httpbin' ||
84
+ pathParts[0] === 'packs-business') {
85
+ // Only include pack.yml in web-lite (services.yml is docker-compose)
86
+ if (pathParts[0] !== 'web-lite' || entry.name === 'pack.yml') {
87
+ results.push(fullPath);
88
+ }
89
+ }
90
+ }
91
+ }
92
+
93
+ return results;
94
+ }
95
+
96
+ // Basic YAML validation (check for common syntax errors)
97
+ function validateYamlSyntax(content, filePath) {
98
+ const errors = [];
99
+ const warnings = [];
100
+ const lines = content.split('\n');
101
+
102
+ let inMultilineString = false;
103
+ let indentStack = [0];
104
+
105
+ for (let i = 0; i < lines.length; i++) {
106
+ const line = lines[i];
107
+ const lineNum = i + 1;
108
+ const trimmed = line.trimEnd();
109
+
110
+ // Skip empty lines and comments
111
+ if (!trimmed || trimmed.startsWith('#')) {
112
+ continue;
113
+ }
114
+
115
+ // Check for tabs (YAML doesn't allow tabs for indentation)
116
+ if (line.includes('\t')) {
117
+ errors.push({
118
+ line: lineNum,
119
+ message: 'Tab character found. Use spaces for indentation.',
120
+ code: 'SYNTAX_TAB'
121
+ });
122
+ }
123
+
124
+ // Check indentation consistency
125
+ if (trimmed && !line.startsWith(' ')) {
126
+ // Top level, reset stack
127
+ indentStack = [0];
128
+ } else if (trimmed) {
129
+ const indent = line.search(/\S/);
130
+
131
+ // Check for odd indentation
132
+ if (indent % 2 !== 0) {
133
+ warnings.push({
134
+ line: lineNum,
135
+ message: 'Odd indentation detected. Use 2-space increments.',
136
+ code: 'STYLE_INDENT'
137
+ });
138
+ }
139
+
140
+ // Check for too deep indentation
141
+ if (indent > 40) {
142
+ warnings.push({
143
+ line: lineNum,
144
+ message: 'Very deep indentation. Consider restructuring.',
145
+ code: 'STYLE_DEEP'
146
+ });
147
+ }
148
+ }
149
+
150
+ // Check for common YAML pitfalls
151
+ if (trimmed.startsWith('- ')) {
152
+ // List item
153
+ const valueIndent = line.indexOf('- ') + 2;
154
+ const afterDash = line.substring(valueIndent).trim();
155
+
156
+ // Check if the value after dash is a colon (nested mapping)
157
+ if (afterDash.endsWith(':')) {
158
+ // This is fine - it's a mapping in a list
159
+ }
160
+ }
161
+
162
+ // Check for trailing colon without space after
163
+ if (trimmed.endsWith(':') && !trimmed.endsWith(': ')) {
164
+ const nextLine = lines[i + 1];
165
+ if (nextLine && nextLine.trim() && !nextLine.trim().startsWith('#')) {
166
+ // Check if next line is indented more (nested block)
167
+ const nextIndent = nextLine.search(/\S/);
168
+ if (nextIndent <= line.search(/\S/)) {
169
+ warnings.push({
170
+ line: lineNum,
171
+ message: 'Mapping key without value. Use "key: value" format.',
172
+ code: 'SYNTAX_COLON'
173
+ });
174
+ }
175
+ }
176
+ }
177
+
178
+ // Check for unquoted special characters
179
+ if (trimmed.includes(':') && !trimmed.startsWith('-') && !trimmed.includes("'") && !trimmed.includes('"')) {
180
+ const colonIndex = trimmed.indexOf(':');
181
+ if (colonIndex > 0 && colonIndex < trimmed.length - 1) {
182
+ const afterColon = trimmed.substring(colonIndex + 1).trim();
183
+ if (afterColon && !afterColon.startsWith('#') && !afterColon.startsWith('|') && !afterColon.startsWith('>')) {
184
+ // This might be a time like "12:30" or URL like "http://", which is OK
185
+ const urlPattern = /^[a-z]+:\/\//;
186
+ if (!urlPattern.test(afterColon)) {
187
+ // Also check for HH:MM time format
188
+ const timePattern = /^\d{1,2}:\d{2}(:\d{2})?$/;
189
+ if (!timePattern.test(trimmed)) {
190
+ // Might be an issue, but could be valid YAML
191
+ }
192
+ }
193
+ }
194
+ }
195
+ }
196
+ }
197
+
198
+ return { errors, warnings };
199
+ }
200
+
201
+ // Validate pack structure
202
+ function validatePackStructure(content, filePath) {
203
+ const errors = [];
204
+ const warnings = [];
205
+ const lines = content.split('\n');
206
+
207
+ // Extract top-level keys
208
+ const topLevelKeys = new Set();
209
+ for (const line of lines) {
210
+ const trimmed = line.trim();
211
+ if (trimmed && !trimmed.startsWith('#')) {
212
+ const indent = line.search(/\S/);
213
+ if (indent === 0) {
214
+ const match = trimmed.match(/^([^:#]+):/);
215
+ if (match) {
216
+ topLevelKeys.add(match[1]);
217
+ }
218
+ }
219
+ }
220
+ }
221
+
222
+ // Check for required fields in pack files
223
+ if (filePath.includes('examples/') || filePath.includes('pack')) {
224
+ const requiredFields = ['version', 'name', 'gates'];
225
+ for (const field of requiredFields) {
226
+ if (!topLevelKeys.has(field)) {
227
+ errors.push({
228
+ line: 1,
229
+ message: `Missing required field: "${field}"`,
230
+ code: 'PACK_MISSING_FIELD',
231
+ suggestion: `Add ${field}: to your pack file`
232
+ });
233
+ }
234
+ }
235
+
236
+ // Check version field
237
+ if (topLevelKeys.has('version')) {
238
+ for (const line of lines) {
239
+ if (line.trim().startsWith('version:')) {
240
+ const version = line.trim().substring(8).trim().replace(/['"]/g, '');
241
+ // Accept simple version numbers (1, 2) or semantic versions (1.0.0, 2.1.3, etc.)
242
+ const validVersion = /^(1|2)(\.\d+)*$/.test(version);
243
+ if (!validVersion) {
244
+ warnings.push({
245
+ line: lines.indexOf(line) + 1,
246
+ message: `Unusual version value: ${version}. Expected 1.x or 2.x.`,
247
+ code: 'PACK_VERSION'
248
+ });
249
+ }
250
+ break;
251
+ }
252
+ }
253
+ }
254
+
255
+ // Check for known top-level keys (including extended keys)
256
+ const validKeys = ['version', 'name', 'description', 'gates', 'auth', 'targets', 'budgets', 'security', 'hooks', 'execution', 'metadata',
257
+ // Extended keys for advanced packs
258
+ 'data', 'observability', 'environment', 'variables', 'templates'];
259
+ const invalidKeys = [...topLevelKeys].filter(k => !validKeys.includes(k));
260
+ if (invalidKeys.length > 0) {
261
+ warnings.push({
262
+ line: 1,
263
+ message: `Unrecognized top-level keys: ${invalidKeys.join(', ')}`,
264
+ code: 'PACK_UNKNOWN_KEYS'
265
+ });
266
+ }
267
+ }
268
+
269
+ return { errors, warnings };
270
+ }
271
+
272
+ // Validate a single YAML file
273
+ function validateYamlFile(filePath) {
274
+ const relativePath = relative(rootDir, filePath);
275
+ const result = {
276
+ file: relativePath,
277
+ valid: true,
278
+ errors: [],
279
+ warnings: []
280
+ };
281
+
282
+ try {
283
+ const content = readFileSync(filePath, 'utf-8');
284
+
285
+ // Syntax validation
286
+ const syntaxResult = validateYamlSyntax(content, filePath);
287
+ result.errors.push(...syntaxResult.errors);
288
+ result.warnings.push(...syntaxResult.warnings);
289
+
290
+ // Structure validation
291
+ const structureResult = validatePackStructure(content, filePath);
292
+ result.errors.push(...structureResult.errors);
293
+ result.warnings.push(...structureResult.warnings);
294
+
295
+ // Check for empty file
296
+ if (!content.trim()) {
297
+ result.errors.push({
298
+ line: 1,
299
+ message: 'Empty file',
300
+ code: 'EMPTY_FILE'
301
+ });
302
+ }
303
+
304
+ result.valid = result.errors.length === 0;
305
+ } catch (error) {
306
+ result.valid = false;
307
+ result.errors.push({
308
+ line: 0,
309
+ message: `Failed to read file: ${error.message}`,
310
+ code: 'READ_ERROR'
311
+ });
312
+ }
313
+
314
+ return result;
315
+ }
316
+
317
+ // Main validation function
318
+ async function validateExamples(options = {}) {
319
+ const examplesDir = resolve(rootDir, 'examples');
320
+
321
+ if (!existsSync(examplesDir)) {
322
+ console.error(colorize('red', `Error: Examples directory not found: ${examplesDir}`));
323
+ process.exit(1);
324
+ }
325
+
326
+ console.log(colorize('cyan', '🔍 QA360 Examples Validator'));
327
+ console.log(colorize('gray', '━'.repeat(50)));
328
+ console.log(`Scanning: ${examplesDir}\n`);
329
+
330
+ // Find all YAML files
331
+ const yamlFiles = findYamlFiles(examplesDir);
332
+
333
+ if (yamlFiles.length === 0) {
334
+ console.log(colorize('yellow', 'No YAML files found in examples directory.'));
335
+ return;
336
+ }
337
+
338
+ console.log(colorize('blue', `Found ${yamlFiles.length} YAML file(s) to validate\n`));
339
+
340
+ // Validate each file
341
+ const results = [];
342
+ let totalErrors = 0;
343
+ let totalWarnings = 0;
344
+ let validCount = 0;
345
+
346
+ for (const filePath of yamlFiles) {
347
+ const result = validateYamlFile(filePath);
348
+ results.push(result);
349
+
350
+ if (result.valid) {
351
+ validCount++;
352
+ console.log(colorize('green', `✓ ${result.file}`));
353
+ } else {
354
+ console.log(colorize('red', `✗ ${result.file}`));
355
+ }
356
+
357
+ // Print errors and warnings
358
+ if (result.errors.length > 0 || result.warnings.length > 0) {
359
+ for (const error of result.errors) {
360
+ console.log(colorize('red', ` [${error.code}] Line ${error.line}: ${error.message}`));
361
+ if (error.suggestion) {
362
+ console.log(colorize('gray', ` → ${error.suggestion}`));
363
+ }
364
+ }
365
+ for (const warning of result.warnings) {
366
+ console.log(colorize('yellow', ` [${warning.code}] Line ${warning.line}: ${warning.message}`));
367
+ if (warning.suggestion) {
368
+ console.log(colorize('gray', ` → ${warning.suggestion}`));
369
+ }
370
+ }
371
+ }
372
+
373
+ totalErrors += result.errors.length;
374
+ totalWarnings += result.warnings.length;
375
+ }
376
+
377
+ // Print summary
378
+ console.log('\n' + colorize('gray', '━'.repeat(50)));
379
+ console.log(colorize('cyan', 'Summary:'));
380
+ console.log(` Total files: ${yamlFiles.length}`);
381
+ console.log(` ${colorize('green', `Valid: ${validCount}`)}`);
382
+ console.log(` ${colorize('red', `Invalid: ${yamlFiles.length - validCount}`)}`);
383
+ console.log(` ${colorize('red', `Errors: ${totalErrors}`)}`);
384
+ console.log(` ${colorize('yellow', `Warnings: ${totalWarnings}`)}`);
385
+
386
+ // Exit with error code if validation failed
387
+ if (totalErrors > 0) {
388
+ process.exit(1);
389
+ }
390
+ }
391
+
392
+ // Parse CLI arguments
393
+ const args = process.argv.slice(2);
394
+ const options = {};
395
+ for (const arg of args) {
396
+ if (arg === '--check-exists') {
397
+ options.checkExists = true;
398
+ }
399
+ }
400
+
401
+ validateExamples(options).catch(error => {
402
+ console.error(colorize('red', `Error: ${error.message}`));
403
+ process.exit(1);
404
+ });
@@ -0,0 +1,51 @@
1
+ #!/bin/bash
2
+ # QA360 Simple Pack Validation - Phase 7-Final Certification
3
+ # Validation basique YAML sans dépendances complexes
4
+
5
+ set -e
6
+
7
+ PACK_FILE="$1"
8
+
9
+ if [ -z "$PACK_FILE" ]; then
10
+ echo "Usage: $0 <pack.yml>"
11
+ exit 1
12
+ fi
13
+
14
+ if [ ! -f "$PACK_FILE" ]; then
15
+ echo "❌ Pack file not found: $PACK_FILE"
16
+ exit 1
17
+ fi
18
+
19
+ echo "🔍 Validating pack: $PACK_FILE"
20
+
21
+ # Check required fields
22
+ if ! grep -q "^name:" "$PACK_FILE"; then
23
+ echo "❌ Missing required field: name"
24
+ exit 1
25
+ fi
26
+
27
+ if ! grep -q "^version:" "$PACK_FILE"; then
28
+ echo "❌ Missing required field: version"
29
+ exit 1
30
+ fi
31
+
32
+ if ! grep -q "^gates:" "$PACK_FILE"; then
33
+ echo "❌ Missing required field: gates"
34
+ exit 1
35
+ fi
36
+
37
+ # Extract values
38
+ NAME=$(grep "^name:" "$PACK_FILE" | head -1 | sed 's/name: *//' | tr -d '"')
39
+ VERSION=$(grep "^version:" "$PACK_FILE" | head -1 | sed 's/version: *//' | tr -d '"')
40
+ DESCRIPTION=$(grep "^description:" "$PACK_FILE" | head -1 | sed 's/description: *//' | tr -d '"')
41
+
42
+ # Count enabled gates
43
+ GATES_ENABLED=$(grep -A1 "^ [a-z]*:" "$PACK_FILE" | grep "enabled: true" | wc -l | tr -d ' ')
44
+
45
+ echo "✅ Pack schema: VALID"
46
+ echo " Name: $NAME"
47
+ echo " Version: $VERSION"
48
+ echo " Description: $DESCRIPTION"
49
+ echo " Gates enabled: $GATES_ENABLED"
50
+
51
+ exit 0
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * QA360 Universal Pack Validation Script
4
+ * Validation directe sans dépendance CLI pour certification Phase 7-Final
5
+ */
6
+
7
+ import { readFileSync } from 'fs';
8
+ import { parse } from '../../node_modules/js-yaml/dist/js-yaml.mjs';
9
+ import Ajv from '../../node_modules/ajv/dist/ajv.js';
10
+ import addFormats from '../../node_modules/ajv-formats/dist/index.js';
11
+
12
+ const ajv = new Ajv({ allErrors: true, strict: false });
13
+ addFormats(ajv);
14
+
15
+ // Schéma Pack v1 simplifié pour validation
16
+ const packSchema = {
17
+ type: 'object',
18
+ required: ['name', 'version', 'gates'],
19
+ properties: {
20
+ name: { type: 'string', pattern: '^[a-z0-9-]+$' },
21
+ version: { type: 'string', pattern: '^\\d+\\.\\d+\\.\\d+$' },
22
+ description: { type: 'string' },
23
+ gates: {
24
+ type: 'object',
25
+ properties: {
26
+ api: { type: 'object' },
27
+ ui: { type: 'object' },
28
+ perf: { type: 'object' },
29
+ a11y: { type: 'object' },
30
+ sast: { type: 'object' },
31
+ deps: { type: 'object' },
32
+ secrets: { type: 'object' },
33
+ dast: { type: 'object' }
34
+ }
35
+ },
36
+ metadata: { type: 'object' }
37
+ }
38
+ };
39
+
40
+ const validate = ajv.compile(packSchema);
41
+
42
+ async function validatePack(packPath) {
43
+ console.log(`\n🔍 Validating pack: ${packPath}`);
44
+
45
+ try {
46
+ const content = readFileSync(packPath, 'utf8');
47
+ const pack = parse(content);
48
+
49
+ const valid = validate(pack);
50
+
51
+ if (valid) {
52
+ console.log('✅ Pack schema: VALID');
53
+ console.log(` Name: ${pack.name}`);
54
+ console.log(` Version: ${pack.version}`);
55
+ console.log(` Gates enabled: ${Object.keys(pack.gates).filter(g => pack.gates[g]?.enabled).join(', ')}`);
56
+ return { valid: true, pack };
57
+ } else {
58
+ console.log('❌ Pack schema: INVALID');
59
+ console.log(' Errors:', validate.errors);
60
+ return { valid: false, errors: validate.errors };
61
+ }
62
+ } catch (error) {
63
+ console.log('❌ Pack parsing: FAILED');
64
+ console.log(' Error:', error.message);
65
+ return { valid: false, error: error.message };
66
+ }
67
+ }
68
+
69
+ // Main
70
+ const packPath = process.argv[2];
71
+ if (!packPath) {
72
+ console.error('Usage: node validate-universal-pack.js <pack.yml>');
73
+ process.exit(1);
74
+ }
75
+
76
+ const result = await validatePack(packPath);
77
+ process.exit(result.valid ? 0 : 1);
@@ -0,0 +1,127 @@
1
+ #!/usr/bin/env node
2
+ // scripts/verify-persistence.js - Script d'audit persistance après redeploy
3
+
4
+ const BASE_URL = process.env.BASE_URL || 'https://qa360-cloud-preview.vercel.app';
5
+
6
+ async function verifyPersistence() {
7
+ console.log('🔍 AUDIT PERSISTANCE QA360 CLOUD');
8
+ console.log(`Base URL: ${BASE_URL}`);
9
+ console.log('');
10
+
11
+ try {
12
+ // 1. POST /api/runpack → récupère runId
13
+ console.log('1️⃣ Exécution d\'un pack pour générer un runId...');
14
+ const runResponse = await fetch(`${BASE_URL}/api/runpack`, {
15
+ method: 'POST',
16
+ headers: {
17
+ 'Content-Type': 'application/json',
18
+ 'Origin': BASE_URL
19
+ },
20
+ body: JSON.stringify({ pack: 'httpbin' })
21
+ });
22
+
23
+ if (!runResponse.ok) {
24
+ throw new Error(`POST /api/runpack failed: ${runResponse.status}`);
25
+ }
26
+
27
+ const runData = await runResponse.json();
28
+ const { pack, runId } = runData;
29
+ console.log(`✅ Run créé: pack=${pack}, runId=${runId}`);
30
+ console.log(`📋 Summary: ${runData.summary.tests.passed} passed, ${runData.summary.tests.failed} failed`);
31
+ console.log('');
32
+
33
+ // 2. Vérifier que le run est accessible immédiatement
34
+ console.log('2️⃣ Vérification accès immédiat au rapport...');
35
+ const reportResponse = await fetch(`${BASE_URL}/api/report/gherkin?pack=${pack}&runId=${runId}`);
36
+
37
+ if (!reportResponse.ok) {
38
+ throw new Error(`GET /api/report/gherkin failed: ${reportResponse.status}`);
39
+ }
40
+
41
+ const reportData = await reportResponse.json();
42
+ console.log(`✅ Rapport accessible: ${reportData.routes.length} routes, ${reportData.gherkin.scenarios.length} scenarios`);
43
+ console.log('');
44
+
45
+ // 3. Vérifier deep-link
46
+ console.log('3️⃣ Vérification deep-link...');
47
+ const deepLinkResponse = await fetch(`${BASE_URL}/r/${pack}/${runId}`);
48
+
49
+ if (!deepLinkResponse.ok) {
50
+ throw new Error(`GET /r/${pack}/${runId} failed: ${deepLinkResponse.status}`);
51
+ }
52
+
53
+ console.log(`✅ Deep-link accessible: ${BASE_URL}/r/${pack}/${runId}`);
54
+ console.log('');
55
+
56
+ // 4. Simuler un redeploy (attendre 30s)
57
+ console.log('4️⃣ Simulation redeploy (attente 30s pour cold start)...');
58
+ await new Promise(resolve => setTimeout(resolve, 30000));
59
+ console.log('');
60
+
61
+ // 5. Vérifier persistance après "redeploy"
62
+ console.log('5️⃣ Vérification persistance après redeploy...');
63
+ const persistentReportResponse = await fetch(`${BASE_URL}/api/report/gherkin?pack=${pack}&runId=${runId}`);
64
+
65
+ if (!persistentReportResponse.ok) {
66
+ console.log(`❌ ÉCHEC PERSISTANCE: GET /api/report/gherkin failed: ${persistentReportResponse.status}`);
67
+ console.log('⚠️ Le store persistant (Vercel KV/Redis) n\'est pas branché correctement');
68
+ console.log('💡 Action requise: Configurer KV_REST_API_URL et KV_REST_API_TOKEN');
69
+ return false;
70
+ }
71
+
72
+ const persistentReportData = await persistentReportResponse.json();
73
+ console.log(`✅ PERSISTANCE OK: Rapport toujours accessible après redeploy`);
74
+ console.log(`📋 Données: ${persistentReportData.routes.length} routes, ${persistentReportData.gherkin.scenarios.length} scenarios`);
75
+ console.log('');
76
+
77
+ // 6. Vérifier deep-link persistant
78
+ console.log('6️⃣ Vérification deep-link persistant...');
79
+ const persistentDeepLinkResponse = await fetch(`${BASE_URL}/r/${pack}/${runId}`);
80
+
81
+ if (!persistentDeepLinkResponse.ok) {
82
+ console.log(`❌ Deep-link non persistant: ${persistentDeepLinkResponse.status}`);
83
+ return false;
84
+ }
85
+
86
+ console.log(`✅ Deep-link persistant: ${BASE_URL}/r/${pack}/${runId}`);
87
+ console.log('');
88
+
89
+ // 7. Vérifier KPI
90
+ console.log('7️⃣ Vérification KPI...');
91
+ const kpiResponse = await fetch(`${BASE_URL}/api/kpi`);
92
+
93
+ if (!kpiResponse.ok) {
94
+ console.log(`⚠️ KPI endpoint failed: ${kpiResponse.status}`);
95
+ } else {
96
+ const kpiData = await kpiResponse.json();
97
+ console.log(`✅ KPI accessible: ${Object.keys(kpiData.kpis || {}).length} packs avec KPI`);
98
+ }
99
+
100
+ console.log('');
101
+ console.log('🎉 AUDIT PERSISTANCE RÉUSSI');
102
+ console.log('✅ Store persistant opérationnel');
103
+ console.log('✅ Deep-links durables après redeploy');
104
+ console.log('✅ KPI accessibles');
105
+
106
+ return true;
107
+
108
+ } catch (error) {
109
+ console.error('❌ AUDIT PERSISTANCE ÉCHOUÉ:', error.message);
110
+ console.log('');
111
+ console.log('🔧 Actions correctives:');
112
+ console.log('1. Vérifier variables d\'environnement KV_REST_API_URL et KV_REST_API_TOKEN');
113
+ console.log('2. Configurer Vercel KV ou Upstash Redis');
114
+ console.log('3. Tester le fallback memory en développement');
115
+
116
+ return false;
117
+ }
118
+ }
119
+
120
+ // Exécuter si appelé directement
121
+ if (require.main === module) {
122
+ verifyPersistence().then(success => {
123
+ process.exit(success ? 0 : 1);
124
+ });
125
+ }
126
+
127
+ module.exports = { verifyPersistence };
package/test-pack.yaml ADDED
@@ -0,0 +1,43 @@
1
+ # QA360 Test Pack - Validation du Phase3Runner
2
+ # Cible : httpbin.org (API de test publique)
3
+
4
+ version: 1
5
+ name: "qa360-validation-test"
6
+ description: "Test de validation du Phase3Runner avec httpbin.org"
7
+
8
+ gates:
9
+ - api_smoke
10
+ - ui
11
+
12
+ targets:
13
+ api:
14
+ baseUrl: "https://httpbin.org"
15
+ smoke:
16
+ - "GET /get -> 200"
17
+ - "GET /ip -> 200"
18
+ - "GET /headers -> 200"
19
+ - "POST /post -> 200"
20
+
21
+ web:
22
+ baseUrl: "https://example.com"
23
+ pages:
24
+ - "https://example.com"
25
+
26
+ budgets:
27
+ perf_p95_ms: 5000
28
+ a11y_min: 70
29
+
30
+ security:
31
+ sast:
32
+ max_critical: 0
33
+ max_high: 5
34
+ max_medium: 20
35
+
36
+ execution:
37
+ timeout: 30000
38
+ max_retries: 1
39
+ on_failure: continue
40
+
41
+ observability:
42
+ metrics: true
43
+ trace: basic