@comate/zulu 1.4.0-beta.2 → 1.4.0-beta.3
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/comate-engine/assets/skills/auto-commit/SKILL.md +241 -0
- package/comate-engine/assets/skills/auto-commit/references/data_structures.md +183 -0
- package/comate-engine/assets/skills/auto-commit/references/interaction_instruction.md +220 -0
- package/comate-engine/assets/skills/auto-commit/references/issue_type_mapping.json +19 -0
- package/comate-engine/assets/skills/auto-commit/references/query_reference.md +176 -0
- package/comate-engine/assets/skills/auto-commit/scripts/build_git_commit_payload.py +195 -0
- package/comate-engine/assets/skills/auto-commit/scripts/build_icafe_cards_payload.py +80 -0
- package/comate-engine/assets/skills/auto-commit/scripts/cache_manager.py +69 -0
- package/comate-engine/assets/skills/auto-commit/scripts/create_card_cli.py +67 -0
- package/comate-engine/assets/skills/auto-commit/scripts/git_diff_cli.py +201 -0
- package/comate-engine/assets/skills/auto-commit/scripts/git_utils.py +230 -0
- package/comate-engine/assets/skills/auto-commit/scripts/icafe/__init__.py +66 -0
- package/comate-engine/assets/skills/auto-commit/scripts/icafe/client.py +473 -0
- package/comate-engine/assets/skills/auto-commit/scripts/icafe/farseer.py +52 -0
- package/comate-engine/assets/skills/auto-commit/scripts/icafe/matching.py +784 -0
- package/comate-engine/assets/skills/auto-commit/scripts/logger.py +32 -0
- package/comate-engine/assets/skills/auto-commit/scripts/match_card_cli.py +41 -0
- package/comate-engine/assets/skills/auto-commit/scripts/payload_validators.py +309 -0
- package/comate-engine/assets/skills/auto-commit/scripts/recognize_card_cli.py +63 -0
- package/comate-engine/assets/skills/{automation-browser-comate → automation-browser}/SKILL.md +1 -0
- package/comate-engine/assets/skills/{cnap-comate → cnap}/SKILL.md +1 -0
- package/comate-engine/assets/skills/code-review/SKILL.md +202 -0
- package/comate-engine/assets/skills/code-review/agents/correctness-reviewer.md +62 -0
- package/comate-engine/assets/skills/code-review/agents/custom-reviewer.md +53 -0
- package/comate-engine/assets/skills/code-review/agents/meta-reviewer.md +84 -0
- package/comate-engine/assets/skills/code-review/agents/reliability-reviewer.md +72 -0
- package/comate-engine/assets/skills/code-review/agents/reuse-reviewer.md +101 -0
- package/comate-engine/assets/skills/code-review/agents/style-reviewer.md +65 -0
- package/comate-engine/assets/skills/code-review/evals/SKILL.md +334 -0
- package/comate-engine/assets/skills/code-review/evals/agents/gt-generator.md +76 -0
- package/comate-engine/assets/skills/code-review/evals/agents/miner.md +87 -0
- package/comate-engine/assets/skills/code-review/evals/agents/score-judge.md +168 -0
- package/comate-engine/assets/skills/code-review/evals/references/cli-query-template.md +114 -0
- package/comate-engine/assets/skills/code-review/evals/references/gt-schema.md +77 -0
- package/comate-engine/assets/skills/code-review/references/custom-rules/RULE_TEMPLATE.md +141 -0
- package/comate-engine/assets/skills/code-review/references/dispatch-template.md +142 -0
- package/comate-engine/assets/skills/code-review/references/output-schema.md +197 -0
- package/comate-engine/assets/skills/code-review/references/report-format.md +41 -0
- package/comate-engine/assets/skills/code-review/references/rules/Go/GO_AUTH_RULES.md +29 -0
- package/comate-engine/assets/skills/code-review/references/rules/Go/GO_CORRECTNESS_RULES.md +111 -0
- package/comate-engine/assets/skills/code-review/references/rules/Go/GO_RESOURCE_CONCURRENCY_RULES.md +190 -0
- package/comate-engine/assets/skills/code-review/references/rules/Go/GO_STYLE_RULES.md +354 -0
- package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_AUTH_RULES.md +34 -0
- package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_CORRECTNESS_RULES.md +207 -0
- package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_RESOURCE_CONCURRENCY_RULES.md +220 -0
- package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_STYLE_RULES.md +306 -0
- package/comate-engine/assets/skills/code-review/references/rules/Js/JS_AUTH_RULES.md +48 -0
- package/comate-engine/assets/skills/code-review/references/rules/Js/JS_CORRECTNESS_RULES.md +364 -0
- package/comate-engine/assets/skills/code-review/references/rules/Js/JS_RESOURCE_CONCURRENCY_RULES.md +180 -0
- package/comate-engine/assets/skills/code-review/references/rules/Js/JS_STYLE_RULES.md +350 -0
- package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_AUTH_RULES.md +38 -0
- package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_CORRECTNESS_RULES.md +255 -0
- package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_RESOURCE_CONCURRENCY_RULES.md +180 -0
- package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_STYLE_RULES.md +195 -0
- package/comate-engine/assets/skills/code-review/references/telemetry.md +27 -0
- package/comate-engine/assets/skills/{code-security-comate → code-security}/SKILL.md +1 -0
- package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/SKILL.md +1 -1
- package/comate-engine/assets/skills/create-automation-tasks-comate/SKILL.md +300 -0
- package/comate-engine/assets/skills/create-automation-tasks-comate/references/backend_dev.md +109 -0
- package/comate-engine/assets/skills/create-automation-tasks-comate/references/env_setup.md +130 -0
- package/comate-engine/assets/skills/create-automation-tasks-comate/references/frontend_dev.md +74 -0
- package/comate-engine/assets/skills/create-automation-tasks-comate/references/git_operations.md +88 -0
- package/comate-engine/assets/skills/create-automation-tasks-comate/references/long_running_task.md +96 -0
- package/comate-engine/assets/skills/create-automation-tasks-comate/references/testing_strategy.md +94 -0
- package/comate-engine/assets/skills/create-automation-tasks-comate/scripts/check_config.py +397 -0
- package/comate-engine/assets/skills/{create-rule-comate → create-rule}/SKILL.md +1 -0
- package/comate-engine/assets/skills/{create-skill-comate → create-skill}/SKILL.md +1 -1
- package/comate-engine/assets/skills/{figma2code-comate → figma2code}/SKILL.md +1 -0
- package/comate-engine/assets/skills/{icafe-comate → icafe}/SKILL.md +1 -13
- package/comate-engine/assets/skills/{icode-comate → icode}/SKILL.md +1 -0
- package/comate-engine/node_modules/@comate/plugin-shared-internals/dist/index.js +3 -3
- package/comate-engine/server.js +136 -82
- package/dist/bundle/index.js +20 -9
- package/package.json +1 -1
- /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/cases.md +0 -0
- /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/deploy-troubleshoot.md +0 -0
- /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/install.md +0 -0
- /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/kubectl.md +0 -0
- /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/login.md +0 -0
- /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/oncall.md +0 -0
- /package/comate-engine/assets/skills/{cnap-comate → cnap}/scripts/install_cnap_cli.sh +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/credential_hosting.md +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-go_sql_injection.md +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-java_sql_injection.md +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-php_sql_injection.md +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-python_sql_injection.md +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair_sensitive.md +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/credential_hosting.py +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/credential_poll.py +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/http_client.py +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/parse_scan_result.py +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/repair_vulnerability.py +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/report_chat.py +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/scan_vulnerability.py +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/utils.py +0 -0
- /package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/references/doc-map-extended.md +0 -0
- /package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/references/models-and-billing.md +0 -0
- /package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/references/product-overview.md +0 -0
- /package/comate-engine/assets/skills/{create-image-comate → create-image}/SKILL.md +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/LICENSE.txt +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/agents/analyzer.md +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/agents/comparator.md +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/agents/grader.md +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/assets/eval_review.html +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/eval-viewer/generate_review.py +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/eval-viewer/viewer.html +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/references/schemas.md +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/__init__.py +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/__pycache__/aggregate_benchmark.cpython-311.pyc +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/aggregate_benchmark.py +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/generate_report.py +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/package_skill.py +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/quick_validate.py +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/utils.py +0 -0
- /package/comate-engine/assets/skills/{create-subagent-comate → create-subagent}/SKILL.md +0 -0
- /package/comate-engine/assets/skills/{figma2code-comate → figma2code}/references/codeConnect.md +0 -0
- /package/comate-engine/assets/skills/{figma2code-comate → figma2code}/references/designToken.md +0 -0
- /package/comate-engine/assets/skills/{figma2code-comate → figma2code}/references/image2design.md +0 -0
- /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/SKILL.md +0 -0
- /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/fetch_skills.py +0 -0
- /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/get_download_url.py +0 -0
- /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/install_skill.py +0 -0
- /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/preview_skill.py +0 -0
- /package/comate-engine/assets/skills/{get-ugate-token-comate → get-ugate-token}/SKILL.md +0 -0
- /package/comate-engine/assets/skills/{get-ugate-token-comate → get-ugate-token}/getUgateToken.py +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/ai-workflows.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/commands.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/error-handling.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/git-auto-bindcard-workflow.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/git-bindcard-workflow.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/iql-syntax.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/platform-concepts.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/smart-create-workflow.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/smart-find-workflow.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/smart-update-workflow.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/add_reviewers.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/build_fetch_command.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/check_repo_permission.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/create_branch.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/create_draft_comment.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_ai_cr_result.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_ai_review.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_diff_content.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_diff_file.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_machine_check.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_my_reviews.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_person_commit.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_person_repo.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_branch.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_config.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_members.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_reviews.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_review_comments.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_review_info.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_submit_settings.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/icode-api.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/publish_comments.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/set_review_score.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/start_ai_review.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/submit_review.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/trigger_ai_cr.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/add-reviewer.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/fix-machine-check.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/merge-cr.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/ssh-setup.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/submit-acr.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/submit-cr.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/clone.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/icode-git.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/push.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/push_cr.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/install.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/login.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/add-reviewer.sh +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/common.sh +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/fix-machine-check.sh +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/merge-cr.sh +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/ssh-setup.sh +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/submit-acr.sh +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/submit-cr.sh +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/test-preflight.sh +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/SKILL.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/examples.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/add_member.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/change_scope.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/copy_doc.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/create_doc.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/delete_doc.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/edit_content.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/move_doc.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_comment.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_content.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_flowchart.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_permission.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_recent_view.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_repo.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_user_info.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/update_member.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/upload_attachment.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/scripts/ku_operator.py +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Review 报告输出格式
|
|
2
|
+
|
|
3
|
+
用户需要在 10 秒内抓住关键问题。**简洁是第一优先级。**
|
|
4
|
+
|
|
5
|
+
## 报告模板
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
## Code Review 报告
|
|
9
|
+
|
|
10
|
+
**X 个文件 | +Y/-Z 行 | 深度审查 | 风险:高**
|
|
11
|
+
|
|
12
|
+
> 降级/分批/局部审查等特殊说明(无则省略)
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
### 🔴 P0 严重 (N)
|
|
17
|
+
|
|
18
|
+
**1. [file.ts:42](file.ts#L42)** — 一句话描述风险和触发条件
|
|
19
|
+
建议:一句话修复方向
|
|
20
|
+
|
|
21
|
+
### 🟠 P1 高优 (N)
|
|
22
|
+
|
|
23
|
+
**2. [file.ts:80](file.ts#L80)** — 一句话描述
|
|
24
|
+
建议:一句话建议
|
|
25
|
+
|
|
26
|
+
### 🟡 P2 中等 (N)
|
|
27
|
+
|
|
28
|
+
### 🔵 P3 低优 (N)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
**结论**:建议修复 P0/P1 后合入(或:审查通过,可直接合入)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 输出规则
|
|
36
|
+
|
|
37
|
+
1. 每条 finding **限 2 行**:问题描述 + 建议,各 1 句话
|
|
38
|
+
2. 空级别直接省略,无问题写"审查通过"
|
|
39
|
+
3. 使用可点击路径 `[src/file.ts:42](src/file.ts#L42)`
|
|
40
|
+
4. 超过 10 条时:展示 P0/P1 全部 + P2/P3 各最多 3 条,末尾注明"另有 N 条,回复「展开」可查看"
|
|
41
|
+
5. 来源维度不展示,用户追问时再补充
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Go 接口鉴权规则
|
|
2
|
+
|
|
3
|
+
检测对外接口的鉴权缺失与越权访问风险。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
### AUTH_GO_01. 对外接口缺少鉴权 [high]
|
|
8
|
+
- **检测**:HTTP handler 注册(`mux.Handle`/`router.GET` 等)但无身份校验中间件(JWT 解析/Session 验证),且非公开接口
|
|
9
|
+
- **排除**:健康检查/登录注册/静态资源;全局鉴权中间件已覆盖;Webhook 回调
|
|
10
|
+
|
|
11
|
+
### AUTH_GO_02. 越权访问 - 未校验资源归属 [high]
|
|
12
|
+
- **检测**:handler 能从 context 获取用户身份,但操作资源时只用请求参数中的 ID,未校验资源归属
|
|
13
|
+
- **排除**:管理员接口有角色校验;公共资源
|
|
14
|
+
|
|
15
|
+
### AUTH_GO_03. 身份校验逻辑错误 [high]
|
|
16
|
+
- **检测**:用非加密比较做 token 校验;校验变量来自请求参数而非解析后的 token;校验逻辑可被跳过
|
|
17
|
+
- **排除**:使用 `hmac.Equal` 或安全比较库
|
|
18
|
+
|
|
19
|
+
### AUTH_GO_04. 鉴权中间件配置遗漏 [middle]
|
|
20
|
+
- **检测**:有鉴权中间件但部分路由组/路由前缀未被覆盖
|
|
21
|
+
- **排除**:明确分开的公开/受保护路由组
|
|
22
|
+
|
|
23
|
+
### AUTH_GO_05. 垂直越权 - 敏感操作缺少角色校验 [high]
|
|
24
|
+
- **检测**:管理员级别操作(删除用户/修改权限等)未从 context 校验 role
|
|
25
|
+
- **排除**:有 RBAC 中间件统一处理
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
**通用排除**:健康检查/登录/Webhook;全局鉴权中间件;框架内置权限管理
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Go 正确性规则
|
|
2
|
+
|
|
3
|
+
静态模式可识别的确定性错误,仅看代码结构即可判断,单次执行可触发。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 一、空值与 nil 安全(4项)
|
|
8
|
+
|
|
9
|
+
### CORRECTNESS_GO_01. 对 nil 指针进行方法调用或字段访问 [Critical]
|
|
10
|
+
- **检测**:对可能为 nil 的指针直接访问字段或调用方法,无 nil 判断;接口断言未用 comma-ok 模式;map 取值后直接解引用
|
|
11
|
+
- **排除**:有 nil 判断;上下文保证非 nil
|
|
12
|
+
|
|
13
|
+
```go
|
|
14
|
+
user := db.FindUser(id)
|
|
15
|
+
name := user.Name // user 为 nil 时 panic
|
|
16
|
+
|
|
17
|
+
s := i.(*MyStruct) // 断言失败时 panic,应用 s, ok := i.(*MyStruct)
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### CORRECTNESS_GO_02. 未检查 context.WithCancel 返回的 cancel 函数 [Critical]
|
|
21
|
+
- **检测**:`context.WithCancel`/`WithTimeout`/`WithDeadline` 返回的 cancel 未调用(用 `_` 丢弃,或在错误路径提前 return 前未执行)
|
|
22
|
+
- **排除**:有 `defer cancel()`;cancel 在所有路径均有调用
|
|
23
|
+
|
|
24
|
+
### CORRECTNESS_GO_03. 对 nil map 进行写操作 [Critical]
|
|
25
|
+
- **检测**:map 类型字段或变量未通过 `make` 初始化就进行写操作,导致 `panic: assignment to entry in nil map`
|
|
26
|
+
- **排除**:有 `make` 初始化;有 nil 判断后初始化
|
|
27
|
+
|
|
28
|
+
### CORRECTNESS_GO_04. 切片越界访问 [Critical]
|
|
29
|
+
- **检测**:访问切片索引前未校验长度;假设固定元素数量直接用索引;`parts[0]` 在可能为空切片上使用
|
|
30
|
+
- **排除**:有 `len()` 检查;索引来源确认有界
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 二、类型与接口问题(3项)
|
|
35
|
+
|
|
36
|
+
### CORRECTNESS_GO_05. 接口值与 nil 比较陷阱 [Critical]
|
|
37
|
+
- **检测**:函数返回接口类型,但实际返回一个底层值为 nil 的具体类型指针(`return (*MyError)(nil)`),导致调用方 `if err != nil` 判断为 true
|
|
38
|
+
- **排除**:直接 `return nil`
|
|
39
|
+
|
|
40
|
+
```go
|
|
41
|
+
func getError() error {
|
|
42
|
+
var p *MyError = nil
|
|
43
|
+
return p // 此时 err != nil 为 true!接口含有类型信息但值为 nil
|
|
44
|
+
}
|
|
45
|
+
// 正确:直接 return nil
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### CORRECTNESS_GO_06. 类型断言未用 comma-ok 模式 [Critical]
|
|
49
|
+
- **检测**:`v := i.(SomeType)` 未使用 `v, ok := i.(SomeType)` 形式,断言失败时 panic
|
|
50
|
+
- **排除**:确认接口值类型;已有 recover
|
|
51
|
+
|
|
52
|
+
```go
|
|
53
|
+
// 错误写法 — 断言失败直接 panic
|
|
54
|
+
s := i.(*MyStruct)
|
|
55
|
+
|
|
56
|
+
// 正确写法
|
|
57
|
+
s, ok := i.(*MyStruct)
|
|
58
|
+
if !ok {
|
|
59
|
+
return errors.New("type assertion failed")
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### CORRECTNESS_GO_07. printf 格式化动词与参数类型不匹配 [Critical]
|
|
64
|
+
- **检测**:`fmt.Printf`/`Sprintf`/`log.Printf` 格式化动词数量或类型与参数不匹配(如 `%s` 传 int,参数多于占位符);直接 `log.Printf(err.Error())` 若含 `%` 则格式化出错
|
|
65
|
+
- **排除**:`%v` 通用动词使用正确
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 三、代码静态检测(5项)
|
|
70
|
+
|
|
71
|
+
### CORRECTNESS_GO_08. 不可达的死代码 [Critical]
|
|
72
|
+
- **检测**:`return`/`panic` 语句之后存在永远不会执行的代码
|
|
73
|
+
- **排除**:编译期可检出的场景(编译器通常已报告)
|
|
74
|
+
|
|
75
|
+
### CORRECTNESS_GO_09. 布尔运算符使用错误 [Critical]
|
|
76
|
+
- **检测**:布尔表达式中存在永真/永假条件(如 `x < 0 && x > 0`);冗余条件(如 `err != nil || err == io.EOF`)
|
|
77
|
+
- **排除**:防御性代码;逻辑确实正确
|
|
78
|
+
|
|
79
|
+
### CORRECTNESS_GO_10. unsafe.Pointer 使用不当 [Critical]
|
|
80
|
+
- **检测**:将 `unsafe.Pointer` 转换为 `uintptr` 后存储,再将 `uintptr` 转回指针(GC 可能已移动对象)
|
|
81
|
+
- **排除**:原子操作中的合规用法;遵循 `unsafe.Pointer` 规则的转换
|
|
82
|
+
|
|
83
|
+
### CORRECTNESS_GO_11. struct 字段 tag 格式错误 [Critical]
|
|
84
|
+
- **检测**:struct tag 格式不合规,导致反射解析失败,JSON/ORM 行为异常
|
|
85
|
+
- **排除**:工具已检查过格式
|
|
86
|
+
|
|
87
|
+
```go
|
|
88
|
+
// 错误写法 — 冒号后有空格(json: "name" 而非 json:"name")
|
|
89
|
+
type User struct {
|
|
90
|
+
Name string `json: "name"` // 错误:冒号后有空格
|
|
91
|
+
Age int `json:"age,"` // 错误:多余逗号
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// 正确写法
|
|
95
|
+
type User struct {
|
|
96
|
+
Name string `json:"name"`
|
|
97
|
+
Age int `json:"age"`
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### CORRECTNESS_GO_12. 测试/示例代码误用 [Critical]
|
|
102
|
+
- **检测**:Example 函数的 `// Output:` 注释与实际输出不一致;测试函数名不以 `Test` 开头(如 `Testlogin`),导致测试用例永远不执行
|
|
103
|
+
- **排除**:`// Unordered output:` 等合规注释形式
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 四、数值与逻辑(1项)
|
|
108
|
+
|
|
109
|
+
### CORRECTNESS_GO_13. 整数溢出导致逻辑错误 [Critical]
|
|
110
|
+
- **检测**:int32/int 类型做大数乘法(如金额×数量)结果溢出变负数;切片长度相加可能溢出(32位系统)
|
|
111
|
+
- **排除**:已用 int64 或 math/big;值域确认不会溢出
|
package/comate-engine/assets/skills/code-review/references/rules/Go/GO_RESOURCE_CONCURRENCY_RULES.md
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# Go 资源并发类规则
|
|
2
|
+
|
|
3
|
+
涵盖资源管理、内存泄漏、并发竞态、错误处理、性能及接口鉴权问题。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 一、资源管理与内存泄漏
|
|
8
|
+
|
|
9
|
+
### RES_GO_01. 文件/网络连接/数据库行未关闭 [high]
|
|
10
|
+
- **检测**:`os.Open`/`http.Get`/`db.Query` 后未 `defer Close()`;HTTP 响应体 `resp.Body` 未关闭;`rows` 未调用 `rows.Close()`
|
|
11
|
+
- **排除**:使用了自动管理资源的库;finally/defer 有关闭
|
|
12
|
+
|
|
13
|
+
### RES_GO_02. goroutine 泄漏 [high]
|
|
14
|
+
- **检测**:goroutine 阻塞在无消费者的 channel 发送;调用方超时/取消后 goroutine 因 channel 满/无缓冲永久阻塞;无退出条件的 `for {}` goroutine
|
|
15
|
+
- **排除**:使用有缓冲 channel;有 `ctx.Done()` 退出;有 done 信号
|
|
16
|
+
|
|
17
|
+
```go
|
|
18
|
+
func handleRequest() {
|
|
19
|
+
ch := make(chan Result) // 无缓冲
|
|
20
|
+
go func() { ch <- doWork() }()
|
|
21
|
+
select {
|
|
22
|
+
case r := <-ch: return r
|
|
23
|
+
case <-time.After(1 * time.Second): return // goroutine 泄漏:doWork 永久阻塞在发送
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// 修复:ch := make(chan Result, 1)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### RES_GO_03. 全局缓存无限增长导致 OOM [high]
|
|
30
|
+
- **检测**:全局 `var cache = make(map[...])` 只增不删,无 TTL/LRU/容量限制
|
|
31
|
+
- **排除**:有定期清理;数量有界;使用带淘汰策略的缓存库
|
|
32
|
+
|
|
33
|
+
### RES_GO_04. defer 在循环中导致资源延迟释放 [middle]
|
|
34
|
+
- **检测**:循环体内 `defer f.Close()`,资源直到函数返回才释放,大批量时同时持有大量 fd
|
|
35
|
+
- **排除**:循环次数极少(<5);已提取为独立函数使 defer 生效
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 二、并发与竞态
|
|
40
|
+
|
|
41
|
+
### RACE_GO_01. 全局变量并发读写无锁保护 [high]
|
|
42
|
+
- **检测**:多 goroutine 并发读写同一 map/slice/结构体字段,无 `sync.Mutex`/`sync.RWMutex`/`atomic` 保护
|
|
43
|
+
- **排除**:只读操作;有锁保护;使用 `sync.Map`
|
|
44
|
+
|
|
45
|
+
### RACE_GO_02. 死锁导致服务挂起 [high]
|
|
46
|
+
- **检测**:多 goroutine 加锁顺序不一致(A→B 和 B→A);向无缓冲 channel 发送但无接收者;channel 操作无 select/超时
|
|
47
|
+
- **排除**:固定加锁顺序;有 select+超时;有缓冲 channel
|
|
48
|
+
|
|
49
|
+
### RACE_GO_03. sync.WaitGroup 使用不当 [high]
|
|
50
|
+
- **检测**:`wg.Add(1)` 在 goroutine 内部调用(可能 Wait 已返回时还未 Add);panic 路径导致 `Done()` 未调用(未用 defer)
|
|
51
|
+
- **排除**:`wg.Add` 在 goroutine 启动前调用;`defer wg.Done()`
|
|
52
|
+
|
|
53
|
+
```go
|
|
54
|
+
// 错误写法 — Add 在 goroutine 内,可能 Wait 提前返回
|
|
55
|
+
go func() {
|
|
56
|
+
wg.Add(1) // 太晚了
|
|
57
|
+
defer wg.Done()
|
|
58
|
+
doWork()
|
|
59
|
+
}()
|
|
60
|
+
wg.Wait()
|
|
61
|
+
|
|
62
|
+
// 正确写法
|
|
63
|
+
wg.Add(1)
|
|
64
|
+
go func() {
|
|
65
|
+
defer wg.Done()
|
|
66
|
+
doWork()
|
|
67
|
+
}()
|
|
68
|
+
wg.Wait()
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### RACE_GO_04. 并发修改共享 slice 导致竞态 [high]
|
|
72
|
+
- **检测**:多 goroutine 并发对同一 slice 执行 append 或索引赋值,无锁保护
|
|
73
|
+
- **排除**:预分配 slice 且各 goroutine 操作不同索引;用 channel 收集结果
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 三、错误处理
|
|
78
|
+
|
|
79
|
+
### ERR_GO_01. 忽略错误返回值 [high]
|
|
80
|
+
- **检测**:函数返回 error 被 `_` 丢弃,或调用时直接忽略(`f.Write(data)` 不接收返回值)
|
|
81
|
+
- **排除**:明确确认错误可忽略且有注释说明
|
|
82
|
+
|
|
83
|
+
### ERR_GO_02. 错误被静默吞掉 [high]
|
|
84
|
+
- **检测**:`recover()` 后不记录日志也不向上传递;接收 error 后 `_ = err`
|
|
85
|
+
- **排除**:确认是预期的静默处理且有注释
|
|
86
|
+
|
|
87
|
+
### ERR_GO_03. defer 中修改非命名返回值无效 [middle]
|
|
88
|
+
- **检测**:在非命名返回值函数的 defer 中修改局部 `err` 变量,以为会影响返回值,实则无效
|
|
89
|
+
- **排除**:使用命名返回值(`func f() (result string, err error)`)
|
|
90
|
+
|
|
91
|
+
```go
|
|
92
|
+
// 错误写法 — 修改的是局部变量,返回值不受影响
|
|
93
|
+
func getUser() (string, error) {
|
|
94
|
+
var err error
|
|
95
|
+
defer func() {
|
|
96
|
+
if err != nil { err = fmt.Errorf("wrap: %w", err) } // 无效!
|
|
97
|
+
}()
|
|
98
|
+
return fetch()
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// 正确写法 — 命名返回值
|
|
102
|
+
func getUser() (name string, err error) {
|
|
103
|
+
defer func() {
|
|
104
|
+
if err != nil { err = fmt.Errorf("wrap: %w", err) } // 有效
|
|
105
|
+
}()
|
|
106
|
+
name, err = fetch()
|
|
107
|
+
return
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 四、性能
|
|
114
|
+
|
|
115
|
+
### PERF_GO_01. 无限循环或轮询无 sleep 耗尽 CPU [high]
|
|
116
|
+
- **检测**:`for {}` 内无 sleep/channel/ticker,CPU 空转;`for !done {}` 自旋等待
|
|
117
|
+
- **排除**:有 `time.Sleep`;有 channel 等待;有 `ticker.C`
|
|
118
|
+
|
|
119
|
+
### PERF_GO_02. N+1 查询 [middle]
|
|
120
|
+
- **检测**:循环内对每条记录单独发起数据库查询
|
|
121
|
+
- **排除**:循环次数确认极少;有 IN 批量查询
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 五、效率与正确性补充(4项)
|
|
126
|
+
|
|
127
|
+
### EFF_GO_01. 可并行的串行 goroutine 等待 [middle]
|
|
128
|
+
- **检测**:多个互不依赖的操作被顺序串行执行(逐个同步调用),而非启动多个 goroutine 并用 `sync.WaitGroup` 或 channel 并行等待
|
|
129
|
+
- **排除**:后一个操作依赖前一个的返回值;操作间有顺序语义;并发写入同一资源
|
|
130
|
+
|
|
131
|
+
```go
|
|
132
|
+
// 反例 — 串行,总耗时 = tA + tB
|
|
133
|
+
user, _ := fetchUser(uid) // 同步阻塞
|
|
134
|
+
config, _ := fetchConfig() // 再同步阻塞
|
|
135
|
+
|
|
136
|
+
// 正例 — 并行 goroutine
|
|
137
|
+
var wg sync.WaitGroup
|
|
138
|
+
var user User
|
|
139
|
+
var cfg Config
|
|
140
|
+
wg.Add(2)
|
|
141
|
+
go func() { defer wg.Done(); user, _ = fetchUser(uid) }()
|
|
142
|
+
go func() { defer wg.Done(); cfg, _ = fetchConfig() }()
|
|
143
|
+
wg.Wait()
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### EFF_GO_02. 文件/资源存在性预检查(TOCTOU) [low]
|
|
147
|
+
- **检测**:操作前先调用 `os.Stat()`/`os.IsExist()` 检查存在性,再执行实际操作,形成 check-then-act 竞态
|
|
148
|
+
- **排除**:业务逻辑确实需要分支且不可用错误处理替代;有文件锁保证原子性
|
|
149
|
+
|
|
150
|
+
```go
|
|
151
|
+
// 反例
|
|
152
|
+
if _, err := os.Stat(path); err == nil {
|
|
153
|
+
data, _ = os.ReadFile(path)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// 正例 — 直接操作,检查错误类型
|
|
157
|
+
data, err := os.ReadFile(path)
|
|
158
|
+
if err != nil {
|
|
159
|
+
if errors.Is(err, os.ErrNotExist) {
|
|
160
|
+
// 文件不存在
|
|
161
|
+
} else {
|
|
162
|
+
return err
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### EFF_GO_03. 正则校验缺少锚点 [middle]
|
|
168
|
+
- **检测**:用于输入校验的正则表达式缺少 `^` 和 `$` 锚点,`regexp.MatchString` 或 `re.FindString` 导致部分匹配通过本应拒绝的字符串
|
|
169
|
+
- **排除**:明确需要部分匹配;已使用完整字符串匹配语义
|
|
170
|
+
|
|
171
|
+
```go
|
|
172
|
+
// 反例 — "123abc" 能通过纯数字校验
|
|
173
|
+
matched, _ := regexp.MatchString(`\d+`, input)
|
|
174
|
+
|
|
175
|
+
// 正例
|
|
176
|
+
matched, _ := regexp.MatchString(`^\d+$`, input)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### EFF_GO_04. 错误链断裂(未使用 %w 包装) [middle]
|
|
180
|
+
- **检测**:在错误处理中使用 `fmt.Errorf("msg: %v", err)` 或 `errors.New("msg")` 重新包装错误,未使用 `%w` 动词,导致 `errors.Is`/`errors.As` 无法在调用链上匹配原始错误类型
|
|
181
|
+
- **排除**:有意隐藏底层错误类型(安全场景);原始错误已在日志中记录
|
|
182
|
+
|
|
183
|
+
```go
|
|
184
|
+
// 反例 — %v 仅转为字符串,errors.Is() 无法匹配原始类型
|
|
185
|
+
return fmt.Errorf("查询用户失败: %v", err)
|
|
186
|
+
|
|
187
|
+
// 正例 — %w 保留错误链,errors.Is(err, sql.ErrNoRows) 可正常工作
|
|
188
|
+
return fmt.Errorf("查询用户失败: %w", err)
|
|
189
|
+
```
|
|
190
|
+
|