132 lines
7.0 KiB
Markdown
132 lines
7.0 KiB
Markdown
# Contributing
|
|
|
|
本文档是 DiAL 的贡献入口,重点指导新增或修改 checker。通用开发命令和全局规则见 [DEVELOPMENT.md](DEVELOPMENT.md),完整开发专题见 [docs/development/](docs/development/README.md)。
|
|
|
|
## 通用贡献规则
|
|
|
|
- 使用中文编写注释、文档和项目内交流内容。
|
|
- 仅使用 `bun` 作为包管理器,禁止使用 npm、pnpm、yarn。
|
|
- 运行工具使用 `bunx`,禁止使用 npx、pnpx。
|
|
- 新增代码优先复用已有组件、工具和依赖库,不引入新依赖。
|
|
- 新增逻辑必须编写测试,不允许跳过测试。
|
|
- 每次代码变更必须执行文档影响分析,并按影响范围更新对应文档或说明无需更新。
|
|
|
|
## 新增或修改 Checker 前必读
|
|
|
|
| 文档 | 用途 |
|
|
| ------------------------------------------------------- | ---------------------------------------------------- |
|
|
| [README.md](README.md) | 项目定位、快速开始和用户入口 |
|
|
| [DEVELOPMENT.md](DEVELOPMENT.md) | 开发入口、常用命令、质量门禁和全局规则 |
|
|
| [docs/README.md](docs/README.md) | 文档索引和文档归属矩阵 |
|
|
| [Checker 开发](docs/development/checker-development.md) | checker 实现机制和详细 checklist |
|
|
| [配置文件](docs/user/configuration.md) | YAML 顶层结构、变量和 target 通用字段 |
|
|
| [校验规则](docs/user/expectations.md) | ValueMatcher、ContentExpectations、KeyedExpectations |
|
|
| [Checker 用户文档](docs/user/checkers/README.md) | 已支持 checker 的配置和示例 |
|
|
|
|
还应阅读现有同类 checker 的实现和测试,例如 `src/server/checker/runner/http/`、`src/server/checker/runner/cmd/` 和对应 `tests/server/checker/runner/` 目录。
|
|
|
|
## Checker 设计原则
|
|
|
|
- 每个 checker 必须自包含在 `src/server/checker/runner/<type>/`。
|
|
- checker 专属类型、schema、validate、execute、expect 和协议辅助逻辑放在同一目录。
|
|
- 注册只修改 `src/server/checker/runner/index.ts`,中间层不新增 type switch。
|
|
- schema 层只描述契约,语义规则放入 `validate.ts`。
|
|
- `resolve()` 只做默认值填充、路径解析和单位转换,不执行校验。
|
|
- `execute()` 必须支持 `CheckerContext.signal` 超时取消。
|
|
- expect 字段必须选择合适断言模型,不为了统一而滥用 ValueMatcher。
|
|
- failure phase 命名遵循去单位后缀规则,例如 `durationMs` 对应 `duration`。
|
|
|
|
## 文件清单
|
|
|
|
新增 checker 通常需要创建或修改:
|
|
|
|
```text
|
|
src/server/checker/runner/<type>/types.ts
|
|
src/server/checker/runner/<type>/schema.ts
|
|
src/server/checker/runner/<type>/validate.ts
|
|
src/server/checker/runner/<type>/execute.ts
|
|
src/server/checker/runner/<type>/expect.ts
|
|
src/server/checker/runner/<type>/index.ts
|
|
src/server/checker/runner/index.ts
|
|
tests/server/checker/runner/<type>/
|
|
probes.example.yaml
|
|
probe-config.schema.json
|
|
docs/user/checkers/<type>.md
|
|
docs/user/checkers/README.md
|
|
```
|
|
|
|
如果修改通用断言模型、开发机制或文档同步规则,还需要更新 `docs/user/expectations.md`、`docs/development/checker-development.md`、本文件或 `docs/README.md`。
|
|
|
|
## 分层要求
|
|
|
|
| 层 | 职责 |
|
|
| ----------------- | -------------------------------------------- |
|
|
| `types.ts` | Raw/Resolved target 和 expect 类型 |
|
|
| `schema.ts` | TypeBox Authoring/Normalized schema |
|
|
| `validate.ts` | JSON Schema 无法表达的语义校验 |
|
|
| `execute.ts` | Checker 类,包含 resolve、execute、serialize |
|
|
| `expect.ts` | checker 专用断言 |
|
|
| `runner/index.ts` | 注册 checker |
|
|
|
|
## expect 模型选择
|
|
|
|
| 场景 | 模型 |
|
|
| ------------------------------------ | ------------------- |
|
|
| 状态类结果且集合小而稳定 | enum 或 boolean |
|
|
| 单值数字指标或字符串元数据 | ValueMatcher |
|
|
| 文本、JSON、HTML、XML 或半结构化内容 | ContentExpectations |
|
|
| 动态键值表 | KeyedExpectations |
|
|
|
|
详细说明见 [校验规则](docs/user/expectations.md) 和 [Checker 开发](docs/development/checker-development.md)。
|
|
|
|
## 测试要求
|
|
|
|
| 测试类别 | 覆盖内容 |
|
|
| ------------ | ---------------------------------------- |
|
|
| 契约测试 | TypeBox schema 与 JSON Schema 导出一致性 |
|
|
| 语义校验测试 | 合法和非法配置 |
|
|
| resolve 测试 | 默认值合并、路径解析、单位转换 |
|
|
| execute 测试 | 成功、失败、超时、expect 组合 |
|
|
| 注册测试 | registry 注册行为 |
|
|
| 配置加载测试 | 含新 checker 的 YAML 完整加载流程 |
|
|
|
|
## 文档同步矩阵
|
|
|
|
| 变更 | 必须更新 |
|
|
| ------------------------ | ------------------------------------------------------------------------------------- |
|
|
| 新增 checker | `docs/user/checkers/<type>.md`、`docs/user/checkers/README.md`、`probes.example.yaml` |
|
|
| 修改 checker 配置字段 | 对应 checker 用户文档、schema、测试、示例 |
|
|
| 修改 checker expect 字段 | 对应 checker 用户文档,必要时更新 `docs/user/expectations.md` |
|
|
| 修改通用 expect 模型 | `docs/user/expectations.md`、`docs/development/checker-development.md` |
|
|
| 修改 checker 开发机制 | `docs/development/checker-development.md`、本文件 |
|
|
| 修改文档同步规则 | `docs/README.md`、`openspec/config.yaml` |
|
|
|
|
## 验证命令
|
|
|
|
新增或修改 checker 后通常需要运行:
|
|
|
|
```bash
|
|
bun run schema
|
|
bun run schema:check
|
|
bun run check
|
|
bun run verify
|
|
```
|
|
|
|
如果因环境限制无法执行完整验证,必须在收尾说明中记录未执行项和原因。
|
|
|
|
## 完成 checklist
|
|
|
|
```text
|
|
□ checker 类型、schema、validate、resolve、execute、serialize 已实现
|
|
□ checker 已在 runner/index.ts 注册
|
|
□ 配置契约、语义校验和 JSON Schema 导出已同步
|
|
□ probes.example.yaml 已添加或更新示例
|
|
□ tests/server/checker/runner/<type>/ 已覆盖契约、校验、resolve、execute、注册和配置加载
|
|
□ docs/user/checkers/<type>.md 已添加或更新
|
|
□ docs/user/checkers/README.md 已添加或更新
|
|
□ 文档影响分析已完成,必要文档已同步
|
|
□ bun run schema 和 bun run schema:check 已通过
|
|
□ bun run check 已通过
|
|
□ bun run verify 已通过或记录未执行原因
|
|
```
|