FEAT加了新能力
用户/队友现在能做一件之前做不到的事。
feat: 今日选题加「抓一批新的」按钮
这份文档只解决一件事:敲下 git commit 之前,脑子里该过哪几道题。所有例子都不是编的——全部取自你本人这一周的真实提交记录。
// 收件人:子扬 · skyrim1179676226@gmail.com · GitHub @ZiYang0702
// 统计窗口:2026-07-27 → 2026-08-03 · 数据源:GitHub Search API(author-email 精确匹配)
规范不是拿来背的,是拿来对照自己的。所以先把你这一周的数字摆出来——后面每一条规则,都会回到这些数字上找你自己的例子。
// 07-27 那根灰柱矮是统计窗口的切边(GitHub 按 UTC 零点切),不是你那天没干活。
// 周六周日各 20+ 次——这份文档不劝你少提交,只想让每一条更值钱。
你这周的重心是 WorkflowUP/Workflow 的 B-roll 素材库与视频复刻产线(169 次里 74 次带 broll 或 replica 标签),中途分出两天把门店短视频工作台从零建成一个新仓,末尾在 Akke 侧开了一个只读接口把两边接上。这是一条完整的产品线,不是零散的活。
团队用的是业界通用的 Conventional Commits(约定式提交)。它不神秘,就是把提交信息切成固定的五块,让人和机器都能一眼读懂。下面这条是你自己写的(Akke 8a785e3),我把它拆开标了颜色。
这次改动属于哪一类。七个候选词,选错不会报错但会误导所有人。
动的是哪一块。写模块名,让队友一眼判断"关不关我的事"。
一句话说清做了什么。中文,不超过一行,句尾不加句号。
解释为什么这么做。代码只能说明"怎么做",为什么只能你写。
PR 号 (#1142) 由 GitHub 合并时自动补,你不用手写。
下面这个演示会自己循环播放。左边是随手写的,右边是按规范写的——改动的代码完全一样。
三个月后线上出问题,有人 git log 翻到这一行。「修改工作台」告诉他的信息量是零,他只能一个个点开看 diff;「fix(workbench): 去掉多门店切换,任务改为并行生成多支视频」让他 3 秒判断是不是这条。差别只有你多敲的 20 个字。
团队规定只用这七个(全局 CLAUDE.md「Git 提交」条)。不要自创。判断法很简单:问自己"这次改动,对使用者意味着什么"。
用户/队友现在能做一件之前做不到的事。
之前行为不对,现在对了。没有新增能力。
一行代码没改,只改 .md / 注释 / 记录。
行为不变,但更快、更省钱、更省资源。
外部行为一点没变,只是代码结构更清楚了。
加测试、改测试。被测的代码没动。
依赖升级、配置调整、脚本搬家。跟业务无关。
你写过 4 次 memory(broll):——memory 不在名单里,工具认不出来。
// 94.8% 合规——这个数字放在团队里是好的。剩下 10 条不合规全部集中在两处,第 09 节会具体点出来。
scope 就是"我动了哪一块"。它不是必填的,但写了之后,队友刷 git log 时能直接跳过跟自己无关的行。你这周写得相当好——135 条带了 scope,而且用词稳定。
feat: 门店素材上传服务 feat: 迁到团队账号,改用 R2 binding fix: 登录框默认填门店码 fix: 移除工作台冗余说明文案
这四条都是 shortvideo 仓的真实提交。孤立看没问题,但连成一片 log 时,读者不知道哪几条属于同一块——上传服务、存储迁移、登录、文案,其实分属四个模块。
feat(upload): 门店素材上传服务 feat(storage): 迁到团队账号,改用 R2 binding fix(auth): 登录框默认填门店码 fix(workbench): 移除工作台冗余说明文案
同样四条,加了括号。负责存储的人只需要看第二条;查登录问题的人一眼锁定第三条。你在 Workflow 仓一直是这么写的,只是新仓开工时没带过去。
不用纠结。用你自己在项目里叫它的那个名字——目录名、模块名、功能名都行,只要同一块东西每次都用同一个词。你的 broll 用了 57 次都没变过,这就是标准答案。
代码本身已经完整记录了怎么做的——diff 摆在那儿。代码唯一说不出口的是为什么这么做、为什么不那么做。这就是正文存在的全部理由。
这是 3723a96(Akke,fix middleware)。它只有 4 行正文,但把一次修改该交代的东西全交代完了——照着这个模板写就够了。
fix(middleware): /api/material-feed 加入免登白名单
跟 /api/internal/* 同款:没有 Supabase 登录态,
route 自校验 MATERIAL_FEED_KEY。
漏了这条时 middleware 直接 401,返回的
{"error":"Unauthorized"} 跟 route 自己的鉴权
失败几乎一样,排查时会误以为 key 配错了。
第一段答"为什么这么改"(有现成同款做法可循);第二段答"不这么改会怎样"(报错长得一模一样,下一个人要浪费半小时排查)。
fix(middleware): /api/material-feed 加入免登白名单
读者能知道你加了白名单,但不知道为什么这个接口可以免登(它自带 key 校验),也不知道踩过什么坑。三个月后有人做安全审计,看到"免登"两个字,第一反应是把它删掉。
业务场景、报错现象、谁在抱怨。写给不在场的人看。
尤其是否决掉的另一条路——这才是最值钱的信息。
已知限制、未验证的假设、需要谁拍板。诚实比完美重要。
// 三段都是你自己写过的原句。你已经会了——问题只是这一周里有 128 条提交没这么写。
写完 commit 不算完——它得进 main 才算数。团队里有四条路,每条路的"审查强度"不一样。选错路的代价是:要么白排队,要么没人看就上线了。
gh pr create → CI 跑 + Claude 自动评审 → 绿了才 squash 合并。
你这周走了 29 次(15.0%)· 对应 38 个 PR,37 个已合并
git pull 撞上远端新提交时 Git 自动生成的合并记录。
你这周产生 10 次(5.2%)· 用 git pull --rebase 可以基本消除
62.7% 直推本身不是错——文档、记忆库、诊断脚本本来就该直推,团队规则明写了。真正要看的是:那 121 次里,有没有该走 PR 的东西混进去了。第 08 节讲怎么判。
你横跨的三个仓库,纪律强度完全不同。同一个动作(比如直推 main)在一个仓是常规操作,在另一个仓会被 CI 标红 + 推飞书告警。换仓库先换脑子。
| 对比项 | Akke-AI / Akke | WorkflowUP / Workflow | WorkflowUP / shortvideo |
|---|---|---|---|
| 仓库性质 | 主产品 · 多租户线上系统 | 视频产线 · 工作流与档案 | 门店工作台 · 07-31 新建 |
| CI 检查 | tsc + lint + vitest | 仅部署类 workflow | 无 |
| PR 自动评审 | claude-review 生效 | 配了但一直失败 | 无 |
| 高危路径闸门 | 本地 pre-push + CI 标红 | 无 | 无 |
| 直推 main | 仅限 docs/**、scripts/_* | 常规做法(记忆库靠钩子直推) | 目前 100% 直推 |
| 自动合并 | 打 auto-merge 标签,pr-janitor 四道闸放行 | 手动合 | — |
| 你的提交数 | 4 | 169 | 20 |
| 建议 | 保持 现在的姿势就是对的 | 修评审 见 09-① | 补规范 见 09-② |
高危路径必须 PR;其余 src/ / scripts/ 建议 PR、小 fix 可直推;docs/** 和 scripts/_* 直推。
这套规则的唯一事实源是仓里的 scripts/high-risk-paths.regex,不是谁的记忆。
每轮会话结束,Stop hook 自动把 docs/claude-memory/ 的改动 commit 并推 main——只在主目录、只在 main 分支、只含记忆路径。
这解释了你那 33 条 auto-commit:不是你手写的,不用为它们负责。
Akke 仓里有一份"高危路径"清单。判断标准不是"重要",而是——改错了不会报错,而是安静地在线上出事。这类改动谁都不许直推。
llm/** — 线上话术// 闸① 拦不住 git push --no-verify,闸② 也只标红不回滚——它们的作用是"必留痕、必有第二双眼睛知道",不是物理阻断。
// 为什么不用 GitHub 原生分支保护?免费计划的私有仓开不了,这两道自建闸就是全部防线。
你这周在 Akke 只提交了 4 次,其中 3 次走了 PR、1 次是 fix(middleware) 直推。那次直推严格说踩线了——middleware.ts 虽不在清单里,但它是全站鉴权入口。判断法很简单:问自己"这行改错了,系统会报错吗?"报错的可以直推,安静出错的一律走 PR。
下面三条不是泛泛而谈,是逐条跑命令核出来的,都附了原始证据。第一条最要紧,而且不是你的错——但它让你这周 34 个 PR 的审查全部白做了。
仓里配了 claude-code-review.yml,每开一个 PR 就触发 Claude 自动评审。但它每一次都失败,而且失败原因不是代码问题——是这个仓库没安装 Claude Code 的 GitHub App,换令牌的那一步直接 401。
更要命的是时间对不上。以 PR #71 为例:你 10:20:29 建 PR、10:20:46 就合了——17 秒。而评审任务 10:20:36 才启动、10:21:03 才结束。就算它能跑通,你也早合完了。
对照组是你自己做的:Akke 的 PR #1142,13:33 开、13:46 合,中间 13 分钟里 claude[bot] 留下了评审意见,你按意见改了三处并写进了 commit 正文(评论查询封顶、days 差一天、补 env 示例)。这就是 PR 该有的样子。
github.com/apps/claude 给 WorkflowUP/Workflow 装上 App —— 这是一次性动作,装完 34 个 PR 的评审能力立刻恢复。这个仓 2026-07-31 新建,两天里你提交了 20 次。问题不在提交本身,在于你在老仓的好习惯,一条都没带进来:
对比一下:同一双手,同一周,在 Workflow 仓写的是 fix(broll): 口型闸门加局部低谷判据 + 闸门进产线的观察模式;在 shortvideo 写的是 重做审核意见交互。差别不是能力,是新仓开工时没人提醒。
CLAUDE.md,把提交规范和分支策略写进去——三行也行,关键是有。tsc --noEmit + lint 就够),让它至少能拦住语法级错误。memory: 不是合法的 type你有 4 条提交写成 memory(broll): … 和 memory: …。意思很清楚——"这次动的是记忆库"。但 memory 不在七个词的名单里,任何按 Conventional Commits 解析的工具(变更日志生成、版本号推导、提交筛选)都会把它当成不合规而跳过。
这条影响很小,放在这里是因为它暴露了一个通用判断法:当你想不出该用哪个 type 时,说明你把"改的是什么"塞进 type 了——那是 scope 的活。
上面挑了三个毛病,但这一周的整体质量是高的。把做对的地方明确写出来,是因为下面这几条最容易在赶工时第一个丢掉。
193 条里 183 条带了合法 type。更难得的是七个词你用得准——没有把新增写成 fix,也没有把改文档写成 feat。这一项很多人做不到。
broll 用了 57 次没变过,replica 17 次、memory 34 次同理。稳定的 scope 让 git log 变成可检索的索引,这是长期价值。
你的长正文里反复出现"为什么不那么做"——不重跑筛选、不复用 CRON_SECRET、不落在 cron 目录下。这是资深工程师才有的习惯,绝大多数提交正文只会复述 diff。
「⚠️ 四句品牌承诺尚未经甲方核实,发布前须逐条确认」「已知语义:手动挑走的这批不再出现在明早那张卡里」。把未验证的东西写进提交,比藏起来强一百倍。
Akke #1142 的第三个 commit 开头就是「按 auto-review 的三条」,逐条列了改法。这让后来人知道这段代码经过审查、审了什么。
38 个 PR 里 24 个新增 < 500 行。超 2000 行的 6 个全是文档/档案入库(最大的 #39 是 28,472 行经验档案),不是代码巨块——这个分布是健康的。
193 次提交里只有 1 次 是 test。产线类代码(闸门判据、配额、去重、状态机)出错是静默的,而你这周恰好写了很多这类逻辑。不用追求覆盖率,但"闸门判据"这种一句话能测的地方,值得顺手补一个断言。
前面十节都可以忘掉,这一张记住就行。六个问题,正常情况下 60 秒能过完。
feat 新能力 / fix 修错 / docs 只动文档 / perf 变快 / refactor 只重整 / test 只动测试 / chore 杂务。想不出来就说明你在纠结 scope,不是 type。broll 就是范本。实在跨多块就不写。全页只用五个信号色,每个色固定对应一种语义——看到颜色就知道该用什么态度读。括号内为最接近的 Pantone 参考色号。