「什么算合格」的客观标尺。提交前对照本表;红线项不达标 = 不可合并。
| 改动落在 | 命令 |
|---|---|
server/ |
cd server && make test(pytest 退出码 0) |
web/ |
cd web && pnpm lint && pnpm type-check |
mobile/ |
cd mobile && pnpm lint && pnpm type-check |
agents/stargazer/ |
cd agents/stargazer && make lint(pre-commit) |
webchat/ |
cd webchat && npm run build && npm run test |
algorithms/<svc> |
cd algorithms/<svc> && uv run pytest |
覆盖率门槛:改动代码覆盖率 ≥75%(
pytest --cov)。是否设置全仓--cov-fail-under以当前测试基线和 CI 配置为准,不在本文预设未落地门禁。
.husky/pre-commit:对web/、mobile/staged 变更自动 lint/type-check。server/.pre-commit-config.yaml:black+isort+flake8+check_migrate+check_requirements。- Python 行宽 150;
server/apps/日志走apps.core.logger的{app}_logger as logger,algorithms/等独立服务可用loguru。
后端高频陷阱(鉴权/查询/事务/输入/序列化)的正确姿势见 后端工程规格。
- TypeScript:接口用
interface,禁用any,不可信输入用unknown - Python:black + isort + flake8 全过,行宽 ≤150
- 无空
except - 日志无敏感信息
- FalkorDB 语法(CMDB),无 Neo4j 语法
- 禁用原生 SQL:走 Django ORM,无 raw SQL /
.raw()/RawSQL/cursor.execute(跨DB_ENGINE方言) - 启动不被非关键初始化阻断:非关键、可重建资源失败须告警并可恢复,不得让
startup.sh/batch_init/ entrypoint 退出;见 可靠性红线 §2.6 - 下发不伤宿主:插件/作业下发不致目标主机崩溃、死机、数据丢失;不可逆操作有边界与确认
- 新增依赖附理由
- 只改必要文件,无顺手重构 / 全仓格式化
- TDD:新功能/bugfix 先按 红-绿-重构 推进(先写失败测试,通常从
_pure/_service起步)。 - 有效性:测行为/契约而非实现细节;禁止凑覆盖率的无效测试(无断言、断言常量、镜像实现、永真)。
- 启动/升级路径:修改启动脚本、初始化命令或外部资源声明时,必须覆盖空环境、重复执行、存量状态冲突和依赖不可用;只测首次创建或同名更新不算有效回归测试。
- 高风险边界矩阵:触及并发授权、批量变更、跨服务协议、出站连接、可膨胀输入或初始凭据时,除正常路径外至少覆盖下表对应场景。
- 覆盖率:改动代码 ≥75%;关键/安全路径(鉴权、下发、事务、金额/权限)必须覆盖。
- 遵循
server/docs/testing-guide.md(分层、BDD、中文 Gherkin)。 - 文件名后缀分层:
_pure(无 DB/IO)/_service(mock 依赖)/_views(DRF viaapi_client)。 - Marker:
unit/integration/bdd/slow;asyncio_mode = auto。 - 全局 fixture:
authenticated_user/api_client/request_factory(server/conftest.py)。 - bugfix 必须带回归测试(参见近期
e4dee9ba6:修复合并错误 + 补 3 条单测)。
| 变更类型 | 最小测试场景 |
|---|---|
| 并发授权/状态变更 | 锁前状态变化、竞争事务、过期执行者提交、条件更新失败 |
| 批量回填/清理 | 跨页增删改、断点续跑、重复执行、快照不完整、部分失败 |
| 跨服务协议 | 旧生产者→新消费者、新生产者→旧消费者、乱序/重复消息、回滚 |
| 可膨胀输入 | 编码大小、条目数、解码后尺寸/像素和预计内存上界 |
| 外部目标连接 | 环回/受限网段、DNS 变化、重定向、响应大小和超时 |
| 初始凭据 | 受控交付、首次轮换、生成/存储失败和恢复流程 |
| 维度 | 不合格(0) | 合格(1) |
|---|---|---|
| 门禁 | 未跑/有红 | 对应模块命令退出码 0 |
| 红线 | 触犯任一硬性红线 | 全清 |
| 测试 | 改行为无新测试 / 无效凑数测试 | 先写测试、测行为、改动覆盖率 ≥75% |
| 范围 | 夹带无关改动 | 最小 diff |
| 验证 | 「应该没问题」 | 有命令/输出证据 |
5 项全 1 才算完成;工程原则与默认取舍以 PRODUCT.md 为准。