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,787 @@
1
+ # RFC: QA360 Proof Bundle v1
2
+
3
+ **Status**: Draft
4
+ **Version**: 1.0.0
5
+ **Date**: 2025-10-26
6
+ **Authors**: QA360 Core Team
7
+
8
+ ---
9
+
10
+ ## Table of Contents
11
+
12
+ 1. [Motivation & Scope](#1-motivation--scope)
13
+ 2. [Terminology](#2-terminology)
14
+ 3. [Data Model](#3-data-model)
15
+ 4. [Canonicalization](#4-canonicalization)
16
+ 5. [Signature Procedure](#5-signature-procedure)
17
+ 6. [Verification Procedure](#6-verification-procedure)
18
+ 7. [JSON Schema](#7-json-schema)
19
+ 8. [Compatibility & Extensions](#8-compatibility--extensions)
20
+ 9. [Security Considerations](#9-security-considerations)
21
+ 10. [Examples](#10-examples)
22
+ 11. [Annexes](#11-annexes)
23
+
24
+ ---
25
+
26
+ ## 1. Motivation & Scope
27
+
28
+ ### 1.1 Problem Statement
29
+
30
+ Software quality testing generates artifacts (reports, metrics, logs) but lacks:
31
+ - **Verifiable integrity**: Can results be tampered with?
32
+ - **Portable proofs**: Can results be verified offline, cross-OS?
33
+ - **Legal admissibility**: Can results serve as evidence in audits?
34
+
35
+ ### 1.2 Solution
36
+
37
+ QA360 Proof Bundle v1 defines a **cryptographically signed, self-contained proof** of test execution that is:
38
+
39
+ - ✅ **Local-first**: No cloud dependencies
40
+ - ✅ **Cross-platform**: Same hash on Windows/macOS/Linux
41
+ - ✅ **Verifiable offline**: Ed25519 signature + SHA-256 hashes
42
+ - ✅ **Forward-compatible**: Reserved fields for RFC 3161 timestamps, DID/Sigstore identities
43
+
44
+ ### 1.3 Non-Goals (Phase 1)
45
+
46
+ - ❌ RFC 3161 timestamp verification (Phase 2)
47
+ - ❌ Sigstore/DID identity binding (Phase 2)
48
+ - ❌ Multi-signature support (Phase 3)
49
+ - ❌ Cloud storage/distribution (Phase 4)
50
+
51
+ ---
52
+
53
+ ## 2. Terminology
54
+
55
+ | Term | Definition |
56
+ |------|------------|
57
+ | **Proof Bundle** | JSON document containing run metadata, results, artifacts, and signature |
58
+ | **Canonical Form** | Deterministic JSON serialization (sorted keys, no whitespace) |
59
+ | **Run ID** | UUID v4 uniquely identifying a test execution |
60
+ | **Signer ID** | Identity of the signing entity (default: `local@qa360`) |
61
+ | **Artifact** | File produced during test run (report, screenshot, log) |
62
+ | **Trust Score** | Numeric quality metric (0-100) |
63
+ | **Gate** | Individual test category (api_smoke, perf, sast, etc.) |
64
+
65
+ ---
66
+
67
+ ## 3. Data Model
68
+
69
+ ### 3.1 Top-Level Structure
70
+
71
+ ```json
72
+ {
73
+ "spec": "qa360.proof.v1",
74
+ "run": { ... },
75
+ "artifacts": [ ... ],
76
+ "results": { ... },
77
+ "signing": { ... },
78
+ "signature": "base64-encoded-ed25519-signature"
79
+ }
80
+ ```
81
+
82
+ ### 3.2 Field Specifications
83
+
84
+ #### 3.2.1 `spec` (required)
85
+
86
+ - **Type**: `string`
87
+ - **Value**: `"qa360.proof.v1"` (immutable)
88
+ - **Purpose**: Version identifier for proof format
89
+
90
+ #### 3.2.2 `run` (required)
91
+
92
+ ```json
93
+ {
94
+ "id": "uuid-v4",
95
+ "startedAt": "2025-10-26T12:34:56Z",
96
+ "finishedAt": "2025-10-26T12:35:42Z",
97
+ "environment": {
98
+ "os": "windows|linux|darwin",
99
+ "node": "20.19.0",
100
+ "arch": "x64|arm64",
101
+ "ci": false
102
+ },
103
+ "packHash": "sha256-<64-hex-chars>",
104
+ "ciContext": {
105
+ "provider": null
106
+ }
107
+ }
108
+ ```
109
+
110
+ **Constraints**:
111
+ - `id`: UUID v4 format
112
+ - `startedAt`, `finishedAt`: ISO 8601 UTC timestamps
113
+ - `packHash`: SHA-256 of canonicalized pack.yml
114
+
115
+ #### 3.2.3 `artifacts` (required, can be empty array)
116
+
117
+ ```json
118
+ [
119
+ {
120
+ "name": "report.html",
121
+ "sha256": "sha256-<64-hex-chars>",
122
+ "size": 12345,
123
+ "path": ".qa360/artifacts/report.html"
124
+ }
125
+ ]
126
+ ```
127
+
128
+ **Constraints**:
129
+ - `name`: Relative filename
130
+ - `sha256`: SHA-256 hash (hex, lowercase)
131
+ - `size`: Bytes (integer ≥ 0)
132
+ - `path`: Relative path from proof bundle location
133
+
134
+ #### 3.2.4 `results` (required)
135
+
136
+ ```json
137
+ {
138
+ "trustScore": 87,
139
+ "gates": [
140
+ {
141
+ "name": "api_smoke",
142
+ "status": "pass|fail|skip",
143
+ "metrics": {
144
+ "p95_ms": 142,
145
+ "success_rate": 0.997
146
+ }
147
+ }
148
+ ]
149
+ }
150
+ ```
151
+
152
+ **Constraints**:
153
+ - `trustScore`: Integer 0-100
154
+ - `gates[].status`: Enum `pass|fail|skip`
155
+ - `gates[].metrics`: Optional object (gate-specific)
156
+
157
+ #### 3.2.5 `signing` (required)
158
+
159
+ ```json
160
+ {
161
+ "algo": "ed25519",
162
+ "signerId": "local@qa360",
163
+ "timestamp": {
164
+ "type": "none",
165
+ "token": null
166
+ },
167
+ "identity": {
168
+ "type": "none",
169
+ "evidence": null
170
+ }
171
+ }
172
+ ```
173
+
174
+ **Constraints**:
175
+ - `algo`: Fixed `"ed25519"` (Phase 1)
176
+ - `signerId`: String identifier (default: `local@qa360`)
177
+ - `timestamp.type`: `"none"` (Phase 1), `"rfc3161"` (Phase 2)
178
+ - `identity.type`: `"none"` (Phase 1), `"did"|"sigstore"` (Phase 2)
179
+
180
+ #### 3.2.6 `signature` (required)
181
+
182
+ - **Type**: `string`
183
+ - **Format**: Base64-encoded Ed25519 signature (88 chars)
184
+ - **Computed over**: SHA-256 hash of canonical JSON (excluding `signature` field)
185
+
186
+ ---
187
+
188
+ ## 4. Canonicalization
189
+
190
+ ### 4.1 Purpose
191
+
192
+ Ensure **deterministic serialization** across platforms, languages, and JSON libraries.
193
+
194
+ ### 4.2 Algorithm
195
+
196
+ ```
197
+ CANONICAL_JSON(obj):
198
+ 1. Remove "signature" field if present
199
+ 2. Sort all object keys alphabetically (recursive)
200
+ 3. Encode strings as UTF-8 NFC (Unicode normalization)
201
+ 4. Numbers: decimal notation (no scientific notation)
202
+ 5. Booleans/null: JSON literals (true, false, null)
203
+ 6. Omit empty optional objects/arrays
204
+ 7. No whitespace (compact form)
205
+ 8. Terminate with single \n
206
+ ```
207
+
208
+ ### 4.3 Example
209
+
210
+ **Input**:
211
+ ```json
212
+ {
213
+ "run": { "id": "abc", "startedAt": "2025-01-01T00:00:00Z" },
214
+ "spec": "qa360.proof.v1"
215
+ }
216
+ ```
217
+
218
+ **Canonical**:
219
+ ```
220
+ {"run":{"id":"abc","startedAt":"2025-01-01T00:00:00Z"},"spec":"qa360.proof.v1"}
221
+ ```
222
+
223
+ ### 4.4 Implementation Notes
224
+
225
+ - Use `JSON.stringify()` with custom replacer (sort keys)
226
+ - Apply Unicode NFC normalization (`String.prototype.normalize('NFC')`)
227
+ - Verify no BOM (Byte Order Mark) in UTF-8 encoding
228
+
229
+ ---
230
+
231
+ ## 5. Signature Procedure
232
+
233
+ ### 5.1 Key Generation (One-time)
234
+
235
+ ```bash
236
+ # Generate Ed25519 keypair
237
+ qa360 doctor --init-keys
238
+
239
+ # Stores:
240
+ # ~/.qa360/keys/ed25519.key (private, chmod 600)
241
+ # ~/.qa360/keys/ed25519.pub (public, chmod 644)
242
+ ```
243
+
244
+ ### 5.2 Signing Algorithm
245
+
246
+ ```
247
+ SIGN(proof_bundle):
248
+ 1. canonical = CANONICAL_JSON(proof_bundle)
249
+ 2. hash = SHA256(canonical)
250
+ 3. sig = Ed25519.sign(hash, private_key)
251
+ 4. proof_bundle.signature = base64(sig)
252
+ 5. return proof_bundle
253
+ ```
254
+
255
+ ### 5.3 Libraries
256
+
257
+ - **Node.js**: `tweetnacl` (Ed25519), `crypto` (SHA-256)
258
+ - **No network calls**: All operations local
259
+
260
+ ---
261
+
262
+ ## 6. Verification Procedure
263
+
264
+ ### 6.1 Algorithm
265
+
266
+ ```
267
+ VERIFY(proof_bundle):
268
+ 1. Extract signature_b64 = proof_bundle.signature
269
+ 2. Remove proof_bundle.signature
270
+ 3. canonical = CANONICAL_JSON(proof_bundle)
271
+ 4. hash = SHA256(canonical)
272
+ 5. sig = base64_decode(signature_b64)
273
+ 6. public_key = load_from(~/.qa360/keys/ed25519.pub)
274
+ 7. valid = Ed25519.verify(sig, hash, public_key)
275
+ 8. IF NOT valid: RETURN ERROR "Invalid signature"
276
+ 9. Validate JSON Schema (AJV)
277
+ 10. Verify artifact hashes (if artifacts present)
278
+ 11. RETURN SUCCESS
279
+ ```
280
+
281
+ ### 6.2 Exit Codes
282
+
283
+ | Code | Meaning |
284
+ |------|---------|
285
+ | 0 | Proof verified successfully |
286
+ | 1 | Invalid signature |
287
+ | 2 | Schema validation failed |
288
+ | 3 | Artifact hash mismatch |
289
+ | 4 | Missing public key |
290
+
291
+ ### 6.3 CLI Output
292
+
293
+ ```bash
294
+ $ qa360 verify .qa360/proofs/abc-123.json
295
+
296
+ ✅ Proof verified: OK
297
+ 🔏 Signer: local@qa360
298
+ 🔐 Hash: sha256-a1b2c3...
299
+ 📦 Artifacts: 7 (all verified)
300
+ ⏱️ Run: 2025-10-26T12:34:56Z → 2025-10-26T12:35:42Z
301
+ 🎯 Trust Score: 87/100
302
+ ```
303
+
304
+ ---
305
+
306
+ ## 7. JSON Schema
307
+
308
+ ### 7.1 Complete Schema (AJV v2020-12)
309
+
310
+ ```json
311
+ {
312
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
313
+ "$id": "https://qa360.ai/schemas/proof-bundle-v1.json",
314
+ "title": "QA360 Proof Bundle v1",
315
+ "type": "object",
316
+ "required": ["spec", "run", "artifacts", "results", "signing", "signature"],
317
+ "additionalProperties": false,
318
+ "properties": {
319
+ "spec": {
320
+ "type": "string",
321
+ "const": "qa360.proof.v1"
322
+ },
323
+ "run": {
324
+ "type": "object",
325
+ "required": ["id", "startedAt", "finishedAt", "environment", "packHash"],
326
+ "additionalProperties": false,
327
+ "properties": {
328
+ "id": {
329
+ "type": "string",
330
+ "format": "uuid"
331
+ },
332
+ "startedAt": {
333
+ "type": "string",
334
+ "format": "date-time"
335
+ },
336
+ "finishedAt": {
337
+ "type": "string",
338
+ "format": "date-time"
339
+ },
340
+ "environment": {
341
+ "type": "object",
342
+ "required": ["os", "node", "arch", "ci"],
343
+ "additionalProperties": false,
344
+ "properties": {
345
+ "os": {
346
+ "type": "string",
347
+ "enum": ["windows", "linux", "darwin"]
348
+ },
349
+ "node": {
350
+ "type": "string",
351
+ "pattern": "^\\d+\\.\\d+\\.\\d+$"
352
+ },
353
+ "arch": {
354
+ "type": "string",
355
+ "enum": ["x64", "arm64"]
356
+ },
357
+ "ci": {
358
+ "type": "boolean"
359
+ }
360
+ }
361
+ },
362
+ "packHash": {
363
+ "type": "string",
364
+ "pattern": "^sha256-[0-9a-f]{64}$"
365
+ },
366
+ "ciContext": {
367
+ "type": "object",
368
+ "properties": {
369
+ "provider": {
370
+ "type": ["string", "null"]
371
+ }
372
+ }
373
+ }
374
+ }
375
+ },
376
+ "artifacts": {
377
+ "type": "array",
378
+ "items": {
379
+ "type": "object",
380
+ "required": ["name", "sha256", "size"],
381
+ "additionalProperties": false,
382
+ "properties": {
383
+ "name": {
384
+ "type": "string",
385
+ "minLength": 1
386
+ },
387
+ "sha256": {
388
+ "type": "string",
389
+ "pattern": "^sha256-[0-9a-f]{64}$"
390
+ },
391
+ "size": {
392
+ "type": "integer",
393
+ "minimum": 0
394
+ },
395
+ "path": {
396
+ "type": "string"
397
+ }
398
+ }
399
+ }
400
+ },
401
+ "results": {
402
+ "type": "object",
403
+ "required": ["trustScore", "gates"],
404
+ "additionalProperties": false,
405
+ "properties": {
406
+ "trustScore": {
407
+ "type": "integer",
408
+ "minimum": 0,
409
+ "maximum": 100
410
+ },
411
+ "gates": {
412
+ "type": "array",
413
+ "items": {
414
+ "type": "object",
415
+ "required": ["name", "status"],
416
+ "additionalProperties": false,
417
+ "properties": {
418
+ "name": {
419
+ "type": "string",
420
+ "minLength": 1
421
+ },
422
+ "status": {
423
+ "type": "string",
424
+ "enum": ["pass", "fail", "skip"]
425
+ },
426
+ "metrics": {
427
+ "type": "object"
428
+ }
429
+ }
430
+ }
431
+ }
432
+ }
433
+ },
434
+ "signing": {
435
+ "type": "object",
436
+ "required": ["algo", "signerId", "timestamp", "identity"],
437
+ "additionalProperties": false,
438
+ "properties": {
439
+ "algo": {
440
+ "type": "string",
441
+ "const": "ed25519"
442
+ },
443
+ "signerId": {
444
+ "type": "string",
445
+ "minLength": 1
446
+ },
447
+ "timestamp": {
448
+ "type": "object",
449
+ "required": ["type"],
450
+ "properties": {
451
+ "type": {
452
+ "type": "string",
453
+ "enum": ["none", "rfc3161"]
454
+ },
455
+ "token": {
456
+ "type": ["string", "null"]
457
+ }
458
+ }
459
+ },
460
+ "identity": {
461
+ "type": "object",
462
+ "required": ["type"],
463
+ "properties": {
464
+ "type": {
465
+ "type": "string",
466
+ "enum": ["none", "did", "sigstore"]
467
+ },
468
+ "evidence": {
469
+ "type": ["string", "object", "null"]
470
+ }
471
+ }
472
+ }
473
+ }
474
+ },
475
+ "signature": {
476
+ "type": "string",
477
+ "pattern": "^[A-Za-z0-9+/]{86}==$"
478
+ }
479
+ }
480
+ }
481
+ ```
482
+
483
+ ---
484
+
485
+ ## 8. Compatibility & Extensions
486
+
487
+ ### 8.1 Forward Compatibility
488
+
489
+ **Reserved fields** for future phases (no implementation required in Phase 1):
490
+
491
+ #### 8.1.1 RFC 3161 Timestamp (Phase 2)
492
+
493
+ ```json
494
+ {
495
+ "signing": {
496
+ "timestamp": {
497
+ "type": "rfc3161",
498
+ "token": "base64-encoded-tsa-response"
499
+ }
500
+ }
501
+ }
502
+ ```
503
+
504
+ **Verification** (Phase 2):
505
+ - Parse TSA response
506
+ - Verify TSA signature chain
507
+ - Validate timestamp against run.finishedAt
508
+
509
+ #### 8.1.2 DID/Sigstore Identity (Phase 2)
510
+
511
+ ```json
512
+ {
513
+ "signing": {
514
+ "identity": {
515
+ "type": "did",
516
+ "evidence": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK"
517
+ }
518
+ }
519
+ }
520
+ ```
521
+
522
+ **Verification** (Phase 2):
523
+ - Resolve DID document
524
+ - Verify public key matches signature
525
+ - Validate identity claims
526
+
527
+ ### 8.2 Backward Compatibility
528
+
529
+ - **v1.0.0**: Initial release (this RFC)
530
+ - **v1.1.0+**: May add optional fields, MUST NOT remove required fields
531
+ - **v2.0.0**: Breaking changes allowed (new `spec` value)
532
+
533
+ ### 8.3 Extension Points
534
+
535
+ | Field | Purpose | Phase |
536
+ |-------|---------|-------|
537
+ | `ciContext.provider` | CI/CD metadata | 1 |
538
+ | `timestamp.token` | TSA response | 2 |
539
+ | `identity.evidence` | DID/Sigstore | 2 |
540
+ | `attestations` | Multi-sig | 3 |
541
+
542
+ ---
543
+
544
+ ## 9. Security Considerations
545
+
546
+ ### 9.1 Threat Model
547
+
548
+ | Threat | Mitigation |
549
+ |--------|------------|
550
+ | **Tampered results** | Ed25519 signature detects any modification |
551
+ | **Artifact substitution** | SHA-256 hashes verify artifact integrity |
552
+ | **Replay attacks** | UUID v4 run ID + timestamps |
553
+ | **Key compromise** | Rotation policy (Phase 2) |
554
+ | **Time manipulation** | RFC 3161 TSA (Phase 2) |
555
+
556
+ ### 9.2 Key Storage
557
+
558
+ **Local keys** (Phase 1):
559
+ ```
560
+ ~/.qa360/keys/
561
+ ├── ed25519.key (chmod 600, never commit)
562
+ └── ed25519.pub (chmod 644, shareable)
563
+ ```
564
+
565
+ **Best practices**:
566
+ - ✅ Generate keys with `qa360 doctor --init-keys`
567
+ - ✅ Backup private key securely
568
+ - ✅ Never commit private key to git
569
+ - ✅ Use environment variables in CI (`QA360_PRIVATE_KEY`)
570
+
571
+ ### 9.3 Redaction
572
+
573
+ **Sensitive data** in artifacts:
574
+ - Automatically redacted by QA360 Core (20+ patterns)
575
+ - Passwords, tokens, API keys, PII
576
+ - Redaction applied BEFORE hashing
577
+
578
+ ### 9.4 Audit Trail
579
+
580
+ **Proof bundles** are immutable:
581
+ - Stored in `.qa360/proofs/<runId>.json`
582
+ - Never modified after creation
583
+ - Retention policy: 90 days (configurable)
584
+
585
+ ---
586
+
587
+ ## 10. Examples
588
+
589
+ ### 10.1 Valid Proof Bundle
590
+
591
+ ```json
592
+ {
593
+ "spec": "qa360.proof.v1",
594
+ "run": {
595
+ "id": "550e8400-e29b-41d4-a716-446655440000",
596
+ "startedAt": "2025-10-26T12:34:56Z",
597
+ "finishedAt": "2025-10-26T12:35:42Z",
598
+ "environment": {
599
+ "os": "linux",
600
+ "node": "20.19.0",
601
+ "arch": "x64",
602
+ "ci": false
603
+ },
604
+ "packHash": "sha256-a1b2c3d4e5f6789012345678901234567890123456789012345678901234abcd",
605
+ "ciContext": {
606
+ "provider": null
607
+ }
608
+ },
609
+ "artifacts": [
610
+ {
611
+ "name": "report.html",
612
+ "sha256": "sha256-1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
613
+ "size": 12345,
614
+ "path": ".qa360/artifacts/report.html"
615
+ }
616
+ ],
617
+ "results": {
618
+ "trustScore": 87,
619
+ "gates": [
620
+ {
621
+ "name": "api_smoke",
622
+ "status": "pass",
623
+ "metrics": {
624
+ "p95_ms": 142,
625
+ "success_rate": 0.997
626
+ }
627
+ }
628
+ ]
629
+ },
630
+ "signing": {
631
+ "algo": "ed25519",
632
+ "signerId": "local@qa360",
633
+ "timestamp": {
634
+ "type": "none",
635
+ "token": null
636
+ },
637
+ "identity": {
638
+ "type": "none",
639
+ "evidence": null
640
+ }
641
+ },
642
+ "signature": "SGVsbG8gV29ybGQhIFRoaXMgaXMgYSBmYWtlIHNpZ25hdHVyZSBmb3IgZGVtbyBwdXJwb3Nlcy4K=="
643
+ }
644
+ ```
645
+
646
+ ### 10.2 Invalid Proof (Tampered)
647
+
648
+ **Scenario**: `trustScore` modified from 87 to 95
649
+
650
+ **Verification result**:
651
+ ```
652
+ ❌ Proof verification FAILED
653
+ 🔐 Signature mismatch (hash changed)
654
+ 📝 Expected: sha256-a1b2c3...
655
+ 📝 Got: sha256-d4e5f6...
656
+ ```
657
+
658
+ ### 10.3 Future: RFC 3161 Timestamp
659
+
660
+ ```json
661
+ {
662
+ "signing": {
663
+ "timestamp": {
664
+ "type": "rfc3161",
665
+ "token": "MIIBsAYJKoZIhvcNAQcCoIIBo..."
666
+ }
667
+ }
668
+ }
669
+ ```
670
+
671
+ **Note**: Token verification NOT implemented in Phase 1.
672
+
673
+ ---
674
+
675
+ ## 11. Annexes
676
+
677
+ ### 11.1 SHA-256 Format
678
+
679
+ **Pattern**: `sha256-[0-9a-f]{64}`
680
+
681
+ **Example**: `sha256-a1b2c3d4e5f6789012345678901234567890123456789012345678901234abcd`
682
+
683
+ **Computation**:
684
+ ```javascript
685
+ const crypto = require('crypto');
686
+ const hash = crypto.createHash('sha256')
687
+ .update(data, 'utf8')
688
+ .digest('hex');
689
+ const formatted = `sha256-${hash}`;
690
+ ```
691
+
692
+ ### 11.2 Unicode Normalization
693
+
694
+ **NFC (Canonical Composition)**:
695
+ ```javascript
696
+ const normalized = str.normalize('NFC');
697
+ ```
698
+
699
+ **Why**: Ensures `é` (U+00E9) and `é` (U+0065 U+0301) produce same hash.
700
+
701
+ ### 11.3 Error Codes
702
+
703
+ | Code | Symbol | Meaning |
704
+ |------|--------|---------|
705
+ | 0 | `PROOF_OK` | Verification successful |
706
+ | 1 | `PROOF_INVALID_SIG` | Signature verification failed |
707
+ | 2 | `PROOF_INVALID_SCHEMA` | JSON schema validation failed |
708
+ | 3 | `PROOF_ARTIFACT_MISMATCH` | Artifact hash doesn't match |
709
+ | 4 | `PROOF_MISSING_KEY` | Public key not found |
710
+ | 5 | `PROOF_MALFORMED` | Invalid JSON structure |
711
+
712
+ ### 11.4 CLI Reference
713
+
714
+ ```bash
715
+ # Verify single proof
716
+ qa360 verify .qa360/proofs/abc-123.json
717
+
718
+ # Verify all proofs in directory
719
+ qa360 verify .qa360/proofs/
720
+
721
+ # JSON output
722
+ qa360 verify proof.json --json
723
+
724
+ # Strict mode (require RFC 3161 timestamp)
725
+ qa360 verify proof.json --strict
726
+ ```
727
+
728
+ ### 11.5 Test Vectors
729
+
730
+ **Canonical JSON**:
731
+ ```
732
+ Input: {"b": 2, "a": 1}
733
+ Output: {"a":1,"b":2}\n
734
+ ```
735
+
736
+ **SHA-256**:
737
+ ```
738
+ Input: {"a":1,"b":2}\n
739
+ Output: sha256-559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd
740
+ ```
741
+
742
+ ---
743
+
744
+ ## Appendix: Implementation Checklist
745
+
746
+ ### Phase 1 (RFC + Core)
747
+
748
+ - [ ] `core/src/proof/bundle.ts` - Bundle creation
749
+ - [ ] `core/src/proof/canonicalize.ts` - Canonical JSON
750
+ - [ ] `core/src/proof/signer.ts` - Ed25519 sign/verify
751
+ - [ ] `core/src/proof/verifier.ts` - Full verification
752
+ - [ ] `core/src/proof/schema.ts` - AJV validation
753
+
754
+ ### Phase 2 (CLI)
755
+
756
+ - [ ] `cli/src/commands/verify.ts` - Verification command
757
+ - [ ] `cli/src/commands/doctor.ts` - Add proof system check
758
+ - [ ] Key generation (`--init-keys`)
759
+
760
+ ### Phase 3 (Tests)
761
+
762
+ - [ ] `tests/e2e/proof-bundle.test.ts` - E2E tests
763
+ - [ ] Cross-OS validation (Windows/macOS/Linux)
764
+ - [ ] Roundtrip sign/verify
765
+
766
+ ### Phase 4 (Examples)
767
+
768
+ - [ ] `examples/proofs/httpbin-proof.json`
769
+ - [ ] `examples/proofs/e2e-playwright-proof.json`
770
+ - [ ] `examples/proofs/multi-adapter-proof.json`
771
+
772
+ ---
773
+
774
+ ## References
775
+
776
+ - [RFC 3161](https://www.rfc-editor.org/rfc/rfc3161) - Time-Stamp Protocol (TSP)
777
+ - [Ed25519](https://ed25519.cr.yp.to/) - High-speed high-security signatures
778
+ - [JSON Canonicalization](https://www.rfc-editor.org/rfc/rfc8785) - JCS (RFC 8785)
779
+ - [JSON Schema](https://json-schema.org/draft/2020-12/schema) - v2020-12
780
+ - [DID](https://www.w3.org/TR/did-core/) - Decentralized Identifiers
781
+ - [Sigstore](https://www.sigstore.dev/) - Software signing service
782
+
783
+ ---
784
+
785
+ **Document Status**: ✅ Ready for Implementation
786
+ **Next Steps**: Phase 2 - Core Implementation (`bundle.ts`, `signer.ts`, `verifier.ts`)
787
+