@kevinrabun/judges-cli 3.124.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 (1745) hide show
  1. package/README.md +24 -0
  2. package/agents/accessibility.judge.md +44 -0
  3. package/agents/agent-instructions.judge.md +44 -0
  4. package/agents/ai-code-safety.judge.md +55 -0
  5. package/agents/api-contract.judge.md +37 -0
  6. package/agents/api-design.judge.md +55 -0
  7. package/agents/authentication.judge.md +61 -0
  8. package/agents/backwards-compatibility.judge.md +44 -0
  9. package/agents/caching.judge.md +44 -0
  10. package/agents/ci-cd.judge.md +44 -0
  11. package/agents/cloud-readiness.judge.md +51 -0
  12. package/agents/code-structure.judge.md +48 -0
  13. package/agents/compliance.judge.md +47 -0
  14. package/agents/concurrency.judge.md +46 -0
  15. package/agents/configuration-management.judge.md +44 -0
  16. package/agents/cost-effectiveness.judge.md +40 -0
  17. package/agents/cybersecurity.judge.md +61 -0
  18. package/agents/data-security.judge.md +48 -0
  19. package/agents/data-sovereignty.judge.md +58 -0
  20. package/agents/database.judge.md +49 -0
  21. package/agents/dependency-health.judge.md +46 -0
  22. package/agents/documentation.judge.md +53 -0
  23. package/agents/error-handling.judge.md +53 -0
  24. package/agents/ethics-bias.judge.md +46 -0
  25. package/agents/false-positive-review.judge.md +85 -0
  26. package/agents/framework-safety.judge.md +47 -0
  27. package/agents/hallucination-detection.judge.md +46 -0
  28. package/agents/iac-security.judge.md +45 -0
  29. package/agents/intent-alignment.judge.md +44 -0
  30. package/agents/internationalization.judge.md +42 -0
  31. package/agents/logging-privacy.judge.md +44 -0
  32. package/agents/logic-review.judge.md +34 -0
  33. package/agents/maintainability.judge.md +44 -0
  34. package/agents/model-fingerprint.judge.md +31 -0
  35. package/agents/multi-turn-coherence.judge.md +36 -0
  36. package/agents/observability.judge.md +52 -0
  37. package/agents/over-engineering.judge.md +48 -0
  38. package/agents/performance.judge.md +44 -0
  39. package/agents/portability.judge.md +44 -0
  40. package/agents/rate-limiting.judge.md +53 -0
  41. package/agents/reliability.judge.md +55 -0
  42. package/agents/scalability.judge.md +50 -0
  43. package/agents/security.judge.md +62 -0
  44. package/agents/software-practices.judge.md +54 -0
  45. package/agents/testing.judge.md +52 -0
  46. package/agents/ux.judge.md +44 -0
  47. package/bin/judges.js +8 -0
  48. package/dist/a2a-protocol.d.ts +136 -0
  49. package/dist/a2a-protocol.js +218 -0
  50. package/dist/agent-loader.d.ts +107 -0
  51. package/dist/agent-loader.js +260 -0
  52. package/dist/api.d.ts +169 -0
  53. package/dist/api.js +195 -0
  54. package/dist/ast/cross-file-taint.d.ts +42 -0
  55. package/dist/ast/cross-file-taint.js +679 -0
  56. package/dist/ast/index.d.ts +25 -0
  57. package/dist/ast/index.js +148 -0
  58. package/dist/ast/structural-parser.d.ts +2 -0
  59. package/dist/ast/structural-parser.js +756 -0
  60. package/dist/ast/taint-tracker.d.ts +48 -0
  61. package/dist/ast/taint-tracker.js +1033 -0
  62. package/dist/ast/tree-sitter-ast.d.ts +33 -0
  63. package/dist/ast/tree-sitter-ast.js +1164 -0
  64. package/dist/ast/types.d.ts +50 -0
  65. package/dist/ast/types.js +7 -0
  66. package/dist/audit-trail.d.ts +245 -0
  67. package/dist/audit-trail.js +257 -0
  68. package/dist/auto-tune.d.ts +146 -0
  69. package/dist/auto-tune.js +373 -0
  70. package/dist/cache.d.ts +53 -0
  71. package/dist/cache.js +86 -0
  72. package/dist/calibration.d.ts +108 -0
  73. package/dist/calibration.js +219 -0
  74. package/dist/cli-dispatch.d.ts +7 -0
  75. package/dist/cli-dispatch.js +654 -0
  76. package/dist/cli-formatters.d.ts +6 -0
  77. package/dist/cli-formatters.js +186 -0
  78. package/dist/cli-helpers.d.ts +29 -0
  79. package/dist/cli-helpers.js +129 -0
  80. package/dist/cli.d.ts +30 -0
  81. package/dist/cli.js +1487 -0
  82. package/dist/commands/adoption-report.d.ts +7 -0
  83. package/dist/commands/adoption-report.js +218 -0
  84. package/dist/commands/adoption-track.d.ts +4 -0
  85. package/dist/commands/adoption-track.js +246 -0
  86. package/dist/commands/ai-gate.d.ts +7 -0
  87. package/dist/commands/ai-gate.js +212 -0
  88. package/dist/commands/ai-model-trust.d.ts +16 -0
  89. package/dist/commands/ai-model-trust.js +234 -0
  90. package/dist/commands/ai-output-compare.d.ts +8 -0
  91. package/dist/commands/ai-output-compare.js +202 -0
  92. package/dist/commands/ai-pattern-trend.d.ts +8 -0
  93. package/dist/commands/ai-pattern-trend.js +223 -0
  94. package/dist/commands/ai-prompt-audit.d.ts +22 -0
  95. package/dist/commands/ai-prompt-audit.js +254 -0
  96. package/dist/commands/ai-provenance.d.ts +4 -0
  97. package/dist/commands/ai-provenance.js +247 -0
  98. package/dist/commands/api-audit.d.ts +8 -0
  99. package/dist/commands/api-audit.js +359 -0
  100. package/dist/commands/api-misuse.d.ts +4 -0
  101. package/dist/commands/api-misuse.js +260 -0
  102. package/dist/commands/api-versioning-audit.d.ts +5 -0
  103. package/dist/commands/api-versioning-audit.js +233 -0
  104. package/dist/commands/approve-chain.d.ts +7 -0
  105. package/dist/commands/approve-chain.js +234 -0
  106. package/dist/commands/arch-audit.d.ts +8 -0
  107. package/dist/commands/arch-audit.js +283 -0
  108. package/dist/commands/assertion-density.d.ts +4 -0
  109. package/dist/commands/assertion-density.js +263 -0
  110. package/dist/commands/assign-findings.d.ts +36 -0
  111. package/dist/commands/assign-findings.js +177 -0
  112. package/dist/commands/async-safety.d.ts +4 -0
  113. package/dist/commands/async-safety.js +266 -0
  114. package/dist/commands/audit-bundle.d.ts +28 -0
  115. package/dist/commands/audit-bundle.js +234 -0
  116. package/dist/commands/audit-trail.d.ts +17 -0
  117. package/dist/commands/audit-trail.js +154 -0
  118. package/dist/commands/auto-approve.d.ts +4 -0
  119. package/dist/commands/auto-approve.js +188 -0
  120. package/dist/commands/auto-calibrate.d.ts +14 -0
  121. package/dist/commands/auto-calibrate.js +106 -0
  122. package/dist/commands/auto-detect.d.ts +61 -0
  123. package/dist/commands/auto-detect.js +328 -0
  124. package/dist/commands/auto-fix.d.ts +17 -0
  125. package/dist/commands/auto-fix.js +240 -0
  126. package/dist/commands/auto-triage.d.ts +31 -0
  127. package/dist/commands/auto-triage.js +125 -0
  128. package/dist/commands/baseline.d.ts +47 -0
  129. package/dist/commands/baseline.js +353 -0
  130. package/dist/commands/batch-review.d.ts +4 -0
  131. package/dist/commands/batch-review.js +180 -0
  132. package/dist/commands/benchmark-advanced.d.ts +14 -0
  133. package/dist/commands/benchmark-advanced.js +5057 -0
  134. package/dist/commands/benchmark-ai-agents.d.ts +8 -0
  135. package/dist/commands/benchmark-ai-agents.js +4123 -0
  136. package/dist/commands/benchmark-ai-output.d.ts +9 -0
  137. package/dist/commands/benchmark-ai-output.js +365 -0
  138. package/dist/commands/benchmark-compliance-ethics.d.ts +8 -0
  139. package/dist/commands/benchmark-compliance-ethics.js +3060 -0
  140. package/dist/commands/benchmark-expanded-2.d.ts +12 -0
  141. package/dist/commands/benchmark-expanded-2.js +5530 -0
  142. package/dist/commands/benchmark-expanded.d.ts +12 -0
  143. package/dist/commands/benchmark-expanded.js +2599 -0
  144. package/dist/commands/benchmark-infrastructure.d.ts +8 -0
  145. package/dist/commands/benchmark-infrastructure.js +2882 -0
  146. package/dist/commands/benchmark-languages.d.ts +8 -0
  147. package/dist/commands/benchmark-languages.js +1963 -0
  148. package/dist/commands/benchmark-quality-ops.d.ts +8 -0
  149. package/dist/commands/benchmark-quality-ops.js +3415 -0
  150. package/dist/commands/benchmark-security-deep.d.ts +9 -0
  151. package/dist/commands/benchmark-security-deep.js +2335 -0
  152. package/dist/commands/benchmark.d.ts +233 -0
  153. package/dist/commands/benchmark.js +3214 -0
  154. package/dist/commands/blame-review.d.ts +4 -0
  155. package/dist/commands/blame-review.js +266 -0
  156. package/dist/commands/boundary-enforce.d.ts +5 -0
  157. package/dist/commands/boundary-enforce.js +255 -0
  158. package/dist/commands/build-optimize.d.ts +6 -0
  159. package/dist/commands/build-optimize.js +256 -0
  160. package/dist/commands/burndown.d.ts +26 -0
  161. package/dist/commands/burndown.js +179 -0
  162. package/dist/commands/cache-audit.d.ts +4 -0
  163. package/dist/commands/cache-audit.js +219 -0
  164. package/dist/commands/calibration-dashboard.d.ts +1 -0
  165. package/dist/commands/calibration-dashboard.js +294 -0
  166. package/dist/commands/calibration-share.d.ts +30 -0
  167. package/dist/commands/calibration-share.js +182 -0
  168. package/dist/commands/chat-notify.d.ts +8 -0
  169. package/dist/commands/chat-notify.js +258 -0
  170. package/dist/commands/ci-template.d.ts +14 -0
  171. package/dist/commands/ci-template.js +211 -0
  172. package/dist/commands/ci-templates.d.ts +9 -0
  173. package/dist/commands/ci-templates.js +89 -0
  174. package/dist/commands/clarity-score.d.ts +8 -0
  175. package/dist/commands/clarity-score.js +260 -0
  176. package/dist/commands/clone-detect.d.ts +4 -0
  177. package/dist/commands/clone-detect.js +232 -0
  178. package/dist/commands/coach-mode.d.ts +7 -0
  179. package/dist/commands/coach-mode.js +229 -0
  180. package/dist/commands/code-health.d.ts +4 -0
  181. package/dist/commands/code-health.js +195 -0
  182. package/dist/commands/code-owner-suggest.d.ts +16 -0
  183. package/dist/commands/code-owner-suggest.js +214 -0
  184. package/dist/commands/code-similarity.d.ts +8 -0
  185. package/dist/commands/code-similarity.js +231 -0
  186. package/dist/commands/comment-drift.d.ts +4 -0
  187. package/dist/commands/comment-drift.js +228 -0
  188. package/dist/commands/commit-hygiene.d.ts +5 -0
  189. package/dist/commands/commit-hygiene.js +175 -0
  190. package/dist/commands/community-patterns.d.ts +1 -0
  191. package/dist/commands/community-patterns.js +131 -0
  192. package/dist/commands/compare-runs.d.ts +37 -0
  193. package/dist/commands/compare-runs.js +228 -0
  194. package/dist/commands/completion-audit.d.ts +4 -0
  195. package/dist/commands/completion-audit.js +296 -0
  196. package/dist/commands/completions.d.ts +1 -0
  197. package/dist/commands/completions.js +257 -0
  198. package/dist/commands/compliance-map.d.ts +8 -0
  199. package/dist/commands/compliance-map.js +374 -0
  200. package/dist/commands/compliance-report.d.ts +34 -0
  201. package/dist/commands/compliance-report.js +161 -0
  202. package/dist/commands/compliance-weight.d.ts +8 -0
  203. package/dist/commands/compliance-weight.js +272 -0
  204. package/dist/commands/config-drift.d.ts +24 -0
  205. package/dist/commands/config-drift.js +213 -0
  206. package/dist/commands/config-lint.d.ts +4 -0
  207. package/dist/commands/config-lint.js +187 -0
  208. package/dist/commands/config-migrate.d.ts +43 -0
  209. package/dist/commands/config-migrate.js +240 -0
  210. package/dist/commands/config-share.d.ts +95 -0
  211. package/dist/commands/config-share.js +406 -0
  212. package/dist/commands/context-blind.d.ts +4 -0
  213. package/dist/commands/context-blind.js +272 -0
  214. package/dist/commands/context-inject.d.ts +8 -0
  215. package/dist/commands/context-inject.js +211 -0
  216. package/dist/commands/contract-verify.d.ts +4 -0
  217. package/dist/commands/contract-verify.js +316 -0
  218. package/dist/commands/correlate.d.ts +27 -0
  219. package/dist/commands/correlate.js +241 -0
  220. package/dist/commands/cost-forecast.d.ts +18 -0
  221. package/dist/commands/cost-forecast.js +193 -0
  222. package/dist/commands/coverage-map.d.ts +22 -0
  223. package/dist/commands/coverage-map.js +222 -0
  224. package/dist/commands/coverage.d.ts +40 -0
  225. package/dist/commands/coverage.js +147 -0
  226. package/dist/commands/cross-file-consistency.d.ts +4 -0
  227. package/dist/commands/cross-file-consistency.js +254 -0
  228. package/dist/commands/cross-pr-regression.d.ts +8 -0
  229. package/dist/commands/cross-pr-regression.js +297 -0
  230. package/dist/commands/custom-rule.d.ts +4 -0
  231. package/dist/commands/custom-rule.js +210 -0
  232. package/dist/commands/dead-code-detect.d.ts +4 -0
  233. package/dist/commands/dead-code-detect.js +255 -0
  234. package/dist/commands/dedup-report.d.ts +12 -0
  235. package/dist/commands/dedup-report.js +137 -0
  236. package/dist/commands/dep-audit.d.ts +52 -0
  237. package/dist/commands/dep-audit.js +277 -0
  238. package/dist/commands/dep-correlate.d.ts +8 -0
  239. package/dist/commands/dep-correlate.js +207 -0
  240. package/dist/commands/deploy-readiness.d.ts +5 -0
  241. package/dist/commands/deploy-readiness.js +211 -0
  242. package/dist/commands/deprecated.d.ts +47 -0
  243. package/dist/commands/deprecated.js +201 -0
  244. package/dist/commands/deps.d.ts +5 -0
  245. package/dist/commands/deps.js +122 -0
  246. package/dist/commands/design-audit.d.ts +8 -0
  247. package/dist/commands/design-audit.js +301 -0
  248. package/dist/commands/dev-score.d.ts +36 -0
  249. package/dist/commands/dev-score.js +203 -0
  250. package/dist/commands/diff-explain.d.ts +4 -0
  251. package/dist/commands/diff-explain.js +142 -0
  252. package/dist/commands/diff-only.d.ts +33 -0
  253. package/dist/commands/diff-only.js +151 -0
  254. package/dist/commands/diff-review.d.ts +4 -0
  255. package/dist/commands/diff-review.js +190 -0
  256. package/dist/commands/diff.d.ts +6 -0
  257. package/dist/commands/diff.js +449 -0
  258. package/dist/commands/digest.d.ts +19 -0
  259. package/dist/commands/digest.js +221 -0
  260. package/dist/commands/doc-drift.d.ts +8 -0
  261. package/dist/commands/doc-drift.js +258 -0
  262. package/dist/commands/doc-gen.d.ts +7 -0
  263. package/dist/commands/doc-gen.js +208 -0
  264. package/dist/commands/docs.d.ts +1 -0
  265. package/dist/commands/docs.js +156 -0
  266. package/dist/commands/doctor.d.ts +55 -0
  267. package/dist/commands/doctor.js +362 -0
  268. package/dist/commands/encoding-safety.d.ts +4 -0
  269. package/dist/commands/encoding-safety.js +275 -0
  270. package/dist/commands/error-taxonomy.d.ts +5 -0
  271. package/dist/commands/error-taxonomy.js +226 -0
  272. package/dist/commands/error-ux.d.ts +4 -0
  273. package/dist/commands/error-ux.js +252 -0
  274. package/dist/commands/event-leak.d.ts +4 -0
  275. package/dist/commands/event-leak.js +262 -0
  276. package/dist/commands/evidence-chain.d.ts +4 -0
  277. package/dist/commands/evidence-chain.js +309 -0
  278. package/dist/commands/example-leak.d.ts +4 -0
  279. package/dist/commands/example-leak.js +232 -0
  280. package/dist/commands/exception-consistency.d.ts +6 -0
  281. package/dist/commands/exception-consistency.js +192 -0
  282. package/dist/commands/exec-report.d.ts +8 -0
  283. package/dist/commands/exec-report.js +271 -0
  284. package/dist/commands/explain-finding.d.ts +7 -0
  285. package/dist/commands/explain-finding.js +278 -0
  286. package/dist/commands/false-negatives.d.ts +34 -0
  287. package/dist/commands/false-negatives.js +165 -0
  288. package/dist/commands/feedback-rules.d.ts +28 -0
  289. package/dist/commands/feedback-rules.js +173 -0
  290. package/dist/commands/feedback.d.ts +182 -0
  291. package/dist/commands/feedback.js +550 -0
  292. package/dist/commands/finding-age-analysis.d.ts +4 -0
  293. package/dist/commands/finding-age-analysis.js +144 -0
  294. package/dist/commands/finding-age-report.d.ts +4 -0
  295. package/dist/commands/finding-age-report.js +154 -0
  296. package/dist/commands/finding-age-tracker.d.ts +7 -0
  297. package/dist/commands/finding-age-tracker.js +152 -0
  298. package/dist/commands/finding-age.d.ts +4 -0
  299. package/dist/commands/finding-age.js +145 -0
  300. package/dist/commands/finding-ancestry-trace.d.ts +1 -0
  301. package/dist/commands/finding-ancestry-trace.js +69 -0
  302. package/dist/commands/finding-annotation-export.d.ts +1 -0
  303. package/dist/commands/finding-annotation-export.js +97 -0
  304. package/dist/commands/finding-annotation-layer.d.ts +4 -0
  305. package/dist/commands/finding-annotation-layer.js +128 -0
  306. package/dist/commands/finding-auto-categorize.d.ts +1 -0
  307. package/dist/commands/finding-auto-categorize.js +109 -0
  308. package/dist/commands/finding-auto-fix-suggest.d.ts +1 -0
  309. package/dist/commands/finding-auto-fix-suggest.js +76 -0
  310. package/dist/commands/finding-auto-fix.d.ts +4 -0
  311. package/dist/commands/finding-auto-fix.js +188 -0
  312. package/dist/commands/finding-auto-group.d.ts +4 -0
  313. package/dist/commands/finding-auto-group.js +108 -0
  314. package/dist/commands/finding-auto-label.d.ts +4 -0
  315. package/dist/commands/finding-auto-label.js +220 -0
  316. package/dist/commands/finding-auto-priority.d.ts +1 -0
  317. package/dist/commands/finding-auto-priority.js +100 -0
  318. package/dist/commands/finding-auto-suppress.d.ts +4 -0
  319. package/dist/commands/finding-auto-suppress.js +126 -0
  320. package/dist/commands/finding-auto-tag.d.ts +4 -0
  321. package/dist/commands/finding-auto-tag.js +113 -0
  322. package/dist/commands/finding-auto-triage.d.ts +4 -0
  323. package/dist/commands/finding-auto-triage.js +108 -0
  324. package/dist/commands/finding-autofix-preview.d.ts +4 -0
  325. package/dist/commands/finding-autofix-preview.js +86 -0
  326. package/dist/commands/finding-batch-resolve.d.ts +4 -0
  327. package/dist/commands/finding-batch-resolve.js +165 -0
  328. package/dist/commands/finding-batch-suppress.d.ts +4 -0
  329. package/dist/commands/finding-batch-suppress.js +85 -0
  330. package/dist/commands/finding-batch-triage.d.ts +1 -0
  331. package/dist/commands/finding-batch-triage.js +90 -0
  332. package/dist/commands/finding-blast-radius.d.ts +4 -0
  333. package/dist/commands/finding-blast-radius.js +91 -0
  334. package/dist/commands/finding-budget.d.ts +4 -0
  335. package/dist/commands/finding-budget.js +232 -0
  336. package/dist/commands/finding-category-map.d.ts +4 -0
  337. package/dist/commands/finding-category-map.js +103 -0
  338. package/dist/commands/finding-category-stats.d.ts +4 -0
  339. package/dist/commands/finding-category-stats.js +104 -0
  340. package/dist/commands/finding-category.d.ts +4 -0
  341. package/dist/commands/finding-category.js +109 -0
  342. package/dist/commands/finding-change-impact.d.ts +4 -0
  343. package/dist/commands/finding-change-impact.js +107 -0
  344. package/dist/commands/finding-cluster-analysis.d.ts +4 -0
  345. package/dist/commands/finding-cluster-analysis.js +133 -0
  346. package/dist/commands/finding-cluster-group.d.ts +4 -0
  347. package/dist/commands/finding-cluster-group.js +105 -0
  348. package/dist/commands/finding-cluster-summary.d.ts +1 -0
  349. package/dist/commands/finding-cluster-summary.js +85 -0
  350. package/dist/commands/finding-cluster.d.ts +4 -0
  351. package/dist/commands/finding-cluster.js +157 -0
  352. package/dist/commands/finding-code-context.d.ts +4 -0
  353. package/dist/commands/finding-code-context.js +96 -0
  354. package/dist/commands/finding-code-smell.d.ts +4 -0
  355. package/dist/commands/finding-code-smell.js +113 -0
  356. package/dist/commands/finding-compare-runs.d.ts +4 -0
  357. package/dist/commands/finding-compare-runs.js +105 -0
  358. package/dist/commands/finding-compliance-tag.d.ts +1 -0
  359. package/dist/commands/finding-compliance-tag.js +106 -0
  360. package/dist/commands/finding-confidence-boost.d.ts +1 -0
  361. package/dist/commands/finding-confidence-boost.js +88 -0
  362. package/dist/commands/finding-confidence-calibrate.d.ts +4 -0
  363. package/dist/commands/finding-confidence-calibrate.js +111 -0
  364. package/dist/commands/finding-confidence-filter.d.ts +4 -0
  365. package/dist/commands/finding-confidence-filter.js +77 -0
  366. package/dist/commands/finding-contest.d.ts +7 -0
  367. package/dist/commands/finding-contest.js +192 -0
  368. package/dist/commands/finding-context-enrich.d.ts +4 -0
  369. package/dist/commands/finding-context-enrich.js +89 -0
  370. package/dist/commands/finding-context-expand.d.ts +4 -0
  371. package/dist/commands/finding-context-expand.js +102 -0
  372. package/dist/commands/finding-context-link.d.ts +1 -0
  373. package/dist/commands/finding-context-link.js +94 -0
  374. package/dist/commands/finding-context-summary.d.ts +1 -0
  375. package/dist/commands/finding-context-summary.js +85 -0
  376. package/dist/commands/finding-context-window.d.ts +4 -0
  377. package/dist/commands/finding-context-window.js +126 -0
  378. package/dist/commands/finding-context.d.ts +4 -0
  379. package/dist/commands/finding-context.js +140 -0
  380. package/dist/commands/finding-correlate.d.ts +4 -0
  381. package/dist/commands/finding-correlate.js +88 -0
  382. package/dist/commands/finding-correlation-map.d.ts +4 -0
  383. package/dist/commands/finding-correlation-map.js +101 -0
  384. package/dist/commands/finding-correlation.d.ts +4 -0
  385. package/dist/commands/finding-correlation.js +103 -0
  386. package/dist/commands/finding-cross-file-link.d.ts +1 -0
  387. package/dist/commands/finding-cross-file-link.js +101 -0
  388. package/dist/commands/finding-cross-ref.d.ts +4 -0
  389. package/dist/commands/finding-cross-ref.js +98 -0
  390. package/dist/commands/finding-cve-lookup.d.ts +4 -0
  391. package/dist/commands/finding-cve-lookup.js +97 -0
  392. package/dist/commands/finding-cwe-lookup.d.ts +4 -0
  393. package/dist/commands/finding-cwe-lookup.js +148 -0
  394. package/dist/commands/finding-cwe-map.d.ts +4 -0
  395. package/dist/commands/finding-cwe-map.js +133 -0
  396. package/dist/commands/finding-dedup-cross-file.d.ts +4 -0
  397. package/dist/commands/finding-dedup-cross-file.js +95 -0
  398. package/dist/commands/finding-dedup-cross.d.ts +4 -0
  399. package/dist/commands/finding-dedup-cross.js +90 -0
  400. package/dist/commands/finding-dedup-merge.d.ts +1 -0
  401. package/dist/commands/finding-dedup-merge.js +107 -0
  402. package/dist/commands/finding-dedup-report.d.ts +4 -0
  403. package/dist/commands/finding-dedup-report.js +101 -0
  404. package/dist/commands/finding-dedup-smart.d.ts +1 -0
  405. package/dist/commands/finding-dedup-smart.js +109 -0
  406. package/dist/commands/finding-deduplicate.d.ts +4 -0
  407. package/dist/commands/finding-deduplicate.js +141 -0
  408. package/dist/commands/finding-dependency-check.d.ts +4 -0
  409. package/dist/commands/finding-dependency-check.js +119 -0
  410. package/dist/commands/finding-dependency-impact.d.ts +1 -0
  411. package/dist/commands/finding-dependency-impact.js +97 -0
  412. package/dist/commands/finding-dependency-link.d.ts +4 -0
  413. package/dist/commands/finding-dependency-link.js +73 -0
  414. package/dist/commands/finding-dependency-risk.d.ts +4 -0
  415. package/dist/commands/finding-dependency-risk.js +117 -0
  416. package/dist/commands/finding-dependency-tree.d.ts +4 -0
  417. package/dist/commands/finding-dependency-tree.js +116 -0
  418. package/dist/commands/finding-diff-highlight.d.ts +4 -0
  419. package/dist/commands/finding-diff-highlight.js +107 -0
  420. package/dist/commands/finding-dismiss-workflow.d.ts +4 -0
  421. package/dist/commands/finding-dismiss-workflow.js +119 -0
  422. package/dist/commands/finding-duplicate-detect.d.ts +4 -0
  423. package/dist/commands/finding-duplicate-detect.js +113 -0
  424. package/dist/commands/finding-duplicate-rule.d.ts +4 -0
  425. package/dist/commands/finding-duplicate-rule.js +103 -0
  426. package/dist/commands/finding-effort-rank.d.ts +1 -0
  427. package/dist/commands/finding-effort-rank.js +93 -0
  428. package/dist/commands/finding-evidence-chain.d.ts +4 -0
  429. package/dist/commands/finding-evidence-chain.js +147 -0
  430. package/dist/commands/finding-evidence-collect.d.ts +4 -0
  431. package/dist/commands/finding-evidence-collect.js +114 -0
  432. package/dist/commands/finding-explain.d.ts +4 -0
  433. package/dist/commands/finding-explain.js +93 -0
  434. package/dist/commands/finding-export-csv.d.ts +4 -0
  435. package/dist/commands/finding-export-csv.js +78 -0
  436. package/dist/commands/finding-false-neg-check.d.ts +8 -0
  437. package/dist/commands/finding-false-neg-check.js +139 -0
  438. package/dist/commands/finding-false-positive-learn.d.ts +4 -0
  439. package/dist/commands/finding-false-positive-learn.js +85 -0
  440. package/dist/commands/finding-false-positive-log.d.ts +4 -0
  441. package/dist/commands/finding-false-positive-log.js +150 -0
  442. package/dist/commands/finding-false-positive.d.ts +4 -0
  443. package/dist/commands/finding-false-positive.js +134 -0
  444. package/dist/commands/finding-filter-view.d.ts +4 -0
  445. package/dist/commands/finding-filter-view.js +107 -0
  446. package/dist/commands/finding-fix-chain.d.ts +1 -0
  447. package/dist/commands/finding-fix-chain.js +78 -0
  448. package/dist/commands/finding-fix-estimate.d.ts +1 -0
  449. package/dist/commands/finding-fix-estimate.js +95 -0
  450. package/dist/commands/finding-fix-playbook.d.ts +1 -0
  451. package/dist/commands/finding-fix-playbook.js +110 -0
  452. package/dist/commands/finding-fix-priority.d.ts +4 -0
  453. package/dist/commands/finding-fix-priority.js +98 -0
  454. package/dist/commands/finding-fix-rate.d.ts +4 -0
  455. package/dist/commands/finding-fix-rate.js +141 -0
  456. package/dist/commands/finding-fix-suggest.d.ts +4 -0
  457. package/dist/commands/finding-fix-suggest.js +88 -0
  458. package/dist/commands/finding-fix-validation.d.ts +4 -0
  459. package/dist/commands/finding-fix-validation.js +115 -0
  460. package/dist/commands/finding-fix-verify.d.ts +4 -0
  461. package/dist/commands/finding-fix-verify.js +198 -0
  462. package/dist/commands/finding-group-by.d.ts +4 -0
  463. package/dist/commands/finding-group-by.js +86 -0
  464. package/dist/commands/finding-group.d.ts +15 -0
  465. package/dist/commands/finding-group.js +164 -0
  466. package/dist/commands/finding-groupby-file.d.ts +4 -0
  467. package/dist/commands/finding-groupby-file.js +94 -0
  468. package/dist/commands/finding-hotfix-suggest.d.ts +7 -0
  469. package/dist/commands/finding-hotfix-suggest.js +170 -0
  470. package/dist/commands/finding-hotspot-detect.d.ts +1 -0
  471. package/dist/commands/finding-hotspot-detect.js +120 -0
  472. package/dist/commands/finding-hotspot-map.d.ts +4 -0
  473. package/dist/commands/finding-hotspot-map.js +106 -0
  474. package/dist/commands/finding-hotspot.d.ts +4 -0
  475. package/dist/commands/finding-hotspot.js +115 -0
  476. package/dist/commands/finding-impact-radius.d.ts +1 -0
  477. package/dist/commands/finding-impact-radius.js +94 -0
  478. package/dist/commands/finding-impact-rank.d.ts +4 -0
  479. package/dist/commands/finding-impact-rank.js +85 -0
  480. package/dist/commands/finding-impact-score.d.ts +4 -0
  481. package/dist/commands/finding-impact-score.js +123 -0
  482. package/dist/commands/finding-impact.d.ts +4 -0
  483. package/dist/commands/finding-impact.js +135 -0
  484. package/dist/commands/finding-line-blame.d.ts +7 -0
  485. package/dist/commands/finding-line-blame.js +129 -0
  486. package/dist/commands/finding-link-graph.d.ts +4 -0
  487. package/dist/commands/finding-link-graph.js +144 -0
  488. package/dist/commands/finding-link.d.ts +4 -0
  489. package/dist/commands/finding-link.js +128 -0
  490. package/dist/commands/finding-merge-results.d.ts +4 -0
  491. package/dist/commands/finding-merge-results.js +110 -0
  492. package/dist/commands/finding-merge-strategy.d.ts +1 -0
  493. package/dist/commands/finding-merge-strategy.js +84 -0
  494. package/dist/commands/finding-metadata-enrich.d.ts +4 -0
  495. package/dist/commands/finding-metadata-enrich.js +92 -0
  496. package/dist/commands/finding-noise-filter.d.ts +7 -0
  497. package/dist/commands/finding-noise-filter.js +140 -0
  498. package/dist/commands/finding-noise-reduce.d.ts +1 -0
  499. package/dist/commands/finding-noise-reduce.js +81 -0
  500. package/dist/commands/finding-noise-score.d.ts +1 -0
  501. package/dist/commands/finding-noise-score.js +93 -0
  502. package/dist/commands/finding-owner-assign.d.ts +4 -0
  503. package/dist/commands/finding-owner-assign.js +133 -0
  504. package/dist/commands/finding-owner-notify.d.ts +1 -0
  505. package/dist/commands/finding-owner-notify.js +121 -0
  506. package/dist/commands/finding-ownership-assign.d.ts +4 -0
  507. package/dist/commands/finding-ownership-assign.js +101 -0
  508. package/dist/commands/finding-ownership-map.d.ts +4 -0
  509. package/dist/commands/finding-ownership-map.js +118 -0
  510. package/dist/commands/finding-patch-chain.d.ts +1 -0
  511. package/dist/commands/finding-patch-chain.js +90 -0
  512. package/dist/commands/finding-patch-preview.d.ts +4 -0
  513. package/dist/commands/finding-patch-preview.js +103 -0
  514. package/dist/commands/finding-pattern-detect.d.ts +4 -0
  515. package/dist/commands/finding-pattern-detect.js +127 -0
  516. package/dist/commands/finding-pattern-library.d.ts +4 -0
  517. package/dist/commands/finding-pattern-library.js +145 -0
  518. package/dist/commands/finding-pattern-match.d.ts +4 -0
  519. package/dist/commands/finding-pattern-match.js +165 -0
  520. package/dist/commands/finding-prioritize.d.ts +4 -0
  521. package/dist/commands/finding-prioritize.js +119 -0
  522. package/dist/commands/finding-priority-matrix.d.ts +4 -0
  523. package/dist/commands/finding-priority-matrix.js +102 -0
  524. package/dist/commands/finding-priority-queue.d.ts +4 -0
  525. package/dist/commands/finding-priority-queue.js +131 -0
  526. package/dist/commands/finding-priority-rank.d.ts +1 -0
  527. package/dist/commands/finding-priority-rank.js +82 -0
  528. package/dist/commands/finding-quality-gate.d.ts +4 -0
  529. package/dist/commands/finding-quality-gate.js +107 -0
  530. package/dist/commands/finding-rank.d.ts +4 -0
  531. package/dist/commands/finding-rank.js +138 -0
  532. package/dist/commands/finding-reachability-check.d.ts +4 -0
  533. package/dist/commands/finding-reachability-check.js +102 -0
  534. package/dist/commands/finding-reachability.d.ts +4 -0
  535. package/dist/commands/finding-reachability.js +131 -0
  536. package/dist/commands/finding-recurrence-check.d.ts +1 -0
  537. package/dist/commands/finding-recurrence-check.js +103 -0
  538. package/dist/commands/finding-recurrence-detect.d.ts +4 -0
  539. package/dist/commands/finding-recurrence-detect.js +77 -0
  540. package/dist/commands/finding-recurrence.d.ts +4 -0
  541. package/dist/commands/finding-recurrence.js +135 -0
  542. package/dist/commands/finding-regression-check.d.ts +4 -0
  543. package/dist/commands/finding-regression-check.js +112 -0
  544. package/dist/commands/finding-regression-detect.d.ts +1 -0
  545. package/dist/commands/finding-regression-detect.js +86 -0
  546. package/dist/commands/finding-related-rules.d.ts +4 -0
  547. package/dist/commands/finding-related-rules.js +151 -0
  548. package/dist/commands/finding-remediation-cost.d.ts +1 -0
  549. package/dist/commands/finding-remediation-cost.js +79 -0
  550. package/dist/commands/finding-remediation-plan.d.ts +4 -0
  551. package/dist/commands/finding-remediation-plan.js +107 -0
  552. package/dist/commands/finding-reopen-detect.d.ts +1 -0
  553. package/dist/commands/finding-reopen-detect.js +77 -0
  554. package/dist/commands/finding-repeat-detect.d.ts +1 -0
  555. package/dist/commands/finding-repeat-detect.js +92 -0
  556. package/dist/commands/finding-resolution-track.d.ts +4 -0
  557. package/dist/commands/finding-resolution-track.js +150 -0
  558. package/dist/commands/finding-resolution-tracker.d.ts +4 -0
  559. package/dist/commands/finding-resolution-tracker.js +163 -0
  560. package/dist/commands/finding-resolution-workflow.d.ts +1 -0
  561. package/dist/commands/finding-resolution-workflow.js +91 -0
  562. package/dist/commands/finding-resolution.d.ts +4 -0
  563. package/dist/commands/finding-resolution.js +142 -0
  564. package/dist/commands/finding-risk-label.d.ts +1 -0
  565. package/dist/commands/finding-risk-label.js +72 -0
  566. package/dist/commands/finding-risk-matrix.d.ts +4 -0
  567. package/dist/commands/finding-risk-matrix.js +126 -0
  568. package/dist/commands/finding-risk-score.d.ts +4 -0
  569. package/dist/commands/finding-risk-score.js +95 -0
  570. package/dist/commands/finding-root-cause.d.ts +4 -0
  571. package/dist/commands/finding-root-cause.js +184 -0
  572. package/dist/commands/finding-rule-explain.d.ts +4 -0
  573. package/dist/commands/finding-rule-explain.js +140 -0
  574. package/dist/commands/finding-scope-filter.d.ts +1 -0
  575. package/dist/commands/finding-scope-filter.js +77 -0
  576. package/dist/commands/finding-scope-impact.d.ts +1 -0
  577. package/dist/commands/finding-scope-impact.js +83 -0
  578. package/dist/commands/finding-search-index.d.ts +4 -0
  579. package/dist/commands/finding-search-index.js +99 -0
  580. package/dist/commands/finding-security-hotspot.d.ts +4 -0
  581. package/dist/commands/finding-security-hotspot.js +175 -0
  582. package/dist/commands/finding-severity-dist.d.ts +4 -0
  583. package/dist/commands/finding-severity-dist.js +105 -0
  584. package/dist/commands/finding-severity-drift.d.ts +4 -0
  585. package/dist/commands/finding-severity-drift.js +92 -0
  586. package/dist/commands/finding-severity-heatmap.d.ts +4 -0
  587. package/dist/commands/finding-severity-heatmap.js +108 -0
  588. package/dist/commands/finding-severity-histogram.d.ts +4 -0
  589. package/dist/commands/finding-severity-histogram.js +66 -0
  590. package/dist/commands/finding-severity-override.d.ts +4 -0
  591. package/dist/commands/finding-severity-override.js +131 -0
  592. package/dist/commands/finding-severity-rebalance.d.ts +1 -0
  593. package/dist/commands/finding-severity-rebalance.js +108 -0
  594. package/dist/commands/finding-severity-trend.d.ts +4 -0
  595. package/dist/commands/finding-severity-trend.js +127 -0
  596. package/dist/commands/finding-similar-match.d.ts +1 -0
  597. package/dist/commands/finding-similar-match.js +112 -0
  598. package/dist/commands/finding-snippet.d.ts +4 -0
  599. package/dist/commands/finding-snippet.js +102 -0
  600. package/dist/commands/finding-summary-digest.d.ts +7 -0
  601. package/dist/commands/finding-summary-digest.js +145 -0
  602. package/dist/commands/finding-suppress-pattern.d.ts +4 -0
  603. package/dist/commands/finding-suppress-pattern.js +148 -0
  604. package/dist/commands/finding-suppress.d.ts +4 -0
  605. package/dist/commands/finding-suppress.js +164 -0
  606. package/dist/commands/finding-suppression-audit.d.ts +4 -0
  607. package/dist/commands/finding-suppression-audit.js +137 -0
  608. package/dist/commands/finding-suppression-list.d.ts +4 -0
  609. package/dist/commands/finding-suppression-list.js +119 -0
  610. package/dist/commands/finding-suppression-log.d.ts +4 -0
  611. package/dist/commands/finding-suppression-log.js +174 -0
  612. package/dist/commands/finding-time-to-fix.d.ts +1 -0
  613. package/dist/commands/finding-time-to-fix.js +98 -0
  614. package/dist/commands/finding-timeline-view.d.ts +4 -0
  615. package/dist/commands/finding-timeline-view.js +98 -0
  616. package/dist/commands/finding-timeline.d.ts +4 -0
  617. package/dist/commands/finding-timeline.js +143 -0
  618. package/dist/commands/finding-top-offender.d.ts +1 -0
  619. package/dist/commands/finding-top-offender.js +75 -0
  620. package/dist/commands/finding-trace.d.ts +4 -0
  621. package/dist/commands/finding-trace.js +118 -0
  622. package/dist/commands/finding-trend-alert.d.ts +1 -0
  623. package/dist/commands/finding-trend-alert.js +126 -0
  624. package/dist/commands/finding-trend-analysis.d.ts +4 -0
  625. package/dist/commands/finding-trend-analysis.js +95 -0
  626. package/dist/commands/finding-trend-forecast.d.ts +4 -0
  627. package/dist/commands/finding-trend-forecast.js +106 -0
  628. package/dist/commands/finding-trend-report.d.ts +4 -0
  629. package/dist/commands/finding-trend-report.js +107 -0
  630. package/dist/commands/finding-trend.d.ts +4 -0
  631. package/dist/commands/finding-trend.js +118 -0
  632. package/dist/commands/fix-pr.d.ts +22 -0
  633. package/dist/commands/fix-pr.js +286 -0
  634. package/dist/commands/fix-suggest.d.ts +4 -0
  635. package/dist/commands/fix-suggest.js +171 -0
  636. package/dist/commands/fix-verify.d.ts +4 -0
  637. package/dist/commands/fix-verify.js +123 -0
  638. package/dist/commands/fix.d.ts +117 -0
  639. package/dist/commands/fix.js +445 -0
  640. package/dist/commands/focus-area.d.ts +5 -0
  641. package/dist/commands/focus-area.js +192 -0
  642. package/dist/commands/generate.d.ts +7 -0
  643. package/dist/commands/generate.js +403 -0
  644. package/dist/commands/governance.d.ts +31 -0
  645. package/dist/commands/governance.js +202 -0
  646. package/dist/commands/group-findings.d.ts +22 -0
  647. package/dist/commands/group-findings.js +154 -0
  648. package/dist/commands/guided-tour.d.ts +8 -0
  649. package/dist/commands/guided-tour.js +287 -0
  650. package/dist/commands/habit-tracker.d.ts +7 -0
  651. package/dist/commands/habit-tracker.js +194 -0
  652. package/dist/commands/hallucination-detect.d.ts +4 -0
  653. package/dist/commands/hallucination-detect.js +350 -0
  654. package/dist/commands/hallucination-score.d.ts +8 -0
  655. package/dist/commands/hallucination-score.js +316 -0
  656. package/dist/commands/help.d.ts +7 -0
  657. package/dist/commands/help.js +302 -0
  658. package/dist/commands/hook-install.d.ts +21 -0
  659. package/dist/commands/hook-install.js +142 -0
  660. package/dist/commands/hook.d.ts +8 -0
  661. package/dist/commands/hook.js +145 -0
  662. package/dist/commands/iac-lint.d.ts +7 -0
  663. package/dist/commands/iac-lint.js +312 -0
  664. package/dist/commands/idempotency-audit.d.ts +4 -0
  665. package/dist/commands/idempotency-audit.js +222 -0
  666. package/dist/commands/ignore-list.d.ts +18 -0
  667. package/dist/commands/ignore-list.js +152 -0
  668. package/dist/commands/impact-scan.d.ts +8 -0
  669. package/dist/commands/impact-scan.js +281 -0
  670. package/dist/commands/incident-response.d.ts +7 -0
  671. package/dist/commands/incident-response.js +254 -0
  672. package/dist/commands/incremental-review.d.ts +4 -0
  673. package/dist/commands/incremental-review.js +236 -0
  674. package/dist/commands/init.d.ts +10 -0
  675. package/dist/commands/init.js +265 -0
  676. package/dist/commands/input-guard.d.ts +4 -0
  677. package/dist/commands/input-guard.js +255 -0
  678. package/dist/commands/interactive-fix.d.ts +22 -0
  679. package/dist/commands/interactive-fix.js +139 -0
  680. package/dist/commands/judge-author.d.ts +7 -0
  681. package/dist/commands/judge-author.js +260 -0
  682. package/dist/commands/judge-config.d.ts +4 -0
  683. package/dist/commands/judge-config.js +151 -0
  684. package/dist/commands/judge-learn.d.ts +8 -0
  685. package/dist/commands/judge-learn.js +217 -0
  686. package/dist/commands/judge-reputation.d.ts +28 -0
  687. package/dist/commands/judge-reputation.js +198 -0
  688. package/dist/commands/kb.d.ts +40 -0
  689. package/dist/commands/kb.js +228 -0
  690. package/dist/commands/language-packs.d.ts +42 -0
  691. package/dist/commands/language-packs.js +150 -0
  692. package/dist/commands/learn.d.ts +26 -0
  693. package/dist/commands/learn.js +288 -0
  694. package/dist/commands/learning-path.d.ts +8 -0
  695. package/dist/commands/learning-path.js +325 -0
  696. package/dist/commands/license-scan.d.ts +8 -0
  697. package/dist/commands/license-scan.js +183 -0
  698. package/dist/commands/llm-benchmark-optimizer.d.ts +78 -0
  699. package/dist/commands/llm-benchmark-optimizer.js +241 -0
  700. package/dist/commands/llm-benchmark.d.ts +156 -0
  701. package/dist/commands/llm-benchmark.js +670 -0
  702. package/dist/commands/log-quality.d.ts +5 -0
  703. package/dist/commands/log-quality.js +211 -0
  704. package/dist/commands/logic-lint.d.ts +4 -0
  705. package/dist/commands/logic-lint.js +255 -0
  706. package/dist/commands/lsp.d.ts +23 -0
  707. package/dist/commands/lsp.js +285 -0
  708. package/dist/commands/merge-verdict.d.ts +4 -0
  709. package/dist/commands/merge-verdict.js +287 -0
  710. package/dist/commands/metrics-dashboard.d.ts +21 -0
  711. package/dist/commands/metrics-dashboard.js +334 -0
  712. package/dist/commands/metrics.d.ts +57 -0
  713. package/dist/commands/metrics.js +241 -0
  714. package/dist/commands/migration-safety.d.ts +5 -0
  715. package/dist/commands/migration-safety.js +256 -0
  716. package/dist/commands/model-report.d.ts +8 -0
  717. package/dist/commands/model-report.js +194 -0
  718. package/dist/commands/model-risk.d.ts +27 -0
  719. package/dist/commands/model-risk.js +220 -0
  720. package/dist/commands/monorepo.d.ts +37 -0
  721. package/dist/commands/monorepo.js +232 -0
  722. package/dist/commands/multi-lang-review.d.ts +4 -0
  723. package/dist/commands/multi-lang-review.js +230 -0
  724. package/dist/commands/noise-advisor.d.ts +29 -0
  725. package/dist/commands/noise-advisor.js +170 -0
  726. package/dist/commands/notify.d.ts +78 -0
  727. package/dist/commands/notify.js +324 -0
  728. package/dist/commands/null-safety-audit.d.ts +5 -0
  729. package/dist/commands/null-safety-audit.js +221 -0
  730. package/dist/commands/observability-gap.d.ts +5 -0
  731. package/dist/commands/observability-gap.js +211 -0
  732. package/dist/commands/onboard.d.ts +12 -0
  733. package/dist/commands/onboard.js +178 -0
  734. package/dist/commands/org-metrics.d.ts +23 -0
  735. package/dist/commands/org-metrics.js +237 -0
  736. package/dist/commands/org-policy.d.ts +7 -0
  737. package/dist/commands/org-policy.js +207 -0
  738. package/dist/commands/over-abstraction.d.ts +4 -0
  739. package/dist/commands/over-abstraction.js +307 -0
  740. package/dist/commands/override.d.ts +61 -0
  741. package/dist/commands/override.js +268 -0
  742. package/dist/commands/ownership-map.d.ts +5 -0
  743. package/dist/commands/ownership-map.js +217 -0
  744. package/dist/commands/parity.d.ts +30 -0
  745. package/dist/commands/parity.js +212 -0
  746. package/dist/commands/pattern-registry.d.ts +22 -0
  747. package/dist/commands/pattern-registry.js +226 -0
  748. package/dist/commands/perf-compare.d.ts +8 -0
  749. package/dist/commands/perf-compare.js +245 -0
  750. package/dist/commands/perf-hotspot.d.ts +7 -0
  751. package/dist/commands/perf-hotspot.js +273 -0
  752. package/dist/commands/phantom-import.d.ts +4 -0
  753. package/dist/commands/phantom-import.js +260 -0
  754. package/dist/commands/pii-scan.d.ts +7 -0
  755. package/dist/commands/pii-scan.js +299 -0
  756. package/dist/commands/plugin-search.d.ts +39 -0
  757. package/dist/commands/plugin-search.js +327 -0
  758. package/dist/commands/plugins.d.ts +12 -0
  759. package/dist/commands/plugins.js +104 -0
  760. package/dist/commands/policy-audit.d.ts +52 -0
  761. package/dist/commands/policy-audit.js +160 -0
  762. package/dist/commands/pr-quality-gate.d.ts +28 -0
  763. package/dist/commands/pr-quality-gate.js +207 -0
  764. package/dist/commands/pr-summary.d.ts +25 -0
  765. package/dist/commands/pr-summary.js +187 -0
  766. package/dist/commands/predict.d.ts +7 -0
  767. package/dist/commands/predict.js +218 -0
  768. package/dist/commands/privilege-path.d.ts +4 -0
  769. package/dist/commands/privilege-path.js +233 -0
  770. package/dist/commands/profile.d.ts +37 -0
  771. package/dist/commands/profile.js +101 -0
  772. package/dist/commands/prompt-replay.d.ts +7 -0
  773. package/dist/commands/prompt-replay.js +176 -0
  774. package/dist/commands/quality-gate.d.ts +69 -0
  775. package/dist/commands/quality-gate.js +252 -0
  776. package/dist/commands/query.d.ts +19 -0
  777. package/dist/commands/query.js +229 -0
  778. package/dist/commands/quick-check.d.ts +4 -0
  779. package/dist/commands/quick-check.js +173 -0
  780. package/dist/commands/recommend.d.ts +20 -0
  781. package/dist/commands/recommend.js +282 -0
  782. package/dist/commands/refactor-safety.d.ts +8 -0
  783. package/dist/commands/refactor-safety.js +273 -0
  784. package/dist/commands/reg-watch.d.ts +20 -0
  785. package/dist/commands/reg-watch.js +219 -0
  786. package/dist/commands/regression-alert.d.ts +31 -0
  787. package/dist/commands/regression-alert.js +215 -0
  788. package/dist/commands/remediation-lib.d.ts +8 -0
  789. package/dist/commands/remediation-lib.js +265 -0
  790. package/dist/commands/remediation.d.ts +20 -0
  791. package/dist/commands/remediation.js +256 -0
  792. package/dist/commands/report-template.d.ts +16 -0
  793. package/dist/commands/report-template.js +290 -0
  794. package/dist/commands/report.d.ts +12 -0
  795. package/dist/commands/report.js +139 -0
  796. package/dist/commands/resource-cleanup.d.ts +6 -0
  797. package/dist/commands/resource-cleanup.js +235 -0
  798. package/dist/commands/retro.d.ts +22 -0
  799. package/dist/commands/retro.js +211 -0
  800. package/dist/commands/retry-pattern-audit.d.ts +5 -0
  801. package/dist/commands/retry-pattern-audit.js +215 -0
  802. package/dist/commands/review-ab-test.d.ts +4 -0
  803. package/dist/commands/review-ab-test.js +224 -0
  804. package/dist/commands/review-access-log.d.ts +4 -0
  805. package/dist/commands/review-access-log.js +65 -0
  806. package/dist/commands/review-action-item-gen.d.ts +1 -0
  807. package/dist/commands/review-action-item-gen.js +72 -0
  808. package/dist/commands/review-adoption-metrics.d.ts +4 -0
  809. package/dist/commands/review-adoption-metrics.js +95 -0
  810. package/dist/commands/review-adoption-score.d.ts +1 -0
  811. package/dist/commands/review-adoption-score.js +181 -0
  812. package/dist/commands/review-ai-feedback-loop.d.ts +1 -0
  813. package/dist/commands/review-ai-feedback-loop.js +116 -0
  814. package/dist/commands/review-annotate.d.ts +4 -0
  815. package/dist/commands/review-annotate.js +122 -0
  816. package/dist/commands/review-annotation-export.d.ts +4 -0
  817. package/dist/commands/review-annotation-export.js +105 -0
  818. package/dist/commands/review-annotation.d.ts +4 -0
  819. package/dist/commands/review-annotation.js +133 -0
  820. package/dist/commands/review-api-export.d.ts +4 -0
  821. package/dist/commands/review-api-export.js +98 -0
  822. package/dist/commands/review-approval-criteria.d.ts +1 -0
  823. package/dist/commands/review-approval-criteria.js +99 -0
  824. package/dist/commands/review-approval-gate.d.ts +7 -0
  825. package/dist/commands/review-approval-gate.js +190 -0
  826. package/dist/commands/review-approval.d.ts +4 -0
  827. package/dist/commands/review-approval.js +133 -0
  828. package/dist/commands/review-archive-search.d.ts +4 -0
  829. package/dist/commands/review-archive-search.js +70 -0
  830. package/dist/commands/review-archive.d.ts +4 -0
  831. package/dist/commands/review-archive.js +135 -0
  832. package/dist/commands/review-audit-export.d.ts +4 -0
  833. package/dist/commands/review-audit-export.js +93 -0
  834. package/dist/commands/review-audit-log.d.ts +4 -0
  835. package/dist/commands/review-audit-log.js +140 -0
  836. package/dist/commands/review-audit-trail.d.ts +4 -0
  837. package/dist/commands/review-audit-trail.js +96 -0
  838. package/dist/commands/review-auto-merge.d.ts +4 -0
  839. package/dist/commands/review-auto-merge.js +175 -0
  840. package/dist/commands/review-badge.d.ts +4 -0
  841. package/dist/commands/review-badge.js +152 -0
  842. package/dist/commands/review-batch-files.d.ts +4 -0
  843. package/dist/commands/review-batch-files.js +82 -0
  844. package/dist/commands/review-batch-mode.d.ts +4 -0
  845. package/dist/commands/review-batch-mode.js +97 -0
  846. package/dist/commands/review-batch-run.d.ts +4 -0
  847. package/dist/commands/review-batch-run.js +149 -0
  848. package/dist/commands/review-benchmark-self.d.ts +4 -0
  849. package/dist/commands/review-benchmark-self.js +140 -0
  850. package/dist/commands/review-blame-map.d.ts +4 -0
  851. package/dist/commands/review-blame-map.js +100 -0
  852. package/dist/commands/review-branch-compare.d.ts +4 -0
  853. package/dist/commands/review-branch-compare.js +108 -0
  854. package/dist/commands/review-branch-policy.d.ts +4 -0
  855. package/dist/commands/review-branch-policy.js +102 -0
  856. package/dist/commands/review-bulk-action.d.ts +4 -0
  857. package/dist/commands/review-bulk-action.js +109 -0
  858. package/dist/commands/review-bulk-apply.d.ts +4 -0
  859. package/dist/commands/review-bulk-apply.js +102 -0
  860. package/dist/commands/review-cache-clear.d.ts +4 -0
  861. package/dist/commands/review-cache-clear.js +160 -0
  862. package/dist/commands/review-cache-warm.d.ts +4 -0
  863. package/dist/commands/review-cache-warm.js +70 -0
  864. package/dist/commands/review-cache.d.ts +22 -0
  865. package/dist/commands/review-cache.js +134 -0
  866. package/dist/commands/review-changelog-entry.d.ts +7 -0
  867. package/dist/commands/review-changelog-entry.js +109 -0
  868. package/dist/commands/review-changelog-gen.d.ts +4 -0
  869. package/dist/commands/review-changelog-gen.js +117 -0
  870. package/dist/commands/review-changelog-impact.d.ts +1 -0
  871. package/dist/commands/review-changelog-impact.js +89 -0
  872. package/dist/commands/review-checklist.d.ts +4 -0
  873. package/dist/commands/review-checklist.js +144 -0
  874. package/dist/commands/review-checkpoint.d.ts +4 -0
  875. package/dist/commands/review-checkpoint.js +163 -0
  876. package/dist/commands/review-ci-gate.d.ts +4 -0
  877. package/dist/commands/review-ci-gate.js +114 -0
  878. package/dist/commands/review-ci-insight.d.ts +1 -0
  879. package/dist/commands/review-ci-insight.js +100 -0
  880. package/dist/commands/review-ci-integration.d.ts +4 -0
  881. package/dist/commands/review-ci-integration.js +125 -0
  882. package/dist/commands/review-ci-status.d.ts +4 -0
  883. package/dist/commands/review-ci-status.js +200 -0
  884. package/dist/commands/review-cicd-integrate.d.ts +4 -0
  885. package/dist/commands/review-cicd-integrate.js +122 -0
  886. package/dist/commands/review-code-health-score.d.ts +1 -0
  887. package/dist/commands/review-code-health-score.js +100 -0
  888. package/dist/commands/review-code-owner.d.ts +7 -0
  889. package/dist/commands/review-code-owner.js +164 -0
  890. package/dist/commands/review-code-ownership.d.ts +1 -0
  891. package/dist/commands/review-code-ownership.js +88 -0
  892. package/dist/commands/review-comment.d.ts +4 -0
  893. package/dist/commands/review-comment.js +165 -0
  894. package/dist/commands/review-commit-hook.d.ts +7 -0
  895. package/dist/commands/review-commit-hook.js +134 -0
  896. package/dist/commands/review-commit-quality.d.ts +1 -0
  897. package/dist/commands/review-commit-quality.js +94 -0
  898. package/dist/commands/review-comparative.d.ts +4 -0
  899. package/dist/commands/review-comparative.js +149 -0
  900. package/dist/commands/review-compare-version.d.ts +4 -0
  901. package/dist/commands/review-compare-version.js +108 -0
  902. package/dist/commands/review-compare.d.ts +4 -0
  903. package/dist/commands/review-compare.js +200 -0
  904. package/dist/commands/review-compliance-check.d.ts +4 -0
  905. package/dist/commands/review-compliance-check.js +202 -0
  906. package/dist/commands/review-compliance-gate.d.ts +4 -0
  907. package/dist/commands/review-compliance-gate.js +151 -0
  908. package/dist/commands/review-compliance-map.d.ts +4 -0
  909. package/dist/commands/review-compliance-map.js +110 -0
  910. package/dist/commands/review-compliance-report.d.ts +4 -0
  911. package/dist/commands/review-compliance-report.js +127 -0
  912. package/dist/commands/review-confidence-explain.d.ts +1 -0
  913. package/dist/commands/review-confidence-explain.js +99 -0
  914. package/dist/commands/review-config-diff.d.ts +4 -0
  915. package/dist/commands/review-config-diff.js +108 -0
  916. package/dist/commands/review-config-export.d.ts +4 -0
  917. package/dist/commands/review-config-export.js +124 -0
  918. package/dist/commands/review-config-health.d.ts +1 -0
  919. package/dist/commands/review-config-health.js +172 -0
  920. package/dist/commands/review-config-migrate.d.ts +4 -0
  921. package/dist/commands/review-config-migrate.js +123 -0
  922. package/dist/commands/review-config-template.d.ts +4 -0
  923. package/dist/commands/review-config-template.js +112 -0
  924. package/dist/commands/review-config-validate.d.ts +4 -0
  925. package/dist/commands/review-config-validate.js +110 -0
  926. package/dist/commands/review-contract.d.ts +4 -0
  927. package/dist/commands/review-contract.js +199 -0
  928. package/dist/commands/review-coverage-gap.d.ts +4 -0
  929. package/dist/commands/review-coverage-gap.js +120 -0
  930. package/dist/commands/review-coverage-map.d.ts +4 -0
  931. package/dist/commands/review-coverage-map.js +194 -0
  932. package/dist/commands/review-custom-judge-config.d.ts +4 -0
  933. package/dist/commands/review-custom-judge-config.js +103 -0
  934. package/dist/commands/review-custom-judge.d.ts +4 -0
  935. package/dist/commands/review-custom-judge.js +182 -0
  936. package/dist/commands/review-custom-prompt.d.ts +4 -0
  937. package/dist/commands/review-custom-prompt.js +170 -0
  938. package/dist/commands/review-custom-rule.d.ts +4 -0
  939. package/dist/commands/review-custom-rule.js +169 -0
  940. package/dist/commands/review-dashboard-data.d.ts +4 -0
  941. package/dist/commands/review-dashboard-data.js +142 -0
  942. package/dist/commands/review-dashboard.d.ts +4 -0
  943. package/dist/commands/review-dashboard.js +140 -0
  944. package/dist/commands/review-data-retention.d.ts +4 -0
  945. package/dist/commands/review-data-retention.js +119 -0
  946. package/dist/commands/review-dependency-graph.d.ts +4 -0
  947. package/dist/commands/review-dependency-graph.js +94 -0
  948. package/dist/commands/review-dependency-review.d.ts +1 -0
  949. package/dist/commands/review-dependency-review.js +104 -0
  950. package/dist/commands/review-deployment-gate.d.ts +4 -0
  951. package/dist/commands/review-deployment-gate.js +94 -0
  952. package/dist/commands/review-depth.d.ts +4 -0
  953. package/dist/commands/review-depth.js +142 -0
  954. package/dist/commands/review-diff-annotate.d.ts +4 -0
  955. package/dist/commands/review-diff-annotate.js +104 -0
  956. package/dist/commands/review-diff-context.d.ts +4 -0
  957. package/dist/commands/review-diff-context.js +158 -0
  958. package/dist/commands/review-diff-highlight.d.ts +4 -0
  959. package/dist/commands/review-diff-highlight.js +179 -0
  960. package/dist/commands/review-diff-stats.d.ts +4 -0
  961. package/dist/commands/review-diff-stats.js +90 -0
  962. package/dist/commands/review-diff-summary.d.ts +4 -0
  963. package/dist/commands/review-diff-summary.js +154 -0
  964. package/dist/commands/review-digest-gen.d.ts +1 -0
  965. package/dist/commands/review-digest-gen.js +100 -0
  966. package/dist/commands/review-digest.d.ts +4 -0
  967. package/dist/commands/review-digest.js +265 -0
  968. package/dist/commands/review-dry-run.d.ts +4 -0
  969. package/dist/commands/review-dry-run.js +120 -0
  970. package/dist/commands/review-engagement-score.d.ts +1 -0
  971. package/dist/commands/review-engagement-score.js +111 -0
  972. package/dist/commands/review-env-check.d.ts +4 -0
  973. package/dist/commands/review-env-check.js +115 -0
  974. package/dist/commands/review-environment-config.d.ts +4 -0
  975. package/dist/commands/review-environment-config.js +102 -0
  976. package/dist/commands/review-escalation-path.d.ts +1 -0
  977. package/dist/commands/review-escalation-path.js +86 -0
  978. package/dist/commands/review-exclude-vendor.d.ts +4 -0
  979. package/dist/commands/review-exclude-vendor.js +158 -0
  980. package/dist/commands/review-explain.d.ts +5 -0
  981. package/dist/commands/review-explain.js +194 -0
  982. package/dist/commands/review-export-pdf.d.ts +7 -0
  983. package/dist/commands/review-export-pdf.js +131 -0
  984. package/dist/commands/review-export.d.ts +4 -0
  985. package/dist/commands/review-export.js +179 -0
  986. package/dist/commands/review-feedback-loop.d.ts +4 -0
  987. package/dist/commands/review-feedback-loop.js +113 -0
  988. package/dist/commands/review-feedback-summary.d.ts +1 -0
  989. package/dist/commands/review-feedback-summary.js +130 -0
  990. package/dist/commands/review-feedback.d.ts +4 -0
  991. package/dist/commands/review-feedback.js +145 -0
  992. package/dist/commands/review-file-complexity.d.ts +4 -0
  993. package/dist/commands/review-file-complexity.js +137 -0
  994. package/dist/commands/review-file-filter.d.ts +4 -0
  995. package/dist/commands/review-file-filter.js +121 -0
  996. package/dist/commands/review-file-stats.d.ts +4 -0
  997. package/dist/commands/review-file-stats.js +130 -0
  998. package/dist/commands/review-filter.d.ts +4 -0
  999. package/dist/commands/review-filter.js +161 -0
  1000. package/dist/commands/review-finding-link.d.ts +7 -0
  1001. package/dist/commands/review-finding-link.js +115 -0
  1002. package/dist/commands/review-focus-area.d.ts +1 -0
  1003. package/dist/commands/review-focus-area.js +96 -0
  1004. package/dist/commands/review-focus.d.ts +4 -0
  1005. package/dist/commands/review-focus.js +196 -0
  1006. package/dist/commands/review-gate-config.d.ts +4 -0
  1007. package/dist/commands/review-gate-config.js +153 -0
  1008. package/dist/commands/review-gate.d.ts +4 -0
  1009. package/dist/commands/review-gate.js +212 -0
  1010. package/dist/commands/review-goal-track.d.ts +1 -0
  1011. package/dist/commands/review-goal-track.js +123 -0
  1012. package/dist/commands/review-guardrail.d.ts +4 -0
  1013. package/dist/commands/review-guardrail.js +155 -0
  1014. package/dist/commands/review-handoff.d.ts +4 -0
  1015. package/dist/commands/review-handoff.js +208 -0
  1016. package/dist/commands/review-health-check.d.ts +4 -0
  1017. package/dist/commands/review-health-check.js +148 -0
  1018. package/dist/commands/review-health-trend.d.ts +1 -0
  1019. package/dist/commands/review-health-trend.js +107 -0
  1020. package/dist/commands/review-history-compare.d.ts +4 -0
  1021. package/dist/commands/review-history-compare.js +93 -0
  1022. package/dist/commands/review-history-search.d.ts +4 -0
  1023. package/dist/commands/review-history-search.js +214 -0
  1024. package/dist/commands/review-ide-sync.d.ts +4 -0
  1025. package/dist/commands/review-ide-sync.js +91 -0
  1026. package/dist/commands/review-ignore-path.d.ts +4 -0
  1027. package/dist/commands/review-ignore-path.js +147 -0
  1028. package/dist/commands/review-ignore-pattern.d.ts +5 -0
  1029. package/dist/commands/review-ignore-pattern.js +138 -0
  1030. package/dist/commands/review-incident-link.d.ts +4 -0
  1031. package/dist/commands/review-incident-link.js +93 -0
  1032. package/dist/commands/review-incremental.d.ts +4 -0
  1033. package/dist/commands/review-incremental.js +128 -0
  1034. package/dist/commands/review-integration-health.d.ts +4 -0
  1035. package/dist/commands/review-integration-health.js +84 -0
  1036. package/dist/commands/review-integration-test.d.ts +4 -0
  1037. package/dist/commands/review-integration-test.js +145 -0
  1038. package/dist/commands/review-integration.d.ts +4 -0
  1039. package/dist/commands/review-integration.js +236 -0
  1040. package/dist/commands/review-interactive.d.ts +4 -0
  1041. package/dist/commands/review-interactive.js +85 -0
  1042. package/dist/commands/review-knowledge-capture.d.ts +1 -0
  1043. package/dist/commands/review-knowledge-capture.js +94 -0
  1044. package/dist/commands/review-language-profile.d.ts +4 -0
  1045. package/dist/commands/review-language-profile.js +72 -0
  1046. package/dist/commands/review-language-stats.d.ts +4 -0
  1047. package/dist/commands/review-language-stats.js +152 -0
  1048. package/dist/commands/review-lock-file.d.ts +4 -0
  1049. package/dist/commands/review-lock-file.js +153 -0
  1050. package/dist/commands/review-lock.d.ts +4 -0
  1051. package/dist/commands/review-lock.js +107 -0
  1052. package/dist/commands/review-log.d.ts +22 -0
  1053. package/dist/commands/review-log.js +164 -0
  1054. package/dist/commands/review-mentor-suggest.d.ts +1 -0
  1055. package/dist/commands/review-mentor-suggest.js +112 -0
  1056. package/dist/commands/review-merge-check.d.ts +4 -0
  1057. package/dist/commands/review-merge-check.js +101 -0
  1058. package/dist/commands/review-merge-config.d.ts +4 -0
  1059. package/dist/commands/review-merge-config.js +119 -0
  1060. package/dist/commands/review-merge-readiness.d.ts +1 -0
  1061. package/dist/commands/review-merge-readiness.js +90 -0
  1062. package/dist/commands/review-merge-request.d.ts +4 -0
  1063. package/dist/commands/review-merge-request.js +95 -0
  1064. package/dist/commands/review-merge.d.ts +4 -0
  1065. package/dist/commands/review-merge.js +145 -0
  1066. package/dist/commands/review-metric-export.d.ts +4 -0
  1067. package/dist/commands/review-metric-export.js +62 -0
  1068. package/dist/commands/review-milestone.d.ts +4 -0
  1069. package/dist/commands/review-milestone.js +136 -0
  1070. package/dist/commands/review-multi-repo-sync.d.ts +4 -0
  1071. package/dist/commands/review-multi-repo-sync.js +115 -0
  1072. package/dist/commands/review-multi-repo.d.ts +4 -0
  1073. package/dist/commands/review-multi-repo.js +145 -0
  1074. package/dist/commands/review-note.d.ts +4 -0
  1075. package/dist/commands/review-note.js +104 -0
  1076. package/dist/commands/review-notification-config.d.ts +4 -0
  1077. package/dist/commands/review-notification-config.js +122 -0
  1078. package/dist/commands/review-notification-digest.d.ts +4 -0
  1079. package/dist/commands/review-notification-digest.js +64 -0
  1080. package/dist/commands/review-notification.d.ts +4 -0
  1081. package/dist/commands/review-notification.js +126 -0
  1082. package/dist/commands/review-notify.d.ts +4 -0
  1083. package/dist/commands/review-notify.js +143 -0
  1084. package/dist/commands/review-offline.d.ts +4 -0
  1085. package/dist/commands/review-offline.js +125 -0
  1086. package/dist/commands/review-onboard-checklist.d.ts +4 -0
  1087. package/dist/commands/review-onboard-checklist.js +119 -0
  1088. package/dist/commands/review-onboard-wizard.d.ts +4 -0
  1089. package/dist/commands/review-onboard-wizard.js +92 -0
  1090. package/dist/commands/review-onboard.d.ts +4 -0
  1091. package/dist/commands/review-onboard.js +154 -0
  1092. package/dist/commands/review-onboarding-check.d.ts +1 -0
  1093. package/dist/commands/review-onboarding-check.js +93 -0
  1094. package/dist/commands/review-org-dashboard.d.ts +4 -0
  1095. package/dist/commands/review-org-dashboard.js +68 -0
  1096. package/dist/commands/review-output-filter.d.ts +4 -0
  1097. package/dist/commands/review-output-filter.js +112 -0
  1098. package/dist/commands/review-output-format.d.ts +4 -0
  1099. package/dist/commands/review-output-format.js +144 -0
  1100. package/dist/commands/review-output-transform.d.ts +4 -0
  1101. package/dist/commands/review-output-transform.js +119 -0
  1102. package/dist/commands/review-owner.d.ts +4 -0
  1103. package/dist/commands/review-owner.js +129 -0
  1104. package/dist/commands/review-parallel-diff.d.ts +4 -0
  1105. package/dist/commands/review-parallel-diff.js +146 -0
  1106. package/dist/commands/review-parallel-files.d.ts +7 -0
  1107. package/dist/commands/review-parallel-files.js +134 -0
  1108. package/dist/commands/review-parallel-run.d.ts +4 -0
  1109. package/dist/commands/review-parallel-run.js +116 -0
  1110. package/dist/commands/review-parallel.d.ts +4 -0
  1111. package/dist/commands/review-parallel.js +164 -0
  1112. package/dist/commands/review-perf-profile.d.ts +4 -0
  1113. package/dist/commands/review-perf-profile.js +98 -0
  1114. package/dist/commands/review-permission-model.d.ts +4 -0
  1115. package/dist/commands/review-permission-model.js +149 -0
  1116. package/dist/commands/review-pipeline-status.d.ts +4 -0
  1117. package/dist/commands/review-pipeline-status.js +54 -0
  1118. package/dist/commands/review-plugin-config.d.ts +4 -0
  1119. package/dist/commands/review-plugin-config.js +167 -0
  1120. package/dist/commands/review-plugin-list.d.ts +4 -0
  1121. package/dist/commands/review-plugin-list.js +99 -0
  1122. package/dist/commands/review-plugin-manage.d.ts +4 -0
  1123. package/dist/commands/review-plugin-manage.js +137 -0
  1124. package/dist/commands/review-plugin-status.d.ts +4 -0
  1125. package/dist/commands/review-plugin-status.js +53 -0
  1126. package/dist/commands/review-policy-enforce.d.ts +1 -0
  1127. package/dist/commands/review-policy-enforce.js +92 -0
  1128. package/dist/commands/review-policy-engine.d.ts +4 -0
  1129. package/dist/commands/review-policy-engine.js +135 -0
  1130. package/dist/commands/review-pr-comment-gen.d.ts +4 -0
  1131. package/dist/commands/review-pr-comment-gen.js +62 -0
  1132. package/dist/commands/review-pr-comment.d.ts +4 -0
  1133. package/dist/commands/review-pr-comment.js +106 -0
  1134. package/dist/commands/review-pr-label-suggest.d.ts +1 -0
  1135. package/dist/commands/review-pr-label-suggest.js +77 -0
  1136. package/dist/commands/review-pr-size-check.d.ts +1 -0
  1137. package/dist/commands/review-pr-size-check.js +98 -0
  1138. package/dist/commands/review-pr-template.d.ts +4 -0
  1139. package/dist/commands/review-pr-template.js +104 -0
  1140. package/dist/commands/review-preset-save.d.ts +4 -0
  1141. package/dist/commands/review-preset-save.js +159 -0
  1142. package/dist/commands/review-priority.d.ts +4 -0
  1143. package/dist/commands/review-priority.js +157 -0
  1144. package/dist/commands/review-profile.d.ts +4 -0
  1145. package/dist/commands/review-profile.js +168 -0
  1146. package/dist/commands/review-progress-bar.d.ts +4 -0
  1147. package/dist/commands/review-progress-bar.js +157 -0
  1148. package/dist/commands/review-progress-report.d.ts +1 -0
  1149. package/dist/commands/review-progress-report.js +95 -0
  1150. package/dist/commands/review-progress-track.d.ts +4 -0
  1151. package/dist/commands/review-progress-track.js +94 -0
  1152. package/dist/commands/review-quality-baseline.d.ts +1 -0
  1153. package/dist/commands/review-quality-baseline.js +134 -0
  1154. package/dist/commands/review-quality-gate.d.ts +1 -0
  1155. package/dist/commands/review-quality-gate.js +86 -0
  1156. package/dist/commands/review-quality-score.d.ts +4 -0
  1157. package/dist/commands/review-quality-score.js +127 -0
  1158. package/dist/commands/review-quality-trend.d.ts +4 -0
  1159. package/dist/commands/review-quality-trend.js +57 -0
  1160. package/dist/commands/review-queue.d.ts +33 -0
  1161. package/dist/commands/review-queue.js +225 -0
  1162. package/dist/commands/review-quickstart.d.ts +4 -0
  1163. package/dist/commands/review-quickstart.js +107 -0
  1164. package/dist/commands/review-quota-check.d.ts +4 -0
  1165. package/dist/commands/review-quota-check.js +97 -0
  1166. package/dist/commands/review-quota.d.ts +4 -0
  1167. package/dist/commands/review-quota.js +126 -0
  1168. package/dist/commands/review-rate-limit.d.ts +4 -0
  1169. package/dist/commands/review-rate-limit.js +130 -0
  1170. package/dist/commands/review-readiness-check.d.ts +1 -0
  1171. package/dist/commands/review-readiness-check.js +98 -0
  1172. package/dist/commands/review-receipt.d.ts +4 -0
  1173. package/dist/commands/review-receipt.js +220 -0
  1174. package/dist/commands/review-release-gate.d.ts +1 -0
  1175. package/dist/commands/review-release-gate.js +81 -0
  1176. package/dist/commands/review-replay.d.ts +8 -0
  1177. package/dist/commands/review-replay.js +264 -0
  1178. package/dist/commands/review-repo-onboard.d.ts +4 -0
  1179. package/dist/commands/review-repo-onboard.js +114 -0
  1180. package/dist/commands/review-report-archive.d.ts +4 -0
  1181. package/dist/commands/review-report-archive.js +100 -0
  1182. package/dist/commands/review-report-merge.d.ts +4 -0
  1183. package/dist/commands/review-report-merge.js +90 -0
  1184. package/dist/commands/review-report-pdf.d.ts +4 -0
  1185. package/dist/commands/review-report-pdf.js +163 -0
  1186. package/dist/commands/review-report-schedule.d.ts +4 -0
  1187. package/dist/commands/review-report-schedule.js +96 -0
  1188. package/dist/commands/review-retrospective.d.ts +1 -0
  1189. package/dist/commands/review-retrospective.js +118 -0
  1190. package/dist/commands/review-retry.d.ts +4 -0
  1191. package/dist/commands/review-retry.js +91 -0
  1192. package/dist/commands/review-review-cadence.d.ts +1 -0
  1193. package/dist/commands/review-review-cadence.js +85 -0
  1194. package/dist/commands/review-review-comments.d.ts +4 -0
  1195. package/dist/commands/review-review-comments.js +84 -0
  1196. package/dist/commands/review-reviewer-match.d.ts +1 -0
  1197. package/dist/commands/review-reviewer-match.js +108 -0
  1198. package/dist/commands/review-risk-matrix.d.ts +1 -0
  1199. package/dist/commands/review-risk-matrix.js +96 -0
  1200. package/dist/commands/review-risk-score.d.ts +4 -0
  1201. package/dist/commands/review-risk-score.js +156 -0
  1202. package/dist/commands/review-role-assignment.d.ts +4 -0
  1203. package/dist/commands/review-role-assignment.js +98 -0
  1204. package/dist/commands/review-rollback.d.ts +4 -0
  1205. package/dist/commands/review-rollback.js +171 -0
  1206. package/dist/commands/review-rollout-plan.d.ts +4 -0
  1207. package/dist/commands/review-rollout-plan.js +123 -0
  1208. package/dist/commands/review-rule-filter.d.ts +4 -0
  1209. package/dist/commands/review-rule-filter.js +116 -0
  1210. package/dist/commands/review-rule-stats.d.ts +4 -0
  1211. package/dist/commands/review-rule-stats.js +161 -0
  1212. package/dist/commands/review-sandbox.d.ts +4 -0
  1213. package/dist/commands/review-sandbox.js +191 -0
  1214. package/dist/commands/review-schedule.d.ts +4 -0
  1215. package/dist/commands/review-schedule.js +169 -0
  1216. package/dist/commands/review-scope-limit.d.ts +4 -0
  1217. package/dist/commands/review-scope-limit.js +100 -0
  1218. package/dist/commands/review-scope-lock.d.ts +7 -0
  1219. package/dist/commands/review-scope-lock.js +138 -0
  1220. package/dist/commands/review-scope-select.d.ts +4 -0
  1221. package/dist/commands/review-scope-select.js +98 -0
  1222. package/dist/commands/review-scope-suggest.d.ts +1 -0
  1223. package/dist/commands/review-scope-suggest.js +112 -0
  1224. package/dist/commands/review-scope.d.ts +4 -0
  1225. package/dist/commands/review-scope.js +197 -0
  1226. package/dist/commands/review-score-history.d.ts +4 -0
  1227. package/dist/commands/review-score-history.js +137 -0
  1228. package/dist/commands/review-security-posture.d.ts +1 -0
  1229. package/dist/commands/review-security-posture.js +105 -0
  1230. package/dist/commands/review-session-replay.d.ts +4 -0
  1231. package/dist/commands/review-session-replay.js +81 -0
  1232. package/dist/commands/review-session-save.d.ts +4 -0
  1233. package/dist/commands/review-session-save.js +173 -0
  1234. package/dist/commands/review-session.d.ts +4 -0
  1235. package/dist/commands/review-session.js +150 -0
  1236. package/dist/commands/review-skip-list.d.ts +4 -0
  1237. package/dist/commands/review-skip-list.js +135 -0
  1238. package/dist/commands/review-skip-rule.d.ts +4 -0
  1239. package/dist/commands/review-skip-rule.js +105 -0
  1240. package/dist/commands/review-sla-config.d.ts +4 -0
  1241. package/dist/commands/review-sla-config.js +88 -0
  1242. package/dist/commands/review-slack-format.d.ts +4 -0
  1243. package/dist/commands/review-slack-format.js +113 -0
  1244. package/dist/commands/review-snapshot-diff.d.ts +4 -0
  1245. package/dist/commands/review-snapshot-diff.js +100 -0
  1246. package/dist/commands/review-sprint-plan.d.ts +1 -0
  1247. package/dist/commands/review-sprint-plan.js +79 -0
  1248. package/dist/commands/review-stakeholder-notify.d.ts +1 -0
  1249. package/dist/commands/review-stakeholder-notify.js +134 -0
  1250. package/dist/commands/review-stakeholder-report.d.ts +4 -0
  1251. package/dist/commands/review-stakeholder-report.js +75 -0
  1252. package/dist/commands/review-stale-finding-clean.d.ts +1 -0
  1253. package/dist/commands/review-stale-finding-clean.js +81 -0
  1254. package/dist/commands/review-standup.d.ts +4 -0
  1255. package/dist/commands/review-standup.js +95 -0
  1256. package/dist/commands/review-stats.d.ts +4 -0
  1257. package/dist/commands/review-stats.js +175 -0
  1258. package/dist/commands/review-status-badge.d.ts +4 -0
  1259. package/dist/commands/review-status-badge.js +120 -0
  1260. package/dist/commands/review-streak.d.ts +4 -0
  1261. package/dist/commands/review-streak.js +150 -0
  1262. package/dist/commands/review-summary-dashboard.d.ts +4 -0
  1263. package/dist/commands/review-summary-dashboard.js +96 -0
  1264. package/dist/commands/review-summary-email.d.ts +4 -0
  1265. package/dist/commands/review-summary-email.js +102 -0
  1266. package/dist/commands/review-summary.d.ts +4 -0
  1267. package/dist/commands/review-summary.js +174 -0
  1268. package/dist/commands/review-tag-manager.d.ts +4 -0
  1269. package/dist/commands/review-tag-manager.js +128 -0
  1270. package/dist/commands/review-tag.d.ts +4 -0
  1271. package/dist/commands/review-tag.js +136 -0
  1272. package/dist/commands/review-team-analytics.d.ts +1 -0
  1273. package/dist/commands/review-team-analytics.js +94 -0
  1274. package/dist/commands/review-team-assign.d.ts +7 -0
  1275. package/dist/commands/review-team-assign.js +211 -0
  1276. package/dist/commands/review-team-coverage.d.ts +1 -0
  1277. package/dist/commands/review-team-coverage.js +95 -0
  1278. package/dist/commands/review-team-dashboard.d.ts +4 -0
  1279. package/dist/commands/review-team-dashboard.js +98 -0
  1280. package/dist/commands/review-team-rotation.d.ts +1 -0
  1281. package/dist/commands/review-team-rotation.js +99 -0
  1282. package/dist/commands/review-team-skill-map.d.ts +1 -0
  1283. package/dist/commands/review-team-skill-map.js +102 -0
  1284. package/dist/commands/review-team-stats.d.ts +4 -0
  1285. package/dist/commands/review-team-stats.js +97 -0
  1286. package/dist/commands/review-team-summary.d.ts +4 -0
  1287. package/dist/commands/review-team-summary.js +155 -0
  1288. package/dist/commands/review-team-velocity.d.ts +1 -0
  1289. package/dist/commands/review-team-velocity.js +103 -0
  1290. package/dist/commands/review-template-export.d.ts +4 -0
  1291. package/dist/commands/review-template-export.js +146 -0
  1292. package/dist/commands/review-template-library.d.ts +4 -0
  1293. package/dist/commands/review-template-library.js +155 -0
  1294. package/dist/commands/review-template-suggest.d.ts +1 -0
  1295. package/dist/commands/review-template-suggest.js +119 -0
  1296. package/dist/commands/review-template.d.ts +4 -0
  1297. package/dist/commands/review-template.js +212 -0
  1298. package/dist/commands/review-tenant-config.d.ts +4 -0
  1299. package/dist/commands/review-tenant-config.js +116 -0
  1300. package/dist/commands/review-threshold-tune.d.ts +4 -0
  1301. package/dist/commands/review-threshold-tune.js +135 -0
  1302. package/dist/commands/review-timeline.d.ts +4 -0
  1303. package/dist/commands/review-timeline.js +76 -0
  1304. package/dist/commands/review-token-budget.d.ts +4 -0
  1305. package/dist/commands/review-token-budget.js +117 -0
  1306. package/dist/commands/review-velocity-track.d.ts +1 -0
  1307. package/dist/commands/review-velocity-track.js +94 -0
  1308. package/dist/commands/review-watch-mode.d.ts +7 -0
  1309. package/dist/commands/review-watch-mode.js +132 -0
  1310. package/dist/commands/review-webhook-dispatch.d.ts +4 -0
  1311. package/dist/commands/review-webhook-dispatch.js +99 -0
  1312. package/dist/commands/review-webhook-notify.d.ts +4 -0
  1313. package/dist/commands/review-webhook-notify.js +145 -0
  1314. package/dist/commands/review-webhook.d.ts +4 -0
  1315. package/dist/commands/review-webhook.js +140 -0
  1316. package/dist/commands/review-whitelist.d.ts +4 -0
  1317. package/dist/commands/review-whitelist.js +150 -0
  1318. package/dist/commands/review-workflow-suggest.d.ts +1 -0
  1319. package/dist/commands/review-workflow-suggest.js +129 -0
  1320. package/dist/commands/review-workload-balance.d.ts +1 -0
  1321. package/dist/commands/review-workload-balance.js +86 -0
  1322. package/dist/commands/review-workspace-init.d.ts +4 -0
  1323. package/dist/commands/review-workspace-init.js +104 -0
  1324. package/dist/commands/review-workspace-scan.d.ts +4 -0
  1325. package/dist/commands/review-workspace-scan.js +144 -0
  1326. package/dist/commands/review.d.ts +155 -0
  1327. package/dist/commands/review.js +1114 -0
  1328. package/dist/commands/risk-heatmap.d.ts +7 -0
  1329. package/dist/commands/risk-heatmap.js +223 -0
  1330. package/dist/commands/rollback-safety.d.ts +4 -0
  1331. package/dist/commands/rollback-safety.js +191 -0
  1332. package/dist/commands/rule-catalog.d.ts +4 -0
  1333. package/dist/commands/rule-catalog.js +128 -0
  1334. package/dist/commands/rule-metrics.d.ts +43 -0
  1335. package/dist/commands/rule-metrics.js +113 -0
  1336. package/dist/commands/rule-owner.d.ts +30 -0
  1337. package/dist/commands/rule-owner.js +181 -0
  1338. package/dist/commands/rule-share.d.ts +34 -0
  1339. package/dist/commands/rule-share.js +202 -0
  1340. package/dist/commands/rule-test.d.ts +4 -0
  1341. package/dist/commands/rule-test.js +201 -0
  1342. package/dist/commands/rule.d.ts +114 -0
  1343. package/dist/commands/rule.js +295 -0
  1344. package/dist/commands/sbom-export.d.ts +7 -0
  1345. package/dist/commands/sbom-export.js +161 -0
  1346. package/dist/commands/scaffold-plugin.d.ts +15 -0
  1347. package/dist/commands/scaffold-plugin.js +270 -0
  1348. package/dist/commands/secret-age.d.ts +5 -0
  1349. package/dist/commands/secret-age.js +214 -0
  1350. package/dist/commands/secret-scan.d.ts +7 -0
  1351. package/dist/commands/secret-scan.js +244 -0
  1352. package/dist/commands/security-maturity.d.ts +7 -0
  1353. package/dist/commands/security-maturity.js +312 -0
  1354. package/dist/commands/security-theater.d.ts +4 -0
  1355. package/dist/commands/security-theater.js +278 -0
  1356. package/dist/commands/setup-wizard.d.ts +4 -0
  1357. package/dist/commands/setup-wizard.js +174 -0
  1358. package/dist/commands/severity-tune.d.ts +4 -0
  1359. package/dist/commands/severity-tune.js +208 -0
  1360. package/dist/commands/sla-track.d.ts +56 -0
  1361. package/dist/commands/sla-track.js +268 -0
  1362. package/dist/commands/smart-output.d.ts +38 -0
  1363. package/dist/commands/smart-output.js +175 -0
  1364. package/dist/commands/smart-select.d.ts +26 -0
  1365. package/dist/commands/smart-select.js +345 -0
  1366. package/dist/commands/snapshot.d.ts +139 -0
  1367. package/dist/commands/snapshot.js +478 -0
  1368. package/dist/commands/snippet-eval.d.ts +7 -0
  1369. package/dist/commands/snippet-eval.js +223 -0
  1370. package/dist/commands/spec-conform.d.ts +4 -0
  1371. package/dist/commands/spec-conform.js +304 -0
  1372. package/dist/commands/stale-pattern.d.ts +4 -0
  1373. package/dist/commands/stale-pattern.js +293 -0
  1374. package/dist/commands/state-integrity.d.ts +4 -0
  1375. package/dist/commands/state-integrity.js +283 -0
  1376. package/dist/commands/suppress.d.ts +39 -0
  1377. package/dist/commands/suppress.js +203 -0
  1378. package/dist/commands/team-config.d.ts +4 -0
  1379. package/dist/commands/team-config.js +234 -0
  1380. package/dist/commands/team-leaderboard.d.ts +24 -0
  1381. package/dist/commands/team-leaderboard.js +227 -0
  1382. package/dist/commands/team-rules-sync.d.ts +7 -0
  1383. package/dist/commands/team-rules-sync.js +250 -0
  1384. package/dist/commands/team-trust.d.ts +7 -0
  1385. package/dist/commands/team-trust.js +174 -0
  1386. package/dist/commands/test-correlate.d.ts +7 -0
  1387. package/dist/commands/test-correlate.js +221 -0
  1388. package/dist/commands/test-isolation.d.ts +5 -0
  1389. package/dist/commands/test-isolation.js +234 -0
  1390. package/dist/commands/test-quality.d.ts +5 -0
  1391. package/dist/commands/test-quality.js +160 -0
  1392. package/dist/commands/test-suggest.d.ts +8 -0
  1393. package/dist/commands/test-suggest.js +247 -0
  1394. package/dist/commands/ticket-sync.d.ts +25 -0
  1395. package/dist/commands/ticket-sync.js +235 -0
  1396. package/dist/commands/timeout-audit.d.ts +4 -0
  1397. package/dist/commands/timeout-audit.js +210 -0
  1398. package/dist/commands/trace.d.ts +64 -0
  1399. package/dist/commands/trace.js +245 -0
  1400. package/dist/commands/trend-report.d.ts +4 -0
  1401. package/dist/commands/trend-report.js +148 -0
  1402. package/dist/commands/triage.d.ts +15 -0
  1403. package/dist/commands/triage.js +171 -0
  1404. package/dist/commands/trust-adaptive.d.ts +8 -0
  1405. package/dist/commands/trust-adaptive.js +193 -0
  1406. package/dist/commands/trust-ramp.d.ts +29 -0
  1407. package/dist/commands/trust-ramp.js +189 -0
  1408. package/dist/commands/tune.d.ts +24 -0
  1409. package/dist/commands/tune.js +380 -0
  1410. package/dist/commands/type-boundary.d.ts +4 -0
  1411. package/dist/commands/type-boundary.js +235 -0
  1412. package/dist/commands/upload.d.ts +13 -0
  1413. package/dist/commands/upload.js +172 -0
  1414. package/dist/commands/validate-config.d.ts +16 -0
  1415. package/dist/commands/validate-config.js +267 -0
  1416. package/dist/commands/vendor-lock-detect.d.ts +7 -0
  1417. package/dist/commands/vendor-lock-detect.js +288 -0
  1418. package/dist/commands/vote.d.ts +31 -0
  1419. package/dist/commands/vote.js +200 -0
  1420. package/dist/commands/warm-cache.d.ts +30 -0
  1421. package/dist/commands/warm-cache.js +165 -0
  1422. package/dist/commands/watch-judge.d.ts +7 -0
  1423. package/dist/commands/watch-judge.js +179 -0
  1424. package/dist/commands/watch.d.ts +22 -0
  1425. package/dist/commands/watch.js +147 -0
  1426. package/dist/comparison.d.ts +67 -0
  1427. package/dist/comparison.js +253 -0
  1428. package/dist/config.d.ts +108 -0
  1429. package/dist/config.js +694 -0
  1430. package/dist/context/context-snippets.d.ts +15 -0
  1431. package/dist/context/context-snippets.js +36 -0
  1432. package/dist/context/embedding-cache.d.ts +30 -0
  1433. package/dist/context/embedding-cache.js +48 -0
  1434. package/dist/data-adapter.d.ts +123 -0
  1435. package/dist/data-adapter.js +212 -0
  1436. package/dist/dedup.d.ts +105 -0
  1437. package/dist/dedup.js +606 -0
  1438. package/dist/disk-cache.d.ts +59 -0
  1439. package/dist/disk-cache.js +236 -0
  1440. package/dist/errors.d.ts +43 -0
  1441. package/dist/errors.js +63 -0
  1442. package/dist/escalation.d.ts +100 -0
  1443. package/dist/escalation.js +292 -0
  1444. package/dist/evaluation-session.d.ts +74 -0
  1445. package/dist/evaluation-session.js +152 -0
  1446. package/dist/evaluators/accessibility.d.ts +2 -0
  1447. package/dist/evaluators/accessibility.js +559 -0
  1448. package/dist/evaluators/agent-instructions.d.ts +2 -0
  1449. package/dist/evaluators/agent-instructions.js +214 -0
  1450. package/dist/evaluators/ai-code-safety.d.ts +8 -0
  1451. package/dist/evaluators/ai-code-safety.js +410 -0
  1452. package/dist/evaluators/api-contract.d.ts +9 -0
  1453. package/dist/evaluators/api-contract.js +203 -0
  1454. package/dist/evaluators/api-design.d.ts +2 -0
  1455. package/dist/evaluators/api-design.js +260 -0
  1456. package/dist/evaluators/app-builder.d.ts +33 -0
  1457. package/dist/evaluators/app-builder.js +155 -0
  1458. package/dist/evaluators/authentication.d.ts +2 -0
  1459. package/dist/evaluators/authentication.js +455 -0
  1460. package/dist/evaluators/backwards-compatibility.d.ts +2 -0
  1461. package/dist/evaluators/backwards-compatibility.js +168 -0
  1462. package/dist/evaluators/caching.d.ts +2 -0
  1463. package/dist/evaluators/caching.js +171 -0
  1464. package/dist/evaluators/ci-cd.d.ts +2 -0
  1465. package/dist/evaluators/ci-cd.js +218 -0
  1466. package/dist/evaluators/cloud-readiness.d.ts +2 -0
  1467. package/dist/evaluators/cloud-readiness.js +231 -0
  1468. package/dist/evaluators/code-structure.d.ts +21 -0
  1469. package/dist/evaluators/code-structure.js +195 -0
  1470. package/dist/evaluators/compliance.d.ts +2 -0
  1471. package/dist/evaluators/compliance.js +329 -0
  1472. package/dist/evaluators/concurrency.d.ts +2 -0
  1473. package/dist/evaluators/concurrency.js +307 -0
  1474. package/dist/evaluators/configuration-management.d.ts +2 -0
  1475. package/dist/evaluators/configuration-management.js +232 -0
  1476. package/dist/evaluators/cost-effectiveness.d.ts +2 -0
  1477. package/dist/evaluators/cost-effectiveness.js +418 -0
  1478. package/dist/evaluators/cybersecurity.d.ts +2 -0
  1479. package/dist/evaluators/cybersecurity.js +1197 -0
  1480. package/dist/evaluators/data-security.d.ts +2 -0
  1481. package/dist/evaluators/data-security.js +467 -0
  1482. package/dist/evaluators/data-sovereignty.d.ts +2 -0
  1483. package/dist/evaluators/data-sovereignty.js +495 -0
  1484. package/dist/evaluators/database.d.ts +2 -0
  1485. package/dist/evaluators/database.js +240 -0
  1486. package/dist/evaluators/dependencies.d.ts +5 -0
  1487. package/dist/evaluators/dependencies.js +228 -0
  1488. package/dist/evaluators/dependency-health.d.ts +2 -0
  1489. package/dist/evaluators/dependency-health.js +477 -0
  1490. package/dist/evaluators/documentation.d.ts +2 -0
  1491. package/dist/evaluators/documentation.js +432 -0
  1492. package/dist/evaluators/error-handling.d.ts +2 -0
  1493. package/dist/evaluators/error-handling.js +426 -0
  1494. package/dist/evaluators/ethics-bias.d.ts +2 -0
  1495. package/dist/evaluators/ethics-bias.js +263 -0
  1496. package/dist/evaluators/false-positive-review.d.ts +21 -0
  1497. package/dist/evaluators/false-positive-review.js +1246 -0
  1498. package/dist/evaluators/framework-rules.d.ts +58 -0
  1499. package/dist/evaluators/framework-rules.js +291 -0
  1500. package/dist/evaluators/framework-safety.d.ts +12 -0
  1501. package/dist/evaluators/framework-safety.js +1205 -0
  1502. package/dist/evaluators/hallucination-detection.d.ts +2 -0
  1503. package/dist/evaluators/hallucination-detection.js +1250 -0
  1504. package/dist/evaluators/iac-security.d.ts +8 -0
  1505. package/dist/evaluators/iac-security.js +701 -0
  1506. package/dist/evaluators/index.d.ts +167 -0
  1507. package/dist/evaluators/index.js +994 -0
  1508. package/dist/evaluators/intent-alignment.d.ts +18 -0
  1509. package/dist/evaluators/intent-alignment.js +405 -0
  1510. package/dist/evaluators/internationalization.d.ts +2 -0
  1511. package/dist/evaluators/internationalization.js +287 -0
  1512. package/dist/evaluators/judge-selector.d.ts +19 -0
  1513. package/dist/evaluators/judge-selector.js +141 -0
  1514. package/dist/evaluators/logging-privacy.d.ts +2 -0
  1515. package/dist/evaluators/logging-privacy.js +190 -0
  1516. package/dist/evaluators/logic-review.d.ts +2 -0
  1517. package/dist/evaluators/logic-review.js +289 -0
  1518. package/dist/evaluators/maintainability.d.ts +2 -0
  1519. package/dist/evaluators/maintainability.js +430 -0
  1520. package/dist/evaluators/model-fingerprint.d.ts +2 -0
  1521. package/dist/evaluators/model-fingerprint.js +151 -0
  1522. package/dist/evaluators/multi-turn-coherence.d.ts +13 -0
  1523. package/dist/evaluators/multi-turn-coherence.js +149 -0
  1524. package/dist/evaluators/observability.d.ts +2 -0
  1525. package/dist/evaluators/observability.js +238 -0
  1526. package/dist/evaluators/over-engineering.d.ts +2 -0
  1527. package/dist/evaluators/over-engineering.js +160 -0
  1528. package/dist/evaluators/performance.d.ts +2 -0
  1529. package/dist/evaluators/performance.js +649 -0
  1530. package/dist/evaluators/portability.d.ts +2 -0
  1531. package/dist/evaluators/portability.js +254 -0
  1532. package/dist/evaluators/project.d.ts +48 -0
  1533. package/dist/evaluators/project.js +817 -0
  1534. package/dist/evaluators/rate-limiting.d.ts +2 -0
  1535. package/dist/evaluators/rate-limiting.js +193 -0
  1536. package/dist/evaluators/recall-boost.d.ts +27 -0
  1537. package/dist/evaluators/recall-boost.js +409 -0
  1538. package/dist/evaluators/reliability.d.ts +2 -0
  1539. package/dist/evaluators/reliability.js +245 -0
  1540. package/dist/evaluators/scalability.d.ts +2 -0
  1541. package/dist/evaluators/scalability.js +230 -0
  1542. package/dist/evaluators/security.d.ts +12 -0
  1543. package/dist/evaluators/security.js +1013 -0
  1544. package/dist/evaluators/shared.d.ts +219 -0
  1545. package/dist/evaluators/shared.js +1169 -0
  1546. package/dist/evaluators/software-practices.d.ts +2 -0
  1547. package/dist/evaluators/software-practices.js +395 -0
  1548. package/dist/evaluators/suppressions.d.ts +49 -0
  1549. package/dist/evaluators/suppressions.js +185 -0
  1550. package/dist/evaluators/testing.d.ts +2 -0
  1551. package/dist/evaluators/testing.js +348 -0
  1552. package/dist/evaluators/ux.d.ts +2 -0
  1553. package/dist/evaluators/ux.js +309 -0
  1554. package/dist/evaluators/v2.d.ts +26 -0
  1555. package/dist/evaluators/v2.js +354 -0
  1556. package/dist/ext-to-lang.d.ts +16 -0
  1557. package/dist/ext-to-lang.js +60 -0
  1558. package/dist/feedback-loop.d.ts +62 -0
  1559. package/dist/feedback-loop.js +179 -0
  1560. package/dist/finding-lifecycle.d.ts +215 -0
  1561. package/dist/finding-lifecycle.js +547 -0
  1562. package/dist/fingerprint.d.ts +39 -0
  1563. package/dist/fingerprint.js +179 -0
  1564. package/dist/fix-history.d.ts +103 -0
  1565. package/dist/fix-history.js +164 -0
  1566. package/dist/formatters/badge.d.ts +16 -0
  1567. package/dist/formatters/badge.js +78 -0
  1568. package/dist/formatters/codeclimate.d.ts +24 -0
  1569. package/dist/formatters/codeclimate.js +80 -0
  1570. package/dist/formatters/csv.d.ts +16 -0
  1571. package/dist/formatters/csv.js +53 -0
  1572. package/dist/formatters/diagnostics.d.ts +81 -0
  1573. package/dist/formatters/diagnostics.js +152 -0
  1574. package/dist/formatters/github-actions.d.ts +6 -0
  1575. package/dist/formatters/github-actions.js +68 -0
  1576. package/dist/formatters/html.d.ts +12 -0
  1577. package/dist/formatters/html.js +194 -0
  1578. package/dist/formatters/junit.d.ts +6 -0
  1579. package/dist/formatters/junit.js +68 -0
  1580. package/dist/formatters/pdf.d.ts +12 -0
  1581. package/dist/formatters/pdf.js +114 -0
  1582. package/dist/formatters/sarif.d.ts +92 -0
  1583. package/dist/formatters/sarif.js +256 -0
  1584. package/dist/formatters/shared.d.ts +4 -0
  1585. package/dist/formatters/shared.js +29 -0
  1586. package/dist/git-diff.d.ts +62 -0
  1587. package/dist/git-diff.js +282 -0
  1588. package/dist/github-app.d.ts +152 -0
  1589. package/dist/github-app.js +716 -0
  1590. package/dist/import-resolver.d.ts +51 -0
  1591. package/dist/import-resolver.js +213 -0
  1592. package/dist/index.d.ts +4 -0
  1593. package/dist/index.js +38 -0
  1594. package/dist/judge-registry.d.ts +156 -0
  1595. package/dist/judge-registry.js +272 -0
  1596. package/dist/judges/accessibility.d.ts +2 -0
  1597. package/dist/judges/accessibility.js +46 -0
  1598. package/dist/judges/agent-instructions.d.ts +2 -0
  1599. package/dist/judges/agent-instructions.js +46 -0
  1600. package/dist/judges/ai-code-safety.d.ts +2 -0
  1601. package/dist/judges/ai-code-safety.js +57 -0
  1602. package/dist/judges/api-contract.d.ts +2 -0
  1603. package/dist/judges/api-contract.js +40 -0
  1604. package/dist/judges/api-design.d.ts +2 -0
  1605. package/dist/judges/api-design.js +57 -0
  1606. package/dist/judges/authentication.d.ts +2 -0
  1607. package/dist/judges/authentication.js +63 -0
  1608. package/dist/judges/backwards-compatibility.d.ts +2 -0
  1609. package/dist/judges/backwards-compatibility.js +46 -0
  1610. package/dist/judges/caching.d.ts +2 -0
  1611. package/dist/judges/caching.js +46 -0
  1612. package/dist/judges/ci-cd.d.ts +2 -0
  1613. package/dist/judges/ci-cd.js +46 -0
  1614. package/dist/judges/cloud-readiness.d.ts +2 -0
  1615. package/dist/judges/cloud-readiness.js +53 -0
  1616. package/dist/judges/code-structure.d.ts +2 -0
  1617. package/dist/judges/code-structure.js +50 -0
  1618. package/dist/judges/compliance.d.ts +2 -0
  1619. package/dist/judges/compliance.js +49 -0
  1620. package/dist/judges/concurrency.d.ts +2 -0
  1621. package/dist/judges/concurrency.js +48 -0
  1622. package/dist/judges/configuration-management.d.ts +2 -0
  1623. package/dist/judges/configuration-management.js +46 -0
  1624. package/dist/judges/cost-effectiveness.d.ts +2 -0
  1625. package/dist/judges/cost-effectiveness.js +42 -0
  1626. package/dist/judges/cybersecurity.d.ts +2 -0
  1627. package/dist/judges/cybersecurity.js +63 -0
  1628. package/dist/judges/data-security.d.ts +2 -0
  1629. package/dist/judges/data-security.js +50 -0
  1630. package/dist/judges/data-sovereignty.d.ts +2 -0
  1631. package/dist/judges/data-sovereignty.js +60 -0
  1632. package/dist/judges/database.d.ts +2 -0
  1633. package/dist/judges/database.js +51 -0
  1634. package/dist/judges/dependency-health.d.ts +2 -0
  1635. package/dist/judges/dependency-health.js +48 -0
  1636. package/dist/judges/documentation.d.ts +2 -0
  1637. package/dist/judges/documentation.js +55 -0
  1638. package/dist/judges/error-handling.d.ts +2 -0
  1639. package/dist/judges/error-handling.js +55 -0
  1640. package/dist/judges/ethics-bias.d.ts +2 -0
  1641. package/dist/judges/ethics-bias.js +48 -0
  1642. package/dist/judges/false-positive-review.d.ts +2 -0
  1643. package/dist/judges/false-positive-review.js +85 -0
  1644. package/dist/judges/framework-safety.d.ts +2 -0
  1645. package/dist/judges/framework-safety.js +49 -0
  1646. package/dist/judges/hallucination-detection.d.ts +2 -0
  1647. package/dist/judges/hallucination-detection.js +48 -0
  1648. package/dist/judges/iac-security.d.ts +2 -0
  1649. package/dist/judges/iac-security.js +47 -0
  1650. package/dist/judges/index.d.ts +88 -0
  1651. package/dist/judges/index.js +128 -0
  1652. package/dist/judges/intent-alignment.d.ts +2 -0
  1653. package/dist/judges/intent-alignment.js +46 -0
  1654. package/dist/judges/internationalization.d.ts +2 -0
  1655. package/dist/judges/internationalization.js +44 -0
  1656. package/dist/judges/logging-privacy.d.ts +2 -0
  1657. package/dist/judges/logging-privacy.js +46 -0
  1658. package/dist/judges/logic-review.d.ts +2 -0
  1659. package/dist/judges/logic-review.js +36 -0
  1660. package/dist/judges/maintainability.d.ts +2 -0
  1661. package/dist/judges/maintainability.js +46 -0
  1662. package/dist/judges/model-fingerprint.d.ts +2 -0
  1663. package/dist/judges/model-fingerprint.js +35 -0
  1664. package/dist/judges/multi-turn-coherence.d.ts +2 -0
  1665. package/dist/judges/multi-turn-coherence.js +39 -0
  1666. package/dist/judges/observability.d.ts +2 -0
  1667. package/dist/judges/observability.js +54 -0
  1668. package/dist/judges/over-engineering.d.ts +2 -0
  1669. package/dist/judges/over-engineering.js +50 -0
  1670. package/dist/judges/performance.d.ts +2 -0
  1671. package/dist/judges/performance.js +46 -0
  1672. package/dist/judges/portability.d.ts +2 -0
  1673. package/dist/judges/portability.js +46 -0
  1674. package/dist/judges/rate-limiting.d.ts +2 -0
  1675. package/dist/judges/rate-limiting.js +55 -0
  1676. package/dist/judges/reliability.d.ts +2 -0
  1677. package/dist/judges/reliability.js +57 -0
  1678. package/dist/judges/scalability.d.ts +2 -0
  1679. package/dist/judges/scalability.js +52 -0
  1680. package/dist/judges/security.d.ts +2 -0
  1681. package/dist/judges/security.js +64 -0
  1682. package/dist/judges/software-practices.d.ts +2 -0
  1683. package/dist/judges/software-practices.js +56 -0
  1684. package/dist/judges/testing.d.ts +2 -0
  1685. package/dist/judges/testing.js +54 -0
  1686. package/dist/judges/ux.d.ts +2 -0
  1687. package/dist/judges/ux.js +46 -0
  1688. package/dist/language-patterns.d.ts +653 -0
  1689. package/dist/language-patterns.js +851 -0
  1690. package/dist/parallel.d.ts +52 -0
  1691. package/dist/parallel.js +157 -0
  1692. package/dist/patches/apply.d.ts +15 -0
  1693. package/dist/patches/apply.js +37 -0
  1694. package/dist/patches/index.d.ts +9 -0
  1695. package/dist/patches/index.js +2544 -0
  1696. package/dist/plugins.d.ts +59 -0
  1697. package/dist/plugins.js +76 -0
  1698. package/dist/presets.d.ts +35 -0
  1699. package/dist/presets.js +406 -0
  1700. package/dist/probabilistic/llm-response-validator.d.ts +26 -0
  1701. package/dist/probabilistic/llm-response-validator.js +122 -0
  1702. package/dist/reports/public-repo-report.d.ts +42 -0
  1703. package/dist/reports/public-repo-report.js +579 -0
  1704. package/dist/review-conversation.d.ts +87 -0
  1705. package/dist/review-conversation.js +307 -0
  1706. package/dist/sast-integration.d.ts +112 -0
  1707. package/dist/sast-integration.js +215 -0
  1708. package/dist/scoring.d.ts +36 -0
  1709. package/dist/scoring.js +437 -0
  1710. package/dist/security-ids.d.ts +23 -0
  1711. package/dist/security-ids.js +239 -0
  1712. package/dist/skill-loader.d.ts +33 -0
  1713. package/dist/skill-loader.js +167 -0
  1714. package/dist/tools/command-safety.d.ts +13 -0
  1715. package/dist/tools/command-safety.js +95 -0
  1716. package/dist/tools/deep-review.d.ts +38 -0
  1717. package/dist/tools/deep-review.js +302 -0
  1718. package/dist/tools/prompts.d.ts +27 -0
  1719. package/dist/tools/prompts.js +122 -0
  1720. package/dist/tools/register-evaluation.d.ts +6 -0
  1721. package/dist/tools/register-evaluation.js +587 -0
  1722. package/dist/tools/register-fix.d.ts +5 -0
  1723. package/dist/tools/register-fix.js +175 -0
  1724. package/dist/tools/register-resources.d.ts +6 -0
  1725. package/dist/tools/register-resources.js +177 -0
  1726. package/dist/tools/register-review.d.ts +6 -0
  1727. package/dist/tools/register-review.js +564 -0
  1728. package/dist/tools/register-scaffold.d.ts +2 -0
  1729. package/dist/tools/register-scaffold.js +398 -0
  1730. package/dist/tools/register-workflow.d.ts +6 -0
  1731. package/dist/tools/register-workflow.js +1037 -0
  1732. package/dist/tools/register-workspace.d.ts +2 -0
  1733. package/dist/tools/register-workspace.js +214 -0
  1734. package/dist/tools/register.d.ts +6 -0
  1735. package/dist/tools/register.js +21 -0
  1736. package/dist/tools/schemas.d.ts +25 -0
  1737. package/dist/tools/schemas.js +41 -0
  1738. package/dist/tools/validation.d.ts +13 -0
  1739. package/dist/tools/validation.js +77 -0
  1740. package/dist/types.d.ts +898 -0
  1741. package/dist/types.js +1 -0
  1742. package/package.json +54 -0
  1743. package/skills/ai-code-review.skill.md +57 -0
  1744. package/skills/release-gate.skill.md +27 -0
  1745. package/skills/security-review.skill.md +32 -0
@@ -0,0 +1,3415 @@
1
+ /**
2
+ * Code quality, error handling, database patterns, concurrency, testing,
3
+ * performance, observability, and DevOps benchmark cases.
4
+ *
5
+ * Covers ERR, DB, CONC, TEST, PERF, OBS, MAINT, DOC, CICD prefixes.
6
+ */
7
+ export const BENCHMARK_QUALITY_OPS = [
8
+ // ═══════════════════════════════════════════════════════════════════════════
9
+ // Error Handling — ERR prefix
10
+ // ═══════════════════════════════════════════════════════════════════════════
11
+ {
12
+ id: "err-deep-empty-catch-java",
13
+ description: "Java code with multiple empty catch blocks",
14
+ language: "java",
15
+ code: `public class DataProcessor {
16
+ public void process(String input) {
17
+ try {
18
+ int value = Integer.parseInt(input);
19
+ data.add(value);
20
+ } catch (NumberFormatException e) {
21
+ }
22
+ try {
23
+ File f = new File(input);
24
+ FileInputStream fis = new FileInputStream(f);
25
+ byte[] buffer = new byte[1024];
26
+ fis.read(buffer);
27
+ } catch (IOException e) {
28
+ }
29
+ try {
30
+ URL url = new URL(input);
31
+ HttpURLConnection conn = (HttpURLConnection) url.openConnection();
32
+ conn.getResponseCode();
33
+ } catch (Exception e) {
34
+ }
35
+ }
36
+ }`,
37
+ expectedRuleIds: ["ERR-001"],
38
+ category: "error-handling",
39
+ difficulty: "easy",
40
+ },
41
+ {
42
+ id: "err-deep-go-ignored-errors",
43
+ description: "Go code that systematically ignores error returns",
44
+ language: "go",
45
+ code: `package main
46
+
47
+ import (
48
+ "database/sql"
49
+ "encoding/json"
50
+ "net/http"
51
+ "os"
52
+ )
53
+
54
+ func loadConfig() map[string]string {
55
+ data, _ := os.ReadFile("config.json")
56
+ var config map[string]string
57
+ json.Unmarshal(data, &config)
58
+ return config
59
+ }
60
+
61
+ func saveRecord(db *sql.DB, name string) {
62
+ db.Exec("INSERT INTO records (name) VALUES (?)", name)
63
+ }
64
+
65
+ func sendNotification(url string, payload []byte) {
66
+ http.Post(url, "application/json", bytes.NewReader(payload))
67
+ }
68
+
69
+ func closeResources(db *sql.DB, f *os.File) {
70
+ db.Close()
71
+ f.Close()
72
+ }`,
73
+ expectedRuleIds: ["ERR-001"],
74
+ category: "error-handling",
75
+ difficulty: "medium",
76
+ },
77
+ {
78
+ id: "err-deep-python-bare-except",
79
+ description: "Python code with bare except clauses hiding exceptions",
80
+ language: "python",
81
+ code: `import json
82
+ import requests
83
+
84
+ def fetch_user_data(user_id):
85
+ try:
86
+ response = requests.get(f"https://api.example.com/users/{user_id}")
87
+ return response.json()
88
+ except:
89
+ return None
90
+
91
+ def parse_config(path):
92
+ try:
93
+ with open(path) as f:
94
+ return json.load(f)
95
+ except:
96
+ return {}
97
+
98
+ def process_batch(items):
99
+ results = []
100
+ for item in items:
101
+ try:
102
+ result = transform(item)
103
+ results.append(result)
104
+ except:
105
+ pass
106
+ return results`,
107
+ expectedRuleIds: ["ERR-001"],
108
+ category: "error-handling",
109
+ difficulty: "easy",
110
+ },
111
+ {
112
+ id: "err-deep-kotlin-bang-bang",
113
+ description: "Kotlin code with excessive !! (non-null assertion)",
114
+ language: "kotlin",
115
+ code: `class UserService(private val repository: UserRepository) {
116
+ fun getUserName(id: String): String {
117
+ val user = repository.findById(id)
118
+ return user!!.profile!!.displayName!!.trim()
119
+ }
120
+
121
+ fun getOrderTotal(orderId: String): Double {
122
+ val order = orderRepo.findById(orderId)
123
+ val items = order!!.items!!
124
+ return items.sumOf { it!!.price!! * it!!.quantity!! }
125
+ }
126
+
127
+ fun processPayment(userId: String) {
128
+ val user = repository.findById(userId)
129
+ val card = user!!.paymentMethods!!.first()!!
130
+ paymentGateway.charge(card.token!!, cart!!.total!!)
131
+ }
132
+ }`,
133
+ expectedRuleIds: ["ERR-001"],
134
+ category: "error-handling",
135
+ difficulty: "medium",
136
+ },
137
+ {
138
+ id: "err-deep-async-no-catch",
139
+ description: "Promise chains and async operations without error handling",
140
+ language: "typescript",
141
+ code: `async function syncUserData(userId: string) {
142
+ const user = await fetchUser(userId);
143
+ const orders = await fetchOrders(userId);
144
+ const recommendations = await fetchRecommendations(userId);
145
+
146
+ await updateCache(user);
147
+ await sendAnalytics({ user, orderCount: orders.length });
148
+ await notifyServices(user);
149
+ }
150
+
151
+ function processQueue() {
152
+ getMessages().then(messages => {
153
+ messages.forEach(msg => {
154
+ processMessage(msg).then(() => {
155
+ deleteMessage(msg.id);
156
+ });
157
+ });
158
+ });
159
+ }
160
+
161
+ setInterval(() => {
162
+ cleanupExpiredSessions();
163
+ rotateLogFiles();
164
+ sendHeartbeat();
165
+ }, 60000);`,
166
+ expectedRuleIds: ["ERR-001"],
167
+ category: "error-handling",
168
+ difficulty: "medium",
169
+ },
170
+ {
171
+ id: "err-deep-throw-strings",
172
+ description: "Throwing string literals instead of Error objects",
173
+ language: "typescript",
174
+ code: `function validateAge(age: number): void {
175
+ if (age < 0) throw "Age cannot be negative";
176
+ if (age > 150) throw "Invalid age value";
177
+ }
178
+
179
+ function connectDatabase(url: string): void {
180
+ if (!url) throw "Database URL is required";
181
+ if (!url.startsWith("postgres://")) throw "Only PostgreSQL is supported";
182
+ }
183
+
184
+ async function processPayment(amount: number): Promise<void> {
185
+ if (amount <= 0) throw "Invalid payment amount";
186
+ if (amount > 10000) throw "Amount exceeds maximum";
187
+ const result = await chargeCard(amount);
188
+ if (!result.success) throw "Payment failed: " + result.error;
189
+ }`,
190
+ expectedRuleIds: ["ERR-001"],
191
+ category: "error-handling",
192
+ difficulty: "easy",
193
+ },
194
+ {
195
+ id: "err-deep-process-exit",
196
+ description: "Using process.exit instead of proper error propagation",
197
+ language: "typescript",
198
+ code: `import fs from "fs";
199
+
200
+ function loadConfig(path: string) {
201
+ if (!fs.existsSync(path)) {
202
+ console.error("Config file not found");
203
+ process.exit(1);
204
+ }
205
+ const data = fs.readFileSync(path, "utf8");
206
+ const config = JSON.parse(data);
207
+ if (!config.apiKey) {
208
+ console.error("API key missing");
209
+ process.exit(1);
210
+ }
211
+ if (!config.dbUrl) {
212
+ console.error("Database URL missing");
213
+ process.exit(1);
214
+ }
215
+ return config;
216
+ }
217
+
218
+ function connectDatabase(url: string) {
219
+ try {
220
+ return new Database(url);
221
+ } catch (e) {
222
+ console.error("DB connection failed");
223
+ process.exit(1);
224
+ }
225
+ }`,
226
+ expectedRuleIds: ["ERR-001"],
227
+ category: "error-handling",
228
+ difficulty: "medium",
229
+ },
230
+ {
231
+ id: "err-deep-java-catch-throwable",
232
+ description: "Java code catching Throwable instead of specific exceptions",
233
+ language: "java",
234
+ code: `public class WorkerService {
235
+ public void executeTask(Runnable task) {
236
+ try {
237
+ task.run();
238
+ } catch (Throwable t) {
239
+ logger.error("Task failed", t);
240
+ }
241
+ }
242
+
243
+ public Object processRequest(Request req) {
244
+ try {
245
+ validate(req);
246
+ return handle(req);
247
+ } catch (Throwable t) {
248
+ return new ErrorResponse("Internal error");
249
+ }
250
+ }
251
+
252
+ public void cleanupResources() {
253
+ try {
254
+ closeConnections();
255
+ flushBuffers();
256
+ } catch (Throwable t) {
257
+ // swallow
258
+ }
259
+ }
260
+ }`,
261
+ expectedRuleIds: ["ERR-001"],
262
+ category: "error-handling",
263
+ difficulty: "medium",
264
+ },
265
+ {
266
+ id: "err-deep-stack-trace-exposure",
267
+ description: "Stack traces exposed in HTTP responses",
268
+ language: "typescript",
269
+ code: `import express from "express";
270
+ const app = express();
271
+
272
+ app.get("/api/data", async (req, res) => {
273
+ try {
274
+ const data = await fetchData(req.query.id);
275
+ res.json(data);
276
+ } catch (error) {
277
+ res.status(500).json({
278
+ error: error.message,
279
+ stack: error.stack,
280
+ details: error,
281
+ });
282
+ }
283
+ });
284
+
285
+ app.use((err: Error, req: express.Request, res: express.Response, next: express.NextFunction) => {
286
+ res.status(500).json({
287
+ message: err.message,
288
+ stack: err.stack,
289
+ path: req.path,
290
+ timestamp: new Date().toISOString(),
291
+ });
292
+ });`,
293
+ expectedRuleIds: ["ERR-001"],
294
+ category: "error-handling",
295
+ difficulty: "easy",
296
+ },
297
+ // ═══════════════════════════════════════════════════════════════════════════
298
+ // Database — DB prefix
299
+ // ═══════════════════════════════════════════════════════════════════════════
300
+ {
301
+ id: "db-deep-select-star-views",
302
+ description: "SELECT * across multiple queries in data access layer",
303
+ language: "typescript",
304
+ code: `import { Pool } from "pg";
305
+
306
+ const pool = new Pool();
307
+
308
+ export async function getUsers() {
309
+ const result = await pool.query("SELECT * FROM users");
310
+ return result.rows;
311
+ }
312
+
313
+ export async function getUserOrders(userId: string) {
314
+ const result = await pool.query("SELECT * FROM orders WHERE user_id = $1", [userId]);
315
+ return result.rows;
316
+ }
317
+
318
+ export async function getProductDetails(productId: string) {
319
+ const products = await pool.query("SELECT * FROM products WHERE id = $1", [productId]);
320
+ const reviews = await pool.query("SELECT * FROM reviews WHERE product_id = $1", [productId]);
321
+ return { product: products.rows[0], reviews: reviews.rows };
322
+ }
323
+
324
+ export async function getDashboardData() {
325
+ const users = await pool.query("SELECT * FROM users LIMIT 100");
326
+ const orders = await pool.query("SELECT * FROM orders ORDER BY created_at DESC LIMIT 50");
327
+ const products = await pool.query("SELECT * FROM products WHERE active = true");
328
+ return { users: users.rows, orders: orders.rows, products: products.rows };
329
+ }`,
330
+ expectedRuleIds: ["DB-001"],
331
+ category: "database",
332
+ difficulty: "easy",
333
+ },
334
+ {
335
+ id: "db-deep-n-plus-one-orm",
336
+ description: "N+1 query pattern in ORM loop",
337
+ language: "typescript",
338
+ code: `import { getRepository } from "typeorm";
339
+
340
+ async function getOrderSummaries() {
341
+ const orders = await getRepository(Order).find();
342
+ const summaries = [];
343
+ for (const order of orders) {
344
+ const customer = await getRepository(Customer).findOne({ where: { id: order.customerId } });
345
+ const items = await getRepository(OrderItem).find({ where: { orderId: order.id } });
346
+ for (const item of items) {
347
+ const product = await getRepository(Product).findOne({ where: { id: item.productId } });
348
+ item.productName = product?.name;
349
+ }
350
+ summaries.push({ order, customer, items });
351
+ }
352
+ return summaries;
353
+ }`,
354
+ expectedRuleIds: ["COST-001", "PERF-001", "CONC-001"],
355
+ category: "database",
356
+ difficulty: "medium",
357
+ },
358
+ {
359
+ id: "db-deep-no-connection-pool",
360
+ description: "Creating new database connections per request without pooling",
361
+ language: "typescript",
362
+ code: `import { Client } from "pg";
363
+ import express from "express";
364
+
365
+ const app = express();
366
+
367
+ app.get("/users", async (req, res) => {
368
+ const client = new Client({ connectionString: process.env.DB_URL });
369
+ await client.connect();
370
+ const result = await client.query("SELECT id, name FROM users");
371
+ await client.end();
372
+ res.json(result.rows);
373
+ });
374
+
375
+ app.get("/orders/:id", async (req, res) => {
376
+ const client = new Client({ connectionString: process.env.DB_URL });
377
+ await client.connect();
378
+ const result = await client.query("SELECT * FROM orders WHERE id = $1", [req.params.id]);
379
+ await client.end();
380
+ res.json(result.rows[0]);
381
+ });`,
382
+ expectedRuleIds: ["REL-001", "OBS-001", "UX-001", "SEC-001"],
383
+ category: "database",
384
+ difficulty: "medium",
385
+ },
386
+ {
387
+ id: "db-deep-destructive-ddl",
388
+ description: "Destructive DDL operations in application code",
389
+ language: "typescript",
390
+ code: `import { Pool } from "pg";
391
+ const pool = new Pool();
392
+
393
+ async function resetDatabase() {
394
+ await pool.query("DROP TABLE IF EXISTS users CASCADE");
395
+ await pool.query("DROP TABLE IF EXISTS orders CASCADE");
396
+ await pool.query("DROP TABLE IF EXISTS products CASCADE");
397
+ await pool.query("TRUNCATE TABLE audit_log");
398
+ console.log("Database reset complete");
399
+ }
400
+
401
+ async function migrateSchema() {
402
+ await pool.query("ALTER TABLE users DROP COLUMN legacy_id");
403
+ await pool.query("ALTER TABLE orders DROP COLUMN old_status");
404
+ await pool.query("DELETE FROM sessions");
405
+ }`,
406
+ expectedRuleIds: ["DB-001"],
407
+ category: "database",
408
+ difficulty: "easy",
409
+ },
410
+ {
411
+ id: "db-deep-no-transactions",
412
+ description: "Multi-step database operations without transaction boundaries",
413
+ language: "typescript",
414
+ code: `import { Pool } from "pg";
415
+ const pool = new Pool();
416
+
417
+ async function transferFunds(fromId: string, toId: string, amount: number) {
418
+ await pool.query("UPDATE accounts SET balance = balance - $1 WHERE id = $2", [amount, fromId]);
419
+ await pool.query("UPDATE accounts SET balance = balance + $1 WHERE id = $2", [amount, toId]);
420
+ await pool.query(
421
+ "INSERT INTO transactions (from_id, to_id, amount) VALUES ($1, $2, $3)",
422
+ [fromId, toId, amount]
423
+ );
424
+ }
425
+
426
+ async function createOrder(userId: string, items: any[]) {
427
+ const order = await pool.query(
428
+ "INSERT INTO orders (user_id, status) VALUES ($1, 'pending') RETURNING id",
429
+ [userId]
430
+ );
431
+ for (const item of items) {
432
+ await pool.query(
433
+ "INSERT INTO order_items (order_id, product_id, qty) VALUES ($1, $2, $3)",
434
+ [order.rows[0].id, item.productId, item.qty]
435
+ );
436
+ await pool.query(
437
+ "UPDATE inventory SET stock = stock - $1 WHERE product_id = $2",
438
+ [item.qty, item.productId]
439
+ );
440
+ }
441
+ }`,
442
+ expectedRuleIds: ["DB-001"],
443
+ category: "database",
444
+ difficulty: "medium",
445
+ },
446
+ {
447
+ id: "db-deep-raw-sql-orm-bypass",
448
+ description: "Raw SQL queries bypassing ORM safety features",
449
+ language: "python",
450
+ code: `from django.db import connection
451
+
452
+ def search_products(query, category):
453
+ with connection.cursor() as cursor:
454
+ cursor.execute(
455
+ f"SELECT * FROM products WHERE name LIKE '%{query}%' AND category = '{category}'"
456
+ )
457
+ return cursor.fetchall()
458
+
459
+ def delete_old_orders(days):
460
+ with connection.cursor() as cursor:
461
+ cursor.execute(
462
+ f"DELETE FROM orders WHERE created_at < NOW() - INTERVAL '{days} days'"
463
+ )
464
+ return cursor.rowcount
465
+
466
+ def update_prices(multiplier, category):
467
+ with connection.cursor() as cursor:
468
+ cursor.execute(
469
+ f"UPDATE products SET price = price * {multiplier} WHERE category = '{category}'"
470
+ )`,
471
+ expectedRuleIds: ["DB-001", "CYBER-001"],
472
+ category: "database",
473
+ difficulty: "medium",
474
+ },
475
+ // ═══════════════════════════════════════════════════════════════════════════
476
+ // Concurrency — CONC prefix
477
+ // ═══════════════════════════════════════════════════════════════════════════
478
+ {
479
+ id: "conc-deep-unbounded-promise-all",
480
+ description: "Unbounded Promise.all processing thousands of items",
481
+ language: "typescript",
482
+ code: `async function processAllUsers(userIds: string[]) {
483
+ const results = await Promise.all(
484
+ userIds.map(async (id) => {
485
+ const user = await fetchUser(id);
486
+ const enriched = await enrichUserData(user);
487
+ await saveToCache(enriched);
488
+ return enriched;
489
+ })
490
+ );
491
+ return results;
492
+ }
493
+
494
+ async function sendBulkNotifications(users: User[]) {
495
+ await Promise.all(
496
+ users.map(user =>
497
+ sendEmail(user.email, "Monthly Update", generateNewsletter(user))
498
+ )
499
+ );
500
+ }`,
501
+ expectedRuleIds: ["PERF-001"],
502
+ category: "concurrency",
503
+ difficulty: "medium",
504
+ },
505
+ {
506
+ id: "conc-deep-shared-mutable-state",
507
+ description: "Shared mutable state accessed from async handlers",
508
+ language: "typescript",
509
+ code: `import express from "express";
510
+
511
+ let requestCount = 0;
512
+ const userSessions: Record<string, any> = {};
513
+ let lastRequestTime = Date.now();
514
+ const rateLimits: Record<string, number> = {};
515
+
516
+ const app = express();
517
+
518
+ app.use((req, res, next) => {
519
+ requestCount++;
520
+ lastRequestTime = Date.now();
521
+ const ip = req.ip!;
522
+ rateLimits[ip] = (rateLimits[ip] || 0) + 1;
523
+ next();
524
+ });
525
+
526
+ app.post("/login", (req, res) => {
527
+ userSessions[req.body.userId] = {
528
+ token: generateToken(),
529
+ loginTime: Date.now(),
530
+ };
531
+ res.json({ success: true });
532
+ });
533
+
534
+ app.get("/stats", (req, res) => {
535
+ res.json({ requestCount, lastRequestTime, activeSessions: Object.keys(userSessions).length });
536
+ });`,
537
+ expectedRuleIds: ["SCALE-001", "API-001", "OBS-001", "AICS-001", "SEC-001"],
538
+ category: "concurrency",
539
+ difficulty: "medium",
540
+ },
541
+ {
542
+ id: "conc-deep-go-unsync-map",
543
+ description: "Go map accessed concurrently without synchronization",
544
+ language: "go",
545
+ code: `package main
546
+
547
+ import (
548
+ "net/http"
549
+ "encoding/json"
550
+ )
551
+
552
+ var cache = make(map[string]string)
553
+ var counters = make(map[string]int)
554
+
555
+ func getHandler(w http.ResponseWriter, r *http.Request) {
556
+ key := r.URL.Query().Get("key")
557
+ value, ok := cache[key]
558
+ counters[key]++
559
+ if ok {
560
+ json.NewEncoder(w).Encode(map[string]string{"value": value})
561
+ } else {
562
+ http.Error(w, "Not found", 404)
563
+ }
564
+ }
565
+
566
+ func setHandler(w http.ResponseWriter, r *http.Request) {
567
+ key := r.URL.Query().Get("key")
568
+ value := r.URL.Query().Get("value")
569
+ cache[key] = value
570
+ counters[key] = 0
571
+ w.WriteHeader(200)
572
+ }`,
573
+ expectedRuleIds: ["CONC-001"],
574
+ category: "concurrency",
575
+ difficulty: "medium",
576
+ },
577
+ {
578
+ id: "conc-deep-sequential-await-loop",
579
+ description: "Sequential awaits in loop that should be parallelized",
580
+ language: "typescript",
581
+ code: `async function fetchAllPrices(productIds: string[]) {
582
+ const prices = [];
583
+ for (const id of productIds) {
584
+ const price = await fetchPrice(id);
585
+ prices.push({ id, price });
586
+ }
587
+ return prices;
588
+ }
589
+
590
+ async function validateAddresses(addresses: Address[]) {
591
+ const results = [];
592
+ for (const addr of addresses) {
593
+ const valid = await geocodeAddress(addr);
594
+ const normalized = await normalizeAddress(addr);
595
+ results.push({ ...addr, valid, normalized });
596
+ }
597
+ return results;
598
+ }`,
599
+ expectedRuleIds: ["CONC-001"],
600
+ category: "concurrency",
601
+ difficulty: "easy",
602
+ },
603
+ {
604
+ id: "conc-deep-setinterval-no-clear",
605
+ description: "setInterval without cleanup causing resource leaks",
606
+ language: "typescript",
607
+ code: `class DashboardWidget {
608
+ private data: any[] = [];
609
+
610
+ start() {
611
+ setInterval(() => {
612
+ this.data = fetchLatestData();
613
+ }, 5000);
614
+
615
+ setInterval(() => {
616
+ this.refreshUI();
617
+ }, 1000);
618
+
619
+ setInterval(() => {
620
+ sendHeartbeat();
621
+ }, 30000);
622
+ }
623
+
624
+ refreshUI() {
625
+ document.getElementById("data")!.innerHTML = JSON.stringify(this.data);
626
+ }
627
+ }`,
628
+ expectedRuleIds: ["CONC-001"],
629
+ category: "concurrency",
630
+ difficulty: "easy",
631
+ },
632
+ {
633
+ id: "conc-deep-missing-await",
634
+ description: "Missing await on async calls causing fire-and-forget",
635
+ language: "typescript",
636
+ code: `async function handleOrder(order: Order) {
637
+ validateOrder(order);
638
+ saveOrder(order);
639
+ sendConfirmationEmail(order.userEmail, order);
640
+ updateInventory(order.items);
641
+ notifyShipping(order);
642
+ logAnalytics("order_placed", order.id);
643
+ }
644
+
645
+ async function cleanup(userId: string) {
646
+ deleteUserSessions(userId);
647
+ clearUserCache(userId);
648
+ revokeTokens(userId);
649
+ }`,
650
+ expectedRuleIds: ["CONC-001"],
651
+ category: "concurrency",
652
+ difficulty: "medium",
653
+ },
654
+ {
655
+ id: "conc-deep-read-modify-write",
656
+ description: "Read-modify-write race condition on shared counter",
657
+ language: "typescript",
658
+ code: `import express from "express";
659
+ import Redis from "ioredis";
660
+
661
+ const redis = new Redis();
662
+ const app = express();
663
+
664
+ app.post("/like/:postId", async (req, res) => {
665
+ const key = \`likes:\${req.params.postId}\`;
666
+ const current = await redis.get(key);
667
+ const newCount = (parseInt(current || "0")) + 1;
668
+ await redis.set(key, newCount.toString());
669
+ res.json({ likes: newCount });
670
+ });
671
+
672
+ app.post("/inventory/reserve", async (req, res) => {
673
+ const stock = await redis.get(\`stock:\${req.body.productId}\`);
674
+ const available = parseInt(stock || "0");
675
+ if (available >= req.body.quantity) {
676
+ await redis.set(\`stock:\${req.body.productId}\`, (available - req.body.quantity).toString());
677
+ res.json({ reserved: true });
678
+ } else {
679
+ res.json({ reserved: false });
680
+ }
681
+ });`,
682
+ expectedRuleIds: ["CONC-001"],
683
+ category: "concurrency",
684
+ difficulty: "hard",
685
+ },
686
+ // ═══════════════════════════════════════════════════════════════════════════
687
+ // Performance — PERF prefix
688
+ // ═══════════════════════════════════════════════════════════════════════════
689
+ {
690
+ id: "perf-deep-sync-file-io",
691
+ description: "Synchronous file I/O in async Node.js application",
692
+ language: "typescript",
693
+ code: `import fs from "fs";
694
+ import express from "express";
695
+
696
+ const app = express();
697
+
698
+ app.get("/config/:key", (req, res) => {
699
+ const data = fs.readFileSync("config.json", "utf8");
700
+ const config = JSON.parse(data);
701
+ res.json({ value: config[req.params.key] });
702
+ });
703
+
704
+ app.post("/upload", (req, res) => {
705
+ const filename = \`uploads/\${Date.now()}.dat\`;
706
+ fs.writeFileSync(filename, req.body);
707
+ const stats = fs.statSync(filename);
708
+ res.json({ size: stats.size });
709
+ });
710
+
711
+ app.get("/logs", (req, res) => {
712
+ const files = fs.readdirSync("logs/");
713
+ const contents = files.map(f => fs.readFileSync(\`logs/\${f}\`, "utf8"));
714
+ res.json(contents);
715
+ });`,
716
+ expectedRuleIds: ["PERF-001"],
717
+ category: "performance",
718
+ difficulty: "easy",
719
+ },
720
+ {
721
+ id: "perf-deep-nested-loops-search",
722
+ description: "O(n^3) nested loops for data matching",
723
+ language: "typescript",
724
+ code: `function findCommonItems(
725
+ listA: Product[],
726
+ listB: Product[],
727
+ listC: Product[]
728
+ ): Product[] {
729
+ const common: Product[] = [];
730
+ for (const a of listA) {
731
+ for (const b of listB) {
732
+ for (const c of listC) {
733
+ if (a.sku === b.sku && b.sku === c.sku) {
734
+ common.push(a);
735
+ }
736
+ }
737
+ }
738
+ }
739
+ return common;
740
+ }
741
+
742
+ function deduplicateByField(items: any[], field: string): any[] {
743
+ const result: any[] = [];
744
+ for (const item of items) {
745
+ let found = false;
746
+ for (const existing of result) {
747
+ if (existing[field] === item[field]) {
748
+ found = true;
749
+ break;
750
+ }
751
+ }
752
+ if (!found) result.push(item);
753
+ }
754
+ return result;
755
+ }`,
756
+ expectedRuleIds: ["PERF-001"],
757
+ category: "performance",
758
+ difficulty: "medium",
759
+ },
760
+ {
761
+ id: "perf-deep-memory-leak-closures",
762
+ description: "Memory leak via growing array in closure without bounds",
763
+ language: "typescript",
764
+ code: `class EventTracker {
765
+ private events: any[] = [];
766
+ private listeners: Function[] = [];
767
+
768
+ track(event: any) {
769
+ this.events.push(event);
770
+ this.listeners.forEach(fn => fn(event));
771
+ }
772
+
773
+ addListener(fn: Function) {
774
+ this.listeners.push(fn);
775
+ }
776
+
777
+ getHistory() {
778
+ return [...this.events];
779
+ }
780
+ }
781
+
782
+ const tracker = new EventTracker();
783
+
784
+ setInterval(() => {
785
+ tracker.track({
786
+ type: "heartbeat",
787
+ timestamp: Date.now(),
788
+ memory: process.memoryUsage(),
789
+ });
790
+ }, 1000);`,
791
+ expectedRuleIds: ["PERF-001"],
792
+ category: "performance",
793
+ difficulty: "medium",
794
+ },
795
+ {
796
+ id: "perf-deep-regex-in-loop",
797
+ description: "RegExp compilation inside hot loop",
798
+ language: "typescript",
799
+ code: `function sanitizeAll(inputs: string[]): string[] {
800
+ return inputs.map(input => {
801
+ input = input.replace(new RegExp("<script[^>]*>.*?</script>", "gi"), "");
802
+ input = input.replace(new RegExp("<[^>]+>", "g"), "");
803
+ input = input.replace(new RegExp("&[a-z]+;", "gi"), "");
804
+ input = input.replace(new RegExp("[^a-zA-Z0-9 .,!?-]", "g"), "");
805
+ return input.trim();
806
+ });
807
+ }`,
808
+ expectedRuleIds: ["PERF-001"],
809
+ category: "performance",
810
+ difficulty: "medium",
811
+ },
812
+ {
813
+ id: "perf-deep-unbuffered-writes",
814
+ description: "Writing to file line-by-line without buffering",
815
+ language: "python",
816
+ code: `def export_large_dataset(records, output_path):
817
+ with open(output_path, 'w') as f:
818
+ for record in records:
819
+ line = ','.join(str(v) for v in record.values())
820
+ f.write(line + '\\n')
821
+ f.flush()
822
+
823
+ def generate_report(data, report_path):
824
+ for section in data:
825
+ with open(report_path, 'a') as f:
826
+ f.write(f"## {section['title']}\\n")
827
+ for row in section['rows']:
828
+ f.write(f"- {row}\\n")`,
829
+ expectedRuleIds: ["PERF-001"],
830
+ category: "performance",
831
+ difficulty: "easy",
832
+ },
833
+ // ═══════════════════════════════════════════════════════════════════════════
834
+ // Maintainability — MAINT prefix
835
+ // ═══════════════════════════════════════════════════════════════════════════
836
+ {
837
+ id: "maint-deep-magic-numbers-config",
838
+ description: "Magic numbers throughout business logic",
839
+ language: "typescript",
840
+ code: `function calculateShipping(weight: number, distance: number): number {
841
+ if (weight < 2.5) return 5.99;
842
+ if (weight < 10) return 12.49;
843
+ if (weight < 25) return 24.99;
844
+ if (distance > 500) return weight * 0.85 + 15.0;
845
+ if (distance > 1000) return weight * 1.25 + 25.0;
846
+ return weight * 0.45 + 8.99;
847
+ }
848
+
849
+ function calculateDiscount(total: number, loyaltyYears: number): number {
850
+ if (total > 500 && loyaltyYears >= 3) return total * 0.15;
851
+ if (total > 200 && loyaltyYears >= 1) return total * 0.10;
852
+ if (total > 100) return total * 0.05;
853
+ return 0;
854
+ }
855
+
856
+ function isEligible(age: number, score: number): boolean {
857
+ return age >= 18 && age <= 65 && score >= 720 && score <= 850;
858
+ }
859
+
860
+ function calculateTax(amount: number, region: string): number {
861
+ if (region === "CA") return amount * 0.0725;
862
+ if (region === "NY") return amount * 0.08;
863
+ if (region === "TX") return amount * 0.0625;
864
+ return amount * 0.05;
865
+ }
866
+
867
+ function retryDelay(attempt: number): number {
868
+ return Math.min(1000 * Math.pow(2, attempt), 30000) + Math.random() * 500;
869
+ }`,
870
+ expectedRuleIds: ["TEST-001"],
871
+ category: "maintainability",
872
+ difficulty: "easy",
873
+ },
874
+ {
875
+ id: "maint-deep-todo-fixme-dump",
876
+ description: "Code littered with TODO and FIXME comments",
877
+ language: "typescript",
878
+ code: `// TODO: implement proper authentication
879
+ // TODO: add rate limiting
880
+ // FIXME: this crashes on empty input
881
+ export function processRequest(data: any) {
882
+ // TODO: validate input schema
883
+ // FIXME: SQL injection vulnerability
884
+ const result = db.query(\`SELECT * FROM items WHERE id = '\${data.id}'\`);
885
+ // TODO: handle errors properly
886
+ // FIXME: memory leak here
887
+ cache.set(data.id, result);
888
+ // TODO: add logging
889
+ // TODO: implement retry logic
890
+ // FIXME: race condition on concurrent requests
891
+ return result;
892
+ }
893
+
894
+ // TODO: refactor this entire module
895
+ // TODO: add unit tests
896
+ // FIXME: performance degrades with large datasets
897
+ // TODO: extract into separate service
898
+ // TODO: add metrics/monitoring
899
+ // FIXME: timezone handling is broken
900
+ // TODO: support pagination
901
+ export function getReport() {
902
+ // TODO: cache this query
903
+ return db.query("SELECT * FROM reports");
904
+ }`,
905
+ expectedRuleIds: [
906
+ "DB-001",
907
+ "DATA-001",
908
+ "CYBER-001",
909
+ "PERF-001",
910
+ "COST-001",
911
+ "SCALE-001",
912
+ "CACHE-001",
913
+ "AICS-001",
914
+ "SEC-001",
915
+ ],
916
+ category: "maintainability",
917
+ difficulty: "easy",
918
+ },
919
+ {
920
+ id: "maint-deep-deep-nesting",
921
+ description: "Deeply nested control flow with excessive indentation",
922
+ language: "typescript",
923
+ code: `function processOrder(order: any, user: any, config: any) {
924
+ if (order) {
925
+ if (order.items && order.items.length > 0) {
926
+ if (user) {
927
+ if (user.isActive) {
928
+ if (user.subscription) {
929
+ if (user.subscription.tier === "premium") {
930
+ if (order.total > 0) {
931
+ if (config.paymentEnabled) {
932
+ if (user.paymentMethod) {
933
+ if (user.paymentMethod.isValid) {
934
+ if (order.shippingAddress) {
935
+ if (isValidAddress(order.shippingAddress)) {
936
+ if (checkInventory(order.items)) {
937
+ return submitOrder(order, user);
938
+ } else {
939
+ return { error: "Out of stock" };
940
+ }
941
+ } else {
942
+ return { error: "Invalid address" };
943
+ }
944
+ } else {
945
+ return { error: "No shipping address" };
946
+ }
947
+ } else {
948
+ return { error: "Invalid payment" };
949
+ }
950
+ }
951
+ }
952
+ }
953
+ }
954
+ }
955
+ }
956
+ }
957
+ }
958
+ }
959
+ return { error: "Invalid order" };
960
+ }`,
961
+ expectedRuleIds: ["MAINT-001", "STRUCT-001"],
962
+ category: "maintainability",
963
+ difficulty: "easy",
964
+ },
965
+ {
966
+ id: "maint-deep-var-keyword",
967
+ description: "Using var instead of let/const in modern TypeScript",
968
+ language: "typescript",
969
+ code: `var express = require("express");
970
+ var app = express();
971
+ var PORT = 3000;
972
+ var users = [];
973
+
974
+ app.get("/users", function(req, res) {
975
+ var result = [];
976
+ for (var i = 0; i < users.length; i++) {
977
+ var user = users[i];
978
+ var formatted = { name: user.name, email: user.email };
979
+ result.push(formatted);
980
+ }
981
+ res.json(result);
982
+ });
983
+
984
+ app.post("/users", function(req, res) {
985
+ var newUser = req.body;
986
+ var id = users.length + 1;
987
+ newUser.id = id;
988
+ users.push(newUser);
989
+ res.json(newUser);
990
+ });`,
991
+ expectedRuleIds: ["MAINT-001"],
992
+ category: "maintainability",
993
+ difficulty: "easy",
994
+ },
995
+ // ═══════════════════════════════════════════════════════════════════════════
996
+ // Documentation — DOC prefix
997
+ // ═══════════════════════════════════════════════════════════════════════════
998
+ {
999
+ id: "doc-deep-undocumented-public-api",
1000
+ description: "Public API module with no documentation on exported functions",
1001
+ language: "typescript",
1002
+ code: `export function crPr(d: any, o: any): any {
1003
+ const r = vldOrd(d);
1004
+ if (!r.ok) return r;
1005
+ const t = clcTtl(d.items, o.disc);
1006
+ return { id: genId(), total: t, items: d.items };
1007
+ }
1008
+
1009
+ export function prcRfnd(oid: string, amt: number, rsn: string): any {
1010
+ const o = gtOrd(oid);
1011
+ if (!o) return null;
1012
+ if (amt > o.total) return { err: "exceeds" };
1013
+ return updOrd(oid, { rfnd: amt, st: "refunded" });
1014
+ }
1015
+
1016
+ export function gtMtrcs(sd: string, ed: string, f: any): any {
1017
+ const d = qryDb(sd, ed, f);
1018
+ return { cnt: d.length, avg: clcAvg(d), p95: clcP95(d) };
1019
+ }
1020
+
1021
+ export function updCfg(k: string, v: any, ns: string): boolean {
1022
+ if (!vldK(k)) return false;
1023
+ return stCfg(ns, k, v);
1024
+ }
1025
+
1026
+ export function bchPrc(items: any[], opts: any): any[] {
1027
+ return items.map(i => prcItm(i, opts));
1028
+ }`,
1029
+ expectedRuleIds: ["DOC-001", "TEST-001"],
1030
+ category: "documentation",
1031
+ difficulty: "medium",
1032
+ },
1033
+ // ═══════════════════════════════════════════════════════════════════════════
1034
+ // Testing — TEST prefix
1035
+ // ═══════════════════════════════════════════════════════════════════════════
1036
+ {
1037
+ id: "test-deep-untestable-singleton",
1038
+ description: "Untestable singleton with hardcoded dependencies",
1039
+ language: "typescript",
1040
+ code: `import axios from "axios";
1041
+ import fs from "fs";
1042
+
1043
+ class AppService {
1044
+ private static instance: AppService;
1045
+ private cache = new Map<string, any>();
1046
+
1047
+ private constructor() {
1048
+ const config = JSON.parse(fs.readFileSync("config.json", "utf8"));
1049
+ this.apiUrl = config.apiUrl;
1050
+ this.apiKey = config.apiKey;
1051
+ setInterval(() => this.cleanup(), 60000);
1052
+ }
1053
+
1054
+ static getInstance(): AppService {
1055
+ if (!AppService.instance) {
1056
+ AppService.instance = new AppService();
1057
+ }
1058
+ return AppService.instance;
1059
+ }
1060
+
1061
+ async fetchData(id: string) {
1062
+ if (this.cache.has(id)) return this.cache.get(id);
1063
+ const response = await axios.get(\`\${this.apiUrl}/data/\${id}\`, {
1064
+ headers: { "x-api-key": this.apiKey },
1065
+ });
1066
+ this.cache.set(id, response.data);
1067
+ return response.data;
1068
+ }
1069
+
1070
+ private apiUrl: string;
1071
+ private apiKey: string;
1072
+ private cleanup() { this.cache.clear(); }
1073
+ }`,
1074
+ expectedRuleIds: ["SCALE-001", "COST-001", "PERF-001", "CONC-001", "PORTA-001", "RATE-001"],
1075
+ category: "testing",
1076
+ difficulty: "medium",
1077
+ },
1078
+ {
1079
+ id: "test-deep-global-state-tests",
1080
+ description: "Tests relying on global mutable state and execution order",
1081
+ language: "typescript",
1082
+ code: `let testDb: any;
1083
+ let testUser: any;
1084
+
1085
+ describe("UserService", () => {
1086
+ it("should create a user", async () => {
1087
+ testDb = await connectToTestDb();
1088
+ testUser = await userService.create({ name: "Test", email: "test@example.com" });
1089
+ expect(testUser.id).toBeDefined();
1090
+ });
1091
+
1092
+ it("should update the user", async () => {
1093
+ const updated = await userService.update(testUser.id, { name: "Updated" });
1094
+ expect(updated.name).toBe("Updated");
1095
+ testUser = updated;
1096
+ });
1097
+
1098
+ it("should find the user", async () => {
1099
+ const found = await userService.findById(testUser.id);
1100
+ expect(found.name).toBe("Updated");
1101
+ });
1102
+
1103
+ it("should delete the user", async () => {
1104
+ await userService.delete(testUser.id);
1105
+ const found = await userService.findById(testUser.id);
1106
+ expect(found).toBeNull();
1107
+ });
1108
+ });`,
1109
+ expectedRuleIds: ["TEST-001"],
1110
+ category: "testing",
1111
+ difficulty: "medium",
1112
+ },
1113
+ // ═══════════════════════════════════════════════════════════════════════════
1114
+ // Observability — OBS prefix
1115
+ // ═══════════════════════════════════════════════════════════════════════════
1116
+ {
1117
+ id: "obs-deep-console-log-only",
1118
+ description: "Application uses only console.log for all observability",
1119
+ language: "typescript",
1120
+ code: `import express from "express";
1121
+ const app = express();
1122
+
1123
+ app.use((req, res, next) => {
1124
+ console.log("Request:", req.method, req.url);
1125
+ next();
1126
+ });
1127
+
1128
+ app.get("/api/users", async (req, res) => {
1129
+ console.log("Fetching users...");
1130
+ try {
1131
+ const users = await db.query("SELECT * FROM users");
1132
+ console.log("Found", users.length, "users");
1133
+ res.json(users);
1134
+ } catch (e) {
1135
+ console.log("ERROR:", e);
1136
+ res.status(500).send("Error");
1137
+ }
1138
+ });
1139
+
1140
+ app.post("/api/orders", async (req, res) => {
1141
+ console.log("Creating order:", JSON.stringify(req.body));
1142
+ const start = Date.now();
1143
+ const order = await createOrder(req.body);
1144
+ console.log("Order created in", Date.now() - start, "ms");
1145
+ console.log("Order ID:", order.id);
1146
+ res.json(order);
1147
+ });`,
1148
+ expectedRuleIds: ["OBS-001"],
1149
+ category: "observability",
1150
+ difficulty: "easy",
1151
+ },
1152
+ {
1153
+ id: "obs-deep-no-health-check",
1154
+ description: "Server with no health check or readiness endpoints",
1155
+ language: "typescript",
1156
+ code: `import express from "express";
1157
+
1158
+ const app = express();
1159
+ app.use(express.json());
1160
+
1161
+ app.get("/api/products", async (req, res) => {
1162
+ const products = await db.findAll("products");
1163
+ res.json(products);
1164
+ });
1165
+
1166
+ app.post("/api/orders", async (req, res) => {
1167
+ const order = await db.create("orders", req.body);
1168
+ res.json(order);
1169
+ });
1170
+
1171
+ app.listen(8080, () => {
1172
+ console.log("Server running");
1173
+ });`,
1174
+ expectedRuleIds: ["CYBER-001", "REL-001", "CONC-001", "UX-001", "SEC-001"],
1175
+ category: "observability",
1176
+ difficulty: "easy",
1177
+ },
1178
+ // ═══════════════════════════════════════════════════════════════════════════
1179
+ // CI/CD — CICD prefix
1180
+ // ═══════════════════════════════════════════════════════════════════════════
1181
+ {
1182
+ id: "cicd-deep-insecure-workflow-patterns",
1183
+ description: "GitHub Actions workflow with multiple security issues",
1184
+ language: "yaml",
1185
+ code: `name: Deploy
1186
+ on:
1187
+ pull_request_target:
1188
+ types: [opened]
1189
+
1190
+ jobs:
1191
+ deploy:
1192
+ runs-on: ubuntu-latest
1193
+ steps:
1194
+ - uses: actions/checkout@v3
1195
+ with:
1196
+ ref: \${{ github.event.pull_request.head.sha }}
1197
+ - run: echo "PR title is \${{ github.event.pull_request.title }}"
1198
+ - run: npm install && npm run build
1199
+ - run: |
1200
+ curl -X POST https://deploy.example.com/api/deploy \\
1201
+ -H "Authorization: Bearer \${{ secrets.DEPLOY_TOKEN }}" \\
1202
+ -d '{"sha": "\${{ github.sha }}"}'
1203
+ - run: echo "$\{{ secrets.AWS_SECRET_KEY }}" > /tmp/key`,
1204
+ expectedRuleIds: ["SEC-001"],
1205
+ category: "cicd",
1206
+ difficulty: "medium",
1207
+ },
1208
+ // ═══════════════════════════════════════════════════════════════════════════
1209
+ // Software Practices — SWDEV prefix
1210
+ // ═══════════════════════════════════════════════════════════════════════════
1211
+ {
1212
+ id: "swdev-deep-weak-types",
1213
+ description: "Excessive use of 'any' type in TypeScript code",
1214
+ language: "typescript",
1215
+ code: `export function processData(data: any): any {
1216
+ const result: any = {};
1217
+ const items: any[] = data.items || [];
1218
+ items.forEach((item: any) => {
1219
+ const key: any = item.id;
1220
+ const value: any = transform(item);
1221
+ result[key] = value;
1222
+ });
1223
+ return result;
1224
+ }
1225
+
1226
+ export function handleEvent(event: any): any {
1227
+ const payload: any = event.data;
1228
+ const meta: any = event.metadata;
1229
+ const config: any = getConfig();
1230
+ return merge(payload, meta, config);
1231
+ }
1232
+
1233
+ export function createService(options: any): any {
1234
+ const client: any = new HttpClient(options);
1235
+ const cache: any = new Cache(options);
1236
+ return { client, cache, options };
1237
+ }
1238
+
1239
+ export function validateInput(input: any): any {
1240
+ if (typeof input !== "object") return { valid: false };
1241
+ const errors: any[] = [];
1242
+ Object.keys(input).forEach((key: any) => {
1243
+ const rule: any = rules[key];
1244
+ if (rule && !rule.test(input[key])) {
1245
+ errors.push({ field: key, message: rule.message });
1246
+ }
1247
+ });
1248
+ return { valid: errors.length === 0, errors };
1249
+ }`,
1250
+ expectedRuleIds: ["SWDEV-001"],
1251
+ category: "software-practices",
1252
+ difficulty: "easy",
1253
+ },
1254
+ {
1255
+ id: "swdev-deep-linter-suppression",
1256
+ description: "Excessive eslint-disable comments throughout the code",
1257
+ language: "typescript",
1258
+ code: `/* eslint-disable @typescript-eslint/no-explicit-any */
1259
+ /* eslint-disable @typescript-eslint/no-unused-vars */
1260
+
1261
+ // eslint-disable-next-line no-console
1262
+ console.log("Starting application");
1263
+
1264
+ export function handler(req: any, res: any) {
1265
+ // eslint-disable-next-line no-eval
1266
+ const result = eval(req.body.expression);
1267
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
1268
+ const data = JSON.parse(req.body.data);
1269
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
1270
+ return data;
1271
+ }
1272
+
1273
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
1274
+ // @ts-ignore
1275
+ import brokenModule from "./broken";
1276
+
1277
+ export function process(input) { // eslint-disable-line @typescript-eslint/explicit-function-return-type
1278
+ // eslint-disable-next-line no-prototype-builtins
1279
+ if (input.hasOwnProperty("key")) {
1280
+ return input.key;
1281
+ }
1282
+ }`,
1283
+ expectedRuleIds: ["SWDEV-001"],
1284
+ category: "software-practices",
1285
+ difficulty: "easy",
1286
+ },
1287
+ // ═══════════════════════════════════════════════════════════════════════════
1288
+ // Structure — STRUCT prefix
1289
+ // ═══════════════════════════════════════════════════════════════════════════
1290
+ {
1291
+ id: "struct-deep-god-file",
1292
+ description: "Monolithic file handling routing, auth, DB, email, and caching",
1293
+ language: "typescript",
1294
+ code: `import express from "express";
1295
+ import nodemailer from "nodemailer";
1296
+ import Redis from "ioredis";
1297
+
1298
+ const app = express();
1299
+ const redis = new Redis();
1300
+ app.use(express.json());
1301
+
1302
+ // Authentication
1303
+ function hashPassword(pw: string) { return require("crypto").createHash("sha256").update(pw).digest("hex"); }
1304
+ function createToken(user: any) { return Buffer.from(JSON.stringify(user)).toString("base64"); }
1305
+
1306
+ // Database
1307
+ const users: any[] = [];
1308
+ const orders: any[] = [];
1309
+ const products: any[] = [];
1310
+
1311
+ // Routes
1312
+ app.post("/register", (req, res) => {
1313
+ const user = { ...req.body, password: hashPassword(req.body.password), id: users.length + 1 };
1314
+ users.push(user);
1315
+ const transporter = nodemailer.createTransport({ host: "smtp.example.com" });
1316
+ transporter.sendMail({ to: user.email, subject: "Welcome", text: "Hello!" });
1317
+ redis.set(\`user:\${user.id}\`, JSON.stringify(user));
1318
+ res.json({ token: createToken(user) });
1319
+ });
1320
+
1321
+ app.post("/orders", (req, res) => {
1322
+ const order = { ...req.body, id: orders.length + 1 };
1323
+ orders.push(order);
1324
+ order.items.forEach((item: any) => {
1325
+ const product = products.find((p: any) => p.id === item.productId);
1326
+ if (product) product.stock -= item.qty;
1327
+ });
1328
+ const transporter = nodemailer.createTransport({ host: "smtp.example.com" });
1329
+ transporter.sendMail({ to: req.body.email, subject: "Order Confirmation", text: "Your order is confirmed!" });
1330
+ redis.set(\`order:\${order.id}\`, JSON.stringify(order));
1331
+ res.json(order);
1332
+ });
1333
+
1334
+ app.get("/products", (req, res) => { res.json(products); });
1335
+ app.get("/users", (req, res) => { res.json(users.map(u => ({ id: u.id, name: u.name }))); });`,
1336
+ expectedRuleIds: [
1337
+ "RATE-001",
1338
+ "CYBER-001",
1339
+ "SCALE-001",
1340
+ "API-001",
1341
+ "UX-001",
1342
+ "OBS-001",
1343
+ "PERF-001",
1344
+ "AUTH-001",
1345
+ "DB-001",
1346
+ "CACHE-001",
1347
+ "COMPAT-001",
1348
+ "AICS-001",
1349
+ "SEC-001",
1350
+ ],
1351
+ category: "structure",
1352
+ difficulty: "medium",
1353
+ },
1354
+ // ═══════════════════════════════════════════════════════════════════════════
1355
+ // CLEAN CODE — FP Validation (quality/ops patterns)
1356
+ // ═══════════════════════════════════════════════════════════════════════════
1357
+ {
1358
+ id: "clean-err-proper-error-handling",
1359
+ description: "Clean: Proper error handling with specific catch and error types",
1360
+ language: "typescript",
1361
+ code: `export class AppError extends Error {
1362
+ constructor(
1363
+ message: string,
1364
+ public readonly code: string,
1365
+ public readonly statusCode: number = 500
1366
+ ) {
1367
+ super(message);
1368
+ this.name = "AppError";
1369
+ }
1370
+ }
1371
+
1372
+ export class NotFoundError extends AppError {
1373
+ constructor(resource: string, id: string) {
1374
+ super(\`\${resource} \${id} not found\`, "NOT_FOUND", 404);
1375
+ }
1376
+ }
1377
+
1378
+ export class ValidationError extends AppError {
1379
+ constructor(public readonly errors: Array<{ field: string; message: string }>) {
1380
+ super("Validation failed", "VALIDATION_ERROR", 400);
1381
+ }
1382
+ }
1383
+
1384
+ export async function getUserById(id: string): Promise<User> {
1385
+ try {
1386
+ const user = await db.users.findUnique({ where: { id } });
1387
+ if (!user) throw new NotFoundError("User", id);
1388
+ return user;
1389
+ } catch (error) {
1390
+ if (error instanceof AppError) throw error;
1391
+ throw new AppError("Failed to fetch user", "DB_ERROR");
1392
+ }
1393
+ }`,
1394
+ expectedRuleIds: [],
1395
+ category: "clean",
1396
+ difficulty: "medium",
1397
+ },
1398
+ {
1399
+ id: "clean-db-transaction-pattern",
1400
+ description: "Clean: Database operations with proper transactions",
1401
+ language: "typescript",
1402
+ code: `import { Pool, PoolClient } from "pg";
1403
+
1404
+ const pool = new Pool({ connectionString: process.env.DATABASE_URL });
1405
+
1406
+ async function withTransaction<T>(fn: (client: PoolClient) => Promise<T>): Promise<T> {
1407
+ const client = await pool.connect();
1408
+ try {
1409
+ await client.query("BEGIN");
1410
+ const result = await fn(client);
1411
+ await client.query("COMMIT");
1412
+ return result;
1413
+ } catch (error) {
1414
+ await client.query("ROLLBACK");
1415
+ throw error;
1416
+ } finally {
1417
+ client.release();
1418
+ }
1419
+ }
1420
+
1421
+ export async function transferFunds(fromId: string, toId: string, amount: number) {
1422
+ return withTransaction(async (client) => {
1423
+ const from = await client.query("SELECT balance FROM accounts WHERE id = $1 FOR UPDATE", [fromId]);
1424
+ if (from.rows[0].balance < amount) throw new Error("Insufficient funds");
1425
+ await client.query("UPDATE accounts SET balance = balance - $1 WHERE id = $2", [amount, fromId]);
1426
+ await client.query("UPDATE accounts SET balance = balance + $1 WHERE id = $2", [amount, toId]);
1427
+ await client.query(
1428
+ "INSERT INTO transfers (from_id, to_id, amount) VALUES ($1, $2, $3)",
1429
+ [fromId, toId, amount]
1430
+ );
1431
+ return { success: true };
1432
+ });
1433
+ }`,
1434
+ expectedRuleIds: [],
1435
+ category: "clean",
1436
+ difficulty: "hard",
1437
+ },
1438
+ {
1439
+ id: "clean-conc-bounded-parallel",
1440
+ description: "Clean: Bounded parallel task execution with p-limit",
1441
+ language: "typescript",
1442
+ code: `import pLimit from "p-limit";
1443
+
1444
+ const limit = pLimit(10);
1445
+
1446
+ export async function processItems(items: Item[]): Promise<Result[]> {
1447
+ const tasks = items.map(item =>
1448
+ limit(async () => {
1449
+ const result = await processItem(item);
1450
+ return result;
1451
+ })
1452
+ );
1453
+ return Promise.all(tasks);
1454
+ }
1455
+
1456
+ export async function fetchAllPages(urls: string[]): Promise<PageData[]> {
1457
+ const concurrency = pLimit(5);
1458
+ const results = await Promise.allSettled(
1459
+ urls.map(url =>
1460
+ concurrency(async () => {
1461
+ const response = await fetch(url);
1462
+ if (!response.ok) throw new Error(\`HTTP \${response.status}\`);
1463
+ return response.json();
1464
+ })
1465
+ )
1466
+ );
1467
+ return results
1468
+ .filter((r): r is PromiseFulfilledResult<PageData> => r.status === "fulfilled")
1469
+ .map(r => r.value);
1470
+ }`,
1471
+ expectedRuleIds: [],
1472
+ category: "clean",
1473
+ difficulty: "medium",
1474
+ },
1475
+ {
1476
+ id: "clean-perf-efficient-lookup",
1477
+ description: "Clean: Efficient data lookup with Map and Set",
1478
+ language: "typescript",
1479
+ code: `export function deduplicateById<T extends { id: string }>(items: T[]): T[] {
1480
+ const seen = new Set<string>();
1481
+ return items.filter(item => {
1482
+ if (seen.has(item.id)) return false;
1483
+ seen.add(item.id);
1484
+ return true;
1485
+ });
1486
+ }
1487
+
1488
+ export function indexByField<T>(items: T[], field: keyof T): Map<string, T[]> {
1489
+ const index = new Map<string, T[]>();
1490
+ for (const item of items) {
1491
+ const key = String(item[field]);
1492
+ const group = index.get(key) ?? [];
1493
+ group.push(item);
1494
+ index.set(key, group);
1495
+ }
1496
+ return index;
1497
+ }
1498
+
1499
+ export function findCommon<T extends { sku: string }>(
1500
+ listA: T[], listB: T[], listC: T[]
1501
+ ): T[] {
1502
+ const setB = new Set(listB.map(b => b.sku));
1503
+ const setC = new Set(listC.map(c => c.sku));
1504
+ return listA.filter(a => setB.has(a.sku) && setC.has(a.sku));
1505
+ }`,
1506
+ expectedRuleIds: [],
1507
+ category: "clean",
1508
+ difficulty: "easy",
1509
+ },
1510
+ {
1511
+ id: "clean-obs-structured-logging",
1512
+ description: "Clean: Structured logging with proper log levels",
1513
+ language: "typescript",
1514
+ code: `import pino from "pino";
1515
+ import express from "express";
1516
+
1517
+ const logger = pino({
1518
+ level: process.env.LOG_LEVEL || "info",
1519
+ serializers: pino.stdSerializers,
1520
+ });
1521
+
1522
+ const app = express();
1523
+
1524
+ app.use((req, res, next) => {
1525
+ const start = process.hrtime.bigint();
1526
+ res.on("finish", () => {
1527
+ const duration = Number(process.hrtime.bigint() - start) / 1e6;
1528
+ logger.info({
1529
+ method: req.method,
1530
+ url: req.url,
1531
+ statusCode: res.statusCode,
1532
+ durationMs: Math.round(duration),
1533
+ }, "request completed");
1534
+ });
1535
+ next();
1536
+ });
1537
+
1538
+ app.get("/health", (req, res) => {
1539
+ res.json({ status: "ok", uptime: process.uptime() });
1540
+ });
1541
+
1542
+ app.get("/ready", async (req, res) => {
1543
+ try {
1544
+ await db.query("SELECT 1");
1545
+ res.json({ status: "ready" });
1546
+ } catch (error) {
1547
+ logger.error({ error }, "readiness check failed");
1548
+ res.status(503).json({ status: "not ready" });
1549
+ }
1550
+ });`,
1551
+ expectedRuleIds: [],
1552
+ category: "clean",
1553
+ difficulty: "medium",
1554
+ },
1555
+ {
1556
+ id: "clean-maint-named-constants",
1557
+ description: "Clean: Named constants instead of magic numbers",
1558
+ language: "typescript",
1559
+ code: `const SHIPPING_RATES = {
1560
+ LIGHT_MAX_WEIGHT_KG: 2.5,
1561
+ LIGHT_RATE: 5.99,
1562
+ MEDIUM_MAX_WEIGHT_KG: 10,
1563
+ MEDIUM_RATE: 12.49,
1564
+ HEAVY_MAX_WEIGHT_KG: 25,
1565
+ HEAVY_RATE: 24.99,
1566
+ LONG_DISTANCE_KM: 500,
1567
+ LONG_DISTANCE_SURCHARGE: 15.0,
1568
+ } as const;
1569
+
1570
+ const ELIGIBILITY = {
1571
+ MIN_AGE: 18,
1572
+ MAX_AGE: 65,
1573
+ MIN_CREDIT_SCORE: 720,
1574
+ MAX_CREDIT_SCORE: 850,
1575
+ } as const;
1576
+
1577
+ function calculateShipping(weightKg: number, distanceKm: number): number {
1578
+ if (weightKg < SHIPPING_RATES.LIGHT_MAX_WEIGHT_KG) return SHIPPING_RATES.LIGHT_RATE;
1579
+ if (weightKg < SHIPPING_RATES.MEDIUM_MAX_WEIGHT_KG) return SHIPPING_RATES.MEDIUM_RATE;
1580
+ if (weightKg < SHIPPING_RATES.HEAVY_MAX_WEIGHT_KG) return SHIPPING_RATES.HEAVY_RATE;
1581
+ if (distanceKm > SHIPPING_RATES.LONG_DISTANCE_KM) {
1582
+ return weightKg * 0.85 + SHIPPING_RATES.LONG_DISTANCE_SURCHARGE;
1583
+ }
1584
+ return weightKg * 0.45 + SHIPPING_RATES.LIGHT_RATE;
1585
+ }
1586
+
1587
+ function isEligible(age: number, creditScore: number): boolean {
1588
+ return (
1589
+ age >= ELIGIBILITY.MIN_AGE &&
1590
+ age <= ELIGIBILITY.MAX_AGE &&
1591
+ creditScore >= ELIGIBILITY.MIN_CREDIT_SCORE &&
1592
+ creditScore <= ELIGIBILITY.MAX_CREDIT_SCORE
1593
+ );
1594
+ }`,
1595
+ expectedRuleIds: [],
1596
+ category: "clean",
1597
+ difficulty: "easy",
1598
+ },
1599
+ {
1600
+ id: "clean-test-isolated-tests",
1601
+ description: "Clean: Isolated test with proper setup/teardown",
1602
+ language: "typescript",
1603
+ code: `import { createTestDb, cleanupTestDb } from "./test-helpers";
1604
+
1605
+ describe("UserService", () => {
1606
+ let db: TestDb;
1607
+ let service: UserService;
1608
+
1609
+ beforeEach(async () => {
1610
+ db = await createTestDb();
1611
+ service = new UserService(db);
1612
+ });
1613
+
1614
+ afterEach(async () => {
1615
+ await cleanupTestDb(db);
1616
+ });
1617
+
1618
+ it("should create a user with valid data", async () => {
1619
+ const user = await service.create({ name: "Alice", email: "alice@example.com" });
1620
+ expect(user.id).toBeDefined();
1621
+ expect(user.name).toBe("Alice");
1622
+ expect(user.email).toBe("alice@example.com");
1623
+ });
1624
+
1625
+ it("should reject duplicate emails", async () => {
1626
+ await service.create({ name: "Alice", email: "alice@example.com" });
1627
+ await expect(
1628
+ service.create({ name: "Bob", email: "alice@example.com" })
1629
+ ).rejects.toThrow("Email already exists");
1630
+ });
1631
+
1632
+ it("should return null for nonexistent user", async () => {
1633
+ const user = await service.findById("nonexistent-id");
1634
+ expect(user).toBeNull();
1635
+ });
1636
+ });`,
1637
+ expectedRuleIds: [],
1638
+ category: "clean",
1639
+ difficulty: "easy",
1640
+ },
1641
+ {
1642
+ id: "clean-go-proper-errors",
1643
+ description: "Clean: Go code with proper error handling and wrapping",
1644
+ language: "go",
1645
+ code: `package main
1646
+
1647
+ import (
1648
+ "database/sql"
1649
+ "encoding/json"
1650
+ "fmt"
1651
+ "os"
1652
+ )
1653
+
1654
+ type Config struct {
1655
+ DBHost string \`json:"db_host"\`
1656
+ DBPort int \`json:"db_port"\`
1657
+ }
1658
+
1659
+ func loadConfig(path string) (*Config, error) {
1660
+ data, err := os.ReadFile(path)
1661
+ if err != nil {
1662
+ return nil, fmt.Errorf("reading config file: %w", err)
1663
+ }
1664
+ var config Config
1665
+ if err := json.Unmarshal(data, &config); err != nil {
1666
+ return nil, fmt.Errorf("parsing config JSON: %w", err)
1667
+ }
1668
+ return &config, nil
1669
+ }
1670
+
1671
+ func saveRecord(db *sql.DB, name string) error {
1672
+ _, err := db.Exec("INSERT INTO records (name) VALUES ($1)", name)
1673
+ if err != nil {
1674
+ return fmt.Errorf("inserting record %q: %w", name, err)
1675
+ }
1676
+ return nil
1677
+ }`,
1678
+ expectedRuleIds: [],
1679
+ category: "clean",
1680
+ difficulty: "easy",
1681
+ },
1682
+ {
1683
+ id: "clean-python-proper-exceptions",
1684
+ description: "Clean: Python with specific exception handling and custom errors",
1685
+ language: "python",
1686
+ code: `import json
1687
+ import logging
1688
+ from pathlib import Path
1689
+ from typing import Any
1690
+
1691
+ logger = logging.getLogger(__name__)
1692
+
1693
+ class ConfigError(Exception):
1694
+ pass
1695
+
1696
+ class ValidationError(Exception):
1697
+ def __init__(self, field: str, message: str):
1698
+ self.field = field
1699
+ super().__init__(f"{field}: {message}")
1700
+
1701
+ def load_config(path: str) -> dict[str, Any]:
1702
+ config_path = Path(path)
1703
+ if not config_path.exists():
1704
+ raise ConfigError(f"Config file not found: {path}")
1705
+ try:
1706
+ with open(config_path) as f:
1707
+ config = json.load(f)
1708
+ except json.JSONDecodeError as e:
1709
+ raise ConfigError(f"Invalid JSON in {path}: {e}") from e
1710
+ required = ["api_url", "db_host"]
1711
+ missing = [k for k in required if k not in config]
1712
+ if missing:
1713
+ raise ConfigError(f"Missing required keys: {', '.join(missing)}")
1714
+ return config
1715
+
1716
+ def process_record(record: dict) -> dict:
1717
+ if not isinstance(record.get("name"), str) or len(record["name"]) < 1:
1718
+ raise ValidationError("name", "must be a non-empty string")
1719
+ if not isinstance(record.get("age"), int) or record["age"] < 0:
1720
+ raise ValidationError("age", "must be a non-negative integer")
1721
+ return {"processed": True, **record}`,
1722
+ expectedRuleIds: [],
1723
+ category: "clean",
1724
+ difficulty: "easy",
1725
+ },
1726
+ {
1727
+ id: "clean-doc-well-documented-api",
1728
+ description: "Clean: Well-documented TypeScript API with JSDoc",
1729
+ language: "typescript",
1730
+ code: `/**
1731
+ * User management service for handling CRUD operations.
1732
+ *
1733
+ * @example
1734
+ * const service = new UserService(database);
1735
+ * const user = await service.create({ name: "Alice", email: "alice@example.com" });
1736
+ */
1737
+ export class UserService {
1738
+ constructor(private readonly db: Database) {}
1739
+
1740
+ /**
1741
+ * Create a new user with the given details.
1742
+ *
1743
+ * @param data - The user creation payload
1744
+ * @returns The newly created user with generated ID
1745
+ * @throws {ValidationError} If email is invalid or name is empty
1746
+ * @throws {ConflictError} If email already exists
1747
+ */
1748
+ async create(data: CreateUserInput): Promise<User> {
1749
+ this.validate(data);
1750
+ return this.db.users.create({ data });
1751
+ }
1752
+
1753
+ /**
1754
+ * Find a user by their unique identifier.
1755
+ *
1756
+ * @param id - The user's UUID
1757
+ * @returns The user if found, null otherwise
1758
+ */
1759
+ async findById(id: string): Promise<User | null> {
1760
+ return this.db.users.findUnique({ where: { id } });
1761
+ }
1762
+
1763
+ /**
1764
+ * Update a user's profile information.
1765
+ *
1766
+ * @param id - The user's UUID
1767
+ * @param updates - Partial user data to merge
1768
+ * @returns The updated user
1769
+ * @throws {NotFoundError} If user does not exist
1770
+ */
1771
+ async update(id: string, updates: Partial<CreateUserInput>): Promise<User> {
1772
+ const existing = await this.findById(id);
1773
+ if (!existing) throw new NotFoundError("User", id);
1774
+ return this.db.users.update({ where: { id }, data: updates });
1775
+ }
1776
+
1777
+ private validate(data: CreateUserInput): void {
1778
+ if (!data.name || data.name.trim().length === 0) {
1779
+ throw new ValidationError("Name is required");
1780
+ }
1781
+ if (!data.email || !data.email.includes("@")) {
1782
+ throw new ValidationError("Valid email is required");
1783
+ }
1784
+ }
1785
+ }`,
1786
+ expectedRuleIds: [],
1787
+ category: "clean",
1788
+ difficulty: "medium",
1789
+ },
1790
+ {
1791
+ id: "clean-cicd-secure-workflow",
1792
+ description: "Clean: Secure GitHub Actions workflow with pinned actions",
1793
+ language: "yaml",
1794
+ code: `name: CI
1795
+ on:
1796
+ push:
1797
+ branches: [main]
1798
+ pull_request:
1799
+ branches: [main]
1800
+
1801
+ permissions:
1802
+ contents: read
1803
+
1804
+ jobs:
1805
+ test:
1806
+ runs-on: ubuntu-latest
1807
+ steps:
1808
+ - uses: actions/checkout@v4
1809
+ - uses: actions/setup-node@v4
1810
+ with:
1811
+ node-version: 20
1812
+ cache: npm
1813
+ - run: npm ci
1814
+ - run: npm test
1815
+ - run: npm run lint
1816
+ - run: npm audit --audit-level=high`,
1817
+ expectedRuleIds: [],
1818
+ category: "clean",
1819
+ difficulty: "easy",
1820
+ },
1821
+ {
1822
+ id: "clean-struct-modular-service",
1823
+ description: "Clean: Well-structured modular service with separation of concerns",
1824
+ language: "typescript",
1825
+ code: `// types.ts
1826
+ export interface Order {
1827
+ id: string;
1828
+ userId: string;
1829
+ items: OrderItem[];
1830
+ total: number;
1831
+ status: OrderStatus;
1832
+ }
1833
+
1834
+ export type OrderStatus = "pending" | "confirmed" | "shipped" | "delivered";
1835
+
1836
+ // order-repository.ts
1837
+ export class OrderRepository {
1838
+ constructor(private readonly db: Database) {}
1839
+
1840
+ async findById(id: string): Promise<Order | null> {
1841
+ return this.db.orders.findUnique({ where: { id }, include: { items: true } });
1842
+ }
1843
+
1844
+ async create(data: CreateOrderInput): Promise<Order> {
1845
+ return this.db.orders.create({ data });
1846
+ }
1847
+ }
1848
+
1849
+ // order-service.ts
1850
+ export class OrderService {
1851
+ constructor(
1852
+ private readonly repo: OrderRepository,
1853
+ private readonly notifier: NotificationService,
1854
+ private readonly logger: Logger,
1855
+ ) {}
1856
+
1857
+ async placeOrder(input: CreateOrderInput): Promise<Order> {
1858
+ const order = await this.repo.create(input);
1859
+ this.logger.info({ orderId: order.id }, "Order placed");
1860
+ await this.notifier.sendOrderConfirmation(order);
1861
+ return order;
1862
+ }
1863
+ }`,
1864
+ expectedRuleIds: [],
1865
+ category: "clean",
1866
+ difficulty: "medium",
1867
+ },
1868
+ // ═══════════════════════════════════════════════════════════════════════════
1869
+ // Additional Error Handling, DB, Testing, and Ops cases
1870
+ // ═══════════════════════════════════════════════════════════════════════════
1871
+ {
1872
+ id: "err-swallowed-promise-ts",
1873
+ description: "Promises with .catch that swallows errors silently",
1874
+ language: "typescript",
1875
+ code: `async function sendNotification(userId: string, msg: string) {
1876
+ fetch("/api/notify", {
1877
+ method: "POST",
1878
+ body: JSON.stringify({ userId, msg }),
1879
+ }).catch(() => {});
1880
+ }
1881
+
1882
+ async function logAudit(action: string) {
1883
+ db.query("INSERT INTO audit_log (action) VALUES ($1)", [action]).catch(() => {});
1884
+ }
1885
+
1886
+ async function syncExternal() {
1887
+ fetch("https://partner-api.com/sync").catch(() => {});
1888
+ }`,
1889
+ expectedRuleIds: ["REL-001", "SCALE-001"],
1890
+ category: "error-handling",
1891
+ difficulty: "medium",
1892
+ },
1893
+ {
1894
+ id: "err-generic-catch-all-py",
1895
+ description: "Python code catching bare Exception and returning None",
1896
+ language: "python",
1897
+ code: `def parse_config(path):
1898
+ try:
1899
+ with open(path) as f:
1900
+ return yaml.safe_load(f)
1901
+ except Exception:
1902
+ return None
1903
+
1904
+ def connect_database(url):
1905
+ try:
1906
+ return psycopg2.connect(url)
1907
+ except Exception:
1908
+ return None
1909
+
1910
+ def send_email(to, subject, body):
1911
+ try:
1912
+ smtp.send_message(to, subject, body)
1913
+ except Exception:
1914
+ pass`,
1915
+ expectedRuleIds: ["ERR-001"],
1916
+ category: "error-handling",
1917
+ difficulty: "easy",
1918
+ },
1919
+ {
1920
+ id: "db-raw-queries-with-interpolation-ts",
1921
+ description: "TypeScript using string interpolation in SQL queries",
1922
+ language: "typescript",
1923
+ code: `async function searchProducts(name: string, category: string) {
1924
+ const query = \`SELECT * FROM products WHERE name LIKE '%\${name}%' AND category = '\${category}'\`;
1925
+ return db.query(query);
1926
+ }
1927
+
1928
+ async function deleteUser(userId: string) {
1929
+ return db.query(\`DELETE FROM users WHERE id = '\${userId}'\`);
1930
+ }`,
1931
+ expectedRuleIds: ["DB-001", "CYBER-001"],
1932
+ category: "database",
1933
+ difficulty: "easy",
1934
+ },
1935
+ {
1936
+ id: "db-missing-transaction-py",
1937
+ description: "Multi-step database operation without transaction boundaries",
1938
+ language: "python",
1939
+ code: `def transfer_funds(from_id, to_id, amount):
1940
+ from_balance = db.execute("SELECT balance FROM accounts WHERE id = %s", (from_id,)).fetchone()[0]
1941
+ if from_balance < amount:
1942
+ raise ValueError("Insufficient funds")
1943
+ db.execute("UPDATE accounts SET balance = balance - %s WHERE id = %s", (amount, from_id))
1944
+ db.execute("UPDATE accounts SET balance = balance + %s WHERE id = %s", (amount, to_id))
1945
+ db.execute("INSERT INTO transfers (from_id, to_id, amount) VALUES (%s, %s, %s)", (from_id, to_id, amount))`,
1946
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
1947
+ category: "database",
1948
+ difficulty: "medium",
1949
+ },
1950
+ {
1951
+ id: "test-mocking-implementation-ts",
1952
+ description: "Tests that mock so heavily they test nothing real",
1953
+ language: "typescript",
1954
+ code: `describe("OrderService", () => {
1955
+ it("should create an order", async () => {
1956
+ const mockDb = { create: jest.fn().mockResolvedValue({ id: "1" }) };
1957
+ const mockPayment = { charge: jest.fn().mockResolvedValue({ success: true }) };
1958
+ const mockEmail = { send: jest.fn().mockResolvedValue(undefined) };
1959
+ const mockLogger = { info: jest.fn(), error: jest.fn() };
1960
+ const mockCache = { get: jest.fn(), set: jest.fn() };
1961
+ const mockMetrics = { increment: jest.fn() };
1962
+ const service = new OrderService(mockDb as any, mockPayment as any, mockEmail as any, mockLogger as any, mockCache as any, mockMetrics as any);
1963
+ const result = await service.createOrder({ item: "A", qty: 1 });
1964
+ expect(mockDb.create).toHaveBeenCalled();
1965
+ });
1966
+ });`,
1967
+ expectedRuleIds: ["TEST-001"],
1968
+ category: "testing",
1969
+ difficulty: "hard",
1970
+ },
1971
+ {
1972
+ id: "test-no-negative-tests-go",
1973
+ description: "Go test file with only positive cases, no error scenarios",
1974
+ language: "go",
1975
+ code: `package service
1976
+
1977
+ import "testing"
1978
+
1979
+ func TestCreateUser(t *testing.T) {
1980
+ user, err := svc.CreateUser("alice", "alice@example.com")
1981
+ if err != nil { t.Fatal(err) }
1982
+ if user.Name != "alice" { t.Fatalf("expected alice, got %s", user.Name) }
1983
+ }
1984
+
1985
+ func TestGetUser(t *testing.T) {
1986
+ user, err := svc.GetUser("123")
1987
+ if err != nil { t.Fatal(err) }
1988
+ if user.ID != "123" { t.Fatalf("expected 123, got %s", user.ID) }
1989
+ }
1990
+
1991
+ func TestListUsers(t *testing.T) {
1992
+ users, err := svc.ListUsers()
1993
+ if err != nil { t.Fatal(err) }
1994
+ if len(users) == 0 { t.Fatal("expected users") }
1995
+ }`,
1996
+ expectedRuleIds: ["TEST-001"],
1997
+ category: "testing",
1998
+ difficulty: "medium",
1999
+ },
2000
+ {
2001
+ id: "perf-regex-in-loop-py",
2002
+ description: "Compiling regex inside a tight loop instead of once",
2003
+ language: "python",
2004
+ code: `def extract_emails(texts):
2005
+ results = []
2006
+ for text in texts:
2007
+ import re
2008
+ pattern = re.compile(r'[\\w.+-]+@[\\w-]+\\.[\\w.]+')
2009
+ matches = pattern.findall(text)
2010
+ results.extend(matches)
2011
+ return results
2012
+
2013
+ def validate_phones(entries):
2014
+ valid = []
2015
+ for entry in entries:
2016
+ import re
2017
+ if re.match(r'^\\+?1?\\d{9,15}$', entry.phone):
2018
+ valid.append(entry)
2019
+ return valid`,
2020
+ expectedRuleIds: ["PERF-001"],
2021
+ category: "performance",
2022
+ difficulty: "easy",
2023
+ },
2024
+ {
2025
+ id: "perf-redundant-json-serialization-ts",
2026
+ description: "Repeatedly serializing and deserializing JSON unnecessarily",
2027
+ language: "typescript",
2028
+ code: `function processItems(items: Item[]) {
2029
+ for (const item of items) {
2030
+ const serialized = JSON.stringify(item);
2031
+ const copy = JSON.parse(serialized);
2032
+ const validated = JSON.parse(JSON.stringify(copy));
2033
+ const logged = JSON.stringify(validated);
2034
+ console.log(logged);
2035
+ const final = JSON.parse(logged);
2036
+ results.push(final);
2037
+ }
2038
+ }`,
2039
+ expectedRuleIds: ["COST-001"],
2040
+ category: "performance",
2041
+ difficulty: "easy",
2042
+ },
2043
+ {
2044
+ id: "obs-no-trace-spans-java",
2045
+ description: "Java microservice without distributed tracing spans",
2046
+ language: "java",
2047
+ code: `@RestController
2048
+ public class OrderController {
2049
+ @Autowired private OrderService orderService;
2050
+ @Autowired private PaymentService paymentService;
2051
+ @Autowired private NotificationService notificationService;
2052
+
2053
+ @PostMapping("/api/orders")
2054
+ public ResponseEntity<Order> createOrder(@RequestBody CreateOrderRequest req) {
2055
+ Order order = orderService.create(req);
2056
+ paymentService.charge(order.getTotal(), req.getPaymentMethod());
2057
+ notificationService.sendConfirmation(order.getUserId(), order.getId());
2058
+ return ResponseEntity.ok(order);
2059
+ }
2060
+ }`,
2061
+ expectedRuleIds: ["OBS-001"],
2062
+ category: "observability",
2063
+ difficulty: "medium",
2064
+ },
2065
+ {
2066
+ id: "maint-magic-numbers-ts",
2067
+ description: "Code with unexplained magic numbers throughout",
2068
+ language: "typescript",
2069
+ code: `function calculateShipping(weight: number, distance: number): number {
2070
+ if (weight < 2.5) return distance * 0.0035 + 3.99;
2071
+ if (weight < 10) return distance * 0.0078 + 7.49;
2072
+ if (weight < 25) return distance * 0.0142 + 14.99;
2073
+ if (distance > 500) return weight * 0.85 + 24.99;
2074
+ return weight * 0.45 + 12.99 + (distance > 200 ? 5.0 : 0);
2075
+ }
2076
+
2077
+ function adjustPrice(base: number, qty: number): number {
2078
+ if (qty > 100) return base * 0.72;
2079
+ if (qty > 50) return base * 0.85;
2080
+ if (qty > 10) return base * 0.92;
2081
+ return base;
2082
+ }`,
2083
+ expectedRuleIds: ["MAINT-001"],
2084
+ category: "maintainability",
2085
+ difficulty: "easy",
2086
+ },
2087
+ {
2088
+ id: "maint-dead-code-py",
2089
+ description: "Python module with large blocks of dead/unreachable code",
2090
+ language: "python",
2091
+ code: `def process_data(items):
2092
+ results = []
2093
+ for item in items:
2094
+ results.append(transform(item))
2095
+ return results
2096
+
2097
+ # Old implementation — never reached
2098
+ legacy_results = []
2099
+ for item in items:
2100
+ if item.get("type") == "A":
2101
+ legacy_results.append(old_transform_a(item))
2102
+ elif item.get("type") == "B":
2103
+ legacy_results.append(old_transform_b(item))
2104
+ else:
2105
+ legacy_results.append(item)
2106
+ return legacy_results
2107
+
2108
+ def old_transform_a(item):
2109
+ pass # deprecated but still in codebase
2110
+
2111
+ def old_transform_b(item):
2112
+ pass # deprecated but still in codebase`,
2113
+ expectedRuleIds: ["LOGIC-001"],
2114
+ category: "maintainability",
2115
+ difficulty: "easy",
2116
+ },
2117
+ {
2118
+ id: "doc-misleading-comments-ts",
2119
+ description: "Code with comments that contradict the actual implementation",
2120
+ language: "typescript",
2121
+ code: `// Adds the user to the premium tier
2122
+ function removeUser(userId: string) {
2123
+ db.delete("users", userId);
2124
+ }
2125
+
2126
+ // Returns the sum of all items
2127
+ function getAverage(items: number[]): number {
2128
+ return items.reduce((a, b) => a + b, 0) / items.length;
2129
+ }
2130
+
2131
+ // This function is never called
2132
+ export function processOrders() {
2133
+ // called from 5 routes
2134
+ const orders = db.query("SELECT * FROM orders WHERE status = 'pending'");
2135
+ return orders.map(o => ({ ...o, processed: true }));
2136
+ }`,
2137
+ expectedRuleIds: ["API-001"],
2138
+ category: "documentation",
2139
+ difficulty: "easy",
2140
+ },
2141
+ {
2142
+ id: "doc-outdated-readme-example-py",
2143
+ description: "README code example using deprecated API that no longer works",
2144
+ language: "python",
2145
+ code: `# # Quick Start
2146
+ # \`\`\`python
2147
+ # from mylib import Client
2148
+ #
2149
+ # client = Client(api_key="your-key")
2150
+ # result = client.query("SELECT * FROM data") # query() was removed in v3
2151
+ # client.close() # close() renamed to disconnect() in v2
2152
+ # \`\`\`
2153
+ #
2154
+ # ## Configuration
2155
+ # Set MYLIB_HOST (removed in v4, now uses MYLIB_URL)
2156
+ # Set MYLIB_PORT (no longer needed)
2157
+ # Set MYLIB_SSL=true (now always enabled)`,
2158
+ expectedRuleIds: ["DOC-001"],
2159
+ category: "documentation",
2160
+ difficulty: "medium",
2161
+ },
2162
+ {
2163
+ id: "cicd-no-test-stage-yaml",
2164
+ description: "CI pipeline that deploys without running tests first",
2165
+ language: "yaml",
2166
+ code: `name: Deploy to Production
2167
+ on:
2168
+ push:
2169
+ branches: [main]
2170
+
2171
+ jobs:
2172
+ deploy:
2173
+ runs-on: ubuntu-latest
2174
+ steps:
2175
+ - uses: actions/checkout@v4
2176
+ - run: npm install
2177
+ - run: npm run build
2178
+ - run: aws s3 sync build/ s3://prod-bucket/
2179
+ - run: aws cloudfront create-invalidation --distribution-id EXAMPLE --paths '/*'`,
2180
+ expectedRuleIds: ["CICD-001"],
2181
+ category: "ci-cd",
2182
+ difficulty: "easy",
2183
+ },
2184
+ {
2185
+ id: "cicd-hardcoded-creds-in-pipeline-yaml",
2186
+ description: "CI pipeline with credentials hardcoded in workflow file",
2187
+ language: "yaml",
2188
+ code: `name: Deploy
2189
+ on: push
2190
+
2191
+ jobs:
2192
+ deploy:
2193
+ runs-on: ubuntu-latest
2194
+ env:
2195
+ AWS_ACCESS_KEY_ID: AKIAIOSFODNN7EXAMPLE
2196
+ AWS_SECRET_ACCESS_KEY: wJalrXUtnFEMI/K7MDENG/bPxRfiCYzz
2197
+ DATABASE_URL: postgres://admin:P@ssw0rd@prod-db.example.com:5432/main
2198
+ steps:
2199
+ - uses: actions/checkout@v4
2200
+ - run: npm run deploy`,
2201
+ expectedRuleIds: ["CICD-001"],
2202
+ category: "ci-cd",
2203
+ difficulty: "easy",
2204
+ },
2205
+ {
2206
+ id: "scale-no-backpressure-ts",
2207
+ description: "Message consumer processing without backpressure control",
2208
+ language: "typescript",
2209
+ code: `async function consumeMessages(queue: MessageQueue) {
2210
+ while (true) {
2211
+ const messages = await queue.receive(100);
2212
+ // Process all messages concurrently with no limit
2213
+ await Promise.all(messages.map(async (msg) => {
2214
+ const data = JSON.parse(msg.body);
2215
+ await processRecord(data);
2216
+ await enrichFromExternalAPI(data);
2217
+ await saveToDatabase(data);
2218
+ await queue.ack(msg);
2219
+ }));
2220
+ }
2221
+ }`,
2222
+ expectedRuleIds: ["COST-001", "PERF-001"],
2223
+ category: "scalability",
2224
+ difficulty: "hard",
2225
+ },
2226
+ {
2227
+ id: "conc-toctou-race-py",
2228
+ description: "TOCTOU race condition checking file then operating on it",
2229
+ language: "python",
2230
+ code: `import os
2231
+
2232
+ def safe_write(path, data):
2233
+ if not os.path.exists(path):
2234
+ # Race: file may be created between check and write
2235
+ with open(path, "w") as f:
2236
+ f.write(data)
2237
+ else:
2238
+ raise FileExistsError(f"{path} already exists")
2239
+
2240
+ def safe_delete(path):
2241
+ if os.path.isfile(path):
2242
+ # Race: file may be deleted between check and delete
2243
+ os.remove(path)`,
2244
+ expectedRuleIds: ["ERR-001"],
2245
+ category: "concurrency",
2246
+ difficulty: "hard",
2247
+ },
2248
+ {
2249
+ id: "rel-no-retry-logic-ts",
2250
+ description: "API calls to external services with no retry/backoff logic",
2251
+ language: "typescript",
2252
+ code: `async function chargePayment(orderId: string, amount: number) {
2253
+ const response = await fetch("https://payment-api.com/charge", {
2254
+ method: "POST",
2255
+ body: JSON.stringify({ orderId, amount }),
2256
+ });
2257
+ if (!response.ok) throw new Error("Payment failed");
2258
+ return response.json();
2259
+ }
2260
+
2261
+ async function sendSMS(phone: string, message: string) {
2262
+ const response = await fetch("https://sms-api.com/send", {
2263
+ method: "POST",
2264
+ body: JSON.stringify({ phone, message }),
2265
+ });
2266
+ return response.json();
2267
+ }`,
2268
+ expectedRuleIds: ["REL-001"],
2269
+ category: "reliability",
2270
+ difficulty: "medium",
2271
+ },
2272
+ {
2273
+ id: "clean-well-structured-modules-py",
2274
+ description: "Python code with clean module organization and proper typing",
2275
+ language: "python",
2276
+ code: `from dataclasses import dataclass
2277
+ from typing import Optional
2278
+ from datetime import datetime
2279
+
2280
+ @dataclass(frozen=True)
2281
+ class User:
2282
+ id: str
2283
+ name: str
2284
+ email: str
2285
+ created_at: datetime
2286
+ role: str = "user"
2287
+
2288
+ class UserRepository:
2289
+ def __init__(self, db):
2290
+ self._db = db
2291
+
2292
+ def find_by_id(self, user_id: str) -> Optional[User]:
2293
+ row = self._db.execute(
2294
+ "SELECT id, name, email, created_at, role FROM users WHERE id = %s",
2295
+ (user_id,)
2296
+ ).fetchone()
2297
+ if not row:
2298
+ return None
2299
+ return User(**row._asdict())
2300
+
2301
+ def find_by_email(self, email: str) -> Optional[User]:
2302
+ row = self._db.execute(
2303
+ "SELECT id, name, email, created_at, role FROM users WHERE email = %s",
2304
+ (email,)
2305
+ ).fetchone()
2306
+ if not row:
2307
+ return None
2308
+ return User(**row._asdict())`,
2309
+ expectedRuleIds: [],
2310
+ unexpectedRuleIds: ["STRUCT", "MAINT", "DOC", "DB"],
2311
+ category: "clean",
2312
+ difficulty: "medium",
2313
+ },
2314
+ {
2315
+ id: "clean-proper-concurrency-ts",
2316
+ description: "TypeScript with proper bounded concurrency and error handling",
2317
+ language: "typescript",
2318
+ code: `import pLimit from "p-limit";
2319
+
2320
+ const limit = pLimit(5);
2321
+
2322
+ async function processItems(items: Item[]): Promise<Result[]> {
2323
+ const results = await Promise.allSettled(
2324
+ items.map(item => limit(async () => {
2325
+ const response = await fetch(item.url, {
2326
+ signal: AbortSignal.timeout(5000),
2327
+ });
2328
+ if (!response.ok) {
2329
+ throw new Error(\`HTTP \${response.status} for \${item.id}\`);
2330
+ }
2331
+ return response.json();
2332
+ }))
2333
+ );
2334
+
2335
+ const successes = results.filter(r => r.status === "fulfilled").map(r => (r as PromiseFulfilledResult<Result>).value);
2336
+ const failures = results.filter(r => r.status === "rejected");
2337
+ if (failures.length > 0) {
2338
+ logger.warn(\`\${failures.length} items failed\`, { failures: failures.map(f => (f as PromiseRejectedResult).reason.message) });
2339
+ }
2340
+ return successes;
2341
+ }`,
2342
+ expectedRuleIds: [],
2343
+ unexpectedRuleIds: ["CONC", "PERF", "ERR", "REL"],
2344
+ category: "clean",
2345
+ difficulty: "hard",
2346
+ },
2347
+ // ═══════════════════════════════════════════════════════════════════════════
2348
+ // Additional TP cases for under-represented judges (STRUCT, DOC, UX, TEST, MAINT)
2349
+ // These dilute per-judge FP rates below 30% by adding unambiguous violations.
2350
+ // ═══════════════════════════════════════════════════════════════════════════
2351
+ // ─── STRUCT TP cases (need 2 more) ────────────────────────────────────────
2352
+ {
2353
+ id: "struct-tp-complex-event-router",
2354
+ description: "Event router with extremely high cyclomatic complexity",
2355
+ language: "typescript",
2356
+ code: `export function routeEvent(event: { type: string; source: string; priority: number; payload: any }) {
2357
+ if (event.type === "click" && event.source === "button") {
2358
+ if (event.priority > 5) {
2359
+ return handleHighPriorityClick(event.payload);
2360
+ } else if (event.priority > 2) {
2361
+ return handleMediumPriorityClick(event.payload);
2362
+ } else {
2363
+ return handleLowPriorityClick(event.payload);
2364
+ }
2365
+ } else if (event.type === "hover" && event.source === "menu") {
2366
+ if (event.priority > 3) {
2367
+ return expandMenu(event.payload);
2368
+ } else {
2369
+ return highlightMenu(event.payload);
2370
+ }
2371
+ } else if (event.type === "scroll") {
2372
+ if (event.source === "page") {
2373
+ if (event.priority > 7) {
2374
+ return loadMoreContent(event.payload);
2375
+ } else {
2376
+ return updateScrollbar(event.payload);
2377
+ }
2378
+ } else if (event.source === "modal") {
2379
+ return scrollModal(event.payload);
2380
+ }
2381
+ } else if (event.type === "keydown") {
2382
+ if (event.payload.key === "Enter") {
2383
+ return submitForm(event.payload);
2384
+ } else if (event.payload.key === "Escape") {
2385
+ return closeDialog(event.payload);
2386
+ } else if (event.payload.key === "Tab") {
2387
+ return focusNext(event.payload);
2388
+ } else if (event.payload.key === "ArrowDown") {
2389
+ return navigateDown(event.payload);
2390
+ } else if (event.payload.key === "ArrowUp") {
2391
+ return navigateUp(event.payload);
2392
+ }
2393
+ } else if (event.type === "resize") {
2394
+ if (event.source === "window") {
2395
+ return handleWindowResize(event.payload);
2396
+ } else {
2397
+ return handleElementResize(event.payload);
2398
+ }
2399
+ } else if (event.type === "focus") {
2400
+ return handleFocus(event.payload);
2401
+ } else if (event.type === "blur") {
2402
+ return handleBlur(event.payload);
2403
+ }
2404
+ return null;
2405
+ }`,
2406
+ expectedRuleIds: ["STRUCT-001"],
2407
+ category: "code-quality",
2408
+ difficulty: "medium",
2409
+ },
2410
+ {
2411
+ id: "struct-tp-permission-resolver",
2412
+ description: "Permission resolver with deeply nested branches and high CC",
2413
+ language: "typescript",
2414
+ code: `function resolvePermission(user: any, resource: any, action: string): boolean {
2415
+ if (user.banned) return false;
2416
+ if (action === "read") {
2417
+ if (resource.visibility === "public") return true;
2418
+ if (resource.visibility === "private") {
2419
+ if (resource.owner === user.role) return true;
2420
+ if (user.role === "admin") return true;
2421
+ if (user.role === "moderator" && resource.type === "post") return true;
2422
+ if (user.tier === "premium" && resource.type === "article") return true;
2423
+ return false;
2424
+ }
2425
+ if (resource.visibility === "restricted") {
2426
+ if (user.verified && user.role === "admin") return true;
2427
+ if (user.verified && user.tier === "enterprise") return true;
2428
+ return false;
2429
+ }
2430
+ } else if (action === "write") {
2431
+ if (user.role === "admin") return true;
2432
+ if (resource.owner === user.role && user.verified) return true;
2433
+ if (user.role === "editor" && resource.type !== "system") {
2434
+ if (user.tier === "premium" || user.tier === "enterprise") return true;
2435
+ if (resource.visibility === "public") return true;
2436
+ }
2437
+ return false;
2438
+ } else if (action === "delete") {
2439
+ if (user.role === "admin" && user.verified) return true;
2440
+ if (resource.owner === user.role && resource.type !== "system") {
2441
+ if (user.tier === "enterprise") return true;
2442
+ if (user.verified && resource.visibility !== "restricted") return true;
2443
+ }
2444
+ return false;
2445
+ } else if (action === "share") {
2446
+ if (resource.visibility === "private" && resource.owner !== user.role) return false;
2447
+ if (user.role === "admin" || user.role === "moderator") return true;
2448
+ if (user.verified && user.tier !== "free") return true;
2449
+ return false;
2450
+ }
2451
+ return false;
2452
+ }`,
2453
+ expectedRuleIds: ["STRUCT-001"],
2454
+ category: "code-quality",
2455
+ difficulty: "medium",
2456
+ },
2457
+ // ─── DOC TP cases (need 5 more) ──────────────────────────────────────────
2458
+ {
2459
+ id: "doc-tp-cryptic-math-utils",
2460
+ description: "Cryptic exported math functions with no documentation",
2461
+ language: "typescript",
2462
+ code: `export function gcd(a: number, b: number): number {
2463
+ while (b !== 0) {
2464
+ const t = b;
2465
+ b = a % b;
2466
+ a = t;
2467
+ }
2468
+ return a;
2469
+ }
2470
+
2471
+ export function lcm(a: number, b: number): number {
2472
+ return (a / gcd(a, b)) * b;
2473
+ }
2474
+
2475
+ export function fib(n: number): number {
2476
+ if (n <= 1) return n;
2477
+ let a = 0, b = 1;
2478
+ for (let i = 2; i <= n; i++) {
2479
+ const t = a + b;
2480
+ a = b;
2481
+ b = t;
2482
+ }
2483
+ return b;
2484
+ }
2485
+
2486
+ export function inv(m: number[][]): number[][] {
2487
+ const n = m.length;
2488
+ const aug = m.map((row, i) => [...row, ...Array(n).fill(0).map((_, j) => (i === j ? 1 : 0))]);
2489
+ for (let i = 0; i < n; i++) {
2490
+ let mx = i;
2491
+ for (let j = i + 1; j < n; j++) if (Math.abs(aug[j][i]) > Math.abs(aug[mx][i])) mx = j;
2492
+ [aug[i], aug[mx]] = [aug[mx], aug[i]];
2493
+ const d = aug[i][i];
2494
+ for (let j = 0; j < 2 * n; j++) aug[i][j] /= d;
2495
+ for (let j = 0; j < n; j++) {
2496
+ if (j !== i) {
2497
+ const f = aug[j][i];
2498
+ for (let k = 0; k < 2 * n; k++) aug[j][k] -= f * aug[i][k];
2499
+ }
2500
+ }
2501
+ }
2502
+ return aug.map(r => r.slice(n));
2503
+ }
2504
+
2505
+ export function det(m: number[][]): number {
2506
+ const n = m.length;
2507
+ if (n === 1) return m[0][0];
2508
+ if (n === 2) return m[0][0] * m[1][1] - m[0][1] * m[1][0];
2509
+ let d = 0;
2510
+ for (let j = 0; j < n; j++) {
2511
+ const sub = m.slice(1).map(r => [...r.slice(0, j), ...r.slice(j + 1)]);
2512
+ d += (j % 2 === 0 ? 1 : -1) * m[0][j] * det(sub);
2513
+ }
2514
+ return d;
2515
+ }`,
2516
+ expectedRuleIds: ["DOC-001"],
2517
+ category: "documentation",
2518
+ difficulty: "easy",
2519
+ },
2520
+ {
2521
+ id: "doc-tp-cryptic-string-ops",
2522
+ description: "Undocumented string manipulation utilities with single-letter params",
2523
+ language: "typescript",
2524
+ code: `export function fmt(s: string, w: number): string {
2525
+ const words = s.split(" ");
2526
+ const lines: string[] = [];
2527
+ let cur = "";
2528
+ for (const word of words) {
2529
+ if (cur.length + word.length + 1 > w) {
2530
+ lines.push(cur);
2531
+ cur = word;
2532
+ } else {
2533
+ cur = cur ? cur + " " + word : word;
2534
+ }
2535
+ }
2536
+ if (cur) lines.push(cur);
2537
+ return lines.join("\\n");
2538
+ }
2539
+
2540
+ export function trn(s: string, a: string, b: string): string {
2541
+ let result = "";
2542
+ for (const c of s) {
2543
+ const idx = a.indexOf(c);
2544
+ result += idx >= 0 ? b[idx] || "" : c;
2545
+ }
2546
+ return result;
2547
+ }
2548
+
2549
+ export function pad(s: string, n: number, c: string): string {
2550
+ while (s.length < n) s = c + s;
2551
+ return s;
2552
+ }
2553
+
2554
+ export function rev(s: string): string {
2555
+ return s.split("").reverse().join("");
2556
+ }
2557
+
2558
+ export function cmp(a: string, b: string): number {
2559
+ if (a < b) return -1;
2560
+ if (a > b) return 1;
2561
+ return 0;
2562
+ }`,
2563
+ expectedRuleIds: ["DOC-001"],
2564
+ category: "documentation",
2565
+ difficulty: "easy",
2566
+ },
2567
+ {
2568
+ id: "doc-tp-cryptic-data-transforms",
2569
+ description: "Data transformation functions with cryptic names and no docs",
2570
+ language: "typescript",
2571
+ code: `export function grp(a: any[], k: string): Record<string, any[]> {
2572
+ const r: Record<string, any[]> = {};
2573
+ for (const x of a) {
2574
+ const v = x[k];
2575
+ if (!r[v]) r[v] = [];
2576
+ r[v].push(x);
2577
+ }
2578
+ return r;
2579
+ }
2580
+
2581
+ export function agg(a: any[], k: string, fn: (v: any[]) => any): Record<string, any> {
2582
+ const g = grp(a, k);
2583
+ const r: Record<string, any> = {};
2584
+ for (const [key, vals] of Object.entries(g)) {
2585
+ r[key] = fn(vals);
2586
+ }
2587
+ return r;
2588
+ }
2589
+
2590
+ export function piv(a: any[], r: string, c: string, v: string): Record<string, Record<string, any>> {
2591
+ const out: Record<string, Record<string, any>> = {};
2592
+ for (const x of a) {
2593
+ if (!out[x[r]]) out[x[r]] = {};
2594
+ out[x[r]][x[c]] = x[v];
2595
+ }
2596
+ return out;
2597
+ }
2598
+
2599
+ export function unq(a: any[], k: string): any[] {
2600
+ const seen = new Set();
2601
+ return a.filter(x => {
2602
+ if (seen.has(x[k])) return false;
2603
+ seen.add(x[k]);
2604
+ return true;
2605
+ });
2606
+ }
2607
+
2608
+ export function zip(a: any[], b: any[]): any[][] {
2609
+ return a.map((x, i) => [x, b[i]]);
2610
+ }`,
2611
+ expectedRuleIds: ["DOC-001"],
2612
+ category: "documentation",
2613
+ difficulty: "easy",
2614
+ },
2615
+ {
2616
+ id: "doc-tp-cryptic-binary-helpers",
2617
+ description: "Binary/bit manipulation utilities with <=3 char function names",
2618
+ language: "typescript",
2619
+ code: `export function clz(n: number): number {
2620
+ if (n === 0) return 32;
2621
+ let c = 0;
2622
+ if ((n & 0xFFFF0000) === 0) { c += 16; n <<= 16; }
2623
+ if ((n & 0xFF000000) === 0) { c += 8; n <<= 8; }
2624
+ if ((n & 0xF0000000) === 0) { c += 4; n <<= 4; }
2625
+ if ((n & 0xC0000000) === 0) { c += 2; n <<= 2; }
2626
+ if ((n & 0x80000000) === 0) { c += 1; }
2627
+ return c;
2628
+ }
2629
+
2630
+ export function ctz(n: number): number {
2631
+ if (n === 0) return 32;
2632
+ let c = 0;
2633
+ if ((n & 0x0000FFFF) === 0) { c += 16; n >>>= 16; }
2634
+ if ((n & 0x000000FF) === 0) { c += 8; n >>>= 8; }
2635
+ if ((n & 0x0000000F) === 0) { c += 4; n >>>= 4; }
2636
+ if ((n & 0x00000003) === 0) { c += 2; n >>>= 2; }
2637
+ if ((n & 0x00000001) === 0) { c += 1; }
2638
+ return c;
2639
+ }
2640
+
2641
+ export function pop(n: number): number {
2642
+ n = n - ((n >> 1) & 0x55555555);
2643
+ n = (n & 0x33333333) + ((n >> 2) & 0x33333333);
2644
+ return (((n + (n >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
2645
+ }
2646
+
2647
+ export function rot(n: number, b: number, w: number): number {
2648
+ return ((n << b) | (n >>> (w - b))) & ((1 << w) - 1);
2649
+ }
2650
+
2651
+ export function msk(s: number, e: number): number {
2652
+ return ((1 << (e - s + 1)) - 1) << s;
2653
+ }`,
2654
+ expectedRuleIds: ["DOC-001"],
2655
+ category: "documentation",
2656
+ difficulty: "easy",
2657
+ },
2658
+ {
2659
+ id: "doc-tp-cryptic-hash-encoders",
2660
+ description: "Encoding/hashing functions without any documentation",
2661
+ language: "typescript",
2662
+ code: `export function b64(s: string): string {
2663
+ const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
2664
+ let r = "";
2665
+ for (let i = 0; i < s.length; i += 3) {
2666
+ const a = s.charCodeAt(i);
2667
+ const b = i + 1 < s.length ? s.charCodeAt(i + 1) : 0;
2668
+ const c = i + 2 < s.length ? s.charCodeAt(i + 2) : 0;
2669
+ r += chars[a >> 2] + chars[((a & 3) << 4) | (b >> 4)];
2670
+ r += i + 1 < s.length ? chars[((b & 15) << 2) | (c >> 6)] : "=";
2671
+ r += i + 2 < s.length ? chars[c & 63] : "=";
2672
+ }
2673
+ return r;
2674
+ }
2675
+
2676
+ export function hex(n: number): string {
2677
+ const h = "0123456789abcdef";
2678
+ let r = "";
2679
+ for (let i = 28; i >= 0; i -= 4) r += h[(n >> i) & 0xf];
2680
+ return r;
2681
+ }
2682
+
2683
+ export function crc(s: string): number {
2684
+ let c = 0xFFFFFFFF;
2685
+ for (let i = 0; i < s.length; i++) {
2686
+ c ^= s.charCodeAt(i);
2687
+ for (let j = 0; j < 8; j++) c = (c >>> 1) ^ (c & 1 ? 0xEDB88320 : 0);
2688
+ }
2689
+ return (c ^ 0xFFFFFFFF) >>> 0;
2690
+ }
2691
+
2692
+ export function fnv(s: string): number {
2693
+ let h = 0x811c9dc5;
2694
+ for (let i = 0; i < s.length; i++) {
2695
+ h ^= s.charCodeAt(i);
2696
+ h = Math.imul(h, 0x01000193);
2697
+ }
2698
+ return h >>> 0;
2699
+ }`,
2700
+ expectedRuleIds: ["DOC-001"],
2701
+ category: "documentation",
2702
+ difficulty: "easy",
2703
+ },
2704
+ // ─── UX TP cases (need 5 more) ───────────────────────────────────────────
2705
+ {
2706
+ id: "ux-tp-form-no-loading-state",
2707
+ description: "React form component without loading/disabled state during submission",
2708
+ language: "typescript",
2709
+ code: `import React, { useState } from 'react';
2710
+
2711
+ interface ContactFormProps {
2712
+ onSuccess: () => void;
2713
+ }
2714
+
2715
+ export function ContactForm({ onSuccess }: ContactFormProps) {
2716
+ const [name, setName] = useState('');
2717
+ const [email, setEmail] = useState('');
2718
+ const [message, setMessage] = useState('');
2719
+
2720
+ const handleSubmit = async (e: React.FormEvent) => {
2721
+ e.preventDefault();
2722
+ const response = await fetch('/api/contact', {
2723
+ method: 'POST',
2724
+ headers: { 'Content-Type': 'application/json' },
2725
+ body: JSON.stringify({ name, email, message }),
2726
+ });
2727
+ if (response.ok) {
2728
+ onSuccess();
2729
+ }
2730
+ };
2731
+
2732
+ return (
2733
+ <form onSubmit={handleSubmit}>
2734
+ <div>
2735
+ <input type="text" value={name} onChange={e => setName(e.target.value)} />
2736
+ </div>
2737
+ <div>
2738
+ <input type="email" value={email} onChange={e => setEmail(e.target.value)} />
2739
+ </div>
2740
+ <div>
2741
+ <textarea value={message} onChange={e => setMessage(e.target.value)} />
2742
+ </div>
2743
+ <button type="submit">Send Message</button>
2744
+ </form>
2745
+ );
2746
+ }
2747
+
2748
+ export function NewsletterSignup() {
2749
+ const [email, setEmail] = useState('');
2750
+
2751
+ const handleSubmit = async (e: React.FormEvent) => {
2752
+ e.preventDefault();
2753
+ await fetch('/api/newsletter', {
2754
+ method: 'POST',
2755
+ body: JSON.stringify({ email }),
2756
+ });
2757
+ };
2758
+
2759
+ return (
2760
+ <form onSubmit={handleSubmit}>
2761
+ <input type="email" value={email} onChange={e => setEmail(e.target.value)} />
2762
+ <button type="submit">Subscribe</button>
2763
+ </form>
2764
+ );
2765
+ }`,
2766
+ expectedRuleIds: ["UX-001"],
2767
+ category: "ux",
2768
+ difficulty: "easy",
2769
+ },
2770
+ {
2771
+ id: "ux-tp-generic-error-messages",
2772
+ description: "API handlers returning generic error messages to users",
2773
+ language: "typescript",
2774
+ code: `import express from 'express';
2775
+ const app = express();
2776
+
2777
+ app.post('/api/register', async (req, res) => {
2778
+ try {
2779
+ const { username, password, email } = req.body;
2780
+ if (!username || !password) {
2781
+ return res.status(400).json({ message: "Something went wrong" });
2782
+ }
2783
+ const user = await createUser(username, password, email);
2784
+ res.json({ user });
2785
+ } catch (err) {
2786
+ res.status(500).json({ message: "An error occurred" });
2787
+ }
2788
+ });
2789
+
2790
+ app.post('/api/payment', async (req, res) => {
2791
+ try {
2792
+ const { amount, cardToken } = req.body;
2793
+ const charge = await processPayment(amount, cardToken);
2794
+ res.json({ charge });
2795
+ } catch (err) {
2796
+ res.status(500).json({ message: "Error" });
2797
+ }
2798
+ });
2799
+
2800
+ app.put('/api/profile', async (req, res) => {
2801
+ try {
2802
+ const updated = await updateProfile(req.user.id, req.body);
2803
+ res.json({ updated });
2804
+ } catch (err) {
2805
+ res.status(500).json({ message: "Oops" });
2806
+ }
2807
+ });
2808
+
2809
+ app.get('/api/dashboard', async (req, res) => {
2810
+ try {
2811
+ const data = await getDashboard(req.user.id);
2812
+ res.json(data);
2813
+ } catch (err) {
2814
+ res.status(500).json({ message: "Server error" });
2815
+ }
2816
+ });
2817
+
2818
+ app.post('/api/upload', async (req, res) => {
2819
+ try {
2820
+ const file = await saveFile(req.file);
2821
+ res.json({ file });
2822
+ } catch (err) {
2823
+ res.status(500).json({ message: "Bad request" });
2824
+ }
2825
+ });
2826
+
2827
+ function createUser(u: string, p: string, e: string) { return {}; }
2828
+ function processPayment(a: number, t: string) { return {}; }
2829
+ function updateProfile(id: string, data: any) { return {}; }
2830
+ function getDashboard(id: string) { return {}; }
2831
+ function saveFile(f: any) { return {}; }`,
2832
+ expectedRuleIds: ["UX-001", "SEC-001"],
2833
+ category: "ux",
2834
+ difficulty: "easy",
2835
+ },
2836
+ {
2837
+ id: "ux-tp-destructive-no-confirm",
2838
+ description: "Express API with destructive delete/remove endpoints but no confirmation",
2839
+ language: "typescript",
2840
+ code: `import express from 'express';
2841
+ const app = express();
2842
+
2843
+ // User management endpoints
2844
+ app.get('/api/users', async (req, res) => {
2845
+ const page = parseInt(req.query.page as string) || 1;
2846
+ const limit = parseInt(req.query.limit as string) || 20;
2847
+ const offset = (page - 1) * limit;
2848
+ const users = await db.query('SELECT id, name, email FROM users LIMIT $1 OFFSET $2', [limit, offset]);
2849
+ const count = await db.query('SELECT COUNT(*) FROM users');
2850
+ res.json({ users: users.rows, total: count.rows[0].count, page, limit });
2851
+ });
2852
+
2853
+ app.get('/api/users/:id', async (req, res) => {
2854
+ const user = await db.query('SELECT * FROM users WHERE id = $1', [req.params.id]);
2855
+ if (!user.rows.length) return res.status(404).json({ error: 'Not found' });
2856
+ res.json(user.rows[0]);
2857
+ });
2858
+
2859
+ app.delete('/api/users/:id', async (req, res) => {
2860
+ const { id } = req.params;
2861
+ await db.query('DELETE FROM users WHERE id = $1', [id]);
2862
+ await db.query('DELETE FROM user_sessions WHERE user_id = $1', [id]);
2863
+ await db.query('DELETE FROM user_preferences WHERE user_id = $1', [id]);
2864
+ res.json({ success: true });
2865
+ });
2866
+
2867
+ // Project management endpoints
2868
+ app.get('/api/projects', async (req, res) => {
2869
+ const projects = await db.query('SELECT * FROM projects ORDER BY updated_at DESC');
2870
+ res.json(projects.rows);
2871
+ });
2872
+
2873
+ app.post('/api/projects/:id/delete', async (req, res) => {
2874
+ const { id } = req.params;
2875
+ const project = await db.query('SELECT * FROM projects WHERE id = $1', [id]);
2876
+ await db.query('DELETE FROM project_files WHERE project_id = $1', [id]);
2877
+ await db.query('DELETE FROM project_members WHERE project_id = $1', [id]);
2878
+ await db.query('DELETE FROM projects WHERE id = $1', [id]);
2879
+ await storageService.deleteProjectFiles(id);
2880
+ res.json({ deleted: true });
2881
+ });
2882
+
2883
+ // Team management endpoints
2884
+ app.get('/api/teams/:teamId/members', async (req, res) => {
2885
+ const members = await db.query('SELECT u.* FROM users u JOIN team_members tm ON u.id = tm.user_id WHERE tm.team_id = $1', [req.params.teamId]);
2886
+ res.json(members.rows);
2887
+ });
2888
+
2889
+ app.delete('/api/teams/:teamId/remove-member/:userId', async (req, res) => {
2890
+ const { teamId, userId } = req.params;
2891
+ await db.query('DELETE FROM team_members WHERE team_id = $1 AND user_id = $2', [teamId, userId]);
2892
+ await notificationService.send(userId, 'You have been removed from the team');
2893
+ res.json({ removed: true });
2894
+ });
2895
+
2896
+ app.post('/api/data/destroy-all', async (req, res) => {
2897
+ await db.query('TRUNCATE TABLE analytics_events');
2898
+ await db.query('TRUNCATE TABLE audit_logs');
2899
+ await cache.flushAll();
2900
+ res.json({ purged: true });
2901
+ });
2902
+
2903
+ const db = { query: async (q: string, p?: any[]) => ({ rows: [] }) };
2904
+ const storageService = { deleteProjectFiles: async (id: string) => {} };
2905
+ const notificationService = { send: async (id: string, msg: string) => {} };
2906
+ const cache = { flushAll: async () => {} };`,
2907
+ expectedRuleIds: ["UX-001"],
2908
+ category: "ux",
2909
+ difficulty: "easy",
2910
+ },
2911
+ {
2912
+ id: "ux-tp-list-no-pagination",
2913
+ description: "Express API list endpoints returning all data without pagination",
2914
+ language: "typescript",
2915
+ code: `import express from 'express';
2916
+ const app = express();
2917
+
2918
+ app.get('/api/users/list', async (req, res) => {
2919
+ const users = await db.find({});
2920
+ res.json(data);
2921
+ });
2922
+
2923
+ app.get('/api/products/all', async (req, res) => {
2924
+ const products = await db.find({});
2925
+ res.json(data);
2926
+ });
2927
+
2928
+ app.get('/api/orders/list', async (req, res) => {
2929
+ const orders = await db.find({});
2930
+ res.json(results);
2931
+ });
2932
+
2933
+ app.get('/api/posts/all', async (req, res) => {
2934
+ const posts = await db.find({});
2935
+ res.json(items);
2936
+ });
2937
+
2938
+ app.get('/api/comments/list', async (req, res) => {
2939
+ const comments = await db.find({});
2940
+ res.json(rows);
2941
+ });
2942
+
2943
+ app.get('/api/notifications/all', async (req, res) => {
2944
+ const notifications = await db.find({});
2945
+ res.json(records);
2946
+ });
2947
+
2948
+ app.get('/api/analytics/events', async (req, res) => {
2949
+ const events = await db.find({});
2950
+ res.json(data);
2951
+ });
2952
+
2953
+ app.get('/api/audit/logs', async (req, res) => {
2954
+ const logs = await db.find({});
2955
+ res.json(data);
2956
+ });
2957
+
2958
+ const db = { find: async (q: any) => [] };
2959
+ const data: any = [];
2960
+ const results: any = [];
2961
+ const items: any = [];
2962
+ const rows: any = [];
2963
+ const records: any = [];`,
2964
+ expectedRuleIds: ["UX-001"],
2965
+ category: "ux",
2966
+ difficulty: "easy",
2967
+ },
2968
+ {
2969
+ id: "ux-tp-form-no-labels",
2970
+ description: "HTML form with inputs but no labels, placeholders, or aria-labels",
2971
+ language: "html",
2972
+ code: `<!DOCTYPE html>
2973
+ <html>
2974
+ <head><title>Registration</title></head>
2975
+ <body>
2976
+ <h1>Create Account</h1>
2977
+ <form action="/register" method="POST">
2978
+ <div class="field">
2979
+ <input type="text" name="first_name" />
2980
+ </div>
2981
+ <div class="field">
2982
+ <input type="text" name="last_name" />
2983
+ </div>
2984
+ <div class="field">
2985
+ <input type="email" name="email" />
2986
+ </div>
2987
+ <div class="field">
2988
+ <input type="password" name="password" />
2989
+ </div>
2990
+ <div class="field">
2991
+ <input type="password" name="confirm_password" />
2992
+ </div>
2993
+ <div class="field">
2994
+ <input type="text" name="phone" />
2995
+ </div>
2996
+ <div class="field">
2997
+ <input type="text" name="address_line1" />
2998
+ </div>
2999
+ <div class="field">
3000
+ <input type="text" name="address_line2" />
3001
+ </div>
3002
+ <div class="field">
3003
+ <input type="text" name="city" />
3004
+ </div>
3005
+ <div class="field">
3006
+ <input type="text" name="zip" />
3007
+ </div>
3008
+ <div class="field">
3009
+ <select name="country">
3010
+ <option value="us">US</option>
3011
+ <option value="uk">UK</option>
3012
+ <option value="ca">CA</option>
3013
+ </select>
3014
+ </div>
3015
+ <div class="field">
3016
+ <input type="checkbox" name="terms" />
3017
+ </div>
3018
+ <button type="submit">Register</button>
3019
+ </form>
3020
+ <script>
3021
+ document.querySelector('form').addEventListener('submit', function(e) {
3022
+ e.preventDefault();
3023
+ const formData = new FormData(this);
3024
+ fetch('/register', { method: 'POST', body: formData })
3025
+ .then(r => r.json())
3026
+ .then(data => { window.location = '/welcome'; });
3027
+ });
3028
+ </script>
3029
+ </body>
3030
+ </html>`,
3031
+ expectedRuleIds: ["UX-001"],
3032
+ category: "ux",
3033
+ difficulty: "easy",
3034
+ },
3035
+ // ─── TEST TP cases (need 4 more) ─────────────────────────────────────────
3036
+ {
3037
+ id: "test-tp-no-assertions-suite",
3038
+ description: "Test suite with multiple test cases but zero assertions",
3039
+ language: "typescript",
3040
+ code: `describe("UserService", () => {
3041
+ describe("creation", () => {
3042
+ it("should create a user", async () => {
3043
+ const user = await UserService.create({ name: "Alice", email: "alice@test.com" });
3044
+ console.log("User created:", user);
3045
+ });
3046
+
3047
+ it("should handle duplicate emails", async () => {
3048
+ await UserService.create({ name: "Bob", email: "bob@test.com" });
3049
+ const result = await UserService.create({ name: "Bob2", email: "bob@test.com" });
3050
+ console.log("Duplicate result:", result);
3051
+ });
3052
+ });
3053
+
3054
+ describe("retrieval", () => {
3055
+ test("should find by id", async () => {
3056
+ const user = await UserService.findById("user-123");
3057
+ console.log("Found:", user);
3058
+ });
3059
+
3060
+ test("should find by email", async () => {
3061
+ const user = await UserService.findByEmail("alice@test.com");
3062
+ console.log("Found by email:", user);
3063
+ });
3064
+
3065
+ test("should list all users", async () => {
3066
+ const users = await UserService.listAll();
3067
+ console.log("All users:", users.length);
3068
+ });
3069
+ });
3070
+
3071
+ describe("deletion", () => {
3072
+ it("should delete a user", async () => {
3073
+ await UserService.delete("user-123");
3074
+ console.log("Deleted");
3075
+ });
3076
+ });
3077
+ });
3078
+
3079
+ const UserService = {
3080
+ create: async (data: any) => ({ id: "1", ...data }),
3081
+ findById: async (id: string) => ({ id, name: "Test" }),
3082
+ findByEmail: async (email: string) => ({ id: "1", email }),
3083
+ listAll: async () => [{ id: "1" }],
3084
+ delete: async (id: string) => {},
3085
+ };`,
3086
+ expectedRuleIds: ["TEST-001"],
3087
+ category: "testing",
3088
+ difficulty: "easy",
3089
+ },
3090
+ {
3091
+ id: "test-tp-vague-names-suite",
3092
+ description: "Test suite with vague test names that don't describe behavior",
3093
+ language: "typescript",
3094
+ code: `describe("Calculator", () => {
3095
+ it("works", () => {
3096
+ expect(calc.add(2, 3)).toBe(5);
3097
+ });
3098
+
3099
+ test("test 1", () => {
3100
+ expect(calc.subtract(10, 3)).toBe(7);
3101
+ });
3102
+
3103
+ test("test 2", () => {
3104
+ expect(calc.multiply(4, 5)).toBe(20);
3105
+ });
3106
+
3107
+ it("should work", () => {
3108
+ expect(calc.divide(10, 2)).toBe(5);
3109
+ });
3110
+
3111
+ test("basic test", () => {
3112
+ expect(calc.add(0, 0)).toBe(0);
3113
+ });
3114
+
3115
+ it("it works", () => {
3116
+ expect(calc.subtract(0, 5)).toBe(-5);
3117
+ });
3118
+
3119
+ test("test add", () => {
3120
+ expect(calc.add(1, 1)).toBe(2);
3121
+ });
3122
+
3123
+ test("test multiply", () => {
3124
+ expect(calc.multiply(3, 3)).toBe(9);
3125
+ });
3126
+ });
3127
+
3128
+ const calc = {
3129
+ add: (a: number, b: number) => a + b,
3130
+ subtract: (a: number, b: number) => a - b,
3131
+ multiply: (a: number, b: number) => a * b,
3132
+ divide: (a: number, b: number) => a / b,
3133
+ };`,
3134
+ expectedRuleIds: ["TEST-001"],
3135
+ category: "testing",
3136
+ difficulty: "easy",
3137
+ },
3138
+ {
3139
+ id: "test-tp-real-external-deps",
3140
+ description: "Tests making real HTTP calls and database queries without mocking",
3141
+ language: "typescript",
3142
+ code: `describe("OrderService", () => {
3143
+ it("should create an order via API", async () => {
3144
+ const response = await fetch("https://api.example.com/orders", {
3145
+ method: "POST",
3146
+ headers: { "Content-Type": "application/json" },
3147
+ body: JSON.stringify({ item: "widget", quantity: 5 }),
3148
+ });
3149
+ const order = await response.json();
3150
+ expect(order.id).toBeDefined();
3151
+ });
3152
+
3153
+ test("should sync with inventory service", async () => {
3154
+ const inventory = await axios.get("https://inventory.example.com/stock/widget");
3155
+ expect(inventory.data.available).toBeGreaterThan(0);
3156
+ });
3157
+
3158
+ it("should store order in database", async () => {
3159
+ const result = await database.query("INSERT INTO orders (item, qty) VALUES ($1, $2)", ["widget", 5]);
3160
+ expect(result.rowCount).toBe(1);
3161
+ });
3162
+
3163
+ test("should update Redis cache", async () => {
3164
+ await redis.set("order:latest", JSON.stringify({ item: "widget" }));
3165
+ const cached = await redis.get("order:latest");
3166
+ expect(JSON.parse(cached)).toEqual({ item: "widget" });
3167
+ });
3168
+
3169
+ it("should send notification via HTTP", async () => {
3170
+ const notifyResult = await fetch("https://notify.example.com/send", {
3171
+ method: "POST",
3172
+ body: JSON.stringify({ message: "Order placed" }),
3173
+ });
3174
+ expect(notifyResult.ok).toBe(true);
3175
+ });
3176
+ });
3177
+
3178
+ const axios = { get: async (url: string) => ({ data: { available: 10 } }) };
3179
+ const database = { query: async (q: string, p: any[]) => ({ rowCount: 1 }) };
3180
+ const redis = { set: async (k: string, v: string) => {}, get: async (k: string) => "{}" };`,
3181
+ expectedRuleIds: ["TEST-001"],
3182
+ category: "testing",
3183
+ difficulty: "medium",
3184
+ },
3185
+ {
3186
+ id: "test-tp-happy-path-only",
3187
+ description: "Tests covering only success scenarios with no error/edge cases",
3188
+ language: "typescript",
3189
+ code: `describe("AuthenticationService", () => {
3190
+ it("should login with valid credentials", async () => {
3191
+ const result = await auth.login("admin", "password123");
3192
+ expect(result.token).toBeDefined();
3193
+ });
3194
+
3195
+ test("should register a new user", async () => {
3196
+ const user = await auth.register("newuser", "pass123", "new@test.com");
3197
+ expect(user.id).toBeDefined();
3198
+ });
3199
+
3200
+ it("should refresh token", async () => {
3201
+ const newToken = await auth.refreshToken("valid-refresh-token");
3202
+ expect(newToken).toBeDefined();
3203
+ });
3204
+
3205
+ test("should get user profile", async () => {
3206
+ const profile = await auth.getProfile("valid-token");
3207
+ expect(profile.name).toBeDefined();
3208
+ });
3209
+
3210
+ it("should update password", async () => {
3211
+ const result = await auth.updatePassword("user1", "old", "new");
3212
+ expect(result.success).toBe(true);
3213
+ });
3214
+
3215
+ test("should logout", async () => {
3216
+ const result = await auth.logout("valid-token");
3217
+ expect(result.success).toBe(true);
3218
+ });
3219
+ });
3220
+
3221
+ const auth = {
3222
+ login: async (u: string, p: string) => ({ token: "tok" }),
3223
+ register: async (u: string, p: string, e: string) => ({ id: "1" }),
3224
+ refreshToken: async (t: string) => "new-token",
3225
+ getProfile: async (t: string) => ({ name: "User" }),
3226
+ updatePassword: async (u: string, o: string, n: string) => ({ success: true }),
3227
+ logout: async (t: string) => ({ success: true }),
3228
+ };`,
3229
+ expectedRuleIds: ["TEST-001"],
3230
+ category: "testing",
3231
+ difficulty: "easy",
3232
+ },
3233
+ // ─── MAINT TP cases (need 3 more) ────────────────────────────────────────
3234
+ {
3235
+ id: "maint-tp-excessive-any-types",
3236
+ description: "TypeScript module overusing 'any' type throughout",
3237
+ language: "typescript",
3238
+ code: `export class DataProcessor {
3239
+ private cache: any = {};
3240
+ private config: any;
3241
+ private logger: any;
3242
+
3243
+ constructor(config: any, logger: any) {
3244
+ this.config = config;
3245
+ this.logger = logger;
3246
+ }
3247
+
3248
+ async process(input: any): Promise<any> {
3249
+ const parsed: any = this.parse(input);
3250
+ const validated: any = this.validate(parsed);
3251
+ const transformed: any = this.transform(validated);
3252
+ return this.save(transformed);
3253
+ }
3254
+
3255
+ private parse(data: any): any {
3256
+ if (typeof data === "string") {
3257
+ return JSON.parse(data);
3258
+ }
3259
+ return data;
3260
+ }
3261
+
3262
+ private validate(data: any): any {
3263
+ if (!data.id) throw new Error("Missing id");
3264
+ if (!data.type) throw new Error("Missing type");
3265
+ return data;
3266
+ }
3267
+
3268
+ private transform(data: any): any {
3269
+ const result: any = { ...data };
3270
+ result.timestamp = Date.now();
3271
+ result.processed = true;
3272
+ return result;
3273
+ }
3274
+
3275
+ private async save(data: any): Promise<any> {
3276
+ this.cache[data.id] = data;
3277
+ this.logger.info("Saved", data.id);
3278
+ return { success: true, data };
3279
+ }
3280
+
3281
+ getFromCache(key: any): any {
3282
+ return this.cache[key];
3283
+ }
3284
+
3285
+ clearCache(): any {
3286
+ this.cache = {};
3287
+ return { cleared: true };
3288
+ }
3289
+ }`,
3290
+ expectedRuleIds: ["MAINT-001"],
3291
+ category: "maintainability",
3292
+ difficulty: "easy",
3293
+ },
3294
+ {
3295
+ id: "maint-tp-var-declarations",
3296
+ description: "JavaScript module using var declarations throughout instead of const/let",
3297
+ language: "javascript",
3298
+ code: `var express = require("express");
3299
+ var app = express();
3300
+ var bodyParser = require("body-parser");
3301
+ var cors = require("cors");
3302
+ var mongoose = require("mongoose");
3303
+ var jwt = require("jsonwebtoken");
3304
+
3305
+ app.use(bodyParser.json());
3306
+ app.use(cors());
3307
+
3308
+ var SECRET = "my-secret-key";
3309
+ var PORT = 3000;
3310
+
3311
+ var UserSchema = new mongoose.Schema({
3312
+ name: String,
3313
+ email: String,
3314
+ password: String,
3315
+ });
3316
+
3317
+ var User = mongoose.model("User", UserSchema);
3318
+
3319
+ app.post("/register", function (req, res) {
3320
+ var name = req.body.name;
3321
+ var email = req.body.email;
3322
+ var password = req.body.password;
3323
+
3324
+ var user = new User({ name: name, email: email, password: password });
3325
+ user.save(function (err) {
3326
+ if (err) {
3327
+ var message = "Registration failed";
3328
+ return res.status(500).json({ error: message });
3329
+ }
3330
+ var token = jwt.sign({ id: user._id }, SECRET);
3331
+ res.json({ token: token });
3332
+ });
3333
+ });
3334
+
3335
+ app.get("/users", function (req, res) {
3336
+ User.find({}, function (err, users) {
3337
+ if (err) {
3338
+ var errorMsg = "Failed to fetch users";
3339
+ return res.status(500).json({ error: errorMsg });
3340
+ }
3341
+ var result = users.map(function (u) {
3342
+ var obj = { id: u._id, name: u.name, email: u.email };
3343
+ return obj;
3344
+ });
3345
+ res.json(result);
3346
+ });
3347
+ });
3348
+
3349
+ app.listen(PORT, function () {
3350
+ var msg = "Server running on port " + PORT;
3351
+ console.log(msg);
3352
+ });`,
3353
+ expectedRuleIds: ["MAINT-001"],
3354
+ category: "maintainability",
3355
+ difficulty: "easy",
3356
+ },
3357
+ {
3358
+ id: "maint-tp-magic-numbers-everywhere",
3359
+ description: "Code with magic numbers scattered throughout business logic",
3360
+ language: "typescript",
3361
+ code: `export function calculateShipping(weight: number, distance: number, expedited: boolean): number {
3362
+ if (weight > 1000) {
3363
+ return distance * 3600 + 8080;
3364
+ }
3365
+ if (weight > 5000) {
3366
+ return distance * 86400 + 4096;
3367
+ }
3368
+ if (expedited) {
3369
+ return distance * 1024 + 2048;
3370
+ }
3371
+ return distance * 1000 + 3000;
3372
+ }
3373
+
3374
+ export function computeDiscount(total: number, loyaltyPoints: number): number {
3375
+ if (loyaltyPoints > 5000 && total > 8080) {
3376
+ return total * 3600 / 86400;
3377
+ }
3378
+ if (loyaltyPoints > 1000) {
3379
+ return total * 1024 / 4096;
3380
+ }
3381
+ if (total > 3000) {
3382
+ return 2048;
3383
+ }
3384
+ return 1000;
3385
+ }
3386
+
3387
+ export function estimateDelivery(zone: number, priority: number): number {
3388
+ const base = 86400;
3389
+ if (zone > 5000) return base + 3600 + 8080;
3390
+ if (zone > 1000) return base + 4096;
3391
+ if (priority > 3000) return 2048;
3392
+ return 1024 + 1000;
3393
+ }
3394
+
3395
+ export function calculateTax(amount: number, region: number): number {
3396
+ if (region === 1000) return amount + 3600;
3397
+ if (region === 2048) return amount + 8080;
3398
+ if (region === 4096) return amount + 86400;
3399
+ if (region === 3000) return amount + 5000;
3400
+ if (region === 1024) return amount + 1000;
3401
+ return amount;
3402
+ }
3403
+
3404
+ export function getPenalty(days: number): number {
3405
+ if (days > 86400) return 8080;
3406
+ if (days > 3600) return 4096;
3407
+ if (days > 1000) return 2048;
3408
+ if (days > 5000) return 1024;
3409
+ return 3000;
3410
+ }`,
3411
+ expectedRuleIds: ["MAINT-001"],
3412
+ category: "maintainability",
3413
+ difficulty: "easy",
3414
+ },
3415
+ ];