Files
EvoScientist-WebUI/docs/schemas/usage-spool-v1.md
T
m4 fe982f7f95
CI / macos-latest / Node 20 (push) Has been cancelled
CI / ubuntu-latest / Node 20 (push) Has been cancelled
CI / windows-latest / Node 20 (push) Has been cancelled
feat: add workspace isolation and administration UI
2026-07-19 12:17:18 +08:00

1.2 KiB
Raw Blame History

Usage Spool v1

spool 只允许位于本地文件系统,目录为 tmp/、pending/、inflight/、quarantine/。 文件名是 lowercase_hex(sha256(event_id)) + ".json",正文只允许 UsageEvent v1。

写入顺序:在 tmp 创建唯一文件,写完整 JSON,fsync 文件,以 O_EXCL 获取相同 event key 的短锁,原子 rename 到 pending,fsync pending 目录,再释放锁。相同 ID/相同 payload 丢弃临时副本;相同 ID/不同 payload 移入 quarantine。任何错误必须 fail-open,并记录 first_loss_at,不能改变模型结果。

sender 通过同文件系统原子 rename 从 pending claim 到 inflight。200 accepted/duplicate 后删除并 fsync inflight;409、400、413、422 移入 quarantine;网络、429 和 5xx 回 pending;401、403、 404、426 保留 inflight/pending 并暂停或重新协商。超过 120 秒的 inflight 在启动和扫描时回收。

崩溃恢复:tmp 只可删除过期孤儿;pending 重发;inflight 超过 lease 后回 pending;HTTP ACK 后、 本地删除前崩溃会重发,由 Collector event ID 幂等;本地删除后不再依赖 spool。pending/inflight 不能按时间淘汰,达到软上限时拒绝新事件并将完整性状态标为 degraded。