@humanbased/crosscheck 1.2.0-beta.80 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +388 -149
  3. package/README.zh.md +1 -1
  4. package/crosscheck.config.example.yml +2 -63
  5. package/dist/__tests__/codex.test.js +27 -14
  6. package/dist/__tests__/codex.test.js.map +1 -1
  7. package/dist/__tests__/comment-bodies.test.js +1 -49
  8. package/dist/__tests__/comment-bodies.test.js.map +1 -1
  9. package/dist/__tests__/conflict-resolve.test.js +1 -44
  10. package/dist/__tests__/conflict-resolve.test.js.map +1 -1
  11. package/dist/__tests__/fix.test.js +0 -33
  12. package/dist/__tests__/fix.test.js.map +1 -1
  13. package/dist/__tests__/onboard-preservation.test.js +0 -5
  14. package/dist/__tests__/onboard-preservation.test.js.map +1 -1
  15. package/dist/__tests__/optimize.test.js +0 -2
  16. package/dist/__tests__/optimize.test.js.map +1 -1
  17. package/dist/__tests__/repo-picker.test.js +1 -7
  18. package/dist/__tests__/repo-picker.test.js.map +1 -1
  19. package/dist/__tests__/review-comment-body.test.js +0 -35
  20. package/dist/__tests__/review-comment-body.test.js.map +1 -1
  21. package/dist/__tests__/review-models.test.js +3 -19
  22. package/dist/__tests__/review-models.test.js.map +1 -1
  23. package/dist/__tests__/runner.test.js +1 -29
  24. package/dist/__tests__/runner.test.js.map +1 -1
  25. package/dist/cli.js +0 -29
  26. package/dist/cli.js.map +1 -1
  27. package/dist/commands/onboard.d.ts +0 -11
  28. package/dist/commands/onboard.d.ts.map +1 -1
  29. package/dist/commands/onboard.js +2 -88
  30. package/dist/commands/onboard.js.map +1 -1
  31. package/dist/commands/review.d.ts.map +1 -1
  32. package/dist/commands/review.js +6 -65
  33. package/dist/commands/review.js.map +1 -1
  34. package/dist/commands/run.d.ts.map +1 -1
  35. package/dist/commands/run.js +3 -23
  36. package/dist/commands/run.js.map +1 -1
  37. package/dist/commands/status.d.ts.map +1 -1
  38. package/dist/commands/status.js +1 -53
  39. package/dist/commands/status.js.map +1 -1
  40. package/dist/commands/watch.d.ts.map +1 -1
  41. package/dist/commands/watch.js +6 -52
  42. package/dist/commands/watch.js.map +1 -1
  43. package/dist/config/loader.d.ts +1 -3
  44. package/dist/config/loader.d.ts.map +1 -1
  45. package/dist/config/loader.js +0 -13
  46. package/dist/config/loader.js.map +1 -1
  47. package/dist/config/review-model-tiers.json +3 -3
  48. package/dist/config/schema.d.ts +10 -254
  49. package/dist/config/schema.d.ts.map +1 -1
  50. package/dist/config/schema.js +2 -62
  51. package/dist/config/schema.js.map +1 -1
  52. package/dist/github/client.d.ts +1 -6
  53. package/dist/github/client.d.ts.map +1 -1
  54. package/dist/github/client.js +7 -15
  55. package/dist/github/client.js.map +1 -1
  56. package/dist/issues/ticket-ref.d.ts.map +1 -1
  57. package/dist/issues/ticket-ref.js +5 -6
  58. package/dist/issues/ticket-ref.js.map +1 -1
  59. package/dist/lib/clone.d.ts +0 -1
  60. package/dist/lib/clone.d.ts.map +1 -1
  61. package/dist/lib/clone.js +10 -32
  62. package/dist/lib/clone.js.map +1 -1
  63. package/dist/lib/comment-bodies.d.ts +0 -35
  64. package/dist/lib/comment-bodies.d.ts.map +1 -1
  65. package/dist/lib/comment-bodies.js +9 -43
  66. package/dist/lib/comment-bodies.js.map +1 -1
  67. package/dist/lib/repo-picker.d.ts +0 -3
  68. package/dist/lib/repo-picker.d.ts.map +1 -1
  69. package/dist/lib/repo-picker.js +9 -45
  70. package/dist/lib/repo-picker.js.map +1 -1
  71. package/dist/lib/review-models.d.ts +2 -15
  72. package/dist/lib/review-models.d.ts.map +1 -1
  73. package/dist/lib/review-models.js +6 -26
  74. package/dist/lib/review-models.js.map +1 -1
  75. package/dist/lib/runner.d.ts +0 -12
  76. package/dist/lib/runner.d.ts.map +1 -1
  77. package/dist/lib/runner.js +42 -186
  78. package/dist/lib/runner.js.map +1 -1
  79. package/dist/lib/workflow.d.ts +0 -9
  80. package/dist/lib/workflow.d.ts.map +1 -1
  81. package/dist/lib/workflow.js +0 -20
  82. package/dist/lib/workflow.js.map +1 -1
  83. package/dist/reviewers/claude.d.ts +1 -4
  84. package/dist/reviewers/claude.d.ts.map +1 -1
  85. package/dist/reviewers/claude.js +7 -39
  86. package/dist/reviewers/claude.js.map +1 -1
  87. package/dist/reviewers/codex.d.ts +1 -3
  88. package/dist/reviewers/codex.d.ts.map +1 -1
  89. package/dist/reviewers/codex.js +70 -76
  90. package/dist/reviewers/codex.js.map +1 -1
  91. package/dist/reviewers/conflict-resolve.d.ts +1 -3
  92. package/dist/reviewers/conflict-resolve.d.ts.map +1 -1
  93. package/dist/reviewers/conflict-resolve.js +6 -21
  94. package/dist/reviewers/conflict-resolve.js.map +1 -1
  95. package/dist/reviewers/fix.d.ts +2 -5
  96. package/dist/reviewers/fix.d.ts.map +1 -1
  97. package/dist/reviewers/fix.js +10 -26
  98. package/dist/reviewers/fix.js.map +1 -1
  99. package/get-started.md +4 -139
  100. package/package.json +3 -4
  101. package/assets/icon-256.png +0 -0
  102. package/assets/linear-comment.svg +0 -18
  103. package/assets/linear-onboard.svg +0 -30
  104. package/assets/linear-status.svg +0 -23
  105. package/assets/linear-test.svg +0 -34
  106. package/assets/skills/code-review/.crosscheck-skill.json +0 -9
  107. package/assets/skills/code-review/LICENSE +0 -21
  108. package/assets/skills/code-review/SKILL.md +0 -89
  109. package/assets/skills/code-review/agents/openai.yaml +0 -3
  110. package/assets/skills/code-review-skill/.crosscheck-skill.json +0 -9
  111. package/assets/skills/code-review-skill/LICENSE +0 -21
  112. package/assets/skills/code-review-skill/SKILL.md +0 -231
  113. package/assets/skills/code-review-skill/assets/pr-review-template.md +0 -137
  114. package/assets/skills/code-review-skill/assets/review-checklist.md +0 -123
  115. package/assets/skills/code-review-skill/reference/angular.md +0 -768
  116. package/assets/skills/code-review-skill/reference/architecture-review-guide.md +0 -472
  117. package/assets/skills/code-review-skill/reference/c.md +0 -890
  118. package/assets/skills/code-review-skill/reference/code-quality-universal.md +0 -488
  119. package/assets/skills/code-review-skill/reference/code-review-best-practices.md +0 -136
  120. package/assets/skills/code-review-skill/reference/common-bugs-checklist.md +0 -286
  121. package/assets/skills/code-review-skill/reference/cpp.md +0 -893
  122. package/assets/skills/code-review-skill/reference/cross-cutting/async-concurrency-patterns.md +0 -515
  123. package/assets/skills/code-review-skill/reference/cross-cutting/error-handling-principles.md +0 -492
  124. package/assets/skills/code-review-skill/reference/cross-cutting/n-plus-one-queries.md +0 -309
  125. package/assets/skills/code-review-skill/reference/cross-cutting/sql-injection-prevention.md +0 -308
  126. package/assets/skills/code-review-skill/reference/cross-cutting/xss-prevention.md +0 -264
  127. package/assets/skills/code-review-skill/reference/csharp.md +0 -525
  128. package/assets/skills/code-review-skill/reference/css-less-sass.md +0 -661
  129. package/assets/skills/code-review-skill/reference/django.md +0 -985
  130. package/assets/skills/code-review-skill/reference/fastapi.md +0 -580
  131. package/assets/skills/code-review-skill/reference/go.md +0 -993
  132. package/assets/skills/code-review-skill/reference/java.md +0 -409
  133. package/assets/skills/code-review-skill/reference/java8.md +0 -586
  134. package/assets/skills/code-review-skill/reference/kotlin.md +0 -1018
  135. package/assets/skills/code-review-skill/reference/nestjs.md +0 -593
  136. package/assets/skills/code-review-skill/reference/performance-review-guide.md +0 -816
  137. package/assets/skills/code-review-skill/reference/php.md +0 -684
  138. package/assets/skills/code-review-skill/reference/python.md +0 -1073
  139. package/assets/skills/code-review-skill/reference/qt.md +0 -757
  140. package/assets/skills/code-review-skill/reference/react.md +0 -871
  141. package/assets/skills/code-review-skill/reference/ruby.md +0 -964
  142. package/assets/skills/code-review-skill/reference/rust.md +0 -846
  143. package/assets/skills/code-review-skill/reference/security-review-guide.md +0 -494
  144. package/assets/skills/code-review-skill/reference/svelte.md +0 -1064
  145. package/assets/skills/code-review-skill/reference/swift.md +0 -936
  146. package/assets/skills/code-review-skill/reference/typescript.md +0 -1016
  147. package/assets/skills/code-review-skill/reference/vue.md +0 -924
  148. package/assets/skills/code-review-skill/reference/zig.md +0 -440
  149. package/assets/skills/code-review-skill/scripts/pr-analyzer.py +0 -435
  150. package/assets/skills/code-review-skill/scripts/test_pr_analyzer.py +0 -380
  151. package/assets/skills/codebase-design/.crosscheck-skill.json +0 -9
  152. package/assets/skills/codebase-design/DEEPENING.md +0 -37
  153. package/assets/skills/codebase-design/DESIGN-IT-TWICE.md +0 -44
  154. package/assets/skills/codebase-design/LICENSE +0 -21
  155. package/assets/skills/codebase-design/SKILL.md +0 -114
  156. package/assets/skills/codebase-design/agents/openai.yaml +0 -3
  157. package/assets/skills/diagnosing-bugs/.crosscheck-skill.json +0 -9
  158. package/assets/skills/diagnosing-bugs/LICENSE +0 -21
  159. package/assets/skills/diagnosing-bugs/SKILL.md +0 -134
  160. package/assets/skills/diagnosing-bugs/agents/openai.yaml +0 -3
  161. package/assets/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +0 -41
  162. package/dist/__tests__/can-write-verdict.test.d.ts +0 -2
  163. package/dist/__tests__/can-write-verdict.test.d.ts.map +0 -1
  164. package/dist/__tests__/can-write-verdict.test.js +0 -31
  165. package/dist/__tests__/can-write-verdict.test.js.map +0 -1
  166. package/dist/__tests__/linear-branding.test.d.ts +0 -2
  167. package/dist/__tests__/linear-branding.test.d.ts.map +0 -1
  168. package/dist/__tests__/linear-branding.test.js +0 -156
  169. package/dist/__tests__/linear-branding.test.js.map +0 -1
  170. package/dist/__tests__/linear-client.test.d.ts +0 -2
  171. package/dist/__tests__/linear-client.test.d.ts.map +0 -1
  172. package/dist/__tests__/linear-client.test.js +0 -120
  173. package/dist/__tests__/linear-client.test.js.map +0 -1
  174. package/dist/__tests__/linear-comment.test.d.ts +0 -2
  175. package/dist/__tests__/linear-comment.test.d.ts.map +0 -1
  176. package/dist/__tests__/linear-comment.test.js +0 -151
  177. package/dist/__tests__/linear-comment.test.js.map +0 -1
  178. package/dist/__tests__/linear-identity.test.d.ts +0 -2
  179. package/dist/__tests__/linear-identity.test.d.ts.map +0 -1
  180. package/dist/__tests__/linear-identity.test.js +0 -253
  181. package/dist/__tests__/linear-identity.test.js.map +0 -1
  182. package/dist/__tests__/linear-notify.test.d.ts +0 -2
  183. package/dist/__tests__/linear-notify.test.d.ts.map +0 -1
  184. package/dist/__tests__/linear-notify.test.js +0 -144
  185. package/dist/__tests__/linear-notify.test.js.map +0 -1
  186. package/dist/__tests__/linear-ref.test.d.ts +0 -2
  187. package/dist/__tests__/linear-ref.test.d.ts.map +0 -1
  188. package/dist/__tests__/linear-ref.test.js +0 -261
  189. package/dist/__tests__/linear-ref.test.js.map +0 -1
  190. package/dist/__tests__/linear-test-ref.test.d.ts +0 -2
  191. package/dist/__tests__/linear-test-ref.test.d.ts.map +0 -1
  192. package/dist/__tests__/linear-test-ref.test.js +0 -81
  193. package/dist/__tests__/linear-test-ref.test.js.map +0 -1
  194. package/dist/__tests__/linear-verify.test.d.ts +0 -2
  195. package/dist/__tests__/linear-verify.test.d.ts.map +0 -1
  196. package/dist/__tests__/linear-verify.test.js +0 -132
  197. package/dist/__tests__/linear-verify.test.js.map +0 -1
  198. package/dist/__tests__/linear-worker.test.d.ts +0 -2
  199. package/dist/__tests__/linear-worker.test.d.ts.map +0 -1
  200. package/dist/__tests__/linear-worker.test.js +0 -83
  201. package/dist/__tests__/linear-worker.test.js.map +0 -1
  202. package/dist/__tests__/linear-write-possible.test.d.ts +0 -2
  203. package/dist/__tests__/linear-write-possible.test.d.ts.map +0 -1
  204. package/dist/__tests__/linear-write-possible.test.js +0 -30
  205. package/dist/__tests__/linear-write-possible.test.js.map +0 -1
  206. package/dist/__tests__/repository-guidance.test.d.ts +0 -2
  207. package/dist/__tests__/repository-guidance.test.d.ts.map +0 -1
  208. package/dist/__tests__/repository-guidance.test.js +0 -107
  209. package/dist/__tests__/repository-guidance.test.js.map +0 -1
  210. package/dist/__tests__/review-strategy.test.d.ts +0 -2
  211. package/dist/__tests__/review-strategy.test.d.ts.map +0 -1
  212. package/dist/__tests__/review-strategy.test.js +0 -195
  213. package/dist/__tests__/review-strategy.test.js.map +0 -1
  214. package/dist/__tests__/skill-attribution.test.d.ts +0 -2
  215. package/dist/__tests__/skill-attribution.test.d.ts.map +0 -1
  216. package/dist/__tests__/skill-attribution.test.js +0 -53
  217. package/dist/__tests__/skill-attribution.test.js.map +0 -1
  218. package/dist/__tests__/skill-broker.test.d.ts +0 -2
  219. package/dist/__tests__/skill-broker.test.d.ts.map +0 -1
  220. package/dist/__tests__/skill-broker.test.js +0 -144
  221. package/dist/__tests__/skill-broker.test.js.map +0 -1
  222. package/dist/__tests__/skill-catalog.test.d.ts +0 -2
  223. package/dist/__tests__/skill-catalog.test.d.ts.map +0 -1
  224. package/dist/__tests__/skill-catalog.test.js +0 -40
  225. package/dist/__tests__/skill-catalog.test.js.map +0 -1
  226. package/dist/__tests__/skill-installer.test.d.ts +0 -2
  227. package/dist/__tests__/skill-installer.test.d.ts.map +0 -1
  228. package/dist/__tests__/skill-installer.test.js +0 -96
  229. package/dist/__tests__/skill-installer.test.js.map +0 -1
  230. package/dist/__tests__/skills-config.test.d.ts +0 -2
  231. package/dist/__tests__/skills-config.test.d.ts.map +0 -1
  232. package/dist/__tests__/skills-config.test.js +0 -12
  233. package/dist/__tests__/skills-config.test.js.map +0 -1
  234. package/dist/commands/linear-test.d.ts +0 -18
  235. package/dist/commands/linear-test.d.ts.map +0 -1
  236. package/dist/commands/linear-test.js +0 -130
  237. package/dist/commands/linear-test.js.map +0 -1
  238. package/dist/commands/skill.d.ts +0 -2
  239. package/dist/commands/skill.d.ts.map +0 -1
  240. package/dist/commands/skill.js +0 -16
  241. package/dist/commands/skill.js.map +0 -1
  242. package/dist/config/review-strategy.json +0 -202
  243. package/dist/lib/repository-guidance.d.ts +0 -2
  244. package/dist/lib/repository-guidance.d.ts.map +0 -1
  245. package/dist/lib/repository-guidance.js +0 -55
  246. package/dist/lib/repository-guidance.js.map +0 -1
  247. package/dist/lib/review-strategy.d.ts +0 -62
  248. package/dist/lib/review-strategy.d.ts.map +0 -1
  249. package/dist/lib/review-strategy.js +0 -235
  250. package/dist/lib/review-strategy.js.map +0 -1
  251. package/dist/linear/client.d.ts +0 -18
  252. package/dist/linear/client.d.ts.map +0 -1
  253. package/dist/linear/client.js +0 -67
  254. package/dist/linear/client.js.map +0 -1
  255. package/dist/linear/comment.d.ts +0 -20
  256. package/dist/linear/comment.d.ts.map +0 -1
  257. package/dist/linear/comment.js +0 -57
  258. package/dist/linear/comment.js.map +0 -1
  259. package/dist/linear/identity.d.ts +0 -59
  260. package/dist/linear/identity.d.ts.map +0 -1
  261. package/dist/linear/identity.js +0 -187
  262. package/dist/linear/identity.js.map +0 -1
  263. package/dist/linear/notify.d.ts +0 -35
  264. package/dist/linear/notify.d.ts.map +0 -1
  265. package/dist/linear/notify.js +0 -76
  266. package/dist/linear/notify.js.map +0 -1
  267. package/dist/linear/ref.d.ts +0 -13
  268. package/dist/linear/ref.d.ts.map +0 -1
  269. package/dist/linear/ref.js +0 -90
  270. package/dist/linear/ref.js.map +0 -1
  271. package/dist/linear/verify.d.ts +0 -26
  272. package/dist/linear/verify.d.ts.map +0 -1
  273. package/dist/linear/verify.js +0 -67
  274. package/dist/linear/verify.js.map +0 -1
  275. package/dist/skills/attribution.d.ts +0 -4
  276. package/dist/skills/attribution.d.ts.map +0 -1
  277. package/dist/skills/attribution.js +0 -14
  278. package/dist/skills/attribution.js.map +0 -1
  279. package/dist/skills/broker-server.d.ts +0 -2
  280. package/dist/skills/broker-server.d.ts.map +0 -1
  281. package/dist/skills/broker-server.js +0 -17
  282. package/dist/skills/broker-server.js.map +0 -1
  283. package/dist/skills/broker.d.ts +0 -42
  284. package/dist/skills/broker.d.ts.map +0 -1
  285. package/dist/skills/broker.js +0 -285
  286. package/dist/skills/broker.js.map +0 -1
  287. package/dist/skills/catalog.d.ts +0 -28
  288. package/dist/skills/catalog.d.ts.map +0 -1
  289. package/dist/skills/catalog.js +0 -104
  290. package/dist/skills/catalog.js.map +0 -1
  291. package/dist/skills/installer.d.ts +0 -10
  292. package/dist/skills/installer.d.ts.map +0 -1
  293. package/dist/skills/installer.js +0 -138
  294. package/dist/skills/installer.js.map +0 -1
  295. package/dist/skills/integrity.d.ts +0 -4
  296. package/dist/skills/integrity.d.ts.map +0 -1
  297. package/dist/skills/integrity.js +0 -36
  298. package/dist/skills/integrity.js.map +0 -1
  299. package/docs/dynamic-thoroughness.md +0 -286
  300. package/docs/linear-identity-contract.md +0 -139
  301. package/docs/linear-identity.md +0 -293
@@ -1,286 +0,0 @@
1
- # Common Bugs Checklist
2
-
3
- Quick-reference bug patterns organized by category. For detailed code examples, explanations, and comprehensive review checklists, see the dedicated language guides linked below.
4
-
5
- ## Universal Issues
6
-
7
- ### Logic Errors
8
- - [ ] Off-by-one errors in loops and array access
9
- - [ ] Incorrect boolean logic (De Morgan's law violations)
10
- - [ ] Missing null/undefined checks
11
- - [ ] Race conditions in concurrent code
12
- - [ ] Incorrect comparison operators (`==` vs `===`, `=` vs `==`)
13
- - [ ] Integer overflow/underflow
14
- - [ ] Floating point comparison issues
15
-
16
- ### Resource Management
17
- - [ ] Memory leaks (unclosed connections, listeners)
18
- - [ ] File handles not closed
19
- - [ ] Database connections not released
20
- - [ ] Event listeners not removed
21
- - [ ] Timers/intervals not cleared
22
-
23
- ### Error Handling
24
- - [ ] Swallowed exceptions (empty catch blocks)
25
- - [ ] Generic exception handling hiding specific errors
26
- - [ ] Missing error propagation
27
- - [ ] Incorrect error types thrown
28
- - [ ] Missing finally/cleanup blocks
29
-
30
- ## TypeScript/JavaScript
31
-
32
- - [ ] `==` instead of `===`
33
- - [ ] Using `any` — prefer proper types or `unknown` with type guards
34
- - [ ] Missing `await` on async calls
35
- - [ ] Unhandled promise rejections (no try-catch around await)
36
- - [ ] `this` context lost in callbacks
37
- - [ ] Missing `key` prop in lists
38
- - [ ] Closure capturing stale loop variable
39
- - [ ] `parseInt` without radix parameter
40
- - [ ] Modifying array/object during iteration
41
-
42
- **Full guide:** [TypeScript Review Guide](typescript.md)
43
-
44
- ## React / React 19
45
-
46
- - [ ] Hooks called conditionally or in loops (violates Rules of Hooks)
47
- - [ ] `useEffect` dependency array incomplete or incorrect
48
- - [ ] `useEffect` missing cleanup function (subscriptions, timers, fetches)
49
- - [ ] `useEffect` used for derived state (use `useMemo` instead)
50
- - [ ] `useMemo`/`useCallback` over-used or used without `React.memo`
51
- - [ ] Component defined inside another component (re-mounts every render)
52
- - [ ] Unstable props (inline objects/functions passed to memo components)
53
- - [ ] Direct mutation of props
54
- - [ ] List missing `key` or using array index as key (reorderable lists)
55
- - [ ] Server Component using client APIs (`useState`, `useEffect`, `onClick`)
56
- - [ ] `'use client'` on parent making entire subtree client-side
57
- - [ ] `useActionState` calling `setState` instead of returning new state
58
- - [ ] `useFormStatus` called in same component as `<form>` (must be in child)
59
- - [ ] `useOptimistic` used for critical operations (payments, deletions)
60
- - [ ] Single Suspense boundary for entire page (slow blocks fast)
61
- - [ ] Missing Error Boundary wrapping Suspense
62
- - [ ] `use()` Hook receiving a new Promise each render
63
-
64
- **TanStack Query v5:**
65
- - [ ] `queryKey` missing parameters that affect data
66
- - [ ] Default `staleTime: 0` causing excessive refetches
67
- - [ ] `useSuspenseQuery` with `enabled` option (not supported)
68
- - [ ] Mutation not invalidating related queries on success
69
- - [ ] Optimistic update missing rollback in `onError`
70
- - [ ] Using v4 array syntax (`useQuery(['key'], fn)`) instead of v5 object syntax
71
-
72
- **Testing:**
73
- - [ ] Using `container.querySelector` instead of `screen.getByRole`
74
- - [ ] Using `fireEvent` instead of `userEvent`
75
- - [ ] Testing implementation details instead of user-visible behavior
76
- - [ ] Using `getBy*` for async content (use `findBy*`)
77
-
78
- **Full guide:** [React Review Guide](react.md)
79
-
80
- ## Vue 3
81
-
82
- - [ ] Destructuring `reactive()` object loses reactivity (use `toRefs`)
83
- - [ ] Passing `props.x` to composable instead of `() => props.x` or `toRef(props, 'x')`
84
- - [ ] `watch` with async callback missing `onCleanup` (race condition)
85
- - [ ] `computed` with side effects (mutations, API calls)
86
- - [ ] `v-for` using index as `:key` when list can reorder
87
- - [ ] `v-if` and `v-for` on the same element
88
- - [ ] `defineProps` without TypeScript type declaration
89
- - [ ] `withDefaults` object default values not using factory functions
90
- - [ ] Directly mutating props instead of emitting events
91
- - [ ] `watchEffect` with unclear dependencies causing over-triggering
92
-
93
- **Full guide:** [Vue 3 Review Guide](vue.md)
94
-
95
- ## Python
96
-
97
- - [ ] Mutable default arguments (`def f(x=[])`)
98
- - [ ] Bare `except:` catching `KeyboardInterrupt` and `SystemExit`
99
- - [ ] Shared mutable class attributes (`class C: items = []`)
100
- - [ ] Using `is` instead of `==` for value comparison
101
- - [ ] Forgetting `self` parameter in methods
102
- - [ ] Modifying list while iterating
103
- - [ ] String concatenation in loops (use `"".join()`)
104
- - [ ] Not closing files (use `with` statement)
105
- - [ ] Missing type annotations on public functions
106
-
107
- **Full guide:** [Python Review Guide](python.md)
108
-
109
- ## Rust
110
-
111
- **Ownership & Borrowing:**
112
- - [ ] Unnecessary `clone()` to work around borrow checker
113
- - [ ] `Arc<Mutex<T>>` when single-owner would suffice
114
- - [ ] Storing borrows in structs when owned data is simpler
115
- - [ ] Unnecessary `RefCell` (runtime checks vs compile-time)
116
-
117
- **Unsafe Code:**
118
- - [ ] `unsafe` block without `SAFETY:` comment explaining invariants
119
- - [ ] `unsafe fn` without `# Safety` doc section
120
- - [ ] Unsafe invariants split across modules
121
-
122
- **Async & Concurrency:**
123
- - [ ] Blocking in async context (`std::fs`, `std::thread::sleep`)
124
- - [ ] Holding `std::sync::Mutex` across `.await`
125
- - [ ] Spawned task missing `'static` lifetime bound
126
- - [ ] Dropping a Future without awaiting (forgotten work)
127
-
128
- **Error Handling:**
129
- - [ ] `unwrap()`/`expect()` in production code
130
- - [ ] Library using `anyhow` instead of `thiserror` (callers can't match)
131
- - [ ] Swallowing error context (`map_err(|_| ...)`)
132
- - [ ] Ignoring `must_use` return values
133
-
134
- **Performance:**
135
- - [ ] Unnecessary `.collect()` — prefer lazy iterators
136
- - [ ] String concatenation in loops without `with_capacity`
137
- - [ ] `Box<dyn Trait>` when `impl Trait` would work
138
-
139
- **Full guide:** [Rust Review Guide](rust.md)
140
-
141
- ## Go
142
-
143
- - [ ] Ignoring errors (`result, _ := SomeFunction()`)
144
- - [ ] Goroutine with no exit mechanism (leak)
145
- - [ ] Missing or incorrect `context.Context` propagation
146
- - [ ] Loop variable capture issue (Go < 1.22)
147
- - [ ] `defer` in loops (deferred until function, not loop iteration)
148
- - [ ] Variable shadowing
149
- - [ ] Map used before initialization
150
- - [ ] Error wrapping with `%v` instead of `%w` (breaks `errors.Is`/`errors.As`)
151
-
152
- **Full guide:** [Go Review Guide](go.md)
153
-
154
- ## Java / Spring Boot
155
-
156
- - [ ] POJO/DTO with manual boilerplate instead of `record` *(Java 17+)*
157
- - [ ] Traditional switch missing `break` (use switch expressions) *(Java 14+)*
158
- - [ ] Field injection instead of constructor injection
159
- - [ ] JPA N+1 query (missing `fetch join` or `@EntityGraph`)
160
- - [ ] Incorrect `equals`/`hashCode` on JPA entities (avoid `@Data`; prefer stable business key or null-safe id — never all lazy fields)
161
- - [ ] `Optional.get()` without `isPresent()` check
162
- - [ ] Stream operations with side effects
163
-
164
- **Full guide:** [Java Review Guide](java.md) (17/21 + Boot 3)
165
-
166
- ## Java 8 / Spring Boot 2 (Legacy)
167
-
168
- - [ ] Shared `SimpleDateFormat` / legacy `Date` instead of `java.time`
169
- - [ ] `Collectors.toMap` with null values or missing merge function
170
- - [ ] `Optional` used as field/parameter, or `isPresent()`+`get()` as null-check
171
- - [ ] `CompletableFuture.supplyAsync` I/O on `commonPool` (no explicit executor)
172
- - [ ] `RestTemplate` without connect/read timeouts
173
- - [ ] `@Transactional` on private method or same-class self-invocation
174
- - [ ] `parallelStream` with shared mutable state
175
- - [ ] Mixing `javax.*` and `jakarta.*` on Boot 2
176
-
177
- **Full guide:** [Java 8 Review Guide](java8.md)
178
-
179
- ## PHP
180
-
181
- - [ ] Missing `declare(strict_types=1);` in new files
182
- - [ ] Weak comparison (`==`, `!=`) in auth, token, payment, or state logic
183
- - [ ] `in_array()` / `array_search()` used without strict mode
184
- - [ ] SQL built with string concatenation instead of prepared statements
185
- - [ ] User input echoed without context-aware escaping
186
- - [ ] Passwords stored with `md5()` / `sha1()` instead of `password_hash()`
187
- - [ ] Untrusted data passed to `unserialize()`
188
- - [ ] PHP 8.2+ dynamic properties used instead of declared properties
189
- - [ ] Errors hidden with `@` or swallowed in empty `catch` blocks
190
- - [ ] File uploads using client-provided names or missing MIME/size validation
191
-
192
- **Full guide:** [PHP Review Guide](php.md)
193
-
194
- ## Ruby / Rails
195
-
196
- - [ ] Condition assumes `0`, `""`, or `[]` is falsey
197
- - [ ] Mutable Hash/Array default shared across entries (`Hash.new([])`, `Array.new(3, [])`)
198
- - [ ] Bang method return value treated as the transformed object
199
- - [ ] Bare or broad `rescue` hides unrelated failures or exposes `error.message`
200
- - [ ] Dynamic `send`, `constantize`, `eval`, or SQL fragment controlled by user input
201
- - [ ] Untrusted data passed to `Marshal.load`, unsafe YAML loading, or an interpolated shell command
202
- - [ ] Strong parameters use `permit!`, `to_unsafe_h`, or an empty hash allowlist
203
- - [ ] Nested `params.expect` arrays use a flat shape instead of the required `[[...]]` form
204
- - [ ] Active Record query interpolates values or dynamic identifiers into SQL
205
- - [ ] `Model.find(params[:id])` loads a record before ownership or policy scoping (IDOR)
206
- - [ ] `redirect_to` accepts a user-controlled URL with `allow_other_host: true` (open redirect)
207
- - [ ] Browser-authenticated state changes skip CSRF protection or use unsafe session cookie flags
208
- - [ ] Association access in a loop causes N+1 queries
209
- - [ ] Model validation lacks a matching database constraint for a critical invariant
210
- - [ ] `update_all` / `delete_all` unexpectedly skips callbacks and validations
211
- - [ ] Bulk writes can drift a `counter_cache` without reconciliation
212
- - [ ] Active Job retry can duplicate a payment, email, or other external side effect
213
- - [ ] GlobalID job argument can be deleted before deserialization
214
- - [ ] Transaction contains external side effects that cannot roll back
215
- - [ ] Retried create/payment request can duplicate committed work without an idempotency key
216
-
217
- **Full guide:** [Ruby and Rails Review Guide](ruby.md)
218
-
219
- ## Swift
220
-
221
- - [ ] Force-unwrap (`!`) or `try!` where safe unwrapping is possible
222
- - [ ] Closure capturing `self` strongly without `[weak self]` (retain cycle)
223
- - [ ] Reference type (`class`) used where a value type (`struct`) is intended
224
- - [ ] Errors swallowed instead of propagated via `throws` / `Result`
225
- - [ ] Data race across concurrency boundaries (missing `Sendable`, `@MainActor`, actor isolation)
226
- - [ ] Fire-and-forget `Task {}` that is never cancelled or leaks
227
- - [ ] `@ObservedObject` used where `@StateObject` is required for ownership
228
- - [ ] Implicitly unwrapped optional (`var x: T!`) outside IBOutlets
229
- - [ ] Over-broad access control (`public` / `open` where `internal` suffices)
230
-
231
- **Full guide:** [Swift Review Guide](swift.md)
232
-
233
- ## C
234
-
235
- - [ ] Pointer/buffer overflow or underflow
236
- - [ ] Undefined behavior (use-after-free, double-free, null deref)
237
- - [ ] Missing error handling after allocation (`malloc` can return `NULL`)
238
- - [ ] Integer overflow in size calculations
239
- - [ ] Resource leaks (missing `free`, `fclose`, etc.)
240
- - [ ] Missing `static` on file-local functions/variables
241
-
242
- **Full guide:** [C Review Guide](c.md)
243
-
244
- ## C++
245
-
246
- - [ ] Missing RAII wrapper for resources
247
- - [ ] Violating Rule of 0/3/5 (destructor, copy, move)
248
- - [ ] Exception safety issues (no `noexcept` where applicable)
249
- - [ ] Dangling references from returned iterators or references
250
- - [ ] Unnecessary copies (missing `std::move` or pass-by-reference)
251
-
252
- **Full guide:** [C++ Review Guide](cpp.md)
253
-
254
- ## SQL
255
-
256
- - [ ] String concatenation for queries (SQL injection risk) — use parameterized queries
257
- - [ ] Missing indexes on filtered/joined columns
258
- - [ ] `SELECT *` instead of specific columns
259
- - [ ] N+1 query patterns
260
- - [ ] Missing `LIMIT` on large tables
261
- - [ ] Not handling `NULL` comparisons correctly (`IS NULL` vs `= NULL`)
262
- - [ ] Missing transactions for related operations
263
- - [ ] Incorrect JOIN types
264
- - [ ] Collation / case sensitivity surprises across databases (MySQL vs Postgres defaults)
265
- - [ ] Date and timezone handling errors (naive timestamps, server-local `NOW()`, DST)
266
-
267
- **See also:** [Security Review Guide](security-review-guide.md) for SQL injection prevention
268
-
269
- ## API Design
270
-
271
- - [ ] Inconsistent resource naming
272
- - [ ] Wrong HTTP methods (POST for idempotent operations)
273
- - [ ] Missing pagination for list endpoints
274
- - [ ] Incorrect status codes
275
- - [ ] Missing rate limiting
276
- - [ ] Missing input validation and sanitization
277
- - [ ] Trusting client-side validation only
278
-
279
- ## Testing
280
-
281
- - [ ] Testing implementation details instead of behavior
282
- - [ ] Missing edge case tests
283
- - [ ] Flaky tests (non-deterministic)
284
- - [ ] Tests with external dependencies (no mocks)
285
- - [ ] Missing negative tests (error cases)
286
- - [ ] Overly complex test setup