1
0
Files
DiAL/openspec/changes/checker-observation/specs/probe-data-store/spec.md

2.3 KiB
Raw Blame History

MODIFIED Requirements

Requirement: SQLite 数据库初始化

系统 SHALL 使用 Bun 内置 bun:sqlite 模块在配置的数据目录下创建 SQLite 数据库文件,并以 WAL 模式运行。数据库 schema MUST 支持 typed checker target 和结构化检查结果targets 表 MUST 包含 grp 列存储分组信息,且 targets 表的 namedescription 列 MUST 允许 NULL。

Scenario: 首次启动创建数据库

  • WHEN 指定的数据目录下不存在数据库文件
  • THEN 系统 SHALL 创建数据库文件并初始化 targets 表和 check_results 表check_results 表包含 idINTEGER PRIMARY KEY AUTOINCREMENT、target_idTEXT NOT NULL、timestampTEXT NOT NULL、matchedINTEGER NOT NULL、duration_msREAL、observationTEXT、failureTEXT不包含 status_detail 列,不包含 success 列

Scenario: targets name 列允许 NULL

  • WHEN 系统首次创建 targets 表
  • THEN targets.name 列 SHALL 允许存储 NULL

Scenario: 数据目录不存在

  • WHEN 配置的数据目录路径不存在
  • THEN 系统 SHALL 自动创建该目录

Scenario: 数据库已存在时启动

  • WHEN 数据库文件已存在
  • THEN 系统 SHALL 直接打开数据库,不重新建表

Scenario: 外键约束

  • THEN 系统 SHALL 启用 PRAGMA foreign_keys = ON

Scenario: 级联删除

  • THEN check_results 表的外键约束 SHALL 使用 ON DELETE CASCADE,确保删除目标时自动清理关联结果记录

Requirement: check_results 表追加写入

系统 SHALL 将每次检查结果追加写入 check_results 表,不更新或删除已有记录。

Scenario: 写入检查结果

  • WHEN 一次 checker 执行完成
  • THEN 系统 SHALL 插入一条包含 target_id、timestamp、matched、duration_ms、observation、failure 的记录,其中 observation 使用 JSON.stringify 序列化为 TEXT

Scenario: 查询检查结果

  • WHEN 系统查询 latest check 或历史 check_results
  • THEN 存储层 SHALL 返回 observation 字段而非 status_detail 字段,供 API 序列化层反序列化并构造 detail

Scenario: 写入结构化失败信息

  • WHEN checker 执行失败或 expect 不匹配
  • THEN 系统 SHALL 将首个失败原因序列化写入 failure 字段