@humanbased/crosscheck 1.2.0 → 1.3.0-beta.81
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.
- package/LICENSE +1 -1
- package/README.md +182 -375
- package/README.zh.md +1 -1
- package/assets/icon-256.png +0 -0
- package/assets/linear-comment.svg +18 -0
- package/assets/linear-onboard.svg +30 -0
- package/assets/linear-status.svg +23 -0
- package/assets/linear-test.svg +34 -0
- package/assets/skills/code-review/.crosscheck-skill.json +9 -0
- package/assets/skills/code-review/LICENSE +21 -0
- package/assets/skills/code-review/SKILL.md +89 -0
- package/assets/skills/code-review/agents/openai.yaml +3 -0
- package/assets/skills/code-review-skill/.crosscheck-skill.json +9 -0
- package/assets/skills/code-review-skill/LICENSE +21 -0
- package/assets/skills/code-review-skill/SKILL.md +231 -0
- package/assets/skills/code-review-skill/assets/pr-review-template.md +137 -0
- package/assets/skills/code-review-skill/assets/review-checklist.md +123 -0
- package/assets/skills/code-review-skill/reference/angular.md +768 -0
- package/assets/skills/code-review-skill/reference/architecture-review-guide.md +472 -0
- package/assets/skills/code-review-skill/reference/c.md +890 -0
- package/assets/skills/code-review-skill/reference/code-quality-universal.md +488 -0
- package/assets/skills/code-review-skill/reference/code-review-best-practices.md +136 -0
- package/assets/skills/code-review-skill/reference/common-bugs-checklist.md +286 -0
- package/assets/skills/code-review-skill/reference/cpp.md +893 -0
- package/assets/skills/code-review-skill/reference/cross-cutting/async-concurrency-patterns.md +515 -0
- package/assets/skills/code-review-skill/reference/cross-cutting/error-handling-principles.md +492 -0
- package/assets/skills/code-review-skill/reference/cross-cutting/n-plus-one-queries.md +309 -0
- package/assets/skills/code-review-skill/reference/cross-cutting/sql-injection-prevention.md +308 -0
- package/assets/skills/code-review-skill/reference/cross-cutting/xss-prevention.md +264 -0
- package/assets/skills/code-review-skill/reference/csharp.md +525 -0
- package/assets/skills/code-review-skill/reference/css-less-sass.md +661 -0
- package/assets/skills/code-review-skill/reference/django.md +985 -0
- package/assets/skills/code-review-skill/reference/fastapi.md +580 -0
- package/assets/skills/code-review-skill/reference/go.md +993 -0
- package/assets/skills/code-review-skill/reference/java.md +409 -0
- package/assets/skills/code-review-skill/reference/java8.md +586 -0
- package/assets/skills/code-review-skill/reference/kotlin.md +1018 -0
- package/assets/skills/code-review-skill/reference/nestjs.md +593 -0
- package/assets/skills/code-review-skill/reference/performance-review-guide.md +816 -0
- package/assets/skills/code-review-skill/reference/php.md +684 -0
- package/assets/skills/code-review-skill/reference/python.md +1073 -0
- package/assets/skills/code-review-skill/reference/qt.md +757 -0
- package/assets/skills/code-review-skill/reference/react.md +871 -0
- package/assets/skills/code-review-skill/reference/ruby.md +964 -0
- package/assets/skills/code-review-skill/reference/rust.md +846 -0
- package/assets/skills/code-review-skill/reference/security-review-guide.md +494 -0
- package/assets/skills/code-review-skill/reference/svelte.md +1064 -0
- package/assets/skills/code-review-skill/reference/swift.md +936 -0
- package/assets/skills/code-review-skill/reference/typescript.md +1016 -0
- package/assets/skills/code-review-skill/reference/vue.md +924 -0
- package/assets/skills/code-review-skill/reference/zig.md +440 -0
- package/assets/skills/code-review-skill/scripts/pr-analyzer.py +435 -0
- package/assets/skills/code-review-skill/scripts/test_pr_analyzer.py +380 -0
- package/assets/skills/codebase-design/.crosscheck-skill.json +9 -0
- package/assets/skills/codebase-design/DEEPENING.md +37 -0
- package/assets/skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
- package/assets/skills/codebase-design/LICENSE +21 -0
- package/assets/skills/codebase-design/SKILL.md +114 -0
- package/assets/skills/codebase-design/agents/openai.yaml +3 -0
- package/assets/skills/diagnosing-bugs/.crosscheck-skill.json +9 -0
- package/assets/skills/diagnosing-bugs/LICENSE +21 -0
- package/assets/skills/diagnosing-bugs/SKILL.md +134 -0
- package/assets/skills/diagnosing-bugs/agents/openai.yaml +3 -0
- package/assets/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
- package/crosscheck.config.example.yml +101 -9
- package/dist/__tests__/board.test.js +11 -0
- package/dist/__tests__/board.test.js.map +1 -1
- package/dist/__tests__/can-write-verdict.test.d.ts +2 -0
- package/dist/__tests__/can-write-verdict.test.d.ts.map +1 -0
- package/dist/__tests__/can-write-verdict.test.js +31 -0
- package/dist/__tests__/can-write-verdict.test.js.map +1 -0
- package/dist/__tests__/codex.test.js +14 -27
- package/dist/__tests__/codex.test.js.map +1 -1
- package/dist/__tests__/comment-bodies.test.js +49 -1
- package/dist/__tests__/comment-bodies.test.js.map +1 -1
- package/dist/__tests__/conflict-resolve.test.js +44 -1
- package/dist/__tests__/conflict-resolve.test.js.map +1 -1
- package/dist/__tests__/fix.test.js +33 -0
- package/dist/__tests__/fix.test.js.map +1 -1
- package/dist/__tests__/linear-branding.test.d.ts +2 -0
- package/dist/__tests__/linear-branding.test.d.ts.map +1 -0
- package/dist/__tests__/linear-branding.test.js +156 -0
- package/dist/__tests__/linear-branding.test.js.map +1 -0
- package/dist/__tests__/linear-client.test.d.ts +2 -0
- package/dist/__tests__/linear-client.test.d.ts.map +1 -0
- package/dist/__tests__/linear-client.test.js +120 -0
- package/dist/__tests__/linear-client.test.js.map +1 -0
- package/dist/__tests__/linear-comment.test.d.ts +2 -0
- package/dist/__tests__/linear-comment.test.d.ts.map +1 -0
- package/dist/__tests__/linear-comment.test.js +151 -0
- package/dist/__tests__/linear-comment.test.js.map +1 -0
- package/dist/__tests__/linear-identity.test.d.ts +2 -0
- package/dist/__tests__/linear-identity.test.d.ts.map +1 -0
- package/dist/__tests__/linear-identity.test.js +253 -0
- package/dist/__tests__/linear-identity.test.js.map +1 -0
- package/dist/__tests__/linear-notify.test.d.ts +2 -0
- package/dist/__tests__/linear-notify.test.d.ts.map +1 -0
- package/dist/__tests__/linear-notify.test.js +144 -0
- package/dist/__tests__/linear-notify.test.js.map +1 -0
- package/dist/__tests__/linear-ref.test.d.ts +2 -0
- package/dist/__tests__/linear-ref.test.d.ts.map +1 -0
- package/dist/__tests__/linear-ref.test.js +261 -0
- package/dist/__tests__/linear-ref.test.js.map +1 -0
- package/dist/__tests__/linear-test-ref.test.d.ts +2 -0
- package/dist/__tests__/linear-test-ref.test.d.ts.map +1 -0
- package/dist/__tests__/linear-test-ref.test.js +81 -0
- package/dist/__tests__/linear-test-ref.test.js.map +1 -0
- package/dist/__tests__/linear-verify.test.d.ts +2 -0
- package/dist/__tests__/linear-verify.test.d.ts.map +1 -0
- package/dist/__tests__/linear-verify.test.js +132 -0
- package/dist/__tests__/linear-verify.test.js.map +1 -0
- package/dist/__tests__/linear-worker.test.d.ts +2 -0
- package/dist/__tests__/linear-worker.test.d.ts.map +1 -0
- package/dist/__tests__/linear-worker.test.js +83 -0
- package/dist/__tests__/linear-worker.test.js.map +1 -0
- package/dist/__tests__/linear-write-possible.test.d.ts +2 -0
- package/dist/__tests__/linear-write-possible.test.d.ts.map +1 -0
- package/dist/__tests__/linear-write-possible.test.js +30 -0
- package/dist/__tests__/linear-write-possible.test.js.map +1 -0
- package/dist/__tests__/onboard-preservation.test.js +59 -3
- package/dist/__tests__/onboard-preservation.test.js.map +1 -1
- package/dist/__tests__/optimize.test.js +2 -0
- package/dist/__tests__/optimize.test.js.map +1 -1
- package/dist/__tests__/repo-picker.test.js +7 -1
- package/dist/__tests__/repo-picker.test.js.map +1 -1
- package/dist/__tests__/repository-guidance.test.d.ts +2 -0
- package/dist/__tests__/repository-guidance.test.d.ts.map +1 -0
- package/dist/__tests__/repository-guidance.test.js +107 -0
- package/dist/__tests__/repository-guidance.test.js.map +1 -0
- package/dist/__tests__/review-comment-body.test.js +35 -0
- package/dist/__tests__/review-comment-body.test.js.map +1 -1
- package/dist/__tests__/review-models.test.js +19 -3
- package/dist/__tests__/review-models.test.js.map +1 -1
- package/dist/__tests__/review-strategy.test.d.ts +2 -0
- package/dist/__tests__/review-strategy.test.d.ts.map +1 -0
- package/dist/__tests__/review-strategy.test.js +397 -0
- package/dist/__tests__/review-strategy.test.js.map +1 -0
- package/dist/__tests__/runner.test.js +29 -1
- package/dist/__tests__/runner.test.js.map +1 -1
- package/dist/__tests__/skill-attribution.test.d.ts +2 -0
- package/dist/__tests__/skill-attribution.test.d.ts.map +1 -0
- package/dist/__tests__/skill-attribution.test.js +53 -0
- package/dist/__tests__/skill-attribution.test.js.map +1 -0
- package/dist/__tests__/skill-broker.test.d.ts +2 -0
- package/dist/__tests__/skill-broker.test.d.ts.map +1 -0
- package/dist/__tests__/skill-broker.test.js +144 -0
- package/dist/__tests__/skill-broker.test.js.map +1 -0
- package/dist/__tests__/skill-catalog.test.d.ts +2 -0
- package/dist/__tests__/skill-catalog.test.d.ts.map +1 -0
- package/dist/__tests__/skill-catalog.test.js +40 -0
- package/dist/__tests__/skill-catalog.test.js.map +1 -0
- package/dist/__tests__/skill-installer.test.d.ts +2 -0
- package/dist/__tests__/skill-installer.test.d.ts.map +1 -0
- package/dist/__tests__/skill-installer.test.js +96 -0
- package/dist/__tests__/skill-installer.test.js.map +1 -0
- package/dist/__tests__/skills-config.test.d.ts +2 -0
- package/dist/__tests__/skills-config.test.d.ts.map +1 -0
- package/dist/__tests__/skills-config.test.js +12 -0
- package/dist/__tests__/skills-config.test.js.map +1 -0
- package/dist/cli.js +29 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/linear-test.d.ts +18 -0
- package/dist/commands/linear-test.d.ts.map +1 -0
- package/dist/commands/linear-test.js +130 -0
- package/dist/commands/linear-test.js.map +1 -0
- package/dist/commands/onboard.d.ts +36 -3
- package/dist/commands/onboard.d.ts.map +1 -1
- package/dist/commands/onboard.js +233 -42
- package/dist/commands/onboard.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +65 -6
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +45 -7
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/skill.d.ts +2 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +16 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +53 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +90 -12
- package/dist/commands/watch.js.map +1 -1
- package/dist/config/loader.d.ts +3 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +13 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/review-model-tiers.json +3 -3
- package/dist/config/review-strategy.json +204 -0
- package/dist/config/schema.d.ts +261 -15
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +90 -8
- package/dist/config/schema.js.map +1 -1
- package/dist/github/client.d.ts +21 -1
- package/dist/github/client.d.ts.map +1 -1
- package/dist/github/client.js +46 -7
- package/dist/github/client.js.map +1 -1
- package/dist/github/webhook.d.ts +4 -0
- package/dist/github/webhook.d.ts.map +1 -1
- package/dist/github/webhook.js.map +1 -1
- package/dist/issues/ticket-ref.d.ts.map +1 -1
- package/dist/issues/ticket-ref.js +6 -5
- package/dist/issues/ticket-ref.js.map +1 -1
- package/dist/lib/annotation.d.ts +7 -0
- package/dist/lib/annotation.d.ts.map +1 -1
- package/dist/lib/annotation.js +11 -1
- package/dist/lib/annotation.js.map +1 -1
- package/dist/lib/board.d.ts +3 -0
- package/dist/lib/board.d.ts.map +1 -1
- package/dist/lib/board.js +4 -2
- package/dist/lib/board.js.map +1 -1
- package/dist/lib/clone.d.ts +1 -0
- package/dist/lib/clone.d.ts.map +1 -1
- package/dist/lib/clone.js +32 -10
- package/dist/lib/clone.js.map +1 -1
- package/dist/lib/comment-bodies.d.ts +37 -0
- package/dist/lib/comment-bodies.d.ts.map +1 -1
- package/dist/lib/comment-bodies.js +47 -9
- package/dist/lib/comment-bodies.js.map +1 -1
- package/dist/lib/repo-picker.d.ts +3 -0
- package/dist/lib/repo-picker.d.ts.map +1 -1
- package/dist/lib/repo-picker.js +45 -9
- package/dist/lib/repo-picker.js.map +1 -1
- package/dist/lib/repository-guidance.d.ts +2 -0
- package/dist/lib/repository-guidance.d.ts.map +1 -0
- package/dist/lib/repository-guidance.js +55 -0
- package/dist/lib/repository-guidance.js.map +1 -0
- package/dist/lib/review-models.d.ts +15 -2
- package/dist/lib/review-models.d.ts.map +1 -1
- package/dist/lib/review-models.js +26 -6
- package/dist/lib/review-models.js.map +1 -1
- package/dist/lib/review-strategy.d.ts +92 -0
- package/dist/lib/review-strategy.d.ts.map +1 -0
- package/dist/lib/review-strategy.js +282 -0
- package/dist/lib/review-strategy.js.map +1 -0
- package/dist/lib/runner.d.ts +92 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +470 -54
- package/dist/lib/runner.js.map +1 -1
- package/dist/lib/workflow.d.ts +9 -0
- package/dist/lib/workflow.d.ts.map +1 -1
- package/dist/lib/workflow.js +20 -0
- package/dist/lib/workflow.js.map +1 -1
- package/dist/linear/client.d.ts +18 -0
- package/dist/linear/client.d.ts.map +1 -0
- package/dist/linear/client.js +67 -0
- package/dist/linear/client.js.map +1 -0
- package/dist/linear/comment.d.ts +20 -0
- package/dist/linear/comment.d.ts.map +1 -0
- package/dist/linear/comment.js +57 -0
- package/dist/linear/comment.js.map +1 -0
- package/dist/linear/identity.d.ts +59 -0
- package/dist/linear/identity.d.ts.map +1 -0
- package/dist/linear/identity.js +187 -0
- package/dist/linear/identity.js.map +1 -0
- package/dist/linear/notify.d.ts +35 -0
- package/dist/linear/notify.d.ts.map +1 -0
- package/dist/linear/notify.js +76 -0
- package/dist/linear/notify.js.map +1 -0
- package/dist/linear/ref.d.ts +13 -0
- package/dist/linear/ref.d.ts.map +1 -0
- package/dist/linear/ref.js +90 -0
- package/dist/linear/ref.js.map +1 -0
- package/dist/linear/verify.d.ts +26 -0
- package/dist/linear/verify.d.ts.map +1 -0
- package/dist/linear/verify.js +67 -0
- package/dist/linear/verify.js.map +1 -0
- package/dist/reviewers/claude.d.ts +4 -1
- package/dist/reviewers/claude.d.ts.map +1 -1
- package/dist/reviewers/claude.js +39 -7
- package/dist/reviewers/claude.js.map +1 -1
- package/dist/reviewers/codex.d.ts +3 -1
- package/dist/reviewers/codex.d.ts.map +1 -1
- package/dist/reviewers/codex.js +76 -70
- package/dist/reviewers/codex.js.map +1 -1
- package/dist/reviewers/conflict-resolve.d.ts +3 -1
- package/dist/reviewers/conflict-resolve.d.ts.map +1 -1
- package/dist/reviewers/conflict-resolve.js +21 -6
- package/dist/reviewers/conflict-resolve.js.map +1 -1
- package/dist/reviewers/fix.d.ts +5 -2
- package/dist/reviewers/fix.d.ts.map +1 -1
- package/dist/reviewers/fix.js +26 -10
- package/dist/reviewers/fix.js.map +1 -1
- package/dist/skills/attribution.d.ts +4 -0
- package/dist/skills/attribution.d.ts.map +1 -0
- package/dist/skills/attribution.js +14 -0
- package/dist/skills/attribution.js.map +1 -0
- package/dist/skills/broker-server.d.ts +2 -0
- package/dist/skills/broker-server.d.ts.map +1 -0
- package/dist/skills/broker-server.js +17 -0
- package/dist/skills/broker-server.js.map +1 -0
- package/dist/skills/broker.d.ts +42 -0
- package/dist/skills/broker.d.ts.map +1 -0
- package/dist/skills/broker.js +285 -0
- package/dist/skills/broker.js.map +1 -0
- package/dist/skills/catalog.d.ts +28 -0
- package/dist/skills/catalog.d.ts.map +1 -0
- package/dist/skills/catalog.js +104 -0
- package/dist/skills/catalog.js.map +1 -0
- package/dist/skills/installer.d.ts +10 -0
- package/dist/skills/installer.d.ts.map +1 -0
- package/dist/skills/installer.js +138 -0
- package/dist/skills/installer.js.map +1 -0
- package/dist/skills/integrity.d.ts +4 -0
- package/dist/skills/integrity.d.ts.map +1 -0
- package/dist/skills/integrity.js +36 -0
- package/dist/skills/integrity.js.map +1 -0
- package/docs/dynamic-thoroughness.md +738 -0
- package/docs/linear-identity-contract.md +139 -0
- package/docs/linear-identity.md +293 -0
- package/get-started.md +207 -11
- package/package.json +4 -3
package/README.zh.md
CHANGED
|
Binary file
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<svg xmlns='http://www.w3.org/2000/svg' width='760' height='270' viewBox='0 0 760 270' font-family='-apple-system, BlinkMacSystemFont, Inter, Segoe UI, sans-serif'>
|
|
2
|
+
<rect width='760' height='270' rx='10' fill='#191b22'/>
|
|
3
|
+
<rect x='0.5' y='0.5' width='759' height='269' rx='10' fill='none' stroke='#2b2f3a'/>
|
|
4
|
+
<clipPath id='c'><circle cx='38' cy='42' r='16'/></clipPath>
|
|
5
|
+
<image href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAARGVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAABAoAMABAAAAAEAAABAAAAAAEZRQrAAAAHNaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xMjU0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjEyNTQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KdDO1SAAADTdJREFUeAHtWnuMXUUdnjmPe+/utraYWlyWSpu2tMKGhxFKALUYiOAfSkyoGF41GokQgzVIUZBsBBUkmhhREgWB1QQoVg1IFYUUUijVgCBPTSEFlFK6hXa73bv33nPOjN83j3PPbrvtvWVbid5pz5nXb2Z+3ze/+c3M2StEJ3QY6DDQYaDDQIeBDgMdBv5PGZAHC/f6VbprhxKHjSXJjEjFulQS20fCFzYvW3Z042DpsKdxDjgBq3/VOEmn4UVKi49rpeZAiYoQWkgRjJbK4SYh06+dfV784J6UOxhlB4yA1b8c7VWq8j2difOiKIjSVAilldAa4DGqxCssBaLvzbtfP3zo7o1alkUQSJHqYHvPjL6L3rfy+yMHg4DoQAxy16DubyTqnjgKFidgIGkknHSixmP+I9IiSQIRpyN9ZSn7siAQIQjIMvX2gdBpsj6nnIC7bq/NTxN1bxQG88YamHYfAJ74GcgFXxmiFGujnilYRyYCBRkhs6T+9pEvX718pxANUcI/UVHVOVcPvs5mUx2mlIA1a3R52+b0ljgm+IRgoK81eaO4Qc6UTWSozotQqrA8sEZm1UdHHgtpIsiGUV006qWHUX0WnikPU0rA0JbsgjCOlo4lmHlMN9c7gyWiqLs1BWUrDU2FWomVUPb5AAn0NKV6+r4ZT1nHACtvvSW9DBaNmfRDOJtHVrKsmTUClHMcjTMFTxyFkoxC6cJXv3XBDQJslEKo3D3tjt7Lf/yC6eQdvqaEgMHBev9td6hzYOxHN7IsX+u5bp4QH5MIpJtLwFfkLYzVcA1k2DlCLY6oSHkF28TwFbt2Da+D5H+fgJ/fpj+ilV45WlOnR3FQTlUqNMCZ2W5icVsfFgLqDFSHl5NrrIV5V0duvO/wXWQQqtatQ41DJVIhR33dO433ywJWrdKlt3am1zZSvQJ7d5wCQOo9vgNHIN7kYRk26eqM0mwDIeP4QAurTBtTyRfb2HLS5ptmPEeUuy7813e+fGIl0NhwwrWHXfWTv+XN2ky0TcDgoO7Zsj0djOLoM0kDbkxxM0NwGhaB+7JivUm7F3Y9g9oQRGeAvO2mYAMszsuxbGAN5bS2PMzqoqsUi2qmV6KXg0PAwIAO3hrLbo4BfqxGT2/+FzGxyKIwiXFVebl3fMa/Yc14UV9OQcfnbv6Eso2EpJM2jB+VcMra/9CWBczoU1+UMrxgrA4FnNZu4saRwaq8nGmnn2nCjBGw69/XOREXOSH6FGdhxkpiHIoQPD2U0pkunLZMdVsvB2PfbW4e1LN3VrOnpQx6vVJsZQDgZZTBisAebgDiZGsSfktzmFmIWbW5TEZiybafiSN3rMGOUHbAnEoAXll8vIh6jzBMqeqIGHv60ZwQ9hNhkFTK50IpXxZhuLPRd9hX5l98wzDrWg0tW8CuWnp+GEW9jQa3OeeePHDEPV1SnH4yTq1lLR56TIi3oEYQkBYERg6XySLPLKfOmD1eesLWobNUVI49VXR/+GNsIpKhN8TYM+vhBLAHGAJ5jFYkob8cyP6xNNvVo7LLjXAbr5YIgNcPN25Ll8kQk8HOAcAo7gbiwe+4eUL0L3IFQHfX/ZCFsNPVkuCrUU+TNj7AlyFP0yYx3sRFhuWNPjSWAm5URpL1xZDiHoFrNs/MNZ3EpLqtYAx1Xy3eqIm+VIn+FBpTaT4kQkFdPkT5Ju5w5soL9zD/A0IctUCKGvY5L29j5CHPNLdO2w+cIFky/wkPFQxMmuDyTBeStm7Swmb1PlItETBWTeeqIOxJcSqzwD14gOAAsIyXcVd7+p8we6QZPnqCFt1dGmbqQZMsS5wHb305CnOwBYwAW7Qy9snAsvE8FBpbkbbeLRFQVbJHY5bMLKJ7Ku4fnuT48AT40F+FGB5BAvlZhwhxynFC1IHWyLANtDezbtrYtNEWeRMMliYgiXM/b0YyQswdwFuKk58gruWiD1ZdTy1HLfkAnG2VV9yrZ9dpM0flhuD41j4hxNmngRRM95JjYBUbhdg8xCVKnQDGKc+ZNBZRmGbPgzEJmBKdXjrEzwAgaxc+D2Bn8A6wiJD9gOVp9fVrf/jqNReO2Tp8YAlDoUvlm+Z846cvFeWL6ZYIwFa2Dc6Gp1a/ubk+qDJJoAMDSNxaNjwvRT/W//zDNXYEIU5fIsXgGgDgxw7PF6Qpb5ZAjpqVyDgZzn7tH0+K2vMwKwY0phXkXeQpNxVadVXS2pcMQY7UEGtzx1h6H1pPSkBLS6BnVvwS0G/BvczMLME0n6JZS1xahHj8WYuDVrBgjhYzeiSutQCMPJypiRX6YH0zmKMOsp4B+pNIBCV8K8RjwbOuSUHeFryRBmyFoootqWpipPFRBl+ZyPOkoSUCrlwmh2G6azmDuO3aBzuTTYMMpvFwF4jhBE84yswlzgFCbNosxbZhqAdHQBke7HJ5pP0KYGzm0iZsB07t3EhoIb4MckY+L0CC1f5BsmlxXmj3uCUC2CwS+ta0oXk+MSA4ezkZAEJgdWzVJ/ULsXguAQtRgzXc+wjimgMOR2LA40MA23J7pxy1NvPq8TlWPBcwfvOPkgahkcOrCNZWjn+DAfjPvYaWCShtjx7RaXYf7gKWAM6eeeDl4ekbAD9rhhBnLEEeoLgdPvyEFBtfQxoqkCBDEkipu4cEZVgbOkmESpDBYUfzSdEZOucMGmIIgQkzpb7QxW6aPXcUzZkZX2irJrz3wU9TemBAqit/oAdG6tlZ2PNiO4itx9cwM6NnnSzEzOmowcCbt0rxx0cJHoQAPJUvYbSjFgpRtnca4wQPTxaI7sZSpGNIUmM4VJwA65teFKq6C9nA4p4IJmcGFYYL9u8OIaYfWC12gVF2sJfQMgHsI0nS2UqFkYI3s37f9pzAAvoXSnEizJ/OjeE3D/JMgG94oIpWTplPnxmIT5ySa45SojrDPYgKYfTZv4ihwRud+pCjqGnq2jPvCnkBU0EwkpS7vopjMfZLGzIQUA674JInD20RUE+D47WSMgMYBqrCFM1/Ng4+GM+EDX8X4snnkcdliGuegQ5yerdNt/IOZ7wX4DF5GICHLBOQlv4gkXfidw9Rqyz+0KrZyy6F2bQe2iKgUVeHaijlQflhOAPrn9Kid5YUMWb813+iJTiCqDQFEd/zgBZbcWeouCWgYJ1HimfF+8UmbI00dYuUS2D0KV59FXwJWUW5rbId2RJDPpImgBeZbfl3FzIHjoAk0TheWe8PPE2dkB6G4f1sFXXRxhKoNz299fIsF2LrNi3u/D1asjFCAgI+F6wTJ6v7REM7VgwJQBPgDBD7+XEN/Ihml+DBKmfFdrgfbz9CS01x+HmbgGgB+dBMwEbpwAJjnkhD39QtEzoAqu/lo4JLYnkAxxXgz1+BxrHRCJkOrT7FhqaEBQyQ8WKmjS3dn3dbBEgtn+PdX2Ef51o0E2FGhWK5IvmatPqgyqvNAjtpVnveL/gJCXbl2o9HZXYF17XtA/V+HDc4dGqWcYA2Q1sETO8JH39zKNsB+5wJOzDIPDivlx3flbLQJZ3VQv9mIXfHOAxENxxHAisg4DoYNp++KQm2KrAQxuymjjOD/YxOIlkH9dEdPomJ0Ux0yzgZr4ZVZq/vtgi4aUBu/uyljfuVDs/L+GcdqkXNkCTAfHRXVRyZYgxFLw7sYmO68M6Tpq97tK7snwO1qq6IsmSBuULLoFbvmn4tWu2gK1TZyNdDlc0lUZmUI/Vy17dhQlX2g58gjB1amZZvgWawFl65zi3IGpELL6sfM1KNNkDBLovaQUOUg9xbZ4URI8xgNRFf+MOt8he+yWtXnb82VunSBAOoQA7PnDN33sxLrt/O+ldWnrsOv6k4lX8bAAFb9KLF8+Z9fgAH7f0PXH1thcEflZ8Jg/S7XLgpPtnx4ac77vOM6SBNmnmXLuZZZspd25JIsHE2AyyJkw1Lse+0Vm+eHnjkNMFQLaPtw806W9H2u20COEJ/7/rr8TMGzFoI0PhZC4HjMOTB8ZJTTPt8kSRfxvPC7oHmRGc6SQA7lqBJ6tso3i8CBgZOS4+bG19cCtIb4YWVyiKQYIlQJAMPAfIO4GebsQftLcXEkJ0Y6E84x2YXGFdpZt6VTErPuBb7yuwXAewUl6P0t7fHV3RXkk/CDh7GrogvphFAuye1Mcu0IYjEYO2axy4dWg4JmxiaB5zxIPl90DpcUlMkY2IPrefb2gX21O3q2yoP6IGBP5/7yjdPHK3q0/HF51iY+iE45GlsYFvhL55spOEZWkdn4gdQ6MJecw0AZidOQSArXTgFxjCD0VR116K4wEJQ6cIXlwyf3kZS3S1rjULdnrTbd9k7JoBDyIEBQBnYgCSf3cKKFfrmF19rXKPS6BJ823qPWfduAhGNo0BG8XXVtNHL+6YMS42orswOwE5lFF43lolDWRdIOdY3LWjr3L+bYuxzT4UHquxT59QWNbL43KShl2Ir6wuCUMZRcuUDvyuvPlBjvmv7Xb5cV/jwt0XvWiU7inUY6DDQYaDDQIeBDgMdBjoMdBj432XgP6c8OQYWMsokAAAAAElFTkSuQmCC' x='22' y='26' width='32' height='32' clip-path='url(#c)'/>
|
|
6
|
+
<text x='68' y='40' fill='#e6e8ee' font-size='14.5' font-weight='600'>crosscheck/review</text>
|
|
7
|
+
<rect x='200' y='28' width='34' height='17' rx='4' fill='#2f3550'/>
|
|
8
|
+
<text x='217' y='40.5' fill='#93a4ff' font-size='10.5' font-weight='600' text-anchor='middle'>APP</text>
|
|
9
|
+
<text x='246' y='40' fill='#767c8b' font-size='12.5'>commented just now</text>
|
|
10
|
+
<line x1='22' y1='62' x2='738' y2='62' stroke='#252932'/>
|
|
11
|
+
<text x='22' y='90' fill='#8b93a3' font-size='13'>🤖 crosscheck/review · crosscheck · <tspan fill='#b6bdcc'>gpt-5.6-terra</tspan></text>
|
|
12
|
+
<text x='22' y='126' font-size='14.5'><tspan fill='#e5c07b' font-weight='700'>NEEDS_WORK</tspan><tspan fill='#c3c9d6'> — codex (gpt-5.6-terra) review of </tspan><tspan fill='#6ea8fe' text-decoration='underline'>feat: add rate limiting to the public API</tspan></text>
|
|
13
|
+
<text x='22' y='162' fill='#c3c9d6' font-size='13.5'>2 blocking findings — unbounded retry loop in <tspan font-family='ui-monospace,Menlo,monospace' fill='#e06c75' font-size='12.5'>limiter.ts:88</tspan>, and the 429</text>
|
|
14
|
+
<text x='22' y='183' fill='#c3c9d6' font-size='13.5'>response omits <tspan font-family='ui-monospace,Menlo,monospace' fill='#e06c75' font-size='12.5'>Retry-After</tspan>.</text>
|
|
15
|
+
<line x1='22' y1='210' x2='738' y2='210' stroke='#252932'/>
|
|
16
|
+
<text x='22' y='232' fill='#5c6373' font-size='11.5' font-family='ui-monospace,Menlo,monospace'><!-- crosscheck: origin=claude reviewer=codex model=gpt-5.6-terra type=review … --></text>
|
|
17
|
+
<text x='738' y='232' fill='#4a505e' font-size='11' text-anchor='end'>hidden in rendered view</text>
|
|
18
|
+
</svg>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="776" height="490" viewBox="0 0 776 490" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13.5">
|
|
2
|
+
<rect width="776" height="490" rx="8" fill="#21252b"/>
|
|
3
|
+
<rect width="776" height="34" rx="8" fill="#2c313a"/>
|
|
4
|
+
<rect y="26" width="776" height="8" fill="#2c313a"/>
|
|
5
|
+
<circle cx="20" cy="17" r="6" fill="#ff5f58"/>
|
|
6
|
+
<circle cx="40" cy="17" r="6" fill="#ffbd2e"/>
|
|
7
|
+
<circle cx="60" cy="17" r="6" fill="#18c132"/>
|
|
8
|
+
<text x="388" y="22" fill="#8b919b" font-size="12" text-anchor="middle">crosscheck onboard</text>
|
|
9
|
+
<text x="18.0" y="52" fill="#c8ccd4" textLength="335.4" lengthAdjust="spacing" font-weight="600" xml:space="preserve">Step 9.5 — Linear write-back (optional)</text>
|
|
10
|
+
<text x="35.2" y="72" fill="#c8ccd4" textLength="533.2" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">Post the review verdict onto the Linear issue a PR belongs to.</text>
|
|
11
|
+
|
|
12
|
+
<text x="35.2" y="112" fill="#c8ccd4" textLength="326.8" lengthAdjust="spacing" xml:space="preserve">[1] off — leave Linear alone</text>
|
|
13
|
+
<text x="35.2" y="132" fill="#c8ccd4" textLength="507.4" lengthAdjust="spacing" xml:space="preserve">[2] api key — works immediately. Comments post under </text><text x="542.6" y="132" fill="#c8ccd4" textLength="197.8" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">your own Linear account</text>
|
|
14
|
+
<text x="35.2" y="152" fill="#c8ccd4" textLength="318.2" lengthAdjust="spacing" xml:space="preserve">[3] workspace app — comments post as </text><text x="353.4" y="152" fill="#56b6c2" textLength="86.0" lengthAdjust="spacing" xml:space="preserve">crosscheck</text><text x="448.0" y="152" fill="#c8ccd4" textLength="215.0" lengthAdjust="spacing" xml:space="preserve">itself, with its own icon</text>
|
|
15
|
+
<text x="207.2" y="172" fill="#c8ccd4" textLength="507.4" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">one app per workspace, ~5 min, needs Linear settings access</text>
|
|
16
|
+
|
|
17
|
+
<text x="35.2" y="212" fill="#c8ccd4" textLength="103.2" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">Current: off</text>
|
|
18
|
+
|
|
19
|
+
<text x="35.2" y="252" fill="#c8ccd4" textLength="111.8" lengthAdjust="spacing" xml:space="preserve">Choice [1]: 3</text>
|
|
20
|
+
<text x="35.2" y="272" fill="#c8ccd4" textLength="653.6" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">Your Linear team key prefixes, so refs like ENG-42 in a branch name resolve.</text>
|
|
21
|
+
<text x="35.2" y="292" fill="#c8ccd4" textLength="567.6" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">Comma-separated. Leave blank to only follow full linear.app links.</text>
|
|
22
|
+
<text x="35.2" y="312" fill="#c8ccd4" textLength="111.8" lengthAdjust="spacing" xml:space="preserve">team keys: IN</text>
|
|
23
|
+
|
|
24
|
+
<text x="35.2" y="352" fill="#c8ccd4" textLength="576.2" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">Create the app, then set LINEAR_CLIENT_ID and LINEAR_CLIENT_SECRET.</text>
|
|
25
|
+
<text x="35.2" y="372" fill="#c8ccd4" textLength="309.6" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">Walkthrough: docs/linear-identity.md</text>
|
|
26
|
+
|
|
27
|
+
<text x="18.0" y="412" fill="#c8ccd4" textLength="283.8" lengthAdjust="spacing" font-weight="600" xml:space="preserve">Step 10 — review and write config</text>
|
|
28
|
+
|
|
29
|
+
<text x="35.2" y="452" fill="#c8ccd4" textLength="111.8" lengthAdjust="spacing" xml:space="preserve">linear </text><text x="147.0" y="452" fill="#56b6c2" textLength="154.8" lengthAdjust="spacing" xml:space="preserve">client_credentials</text><text x="310.4" y="452" fill="#c8ccd4" textLength="34.4" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">(IN)</text>
|
|
30
|
+
</svg>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="578" height="350" viewBox="0 0 578 350" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13.5">
|
|
2
|
+
<rect width="578" height="350" rx="8" fill="#21252b"/>
|
|
3
|
+
<rect width="578" height="34" rx="8" fill="#2c313a"/>
|
|
4
|
+
<rect y="26" width="578" height="8" fill="#2c313a"/>
|
|
5
|
+
<circle cx="20" cy="17" r="6" fill="#ff5f58"/>
|
|
6
|
+
<circle cx="40" cy="17" r="6" fill="#ffbd2e"/>
|
|
7
|
+
<circle cx="60" cy="17" r="6" fill="#18c132"/>
|
|
8
|
+
<text x="289" y="22" fill="#8b919b" font-size="12" text-anchor="middle">crosscheck status</text>
|
|
9
|
+
<text x="35.2" y="52" fill="#c8ccd4" textLength="51.6" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">Config</text>
|
|
10
|
+
<text x="52.4" y="72" fill="#c8ccd4" textLength="189.2" lengthAdjust="spacing" font-weight="600" xml:space="preserve">config path </text><text x="250.2" y="72" fill="#c8ccd4" textLength="206.4" lengthAdjust="spacing" xml:space="preserve">~/.crosscheck/config.yml</text>
|
|
11
|
+
<text x="52.4" y="92" fill="#c8ccd4" textLength="189.2" lengthAdjust="spacing" font-weight="600" xml:space="preserve">mode </text><text x="250.2" y="92" fill="#c8ccd4" textLength="103.2" lengthAdjust="spacing" xml:space="preserve">cross-vendor</text>
|
|
12
|
+
<text x="52.4" y="112" fill="#c8ccd4" textLength="189.2" lengthAdjust="spacing" font-weight="600" xml:space="preserve">quality tier </text><text x="250.2" y="112" fill="#c8ccd4" textLength="68.8" lengthAdjust="spacing" xml:space="preserve">balanced</text>
|
|
13
|
+
<text x="52.4" y="132" fill="#c8ccd4" textLength="189.2" lengthAdjust="spacing" font-weight="600" xml:space="preserve">codex auth </text><text x="250.2" y="132" fill="#c8ccd4" textLength="103.2" lengthAdjust="spacing" xml:space="preserve">subscription</text>
|
|
14
|
+
<text x="52.4" y="152" fill="#c8ccd4" textLength="189.2" lengthAdjust="spacing" font-weight="600" xml:space="preserve">codex model </text><text x="250.2" y="152" fill="#c8ccd4" textLength="120.4" lengthAdjust="spacing" xml:space="preserve">auto (by tier)</text>
|
|
15
|
+
<text x="52.4" y="172" fill="#c8ccd4" textLength="189.2" lengthAdjust="spacing" font-weight="600" xml:space="preserve">claude model </text><text x="250.2" y="172" fill="#c8ccd4" textLength="60.2" lengthAdjust="spacing" xml:space="preserve">default</text>
|
|
16
|
+
<text x="52.4" y="192" fill="#c8ccd4" textLength="189.2" lengthAdjust="spacing" font-weight="600" xml:space="preserve">per-review budget </text><text x="250.2" y="192" fill="#c8ccd4" textLength="206.4" lengthAdjust="spacing" xml:space="preserve">subscription (unlimited)</text>
|
|
17
|
+
|
|
18
|
+
<text x="35.2" y="232" fill="#c8ccd4" textLength="51.6" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">Linear</text>
|
|
19
|
+
<text x="35.2" y="252" fill="#98c379" textLength="17.2" lengthAdjust="spacing" xml:space="preserve">✓</text><text x="61.0" y="252" fill="#c8ccd4" textLength="189.2" lengthAdjust="spacing" font-weight="600" xml:space="preserve">auth mode </text><text x="258.8" y="252" fill="#c8ccd4" textLength="60.2" lengthAdjust="spacing" xml:space="preserve">api_key</text>
|
|
20
|
+
<text x="52.4" y="272" fill="#c8ccd4" textLength="189.2" lengthAdjust="spacing" font-weight="600" xml:space="preserve">organization </text><text x="250.2" y="272" fill="#c8ccd4" textLength="146.2" lengthAdjust="spacing" xml:space="preserve">Inductive Network</text>
|
|
21
|
+
<text x="52.4" y="292" fill="#c8ccd4" textLength="189.2" lengthAdjust="spacing" font-weight="600" xml:space="preserve">writes as </text><text x="250.2" y="292" fill="#c8ccd4" textLength="180.6" lengthAdjust="spacing" xml:space="preserve">yi@inductive.network </text><text x="430.8" y="292" fill="#c8ccd4" textLength="77.4" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">(api key)</text>
|
|
22
|
+
<text x="52.4" y="312" fill="#c8ccd4" textLength="490.2" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">to post as crosscheck itself, see docs/linear-identity.md</text>
|
|
23
|
+
</svg>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="733" height="570" viewBox="0 0 733 570" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13.5">
|
|
2
|
+
<rect width="733" height="570" rx="8" fill="#21252b"/>
|
|
3
|
+
<rect width="733" height="34" rx="8" fill="#2c313a"/>
|
|
4
|
+
<rect y="26" width="733" height="8" fill="#2c313a"/>
|
|
5
|
+
<circle cx="20" cy="17" r="6" fill="#ff5f58"/>
|
|
6
|
+
<circle cx="40" cy="17" r="6" fill="#ffbd2e"/>
|
|
7
|
+
<circle cx="60" cy="17" r="6" fill="#18c132"/>
|
|
8
|
+
<text x="366.5" y="22" fill="#8b919b" font-size="12" text-anchor="middle">crosscheck linear-test</text>
|
|
9
|
+
|
|
10
|
+
<text x="18.0" y="72" fill="#c8ccd4" textLength="189.2" lengthAdjust="spacing" font-weight="600" xml:space="preserve">crosscheck linear-test</text>
|
|
11
|
+
|
|
12
|
+
<text x="18.0" y="112" fill="#98c379" textLength="17.2" lengthAdjust="spacing" xml:space="preserve">✓</text><text x="43.8" y="112" fill="#c8ccd4" textLength="404.2" lengthAdjust="spacing" xml:space="preserve">identity api_key — writes as you@acme.com </text><text x="448.0" y="112" fill="#c8ccd4" textLength="77.4" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">(api key)</text>
|
|
13
|
+
<text x="18.0" y="132" fill="#98c379" textLength="17.2" lengthAdjust="spacing" xml:space="preserve">✓</text><text x="43.8" y="132" fill="#c8ccd4" textLength="154.8" lengthAdjust="spacing" xml:space="preserve">workspace Acme</text>
|
|
14
|
+
<text x="18.0" y="152" fill="#98c379" textLength="17.2" lengthAdjust="spacing" xml:space="preserve">✓</text><text x="43.8" y="152" fill="#c8ccd4" textLength="189.2" lengthAdjust="spacing" xml:space="preserve">reference IN-2269 </text><text x="233.0" y="152" fill="#c8ccd4" textLength="120.4" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">(via argument)</text>
|
|
15
|
+
<text x="18.0" y="172" fill="#98c379" textLength="17.2" lengthAdjust="spacing" xml:space="preserve">✓</text><text x="43.8" y="172" fill="#c8ccd4" textLength="576.2" lengthAdjust="spacing" xml:space="preserve">lookup https://linear.app/acme/issue/IN-2269/tiered-identity</text>
|
|
16
|
+
<text x="18.0" y="192" fill="#98c379" textLength="17.2" lengthAdjust="spacing" xml:space="preserve">✓</text><text x="43.8" y="192" fill="#c8ccd4" textLength="352.6" lengthAdjust="spacing" xml:space="preserve">filter NEEDS_WORK is in comment_on</text>
|
|
17
|
+
|
|
18
|
+
<text x="35.2" y="232" fill="#c8ccd4" textLength="653.6" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">── comment that would be posted ────────────────────────────────────────────</text>
|
|
19
|
+
|
|
20
|
+
<text x="35.2" y="272" fill="#c8ccd4" textLength="309.6" lengthAdjust="spacing" xml:space="preserve">🤖 crosscheck/review · gpt-5.6-terra</text>
|
|
21
|
+
|
|
22
|
+
<text x="35.2" y="312" fill="#c8ccd4" textLength="576.2" lengthAdjust="spacing" xml:space="preserve">**NEEDS_WORK** — codex (gpt-5.6-terra) review of [example: a sample</text>
|
|
23
|
+
<text x="35.2" y="332" fill="#c8ccd4" textLength="344.0" lengthAdjust="spacing" xml:space="preserve">PR](https://github.com/acme/app/pull/42)</text>
|
|
24
|
+
|
|
25
|
+
<text x="35.2" y="372" fill="#c8ccd4" textLength="473.0" lengthAdjust="spacing" xml:space="preserve">Example summary — a real run puts the review text here.</text>
|
|
26
|
+
|
|
27
|
+
<text x="35.2" y="412" fill="#c8ccd4" textLength="662.2" lengthAdjust="spacing" xml:space="preserve"><!-- crosscheck: origin=claude reviewer=codex model=gpt-5.6-terra type=review</text>
|
|
28
|
+
<text x="35.2" y="432" fill="#c8ccd4" textLength="524.6" lengthAdjust="spacing" xml:space="preserve">round=1 verdict=NEEDS_WORK service=crosscheck sha=abc1234 --></text>
|
|
29
|
+
|
|
30
|
+
<text x="35.2" y="472" fill="#c8ccd4" textLength="653.6" lengthAdjust="spacing" opacity="0.55" xml:space="preserve">────────────────────────────────────────────────────────────────────────────</text>
|
|
31
|
+
|
|
32
|
+
<text x="18.0" y="512" fill="#98c379" textLength="369.8" lengthAdjust="spacing" xml:space="preserve">✓ Nothing was posted — this was a dry run.</text>
|
|
33
|
+
|
|
34
|
+
</svg>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"name": "code-review",
|
|
4
|
+
"author": "mattpocock",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"source": "https://github.com/mattpocock/skills",
|
|
7
|
+
"revision": "2ab958093e83e0ec752e6c1c5932da465bf23e0c",
|
|
8
|
+
"integrity": "sha256:59eecd403b82ae0823cad21aa585efa62ac6d00f800137dee4d673b6092c20c6"
|
|
9
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Matt Pocock
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-review
|
|
3
|
+
description: Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes — Standards (does the code follow this repo's documented coding standards?) and Spec (does the code match what the originating issue/PRD asked for?). Runs both reviews in parallel sub-agents and reports them side by side. Use when the user wants to review a branch, a PR, work-in-progress changes, or asks to "review since X".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Two-axis review of the diff between `HEAD` and a fixed point the user supplies:
|
|
7
|
+
|
|
8
|
+
- **Standards** — does the code conform to this repo's documented coding standards?
|
|
9
|
+
- **Spec** — does the code faithfully implement the originating issue / PRD / spec?
|
|
10
|
+
|
|
11
|
+
Both axes run as **parallel sub-agents** so they don't pollute each other's context, then this skill aggregates their findings.
|
|
12
|
+
|
|
13
|
+
The issue tracker should have been provided to you — run `/setup-matt-pocock-skills` if `docs/agents/issue-tracker.md` is missing.
|
|
14
|
+
|
|
15
|
+
## Process
|
|
16
|
+
|
|
17
|
+
### 1. Pin the fixed point
|
|
18
|
+
|
|
19
|
+
Whatever the user said is the fixed point — a commit SHA, branch name, tag, `main`, `HEAD~5`, etc. If they didn't specify one, ask for it.
|
|
20
|
+
|
|
21
|
+
Capture the diff command once: `git diff <fixed-point>...HEAD` (three-dot, so the comparison is against the merge-base). Also note the list of commits via `git log <fixed-point>..HEAD --oneline`.
|
|
22
|
+
|
|
23
|
+
Before going further, confirm the fixed point resolves (`git rev-parse <fixed-point>`) and the diff is non-empty. A bad ref or empty diff should fail here — not inside two parallel sub-agents.
|
|
24
|
+
|
|
25
|
+
### 2. Identify the spec source
|
|
26
|
+
|
|
27
|
+
Look for the originating spec, in this order:
|
|
28
|
+
|
|
29
|
+
1. Issue references in the commit messages (`#123`, `Closes #45`, GitLab `!67`, etc.) — fetch via the workflow in `docs/agents/issue-tracker.md`.
|
|
30
|
+
2. A path the user passed as an argument.
|
|
31
|
+
3. A PRD/spec file under `docs/`, `specs/`, or `.scratch/` matching the branch name or feature.
|
|
32
|
+
4. If nothing is found, ask the user where the spec is. If they say there isn't one, the **Spec** sub-agent will skip and report "no spec available".
|
|
33
|
+
|
|
34
|
+
### 3. Identify the standards sources
|
|
35
|
+
|
|
36
|
+
Anything in the repo that documents how code should be written, such as `CODING_STANDARDS.md` or `CONTRIBUTING.md`.
|
|
37
|
+
|
|
38
|
+
On top of whatever the repo documents, the Standards axis always carries the **smell baseline** below — a fixed set of Fowler code smells (_Refactoring_, ch.3) that applies even when a repo documents nothing. Two rules bind it:
|
|
39
|
+
|
|
40
|
+
- **The repo overrides.** A documented repo standard always wins; where it endorses something the baseline would flag, suppress the smell.
|
|
41
|
+
- **Always a judgement call.** Each smell is a labelled heuristic ("possible Feature Envy"), never a hard violation — and, like any standard here, skip anything tooling already enforces.
|
|
42
|
+
|
|
43
|
+
Each smell reads *what it is* → *how to fix*; match it against the diff:
|
|
44
|
+
|
|
45
|
+
- **Mysterious Name** — a function, variable, or type whose name doesn't reveal what it does or holds. → rename it; if no honest name comes, the design's murky.
|
|
46
|
+
- **Duplicated Code** — the same logic shape appears in more than one hunk or file in the change. → extract the shared shape, call it from both.
|
|
47
|
+
- **Feature Envy** — a method that reaches into another object's data more than its own. → move the method onto the data it envies.
|
|
48
|
+
- **Data Clumps** — the same few fields or params keep travelling together (a type wanting to be born). → bundle them into one type, pass that.
|
|
49
|
+
- **Primitive Obsession** — a primitive or string standing in for a domain concept that deserves its own type. → give the concept its own small type.
|
|
50
|
+
- **Repeated Switches** — the same `switch`/`if`-cascade on the same type recurs across the change. → replace with polymorphism, or one map both sites share.
|
|
51
|
+
- **Shotgun Surgery** — one logical change forces scattered edits across many files in the diff. → gather what changes together into one module.
|
|
52
|
+
- **Divergent Change** — one file or module is edited for several unrelated reasons. → split so each module changes for one reason.
|
|
53
|
+
- **Speculative Generality** — abstraction, parameters, or hooks added for needs the spec doesn't have. → delete it; inline back until a real need shows.
|
|
54
|
+
- **Message Chains** — long `a.b().c().d()` navigation the caller shouldn't depend on. → hide the walk behind one method on the first object.
|
|
55
|
+
- **Middle Man** — a class or function that mostly just delegates onward. → cut it, call the real target direct.
|
|
56
|
+
- **Refused Bequest** — a subclass or implementer that ignores or overrides most of what it inherits. → drop the inheritance, use composition.
|
|
57
|
+
|
|
58
|
+
### 4. Spawn both sub-agents in parallel
|
|
59
|
+
|
|
60
|
+
Send a single message with two `Agent` tool calls. Use the `general-purpose` subagent for both.
|
|
61
|
+
|
|
62
|
+
**Standards sub-agent prompt** — include:
|
|
63
|
+
|
|
64
|
+
- The full diff command and commit list.
|
|
65
|
+
- The list of standards-source files you found in step 3, **plus the smell baseline from step 3** pasted in full — the sub-agent has no other access to it.
|
|
66
|
+
- The brief: "Report — per file/hunk where relevant — (a) every place the diff violates a documented standard: cite the standard (file + the rule); and (b) any baseline smell you spot: name it and quote the hunk. Distinguish hard violations from judgement calls — documented-standard breaches can be hard, but baseline smells are always judgement calls, and a documented repo standard overrides the baseline. Skip anything tooling enforces. Under 400 words."
|
|
67
|
+
|
|
68
|
+
**Spec sub-agent prompt** — include:
|
|
69
|
+
|
|
70
|
+
- The diff command and commit list.
|
|
71
|
+
- The path or fetched contents of the spec.
|
|
72
|
+
- The brief: "Report: (a) requirements the spec asked for that are missing or partial; (b) behaviour in the diff that wasn't asked for (scope creep); (c) requirements that look implemented but where the implementation looks wrong. Quote the spec line for each finding. Under 400 words."
|
|
73
|
+
|
|
74
|
+
If the spec is missing, skip the Spec sub-agent and note this in the final report.
|
|
75
|
+
|
|
76
|
+
### 5. Aggregate
|
|
77
|
+
|
|
78
|
+
Present the two reports under `## Standards` and `## Spec` headings, verbatim or lightly cleaned. Do **not** merge or rerank findings — the two axes are deliberately separate (see _Why two axes_).
|
|
79
|
+
|
|
80
|
+
End with a one-line summary: total findings per axis, and the worst issue _within each axis_ (if any). Don't pick a single winner across axes — that's the reranking the separation exists to prevent.
|
|
81
|
+
|
|
82
|
+
## Why two axes
|
|
83
|
+
|
|
84
|
+
A change can pass one axis and fail the other:
|
|
85
|
+
|
|
86
|
+
- Code that follows every standard but implements the wrong thing → **Standards pass, Spec fail.**
|
|
87
|
+
- Code that does exactly what the issue asked but breaks the project's conventions → **Spec pass, Standards fail.**
|
|
88
|
+
|
|
89
|
+
Reporting them separately stops one axis from masking the other.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"name": "code-review-skill",
|
|
4
|
+
"author": "awesome-skills",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"source": "https://github.com/awesome-skills/code-review-skill",
|
|
7
|
+
"revision": "95c707b999295f6c8ee2d0d3d1c61cc0c2e1a52c",
|
|
8
|
+
"integrity": "sha256:27a9e6b964e270ded1bb11c7bab31fccc7ed76c7a9a86fd80e330553c8677d75"
|
|
9
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 awesome-skills
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-review-skill
|
|
3
|
+
description: |
|
|
4
|
+
Provides comprehensive code review guidance for React 19, Vue 3, Angular 17+, Svelte 5,
|
|
5
|
+
Rust, TypeScript, Java, Java 8, PHP, Ruby, Rails, Python, Django, FastAPI, Go, C#/.NET, Kotlin, Swift,
|
|
6
|
+
NestJS, C/C++, Zig, CSS/Less/Sass, Qt, and more.
|
|
7
|
+
Covers architecture review, performance review, security audit, code quality anti-patterns,
|
|
8
|
+
and common bugs across all ecosystems.
|
|
9
|
+
Use when: reviewing pull requests, conducting PR reviews, code review, reviewing code changes,
|
|
10
|
+
establishing review standards, mentoring developers, architecture reviews, security audits,
|
|
11
|
+
performance reviews, checking code quality, finding bugs, giving feedback on code.
|
|
12
|
+
allowed-tools:
|
|
13
|
+
- Read
|
|
14
|
+
- Grep
|
|
15
|
+
- Glob
|
|
16
|
+
- Bash # 运行 lint/test/build 命令验证代码质量
|
|
17
|
+
- WebFetch # 查阅最新文档和最佳实践
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Code Review Skill
|
|
21
|
+
|
|
22
|
+
Transform code reviews from gatekeeping to knowledge sharing through constructive feedback, systematic analysis, and collaborative improvement.
|
|
23
|
+
|
|
24
|
+
## When to Use This Skill
|
|
25
|
+
|
|
26
|
+
- Reviewing pull requests and code changes
|
|
27
|
+
- Establishing code review standards for teams
|
|
28
|
+
- Mentoring junior developers through reviews
|
|
29
|
+
- Conducting architecture reviews
|
|
30
|
+
- Creating review checklists and guidelines
|
|
31
|
+
- Improving team collaboration
|
|
32
|
+
- Reducing code review cycle time
|
|
33
|
+
- Maintaining code quality standards
|
|
34
|
+
|
|
35
|
+
## Core Principles
|
|
36
|
+
|
|
37
|
+
### 1. The Review Mindset
|
|
38
|
+
|
|
39
|
+
**Goals of Code Review:**
|
|
40
|
+
- Catch bugs and edge cases
|
|
41
|
+
- Ensure code maintainability
|
|
42
|
+
- Share knowledge across team
|
|
43
|
+
- Enforce coding standards
|
|
44
|
+
- Improve design and architecture
|
|
45
|
+
- Build team culture
|
|
46
|
+
|
|
47
|
+
**Not the Goals:**
|
|
48
|
+
- Show off knowledge
|
|
49
|
+
- Nitpick formatting (use linters)
|
|
50
|
+
- Block progress unnecessarily
|
|
51
|
+
- Rewrite to your preference
|
|
52
|
+
|
|
53
|
+
### 2. Effective Feedback
|
|
54
|
+
|
|
55
|
+
**Good Feedback is:**
|
|
56
|
+
- Specific and actionable
|
|
57
|
+
- Educational, not judgmental
|
|
58
|
+
- Focused on the code, not the person
|
|
59
|
+
- Balanced (praise good work too)
|
|
60
|
+
- Prioritized (critical vs nice-to-have)
|
|
61
|
+
|
|
62
|
+
```markdown
|
|
63
|
+
❌ Bad: "This is wrong."
|
|
64
|
+
✅ Good: "This could cause a race condition when multiple users
|
|
65
|
+
access simultaneously. Consider using a mutex here."
|
|
66
|
+
|
|
67
|
+
❌ Bad: "Why didn't you use X pattern?"
|
|
68
|
+
✅ Good: "Have you considered the Repository pattern? It would
|
|
69
|
+
make this easier to test. Here's an example: [link]"
|
|
70
|
+
|
|
71
|
+
❌ Bad: "Rename this variable."
|
|
72
|
+
✅ Good: "[nit] Consider `userCount` instead of `uc` for
|
|
73
|
+
clarity. Not blocking if you prefer to keep it."
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 3. Review Scope
|
|
77
|
+
|
|
78
|
+
**What to Review:**
|
|
79
|
+
- Logic correctness and edge cases
|
|
80
|
+
- Security vulnerabilities
|
|
81
|
+
- Performance implications
|
|
82
|
+
- Test coverage and quality
|
|
83
|
+
- Error handling
|
|
84
|
+
- Documentation and comments
|
|
85
|
+
- API design and naming
|
|
86
|
+
- Architectural fit
|
|
87
|
+
|
|
88
|
+
**What Not to Review Manually:**
|
|
89
|
+
- Code formatting (use Prettier, Black, etc.)
|
|
90
|
+
- Import organization
|
|
91
|
+
- Linting violations
|
|
92
|
+
- Simple typos
|
|
93
|
+
|
|
94
|
+
## Review Process
|
|
95
|
+
|
|
96
|
+
### Phase 1: Context Gathering (2-3 minutes)
|
|
97
|
+
|
|
98
|
+
Before diving into code, understand:
|
|
99
|
+
1. Read PR description and linked issue
|
|
100
|
+
2. Check PR size (>400 lines? Ask to split)
|
|
101
|
+
3. Review CI/CD status (tests passing?)
|
|
102
|
+
4. Understand the business requirement
|
|
103
|
+
5. Note any relevant architectural decisions
|
|
104
|
+
|
|
105
|
+
> For large diffs, pipe the diff through [`scripts/pr-analyzer.py`](scripts/pr-analyzer.py) (`git diff main...HEAD | python scripts/pr-analyzer.py`) to triage complexity and get a suggested review approach before reading.
|
|
106
|
+
|
|
107
|
+
### Phase 2: High-Level Review (5-10 minutes)
|
|
108
|
+
|
|
109
|
+
1. **Architecture & Design** - Does the solution fit the problem?
|
|
110
|
+
- For significant changes, consult [Architecture Review Guide](reference/architecture-review-guide.md)
|
|
111
|
+
- Check: SOLID principles, coupling/cohesion, anti-patterns
|
|
112
|
+
2. **Performance Assessment** - Are there performance concerns?
|
|
113
|
+
- For performance-critical code, consult [Performance Review Guide](reference/performance-review-guide.md)
|
|
114
|
+
- Check: Algorithm complexity, N+1 queries, memory usage
|
|
115
|
+
3. **File Organization** - Are new files in the right places?
|
|
116
|
+
4. **Testing Strategy** - Are there tests covering edge cases?
|
|
117
|
+
|
|
118
|
+
### Phase 3: Line-by-Line Review (10-20 minutes)
|
|
119
|
+
|
|
120
|
+
For each file, check:
|
|
121
|
+
- **Logic & Correctness** - Edge cases, off-by-one, null checks, race conditions
|
|
122
|
+
- **Security** - Input validation, injection risks, XSS, sensitive data
|
|
123
|
+
- **Performance** - N+1 queries, unnecessary loops, memory leaks
|
|
124
|
+
- **Maintainability** - Clear names, single responsibility, comments
|
|
125
|
+
- **Reuse** - Before accepting new code, search for existing utilities/helpers that could replace it. Check adjacent files and shared modules for similar patterns. See [Universal Quality Guide](reference/code-quality-universal.md) for anti-patterns like parameter sprawl, leaky abstractions, nested conditionals, stringly-typed code, TOCTOU, and no-op updates.
|
|
126
|
+
|
|
127
|
+
### Phase 4: Summary & Decision (2-3 minutes)
|
|
128
|
+
|
|
129
|
+
1. Summarize key concerns
|
|
130
|
+
2. Highlight what you liked
|
|
131
|
+
3. Make clear decision:
|
|
132
|
+
- ✅ Approve
|
|
133
|
+
- 💬 Comment (minor suggestions)
|
|
134
|
+
- 🔄 Request Changes (must address)
|
|
135
|
+
4. Offer to pair if complex
|
|
136
|
+
|
|
137
|
+
## Review Techniques
|
|
138
|
+
|
|
139
|
+
### Technique 1: The Checklist Method
|
|
140
|
+
|
|
141
|
+
Use checklists for consistent reviews. See [Security Review Guide](reference/security-review-guide.md) for comprehensive security checklist.
|
|
142
|
+
|
|
143
|
+
### Technique 2: The Question Approach
|
|
144
|
+
|
|
145
|
+
Instead of stating problems, ask questions:
|
|
146
|
+
|
|
147
|
+
```markdown
|
|
148
|
+
❌ "This will fail if the list is empty."
|
|
149
|
+
✅ "What happens if `items` is an empty array?"
|
|
150
|
+
|
|
151
|
+
❌ "You need error handling here."
|
|
152
|
+
✅ "How should this behave if the API call fails?"
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Technique 3: Suggest, Don't Command
|
|
156
|
+
|
|
157
|
+
Use collaborative language:
|
|
158
|
+
|
|
159
|
+
```markdown
|
|
160
|
+
❌ "You must change this to use async/await"
|
|
161
|
+
✅ "Suggestion: async/await might make this more readable. What do you think?"
|
|
162
|
+
|
|
163
|
+
❌ "Extract this into a function"
|
|
164
|
+
✅ "This logic appears in 3 places. Would it make sense to extract it?"
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Technique 4: Differentiate Severity
|
|
168
|
+
|
|
169
|
+
Use labels to indicate priority:
|
|
170
|
+
|
|
171
|
+
- 🔴 `[blocking]` - Must fix before merge
|
|
172
|
+
- 🟡 `[important]` - Should fix, discuss if disagree
|
|
173
|
+
- 🟢 `[nit]` - Nice to have, not blocking
|
|
174
|
+
- 💡 `[suggestion]` - Alternative approach to consider
|
|
175
|
+
- 📚 `[learning]` - Educational comment, no action needed
|
|
176
|
+
- 🎉 `[praise]` - Good work, keep it up!
|
|
177
|
+
|
|
178
|
+
**Severity levels:** 🔴 / 🟡 / 🟢 are the three severity tiers used as the standard across all guides in this skill — 🔴 blocks the merge, 🟡 should be addressed, 🟢 is optional. The remaining markers (💡 / 📚 / 🎉) are non-blocking annotations.
|
|
179
|
+
|
|
180
|
+
## Language-Specific Guides
|
|
181
|
+
|
|
182
|
+
根据审查的代码语言,查阅对应的详细指南:
|
|
183
|
+
|
|
184
|
+
| Language/Framework | Reference File | Key Topics |
|
|
185
|
+
|-------------------|----------------|------------|
|
|
186
|
+
| **React** | [React Guide](reference/react.md) | Hooks, useEffect, React 19 Actions, RSC, Suspense, TanStack Query v5 |
|
|
187
|
+
| **Vue 3** | [Vue Guide](reference/vue.md) | Composition API, 响应性系统, Props/Emits, Watchers, Composables |
|
|
188
|
+
| **Angular 17+** | [Angular Guide](reference/angular.md) | Signals, Standalone, RxJS, Zoneless, 模板优化, 测试, 路由守卫, HttpInterceptor |
|
|
189
|
+
| **Rust** | [Rust Guide](reference/rust.md) | 所有权/借用, Unsafe 审查, 异步代码, 取消安全性, 错误处理 |
|
|
190
|
+
| **TypeScript** | [TypeScript Guide](reference/typescript.md) | 类型安全, async/await, 不可变性, 测试, 模块解析, TS 5.x |
|
|
191
|
+
| **Python** | [Python Guide](reference/python.md) | 可变默认参数, 异常处理, 类属性 |
|
|
192
|
+
| **Django / DRF** | [Django Guide](reference/django.md) | 安全审查, N+1 查询, Serializer 反模式, ViewSet, 异步视图 |
|
|
193
|
+
| **FastAPI** | [FastAPI Guide](reference/fastapi.md) | Depends, Pydantic v2 validation, async correctness, sessions/N+1, auth vs authorization, test-driven verification |
|
|
194
|
+
| **Java** | [Java Guide](reference/java.md) | Java 17/21 新特性, Spring Boot 3, 虚拟线程, Stream/Optional |
|
|
195
|
+
| **Java 8 / Legacy** | [Java 8 Guide](reference/java8.md) | Java 8, Spring Boot 2, javax.*, Stream/Optional, java.time, CompletableFuture |
|
|
196
|
+
| **PHP** | [PHP Guide](reference/php.md) | PHP 8.x type system, PDO, security review, Composer, PHPUnit/PHPStan |
|
|
197
|
+
| **Ruby / Rails** | [Ruby Guide](reference/ruby.md) | Ruby semantics, Rails 8, Active Record, Active Job, security, testing |
|
|
198
|
+
| **C# / .NET** | [C# Guide](reference/csharp.md) | C# 12 特性, 异步编程, EF Core 性能, ASP.NET Core, LINQ |
|
|
199
|
+
| **Go** | [Go Guide](reference/go.md) | 错误处理, goroutine/channel, context, 接口设计 |
|
|
200
|
+
| **Kotlin / Android** | [Kotlin Guide](reference/kotlin.md) | 协程, Flow, Jetpack Compose, 空安全, 内存泄漏, 架构模式 |
|
|
201
|
+
| **Swift / SwiftUI** | [Swift Guide](reference/swift.md) | Optionals, Swift Concurrency, Sendable/actors, SwiftUI property wrappers, value vs reference types, API design |
|
|
202
|
+
| **NestJS** | [NestJS Guide](reference/nestjs.md) | 依赖注入, 分层架构, DTO 验证, Guard/Interceptor, 循环依赖 |
|
|
203
|
+
| **Svelte / SvelteKit** | [Svelte Guide](reference/svelte.md) | Runes, Load 函数, Form Actions, Store 迁移, SSR/CSR 边界 |
|
|
204
|
+
| **C** | [C Guide](reference/c.md) | 指针/缓冲区, 内存安全, UB, 安全编码, 可移植性, 测试 |
|
|
205
|
+
| **C++** | [C++ Guide](reference/cpp.md) | RAII, 智能指针, C++20/23, constexpr, 测试 |
|
|
206
|
+
| **Zig** | [Zig Guide](reference/zig.md) | Allocators, error unions, defer/errdefer, comptime, C interop |
|
|
207
|
+
| **CSS/Less/Sass** | [CSS Guide](reference/css-less-sass.md) | 变量规范, !important, 性能优化, 响应式, 兼容性 |
|
|
208
|
+
| **Qt** | [Qt Guide](reference/qt.md) | 对象模型, 信号/槽, Model/View, QML, Qt6 迁移, 测试 |
|
|
209
|
+
|
|
210
|
+
## Cross-Cutting Guides
|
|
211
|
+
|
|
212
|
+
Language-agnostic patterns applicable to all code reviews:
|
|
213
|
+
|
|
214
|
+
| Topic | Reference File | Key Topics |
|
|
215
|
+
|-------|----------------|------------|
|
|
216
|
+
| **Architecture Review** | [Architecture Review Guide](reference/architecture-review-guide.md) | SOLID, anti-patterns, coupling/cohesion, dependency direction |
|
|
217
|
+
| **Performance Review** | [Performance Review Guide](reference/performance-review-guide.md) | Web Vitals, N+1, algorithm complexity, memory leaks, caching |
|
|
218
|
+
| **Security Review** | [Security Review Guide](reference/security-review-guide.md) | SQLi, XSS, CSRF, SSRF, IDOR, 命令注入, 跨语言示例 |
|
|
219
|
+
| **Universal Quality** | [Universal Quality Guide](reference/code-quality-universal.md) | Reuse audit, parameter sprawl, leaky abstractions, nested conditionals, stringly-typed code, TOCTOU, no-op updates, redundant state |
|
|
220
|
+
| **Common Bugs** | [Common Bugs Checklist](reference/common-bugs-checklist.md) | Language-specific bug patterns, common pitfalls |
|
|
221
|
+
| **SQL Injection Prevention** | [SQL Injection Guide](reference/cross-cutting/sql-injection-prevention.md) | Parameterized queries, ORM safety, 6 languages, dynamic identifiers, detection |
|
|
222
|
+
| **XSS Prevention** | [XSS Prevention Guide](reference/cross-cutting/xss-prevention.md) | Output encoding, CSP, 5 frameworks, input validation vs encoding, detection |
|
|
223
|
+
| **N+1 Queries** | [N+1 Queries Guide](reference/cross-cutting/n-plus-one-queries.md) | Eager loading, batch fetching, DataLoader, 5 languages, detection |
|
|
224
|
+
| **Error Handling** | [Error Handling Guide](reference/cross-cutting/error-handling-principles.md) | Fail fast, error hierarchy, 7 languages, anti-patterns, logging |
|
|
225
|
+
| **Async & Concurrency** | [Concurrency Guide](reference/cross-cutting/async-concurrency-patterns.md) | Goroutines, async/await, actors, structured concurrency, 7 languages |
|
|
226
|
+
| **Review Best Practices** | [Code Review Best Practices](reference/code-review-best-practices.md) | Communication, reviewer mindset, giving feedback, severity labels |
|
|
227
|
+
|
|
228
|
+
## Additional Resources
|
|
229
|
+
|
|
230
|
+
- [PR Review Template](assets/pr-review-template.md) - PR 审查评论模板
|
|
231
|
+
- [Review Checklist](assets/review-checklist.md) - 快速参考清单
|