避免套餐过期后排队权益永久失联
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m6s

线上保持现有纯 Asynq 架构,以公平孤儿扫描和提交后投递消除永久饥饿及事务可见性竞态。

Constraint: 线上保持现有纯 Asynq 架构,不引入 Outbox、迁移或新任务基础设施。

Rejected: 事务内投递或扩大扫描 LIMIT | 无法消除竞态和永久饥饿。

Confidence: high

Scope-risk: narrow

Directive: 后续分支整合时按目标分支的套餐接续架构独立处理,不混用本热修实现。

Tested: go build ./...(退出码 0);git diff --check;openspec validate fix-main-package-activation-starvation --strict。

Not-tested: 按用户要求未新增、修改或运行自动化测试;线上 SQL、查询计划和日志待部署后核验。
This commit is contained in:
2026-08-03 09:58:05 +08:00
parent 1efb665619
commit a0de08d789
9 changed files with 369 additions and 103 deletions

View File

@@ -26,6 +26,10 @@
后台设备列表 `GET /api/admin/devices` 支持按 `virtual_no``imei`、设备名称、归属状态、激活状态、店铺、套餐系列等条件筛选。
### 套餐接续可靠性
`main` 分支使用 Asynq 在旧主套餐事务提交后投递下一套餐,并通过公平孤儿扫描补偿漏投;部署与回滚说明见 [Main 分支套餐接续饥饿热修](docs/hotfix-main-package-activation-recovery/功能总结.md)。
### 三种客户类型
| 客户类型 | 业务特点 | 典型场景 | 钱包归属 |