verify · git:20260817.d4dfa41 · 2026-08-17 · sha256 2d7958fa428a4378
verify git:20260817.d4dfa41A
Immutable. This exact content is served forever at /api/v1/blob/2d7958fa428a4378.
--- name: verify description: 改完代码要验证时用。先从 CI 配置和构建脚本摸清这个项目把什么当作「过了」,再按静态检查、测试、真跑一遍的顺序执行。别把「编译过了」当成「验证过了」。 --- # 验证一次改动 「编译过了」「测试绿了」「真的工作」是三件事。每层拦的问题不一样, 只做第一层等于没验证——值得担心的 bug 基本都是「编译通过、类型正确、 看起来合理」的那种。 ## 0. 先摸清这个项目的防线是什么 不要凭直觉猜命令,按顺序找: 1. **CI 配置**(`.github/workflows/`、`.gitlab-ci.yml` 之类)——CI 跑 什么,本地就跑什么。CI 是这个仓库对「验证过了」的正式定义,本地跑的 和 CI 不一致,本地全绿也不算数。 2. **构建脚本**:`package.json` 的 scripts、`Makefile`、`justfile`、 `Cargo.toml`、`pyproject.toml`。`[约束]` 优先用仓库自己包好的入口 (`npm run test` 而不是自己拼测试框架的参数)——包装里经常藏着必要 的环境变量和 flag,绕开它跑出来的结果不可比。 3. **AGENTS.md / CONTRIBUTING.md** 里写明的验证要求。 ## 1. 静态检查(最快,先跑) typecheck、lint、fmt --check。秒级出结果,排最前面是为了 fail fast—— 类型都不对就不用花几分钟等测试了。 ## 2. 测试 - 大仓库先跑**和改动相关的子集**(按文件或模块过滤),过了再考虑要不要 全量。上来就全量,反馈周期动辄十几分钟。 - `[约束]` 测试红了先分清:是这次改动弄红的,还是本来就红? `git stash` 后重跑一次是最快的判法。本来就红的说出来就行,不要顺手 修——那是另一件事,混进来 diff 就说不清了。 - 没有测试的项目:说明这个事实,然后把第 3 层做扎实。 ## 3. 真跑一遍 测试全绿但功能不工作,真实存在——测试只测断言写到的地方。改了什么就 以什么方式碰一下: - CLI:真执行一次改到的命令路径; - 服务 / API:起 dev server,对改动的端点发一次真实请求; - 页面 / UI:有浏览器工具就打开看一眼,截图确认; - 库函数:写个几行的临时脚本调一下,用完删掉。 跑不了的(要生产凭证、要特定硬件)就说跑不了和为什么,不要含糊地说 「应该没问题」。 ## 报告 - 跑了哪几层、每层的结果;跳过的层说明为什么跳; - 失败先说**哪一层**报的——lint 报的是规范问题,测试报的是行为问题, 修法完全不同; - 不要把没跑过的说成过了。「没跑,因为 X」是合格的报告, 「应该没问题」不是。