vibecheck-ai 2.0.1 → 5.0.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 (456) hide show
  1. package/bin/.generated +25 -0
  2. package/bin/_deprecations.js +463 -0
  3. package/bin/_router.js +46 -0
  4. package/bin/cli-hygiene.js +241 -0
  5. package/bin/dev/run-v2-torture.js +30 -0
  6. package/bin/registry.js +656 -0
  7. package/bin/runners/CLI_REFACTOR_SUMMARY.md +229 -0
  8. package/bin/runners/ENHANCEMENT_GUIDE.md +121 -0
  9. package/bin/runners/REPORT_AUDIT.md +64 -0
  10. package/bin/runners/cli-utils.js +1070 -0
  11. package/bin/runners/context/ai-task-decomposer.js +337 -0
  12. package/bin/runners/context/analyzer.js +513 -0
  13. package/bin/runners/context/api-contracts.js +427 -0
  14. package/bin/runners/context/context-diff.js +342 -0
  15. package/bin/runners/context/context-pruner.js +291 -0
  16. package/bin/runners/context/dependency-graph.js +414 -0
  17. package/bin/runners/context/generators/claude.js +107 -0
  18. package/bin/runners/context/generators/codex.js +108 -0
  19. package/bin/runners/context/generators/copilot.js +119 -0
  20. package/bin/runners/context/generators/cursor-enhanced.js +2525 -0
  21. package/bin/runners/context/generators/cursor.js +514 -0
  22. package/bin/runners/context/generators/mcp.js +169 -0
  23. package/bin/runners/context/generators/windsurf.js +180 -0
  24. package/bin/runners/context/git-context.js +304 -0
  25. package/bin/runners/context/index.js +1110 -0
  26. package/bin/runners/context/insights.js +173 -0
  27. package/bin/runners/context/mcp-server/generate-rules.js +337 -0
  28. package/bin/runners/context/mcp-server/index.js +1176 -0
  29. package/bin/runners/context/mcp-server/package.json +24 -0
  30. package/bin/runners/context/memory.js +200 -0
  31. package/bin/runners/context/monorepo.js +215 -0
  32. package/bin/runners/context/multi-repo-federation.js +404 -0
  33. package/bin/runners/context/patterns.js +253 -0
  34. package/bin/runners/context/proof-context.js +1264 -0
  35. package/bin/runners/context/security-scanner.js +541 -0
  36. package/bin/runners/context/semantic-search.js +350 -0
  37. package/bin/runners/context/shared.js +264 -0
  38. package/bin/runners/context/team-conventions.js +336 -0
  39. package/bin/runners/lib/__tests__/entitlements-v2.test.js +295 -0
  40. package/bin/runners/lib/agent-firewall/ai/false-positive-analyzer.js +474 -0
  41. package/bin/runners/lib/agent-firewall/change-packet/builder.js +488 -0
  42. package/bin/runners/lib/agent-firewall/change-packet/schema.json +228 -0
  43. package/bin/runners/lib/agent-firewall/change-packet/store.js +200 -0
  44. package/bin/runners/lib/agent-firewall/claims/claim-types.js +21 -0
  45. package/bin/runners/lib/agent-firewall/claims/extractor.js +303 -0
  46. package/bin/runners/lib/agent-firewall/claims/patterns.js +24 -0
  47. package/bin/runners/lib/agent-firewall/critic/index.js +151 -0
  48. package/bin/runners/lib/agent-firewall/critic/judge.js +432 -0
  49. package/bin/runners/lib/agent-firewall/critic/prompts.js +305 -0
  50. package/bin/runners/lib/agent-firewall/enforcement/gateway.js +1059 -0
  51. package/bin/runners/lib/agent-firewall/enforcement/index.js +98 -0
  52. package/bin/runners/lib/agent-firewall/enforcement/mode.js +318 -0
  53. package/bin/runners/lib/agent-firewall/enforcement/orchestrator.js +484 -0
  54. package/bin/runners/lib/agent-firewall/enforcement/proof-artifact.js +418 -0
  55. package/bin/runners/lib/agent-firewall/enforcement/schemas/change-event.schema.json +173 -0
  56. package/bin/runners/lib/agent-firewall/enforcement/schemas/intent.schema.json +181 -0
  57. package/bin/runners/lib/agent-firewall/enforcement/schemas/verdict.schema.json +222 -0
  58. package/bin/runners/lib/agent-firewall/enforcement/verdict-v2.js +333 -0
  59. package/bin/runners/lib/agent-firewall/evidence/auth-evidence.js +88 -0
  60. package/bin/runners/lib/agent-firewall/evidence/contract-evidence.js +75 -0
  61. package/bin/runners/lib/agent-firewall/evidence/env-evidence.js +127 -0
  62. package/bin/runners/lib/agent-firewall/evidence/resolver.js +102 -0
  63. package/bin/runners/lib/agent-firewall/evidence/route-evidence.js +213 -0
  64. package/bin/runners/lib/agent-firewall/evidence/side-effect-evidence.js +145 -0
  65. package/bin/runners/lib/agent-firewall/fs-hook/daemon.js +19 -0
  66. package/bin/runners/lib/agent-firewall/fs-hook/installer.js +87 -0
  67. package/bin/runners/lib/agent-firewall/fs-hook/watcher.js +184 -0
  68. package/bin/runners/lib/agent-firewall/git-hook/pre-commit.js +163 -0
  69. package/bin/runners/lib/agent-firewall/ide-extension/cursor.js +107 -0
  70. package/bin/runners/lib/agent-firewall/ide-extension/vscode.js +68 -0
  71. package/bin/runners/lib/agent-firewall/ide-extension/windsurf.js +66 -0
  72. package/bin/runners/lib/agent-firewall/index.js +200 -0
  73. package/bin/runners/lib/agent-firewall/integration/index.js +20 -0
  74. package/bin/runners/lib/agent-firewall/integration/ship-gate.js +437 -0
  75. package/bin/runners/lib/agent-firewall/intent/alignment-engine.js +634 -0
  76. package/bin/runners/lib/agent-firewall/intent/auto-detect.js +426 -0
  77. package/bin/runners/lib/agent-firewall/intent/index.js +102 -0
  78. package/bin/runners/lib/agent-firewall/intent/schema.js +352 -0
  79. package/bin/runners/lib/agent-firewall/intent/store.js +283 -0
  80. package/bin/runners/lib/agent-firewall/interception/fs-interceptor.js +502 -0
  81. package/bin/runners/lib/agent-firewall/interception/index.js +23 -0
  82. package/bin/runners/lib/agent-firewall/interceptor/base.js +308 -0
  83. package/bin/runners/lib/agent-firewall/interceptor/cursor.js +35 -0
  84. package/bin/runners/lib/agent-firewall/interceptor/vscode.js +35 -0
  85. package/bin/runners/lib/agent-firewall/interceptor/windsurf.js +34 -0
  86. package/bin/runners/lib/agent-firewall/lawbook/distributor.js +465 -0
  87. package/bin/runners/lib/agent-firewall/lawbook/evaluator.js +604 -0
  88. package/bin/runners/lib/agent-firewall/lawbook/index.js +304 -0
  89. package/bin/runners/lib/agent-firewall/lawbook/registry.js +514 -0
  90. package/bin/runners/lib/agent-firewall/lawbook/schema.js +420 -0
  91. package/bin/runners/lib/agent-firewall/logger.js +141 -0
  92. package/bin/runners/lib/agent-firewall/policy/default-policy.json +90 -0
  93. package/bin/runners/lib/agent-firewall/policy/engine.js +103 -0
  94. package/bin/runners/lib/agent-firewall/policy/loader.js +451 -0
  95. package/bin/runners/lib/agent-firewall/policy/rules/auth-drift.js +50 -0
  96. package/bin/runners/lib/agent-firewall/policy/rules/contract-drift.js +50 -0
  97. package/bin/runners/lib/agent-firewall/policy/rules/fake-success.js +79 -0
  98. package/bin/runners/lib/agent-firewall/policy/rules/ghost-env.js +227 -0
  99. package/bin/runners/lib/agent-firewall/policy/rules/ghost-route.js +191 -0
  100. package/bin/runners/lib/agent-firewall/policy/rules/scope.js +93 -0
  101. package/bin/runners/lib/agent-firewall/policy/rules/unsafe-side-effect.js +57 -0
  102. package/bin/runners/lib/agent-firewall/policy/schema.json +183 -0
  103. package/bin/runners/lib/agent-firewall/policy/verdict.js +54 -0
  104. package/bin/runners/lib/agent-firewall/proposal/extractor.js +394 -0
  105. package/bin/runners/lib/agent-firewall/proposal/index.js +212 -0
  106. package/bin/runners/lib/agent-firewall/proposal/schema.js +251 -0
  107. package/bin/runners/lib/agent-firewall/proposal/validator.js +386 -0
  108. package/bin/runners/lib/agent-firewall/reality/index.js +332 -0
  109. package/bin/runners/lib/agent-firewall/reality/state.js +625 -0
  110. package/bin/runners/lib/agent-firewall/reality/watcher.js +322 -0
  111. package/bin/runners/lib/agent-firewall/risk/index.js +173 -0
  112. package/bin/runners/lib/agent-firewall/risk/scorer.js +328 -0
  113. package/bin/runners/lib/agent-firewall/risk/thresholds.js +322 -0
  114. package/bin/runners/lib/agent-firewall/risk/vectors.js +421 -0
  115. package/bin/runners/lib/agent-firewall/session/collector.js +451 -0
  116. package/bin/runners/lib/agent-firewall/session/index.js +26 -0
  117. package/bin/runners/lib/agent-firewall/simulator/diff-simulator.js +472 -0
  118. package/bin/runners/lib/agent-firewall/simulator/import-resolver.js +346 -0
  119. package/bin/runners/lib/agent-firewall/simulator/index.js +181 -0
  120. package/bin/runners/lib/agent-firewall/simulator/route-validator.js +380 -0
  121. package/bin/runners/lib/agent-firewall/time-machine/incident-correlator.js +661 -0
  122. package/bin/runners/lib/agent-firewall/time-machine/index.js +267 -0
  123. package/bin/runners/lib/agent-firewall/time-machine/replay-engine.js +436 -0
  124. package/bin/runners/lib/agent-firewall/time-machine/state-reconstructor.js +490 -0
  125. package/bin/runners/lib/agent-firewall/time-machine/timeline-builder.js +530 -0
  126. package/bin/runners/lib/agent-firewall/truthpack/index.js +67 -0
  127. package/bin/runners/lib/agent-firewall/truthpack/loader.js +137 -0
  128. package/bin/runners/lib/agent-firewall/unblock/planner.js +337 -0
  129. package/bin/runners/lib/agent-firewall/utils/ignore-checker.js +118 -0
  130. package/bin/runners/lib/ai-bridge.js +416 -0
  131. package/bin/runners/lib/analysis-core.js +309 -0
  132. package/bin/runners/lib/analyzers.js +2500 -0
  133. package/bin/runners/lib/api-client.js +269 -0
  134. package/bin/runners/lib/approve-output.js +235 -0
  135. package/bin/runners/lib/artifact-envelope.js +540 -0
  136. package/bin/runners/lib/assets/vibecheck-logo.png +0 -0
  137. package/bin/runners/lib/audit-bridge.js +391 -0
  138. package/bin/runners/lib/auth-shared.js +977 -0
  139. package/bin/runners/lib/auth-truth.js +193 -0
  140. package/bin/runners/lib/auth.js +215 -0
  141. package/bin/runners/lib/authority-badge.js +425 -0
  142. package/bin/runners/lib/backup.js +62 -0
  143. package/bin/runners/lib/billing.js +107 -0
  144. package/bin/runners/lib/checkpoint.js +941 -0
  145. package/bin/runners/lib/claims.js +118 -0
  146. package/bin/runners/lib/classify-output.js +204 -0
  147. package/bin/runners/lib/cleanup/engine.js +571 -0
  148. package/bin/runners/lib/cleanup/index.js +53 -0
  149. package/bin/runners/lib/cleanup/output.js +375 -0
  150. package/bin/runners/lib/cleanup/rules.js +1060 -0
  151. package/bin/runners/lib/cli-output.js +400 -0
  152. package/bin/runners/lib/cli-ui.js +540 -0
  153. package/bin/runners/lib/compliance-bridge-new.js +0 -0
  154. package/bin/runners/lib/compliance-bridge.js +165 -0
  155. package/bin/runners/lib/contracts/auth-contract.js +202 -0
  156. package/bin/runners/lib/contracts/env-contract.js +181 -0
  157. package/bin/runners/lib/contracts/external-contract.js +206 -0
  158. package/bin/runners/lib/contracts/guard.js +168 -0
  159. package/bin/runners/lib/contracts/index.js +89 -0
  160. package/bin/runners/lib/contracts/plan-validator.js +311 -0
  161. package/bin/runners/lib/contracts/route-contract.js +199 -0
  162. package/bin/runners/lib/contracts.js +804 -0
  163. package/bin/runners/lib/default-config.js +127 -0
  164. package/bin/runners/lib/detect.js +89 -0
  165. package/bin/runners/lib/detectors-v2.js +622 -0
  166. package/bin/runners/lib/doctor/autofix.js +254 -0
  167. package/bin/runners/lib/doctor/diagnosis-receipt.js +454 -0
  168. package/bin/runners/lib/doctor/failure-signatures.js +526 -0
  169. package/bin/runners/lib/doctor/fix-script.js +336 -0
  170. package/bin/runners/lib/doctor/index.js +37 -0
  171. package/bin/runners/lib/doctor/modules/build-tools.js +453 -0
  172. package/bin/runners/lib/doctor/modules/dependencies.js +325 -0
  173. package/bin/runners/lib/doctor/modules/index.js +105 -0
  174. package/bin/runners/lib/doctor/modules/network.js +250 -0
  175. package/bin/runners/lib/doctor/modules/os-quirks.js +706 -0
  176. package/bin/runners/lib/doctor/modules/project.js +312 -0
  177. package/bin/runners/lib/doctor/modules/repo-integrity.js +485 -0
  178. package/bin/runners/lib/doctor/modules/runtime.js +224 -0
  179. package/bin/runners/lib/doctor/modules/security.js +350 -0
  180. package/bin/runners/lib/doctor/modules/system.js +213 -0
  181. package/bin/runners/lib/doctor/modules/vibecheck.js +394 -0
  182. package/bin/runners/lib/doctor/reporter.js +262 -0
  183. package/bin/runners/lib/doctor/safe-repair.js +384 -0
  184. package/bin/runners/lib/doctor/service.js +262 -0
  185. package/bin/runners/lib/doctor/types.js +113 -0
  186. package/bin/runners/lib/doctor/ui.js +263 -0
  187. package/bin/runners/lib/doctor-enhanced.js +233 -0
  188. package/bin/runners/lib/doctor-output.js +226 -0
  189. package/bin/runners/lib/doctor-v2.js +608 -0
  190. package/bin/runners/lib/drift.js +425 -0
  191. package/bin/runners/lib/enforcement.js +72 -0
  192. package/bin/runners/lib/engine/ast-cache.js +210 -0
  193. package/bin/runners/lib/engine/auth-extractor.js +211 -0
  194. package/bin/runners/lib/engine/billing-extractor.js +112 -0
  195. package/bin/runners/lib/engine/enforcement-extractor.js +100 -0
  196. package/bin/runners/lib/engine/env-extractor.js +207 -0
  197. package/bin/runners/lib/engine/express-extractor.js +208 -0
  198. package/bin/runners/lib/engine/extractors.js +849 -0
  199. package/bin/runners/lib/engine/index.js +207 -0
  200. package/bin/runners/lib/engine/repo-index.js +514 -0
  201. package/bin/runners/lib/engine/types.js +124 -0
  202. package/bin/runners/lib/engines/accessibility-engine.js +190 -0
  203. package/bin/runners/lib/engines/api-consistency-engine.js +162 -0
  204. package/bin/runners/lib/engines/ast-cache.js +99 -0
  205. package/bin/runners/lib/engines/attack-detector.js +1192 -0
  206. package/bin/runners/lib/engines/code-quality-engine.js +255 -0
  207. package/bin/runners/lib/engines/console-logs-engine.js +115 -0
  208. package/bin/runners/lib/engines/cross-file-analysis-engine.js +268 -0
  209. package/bin/runners/lib/engines/dead-code-engine.js +198 -0
  210. package/bin/runners/lib/engines/deprecated-api-engine.js +226 -0
  211. package/bin/runners/lib/engines/empty-catch-engine.js +150 -0
  212. package/bin/runners/lib/engines/file-filter.js +131 -0
  213. package/bin/runners/lib/engines/hardcoded-secrets-engine.js +251 -0
  214. package/bin/runners/lib/engines/mock-data-engine.js +272 -0
  215. package/bin/runners/lib/engines/parallel-processor.js +71 -0
  216. package/bin/runners/lib/engines/performance-issues-engine.js +265 -0
  217. package/bin/runners/lib/engines/security-vulnerabilities-engine.js +243 -0
  218. package/bin/runners/lib/engines/todo-fixme-engine.js +115 -0
  219. package/bin/runners/lib/engines/type-aware-engine.js +152 -0
  220. package/bin/runners/lib/engines/unsafe-regex-engine.js +225 -0
  221. package/bin/runners/lib/engines/vibecheck-engines/README.md +53 -0
  222. package/bin/runners/lib/engines/vibecheck-engines/index.js +15 -0
  223. package/bin/runners/lib/engines/vibecheck-engines/lib/ast-cache.js +164 -0
  224. package/bin/runners/lib/engines/vibecheck-engines/lib/code-quality-engine.js +291 -0
  225. package/bin/runners/lib/engines/vibecheck-engines/lib/console-logs-engine.js +83 -0
  226. package/bin/runners/lib/engines/vibecheck-engines/lib/dead-code-engine.js +198 -0
  227. package/bin/runners/lib/engines/vibecheck-engines/lib/deprecated-api-engine.js +275 -0
  228. package/bin/runners/lib/engines/vibecheck-engines/lib/empty-catch-engine.js +167 -0
  229. package/bin/runners/lib/engines/vibecheck-engines/lib/file-filter.js +217 -0
  230. package/bin/runners/lib/engines/vibecheck-engines/lib/hardcoded-secrets-engine.js +139 -0
  231. package/bin/runners/lib/engines/vibecheck-engines/lib/mock-data-engine.js +140 -0
  232. package/bin/runners/lib/engines/vibecheck-engines/lib/parallel-processor.js +164 -0
  233. package/bin/runners/lib/engines/vibecheck-engines/lib/performance-issues-engine.js +234 -0
  234. package/bin/runners/lib/engines/vibecheck-engines/lib/type-aware-engine.js +217 -0
  235. package/bin/runners/lib/engines/vibecheck-engines/lib/unsafe-regex-engine.js +78 -0
  236. package/bin/runners/lib/engines/vibecheck-engines/package.json +13 -0
  237. package/bin/runners/lib/enterprise-detect.js +603 -0
  238. package/bin/runners/lib/enterprise-init.js +942 -0
  239. package/bin/runners/lib/entitlements-v2.js +265 -0
  240. package/bin/runners/lib/entitlements.generated.js +0 -0
  241. package/bin/runners/lib/entitlements.js +340 -0
  242. package/bin/runners/lib/env-resolver.js +417 -0
  243. package/bin/runners/lib/env-template.js +66 -0
  244. package/bin/runners/lib/env.js +189 -0
  245. package/bin/runners/lib/error-handler.js +368 -0
  246. package/bin/runners/lib/error-messages.js +289 -0
  247. package/bin/runners/lib/evidence-pack.js +684 -0
  248. package/bin/runners/lib/exit-codes.js +275 -0
  249. package/bin/runners/lib/extractors/client-calls.js +990 -0
  250. package/bin/runners/lib/extractors/fastify-route-dump.js +573 -0
  251. package/bin/runners/lib/extractors/fastify-routes.js +426 -0
  252. package/bin/runners/lib/extractors/index.js +363 -0
  253. package/bin/runners/lib/extractors/next-routes.js +524 -0
  254. package/bin/runners/lib/extractors/proof-graph.js +431 -0
  255. package/bin/runners/lib/extractors/route-matcher.js +451 -0
  256. package/bin/runners/lib/extractors/truthpack-v2.js +377 -0
  257. package/bin/runners/lib/extractors/ui-bindings.js +547 -0
  258. package/bin/runners/lib/finding-id.js +69 -0
  259. package/bin/runners/lib/finding-sorter.js +89 -0
  260. package/bin/runners/lib/findings-schema.js +281 -0
  261. package/bin/runners/lib/fingerprint.js +377 -0
  262. package/bin/runners/lib/firewall-prompt.js +50 -0
  263. package/bin/runners/lib/fix-output.js +228 -0
  264. package/bin/runners/lib/global-flags.js +250 -0
  265. package/bin/runners/lib/graph/graph-builder.js +265 -0
  266. package/bin/runners/lib/graph/html-renderer.js +413 -0
  267. package/bin/runners/lib/graph/index.js +32 -0
  268. package/bin/runners/lib/graph/runtime-collector.js +215 -0
  269. package/bin/runners/lib/graph/static-extractor.js +518 -0
  270. package/bin/runners/lib/help-formatter.js +413 -0
  271. package/bin/runners/lib/html-proof-report.js +913 -0
  272. package/bin/runners/lib/html-report.js +650 -0
  273. package/bin/runners/lib/init-wizard.js +601 -0
  274. package/bin/runners/lib/interactive-menu.js +1496 -0
  275. package/bin/runners/lib/json-output.js +76 -0
  276. package/bin/runners/lib/llm.js +75 -0
  277. package/bin/runners/lib/logger.js +38 -0
  278. package/bin/runners/lib/meter.js +61 -0
  279. package/bin/runners/lib/missions/briefing.js +427 -0
  280. package/bin/runners/lib/missions/checkpoint.js +753 -0
  281. package/bin/runners/lib/missions/evidence.js +126 -0
  282. package/bin/runners/lib/missions/hardening.js +851 -0
  283. package/bin/runners/lib/missions/plan.js +648 -0
  284. package/bin/runners/lib/missions/safety-gates.js +645 -0
  285. package/bin/runners/lib/missions/schema.js +478 -0
  286. package/bin/runners/lib/missions/templates.js +317 -0
  287. package/bin/runners/lib/next-action.js +560 -0
  288. package/bin/runners/lib/packs/bundle.js +675 -0
  289. package/bin/runners/lib/packs/evidence-pack.js +671 -0
  290. package/bin/runners/lib/packs/pack-factory.js +837 -0
  291. package/bin/runners/lib/packs/permissions-pack.js +686 -0
  292. package/bin/runners/lib/packs/proof-graph-pack.js +779 -0
  293. package/bin/runners/lib/patch.js +40 -0
  294. package/bin/runners/lib/permissions/auth-model.js +213 -0
  295. package/bin/runners/lib/permissions/idor-prover.js +205 -0
  296. package/bin/runners/lib/permissions/index.js +45 -0
  297. package/bin/runners/lib/permissions/matrix-builder.js +198 -0
  298. package/bin/runners/lib/pkgjson.js +28 -0
  299. package/bin/runners/lib/policy.js +295 -0
  300. package/bin/runners/lib/polish/accessibility.js +62 -0
  301. package/bin/runners/lib/polish/analyzer.js +93 -0
  302. package/bin/runners/lib/polish/backend.js +87 -0
  303. package/bin/runners/lib/polish/configuration.js +83 -0
  304. package/bin/runners/lib/polish/documentation.js +83 -0
  305. package/bin/runners/lib/polish/frontend.js +817 -0
  306. package/bin/runners/lib/polish/index.js +27 -0
  307. package/bin/runners/lib/polish/infrastructure.js +80 -0
  308. package/bin/runners/lib/polish/internationalization.js +85 -0
  309. package/bin/runners/lib/polish/libraries.js +180 -0
  310. package/bin/runners/lib/polish/observability.js +75 -0
  311. package/bin/runners/lib/polish/performance.js +64 -0
  312. package/bin/runners/lib/polish/privacy.js +110 -0
  313. package/bin/runners/lib/polish/resilience.js +92 -0
  314. package/bin/runners/lib/polish/security.js +78 -0
  315. package/bin/runners/lib/polish/seo.js +71 -0
  316. package/bin/runners/lib/polish/styles.js +62 -0
  317. package/bin/runners/lib/polish/utils.js +104 -0
  318. package/bin/runners/lib/preflight.js +142 -0
  319. package/bin/runners/lib/prerequisites.js +149 -0
  320. package/bin/runners/lib/prove-output.js +220 -0
  321. package/bin/runners/lib/reality/correlation-detectors.js +359 -0
  322. package/bin/runners/lib/reality/index.js +318 -0
  323. package/bin/runners/lib/reality/request-hashing.js +416 -0
  324. package/bin/runners/lib/reality/request-mapper.js +453 -0
  325. package/bin/runners/lib/reality/safety-rails.js +463 -0
  326. package/bin/runners/lib/reality/semantic-snapshot.js +408 -0
  327. package/bin/runners/lib/reality/toast-detector.js +393 -0
  328. package/bin/runners/lib/reality-findings.js +84 -0
  329. package/bin/runners/lib/reality-output.js +231 -0
  330. package/bin/runners/lib/receipts.js +179 -0
  331. package/bin/runners/lib/redact.js +29 -0
  332. package/bin/runners/lib/replay/capsule-manager.js +154 -0
  333. package/bin/runners/lib/replay/index.js +263 -0
  334. package/bin/runners/lib/replay/player.js +348 -0
  335. package/bin/runners/lib/replay/recorder.js +331 -0
  336. package/bin/runners/lib/report-engine.js +626 -0
  337. package/bin/runners/lib/report-html.js +1233 -0
  338. package/bin/runners/lib/report-output.js +366 -0
  339. package/bin/runners/lib/report-templates.js +967 -0
  340. package/bin/runners/lib/report.js +135 -0
  341. package/bin/runners/lib/route-detection.js +1209 -0
  342. package/bin/runners/lib/route-truth.js +1322 -0
  343. package/bin/runners/lib/safelist/index.js +96 -0
  344. package/bin/runners/lib/safelist/integration.js +334 -0
  345. package/bin/runners/lib/safelist/matcher.js +696 -0
  346. package/bin/runners/lib/safelist/schema.js +948 -0
  347. package/bin/runners/lib/safelist/store.js +438 -0
  348. package/bin/runners/lib/sandbox/index.js +59 -0
  349. package/bin/runners/lib/sandbox/proof-chain.js +399 -0
  350. package/bin/runners/lib/sandbox/sandbox-runner.js +205 -0
  351. package/bin/runners/lib/sandbox/worktree.js +174 -0
  352. package/bin/runners/lib/scan-cache.js +330 -0
  353. package/bin/runners/lib/scan-output-schema.js +344 -0
  354. package/bin/runners/lib/scan-output.js +631 -0
  355. package/bin/runners/lib/scan-runner.js +135 -0
  356. package/bin/runners/lib/schema-validator.js +350 -0
  357. package/bin/runners/lib/schemas/ajv-validator.js +464 -0
  358. package/bin/runners/lib/schemas/contracts.schema.json +160 -0
  359. package/bin/runners/lib/schemas/error-envelope.schema.json +105 -0
  360. package/bin/runners/lib/schemas/finding-v3.schema.json +151 -0
  361. package/bin/runners/lib/schemas/finding.schema.json +100 -0
  362. package/bin/runners/lib/schemas/mission-pack.schema.json +206 -0
  363. package/bin/runners/lib/schemas/proof-graph.schema.json +176 -0
  364. package/bin/runners/lib/schemas/reality-report.schema.json +162 -0
  365. package/bin/runners/lib/schemas/report-artifact.schema.json +120 -0
  366. package/bin/runners/lib/schemas/run-request.schema.json +108 -0
  367. package/bin/runners/lib/schemas/share-pack.schema.json +180 -0
  368. package/bin/runners/lib/schemas/ship-manifest.schema.json +251 -0
  369. package/bin/runners/lib/schemas/ship-report.schema.json +117 -0
  370. package/bin/runners/lib/schemas/truthpack-v2.schema.json +303 -0
  371. package/bin/runners/lib/schemas/validator.js +465 -0
  372. package/bin/runners/lib/schemas/verdict.schema.json +140 -0
  373. package/bin/runners/lib/score-history.js +282 -0
  374. package/bin/runners/lib/security-bridge.js +249 -0
  375. package/bin/runners/lib/server-usage.js +513 -0
  376. package/bin/runners/lib/share-pack.js +239 -0
  377. package/bin/runners/lib/ship-gate.js +832 -0
  378. package/bin/runners/lib/ship-manifest.js +1153 -0
  379. package/bin/runners/lib/ship-output-enterprise.js +239 -0
  380. package/bin/runners/lib/ship-output.js +1128 -0
  381. package/bin/runners/lib/snippets.js +67 -0
  382. package/bin/runners/lib/status-output.js +340 -0
  383. package/bin/runners/lib/terminal-ui.js +356 -0
  384. package/bin/runners/lib/truth.js +1691 -0
  385. package/bin/runners/lib/ui.js +562 -0
  386. package/bin/runners/lib/unified-cli-output.js +947 -0
  387. package/bin/runners/lib/unified-output.js +197 -0
  388. package/bin/runners/lib/upsell.js +410 -0
  389. package/bin/runners/lib/usage.js +153 -0
  390. package/bin/runners/lib/validate-patch.js +156 -0
  391. package/bin/runners/lib/verdict-engine.js +628 -0
  392. package/bin/runners/lib/verification.js +345 -0
  393. package/bin/runners/lib/why-tree.js +650 -0
  394. package/bin/runners/reality/engine.js +917 -0
  395. package/bin/runners/reality/flows.js +122 -0
  396. package/bin/runners/reality/report.js +378 -0
  397. package/bin/runners/reality/session.js +193 -0
  398. package/bin/runners/runAIAgent.js +229 -0
  399. package/bin/runners/runAgent.d.ts +5 -0
  400. package/bin/runners/runAgent.js +161 -0
  401. package/bin/runners/runAllowlist.js +418 -0
  402. package/bin/runners/runApprove.js +320 -0
  403. package/bin/runners/runAudit.js +692 -0
  404. package/bin/runners/runAuth.js +731 -0
  405. package/bin/runners/runCI.js +353 -0
  406. package/bin/runners/runCheckpoint.js +530 -0
  407. package/bin/runners/runClassify.js +928 -0
  408. package/bin/runners/runCleanup.js +343 -0
  409. package/bin/runners/runContext.d.ts +4 -0
  410. package/bin/runners/runContext.js +175 -0
  411. package/bin/runners/runDoctor.js +877 -0
  412. package/bin/runners/runEvidencePack.js +362 -0
  413. package/bin/runners/runFirewall.d.ts +5 -0
  414. package/bin/runners/runFirewall.js +134 -0
  415. package/bin/runners/runFirewallHook.d.ts +5 -0
  416. package/bin/runners/runFirewallHook.js +56 -0
  417. package/bin/runners/runFix.js +1355 -0
  418. package/bin/runners/runForge.js +451 -0
  419. package/bin/runners/runGuard.js +262 -0
  420. package/bin/runners/runInit.js +1927 -0
  421. package/bin/runners/runIntent.js +906 -0
  422. package/bin/runners/runKickoff.js +878 -0
  423. package/bin/runners/runLabs.js +424 -0
  424. package/bin/runners/runLaunch.js +2000 -0
  425. package/bin/runners/runLink.js +785 -0
  426. package/bin/runners/runMcp.js +1875 -0
  427. package/bin/runners/runPacks.js +2089 -0
  428. package/bin/runners/runPolish.d.ts +4 -0
  429. package/bin/runners/runPolish.js +390 -0
  430. package/bin/runners/runPromptFirewall.js +211 -0
  431. package/bin/runners/runProve.js +1411 -0
  432. package/bin/runners/runQuickstart.js +531 -0
  433. package/bin/runners/runReality.js +2260 -0
  434. package/bin/runners/runReport.js +726 -0
  435. package/bin/runners/runRuntime.js +110 -0
  436. package/bin/runners/runSafelist.js +1190 -0
  437. package/bin/runners/runScan.js +688 -0
  438. package/bin/runners/runShield.js +1282 -0
  439. package/bin/runners/runShip.js +1660 -0
  440. package/bin/runners/runTruth.d.ts +5 -0
  441. package/bin/runners/runTruth.js +101 -0
  442. package/bin/runners/runValidate.js +179 -0
  443. package/bin/runners/runWatch.js +478 -0
  444. package/bin/runners/utils.js +360 -0
  445. package/bin/scan.js +617 -0
  446. package/bin/vibecheck.js +1617 -0
  447. package/dist/guardrail/index.d.ts +2405 -0
  448. package/dist/guardrail/index.js +9747 -0
  449. package/dist/guardrail/index.js.map +1 -0
  450. package/dist/scanner/index.d.ts +282 -0
  451. package/dist/scanner/index.js +3395 -0
  452. package/dist/scanner/index.js.map +1 -0
  453. package/package.json +123 -104
  454. package/README.md +0 -491
  455. package/dist/index.js +0 -99711
  456. package/dist/index.js.map +0 -1
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Fake Success UI Rule
3
+ *
4
+ * Only flags egregious cases of UI showing success without any backing logic.
5
+ * This rule is now much more lenient to reduce false positives - most success
6
+ * messages are legitimate (form submissions, state updates, etc.)
7
+ *
8
+ * Only flags when:
9
+ * 1. Success message is in a "critical" domain (payments, auth)
10
+ * 2. AND there's zero HTTP/API activity in the entire file
11
+ * 3. AND no state management activity detected
12
+ */
13
+
14
+ "use strict";
15
+
16
+ const { CLAIM_TYPES } = require("../../claims/claim-types");
17
+
18
+ /**
19
+ * Evaluate fake success UI rule
20
+ * @param {object} params
21
+ * @param {array} params.claims - Extracted claims
22
+ * @param {array} params.evidence - Evidence resolution results
23
+ * @param {object} params.policy - Policy configuration
24
+ * @returns {object|null} Violation or null
25
+ */
26
+ function evaluate({ claims, evidence, policy }) {
27
+ const ruleConfig = policy.rules?.fake_success_ui;
28
+
29
+ if (!ruleConfig || !ruleConfig.enabled) {
30
+ return null;
31
+ }
32
+
33
+ // Find UI success claims
34
+ const successClaims = claims.filter(c => c.type === CLAIM_TYPES.UI_SUCCESS);
35
+
36
+ if (successClaims.length === 0) {
37
+ return null;
38
+ }
39
+
40
+ // Check if there's ANY HTTP call, route reference, or side effect in the claims
41
+ // If yes, the file likely has real logic and success messages are legitimate
42
+ const hasHttpCall = claims.some(c =>
43
+ c.type === CLAIM_TYPES.HTTP_CALL || c.type === CLAIM_TYPES.ROUTE
44
+ );
45
+
46
+ const hasSideEffect = claims.some(c => c.type === CLAIM_TYPES.SIDE_EFFECT);
47
+
48
+ // If there's any API activity, allow all success messages
49
+ if (hasHttpCall || hasSideEffect) {
50
+ return null;
51
+ }
52
+
53
+ // Check if any success claim is in a critical domain
54
+ const criticalDomains = ruleConfig.block_if_domain || ["payments", "auth"];
55
+ const criticalSuccessClaims = successClaims.filter(claim => {
56
+ const domain = claim.domain || "general";
57
+ return criticalDomains.includes(domain);
58
+ });
59
+
60
+ // Only flag if:
61
+ // 1. There's a success claim in a critical domain
62
+ // 2. AND there's zero API activity
63
+ // 3. AND we have multiple success claims (single success is likely legitimate)
64
+ if (criticalSuccessClaims.length > 0 && successClaims.length > 2) {
65
+ return {
66
+ rule: "fake_success_ui",
67
+ severity: ruleConfig.severity || "warn", // Default to warn, not block
68
+ message: `Multiple success messages (${successClaims.length}) in ${criticalSuccessClaims[0].domain} without API calls - verify logic exists`,
69
+ claimId: `claim_${claims.indexOf(criticalSuccessClaims[0])}`,
70
+ claim: criticalSuccessClaims[0]
71
+ };
72
+ }
73
+
74
+ return null;
75
+ }
76
+
77
+ module.exports = {
78
+ evaluate
79
+ };
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Ghost Env Rule
3
+ *
4
+ * Blocks if process.env.X used but not declared.
5
+ * Includes smart whitelisting to reduce false positives.
6
+ */
7
+
8
+ "use strict";
9
+
10
+ const { CLAIM_TYPES } = require("../../claims/claim-types");
11
+
12
+ /**
13
+ * Common environment variables that are safe to use without explicit declaration.
14
+ * These are well-known Node.js, Next.js, and common deployment platform vars.
15
+ *
16
+ * NOTE: Be generous with this list - most env vars are set by the user's deployment
17
+ * environment and aren't hallucinations. We only want to flag truly phantom vars
18
+ * that the agent invented with no basis.
19
+ */
20
+ const SAFE_ENV_VARS = new Set([
21
+ // Node.js core
22
+ "NODE_ENV",
23
+ "NODE_OPTIONS",
24
+ "NODE_PATH",
25
+ "NODE_DEBUG",
26
+ "NODE_TLS_REJECT_UNAUTHORIZED",
27
+
28
+ // Next.js / React
29
+ "NEXT_PUBLIC_", // Prefix pattern
30
+ "REACT_APP_", // Prefix pattern
31
+ "VERCEL",
32
+ "VERCEL_ENV",
33
+ "VERCEL_URL",
34
+ "NEXT_RUNTIME",
35
+ "ANALYZE",
36
+
37
+ // Common deployment
38
+ "PORT",
39
+ "HOST",
40
+ "HOSTNAME",
41
+ "CI",
42
+ "DEBUG",
43
+ "LOG_LEVEL",
44
+ "TZ",
45
+ "LANG",
46
+ "HOME",
47
+ "USER",
48
+ "PATH",
49
+ "PWD",
50
+ "SHELL",
51
+ "TERM",
52
+ "TMPDIR",
53
+ "TEMP",
54
+ "TMP",
55
+
56
+ // Testing
57
+ "TEST",
58
+ "JEST_WORKER_ID",
59
+ "VITEST",
60
+ "PLAYWRIGHT_TEST_BASE_URL",
61
+
62
+ // Build tools
63
+ "npm_package_name",
64
+ "npm_package_version",
65
+ "npm_lifecycle_event",
66
+
67
+ // Database (common naming patterns)
68
+ "DATABASE_URL",
69
+ "DB_HOST",
70
+ "DB_PORT",
71
+ "DB_USER",
72
+ "DB_PASSWORD",
73
+ "DB_NAME",
74
+ "POSTGRES_URL",
75
+ "MYSQL_URL",
76
+ "REDIS_URL",
77
+ "MONGODB_URI",
78
+
79
+ // Auth (common naming patterns)
80
+ "JWT_SECRET",
81
+ "SESSION_SECRET",
82
+ "AUTH_SECRET",
83
+ "NEXTAUTH_SECRET",
84
+ "NEXTAUTH_URL",
85
+
86
+ // API keys (generic patterns)
87
+ "API_KEY",
88
+ "API_SECRET",
89
+ "SECRET_KEY",
90
+
91
+ // Email
92
+ "SMTP_HOST",
93
+ "SMTP_PORT",
94
+ "SMTP_USER",
95
+ "SMTP_PASSWORD",
96
+ "MAIL_HOST",
97
+ "MAIL_PORT",
98
+ "RESEND_API_KEY",
99
+ "SENDGRID_API_KEY",
100
+
101
+ // Payments
102
+ "STRIPE_SECRET_KEY",
103
+ "STRIPE_PUBLISHABLE_KEY",
104
+ "STRIPE_WEBHOOK_SECRET",
105
+ ]);
106
+
107
+ /**
108
+ * Prefix patterns that are safe - these are from known platforms/tools
109
+ */
110
+ const SAFE_ENV_PREFIXES = [
111
+ "NEXT_PUBLIC_",
112
+ "REACT_APP_",
113
+ "VITE_",
114
+ "VUE_APP_",
115
+ "NUXT_",
116
+ "npm_",
117
+ "GITHUB_",
118
+ "CI_",
119
+ "VERCEL_",
120
+ "RAILWAY_",
121
+ "RENDER_",
122
+ "HEROKU_",
123
+ "AWS_",
124
+ "AZURE_",
125
+ "GOOGLE_",
126
+ "FIREBASE_",
127
+ "SUPABASE_",
128
+ "CLERK_",
129
+ "AUTH0_",
130
+ "SENTRY_",
131
+ "DATADOG_",
132
+ "NEW_RELIC_",
133
+ "OPENAI_",
134
+ "ANTHROPIC_",
135
+ "VIBECHECK_",
136
+ ];
137
+
138
+ /**
139
+ * Check if an env var is in the safe list
140
+ * @param {string} varName - Environment variable name
141
+ * @returns {boolean} Is safe
142
+ */
143
+ function isSafeEnvVar(varName) {
144
+ if (!varName || typeof varName !== 'string') return false;
145
+
146
+ const normalized = varName.toUpperCase();
147
+
148
+ // Direct match
149
+ if (SAFE_ENV_VARS.has(normalized)) return true;
150
+
151
+ // Prefix match
152
+ for (const prefix of SAFE_ENV_PREFIXES) {
153
+ if (normalized.startsWith(prefix)) return true;
154
+ }
155
+
156
+ return false;
157
+ }
158
+
159
+ /**
160
+ * Evaluate ghost env rule
161
+ * @param {object} params
162
+ * @param {array} params.claims - Extracted claims
163
+ * @param {array} params.evidence - Evidence resolution results
164
+ * @param {object} params.policy - Policy configuration
165
+ * @returns {object|null} Violation or null
166
+ */
167
+ function evaluate({ claims, evidence, policy }) {
168
+ const ruleConfig = policy.rules?.ghost_env;
169
+
170
+ if (!ruleConfig || !ruleConfig.enabled) {
171
+ return null;
172
+ }
173
+
174
+ // Get custom whitelist from policy
175
+ const customWhitelist = new Set(ruleConfig.whitelist || []);
176
+
177
+ // Find env claims with UNPROVEN evidence
178
+ for (let i = 0; i < claims.length; i++) {
179
+ const claim = claims[i];
180
+
181
+ if (claim.type === CLAIM_TYPES.ENV) {
182
+ const ev = evidence.find(e => e.claimId === `claim_${i}`);
183
+
184
+ if (ev && ev.result === "UNPROVEN") {
185
+ const envVar = String(claim.value || claim.key || "");
186
+
187
+ // Skip if it's a known safe env var
188
+ if (isSafeEnvVar(envVar)) {
189
+ continue;
190
+ }
191
+
192
+ // Skip if in custom whitelist
193
+ if (customWhitelist.has(envVar)) {
194
+ continue;
195
+ }
196
+
197
+ // Skip if it's a fallback pattern (e.g., process.env.X || 'default')
198
+ if (claim.hasFallback) {
199
+ // Downgrade to warning instead of block
200
+ return {
201
+ rule: "ghost_env",
202
+ severity: "warn",
203
+ message: `Env var ${envVar} is used with fallback but not declared`,
204
+ claimId: `claim_${i}`,
205
+ claim
206
+ };
207
+ }
208
+
209
+ // Default to "warn" - only block if explicitly configured
210
+ // Most env vars are real, just not in .env.example
211
+ return {
212
+ rule: "ghost_env",
213
+ severity: ruleConfig.severity || "warn",
214
+ message: `Env var ${envVar} used but not found in .env.example`,
215
+ claimId: `claim_${i}`,
216
+ claim
217
+ };
218
+ }
219
+ }
220
+ }
221
+
222
+ return null;
223
+ }
224
+
225
+ module.exports = {
226
+ evaluate
227
+ };
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Ghost Route Rule
3
+ *
4
+ * Blocks if UI references route not registered in truthpack.
5
+ * Includes smart detection of external APIs and common patterns.
6
+ */
7
+
8
+ "use strict";
9
+
10
+ const { CLAIM_TYPES } = require("../../claims/claim-types");
11
+
12
+ /**
13
+ * Patterns that indicate an external API (not a local route)
14
+ */
15
+ const EXTERNAL_API_PATTERNS = [
16
+ // Full URLs
17
+ /^https?:\/\//i,
18
+ /^\/\/[a-z]/i,
19
+
20
+ // Common external API domains
21
+ /api\.github\.com/i,
22
+ /api\.stripe\.com/i,
23
+ /api\.openai\.com/i,
24
+ /api\.anthropic\.com/i,
25
+ /api\.twilio\.com/i,
26
+ /api\.sendgrid\.com/i,
27
+ /graph\.facebook\.com/i,
28
+ /api\.twitter\.com/i,
29
+ /googleapis\.com/i,
30
+ /aws\.amazon\.com/i,
31
+ /cloudflare\.com/i,
32
+ /api\.clerk\.dev/i,
33
+ /api\.auth0\.com/i,
34
+ /api\.supabase\.co/i,
35
+ /api\.vercel\.app/i,
36
+
37
+ // GraphQL endpoints
38
+ /graphql/i,
39
+
40
+ // Webhook patterns
41
+ /webhook/i,
42
+ /hook\//i,
43
+ ];
44
+
45
+ /**
46
+ * Path patterns that are safe to skip (dynamic or template)
47
+ */
48
+ const SAFE_ROUTE_PATTERNS = [
49
+ // Dynamic segments
50
+ /\$\{/, // Template literals
51
+ /\[.*\]/, // Dynamic route segments [id]
52
+ /:\w+/, // URL params :id
53
+ /\{\{.*\}\}/, // Template syntax
54
+
55
+ // Hash-only routes
56
+ /^#/,
57
+
58
+ // Query-only
59
+ /^\?/,
60
+
61
+ // Empty or undefined
62
+ /^undefined$/i,
63
+ /^null$/i,
64
+ ];
65
+
66
+ /**
67
+ * Check if a route is external
68
+ * @param {string} route - Route path
69
+ * @returns {boolean} Is external
70
+ */
71
+ function isExternalRoute(route) {
72
+ if (!route || typeof route !== 'string') return true;
73
+
74
+ const trimmed = route.trim();
75
+
76
+ // Check external patterns
77
+ for (const pattern of EXTERNAL_API_PATTERNS) {
78
+ if (pattern.test(trimmed)) return true;
79
+ }
80
+
81
+ return false;
82
+ }
83
+
84
+ /**
85
+ * Check if a route should be skipped
86
+ * @param {string} route - Route path
87
+ * @returns {boolean} Should skip
88
+ */
89
+ function shouldSkipRoute(route) {
90
+ if (!route || typeof route !== 'string') return true;
91
+
92
+ const trimmed = route.trim();
93
+
94
+ // Skip empty routes
95
+ if (trimmed.length === 0) return true;
96
+
97
+ // Check safe patterns
98
+ for (const pattern of SAFE_ROUTE_PATTERNS) {
99
+ if (pattern.test(trimmed)) return true;
100
+ }
101
+
102
+ return false;
103
+ }
104
+
105
+ /**
106
+ * Check if route is a local API route
107
+ * @param {string} route - Route path
108
+ * @returns {boolean} Is local API
109
+ */
110
+ function isLocalApiRoute(route) {
111
+ if (!route || typeof route !== 'string') return false;
112
+
113
+ const trimmed = route.trim().toLowerCase();
114
+
115
+ // Must start with /api/ to be a local Next.js API route
116
+ return trimmed.startsWith('/api/');
117
+ }
118
+
119
+ /**
120
+ * Evaluate ghost route rule
121
+ * @param {object} params
122
+ * @param {array} params.claims - Extracted claims
123
+ * @param {array} params.evidence - Evidence resolution results
124
+ * @param {object} params.policy - Policy configuration
125
+ * @returns {object|null} Violation or null
126
+ */
127
+ function evaluate({ claims, evidence, policy }) {
128
+ const ruleConfig = policy.rules?.ghost_route;
129
+
130
+ if (!ruleConfig || !ruleConfig.enabled) {
131
+ return null;
132
+ }
133
+
134
+ // Get custom whitelist from policy
135
+ const customWhitelist = new Set(ruleConfig.whitelist || []);
136
+
137
+ // Find route claims with UNPROVEN evidence
138
+ for (let i = 0; i < claims.length; i++) {
139
+ const claim = claims[i];
140
+
141
+ if (claim.type === CLAIM_TYPES.ROUTE || claim.type === CLAIM_TYPES.HTTP_CALL) {
142
+ const ev = evidence.find(e => e.claimId === `claim_${i}`);
143
+
144
+ // Skip if evidence shows it's already proven
145
+ if (ev && ev.result === "PROVEN") {
146
+ continue;
147
+ }
148
+
149
+ if (ev && ev.result === "UNPROVEN") {
150
+ const routePath = String(claim.value || "").trim();
151
+
152
+ // Skip dynamic or template routes
153
+ if (shouldSkipRoute(routePath)) {
154
+ continue;
155
+ }
156
+
157
+ // Skip external API calls
158
+ if (isExternalRoute(routePath)) {
159
+ continue;
160
+ }
161
+
162
+ // Only flag local API routes
163
+ if (!isLocalApiRoute(routePath)) {
164
+ // Not a local API route - could be page navigation, skip
165
+ continue;
166
+ }
167
+
168
+ // Skip if in custom whitelist
169
+ if (customWhitelist.has(routePath)) {
170
+ continue;
171
+ }
172
+
173
+ // Default to "warn" - only block if explicitly configured
174
+ // Route references are often correct, just not in truthpack yet
175
+ return {
176
+ rule: "ghost_route",
177
+ severity: ruleConfig.severity || "warn",
178
+ message: `Route ${routePath} not found in truthpack - verify it exists`,
179
+ claimId: `claim_${i}`,
180
+ claim
181
+ };
182
+ }
183
+ }
184
+ }
185
+
186
+ return null;
187
+ }
188
+
189
+ module.exports = {
190
+ evaluate
191
+ };
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Scope Explosion Rule
3
+ *
4
+ * Blocks if too many files touched.
5
+ */
6
+
7
+ "use strict";
8
+
9
+ /**
10
+ * Evaluate scope explosion rule
11
+ * @param {object} params
12
+ * @param {array} params.files - Changed files
13
+ * @param {string} params.intent - Agent intent message
14
+ * @param {object} params.policy - Policy configuration
15
+ * @returns {object|null} Violation or null
16
+ */
17
+ function evaluate({ files, intent, policy }) {
18
+ const ruleConfig = policy.rules?.scope_explosion;
19
+
20
+ if (!ruleConfig || !ruleConfig.enabled) {
21
+ return null;
22
+ }
23
+
24
+ const scope = policy.scope || {};
25
+ const maxFiles = scope.max_files_touched || 10;
26
+ const maxLines = scope.max_lines_changed || 600;
27
+ const requireIntent = scope.require_intent_for_expand_scope || false;
28
+
29
+ const totalFiles = files.length;
30
+ const totalLines = files.reduce((sum, f) => sum + (f.linesChanged || 0), 0);
31
+
32
+ // Check file count
33
+ if (totalFiles > maxFiles) {
34
+ const hasIntent = intent && intent.trim().length > 0;
35
+
36
+ if (requireIntent && !hasIntent) {
37
+ return {
38
+ rule: "scope_explosion",
39
+ severity: ruleConfig.severity || "block",
40
+ message: `Scope explosion: ${totalFiles} files touched (max: ${maxFiles}). Intent required for scope expansion.`,
41
+ metadata: {
42
+ totalFiles,
43
+ maxFiles,
44
+ hasIntent
45
+ }
46
+ };
47
+ } else if (!requireIntent) {
48
+ return {
49
+ rule: "scope_explosion",
50
+ severity: ruleConfig.severity || "block",
51
+ message: `Scope explosion: ${totalFiles} files touched (max: ${maxFiles})`,
52
+ metadata: {
53
+ totalFiles,
54
+ maxFiles
55
+ }
56
+ };
57
+ }
58
+ }
59
+
60
+ // Check line count
61
+ if (totalLines > maxLines) {
62
+ const hasIntent = intent && intent.trim().length > 0;
63
+
64
+ if (requireIntent && !hasIntent) {
65
+ return {
66
+ rule: "scope_explosion",
67
+ severity: ruleConfig.severity || "block",
68
+ message: `Scope explosion: ${totalLines} lines changed (max: ${maxLines}). Intent required for scope expansion.`,
69
+ metadata: {
70
+ totalLines,
71
+ maxLines,
72
+ hasIntent
73
+ }
74
+ };
75
+ } else if (!requireIntent) {
76
+ return {
77
+ rule: "scope_explosion",
78
+ severity: ruleConfig.severity || "block",
79
+ message: `Scope explosion: ${totalLines} lines changed (max: ${maxLines})`,
80
+ metadata: {
81
+ totalLines,
82
+ maxLines
83
+ }
84
+ };
85
+ }
86
+ }
87
+
88
+ return null;
89
+ }
90
+
91
+ module.exports = {
92
+ evaluate
93
+ };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Unsafe Side Effect Rule
3
+ *
4
+ * Blocks unverified side effects.
5
+ */
6
+
7
+ "use strict";
8
+
9
+ const { CLAIM_TYPES } = require("../../claims/claim-types");
10
+
11
+ /**
12
+ * Evaluate unsafe side effect rule
13
+ * @param {object} params
14
+ * @param {array} params.claims - Extracted claims
15
+ * @param {array} params.evidence - Evidence resolution results
16
+ * @param {object} params.policy - Policy configuration
17
+ * @returns {object|null} Violation or null
18
+ */
19
+ function evaluate({ claims, evidence, policy }) {
20
+ const ruleConfig = policy.rules?.unsafe_side_effect;
21
+
22
+ if (!ruleConfig || !ruleConfig.enabled) {
23
+ return null;
24
+ }
25
+
26
+ const verification = policy.verification || {};
27
+ const requireForDomains = verification.require_for_domains || [];
28
+
29
+ // Find side effect claims
30
+ for (let i = 0; i < claims.length; i++) {
31
+ const claim = claims[i];
32
+
33
+ if (claim.type === CLAIM_TYPES.SIDE_EFFECT) {
34
+ const ev = evidence.find(e => e.claimId === `claim_${i}`);
35
+
36
+ // Check if domain requires verification
37
+ const claimDomain = claim.domain || "general";
38
+ const requiresVerification = requireForDomains.includes(claimDomain);
39
+
40
+ if (requiresVerification && ev && ev.result === "UNPROVEN") {
41
+ return {
42
+ rule: "unsafe_side_effect",
43
+ severity: ruleConfig.severity || "block",
44
+ message: `Unsafe side effect: ${claim.value} requires verification (test coverage or reality proof)`,
45
+ claimId: `claim_${i}`,
46
+ claim
47
+ };
48
+ }
49
+ }
50
+ }
51
+
52
+ return null;
53
+ }
54
+
55
+ module.exports = {
56
+ evaluate
57
+ };