baa-conductor

git clone 

commit
2d65427
parent
99c995e
author
codex@macbookpro
date
2026-03-31 18:03:06 +0800 CST
docs: archive BUG-036 report
1 files changed,  +0, -37
D bugs/BUG-036-projector-cursor-updated-at-unit-mismatch.md
+0, -37
 1@@ -1,37 +0,0 @@
 2-# BUG-036: projector cursor updatedAt 秒级与 observedAt 毫秒级不一致
 3-
 4-> 提交者:Claude
 5-> 日期:2026-03-30
 6-
 7-## 现象
 8-
 9-`projector.ts` 的 `saveCursor` 使用 `Math.floor(now / 1000)` 将毫秒转为秒级写入 `system_state.updated_at`:
10-
11-```typescript
12-await repository.putSystemState({
13-  stateKey: cursorStateKey,
14-  updatedAt: Math.floor(now / 1000),  // 秒级
15-  valueJson: JSON.stringify({
16-    message_id: cursor.id,
17-    observed_at: cursor.observedAt     // 毫秒级
18-  })
19-});
20-```
21-
22-而 `system_state` 表的 `updated_at` 列定义为 `INTEGER NOT NULL`,没有明确单位约定。如果后续有其他代码读 `system_state.updated_at` 并假设毫秒级,会出现约 1000 倍的时间偏差。
23-
24-## 当前影响
25-
26-cursor 本身的值存在 `valueJson` 里(`observed_at` 是毫秒级),cursor 恢复时读的是 `valueJson` 而不是 `updated_at`,因此当前功能不受影响。
27-
28-但 `updated_at` 的单位不一致是潜在的混淆源。
29-
30-## 建议修复
31-
32-统一 `system_state.updated_at` 为毫秒级(与其他所有 `*_at` 字段一致),或在 `system_state` schema 注释中明确标注单位。
33-
34-`ops/sql/schema.sql` 中现有的 `system_state` 初始化使用 `CAST(strftime('%s', 'now') AS INTEGER)` 即秒级。如果要统一为毫秒级,需要一起改。
35-
36-## 优先级
37-
38-低。当前不影响功能,但单位不一致是后续维护的隐患。