@humanbased/crosscheck 1.2.0-beta.81 → 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 (314) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +375 -182
  3. package/README.zh.md +1 -1
  4. package/crosscheck.config.example.yml +9 -101
  5. package/dist/__tests__/board.test.js +0 -11
  6. package/dist/__tests__/board.test.js.map +1 -1
  7. package/dist/__tests__/codex.test.js +27 -14
  8. package/dist/__tests__/codex.test.js.map +1 -1
  9. package/dist/__tests__/comment-bodies.test.js +1 -49
  10. package/dist/__tests__/comment-bodies.test.js.map +1 -1
  11. package/dist/__tests__/conflict-resolve.test.js +1 -44
  12. package/dist/__tests__/conflict-resolve.test.js.map +1 -1
  13. package/dist/__tests__/fix.test.js +0 -33
  14. package/dist/__tests__/fix.test.js.map +1 -1
  15. package/dist/__tests__/onboard-preservation.test.js +3 -59
  16. package/dist/__tests__/onboard-preservation.test.js.map +1 -1
  17. package/dist/__tests__/optimize.test.js +0 -2
  18. package/dist/__tests__/optimize.test.js.map +1 -1
  19. package/dist/__tests__/repo-picker.test.js +1 -7
  20. package/dist/__tests__/repo-picker.test.js.map +1 -1
  21. package/dist/__tests__/review-comment-body.test.js +0 -35
  22. package/dist/__tests__/review-comment-body.test.js.map +1 -1
  23. package/dist/__tests__/review-models.test.js +3 -19
  24. package/dist/__tests__/review-models.test.js.map +1 -1
  25. package/dist/__tests__/runner.test.js +1 -29
  26. package/dist/__tests__/runner.test.js.map +1 -1
  27. package/dist/cli.js +0 -29
  28. package/dist/cli.js.map +1 -1
  29. package/dist/commands/onboard.d.ts +3 -36
  30. package/dist/commands/onboard.d.ts.map +1 -1
  31. package/dist/commands/onboard.js +42 -233
  32. package/dist/commands/onboard.js.map +1 -1
  33. package/dist/commands/review.d.ts.map +1 -1
  34. package/dist/commands/review.js +6 -65
  35. package/dist/commands/review.js.map +1 -1
  36. package/dist/commands/run.d.ts.map +1 -1
  37. package/dist/commands/run.js +7 -45
  38. package/dist/commands/run.js.map +1 -1
  39. package/dist/commands/status.d.ts.map +1 -1
  40. package/dist/commands/status.js +1 -53
  41. package/dist/commands/status.js.map +1 -1
  42. package/dist/commands/watch.d.ts.map +1 -1
  43. package/dist/commands/watch.js +12 -90
  44. package/dist/commands/watch.js.map +1 -1
  45. package/dist/config/loader.d.ts +1 -3
  46. package/dist/config/loader.d.ts.map +1 -1
  47. package/dist/config/loader.js +0 -13
  48. package/dist/config/loader.js.map +1 -1
  49. package/dist/config/review-model-tiers.json +3 -3
  50. package/dist/config/schema.d.ts +15 -261
  51. package/dist/config/schema.d.ts.map +1 -1
  52. package/dist/config/schema.js +8 -90
  53. package/dist/config/schema.js.map +1 -1
  54. package/dist/github/client.d.ts +1 -21
  55. package/dist/github/client.d.ts.map +1 -1
  56. package/dist/github/client.js +7 -46
  57. package/dist/github/client.js.map +1 -1
  58. package/dist/github/webhook.d.ts +0 -4
  59. package/dist/github/webhook.d.ts.map +1 -1
  60. package/dist/github/webhook.js.map +1 -1
  61. package/dist/issues/ticket-ref.d.ts.map +1 -1
  62. package/dist/issues/ticket-ref.js +5 -6
  63. package/dist/issues/ticket-ref.js.map +1 -1
  64. package/dist/lib/annotation.d.ts +0 -7
  65. package/dist/lib/annotation.d.ts.map +1 -1
  66. package/dist/lib/annotation.js +1 -11
  67. package/dist/lib/annotation.js.map +1 -1
  68. package/dist/lib/board.d.ts +0 -3
  69. package/dist/lib/board.d.ts.map +1 -1
  70. package/dist/lib/board.js +2 -4
  71. package/dist/lib/board.js.map +1 -1
  72. package/dist/lib/clone.d.ts +0 -1
  73. package/dist/lib/clone.d.ts.map +1 -1
  74. package/dist/lib/clone.js +10 -32
  75. package/dist/lib/clone.js.map +1 -1
  76. package/dist/lib/comment-bodies.d.ts +0 -37
  77. package/dist/lib/comment-bodies.d.ts.map +1 -1
  78. package/dist/lib/comment-bodies.js +9 -47
  79. package/dist/lib/comment-bodies.js.map +1 -1
  80. package/dist/lib/repo-picker.d.ts +0 -3
  81. package/dist/lib/repo-picker.d.ts.map +1 -1
  82. package/dist/lib/repo-picker.js +9 -45
  83. package/dist/lib/repo-picker.js.map +1 -1
  84. package/dist/lib/review-models.d.ts +2 -15
  85. package/dist/lib/review-models.d.ts.map +1 -1
  86. package/dist/lib/review-models.js +6 -26
  87. package/dist/lib/review-models.js.map +1 -1
  88. package/dist/lib/runner.d.ts +0 -92
  89. package/dist/lib/runner.d.ts.map +1 -1
  90. package/dist/lib/runner.js +54 -470
  91. package/dist/lib/runner.js.map +1 -1
  92. package/dist/lib/workflow.d.ts +0 -9
  93. package/dist/lib/workflow.d.ts.map +1 -1
  94. package/dist/lib/workflow.js +0 -20
  95. package/dist/lib/workflow.js.map +1 -1
  96. package/dist/reviewers/claude.d.ts +1 -4
  97. package/dist/reviewers/claude.d.ts.map +1 -1
  98. package/dist/reviewers/claude.js +7 -39
  99. package/dist/reviewers/claude.js.map +1 -1
  100. package/dist/reviewers/codex.d.ts +1 -3
  101. package/dist/reviewers/codex.d.ts.map +1 -1
  102. package/dist/reviewers/codex.js +70 -76
  103. package/dist/reviewers/codex.js.map +1 -1
  104. package/dist/reviewers/conflict-resolve.d.ts +1 -3
  105. package/dist/reviewers/conflict-resolve.d.ts.map +1 -1
  106. package/dist/reviewers/conflict-resolve.js +6 -21
  107. package/dist/reviewers/conflict-resolve.js.map +1 -1
  108. package/dist/reviewers/fix.d.ts +2 -5
  109. package/dist/reviewers/fix.d.ts.map +1 -1
  110. package/dist/reviewers/fix.js +10 -26
  111. package/dist/reviewers/fix.js.map +1 -1
  112. package/get-started.md +11 -207
  113. package/package.json +3 -4
  114. package/assets/icon-256.png +0 -0
  115. package/assets/linear-comment.svg +0 -18
  116. package/assets/linear-onboard.svg +0 -30
  117. package/assets/linear-status.svg +0 -23
  118. package/assets/linear-test.svg +0 -34
  119. package/assets/skills/code-review/.crosscheck-skill.json +0 -9
  120. package/assets/skills/code-review/LICENSE +0 -21
  121. package/assets/skills/code-review/SKILL.md +0 -89
  122. package/assets/skills/code-review/agents/openai.yaml +0 -3
  123. package/assets/skills/code-review-skill/.crosscheck-skill.json +0 -9
  124. package/assets/skills/code-review-skill/LICENSE +0 -21
  125. package/assets/skills/code-review-skill/SKILL.md +0 -231
  126. package/assets/skills/code-review-skill/assets/pr-review-template.md +0 -137
  127. package/assets/skills/code-review-skill/assets/review-checklist.md +0 -123
  128. package/assets/skills/code-review-skill/reference/angular.md +0 -768
  129. package/assets/skills/code-review-skill/reference/architecture-review-guide.md +0 -472
  130. package/assets/skills/code-review-skill/reference/c.md +0 -890
  131. package/assets/skills/code-review-skill/reference/code-quality-universal.md +0 -488
  132. package/assets/skills/code-review-skill/reference/code-review-best-practices.md +0 -136
  133. package/assets/skills/code-review-skill/reference/common-bugs-checklist.md +0 -286
  134. package/assets/skills/code-review-skill/reference/cpp.md +0 -893
  135. package/assets/skills/code-review-skill/reference/cross-cutting/async-concurrency-patterns.md +0 -515
  136. package/assets/skills/code-review-skill/reference/cross-cutting/error-handling-principles.md +0 -492
  137. package/assets/skills/code-review-skill/reference/cross-cutting/n-plus-one-queries.md +0 -309
  138. package/assets/skills/code-review-skill/reference/cross-cutting/sql-injection-prevention.md +0 -308
  139. package/assets/skills/code-review-skill/reference/cross-cutting/xss-prevention.md +0 -264
  140. package/assets/skills/code-review-skill/reference/csharp.md +0 -525
  141. package/assets/skills/code-review-skill/reference/css-less-sass.md +0 -661
  142. package/assets/skills/code-review-skill/reference/django.md +0 -985
  143. package/assets/skills/code-review-skill/reference/fastapi.md +0 -580
  144. package/assets/skills/code-review-skill/reference/go.md +0 -993
  145. package/assets/skills/code-review-skill/reference/java.md +0 -409
  146. package/assets/skills/code-review-skill/reference/java8.md +0 -586
  147. package/assets/skills/code-review-skill/reference/kotlin.md +0 -1018
  148. package/assets/skills/code-review-skill/reference/nestjs.md +0 -593
  149. package/assets/skills/code-review-skill/reference/performance-review-guide.md +0 -816
  150. package/assets/skills/code-review-skill/reference/php.md +0 -684
  151. package/assets/skills/code-review-skill/reference/python.md +0 -1073
  152. package/assets/skills/code-review-skill/reference/qt.md +0 -757
  153. package/assets/skills/code-review-skill/reference/react.md +0 -871
  154. package/assets/skills/code-review-skill/reference/ruby.md +0 -964
  155. package/assets/skills/code-review-skill/reference/rust.md +0 -846
  156. package/assets/skills/code-review-skill/reference/security-review-guide.md +0 -494
  157. package/assets/skills/code-review-skill/reference/svelte.md +0 -1064
  158. package/assets/skills/code-review-skill/reference/swift.md +0 -936
  159. package/assets/skills/code-review-skill/reference/typescript.md +0 -1016
  160. package/assets/skills/code-review-skill/reference/vue.md +0 -924
  161. package/assets/skills/code-review-skill/reference/zig.md +0 -440
  162. package/assets/skills/code-review-skill/scripts/pr-analyzer.py +0 -435
  163. package/assets/skills/code-review-skill/scripts/test_pr_analyzer.py +0 -380
  164. package/assets/skills/codebase-design/.crosscheck-skill.json +0 -9
  165. package/assets/skills/codebase-design/DEEPENING.md +0 -37
  166. package/assets/skills/codebase-design/DESIGN-IT-TWICE.md +0 -44
  167. package/assets/skills/codebase-design/LICENSE +0 -21
  168. package/assets/skills/codebase-design/SKILL.md +0 -114
  169. package/assets/skills/codebase-design/agents/openai.yaml +0 -3
  170. package/assets/skills/diagnosing-bugs/.crosscheck-skill.json +0 -9
  171. package/assets/skills/diagnosing-bugs/LICENSE +0 -21
  172. package/assets/skills/diagnosing-bugs/SKILL.md +0 -134
  173. package/assets/skills/diagnosing-bugs/agents/openai.yaml +0 -3
  174. package/assets/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +0 -41
  175. package/dist/__tests__/can-write-verdict.test.d.ts +0 -2
  176. package/dist/__tests__/can-write-verdict.test.d.ts.map +0 -1
  177. package/dist/__tests__/can-write-verdict.test.js +0 -31
  178. package/dist/__tests__/can-write-verdict.test.js.map +0 -1
  179. package/dist/__tests__/linear-branding.test.d.ts +0 -2
  180. package/dist/__tests__/linear-branding.test.d.ts.map +0 -1
  181. package/dist/__tests__/linear-branding.test.js +0 -156
  182. package/dist/__tests__/linear-branding.test.js.map +0 -1
  183. package/dist/__tests__/linear-client.test.d.ts +0 -2
  184. package/dist/__tests__/linear-client.test.d.ts.map +0 -1
  185. package/dist/__tests__/linear-client.test.js +0 -120
  186. package/dist/__tests__/linear-client.test.js.map +0 -1
  187. package/dist/__tests__/linear-comment.test.d.ts +0 -2
  188. package/dist/__tests__/linear-comment.test.d.ts.map +0 -1
  189. package/dist/__tests__/linear-comment.test.js +0 -151
  190. package/dist/__tests__/linear-comment.test.js.map +0 -1
  191. package/dist/__tests__/linear-identity.test.d.ts +0 -2
  192. package/dist/__tests__/linear-identity.test.d.ts.map +0 -1
  193. package/dist/__tests__/linear-identity.test.js +0 -253
  194. package/dist/__tests__/linear-identity.test.js.map +0 -1
  195. package/dist/__tests__/linear-notify.test.d.ts +0 -2
  196. package/dist/__tests__/linear-notify.test.d.ts.map +0 -1
  197. package/dist/__tests__/linear-notify.test.js +0 -144
  198. package/dist/__tests__/linear-notify.test.js.map +0 -1
  199. package/dist/__tests__/linear-ref.test.d.ts +0 -2
  200. package/dist/__tests__/linear-ref.test.d.ts.map +0 -1
  201. package/dist/__tests__/linear-ref.test.js +0 -261
  202. package/dist/__tests__/linear-ref.test.js.map +0 -1
  203. package/dist/__tests__/linear-test-ref.test.d.ts +0 -2
  204. package/dist/__tests__/linear-test-ref.test.d.ts.map +0 -1
  205. package/dist/__tests__/linear-test-ref.test.js +0 -81
  206. package/dist/__tests__/linear-test-ref.test.js.map +0 -1
  207. package/dist/__tests__/linear-verify.test.d.ts +0 -2
  208. package/dist/__tests__/linear-verify.test.d.ts.map +0 -1
  209. package/dist/__tests__/linear-verify.test.js +0 -132
  210. package/dist/__tests__/linear-verify.test.js.map +0 -1
  211. package/dist/__tests__/linear-worker.test.d.ts +0 -2
  212. package/dist/__tests__/linear-worker.test.d.ts.map +0 -1
  213. package/dist/__tests__/linear-worker.test.js +0 -83
  214. package/dist/__tests__/linear-worker.test.js.map +0 -1
  215. package/dist/__tests__/linear-write-possible.test.d.ts +0 -2
  216. package/dist/__tests__/linear-write-possible.test.d.ts.map +0 -1
  217. package/dist/__tests__/linear-write-possible.test.js +0 -30
  218. package/dist/__tests__/linear-write-possible.test.js.map +0 -1
  219. package/dist/__tests__/repository-guidance.test.d.ts +0 -2
  220. package/dist/__tests__/repository-guidance.test.d.ts.map +0 -1
  221. package/dist/__tests__/repository-guidance.test.js +0 -107
  222. package/dist/__tests__/repository-guidance.test.js.map +0 -1
  223. package/dist/__tests__/review-strategy.test.d.ts +0 -2
  224. package/dist/__tests__/review-strategy.test.d.ts.map +0 -1
  225. package/dist/__tests__/review-strategy.test.js +0 -397
  226. package/dist/__tests__/review-strategy.test.js.map +0 -1
  227. package/dist/__tests__/skill-attribution.test.d.ts +0 -2
  228. package/dist/__tests__/skill-attribution.test.d.ts.map +0 -1
  229. package/dist/__tests__/skill-attribution.test.js +0 -53
  230. package/dist/__tests__/skill-attribution.test.js.map +0 -1
  231. package/dist/__tests__/skill-broker.test.d.ts +0 -2
  232. package/dist/__tests__/skill-broker.test.d.ts.map +0 -1
  233. package/dist/__tests__/skill-broker.test.js +0 -144
  234. package/dist/__tests__/skill-broker.test.js.map +0 -1
  235. package/dist/__tests__/skill-catalog.test.d.ts +0 -2
  236. package/dist/__tests__/skill-catalog.test.d.ts.map +0 -1
  237. package/dist/__tests__/skill-catalog.test.js +0 -40
  238. package/dist/__tests__/skill-catalog.test.js.map +0 -1
  239. package/dist/__tests__/skill-installer.test.d.ts +0 -2
  240. package/dist/__tests__/skill-installer.test.d.ts.map +0 -1
  241. package/dist/__tests__/skill-installer.test.js +0 -96
  242. package/dist/__tests__/skill-installer.test.js.map +0 -1
  243. package/dist/__tests__/skills-config.test.d.ts +0 -2
  244. package/dist/__tests__/skills-config.test.d.ts.map +0 -1
  245. package/dist/__tests__/skills-config.test.js +0 -12
  246. package/dist/__tests__/skills-config.test.js.map +0 -1
  247. package/dist/commands/linear-test.d.ts +0 -18
  248. package/dist/commands/linear-test.d.ts.map +0 -1
  249. package/dist/commands/linear-test.js +0 -130
  250. package/dist/commands/linear-test.js.map +0 -1
  251. package/dist/commands/skill.d.ts +0 -2
  252. package/dist/commands/skill.d.ts.map +0 -1
  253. package/dist/commands/skill.js +0 -16
  254. package/dist/commands/skill.js.map +0 -1
  255. package/dist/config/review-strategy.json +0 -204
  256. package/dist/lib/repository-guidance.d.ts +0 -2
  257. package/dist/lib/repository-guidance.d.ts.map +0 -1
  258. package/dist/lib/repository-guidance.js +0 -55
  259. package/dist/lib/repository-guidance.js.map +0 -1
  260. package/dist/lib/review-strategy.d.ts +0 -92
  261. package/dist/lib/review-strategy.d.ts.map +0 -1
  262. package/dist/lib/review-strategy.js +0 -282
  263. package/dist/lib/review-strategy.js.map +0 -1
  264. package/dist/linear/client.d.ts +0 -18
  265. package/dist/linear/client.d.ts.map +0 -1
  266. package/dist/linear/client.js +0 -67
  267. package/dist/linear/client.js.map +0 -1
  268. package/dist/linear/comment.d.ts +0 -20
  269. package/dist/linear/comment.d.ts.map +0 -1
  270. package/dist/linear/comment.js +0 -57
  271. package/dist/linear/comment.js.map +0 -1
  272. package/dist/linear/identity.d.ts +0 -59
  273. package/dist/linear/identity.d.ts.map +0 -1
  274. package/dist/linear/identity.js +0 -187
  275. package/dist/linear/identity.js.map +0 -1
  276. package/dist/linear/notify.d.ts +0 -35
  277. package/dist/linear/notify.d.ts.map +0 -1
  278. package/dist/linear/notify.js +0 -76
  279. package/dist/linear/notify.js.map +0 -1
  280. package/dist/linear/ref.d.ts +0 -13
  281. package/dist/linear/ref.d.ts.map +0 -1
  282. package/dist/linear/ref.js +0 -90
  283. package/dist/linear/ref.js.map +0 -1
  284. package/dist/linear/verify.d.ts +0 -26
  285. package/dist/linear/verify.d.ts.map +0 -1
  286. package/dist/linear/verify.js +0 -67
  287. package/dist/linear/verify.js.map +0 -1
  288. package/dist/skills/attribution.d.ts +0 -4
  289. package/dist/skills/attribution.d.ts.map +0 -1
  290. package/dist/skills/attribution.js +0 -14
  291. package/dist/skills/attribution.js.map +0 -1
  292. package/dist/skills/broker-server.d.ts +0 -2
  293. package/dist/skills/broker-server.d.ts.map +0 -1
  294. package/dist/skills/broker-server.js +0 -17
  295. package/dist/skills/broker-server.js.map +0 -1
  296. package/dist/skills/broker.d.ts +0 -42
  297. package/dist/skills/broker.d.ts.map +0 -1
  298. package/dist/skills/broker.js +0 -285
  299. package/dist/skills/broker.js.map +0 -1
  300. package/dist/skills/catalog.d.ts +0 -28
  301. package/dist/skills/catalog.d.ts.map +0 -1
  302. package/dist/skills/catalog.js +0 -104
  303. package/dist/skills/catalog.js.map +0 -1
  304. package/dist/skills/installer.d.ts +0 -10
  305. package/dist/skills/installer.d.ts.map +0 -1
  306. package/dist/skills/installer.js +0 -138
  307. package/dist/skills/installer.js.map +0 -1
  308. package/dist/skills/integrity.d.ts +0 -4
  309. package/dist/skills/integrity.d.ts.map +0 -1
  310. package/dist/skills/integrity.js +0 -36
  311. package/dist/skills/integrity.js.map +0 -1
  312. package/docs/dynamic-thoroughness.md +0 -738
  313. package/docs/linear-identity-contract.md +0 -139
  314. package/docs/linear-identity.md +0 -293
@@ -1,204 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "version": "1.1.0",
4
- "_version_note": "1.1.0 — deletion_only gained a floor on deletions; `additions_max` alone also matched a small edit, so a +2/-2 typo fix was routed to a review-only class. Routing changed, so the version changes with it: a comment citing 1.0.0 has to stay explicable by 1.0.0.",
5
- "updated": "2026-08-07",
6
- "generated_at": "2026-08-07T05:00:00Z",
7
- "review_interval_days": 60,
8
- "report": "docs/dynamic-thoroughness.md",
9
- "runtime_status": "active",
10
- "_tier_map_note": "resolveClaudeModel/resolveCodexModel read tier->model from review-model-tiers.json, not from `vendors` below. The two agree today and CI verifies both against the same provider docs; `vendors` here is the documented policy and the tier map is the runtime lookup.",
11
- "_runtime_status_note": "Read at runtime by src/lib/review-strategy.ts. The runner classifies each PR from the cloned working copy and folds the result into the quality config the reviewers receive; the version, class, and tier are stamped into every annotation.",
12
- "_comment": "Single source of truth for how crosscheck picks a model, effort, and step set. Every review comment cites `version` so a past review can be explained by the policy in force when it ran. Supersedes review-model-tiers.json, which is retained for backwards compat. Re-verify every review_interval_days with `npm run verify:strategy`.",
13
-
14
- "sources": [
15
- {
16
- "name": "Anthropic model catalog",
17
- "url": "https://platform.claude.com/docs/en/about-claude/models/overview",
18
- "checks": ["claude-opus-5", "claude-sonnet-5", "claude-haiku-4-5-20251001"]
19
- },
20
- {
21
- "name": "Anthropic effort parameter",
22
- "url": "https://platform.claude.com/docs/en/build-with-claude/effort",
23
- "checks": ["xhigh", "effort"]
24
- },
25
- {
26
- "name": "OpenAI model catalog",
27
- "url": "https://developers.openai.com/api/docs/models",
28
- "checks": ["gpt-5.6-luna", "gpt-5.6-terra", "gpt-5.6-sol"]
29
- }
30
- ],
31
-
32
- "benchmarks": {
33
- "swe_bench_verified": {
34
- "measures": "Resolving real GitHub issues in Python repositories. Backend/general proxy only.",
35
- "source": "https://benchlm.ai/benchmarks/sweVerified",
36
- "as_of": "2026-08-06",
37
- "caveat": "Comparable within one leaderboard run. Cross-leaderboard positions are indicative only."
38
- },
39
- "frontend_code_arena": {
40
- "measures": "Blind pairwise human preference on generated frontend output: visual fidelity, interaction design, function.",
41
- "source": "https://thenewstack.io/kimi-k3-open-weight-coding/",
42
- "as_of": "2026-07-18",
43
- "caveat": "Measures generation, not defect detection. Claude Opus 5 is absent from the retrieved leaderboard - a missing measurement, not a low score."
44
- }
45
- },
46
-
47
- "models": {
48
- "claude-opus-5": { "vendor": "claude", "license": "closed", "in_usd_mtok": 5, "out_usd_mtok": 25, "context": 1000000, "swe_bench_verified": 0.960, "frontend_elo": null, "effort_levels": ["low","medium","high","xhigh","max"] },
49
- "claude-sonnet-5": { "vendor": "claude", "license": "closed", "in_usd_mtok": 3, "out_usd_mtok": 15, "context": 1000000, "swe_bench_verified": 0.852, "frontend_elo": null, "effort_levels": ["low","medium","high","xhigh","max"] },
50
- "claude-haiku-4-5-20251001": { "vendor": "claude", "license": "closed", "in_usd_mtok": 1, "out_usd_mtok": 5, "context": 200000, "swe_bench_verified": 0.733, "frontend_elo": null, "effort_levels": [] },
51
- "gpt-5.6-sol": { "vendor": "codex", "license": "closed", "in_usd_mtok": 5, "out_usd_mtok": 30, "context": 1050000, "swe_bench_verified": null, "frontend_elo": 1618, "effort_levels": ["none","low","medium","high","xhigh","max"] },
52
- "gpt-5.6-terra": { "vendor": "codex", "license": "closed", "in_usd_mtok": 2, "out_usd_mtok": 12, "context": 1050000, "swe_bench_verified": null, "frontend_elo": null, "effort_levels": ["none","low","medium","high","xhigh","max"] },
53
- "gpt-5.6-luna": { "vendor": "codex", "license": "closed", "in_usd_mtok": 0.2, "out_usd_mtok": 1.2, "context": 1050000, "swe_bench_verified": null, "frontend_elo": null, "effort_levels": ["none","low","medium","high","xhigh","max"] },
54
-
55
- "kimi-k3": { "vendor": "opencode", "license": "Modified MIT", "in_usd_mtok": 3, "out_usd_mtok": 15, "context": 1000000, "swe_bench_verified": null, "frontend_elo": 1679, "effort_levels": [], "status": "planned" },
56
- "glm-5.2": { "vendor": "opencode", "license": "MIT", "in_usd_mtok": 1.4, "out_usd_mtok": 4.4, "context": 1000000, "swe_bench_verified": null, "frontend_elo": 1587, "effort_levels": [], "status": "planned" },
57
- "deepseek-v4-pro": { "vendor": "opencode", "license": "MIT", "in_usd_mtok": 0.435, "out_usd_mtok": 0.87, "context": 1000000, "swe_bench_verified": 0.806, "frontend_elo": null, "effort_levels": ["none","high","max"], "status": "planned" },
58
- "deepseek-v4-flash": { "vendor": "opencode", "license": "MIT", "in_usd_mtok": 0.14, "out_usd_mtok": 0.28, "context": 1000000, "swe_bench_verified": 0.790, "frontend_elo": null, "effort_levels": ["none","high","max"], "status": "planned" }
59
- },
60
-
61
- "banned_models": [
62
- {
63
- "model": "claude-fable-5",
64
- "reason": "Banned from code review on cost. $50/MTok output is 2x claude-opus-5 for a LOWER SWE-bench Verified score (95.0 vs 96.0). At the measured 48k output tokens per review that is $2.40 a call with no capability justification.",
65
- "banned_on": "2026-08-07"
66
- }
67
- ],
68
-
69
- "vendors": {
70
- "claude": {
71
- "cli": "claude", "honors_model_under_subscription": true, "min_cli_version": null,
72
- "tiers": { "fast": "claude-haiku-4-5-20251001", "balanced": "claude-sonnet-5", "thorough": "claude-opus-5" }
73
- },
74
- "codex": {
75
- "cli": "codex", "honors_model_under_subscription": true, "min_cli_version": "0.147.0",
76
- "_min_cli_version_note": "gpt-5.6-* return HTTP 400 'requires a newer version of Codex' below this. The CLI accepts --model under subscription auth; the old auth!=api-key guard in resolveCodexModel was wrong and dropped the configured model.",
77
- "tiers": { "fast": "gpt-5.6-luna", "balanced": "gpt-5.6-terra", "thorough": "gpt-5.6-sol" }
78
- },
79
- "opencode": {
80
- "cli": "opencode", "honors_model_under_subscription": true, "min_cli_version": null,
81
- "status": "planned",
82
- "tiers": { "fast": "deepseek-v4-flash", "balanced": "glm-5.2", "thorough": "kimi-k3" }
83
- }
84
- },
85
-
86
- "domains": {
87
- "_comment": "Capability is domain-shaped, not scalar. claude-opus-5 leads backend defect resolution; kimi-k3 leads frontend. A single tier ladder cannot express that. Detected from changed-file extensions; `mixed` and `unknown` both fall back to `backend`, the conservative default.",
88
- "frontend": {
89
- "match_extensions": ["tsx", "jsx", "vue", "svelte", "css", "scss", "less", "html"],
90
- "threshold": "more frontend files than backend files",
91
- "preferred": { "thorough": ["kimi-k3", "gpt-5.6-sol", "claude-opus-5"], "balanced": ["glm-5.2", "claude-sonnet-5"], "fast": ["gpt-5.6-luna", "deepseek-v4-flash"] },
92
- "basis": "Frontend Code Arena Elo: kimi-k3 1679 > gpt-5.6-sol 1618 > glm-5.2 1587. Falls back to installed vendors when opencode is unavailable.",
93
- "confidence": "hypothesis - the benchmark measures generation, not review. Pending local A/B."
94
- },
95
- "backend": {
96
- "match_extensions": ["py", "go", "rs", "java", "rb", "php", "sql", "ts"],
97
- "preferred": { "thorough": ["claude-opus-5", "gpt-5.6-sol"], "balanced": ["claude-sonnet-5", "gpt-5.6-terra"], "fast": ["deepseek-v4-flash", "gpt-5.6-luna", "claude-haiku-4-5-20251001"] },
98
- "basis": "SWE-bench Verified: claude-opus-5 0.960 > claude-sonnet-5 0.852 > deepseek-v4-pro 0.806 > claude-haiku-4-5 0.733.",
99
- "confidence": "measured"
100
- }
101
- },
102
-
103
- "_pr_classes_note": "ORDER IS THE ROUTING LOGIC - first match wins. `risky` sits second, immediately after `generated`, so consequence-based promotion dominates every cheapening rule below it: a deletion-only PR that removes auth code, or a 2-file change to a migration, must not fall through to `fast`.",
104
- "pr_classes": [
105
- {
106
- "id": "generated", "label": "Generated / vendored only",
107
- "match": { "all_files_match": ["(^|/)(dist|build|node_modules)/", "\\.(lock|sum)$", "(package-lock|pnpm-lock|yarn\\.lock)", "\\.(pb|_pb2)\\.[a-z]+$", "(^|/)generated/"] },
108
- "tier": null, "effort": null, "steps": [],
109
- "reason": "every changed file is generated or vendored - nothing here is human-authored"
110
- },
111
- {
112
- "id": "risky", "label": "Security / data-critical",
113
- "_any_path_matches_note": "Anchored on path segments and extensions. Unanchored, `auth` matched author/authors/oauth and `migration` matched MIGRATION_AND_GROWTH.md, promoting a pure-docs PR to thorough with a full fix/recheck loop.",
114
- "match": {
115
- "any_path_matches": ["(^|/)auth([/.]|$)", "(^|/)tokens?([/.]|$)", "(^|/)secrets?([/.]|$)", "(^|/)credentials?([/.]|$)", "(^|/)passwords?([/.]|$)", "(^|/)crypto([/.]|$)", "(^|/)payments?([/.]|$)", "(^|/)billing([/.]|$)", "(^|/)migrations?([/.]|$)", "\\.sql$", "(^|/)permissions?([/.]|$)", "(^|/)rbac([/.]|$)", "(^|/)sessions?([/.]|$)", "(^|/)cors([/.]|$)"],
116
- "or_labels": ["risk:T3"],
117
- "or_hotfix_to_default_branch": true
118
- },
119
- "tier": "thorough", "effort": "high", "steps": ["review", "fix", "recheck"],
120
- "reason": "touches a security or data-critical path, where a missed defect is expensive - promoted on consequence, not on predicted difficulty"
121
- },
122
- {
123
- "id": "deletion_only", "label": "Deletion-only",
124
- "match": { "additions_max": 5, "deletions_min": 20 },
125
- "tier": "fast", "effort": "medium", "steps": ["review"],
126
- "focus": "dangling references only: imports, call sites, config keys, route registrations, docs pointing at removed symbols",
127
- "reason": "removal-only, so the risk is reference breakage rather than defect density; a wrong deletion is reverted, not patched"
128
- },
129
- {
130
- "id": "docs", "label": "Documentation / specification",
131
- "match": { "doc_fraction_min": 0.5 },
132
- "tier": "balanced", "effort": "high", "steps": ["review"],
133
- "focus": "internal contradiction, claims contradicted by the code the doc describes, stale cross-references",
134
- "reason": "specification review is open-ended design negotiation, which no automated fix loop terminates - review only"
135
- },
136
- {
137
- "id": "test_only", "label": "Test-only",
138
- "match": { "all_files_match": ["((^|/)(__tests__|tests?|e2e|fixtures?)(/|$)|\\.(test|spec)\\.)"] },
139
- "tier": "fast", "effort": "medium", "steps": ["review", "fix"],
140
- "focus": "assertions that cannot fail, over-mocking that voids the test, coverage claimed but not exercised",
141
- "reason": "tests only - no production code path changes"
142
- },
143
- {
144
- "id": "config_infra", "label": "Config / infrastructure",
145
- "match": { "config_fraction_min": 0.5, "source_files_max": 0 },
146
- "tier": "balanced", "effort": "high", "steps": ["review", "fix", "recheck"],
147
- "focus": "secrets in plaintext, permission widening, resource limits, deploy-order breakage",
148
- "reason": "low defect density but high blast radius - cheap to review, expensive to get wrong"
149
- },
150
- {
151
- "id": "trivial", "label": "Trivial",
152
- "match": { "files_max": 3, "src_churn_max": 150 },
153
- "tier": "fast", "effort": "medium", "steps": ["review", "fix"],
154
- "reason": "small and low-risk, and PRs this size merge in minutes - latency matters more than depth"
155
- },
156
- {
157
- "id": "standard", "label": "Standard code",
158
- "match": {},
159
- "tier": "balanced", "effort": "medium", "steps": ["review", "fix", "recheck"],
160
- "reason": "default class - no narrower rule matched"
161
- }
162
- ],
163
-
164
- "ladder": {
165
- "_comment": "Escalate on measured non-convergence, never on predicted complexity. Scope narrows each round; the model never weakens. Where a model exposes no effort levels, the effort step degrades to a model step (see effort_fallback).",
166
- "max_blocking_findings": 5,
167
- "max_rounds": 3,
168
- "max_wall_clock_min": 60,
169
- "effort_fallback": "promote_tier",
170
- "rounds": [
171
- { "round": 1, "step": "review", "scope": "full_pr", "tier": "class", "effort": "class" },
172
- { "round": 1, "step": "fix", "scope": "blocking_only", "tier": "same_as_review", "effort": "one_below_review" },
173
- { "round": 2, "step": "recheck", "scope": "delta_plus_open", "tier": "same_as_review", "effort": "high" },
174
- { "round": 3, "step": "recheck", "scope": "delta_plus_open", "tier": "same_as_review", "effort": "xhigh", "cross_vendor_switch": true },
175
- { "round": 4, "step": "handoff", "scope": "digest", "tier": null, "effort": null }
176
- ]
177
- },
178
-
179
- "modes": {
180
- "cross_vendor": {
181
- "strength": "An independent second perspective. A vendor switch broke a stalled loop twice in the census (PR #2057, #2060) after same-vendor escalation had failed for 3-6 rounds.",
182
- "round_3_lever": "switch vendor AND raise effort",
183
- "max_rounds": 3
184
- },
185
- "single_vendor": {
186
- "strength": "One CLI to authenticate, version, and monitor. No routing logic.",
187
- "round_3_lever": "raise effort, then promote one tier - no fresh-eyes option exists",
188
- "max_rounds": 2
189
- }
190
- },
191
-
192
- "conflict_resolve": {
193
- "tier": "fast", "effort": "low",
194
- "reason": "mechanical text surgery bounded by conflict markers - measured at 37s against ~643s for a review"
195
- },
196
-
197
- "citation": {
198
- "_comment": "Every crosscheck comment states the strategy it ran under, so a past review can be explained by the policy in force at the time.",
199
- "annotation_fields": ["strategy", "class", "tier"],
200
- "annotation_example": "<!-- crosscheck: origin=claude reviewer=claude model=claude-opus-5 type=review round=1 verdict=BLOCK service=crosscheck sha=abc123 strategy=1.1.0 class=risky tier=thorough -->",
201
- "body_template": "{tier} tier · {reason} · strategy v{version}",
202
- "body_example": "_Reviewed with [Claude Code](https://claude.ai/code) via [Crosscheck](https://github.com/humanbased-ai/crosscheck) with Opus 5 (high) — thorough tier · touches a security or data-critical path, where a missed defect is expensive · strategy v1.1.0_"
203
- }
204
- }
@@ -1,2 +0,0 @@
1
- export declare function loadRepositoryReviewGuidance(repoDir: string, baseBranch: string): string;
2
- //# sourceMappingURL=repository-guidance.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repository-guidance.d.ts","sourceRoot":"","sources":["../../src/lib/repository-guidance.ts"],"names":[],"mappings":"AAcA,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CA0CxF"}
@@ -1,55 +0,0 @@
1
- import { execFileSync } from 'child_process';
2
- import { dirname } from 'path';
3
- const GUIDANCE_FILES = new Set(['AGENTS.md', 'CLAUDE.md']);
4
- function git(repoDir, args) {
5
- return execFileSync('git', args, {
6
- cwd: repoDir,
7
- encoding: 'utf8',
8
- stdio: ['ignore', 'pipe', 'pipe'],
9
- maxBuffer: 2 * 1024 * 1024,
10
- }).trim();
11
- }
12
- export function loadRepositoryReviewGuidance(repoDir, baseBranch) {
13
- const baseRef = `origin/${baseBranch}`;
14
- try {
15
- const changedPaths = git(repoDir, ['diff', '--name-only', '--diff-filter=ACDMRT', `${baseRef}...HEAD`, '--'])
16
- .split('\n').filter(Boolean);
17
- if (changedPaths.length === 0)
18
- return '';
19
- const scopes = new Set(['.']);
20
- for (const changedPath of changedPaths) {
21
- let scope = dirname(changedPath);
22
- while (scope !== '.') {
23
- scopes.add(scope);
24
- scope = dirname(scope);
25
- }
26
- }
27
- const candidates = [...scopes].flatMap(scope => [...GUIDANCE_FILES].map(file => scope === '.' ? file : `${scope}/${file}`));
28
- const checks = execFileSync('git', ['cat-file', '--batch-check'], {
29
- cwd: repoDir,
30
- encoding: 'utf8',
31
- input: candidates.map(path => `${baseRef}:${path}\n`).join(''),
32
- stdio: ['pipe', 'pipe', 'pipe'],
33
- maxBuffer: 2 * 1024 * 1024,
34
- }).trim().split('\n');
35
- const guidancePaths = candidates
36
- .filter((_, index) => checks[index]?.includes(' blob '))
37
- .sort((a, b) => a.split('/').length - b.split('/').length || a.localeCompare(b));
38
- if (guidancePaths.length === 0)
39
- return '';
40
- const sections = guidancePaths.map(path => {
41
- const scope = dirname(path);
42
- const content = git(repoDir, ['show', `${baseRef}:${path}`]);
43
- return `### ${path} (scope: ${scope === '.' ? 'repository root' : `${scope}/`})\n${content}`;
44
- });
45
- return [
46
- '## Repository-defined review practices (trusted base branch)',
47
- 'These repository practices override conflicting advice from Crosscheck-provided skills. Apply each file only within its stated scope. More specific directory guidance overrides broader guidance. At the same scope, reconcile AGENTS.md and CLAUDE.md; if they conflict, report the ambiguity instead of inventing a rule.',
48
- ...sections,
49
- ].join('\n\n');
50
- }
51
- catch {
52
- return '';
53
- }
54
- }
55
- //# sourceMappingURL=repository-guidance.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repository-guidance.js","sourceRoot":"","sources":["../../src/lib/repository-guidance.ts"],"names":[],"mappings":"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"}
@@ -1,92 +0,0 @@
1
- import type { QualityConfig } from '../config/schema.js';
2
- export type Tier = QualityConfig['tier'];
3
- export type Domain = 'frontend' | 'backend';
4
- export interface PRContext {
5
- files: string[];
6
- additions: number;
7
- deletions: number;
8
- labels?: string[];
9
- title?: string;
10
- baseRef?: string;
11
- defaultBranch?: string;
12
- }
13
- export interface ResolvedStrategy {
14
- /** Strategy file version, stamped into every comment so a past review stays explicable. */
15
- version: string;
16
- classId: string;
17
- classLabel: string;
18
- /** Human-readable rationale, quoted verbatim in the PR comment. */
19
- reason: string;
20
- /** null = skip this PR entirely. */
21
- tier: Tier | null;
22
- effort: string | null;
23
- steps: string[];
24
- focus?: string;
25
- domain: Domain;
26
- }
27
- /**
28
- * Frontend vs backend, by file-extension majority. `mixed` and `unknown` both
29
- * fall back to backend — the conservative default, because the backend
30
- * preference list is `measured` while the frontend list is still a hypothesis.
31
- */
32
- export declare function detectDomain(files: string[]): Domain;
33
- /** Classifies a PR against the strategy's ordered class list. First match wins. */
34
- export declare function resolveReviewStrategy(pr: PRContext): ResolvedStrategy;
35
- /** Effort levels a model accepts. Empty array = the model has no effort control. */
36
- export declare function effortLevelsFor(model: string): string[];
37
- export declare function isModelBanned(model: string): boolean;
38
- export declare function strategyModelFor(vendor: string, tier: Tier): string | null;
39
- export declare function strategyVersion(): string;
40
- export declare function ladderLimits(): {
41
- maxRounds: number;
42
- maxBlocking: number;
43
- maxWallClockMin: number;
44
- };
45
- /** One vendor that may review this round. */
46
- export interface EscalationLane {
47
- /** The model that would run for this vendor at the class tier. */
48
- model: string;
49
- /** The vendor CLI's effort flags. Omitted = judge on model capability alone. */
50
- accepted?: readonly string[];
51
- }
52
- /**
53
- * Escalation for round N. Raises effort where the vendor that will actually run
54
- * can deliver a higher one; where it cannot, degrades to a tier promotion
55
- * instead — `ladder.effort_fallback`.
56
- *
57
- * `lanes` are the vendors in play, not claude alone. Collapsing them produced
58
- * two separate no-ops:
59
- * - judging by the claude tier model on a codex-only install promoted a tier
60
- * every round (haiku exposes no effort ladder) while codex — which accepts
61
- * none…max — sat at the effort it started on;
62
- * - judging by MODEL capability alone made round 3 identical to round 2 on
63
- * claude: claude-opus-5 reasons at `xhigh`, the claude CLI has no flag for
64
- * it, so the wire effort clamped straight back down to round 2's `high`.
65
- *
66
- * So each lane is judged post-clamp, at the wire, and effort rises only when
67
- * EVERY lane rises there. Otherwise the tier is promoted, which every lane can
68
- * express.
69
- *
70
- * The model never weakens across rounds. Scope narrows instead: a recheck
71
- * examines the delta plus the open findings, not the whole PR again.
72
- */
73
- export declare function escalate(base: {
74
- tier: Tier;
75
- effort: string | null;
76
- }, round: number, lanes: string | readonly EscalationLane[]): {
77
- tier: Tier;
78
- effort: string | null;
79
- };
80
- /** Clamps a requested effort to what the model actually accepts. */
81
- export declare function clampEffort(model: string, effort: string | null): string | null;
82
- /**
83
- * Clamps a requested effort to an accepted vocabulary.
84
- *
85
- * Applied twice on the way to a CLI, against two different sets: what the MODEL
86
- * can reason at (`models[].effort_levels` here) and what the VENDOR CLI has a
87
- * flag for (CLAUDE_EFFORT_LEVELS / CODEX_EFFORT_LEVELS in the config schema).
88
- * They are not the same — claude-opus-5 reasons at `xhigh` and the claude CLI
89
- * cannot ask for it — and only the second reaches the wire.
90
- */
91
- export declare function clampToLevels(effort: string | null, levels: readonly string[]): string | null;
92
- //# sourceMappingURL=review-strategy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"review-strategy.d.ts","sourceRoot":"","sources":["../../src/lib/review-strategy.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAIxD,MAAM,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;AACxC,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;AA2E3C,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,2FAA2F;IAC3F,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAA;IACd,oCAAoC;IACpC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAUD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAIpD;AAsDD,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,SAAS,GAAG,gBAAgB,CAerE;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAE1E;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,YAAY,IAAI;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAMlG;AAYD,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAA;IACb,gFAAgF;IAChF,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC3C,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE,GACxC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAkCvC;AAED,oEAAoE;AACpE,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAE/E;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAW7F"}