Observation
Observer 形成的一份陈述,唯一保存事实时间的类型
Observation 是一份陈述,中文叫观测。它说明四件事:哪个 Observer 负责、内容是什么、依据了哪些已保存的数据、事实在什么时间成立。前台状态 Observer 采集到的前台时段、模型的推断、用户的确认、否定和亲身陈述,都是 Observation。
只有 Observation 保存事实时间。前台时段本身只记“哪个应用在前台”,这一段从几点到几点,写在引用它的 Observation 上。
- 类别:Core 类型,
category为observation - 引用:
observerVersionId、contentVersionId、inputSetVersionId - 决策:ADR · 实体模型、ADR · Observer 与输入集、ADR · 身份、时间与更新
成员
以下成员位于版本的 content 中,版本共有的成员见 Version。
| 成员 | 类型 | 含义 |
|---|---|---|
observerVersionId | 引用 | 负责的 Observer |
contentVersionId | 引用 | 观测内容 |
inputSetVersionId | 引用或 null,必须出现 | 这次处理实际用到的 InputSet。没有用到已保存的数据时为 null,见 EVIDENCE-1 |
timeZone | 字符串或 null,必须出现 | 事实所属的 IANA 时区,未知时为 null |
startAt | 时间或 null,必须出现 | 事实的已知开始边界,未知时为 null |
endAt | 时间或 null,必须出现 | 事实的已知结束边界,未知时为 null |
示例
VS Code 从 10:00 起在前台,前台状态 Observer 在 10:05 最后一次确认。
{
"observerVersionId": "019e1bbb-ec00-7000-8000-0000000000a1",
"contentVersionId": "019e1bbb-ec00-7000-8000-0000000000c1",
"inputSetVersionId": null,
"startAt": "2026-10-06T02:00:00Z",
"endAt": "2026-10-06T02:05:00Z",
"timeZone": "Asia/Shanghai"
}endAt 是最近一次确认的时刻,VS Code 此后可能仍在前台。采集直接读取系统状态,没有用到已保存的数据,所以 inputSetVersionId 为 null。
引用
OBSERVATION-1 引用的目标
执行方:后端
每份 Observation 必须引用一个 Observer 和一个观测内容,两者都是业务实体的版本。inputSetVersionId 不为 null 时,必须指向一个 InputSet 的版本。这些目标都要已保存且未被删除,见 ENTITY-6。
OBSERVATION-2 内容的类型
定义
观测内容的类型由内容版本所用的 Schema 版本决定。
OBSERVATION-3 内容可共用
执行方:后端
同一个观测内容可以被多份 Observation 引用。同一个 Observer 或不同的 Observer 都可以多次观测同一个内容。
事实时间
事实时间由 startAt 和 endAt 两个边界表示,任何一个都可以未知:
startAt | endAt | 含义 |
|---|---|---|
null | null | 开始和结束都未知 |
t | null | 开始已知,结束未知 |
null | t | 开始未知,结束已知 |
t | t | 时间点 t |
t1 | t2,t1 < t2 | 时段 [t1, t2) |
t1 | t2,t1 > t2 | 无效 |
endAt 可以是最近一次确认的时刻,事实是否已经结束按 TIME-4 判断。边界怎样取值,见 Time。
OBSERVATION-4 只有 Observation 有事实时间
执行方:写入方
只有 Observation 保存事实时间,业务实体的事实时间写在引用它的 Observation 上。观测内容可以保留来源的原始时间,见 TIME-5。
OBSERVATION-5 null 即未知
定义
边界为 null 表示这个边界未知。暂停、取消这类业务状态由观测内容表达。
OBSERVATION-6 开始不晚于结束
执行方:后端
两个边界都已知时,startAt 不得晚于 endAt。
OBSERVATION-7 时间点
定义
startAt 等于 endAt 表示一个时间点。
OBSERVATION-8 左闭右开
定义
startAt 早于 endAt 表示时段 [startAt, endAt)。前后相接的两个时段,前一个的 endAt 等于后一个的 startAt。
OBSERVATION-9 时区
执行方:后端
timeZone 必须出现,值是事实所属的 IANA 时区,未知时为 null。读取方用它把 startAt 和 endAt 换算为当地时间。
版本
OBSERVATION-10 只有原 Observer 能更新
执行方:后端
Observation 的后续版本由同一个 Observer 形成:observerVersionId 指向同一个 Observer 实体的某个版本。后续版本可以补全或纠正事实时间、时区、观测内容和输入集。其他 Observer 的确认或否定形成新的 Observation,见 IDENTITY-3。