1
0
Files
DiAL/openspec/changes/cmd-checker-enhancement/specs/checker-runner-abstraction/spec.md

2.6 KiB
Raw Blame History

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>,包含 typeconfigKey、TypeBox 配置契约、启动期语义校验、resolveexecuteserialize 成员。

Scenario: type 与 configKey 默认一致

  • WHEN checker 定义 type: "cmd"
  • THEN checker 的 configKey SHALL 默认使用 "cmd",对应 target 的 cmd 分组和 defaults.cmd 分组