# RooCode Spec v1
|
version: 1
|
project:
|
name: your-repo
|
shell:
|
type: powershell
|
flags: "-NoLogo -NoProfile -ExecutionPolicy Bypass"
|
os: windows
|
line_endings: crlf
|
encoding: utf-8
|
|
objectives:
|
- "仅修改与当前任务直接相关的代码;非相关文件保持不变。"
|
- "公共模块或共享代码修改前必须完成影响评估并获得批准。"
|
- "需求不清晰或存在冲突时应立即暂停修改,提出问题并等待确认。"
|
- "代码命名必须与数据库字段一致,不得随意重命名或私自创造字段名。"
|
- "遵守统一代码规范与格式要求。"
|
|
# —— 文件范围控制 ————————————————————————————————————————————————
|
scope:
|
blocked_paths: # 禁止修改的文件或目录(根据项目实际补充)
|
|
# 仅定义“禁止修改”范围,其他文件默认可修改
|
# 一旦检测到修改这些路径,将强制中止执行并要求说明理由
|
|
# —— 询问/暂停策略 ————————————————————————————————————————————————
|
ask_policy:
|
must_ask_when:
|
- "需求描述不完整、目标不明确或与当前任务冲突"
|
- "涉及公共模块、接口、数据库结构、跨服务依赖"
|
- "修改内容可能引发大范围影响或兼容性问题"
|
- "测试覆盖不全或存在潜在回归风险"
|
stop_and_wait_for_confirmation: true
|
question_template: |
|
**不清楚点/风险:**
|
1. …
|
2. …
|
**建议方案:**
|
- A: …
|
- B: …
|
**请求确认:**
|
请确认后继续修改。
|
|
# —— 公共代码改动与影响评估 ————————————————————————————————
|
public_code:
|
globs:
|
- "common/**"
|
- "packages/shared/**"
|
- "libs/**"
|
require_impact_assessment: true
|
impact_assessment_file: ".roocode/impact_assessment.md"
|
impact_assessment_must_include:
|
- "变更目的与动机"
|
- "受影响模块与兼容性评估"
|
- "数据迁移或回滚方案"
|
- "测试验证计划"
|
- "风险与缓解措施"
|
|
# —— 命名与数据库一致性 ————————————————————————————————————————————
|
naming_conventions:
|
db_schema_source_of_truth:
|
- "docs/db/schema.sql"
|
- "migrations/**"
|
rules:
|
- "字段命名以数据库定义为基准。"
|
- "如需 camelCase 映射,必须一一对应且注明。"
|
- "新增字段前必须在数据库中定义并确认默认值。"
|
- "禁止删除或重命名字段而无迁移方案。"-+
|
|
# —— 文本与文件格式规范(新增部分) ————————————————————————————————
|
text_format:
|
encoding:
|
required: "UTF-8 (无 BOM)"
|
description: |
|
所有代码文件必须使用 **UTF-8 无 BOM** 编码。
|
不允许 UTF-16、GBK、ANSI、或 UTF-8 with BOM。
|
若 IDE 或 AI 工具自动生成文件,应强制转换为 UTF-8 无 BOM。
|
AI 编辑器请严格遵守此格式,不得自动更改文件编码。
|
line_endings:
|
required: "CRLF (Windows)"
|
description: |
|
所有文本文件换行符必须为 CRLF (`\r\n`)。
|
禁止混用 LF 与 CRLF;避免提交时触发大面积 diff。
|
若检测到混用换行符,应自动修复为 CRLF。
|
indentation:
|
style: "spaces"
|
size: 2
|
description: |
|
统一使用空格缩进,禁止使用 Tab。
|
YAML / JSON / JS / TS / Java / XML / HTML 等文件均保持 2 个空格缩进。
|
trailing_spaces:
|
remove: true
|
description: "提交前自动移除行尾多余空格。"
|
final_newline:
|
ensure: true
|
description: "每个文件末尾必须保留一个空行(单个换行符)。"
|
ai_editing_guidelines:
|
- "AI 生成或修改文件时必须保留原有编码、缩进和换行风格。"
|
- "AI 不得自动转换为 LF 或添加 BOM。"
|
- "AI 不得在无内容变化时重写整个文件或格式化不相关区域。"
|
- "若文件格式未知,应先读取并检测现有编码与缩进再修改。"
|
- "禁止出现乱码、双字节符号或混用全角/半角标点。"
|
comment_style:
|
preferred:
|
- "//" # Java, JS, TS, Go
|
- "#" # YAML, Python, Shell
|
- "<!-- -->" # XML, HTML
|
|
# —— 代码风格与校验 ————————————————————————————————————————————————
|
code_style:
|
formatters:
|
- "Java: Spotless / GoogleJavaFormat"
|
- "TS/JS: Prettier / ESLint"
|
rules_of_thumb:
|
- "严格类型检查"
|
- "公共接口必须带注释"
|
- "新增逻辑必须有测试覆盖"
|
- "提交前应通过 lint 与测试"
|
|
# —— 预检查命令(Windows PowerShell 兼容) ————————————————————————
|
checks:
|
pre_commit:
|
- name: "Java Build & Test"
|
run: |
|
if (Test-Path ".\mvnw.cmd") { .\mvnw.cmd -q test } `
|
elseif (Test-Path ".\gradlew.bat") { .\gradlew.bat test } `
|
elseif (Get-Command mvn -ErrorAction SilentlyContinue) { mvn -q test } `
|
else { Write-Host "No Java build tool found." }
|
|
- name: "Node Lint & Test"
|
run: |
|
if (Test-Path ".\package.json") {
|
npm ci
|
npm run -s lint
|
npm test --silent
|
}
|
|
# —— 危险操作拦截 ————————————————————————————————————————————————
|
dangerous_operations:
|
block_without_explicit_approval:
|
- "跨模块重命名或重构"
|
- "依赖大版本升级"
|
- "数据库结构变更(新增/删除/重命名表或字段)"
|
- "公共 API 或 DTO 的破坏性修改"
|
require_ask_policy: true
|
|
# —— 提交与说明规范 ————————————————————————————————————————————————
|
commit_policy:
|
single_purpose_commits: true
|
message_template: |
|
<type>(<scope>): <subject>
|
|
WHY:
|
- 变更目的 …
|
WHAT:
|
- 修改内容 …
|
TEST:
|
- 测试说明 …
|
RISK:
|
- 潜在风险 …
|
require:
|
- "影响评估链接(如涉及公共模块)"
|
- "任务编号或需求 ID"
|
- "测试报告摘要"
|
|
# —— 最终保护措施 ————————————————————————————————————————————————
|
guardrails:
|
fail_on_blocked_path_change: true
|
fail_on_public_code_change_without_assessment: true
|
deny_unapproved_mass_changes: true
|