fix: address Codex review of telemetry fix (mkdir degrade, close, degrade tests)

This commit is contained in:
2026-07-16 08:53:50 -04:00
parent 065c8ae1b9
commit cc01d5ed62
3 changed files with 69 additions and 9 deletions
@@ -65,6 +65,14 @@ telemetry **不能**复用 HarnessLog 实例,三条硬隔离:
| **续跑** | 不适用(遥测无状态;进程退出 WAL 自动恢复已 commit 的) |
| **原子性** | 单条 insert+commit 原子,无半写 |
**零丢失保证的适用范围(Codex 审明确)**
- **单进程、单 recorder 实例**:锁与连接是实例字段,串行化只在同一实例内成立。同进程多个 recorder 指向同一 db 会退回跨连接竞争——当前 `main.py` / `video_split_cli` 均单实例注入,不踩;本实现不支持多实例同库(YAGNI,若未来需要再引 class-level registry)。
- **唯一 call_id**`INSERT OR IGNORE` 下重复 call_id 是**预期忽略**(幂等),不计作丢失。
**降级边界(Codex 审加固)**`__init__` 的 mkdir / connect / PRAGMA / 建表统一纳入 `except (OSError, sqlite3.Error)` 降级(`self._conn=None`),任一失败都不冒泡拖垮初始化;`_write``self._conn is None` 或 execute 抛错均降级 warning。守住"遥测失败绝不拖垮 LLM 调用"哲学。
**生命周期**:补幂等 `close()`(对齐 HarnessLog)供进程退出前可选调释放 fd;不调也不丢数据(WAL 已 commit)。telemetry 是长生命周期单例,无 context-manager 场景,故 close 为可选而非强制。
## 7. 测试
- **并发写不锁死**(核心):多线程/多协程并发调 `record_llm_call`(如 32 并发 × N 条),断言全部落库、零 `database is locked`、零丢失(行数 == 写入数)。这是复现 bug 的真实场景测试。