Files
junhong_cmp_fiber/.scratch/ur94-card-state-events-callbacks/issues/02-realname-observation-write-loop.md
break 208cb19f0e
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m52s
ur94 issues
2026-07-22 16:44:01 +09:00

24 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 02 — 交付实名观测的公共写入闭环
**What to build:** 轮询、手动同步和运营商回调可以提交类型明确的实名观测由唯一公共用例锁定卡、应用首次实名与周期逆转规则并在同一事务中保存卡状态、Audit Event 和 Outbox。有效但无变化的观测仍更新时间和 Integration Log重复观测不会重复激活套餐或执行业务副作用。
**Blocked by:**
- `.scratch/tech-public-foundation/issues/02-transactional-public-outbox-write.md` — 02 — 在业务事务中可靠写入公共 Outbox
- `.scratch/tech-public-foundation/issues/03-outbox-at-least-once-delivery.md` — 03 — 完成 Outbox 到 Asynq 的至少一次投递闭环
- `.scratch/tech-global-audit/issues/01-audit-event-write-loop.md` — 01 — 交付不可变 Audit Event 写入闭环
- `.scratch/tech-global-audit/issues/02-integration-log-attempt-loop.md` — 02 — 交付可恢复的 Integration Log 尝试闭环
**Status:** ready-for-agent
**架构通道:** 复杂写;主链路为 Handler/Worker → Application → Domain → Repository/Infrastructure。
**完整业务边界:** 本票建立公共卡观测契约及实名观测的完整业务边界,包括首次实名、周期逆转确认、可靠事件和提交后缓存处理。明确不迁移流量、网络、套餐轮询、保护期轮询或未触碰的旧实名查询;运营商解除实名回调不进入逆转计数。
- [ ] 公共观测元数据和实名观测均使用类型明确的领域输入,包含来源、场景、观测时间、请求/关联标识及脱敏上游摘要,领域层不依赖 Gateway、Fiber、GORM、Redis 或 Asynq 类型。
- [ ] 应用用例在事务中锁定卡,首次从未实名变为已实名时只写一次首次实名时间,并可靠发布卡/设备套餐首次激活、设备实名投影和停复机评估所需事件。
- [ ] 周期查询的未实名观测保留连续三次确认和 10 分钟窗口,未达阈值不把已实名卡改为未实名;回调来源的解除实名观测不能增加该计数。
- [ ] 有效无变化观测更新时间并写 Integration Log但不重复发布首次实名或状态变化事件缺少关键字段的观测不以零值覆盖本地状态。
- [ ] 卡状态、Audit Event 和 Outbox 任一步失败均整体回滚;缓存失效或回填只在提交后执行,失败可观察且不伪造事务成功。
- [ ] 单元及 PostgreSQL 并发测试覆盖首次成功、重复成功、逆转阈值、窗口过期、无变化、无效载荷、同一卡串行、事务回滚和事件幂等。