# 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 并发测试覆盖首次成功、重复成功、逆转阈值、窗口过期、无变化、无效载荷、同一卡串行、事务回滚和事件幂等。
