44 lines
2.6 KiB
Markdown
44 lines
2.6 KiB
Markdown
## MODIFIED Requirements
|
||
|
||
### Requirement: CheckerRegistry 注册中心
|
||
系统 SHALL 在 `src/server/checker/runner/registry.ts` 中提供 `CheckerRegistry` 类,支持 `register(checker)`、`get(type)` 和 `supportedTypes`。重复注册同一 type SHALL 抛出错误。registry 内部 SHALL 存储 `CheckerDefinition`(使用默认泛型参数),对外提供类型擦除后的接口。
|
||
|
||
#### Scenario: 查询支持的 type 列表
|
||
- **WHEN** 注册了 "http" 和 "cmd" 两个 checker 后查询 `registry.supportedTypes`
|
||
- **THEN** 返回的数组 SHALL 包含 `["http", "cmd"]`(按注册顺序)
|
||
|
||
### Requirement: Command checker 提供契约片段
|
||
系统 SHALL 支持 checker 提供自身 TypeBox 配置契约片段,用于描述该 checker 的 defaults 分组、target 领域分组和 expect 分组。
|
||
|
||
#### Scenario: Cmd checker 提供契约片段
|
||
- **WHEN** Cmd checker 被注册
|
||
- **THEN** registry SHALL 能提供 Cmd defaults、Cmd target 和 Cmd expect 的 TypeBox 契约片段
|
||
|
||
### Requirement: 配置解析通过 registry 委托 checker
|
||
系统 SHALL 在 `config-loader.ts` 的配置加载流程中通过 `checkerRegistry` 发现已注册 checker,组合公共 TypeBox 契约与 checker 契约,并将 checker 专属语义校验和解析委托给对应 checker。
|
||
|
||
#### Scenario: 配置解析委托 checker
|
||
- **WHEN** config-loader 解析一个 type 为 "cmd" 的 target
|
||
- **THEN** config-loader SHALL 调用 `checkerRegistry.get("cmd")` 获取对应 checker,并委托该 checker 执行语义校验和 resolve
|
||
|
||
### Requirement: Command text 断言位于 Cmd 目录
|
||
系统 SHALL 在 checker 专用目录中提供 text 断言函数。
|
||
|
||
#### Scenario: Command text 断言位于 Cmd 目录
|
||
- **WHEN** Cmd checker 需要对 stdout/stderr 执行文本规则校验
|
||
- **THEN** SHALL 调用 `runner/cmd/text.ts` 中的 `checkTextRules(text, rules, phase)`
|
||
|
||
### Requirement: Command 专用 expect
|
||
系统 SHALL 在 checker 专用目录中提供 exitCode 断言函数。
|
||
|
||
#### Scenario: Command 专用 expect
|
||
- **WHEN** Cmd checker 需要校验退出码
|
||
- **THEN** SHALL 调用 `runner/cmd/expect.ts` 中的 `checkExitCode()`
|
||
|
||
### Requirement: Checker 接口定义
|
||
系统 SHALL 在 `src/server/checker/runner/types.ts` 中定义面向扩展的泛型 `CheckerDefinition<TResolved extends ResolvedTargetBase = ResolvedTargetBase>`,包含 `type`、`configKey`、TypeBox 配置契约、启动期语义校验、`resolve`、`execute`、`serialize` 成员。
|
||
|
||
#### Scenario: type 与 configKey 默认一致
|
||
- **WHEN** checker 定义 `type: "cmd"`
|
||
- **THEN** checker 的 `configKey` SHALL 默认使用 `"cmd"`,对应 target 的 `cmd` 分组和 defaults.cmd 分组
|