1
0
Files
DiAL/openspec/specs/commit-quality-gates/spec.md
lanyuanxiaoyao a5cf6065c2 chore: 强化代码质量与风格检查体系
ESLint 升级到 recommended-type-checked + stylistic-type-checked,
引入 perfectionist 导入排序和 import 插件导入验证。

Prettier 显式声明全部格式化参数,消除跨环境差异。
TypeScript 启用 noUnusedLocals 和 noPropertyAccessFromIndexSignature。
完善 ignore 列表,排除 .agents/、bun.lock、data/ 等。
引入 husky + lint-staged(pre-commit)+ commitlint(commit-msg)。
更新 DEVELOPMENT.md 代码质量章节。
修复所有新增规则检测到的类型和风格违规。
2026-05-12 18:44:59 +08:00

2.4 KiB
Raw Blame History

Purpose

定义 Git hooks 自动化质量门禁行为,在 pre-commit 阶段自动运行代码检查和格式化,在 commit-msg 阶段校验提交信息格式。

Requirements

Requirement: pre-commit 自动质量检查

项目 SHALL 通过 husky 和 lint-staged 在 git commit 前自动对变更文件运行 ESLint 和 Prettier 检查。

Scenario: 变更 TypeScript 文件后提交

  • WHEN 开发者 stage 了 .ts.tsx 文件并执行 git commit
  • THEN lint-staged SHALL 自动对变更文件运行 eslint --fixprettier --write,修复后继续提交

Scenario: 变更 Markdown 或 JSON 文件后提交

  • WHEN 开发者 stage 了 .md.json.yaml.yml 文件并执行 git commit
  • THEN lint-staged SHALL 自动对变更文件运行 prettier --write

Scenario: lint 检查失败阻止提交

  • WHEN 变更文件存在无法自动修复的 ESLint 错误
  • THEN pre-commit hook MUST 以非零状态退出,阻止提交

Scenario: 无变更文件提交

  • WHEN 开发者执行 git commit 但无 stage 文件
  • THEN lint-staged SHALL 正常通过,不阻止提交

Requirement: 提交信息格式校验

项目 SHALL 通过 commitlint 在 git commit 时校验提交信息必须符合 "类型: 简短描述" 格式,类型限定为 feat/fix/refactor/docs/style/test/chore。

Scenario: 有效的中文提交信息

  • WHEN 开发者提交信息为 "feat: 新增导入排序功能"
  • THEN commit-msg hook SHALL 通过校验

Scenario: 缺少类型前缀的提交信息

  • WHEN 开发者提交信息为 "新增导入排序功能"(无 "feat:" 前缀)
  • THEN commit-msg hook MUST 以非零状态退出,提示正确格式

Scenario: 无效的提交类型

  • WHEN 开发者提交信息使用不在允许列表中的类型(如 "update: 修改配置"
  • THEN commit-msg hook MUST 以非零状态退出,提示可用类型

Requirement: husky 初始化自动化

项目 SHALL 通过 prepare 生命周期脚本在 bun install 时自动初始化 husky。

Scenario: 首次安装依赖

  • WHEN 开发者运行 bun install
  • THEN husky SHALL 自动初始化,安装 pre-commit 和 commit-msg hooks

Scenario: 已有 husky 配置时安装

  • WHEN 开发者运行 bun install 且 husky 已初始化
  • THEN husky 初始化 SHALL 跳过,不覆盖已有配置