1
0
Files
DiAL/openspec/changes/archive/2026-05-10-abstract-target-expect-checkers/proposal.md

3.4 KiB
Raw Blame History

Why

当前系统以 HTTP 请求作为唯一 checker 形态,targetexpect、存储、API 和 Dashboard 都围绕 URL、HTTP method、status code 与 response body 建模,无法自然表达本地命令检查等非 HTTP 场景。项目尚未上线,没有兼容性约束,适合一次性重构为面向多种 checker 类型的清晰模型。

What Changes

  • BREAKING: 移除顶层 target.urltarget.methodtarget.headerstarget.body 配置形态,改为 target.type 判别不同 checker 类型,并将领域字段放入 httpcommand 分组。
  • BREAKING: expect.body 从对象分组改为有序规则数组,按配置顺序执行并快速失败。
  • 引入 http target 类型,支持 HTTP URL、method、headers、body、最大 body 读取字节数和 HTTP 专用 expect。
  • 引入 command target 类型,支持本地命令 exec + argscwdenv、最大输出读取字节数和 command 专用 expect。
  • 为不同 checker 类型提供领域默认成功语义HTTP 默认 expect.status: [200]command 默认 expect.exitCode: [0]
  • 引入全局并发限制 runtime.maxConcurrentChecks,默认值为 20。
  • 引入 size 配置解析,支持 BKBMBGBHTTP maxBodyBytes 和 command maxOutputBytes 默认均为 100MB
  • 调整 expect 执行管线:先执行状态类检查,再执行耗时检查,再执行元数据或内容检查;同一内容字段内部按数组顺序检查,任一失败立即返回结构化失败信息。
  • 将 check result 的失败信息结构化入库,区分 runner 执行错误与 expect 不匹配,便于后续追查。
  • 将 DB、API、Dashboard 从 HTTP-only 字段命名调整为通用 checker 展示模型,同时保留 HTTP 和 command 的领域专用细节。
  • 同步更新 README、示例配置和测试覆盖 typed target、默认 expect、快速失败、输出限制、失败信息和 Dashboard 展示。

Capabilities

New Capabilities

  • command-checker: 定义本地命令 checker 的配置、执行、安全边界、默认成功语义、输出限制和 expect 校验。

Modified Capabilities

  • probe-config: YAML 配置从 HTTP-only target 改为 typed target新增 runtime 并发限制、HTTP/command 默认配置和 size 字符串解析。
  • probe-engine: 调度引擎从固定 HTTP fetch 改为按 target type 选择 runner并在全局并发限制下执行检查。
  • expect-body-checkers: HTTP body expect 改为有序规则数组,通用值操作符可复用于 stdout/stderr/header/body 等不同字段。
  • probe-data-store: targets 和 check_results schema 从 HTTP-only 字段改为 checker 通用字段,并持久化结构化失败信息。
  • probe-api: API 响应从 URL/method/statusCode/latencyMs 为中心改为 type/target/durationMs/statusDetail/failure 等通用 checker 契约。
  • probe-dashboard: Dashboard 从 HTTP 拨测视图调整为 checker 通用视图,展示类型、目标、耗时、最近失败原因和领域状态详情。

Impact

  • 影响后端类型定义、配置加载校验、调度执行、HTTP runner、command runner、expect 校验模块、SQLite schema、聚合查询和 API 映射。
  • 影响前后端共享 API 类型和 Dashboard 表格、详情、历史记录、趋势图展示字段。
  • 影响 README、probes.example.yaml、单元测试和 smoke test 配置样例。
  • 不引入新依赖,优先复用 Bun、TypeScript、现有 cheerio/xpath 和 SQLite 能力。