news 2026/9/13 22:46:02

Super Productivity 提交信息规范:Angular Conventional Commit 格式与 test-scope 规则实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Super Productivity 提交信息规范:Angular Conventional Commit 格式与 test-scope 规则实战指南

Super Productivity 提交信息规范:Angular Conventional Commit 格式与 test-scope 规则实战指南

【免费下载链接】super-productivitySuper Productivity is an advanced todo list app with integrated Timeboxing and time tracking capabilities. It also comes with integrations for Jira, GitLab, GitHub and Open Project.项目地址: https://gitcode.com/GitHub_Trending/su/super-productivity

Super Productivity 是一个基于 Angular + Electron + Capacitor 的开源待办与时间追踪应用,其仓库通过.agents/skills/commit-messages/SKILL.md为开发者和 AI Agent 固化了一套统一的提交信息规范:Angular conventional-commit 格式type(scope): description,并辅以一条极具项目特色的 test-scope 硬性规则。本文以该技能文档为骨架,结合仓库内的贡献指南、Pull Request 模板与发布脚本源码,系统讲解如何写出符合规范、可被自动化工具解析的提交信息,帮助你与 CI、发布流水线顺畅协作。

一、规范总览:为什么需要统一提交信息

在 Super Productivity 仓库中,提交信息不是写给 Git 日志看的装饰品,而是被真实工具消费的结构化数据。以 tools/release-notes.js 为例,它在版本发布时执行git log抓取提交主题,并用正则^(\w+)(?:\(([^)]*)\))?(!)?:\s*(.+)$(见 parseCommitSubject)解析出typescopedescription三个字段,再据此自动分组生成 GitHub Release Notes 与 Google Play 变更日志。提交信息若不遵循规范,就会被解析为type: null并归入 "Other Changes",导致用户可见的改动从发布说明中丢失。

因此,本仓库的提交信息规范包含三层目的:

  1. 人类可读:一眼看出这次改动是新增功能、修 bug 还是重构;
  2. 机器可解析:供 tools/release-notes.js 等脚本与 CI 流程自动聚合、分类、生成发布说明;
  3. 团队纪律:通过.github/PULL_REQUEST_TEMPLATE.md中的 Checklist 约束每个 PR 的提交历史。

二、核心格式:type(scope): description

规范的核心是一条单行模板:

type(scope): description
  • type:改动类型,限定词表;
  • scope:本次改动触及的功能/区域名(taskssyncuiplugins等);
  • description:以祈使句写成的简短描述。

支持的 type 词表

文档明确列出的十种类型:

type语义典型场景
feat新功能新增重复任务支持
fix缺陷修复处理同步网络超时
docs文档改动修正 README、wiki 链接
style样式/格式格式化、无逻辑变化的样式调整
refactor重构不改行为的代码结构重组
perf性能优化减少大列表渲染开销
test测试改动覆盖向量时钟剪枝的测试
build构建系统依赖、构建配置改动
ciCI 配置工作流脚本改动
chore杂务不落入以上类型的维护性改动

其中featfixperf三种类型在发布脚本中被标记为user-facing(用户可见)——对照 USER_FACING_TYPES,它们会被优先聚合进 GitHub 与 Play Store 的发布说明;而buildchorecidocsrefactorstyletest被归为低信号类型(LOW_SIGNAL_TYPES),仅在无其他改动时才兜底展示。

格式示例

feat(tasks): add recurring task support fix(sync): handle network timeout

注意两处细节:

  1. scope 必须与被改动的功能/区域对应taskssyncuiplugins…),使发布说明能按模块分组,例如 release 脚本的toBulletLines会输出**sync:** ...这样的带 scope 强调的分组条目;
  2. scope 仅在改动真正横跨整个仓库时才允许省略。若每次提交都省略 scope,发布说明就失去模块维度,分组价值大打折扣。

三、description 的三条硬性规则

技能文档对描述部分给出三条强制约束:

  • 祈使句(imperative):把描述写成"下达指令"的口吻,如addhandlecover,而不是addedhandlingcovers。这与 Git 官方提交指南一致——提交描述应当能补全句子 "If applied, this commit will …";
  • 全小写(lower-case):首字母与一般名词保持小写,不使用句首大写;
  • 结尾不加句点(no trailing period):描述末尾不写.,保持单行紧凑。

实践示例:

# ✅ 正确 feat(tasks): add recurring task support fix(sync): handle network timeout test(sync): cover vector-clock pruning # ❌ 错误 feat(tasks): Added recurring task support. # 过去式 + 大写 + 句点 FIX(sync): handle network timeout # type 大写 fix(sync): handle network timeout. # 结尾句点

四、test-scope 规则:test:而不是fix(test):

这是本技能文档最具特色的规则,措辞为绝对禁止(Never)

Neverfix(test):orfix(e2e):— changes to tests use thetest:type.

也就是说,测试相关改动(包括修复测试代码、修复 E2E 用例、补充测试覆盖)一律使用test:类型,例如文档给出的test(sync): cover vector-clock pruning不允许写成fix(test): ...fix(e2e): ...

其背后逻辑在 .github/CONTRIBUTING.md 中有直接说明:fix类型保留给真正的代码/缺陷修复。如果测试失败本身是产品代码 bug 的表现,那么修复对象是产品代码,应写fix(...);若只是测试用例本身有误或被调整,则属于test类型。这样分类的价值同样落在发布说明上——test:属于低信号类型,不会污染面向用户的 Release Notes,而误用fix(test):会把"修测试"伪装成"修 bug"展示给用户。

配套实践:.github/PULL_REQUEST_TEMPLATE.md的 Checklist 要求 "I have added tests for my changes (if applicable)",说明测试改动是常规 PR 的一部分,因此有一条清晰、无歧义的分类规则尤为重要。

五、scope 的选择与省略边界

  • scope 取被改动的主要功能/区域taskssyncuiplugins均为文档给出的合法取值。对应仓库结构,src/app/features/tasks/是任务模块热区,src/app/op-log/packages/sync-core/packages/sync-providers/构成同步子系统,src/app/plugins/为插件框架——这些目录名就是天然的 scope 来源;
  • 仅当改动真正横跨整个仓库时才省略 scope:例如一次纯全局的格式化或依赖升级,写chore: ...即可;凡是能定位到模块的改动,都应带上 scope,以保证发布说明分组的完整性。

六、配套规范:issue 编号与 AI Agent 使用场景

除了.agents/skills/commit-messages/SKILL.md之外,仓库还有两处对提交信息的配套约束:

  1. .github/CONTRIBUTING.md:声明使用 Angular 提交格式,并补充一条规则——修复具体 issue 时在描述中带上 issue 编号,例如feat: add nice feature #31。这使提交与问题追踪系统可双向追溯;
  2. AI Agent 场景:该 SKILL.md 位于.agents/skills/目录,frontmatter 中的description字段明确说明其触发条件——"when committing, crafting a commit message, or squashing"(提交、撰写提交信息或 squash 时)。也就是说,无论是人类开发者还是接入仓库的 AI Agent,提交信息都遵循同一套格式与 test-scope 规则,避免自动化改写破坏发布流水线的解析。

七、提交规范如何贯通发布流水线

将以上规则串联起来,可以看到一条完整的自动化链路:

  1. 开发者按type(scope): description撰写提交,npm run prepare触发 husky(见 package.json 的prepare脚本与 package.json 的 husky 依赖),在提交钩子层面建立格式纪律;
  2. 版本发布时,tools/release-notes.js 通过parseCommitSubject正则解析提交主题,USER_FACING_TYPES/LOW_SIGNAL_TYPES区分用户可见改动,GITHUB_GROUPS(见 tools/release-notes.js)将提交聚合成 Features / Fixes / Performance / Other Changes 四类,自动生成 GitHub Release Notes;
  3. 同一脚本将用户可见提交写成纯文本 bullet,截断至 500 字符后输出为 Google Play 变更日志(PLAY_STORE_MAX_CHARS),从而保证提交信息的质量直接决定商店页面与发布说明的质量。

这也解释了为什么 test-scope 规则如此强硬:一次fix(e2e): ...就会让"修复不稳定测试"被误报为面向用户的修复,污染整个发布说明。

八、快速自查清单

提交前对照以下清单逐项检查:

  • 使用type(scope): description单行格式
  • type 属于十种词表(feat/fix/docs/style/refactor/perf/test/build/ci/chore
  • scope 指向实际改动的功能/区域;仅仓库级改动才省略
  • description 为祈使句、全小写、无结尾句点
  • 测试改动一律用test:,绝不使用fix(test):fix(e2e):
  • 修复 issue 时在描述末尾追加#编号(如feat: add nice feature #31
  • 发布说明依赖该格式自动生成,切勿使用自由格式提交

遵循这套规范,你的每次提交不仅是一行整洁的 Git 历史,更是驱动 Super Productivity 自动化发布链路的高质量数据源。

【免费下载链接】super-productivitySuper Productivity is an advanced todo list app with integrated Timeboxing and time tracking capabilities. It also comes with integrations for Jira, GitLab, GitHub and Open Project.项目地址: https://gitcode.com/GitHub_Trending/su/super-productivity

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 22:43:15

Firecrawl 实战:将网站转换为大模型可用数据

本文摘要:传统爬虫直接获取的 HTML 包含导航、脚本、广告等噪音,无法作为大语言模型(LLM)的优质上下文。Firecrawl 是一款开源的网页数据转换引擎,它提供了一条清晰的管线:输入 URL → 智能爬取/渲染 → 输…

作者头像 李华
网站建设 2026/9/13 22:39:16

具身机器人OpenAPI二次开发这5条对接文档必须撕开

想做具身机器人 OpenAPI 二次开发?这 5 条对接文档设计必须撕开 最近帮一位做具身机器人二次开发的客户做对接支持,对方工程师感慨:“接口字段定义能看懂,但放到实际业务场景里不知道该怎么用。” 这也是今天想重点聊聊的话题。 我…

作者头像 李华
网站建设 2026/9/13 22:38:08

LM算法深度解析:非线性最小二乘拟合的Python实现与工程实践

简介:面向数值计算与数据拟合学习者,提供基于LM算法的非线性最小二乘拟合MATLAB实现,用于解决模型参数估计与曲线拟合需求,适合正在学习优化算法或需要在MATLAB中快速上手非线性拟合的开发者。资源包共5个文件,包含3个…

作者头像 李华
网站建设 2026/9/13 22:38:06

D2 如何用 --font-regular 等参数在渲染时替换 TTF 字体?

D2 如何用 --font-regular 等参数在渲染时替换 TTF 字体? 【免费下载链接】d2 D2 is a modern diagram scripting language that turns text to diagrams. 项目地址: https://gitcode.com/GitHub_Trending/d2/d2 D2 在渲染图表时默认使用内置字体&#xff08…

作者头像 李华
网站建设 2026/9/13 22:24:11

3D-UNet实现大脑MRI分割:NIfTI到TFRecord的完整流程

简介:这是一份基于3D-UNet和TensorFlow实现的人类大脑图像分割算法项目,面向医学影像分析、深度学习及三维分割领域的研究者与入门学者,可用于脑部病灶定位、解剖结构划分等场景。压缩包内共18个文件,以13个Python脚本为主&#x…

作者头像 李华