# 09 — 承接手动轮询状态并记录同步外部尝试

**What to build:** 现有手动触发、进度和监控接口保持用户契约，但运行状态由公共异步任务契约承接；Gateway 实际请求及合并、互斥、限频、提前完成等未发送尝试进入 Integration Log，只有状态变化、人工强制、连续失败或高风险异常进入 Audit Event。

**Blocked by:**

- 01 — 交付不可变 Audit Event 写入闭环
- 02 — 交付可恢复的 Integration Log 尝试闭环
- `.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-public-foundation/issues/06-unified-async-task-contract.md` — 06 — 冻结统一异步任务五态和查询契约

**Status:** ready-for-agent

**架构通道:** 主通道为 Application + Infrastructure，辅助通道为 Query。

**完整业务边界:** 本票收口旧手动轮询日志承担的运行状态替代、外部尝试记录和兼容接口。明确不改变轮询配置、间隔、Redis 分片队列、任务类型、卡级开关、并发控制或失败重排，不新建同步专用运行表。

- [ ] 手动触发、进度与监控公开契约继续可用，状态、计数、失败摘要和恢复行为映射到公共异步任务五态。
- [ ] 实际 Gateway 请求在调用前建立 Integration Log，完成后记录结果、耗时、状态变化和脱敏上游摘要。
- [ ] 合并、互斥、限频、已达预期和取消即使未产生 HTTP 请求也有可解释终态，不伪造 HTTP 状态。
- [ ] 同步序列传播 `request_id/correlation_id/series_id/attempt`；同序列查询可连续看到立即、3 分钟、5 分钟的全部尝试。
- [ ] 普通无变化成功只写 Integration Log；状态变化、人工强制、连续失败或高风险异常按注册规则关联 Audit Event。
- [ ] 回归测试固定现有轮询配置、队列、开关和监控基线，验证切换前后调度事实不变且旧手动轮询表不再承担新增运行状态。
