@veraxhq/verax 0.4.0 → 0.4.5

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 (557) hide show
  1. package/README.md +194 -165
  2. package/bin/verax.js +5 -1
  3. package/package.json +14 -5
  4. package/src/cli/commands/inspect.js +95 -56
  5. package/src/cli/commands/run.js +1375 -534
  6. package/src/cli/config/cli-contract.js +182 -0
  7. package/src/cli/config/enterprise-policy.js +264 -0
  8. package/src/cli/entry.js +567 -142
  9. package/src/cli/phases/detect-phase.js +91 -0
  10. package/src/cli/phases/execute-phase.js +56 -0
  11. package/src/cli/phases/finalize-phase.js +125 -0
  12. package/src/cli/phases/initialize-phase.js +75 -0
  13. package/src/cli/phases/learn-phase.js +15 -0
  14. package/src/cli/phases/observe-phase.js +23 -0
  15. package/src/cli/run/error-writer.js +82 -0
  16. package/src/cli/run/failure-matrix.js +22 -0
  17. package/src/cli/run/output-summary.js +120 -0
  18. package/src/cli/run/timeout-handler.js +85 -0
  19. package/src/cli/run/validation-simple.js +45 -0
  20. package/src/cli/run-helpers/print-console-summary.js +35 -0
  21. package/src/cli/run-helpers/validate-inputs.js +30 -0
  22. package/src/cli/run-helpers/write-error-artifacts.js +83 -0
  23. package/src/cli/run-helpers/write-final-artifacts.js +102 -0
  24. package/src/cli/run-helpers/write-initial-artifacts.js +50 -0
  25. package/src/cli/util/atomic-write.js +171 -36
  26. package/src/cli/util/auth/auth-applier.js +153 -0
  27. package/src/cli/util/auth/auth-config.js +63 -0
  28. package/src/cli/util/auth/auth-utils.js +252 -0
  29. package/src/cli/util/auth/auth-verifier.js +101 -0
  30. package/src/cli/util/bounded-collections.js +241 -0
  31. package/src/cli/util/ci/artifact-pack.js +184 -0
  32. package/src/cli/util/config/defaults.js +136 -0
  33. package/src/cli/util/{env-url.js → config/env-url.js} +3 -0
  34. package/src/cli/util/config/load-config.js +127 -0
  35. package/src/cli/util/{monorepo-resolver.js → config/monorepo-resolver.js} +4 -1
  36. package/src/cli/util/{project-discovery.js → config/project-discovery.js} +111 -98
  37. package/src/cli/util/config/project-shape.js +114 -0
  38. package/src/cli/util/config/redaction-config.js +103 -0
  39. package/src/cli/util/config/source-discovery.js +241 -0
  40. package/src/cli/util/{source-requirement.js → config/source-requirement.js} +6 -3
  41. package/src/cli/util/config/src-resolver.js +33 -0
  42. package/src/cli/util/{url-validation.js → config/url-validation.js} +8 -0
  43. package/src/cli/util/contracts/output-contract.js +332 -0
  44. package/src/cli/util/{angular-component-extractor.js → detection/angular-component-extractor.js} +3 -0
  45. package/src/cli/util/detection/angular-extractor.js +314 -0
  46. package/src/cli/util/{angular-navigation-detector.js → detection/angular-navigation-detector.js} +20 -0
  47. package/src/cli/util/{angular-network-detector.js → detection/angular-network-detector.js} +21 -0
  48. package/src/cli/util/{angular-state-detector.js → detection/angular-state-detector.js} +20 -0
  49. package/src/cli/util/{ast-interactive-detector.js → detection/ast-interactive-detector.js} +10 -11
  50. package/src/cli/util/{ast-network-detector.js → detection/ast-network-detector.js} +7 -16
  51. package/src/cli/util/{ast-promise-extractor.js → detection/ast-promise-extractor.js} +3 -0
  52. package/src/cli/util/{ast-usestate-detector.js → detection/ast-usestate-detector.js} +13 -29
  53. package/src/cli/util/detection/base-detector.js +25 -0
  54. package/src/cli/util/detection/client-side-routing-detector.js +117 -0
  55. package/src/cli/util/detection/detection-engine.js +373 -0
  56. package/src/cli/util/detection/detector-registry.js +99 -0
  57. package/src/cli/util/detection/evidence-law.js +82 -0
  58. package/src/cli/util/detection/finding-explanation.js +101 -0
  59. package/src/cli/util/{framework-detector.js → detection/framework-detector.js} +6 -3
  60. package/src/cli/util/detection/loading-resolution-detector.js +127 -0
  61. package/src/cli/util/detection/nextjs-observable-detector.js +179 -0
  62. package/src/cli/util/detection/promise-extractor-2.js +859 -0
  63. package/src/cli/util/detection/react-observable-detector.js +211 -0
  64. package/src/cli/util/detection/risk-framing.js +99 -0
  65. package/src/cli/util/detection/silent-failure-classifier.js +607 -0
  66. package/src/cli/util/detection/silent-failure-intelligence.js +89 -0
  67. package/src/cli/util/detection/static-string-resolver.js +333 -0
  68. package/src/cli/util/{svelte-navigation-detector.js → detection/svelte-navigation-detector.js} +20 -0
  69. package/src/cli/util/{svelte-network-detector.js → detection/svelte-network-detector.js} +21 -0
  70. package/src/cli/util/{svelte-sfc-extractor.js → detection/svelte-sfc-extractor.js} +3 -0
  71. package/src/cli/util/{svelte-state-detector.js → detection/svelte-state-detector.js} +21 -0
  72. package/src/cli/util/detection/sveltekit-extractor.js +247 -0
  73. package/src/cli/util/detection/test-silent-failure-contract.js +674 -0
  74. package/src/cli/util/detection/ui-feedback-pattern-detector.js +192 -0
  75. package/src/cli/util/detection/vue-extractor.js +151 -0
  76. package/src/cli/util/detection/vue-navigation-detector.js +154 -0
  77. package/src/cli/util/detection/vue-observable-detector.js +162 -0
  78. package/src/cli/util/{vue-sfc-extractor.js → detection/vue-sfc-extractor.js} +3 -0
  79. package/src/cli/util/detection/vue-state-detector.js +160 -0
  80. package/src/cli/util/detection-engine.js +492 -308
  81. package/src/cli/util/diagnostics/diagnostics-engine.js +379 -0
  82. package/src/cli/util/evidence/coverage-writer.js +58 -0
  83. package/src/cli/util/{digest-engine.js → evidence/digest-engine.js} +37 -9
  84. package/src/cli/util/evidence/dom-redactor.js +172 -0
  85. package/src/cli/util/evidence/evidence-attribution.js +356 -0
  86. package/src/cli/util/evidence/evidence-budget.js +167 -0
  87. package/src/cli/util/evidence/evidence-deduplication.js +378 -0
  88. package/src/cli/util/{evidence-engine.js → evidence/evidence-engine.js} +90 -16
  89. package/src/cli/util/evidence/evidence-integrity.js +114 -0
  90. package/src/cli/util/evidence/evidence-manifest.js +109 -0
  91. package/src/cli/util/evidence/evidence-size-tracker.js +170 -0
  92. package/src/cli/util/evidence/evidence-stream-writer.js +221 -0
  93. package/src/cli/util/evidence/evidence-validator.js +381 -0
  94. package/src/cli/util/evidence/findings-writer.js +48 -0
  95. package/src/cli/util/evidence/human-summary-writer.js +75 -0
  96. package/src/cli/util/evidence/integrity-manifest.js +199 -0
  97. package/src/cli/util/evidence/interaction-intent-record.js +175 -0
  98. package/src/cli/util/evidence/judgments-writer.js +81 -0
  99. package/src/cli/util/evidence/learn-writer.js +67 -0
  100. package/src/cli/util/{ledger-writer.js → evidence/ledger-writer.js} +9 -17
  101. package/src/cli/util/{redact.js → evidence/redact.js} +83 -13
  102. package/src/cli/util/evidence/screenshot-redactor.js +298 -0
  103. package/src/cli/util/evidence/summary-writer.js +143 -0
  104. package/src/cli/util/explain/explain-engine.js +550 -0
  105. package/src/cli/util/integrity-validator.js +248 -0
  106. package/src/cli/util/internals/diagnose/artifact-writer.js +22 -0
  107. package/src/cli/util/internals/diagnose/diagnostics-generator.js +29 -0
  108. package/src/cli/util/internals/diagnose/output-formatter.js +223 -0
  109. package/src/cli/util/internals/diagnose/run-id-resolver.js +41 -0
  110. package/src/cli/util/internals/stability-run/batch-executor.js +47 -0
  111. package/src/cli/util/internals/stability-run/batch-utils.js +38 -0
  112. package/src/cli/util/internals/stability-run/output-formatter.js +115 -0
  113. package/src/cli/util/internals/stability-run/report-generator.js +38 -0
  114. package/src/cli/util/observation/action-dispatcher.js +133 -0
  115. package/src/cli/util/observation/alignment-guard.js +182 -0
  116. package/src/cli/util/observation/anti-false-green.js +255 -0
  117. package/src/cli/util/observation/diagnostics-collector.js +171 -0
  118. package/src/cli/util/observation/diagnostics-summary.js +77 -0
  119. package/src/cli/util/observation/dom-diff.js +386 -0
  120. package/src/cli/util/observation/evidence-capture-service.js +222 -0
  121. package/src/cli/util/{expectation-extractor.js → observation/expectation-extractor.js} +231 -19
  122. package/src/cli/util/observation/feedback-scope.js +513 -0
  123. package/src/cli/util/observation/interaction-intent-engine.js +218 -0
  124. package/src/cli/util/observation/interaction-planner.js +827 -0
  125. package/src/cli/util/observation/observation-engine.js +582 -0
  126. package/src/cli/util/observation/observation-profile.js +334 -0
  127. package/src/cli/util/observation/observe-writer.js +56 -0
  128. package/src/cli/util/observation/outcome-evaluator.js +224 -0
  129. package/src/cli/util/observation/outcome-truth-matrix.js +436 -0
  130. package/src/cli/util/observation/outcome-watcher.js +245 -0
  131. package/src/cli/util/observation/progressive-acknowledgment.js +158 -0
  132. package/src/cli/util/observation/route-sensor.js +266 -0
  133. package/src/cli/util/{runtime-budget.js → observation/runtime-budget.js} +6 -12
  134. package/src/cli/util/observation/runtime-micro-crawl.js +248 -0
  135. package/src/cli/util/observation/runtime-navigation-discovery.js +352 -0
  136. package/src/cli/util/observation/runtime-readiness.js +128 -0
  137. package/src/cli/util/{selector-resolver.js → observation/selector-resolver.js} +93 -28
  138. package/src/cli/util/observation/silence-classifier.js +369 -0
  139. package/src/cli/util/observation/test-mode-budget.js +28 -0
  140. package/src/cli/util/observation/test-mode-stub.js +108 -0
  141. package/src/cli/util/{trust-activation-integration.js → observation/trust-activation-integration.js} +13 -9
  142. package/src/cli/util/{trust-activation-wrapper.js → observation/trust-activation-wrapper.js} +3 -0
  143. package/src/cli/util/{trust-integration-hooks.js → observation/trust-integration-hooks.js} +2 -10
  144. package/src/cli/util/observation/ui-mutation-tracker.js +212 -0
  145. package/src/cli/util/output/cli-ux-formatter.js +300 -0
  146. package/src/cli/util/output/human-summary-generator.js +358 -0
  147. package/src/cli/util/output/judgment-ux.js +345 -0
  148. package/src/cli/util/output/product-seal.js +279 -0
  149. package/src/cli/util/performance-hooks.js +93 -0
  150. package/src/cli/util/policy/policy-loader.js +288 -0
  151. package/src/cli/util/profiles/profile-loader.js +150 -0
  152. package/src/cli/util/run-artifact-validation.js +343 -0
  153. package/src/cli/util/run-cache.js +255 -0
  154. package/src/cli/util/run-completion-sentinel.js +148 -0
  155. package/src/cli/util/stability/stability-engine.js +522 -0
  156. package/src/cli/util/support/atomic-write.js +51 -0
  157. package/src/cli/util/{bootstrap-guard.js → support/bootstrap-guard.js} +3 -0
  158. package/src/cli/util/support/canonical-naming.js +273 -0
  159. package/src/cli/util/support/cleanup-logger.js +67 -0
  160. package/src/cli/util/support/console-formatters.js +127 -0
  161. package/src/cli/util/{console-reporter.js → support/console-reporter.js} +12 -4
  162. package/src/cli/util/support/decision-snapshot.js +220 -0
  163. package/src/cli/util/support/deprecation.js +111 -0
  164. package/src/cli/util/support/determinism-normalizer.js +168 -0
  165. package/src/cli/util/{determinism-runner.js → support/determinism-runner.js} +9 -12
  166. package/src/cli/util/{determinism-writer.js → support/determinism-writer.js} +16 -21
  167. package/src/cli/util/support/error-contract.js +182 -0
  168. package/src/cli/util/support/errors.js +54 -0
  169. package/src/cli/util/{events.js → support/events.js} +10 -5
  170. package/src/cli/util/support/first-run-detection.js +79 -0
  171. package/src/cli/util/{idgen.js → support/idgen.js} +3 -0
  172. package/src/cli/util/support/normalize-path.js +24 -0
  173. package/src/cli/util/support/paths.js +84 -0
  174. package/src/cli/util/{project-writer.js → support/project-writer.js} +4 -1
  175. package/src/cli/util/support/retention.js +155 -0
  176. package/src/cli/util/support/run-dir-resolver.js +179 -0
  177. package/src/cli/util/support/run-id.js +88 -0
  178. package/src/cli/util/support/run-manifest.js +148 -0
  179. package/src/cli/util/{run-resolver.js → support/run-resolver.js} +5 -0
  180. package/src/cli/util/{run-result.js → support/run-result.js} +53 -80
  181. package/src/cli/util/support/run-sequence.js +96 -0
  182. package/src/cli/util/support/scan-index.js +75 -0
  183. package/src/cli/util/support/src-auto-discovery.js +143 -0
  184. package/src/cli/util/support/time-provider.js +137 -0
  185. package/src/cli/util/{types.js → support/types.js} +7 -4
  186. package/src/cli/util/timeout-manager.js +210 -0
  187. package/src/cli/util/triage/triage-engine.js +414 -0
  188. package/src/cli/util/ux-output-integration.js +168 -0
  189. package/src/config/runtime-contract.js +27 -0
  190. package/src/internal/future-gates/README.md +45 -0
  191. package/src/internal/future-gates/commands/clean.js +142 -0
  192. package/src/internal/future-gates/commands/diagnose.js +53 -0
  193. package/src/{cli → internal/future-gates}/commands/doctor.js +23 -7
  194. package/src/internal/future-gates/commands/explain.js +208 -0
  195. package/src/internal/future-gates/commands/gate.js +113 -0
  196. package/src/internal/future-gates/commands/stability-run.js +84 -0
  197. package/src/internal/future-gates/commands/stability.js +164 -0
  198. package/src/internal/future-gates/commands/triage.js +109 -0
  199. package/src/{verax/core → internal/future-gates}/dynamic-route-intelligence.js +53 -10
  200. package/src/internal/future-gates/ga/ga.contract.js +77 -0
  201. package/src/internal/future-gates/ga/ga.enforcer.js +50 -0
  202. package/src/internal/future-gates/release/provenance.builder.js +58 -0
  203. package/src/internal/future-gates/release/release.enforcer.js +90 -0
  204. package/src/internal/future-gates/security/security.enforcer.js +72 -0
  205. package/src/{verax/core → internal/future-gates}/truth/truth.certificate.js +7 -2
  206. package/src/internal/future-gates/v1-runtime-seal.js +119 -0
  207. package/src/internal/future-gates/vision/compliance-engine.js +423 -0
  208. package/src/internal/future-gates/vision/vision-checklist.js +119 -0
  209. package/src/internal/future-gates/vision/vision-resolver.js +1040 -0
  210. package/src/types/global.d.ts +27 -0
  211. package/src/types/internal-types.d.ts +1 -1
  212. package/src/types/node/index.d.ts +15 -0
  213. package/src/types/node-process.d.ts +17 -0
  214. package/src/util/bounded-collections.js +216 -0
  215. package/src/util/run-cache.js +160 -0
  216. package/src/verax/cleanup-engine.js +274 -0
  217. package/src/verax/cli/ci-summary.js +3 -0
  218. package/src/verax/cli/context-explanation.js +3 -0
  219. package/src/verax/cli/doctor.js +68 -49
  220. package/src/verax/cli/error-normalizer.js +3 -0
  221. package/src/verax/cli/explain-output.js +3 -0
  222. package/src/verax/cli/finding-explainer.js +3 -0
  223. package/src/verax/cli/init.js +3 -0
  224. package/src/verax/cli/run-overview.js +3 -0
  225. package/src/verax/cli/url-safety.js +4 -0
  226. package/src/verax/cli/wizard.js +4 -0
  227. package/src/verax/cli/zero-findings-explainer.js +3 -0
  228. package/src/verax/cli/zero-interaction-explainer.js +3 -0
  229. package/src/verax/core/action-classifier.js +3 -0
  230. package/src/verax/core/artifacts/registry.js +24 -0
  231. package/src/verax/core/artifacts/verifier-validations.js +565 -0
  232. package/src/verax/core/artifacts/verifier.js +396 -989
  233. package/src/verax/core/baseline/baseline.enforcer.js +3 -0
  234. package/src/verax/core/baseline/baseline.snapshot.js +8 -4
  235. package/src/verax/core/budget-engine.js +3 -0
  236. package/src/verax/core/budgets.js +126 -0
  237. package/src/verax/core/canonical-artifacts-contract.js +306 -0
  238. package/src/verax/core/canonical-outcomes.js +3 -0
  239. package/src/verax/core/capabilities/gates.js +21 -10
  240. package/src/verax/core/capabilities/registry.js +22 -19
  241. package/src/verax/core/confidence/confidence-compute.js +200 -21
  242. package/src/verax/core/confidence/confidence-invariants.js +3 -0
  243. package/src/verax/core/confidence/confidence-report-writer.js +6 -1
  244. package/src/verax/core/confidence/confidence-weights.js +3 -0
  245. package/src/verax/core/confidence/confidence.defaults.js +3 -0
  246. package/src/verax/core/confidence/confidence.loader.js +4 -1
  247. package/src/verax/core/confidence/confidence.schema.js +3 -0
  248. package/src/verax/core/confidence/explanation-helpers.js +281 -0
  249. package/src/verax/core/confidence/index.js +233 -0
  250. package/src/verax/core/confidence/policy-cache.js +85 -0
  251. package/src/verax/core/confidence/reason-codes.js +257 -0
  252. package/src/verax/core/confidence-engine.js +19 -4
  253. package/src/verax/core/console-log-filter.js +199 -0
  254. package/src/verax/core/contracts/index.js +3 -0
  255. package/src/verax/core/contracts/types.js +3 -0
  256. package/src/verax/core/contracts/validators.js +7 -15
  257. package/src/verax/core/decision/evaluate-decision-usefulness.js +86 -0
  258. package/src/verax/core/decision-snapshot.js +3 -0
  259. package/src/verax/core/decisions/decision.trace.js +19 -5
  260. package/src/verax/core/determinism/contract-writer.js +5 -1
  261. package/src/verax/core/determinism/contract.js +3 -0
  262. package/src/verax/core/determinism/diff.js +14 -5
  263. package/src/verax/core/determinism/engine.js +12 -22
  264. package/src/verax/core/determinism/finding-identity.js +4 -1
  265. package/src/verax/core/determinism/normalize.js +6 -3
  266. package/src/verax/core/determinism/output-serializer.js +184 -0
  267. package/src/verax/core/determinism/report-writer.js +9 -14
  268. package/src/verax/core/determinism/run-fingerprint.js +61 -15
  269. package/src/verax/core/determinism-analyzer.js +118 -0
  270. package/src/verax/core/determinism-model.js +15 -10
  271. package/src/verax/core/evidence/evaluate-evidence-quality.js +145 -0
  272. package/src/verax/core/evidence/evidence-capture-service.js +18 -4
  273. package/src/verax/core/evidence/evidence-intent-ledger.js +10 -3
  274. package/src/verax/core/evidence-builder/build-evidence.js +283 -0
  275. package/src/verax/core/evidence-builder/enforce-evidence.js +117 -0
  276. package/src/verax/core/evidence-builder/errors.js +13 -0
  277. package/src/verax/core/evidence-builder/validate-evidence.js +92 -0
  278. package/src/verax/core/evidence-builder.js +24 -380
  279. package/src/verax/core/evidence-security-policy.js +443 -0
  280. package/src/verax/core/execution-mode-context.js +3 -0
  281. package/src/verax/core/execution-mode-detector.js +6 -1
  282. package/src/verax/core/failures/exit-codes.js +34 -25
  283. package/src/verax/core/failures/failure-mode-matrix.js +132 -0
  284. package/src/verax/core/failures/failure-summary.js +3 -0
  285. package/src/verax/core/failures/failure.factory.js +5 -1
  286. package/src/verax/core/failures/failure.ledger.js +10 -4
  287. package/src/verax/core/failures/failure.types.js +3 -0
  288. package/src/verax/core/failures/index.js +3 -0
  289. package/src/verax/core/framework-support.js +43 -0
  290. package/src/verax/core/ga/ga-report-writer.js +8 -2
  291. package/src/verax/core/ga/ga.artifact.js +4 -4
  292. package/src/verax/core/ga/ga.contract.js +10 -8
  293. package/src/verax/core/ga/ga.enforcer.js +7 -1
  294. package/src/verax/core/gates/enforce-gate-outcome.js +178 -0
  295. package/src/verax/core/gates/evaluate-gate-outcome.js +50 -0
  296. package/src/verax/core/gates/format-gate-preview.js +73 -0
  297. package/src/verax/core/gates/load-gate-policy.js +112 -0
  298. package/src/verax/core/guardrails/guardrails-report-writer.js +7 -2
  299. package/src/verax/core/guardrails/policy.defaults.js +3 -0
  300. package/src/verax/core/guardrails/policy.loader.js +4 -1
  301. package/src/verax/core/guardrails/policy.schema.js +3 -0
  302. package/src/verax/core/guardrails/truth-reconciliation.js +3 -0
  303. package/src/verax/core/guardrails-engine/apply-guardrails.js +87 -0
  304. package/src/verax/core/guardrails-engine/evaluate-rule.js +310 -0
  305. package/src/verax/core/guardrails-engine/policy-cache.js +14 -0
  306. package/src/verax/core/guardrails-engine.js +18 -171
  307. package/src/verax/core/incremental-store.js +8 -2
  308. package/src/verax/core/integrity/budget.js +4 -1
  309. package/src/verax/core/integrity/determinism.js +15 -10
  310. package/src/verax/core/integrity/integrity.js +9 -3
  311. package/src/verax/core/integrity/poisoning.js +8 -2
  312. package/src/verax/core/integrity/transaction.js +4 -1
  313. package/src/verax/core/invariants.js +3 -0
  314. package/src/verax/core/network-trace-sanitizer.js +311 -0
  315. package/src/verax/core/observe/run-timeline.js +24 -17
  316. package/src/verax/core/perf/perf.contract.js +3 -0
  317. package/src/verax/core/perf/perf.display.js +3 -0
  318. package/src/verax/core/perf/perf.enforcer.js +3 -0
  319. package/src/verax/core/perf/perf.monitor.js +12 -8
  320. package/src/verax/core/perf/perf.report.js +13 -5
  321. package/src/verax/core/pipeline-tracker.js +14 -14
  322. package/src/verax/core/product-contract.js +440 -0
  323. package/src/verax/core/product-definition.js +5 -1
  324. package/src/verax/core/promise-model.js +3 -0
  325. package/src/verax/core/release/provenance.builder.js +9 -2
  326. package/src/verax/core/release/release-report-writer.js +7 -2
  327. package/src/verax/core/release/release.enforcer.js +13 -6
  328. package/src/verax/core/release/reproducibility.check.js +9 -4
  329. package/src/verax/core/release/sbom.builder.js +18 -7
  330. package/src/verax/core/report/cross-index.js +24 -9
  331. package/src/verax/core/report/human-summary.js +7 -2
  332. package/src/verax/core/route-intelligence/pattern-utils.js +78 -0
  333. package/src/verax/core/route-intelligence.js +47 -77
  334. package/src/verax/core/run-id.js +6 -14
  335. package/src/verax/core/run-manifest.js +11 -5
  336. package/src/verax/core/runtime-stability-contract.js +60 -0
  337. package/src/verax/core/scope-policy.js +282 -0
  338. package/src/verax/core/security/secrets.scan.js +16 -7
  339. package/src/verax/core/security/security-report.js +7 -2
  340. package/src/verax/core/security/security.enforcer.js +10 -4
  341. package/src/verax/core/security/supplychain.policy.js +15 -8
  342. package/src/verax/core/security/vuln.scan.js +15 -4
  343. package/src/verax/core/silence-impact.js +3 -0
  344. package/src/verax/core/silence-model.js +12 -18
  345. package/src/verax/core/truth-classifier.js +354 -0
  346. package/src/verax/core/ui-feedback-intelligence/build-evidence.js +50 -0
  347. package/src/verax/core/ui-feedback-intelligence/correlate-promise.js +90 -0
  348. package/src/verax/core/ui-feedback-intelligence/detect-signals.js +160 -0
  349. package/src/verax/core/ui-feedback-intelligence/score-signals.js +101 -0
  350. package/src/verax/core/ui-feedback-intelligence/types.js +18 -0
  351. package/src/verax/core/ui-feedback-intelligence.js +11 -420
  352. package/src/verax/detect/ci-integration.js +227 -0
  353. package/src/verax/detect/comparison.js +3 -38
  354. package/src/verax/detect/conditional-ui-silent-failure.js +13 -5
  355. package/src/verax/detect/confidence/evidence-signals.js +15 -0
  356. package/src/verax/detect/confidence/expectation-strength.js +38 -0
  357. package/src/verax/detect/confidence/finalize.js +180 -0
  358. package/src/verax/detect/confidence/index.js +236 -0
  359. package/src/verax/detect/confidence/scoring/apply-rules.js +85 -0
  360. package/src/verax/detect/confidence/scoring/flow_silent_failure.js +24 -0
  361. package/src/verax/detect/confidence/scoring/index.js +81 -0
  362. package/src/verax/detect/confidence/scoring/missing_feedback_failure.js +23 -0
  363. package/src/verax/detect/confidence/scoring/missing_network_action.js +25 -0
  364. package/src/verax/detect/confidence/scoring/missing_state_action.js +24 -0
  365. package/src/verax/detect/confidence/scoring/navigation_silent_failure.js +23 -0
  366. package/src/verax/detect/confidence/scoring/network_silent_failure.js +23 -0
  367. package/src/verax/detect/confidence/scoring/no_effect_silent_failure.js +23 -0
  368. package/src/verax/detect/confidence/scoring/observed_break.js +24 -0
  369. package/src/verax/detect/confidence/scoring/partial_navigation_failure.js +23 -0
  370. package/src/verax/detect/confidence/scoring/predicates.js +76 -0
  371. package/src/verax/detect/confidence/scoring/rules-table.js +138 -0
  372. package/src/verax/detect/confidence/scoring/validation_silent_failure.js +23 -0
  373. package/src/verax/detect/confidence/sensor-presence.js +97 -0
  374. package/src/verax/detect/confidence-calibrator.js +370 -0
  375. package/src/verax/detect/confidence-engine.legacy.js +41 -0
  376. package/src/verax/detect/confidence-helper.js +8 -5
  377. package/src/verax/detect/constitution-validator.js +463 -0
  378. package/src/verax/detect/coverage-enforcement.js +175 -0
  379. package/src/verax/detect/coverage-truth.js +218 -0
  380. package/src/verax/detect/deduplication.js +171 -0
  381. package/src/verax/detect/detection-engine.js +5 -1
  382. package/src/verax/detect/determinism-lock.js +253 -0
  383. package/src/verax/detect/dynamic-route-findings.js +54 -141
  384. package/src/verax/detect/evidence-index.js +6 -5
  385. package/src/verax/detect/evidence-law-enforcer.js +378 -0
  386. package/src/verax/detect/evidence-validator.js +3 -29
  387. package/src/verax/detect/execution-judgment-consistency.js +233 -0
  388. package/src/verax/detect/execution-record.js +234 -0
  389. package/src/verax/detect/exit-code-mapper.js +207 -0
  390. package/src/verax/detect/expectation-chain-detector.js +6 -3
  391. package/src/verax/detect/expectation-model.js +4 -1
  392. package/src/verax/detect/explanation-helpers.js +3 -0
  393. package/src/verax/detect/{failure-cause-inference.js → failure-cause-derivation.js} +17 -9
  394. package/src/verax/detect/{problem-aggregator.js → finding-aggregator.js} +13 -5
  395. package/src/verax/detect/finding-contract.js +221 -0
  396. package/src/verax/detect/finding-detector.js +16 -3
  397. package/src/verax/detect/findings-writer.js +140 -99
  398. package/src/verax/detect/flow-detector.js +12 -4
  399. package/src/verax/detect/form-silent-failure.js +8 -0
  400. package/src/verax/detect/index.js +69 -18
  401. package/src/verax/detect/interactive-findings.js +91 -16
  402. package/src/verax/detect/invariants-enforcer.js +118 -22
  403. package/src/verax/detect/invisible-state-failure.js +103 -0
  404. package/src/verax/detect/journey-stall-detector.js +6 -1
  405. package/src/verax/detect/judgment-builder.js +307 -0
  406. package/src/verax/detect/judgment-mapper.js +128 -0
  407. package/src/verax/detect/loading-hang-detector.js +95 -0
  408. package/src/verax/detect/navigation-silent-failure.js +9 -1
  409. package/src/verax/detect/output-normalizer.js +353 -0
  410. package/src/verax/detect/post-auth-findings.js +239 -0
  411. package/src/verax/detect/render-failure.js +107 -0
  412. package/src/verax/detect/route-findings.js +13 -18
  413. package/src/verax/detect/severity-mapper.js +191 -0
  414. package/src/verax/detect/signal-mapper.js +3 -0
  415. package/src/verax/detect/silent-permission-wall.js +122 -0
  416. package/src/verax/detect/skip-classifier.js +4 -1
  417. package/src/verax/detect/summary-writer.js +24 -10
  418. package/src/verax/detect/{test-failure-cause-inference.js → test-failure-cause-derivation.js} +32 -24
  419. package/src/verax/detect/ui-feedback-findings.js +18 -19
  420. package/src/verax/detect/verdict-engine.js +27 -51
  421. package/src/verax/detect/view-switch-correlator.js +3 -0
  422. package/src/verax/evidence-index-writer.js +6 -2
  423. package/src/verax/flow/flow-engine.js +4 -1
  424. package/src/verax/flow/flow-spec.js +3 -0
  425. package/src/verax/flow/redaction.js +3 -0
  426. package/src/verax/gate-engine.js +300 -0
  427. package/src/verax/index.js +11 -14
  428. package/src/verax/intel/effect-detector.js +4 -1
  429. package/src/verax/intel/handler-mapper.js +3 -0
  430. package/src/verax/intel/index.js +5 -2
  431. package/src/verax/intel/route-extractor.js +7 -4
  432. package/src/verax/intel/ts-program.js +5 -2
  433. package/src/verax/learn/action-contract-extractor.js +9 -7
  434. package/src/verax/learn/ast-contract-extractor.js +36 -9
  435. package/src/verax/learn/flow-extractor.js +8 -2
  436. package/src/verax/learn/index.js +37 -16
  437. package/src/verax/learn/manifest-writer.js +25 -7
  438. package/src/verax/learn/project-detector.js +15 -9
  439. package/src/verax/learn/react-router-extractor.js +31 -9
  440. package/src/verax/learn/route-extractor.js +10 -12
  441. package/src/verax/learn/route-validator.js +3 -0
  442. package/src/verax/learn/scan-roots.js +221 -0
  443. package/src/verax/learn/source-instrumenter.js +4 -1
  444. package/src/verax/learn/state-extractor.js +29 -9
  445. package/src/verax/learn/static-extractor-navigation.js +3 -0
  446. package/src/verax/learn/static-extractor-validation.js +3 -0
  447. package/src/verax/learn/static-extractor.js +54 -18
  448. package/src/verax/learn/truth-assessor.js +21 -6
  449. package/src/verax/learn/ts-contract-resolver.js +33 -8
  450. package/src/verax/observe/aria-sensor.js +3 -0
  451. package/src/verax/observe/browser.js +3 -0
  452. package/src/verax/observe/capture-outcome.js +35 -0
  453. package/src/verax/observe/console-sensor.js +8 -1
  454. package/src/verax/observe/coverage-gaps.js +3 -0
  455. package/src/verax/observe/dom-signature.js +3 -0
  456. package/src/verax/observe/domain-boundary.js +3 -0
  457. package/src/verax/observe/evidence-capture.js +153 -2
  458. package/src/verax/observe/expectation-executor.js +44 -10
  459. package/src/verax/observe/expectation-handler.js +16 -22
  460. package/src/verax/observe/flow-matcher.js +3 -0
  461. package/src/verax/observe/focus-sensor.js +3 -0
  462. package/src/verax/observe/human-driver.js +10 -4
  463. package/src/verax/observe/incremental-skip.js +3 -0
  464. package/src/verax/observe/index.js +67 -39
  465. package/src/verax/observe/interaction-discovery.js +3 -0
  466. package/src/verax/observe/interaction-driver.js +769 -0
  467. package/src/verax/observe/interaction-executor.js +6 -1
  468. package/src/verax/observe/interaction-runner-capture.js +130 -0
  469. package/src/verax/observe/interaction-runner-evidence.js +226 -0
  470. package/src/verax/observe/interaction-runner-sensors.js +122 -0
  471. package/src/verax/observe/interaction-runner.js +60 -441
  472. package/src/verax/observe/loading-sensor.js +15 -4
  473. package/src/verax/observe/navigation-sensor.js +14 -5
  474. package/src/verax/observe/network-firewall.js +8 -2
  475. package/src/verax/observe/network-sensor.js +16 -8
  476. package/src/verax/observe/observation-builder.js +5 -1
  477. package/src/verax/observe/observe-context.js +3 -0
  478. package/src/verax/observe/observe-helpers.js +4 -3
  479. package/src/verax/observe/observe-runner.js +11 -26
  480. package/src/verax/observe/observed-expectation-deriver.js +7 -3
  481. package/src/verax/observe/observed-expectation.js +30 -5
  482. package/src/verax/observe/observers/budget-observer.js +11 -13
  483. package/src/verax/observe/observers/console-observer.js +3 -0
  484. package/src/verax/observe/observers/coverage-observer.js +3 -0
  485. package/src/verax/observe/observers/interaction-observer.js +8 -2
  486. package/src/verax/observe/observers/navigation-observer.js +3 -0
  487. package/src/verax/observe/observers/network-observer.js +3 -0
  488. package/src/verax/observe/observers/safety-observer.js +8 -2
  489. package/src/verax/observe/observers/ui-feedback-observer.js +3 -0
  490. package/src/verax/observe/{page-frontier.js → page-reachability-tracker.js} +59 -9
  491. package/src/verax/observe/page-traversal.js +3 -0
  492. package/src/verax/observe/selector-generator.js +3 -0
  493. package/src/verax/observe/{snapshot-ops.js → snapshot-operations.js} +3 -0
  494. package/src/verax/observe/stable-id.js +86 -0
  495. package/src/verax/observe/state-sensor.js +21 -10
  496. package/src/verax/observe/state-ui-sensor.js +3 -0
  497. package/src/verax/observe/timing-sensor.js +18 -7
  498. package/src/verax/observe/traces-writer.js +108 -8
  499. package/src/verax/observe/ui-feedback-detector.js +13 -5
  500. package/src/verax/observe/ui-signal-sensor.js +3 -0
  501. package/src/verax/observe/{settle.js → wait-for-settle.js} +82 -41
  502. package/src/verax/resolve-workspace-root.js +3 -0
  503. package/src/verax/scan-summary-writer.js +21 -13
  504. package/src/verax/shared/artifact-manager.js +24 -15
  505. package/src/verax/shared/budget-profiles.js +3 -0
  506. package/src/verax/shared/caching.js +4 -1
  507. package/src/verax/shared/ci-detection.js +3 -0
  508. package/src/verax/shared/css-spinner-rules.js +3 -0
  509. package/src/verax/shared/{dynamic-route-utils.js → dynamic-route-normalizer.js} +3 -0
  510. package/src/verax/shared/evidence-capture-bridge.js +15 -0
  511. package/src/verax/shared/expectation-coverage.js +3 -0
  512. package/src/verax/shared/expectation-prover.js +3 -0
  513. package/src/verax/shared/expectation-tracker.js +4 -1
  514. package/src/verax/shared/expectation-validation.js +3 -0
  515. package/src/verax/shared/expectations-writer.js +5 -2
  516. package/src/verax/shared/first-run.js +3 -0
  517. package/src/verax/shared/hash-id.js +12 -0
  518. package/src/verax/shared/legacy-confidence-bridge.js +12 -0
  519. package/src/verax/shared/observable-utilities.js +108 -0
  520. package/src/verax/shared/progress-reporter.js +3 -0
  521. package/src/verax/shared/redaction.js +3 -0
  522. package/src/verax/shared/retry-policy.js +17 -22
  523. package/src/verax/shared/scan-budget.js +44 -3
  524. package/src/verax/shared/sensors/normalize-sensor-state.js +46 -0
  525. package/src/verax/shared/timing-metrics.js +9 -3
  526. package/src/verax/shared/url-normalizer.js +3 -0
  527. package/src/verax/shared/view-switch-rules.js +3 -0
  528. package/src/verax/shared/zip-artifacts.js +8 -2
  529. package/src/verax/validate/context-validator.js +3 -0
  530. package/src/verax/vue-extractors/vue/README.md +43 -0
  531. package/src/verax/{intel → vue-extractors/vue}/vue-navigation-extractor.js +18 -7
  532. package/src/verax/{intel → vue-extractors/vue}/vue-router-extractor.js +5 -2
  533. package/src/version.js +63 -0
  534. package/src/cli/commands/baseline.js +0 -103
  535. package/src/cli/commands/default.js +0 -726
  536. package/src/cli/commands/ga.js +0 -246
  537. package/src/cli/commands/gates.js +0 -95
  538. package/src/cli/commands/release-check.js +0 -215
  539. package/src/cli/commands/security-check.js +0 -212
  540. package/src/cli/commands/truth.js +0 -113
  541. package/src/cli/util/dom-diff.js +0 -226
  542. package/src/cli/util/errors.js +0 -44
  543. package/src/cli/util/findings-writer.js +0 -35
  544. package/src/cli/util/interaction-planner.js +0 -529
  545. package/src/cli/util/learn-writer.js +0 -41
  546. package/src/cli/util/observation-engine.js +0 -261
  547. package/src/cli/util/observe-writer.js +0 -27
  548. package/src/cli/util/paths.js +0 -30
  549. package/src/cli/util/run-id.js +0 -26
  550. package/src/cli/util/summary-writer.js +0 -45
  551. package/src/cli/util/vue-navigation-detector.js +0 -178
  552. package/src/cli/util/vue-state-detector.js +0 -215
  553. package/src/verax/core/confidence-engine-refactor.js +0 -489
  554. package/src/verax/core/replay-validator.js +0 -352
  555. package/src/verax/core/replay.js +0 -226
  556. package/src/verax/detect/confidence-engine.js +0 -961
  557. package/src/verax/shared/root-artifacts.js +0 -49
package/README.md CHANGED
@@ -1,276 +1,305 @@
1
- # 🛡️ VERAX
1
+ # VERAX v0.4.5
2
2
 
3
- A forensic observation engine for real user outcomes
3
+ Catch buttons and forms that do nothing.
4
+ No AI. No guessing. Just evidence.
4
5
 
5
- VERAX observes and reports gaps between what your code explicitly promises and what users can actually observe.
6
+ Silent failure detection for public user flows (pre-authentication only)
6
7
 
7
- Silent user failures don’t crash your site.
8
- They don’t throw errors.
9
- They simply lose users quietly.
8
+ The Problem
10
9
 
11
- VERAX exists to surface those gaps — with evidence, not guesses.
10
+ Silent user failures don’t crash your app.
11
+ They quietly make users leave.
12
12
 
13
- 🤔 What is VERAX?
13
+ Common examples:
14
14
 
15
- A silent user failure happens when your code clearly implies that something should happen —
16
- but from the user’s point of view, nothing meaningful does.
15
+ A button looks clickable but does nothing
17
16
 
18
- Concrete examples:
17
+ A form submits with no confirmation
19
18
 
20
- A button click that should navigate… but doesn’t.
19
+ A link is clicked but navigation never happens
21
20
 
22
- A form submission that triggers an API call… but shows no feedback.
21
+ Validation triggers, but feedback isn’t shown
23
22
 
24
- A state update that runs in code… but never reaches the UI.
23
+ Your logs are clean.
24
+ Your tests pass.
25
+ Monitoring shows nothing.
25
26
 
26
- These issues are frustrating for users and notoriously hard for teams to notice.
27
+ From the user’s perspective, the promise was broken.
27
28
 
28
- VERAX reads your source code to understand what is promised, then opens your site in a real browser and experiences it like a user.
29
- When expectations and reality don’t align, VERAX reports the gap clearly and honestly.
29
+ VERAX exists to reveal these gaps with evidence.
30
30
 
31
- VERAX does not guess intent.
32
- It only reports observations backed by explicit code promises.
31
+ How VERAX Works
33
32
 
34
- 🧠 Clarification: “Silent failure”
33
+ VERAX compares what your code promises with what users actually experience.
35
34
 
36
- In VERAX, a silent failure is not a judgment about correctness.
35
+ Learn Promises
36
+ Parse source code to extract user-visible promises:
37
+ navigation, forms, and feedback signals.
37
38
 
38
- It means:
39
+ Observe Behavior
40
+ Execute real interactions in a real browser
41
+ (clicks, submits, typing).
39
42
 
40
- For a promised interaction (for example, a click expected to navigate or save),
41
- no observable, user-visible effect could be verified
42
- (no URL change, no network request, no feedback).
43
+ Detect Gaps
44
+ Compare promised outcomes vs observed results.
43
45
 
44
- This does not mean your code is wrong.
45
- It means the observation produced no verifiable effect for the promise being evaluated.
46
+ Report Findings
47
+ Produce evidence-backed findings:
48
+ screenshots, DOM diffs, traces.
46
49
 
47
- What VERAX does (today)
50
+ Result: You see exactly where users get stuck — with reproducible proof.
48
51
 
49
- 🔍 Observes and reports gaps between code promises and user-visible outcomes
50
- (by comparing code-derived expectations with real browser behavior)
52
+ 2-Minute Quick Start
53
+ Option 1: Try the built-in demo
54
+ git clone https://github.com/odavlstudio/verax.git
55
+ cd verax
56
+ npm install
51
57
 
52
- 🧠 Extracts expectations from source code using static analysis:
58
+ npm run demo # Terminal 1: demo at http://127.0.0.1:4000
59
+ npm run verax:demo # Terminal 2: run VERAX against demo
53
60
 
54
- Navigation from HTML links, React Router, Vue Router, and Next.js routes
61
+ Artifacts are written to:
55
62
 
56
- Network actions from fetch / axios calls with static URLs
63
+ .verax/runs/<runId>/
57
64
 
58
- State mutations from React useState, Redux, Vuex, Pinia, Zustand set operations
65
+ Option 2: Run on your own site
66
+ npm install -g @veraxhq/verax
67
+ verax run --url https://your-site.test --src /path/to/repo
59
68
 
60
- 🖱️ Observes websites like a real user using Playwright
61
- (clicks, forms, navigation, scrolling)
69
+ Important: LIMITED mode
62
70
 
63
- 📊 Assigns confidence levels (HIGH / MEDIUM / LOW) based on evidence strength and coverage
71
+ VERAX needs source code to extract promises.
64
72
 
65
- 🧾 Provides concrete evidence for every reported discrepancy:
73
+ If source code is not detected:
66
74
 
67
- Screenshots
75
+ VERAX runs in LIMITED mode
68
76
 
69
- Network activity
77
+ Result is always INCOMPLETE (exit code 30)
70
78
 
71
- Console logs
79
+ This prevents false “green” CI signals
72
80
 
73
- DOM and state changes
81
+ verax run --url https://your-site.test --src ./ # Full detection
82
+ verax run --url https://your-site.test # LIMITED mode only
74
83
 
75
- 💻 Runs as a CLI tool via `verax run` (and inspects results with `verax inspect`)
84
+ Inspect results
85
+ verax inspect .verax/runs/<runId>
76
86
 
77
- 🧱 Supports real-world projects:
87
+ Key artifacts:
78
88
 
79
- **Fully verified (production-ready):**
80
- - Static HTML sites
81
- - React SPAs (with react-router-dom)
89
+ verax-summary.md Human-readable summary
82
90
 
83
- **Supported (learn-only / partial observation):**
84
- - Next.js (App Router & Pages Router)
85
- - Vue.js (with Vue Router)
86
- - Angular
87
- - SvelteKit
91
+ summary.json Verdict, coverage, counts
88
92
 
89
- 🔐 Protects privacy by automatically redacting secrets and sensitive data
93
+ findings.json Evidence-backed findings
90
94
 
91
- 🚫 What VERAX does NOT do
95
+ evidence/ Screenshots, DOM diffs, traces
92
96
 
93
- Does not guess intent — no heuristics, no assumptions
97
+ Understanding Results
98
+ ✅ SUCCESS (exit code 0)
94
99
 
95
- Does not support dynamic routes (e.g. /user/${id} is intentionally skipped)
100
+ All observable public flows were tested.
101
+ No silent failures were detected within scope.
96
102
 
97
- Does not replace QA or tests — it complements them
103
+ Does NOT mean:
98
104
 
99
- Does not monitor production traffic
105
+ The app is bug-free
100
106
 
101
- Does not work for every framework
107
+ All edge cases are covered
102
108
 
103
- ❌ Does not detect every bug — only gaps backed by explicit code promises
109
+ Means:
104
110
 
105
- Does not use AI — all results are deterministic and explainable
111
+ No silent failures were observed
106
112
 
107
- 🔄 How VERAX works (high-level)
113
+ Evidence guarantees were satisfied
108
114
 
109
- VERAX runs three phases automatically:
115
+ RESULT SUCCESS
116
+ REASON Scanned 12 interactions; 12 completed; 0 silent failures
117
+ ACTION Continue with other testing
110
118
 
111
- 1) **Learn**
112
- Analyze source code to derive explicit, proven expectations
113
- (routes, static network actions, state changes).
119
+ 🔍 FINDINGS (exit code 20)
114
120
 
115
- 2) **Observe**
116
- Open the site in a real browser and execute user interactions safely,
117
- recording what actually happens.
121
+ One or more silent failures were confirmed with evidence.
118
122
 
119
- 3) **Detect**
120
- Compare code-derived expectations with observed outcomes and report:
121
- - Discrepancies
122
- - Coverage gaps
123
- - Unknowns
124
- - Safety blocks
123
+ Each finding includes:
125
124
 
126
- All with evidence.
125
+ The promised behavior (from code)
127
126
 
128
- 📦 Installation
127
+ What actually happened (from browser)
129
128
 
130
- Requirements: Node.js 18+
129
+ Before/after screenshots
131
130
 
132
- From npm:
131
+ DOM and network evidence
133
132
 
134
- npm install -g @veraxhq/verax
133
+ RESULT FINDINGS
134
+ REASON 1 silent failure: “Sign up” button does nothing
135
+ ACTION Fix the issue and re-run VERAX
135
136
 
136
- From source:
137
+ ⚠️ INCOMPLETE (exit code 30)
137
138
 
138
- git clone <repository-url>
139
- cd verax
140
- npm install
141
- npm link
139
+ The run could not be trusted.
142
140
 
143
- ## Commands
141
+ Common reasons:
144
142
 
145
- VERAX provides these CLI commands:
143
+ Source code not detected (LIMITED mode)
146
144
 
147
- - `verax` — Interactive mode (detects URL or prompts for it)
148
- - `verax run --url <url> [--src <path>] [--out <path>]` — Non-interactive CI mode (strict, explicit)
149
- - `verax inspect <runPath>` — Inspect results from a previous run
150
- - `verax doctor [--json]` — Verify environment (Node, Playwright, Chromium binary)
151
- - `verax --version` — Show CLI version
152
- - `verax --help` — Show help text
145
+ Coverage below threshold
153
146
 
154
- ## Examples
147
+ Observation timeout
155
148
 
156
- Run a non-interactive scan (ideal for CI):
149
+ Authenticated flows (out of scope)
157
150
 
158
- ```bash
159
- verax run --url http://localhost:3000 --src . --out .verax
160
- ```
151
+ INCOMPLETE is not safe. Do not ignore it.
161
152
 
162
- Run interactive mode (default auto-detection):
153
+ RESULT INCOMPLETE
154
+ REASON Source code not detected (limited runtime-only mode)
155
+ ACTION Provide --src <path>
163
156
 
164
- ```bash
165
- verax
166
- ```
157
+ 🚫 USAGE_ERROR (exit code 64)
167
158
 
168
- Check environment readiness:
159
+ Invalid CLI usage:
169
160
 
170
- ```bash
171
- verax doctor --json
172
- ```
161
+ Missing --url
173
162
 
174
- Inspect a previous run:
163
+ Unknown flags
175
164
 
176
- ```bash
177
- verax inspect .verax/runs/2026-01-11T12-34-56Z_abc123
178
- ```
165
+ Invalid --min-coverage
179
166
 
180
- 📁 Output (CI-friendly)
167
+ 🔴 INVARIANT_VIOLATION (exit code 50)
181
168
 
182
- Run a scan:
169
+ Internal error or artifact corruption
170
+ (always investigate).
183
171
 
184
- ```bash
185
- verax run --url http://localhost:3000 --src . --out .verax
186
- ```
172
+ Detection Scope
173
+ What VERAX Detects (Guaranteed)
187
174
 
188
- Artifacts are written to:
175
+ Navigation
176
+
177
+ Link clicks → route / URL changes
178
+
179
+ Forms
180
+
181
+ Submissions with user-visible feedback
182
+
183
+ Validation messages
184
+
185
+ Feedback signals
186
+
187
+ aria-live
189
188
 
190
- `.verax/runs/<runId>/`
189
+ role="alert" / role="status"
191
190
 
192
- Including:
191
+ Stable text nodes
193
192
 
194
- - `summary.json` overall observation summary with digest counts
195
- - `findings.json` — reported discrepancies with evidence
196
- - `learn.json` — code-derived expectations
197
- - `observe.json` — browser observations and outcomes
198
- - `evidence/` — screenshots and logs
193
+ Attributes: disabled, aria-invalid, data-loading
199
194
 
200
- 🚦 Exit codes (tool-only semantics)
195
+ Observable outcomes
201
196
 
202
- Exit codes reflect tool execution status only.
203
- They do not represent site quality or correctness and must not be used as a pass/fail gate without explicit user logic.
197
+ DOM changes
204
198
 
205
- 0 VERAX executed successfully (regardless of findings, gaps, or confidence)
199
+ Network activity correlated to actions
206
200
 
207
- 2 — Tool crashed or failed internally
201
+ Navigation events
208
202
 
209
- 64 Invalid CLI usage (missing args, invalid flags)
203
+ Out of Scope (By Design)
210
204
 
211
- 65 Invalid input data (e.g. malformed JSON, unreadable manifest)
205
+ Visual-only changes (spinners, colors, animations)
206
+ → Use visual regression tools
212
207
 
213
- 📊 Reading results (observer-first)
208
+ Ambiguous ARIA attributes (aria-expanded, etc.)
214
209
 
215
- Each reported discrepancy includes:
210
+ Transient flashes < 100ms
216
211
 
217
- Promise context: navigation, network action, state change, feedback
212
+ Authenticated flows
218
213
 
219
- Outcome classification: silent failure, coverage gap, unproven interaction, safety block, informational
214
+ Backend-dependent dynamic routes
220
215
 
221
- Evidence: screenshots, network artifacts, console logs, trace references
216
+ CLI Reference
217
+ verax run
218
+ verax run --url <url> [options]
222
219
 
223
- Confidence: coverage ratio and silence impact
220
+ Options
224
221
 
225
- Confidence (observer truth)
222
+ --url <url> (required)
226
223
 
227
- Confidence reflects the quality and completeness of observation,
228
- not the quality or correctness of the site.
224
+ --src <path> Source directory
229
225
 
230
- HIGH (≥80)strong evidence and coverage; observations are reliable
226
+ --out <path>Output directory (default: .verax)
231
227
 
232
- MEDIUM (60–79)likely discrepancy with some ambiguity
228
+ --min-coverage <0.0-1.0>Default: 0.50 first run, 0.90 after
233
229
 
234
- LOW (<60) weak or partial evidence; interpret cautiously
230
+ --force-post-authEXPERIMENTAL (always INCOMPLETE)
235
231
 
236
- 🧭 When VERAX is a good fit
232
+ --timeout <ms>
237
233
 
238
- SaaS signup and pricing flows
234
+ --json
239
235
 
240
- React and Next.js projects
236
+ --debug
241
237
 
242
- CI pipelines that need UX reality checks
238
+ verax inspect
239
+ verax inspect <runPath>
243
240
 
244
- Teams that value evidence over assumptions
241
+ verax doctor
242
+ verax doctor [--json]
243
+
244
+ Checks Node.js, Playwright, and write permissions.
245
+
246
+ Guarantees & Limitations
247
+ Guarantees
248
+
249
+ Read-only
250
+
251
+ Deterministic
252
+
253
+ Evidence-backed
254
+
255
+ Conservative (uncertainty → INCOMPLETE)
256
+
257
+ Limitations
258
+
259
+ Pre-auth only
260
+
261
+ Public flows only
262
+
263
+ Not a test framework
264
+
265
+ Not runtime monitoring
266
+
267
+ CI/CD Usage
268
+ verax run --url https://staging.example.com --src ./
269
+ case $? in
270
+ 0) echo "✓ No silent failures"; exit 0 ;;
271
+ 20) echo "✗ Silent failures detected"; exit 1 ;;
272
+ 30) echo "⚠️ Incomplete coverage"; exit 1 ;;
273
+ *) echo "✗ VERAX error"; exit 1 ;;
274
+ esac
275
+
276
+ Installation
277
+ npm install -g @veraxhq/verax
245
278
 
246
- 🚫 When VERAX is NOT a good fit
279
+ Requirements
247
280
 
248
- Internal admin dashboards
281
+ Node.js 18+
249
282
 
250
- Authentication-heavy systems
283
+ Playwright (auto-installed)
251
284
 
252
- Apps built around highly dynamic routing
285
+ Supported Frameworks
253
286
 
254
- Unsupported frameworks
287
+ Full
255
288
 
256
- Teams expecting a full QA replacement
289
+ React
257
290
 
258
- 🧪 Project status
291
+ Next.js
259
292
 
260
- VERAX is a production-grade CLI tool in active development.
261
- It is designed for early adopters and technical teams.
293
+ Static HTML
262
294
 
263
- VERAX is not a SaaS product.
264
- It runs locally or in CI. There is no hosted service.
295
+ Partial
265
296
 
266
- Important
297
+ Vue 3
267
298
 
268
- VERAX does not certify correctness.
269
- Zero findings do not mean a site is safe.
299
+ Angular
270
300
 
271
- VERAX exists to prevent false certainty, not to grant confidence.
272
- Use the Decision Snapshot and evidence to make a human judgment.
301
+ SvelteKit
273
302
 
274
- 📄 License
303
+ License
275
304
 
276
- MIT
305
+ MIT © VERAX
package/bin/verax.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  /**
4
4
  * VERAX CLI Shim
@@ -9,3 +9,7 @@ import('../src/cli/entry.js').catch((error) => {
9
9
  console.error(`Failed to load CLI: ${error.message}`);
10
10
  process.exit(2);
11
11
  });
12
+
13
+
14
+
15
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veraxhq/verax",
3
- "version": "0.4.0",
3
+ "version": "0.4.5",
4
4
  "description": "Public Flow Sanity Guard — Trust-Locked, Deterministic, CI-Safe.",
5
5
  "keywords": [
6
6
  "public-flows",
@@ -15,11 +15,11 @@
15
15
  "license": "MIT",
16
16
  "type": "module",
17
17
  "bin": {
18
- "verax": "bin/verax.js"
18
+ "verax": "./bin/verax.js"
19
19
  },
20
20
  "repository": {
21
21
  "type": "git",
22
- "url": "git+https://github.com/odavlstudio/verax.git"
22
+ "url": "https://github.com/odavlstudio/verax.git"
23
23
  },
24
24
  "bugs": {
25
25
  "url": "https://github.com/odavlstudio/verax/issues"
@@ -33,10 +33,17 @@
33
33
  ],
34
34
  "scripts": {
35
35
  "test": "node test/infrastructure/test-runner-wrapper.js",
36
+ "test:integration": "cross-env VERAX_TEST_INTEGRATION=1 node test/infrastructure/test-runner-wrapper.js",
37
+ "test:all": "npm test && npm run test:integration",
36
38
  "test:pack": "node test/infrastructure/test-pack.js",
37
39
  "verify-release": "node scripts/verify-release.js",
40
+ "prepublishOnly": "node scripts/prepublish-check.js",
38
41
  "lint": "eslint . --max-warnings 0",
39
- "typecheck": "tsc -p tsconfig.json --noEmit"
42
+ "typecheck": "tsc -p tsconfig.json --noEmit",
43
+ "clean": "node -e \"const fs = require('fs'); const path = require('path'); const dirs = ['.verax', 'tmp'].map(d => path.join(__dirname, d)); dirs.forEach(dir => { if (fs.existsSync(dir)) { fs.rmSync(dir, { recursive: true, force: true }); console.log('Cleaned:', dir); } });\"",
44
+ "demo": "cross-env VERAX_FIXTURE_DIR=./demos/hello-verax VERAX_FIXTURE_PORT=4000 node scripts/fixture-server.js",
45
+ "verax:demo": "cross-env VERAX_FIXTURE_DIR=./demos/hello-verax VERAX_FIXTURE_PORT=4000 node bin/verax.js run --url http://127.0.0.1:4000 --src demos/hello-verax --out .verax/demo --min-coverage 0.6",
46
+ "postpack": "node -e \"if (process.env.VERAX_SKIP_POSTPACK_CLEANUP !== '1') { const fs = require('fs'); const glob = require('glob'); glob.sync('*.tgz').forEach(f => { fs.unlinkSync(f); console.log('Auto-removed pack artifact:', f); }); } else { console.log('Postpack cleanup skipped (test mode)'); }\""
40
47
  },
41
48
  "dependencies": {
42
49
  "@babel/parser": "^7.28.5",
@@ -45,7 +52,8 @@
45
52
  "inquirer": "^9.2.15",
46
53
  "node-html-parser": "^7.0.1",
47
54
  "playwright": "^1.40.0",
48
- "typescript": "^5.9.3"
55
+ "typescript": "^5.9.3",
56
+ "yaml": "^2.8.2"
49
57
  },
50
58
  "optionalDependencies": {
51
59
  "pngjs": "^7.0.0"
@@ -56,6 +64,7 @@
56
64
  "devDependencies": {
57
65
  "@reduxjs/toolkit": "^2.11.2",
58
66
  "@types/node": "^18.0.0",
67
+ "cross-env": "^7.0.3",
59
68
  "eslint": "^8.57.0",
60
69
  "next": "^16.1.1",
61
70
  "react": "^19.2.3",