docs: create Bell task #17 acceptance archive

ila
2026-08-12 18:17:11 +08:00
parent 133ad09574
commit dab364664e
@@ -0,0 +1,44 @@
# 17 Bell不可变Event与永久幂等收据
- 类型:需求
- 所属 Epic:#7
- 所属 MVP / 版本:#8
- 状态:待验收
- 日期:2026-08-12
- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/17
- Wiki 页面:Task-17-Bell不可变Event与永久幂等收据
- Wiki revision:见本地镜像头
## 背景与目标
可靠接收外部事件,在重试、并发和重启后保持永久幂等,同时禁止改写原始 Event。
## 最终方案
以 `(producer_id, source_event_id)` 唯一键和 payload hash 建立稳定 Receipt;相同正文返回原结果,不同正文返回冲突。Event/Receipt 持久化在同一事务,数据库触发器拒绝 Event 更新或删除,并提供游标分页与详情查询。
## 修改文件
- `Bell/server/app/event/`、`receipt/`:入站服务、HTTP、查询和类型。
- `Bell/server/migrations/2026081202_event_receipt.sql`:不可变表、索引、Receipt 和触发器。
- `Bell/web/src/views/event/Events.vue`:事件查询与技术详情。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| 并发重复返回同一 Event/Receipt | 通过 |
| 同键不同 payload 返回冲突 | 通过 |
| 进程/连接重建后仍幂等 | 通过 |
| Event 数据库层不可变 | 通过 |
| 下游失败时不留下半成品 | 通过 |
## 测试
- 执行:PostgreSQL 集成测试,16 个并发相同入站、冲突、连接池重建、不可变触发器、事务 hook 回滚。
- 结果:全部通过。
- **未验证部分**:正式跨项目契约、生产规模压测与生产备份恢复。
## 相关提交
- `64a1d82` 不可变 Event 与永久幂等 Receipt(PR #35)。