Admin 采购任务没有字段区分演练与真实下单。直接开放 live 会让 dry_run Client 误领,也无法审计谁把任务设为真实执行。
execution_mode=dry_run/live
tasks
execution_mode
docs/client/04-admin-api-contract.md
admin/model/model.go
admin/repository/mysql_db.go
task.go
admin/service/purchase_workflow.go
cd D:\chengma\cmautobuy\admin $env:GOTOOLCHAIN='go1.23.0' go vet ./... gofmt -l . go test ./... -count=1 Remove-Item Env:GOTOOLCHAIN
使用独立 MySQL 8.4 _test 库验证升级和能力矩阵,并运行 Admin/Client 契约测试。
_test
数据库/API 风险通过备份、默认 dry_run 和兼容测试控制。回退应用时保留追加字段,不删除迁移;误建风险由账号状态校验、双重确认、指定 Client 和服务端复核控制。
开始实施。范围严格按工单:新增不可变 execution_mode,默认 dry_run;live 仅管理员经阻断式确认创建,且必须分配给声明 purchase_mode=live 的客户端;领取接口按能力过滤;同步任务列表/详情/API 与契约文档。不会加入支付、验证码/风控绕过、批量真实下单或远程开启真实模式。
dry_run
live
purchase_mode=live
范围变更(用户已确认):取消“仅管理员可创建 live”的限制。管理员和其他正常状态用户均可创建演练及真实采购任务;真实任务仍必须勾选确认、输入指定短语、分配给 live Client,并记录创建人与确认时间。禁用或状态异常账号不得创建。
实现完成,状态:待用户验收。
实现要点:
验证:
go vet ./...
go build ./...
提交:
3aaa40cfe043d9cfb9841dd4c899d2a4d8b2d141
03c87ec82dc6aa10f612ba19160fb74c5470b529
docs/task/98-真实采购任务安全模式.md
补充验证:无主采集任务领取与相同幂等键重复提交结果回归均在 Go 1.23.0 + 真实 MySQL 8 _test 下通过。归档提交因补充该验证记录已更新为 6249147229f5e9674159bd56c9333855944015cb(上一条中的 03c87ec... 已被本提交替代)。
6249147229f5e9674159bd56c9333855944015cb
03c87ec...
生产数据库核验完成:
autobuy
2026-08-10T06:51:00.6763521Z
chk_tasks_execution_mode
chk_tasks_live_confirmation
idx_tasks_claim_mode
由于只读预检时已确认 v5 被应用启动流程执行,本次没有重复执行 DDL,也没有修改任务数据。归档同步提交:7bd75510b20b04f59688a855d6ab839cf084c53f。
7bd75510b20b04f59688a855d6ab839cf084c53f
按用户明确授权,已清空线上 MySQL 8 的 autobuy schema:删除库内全部 19 张表,保留 autobuy 数据库本身和账号权限;执行后复核剩余业务表数量为 0。执行前确认无其他活动连接。本次未创建包含业务数据或凭据的转储,因此原数据不可恢复。下一次启动当前 Admin 会从空库重建到最新 schema,并要求重新初始化管理员。
用户已明确验收通过。关闭本工单,并已同步更新父工单 #97、#96 的任务清单及“正常状态用户可创建 live”权限决策。
用户已明确验收通过 #98。实现、验证、生产库结构核验和本地归档均已完成,现关闭工单并同步父工单 #96/#97。
用户于 2026-08-10 调整后续业务策略:Admin 新建采购任务固定为 live,不再提供 dry_run/live 选择。后续由 #112 实施并保留本工单已建立的执行模式字段、审计和 Client 能力隔离;#98 的历史实现与验收记录不重写。价格确认区调整另见 #113。
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
Admin 采购任务没有字段区分演练与真实下单。直接开放 live 会让 dry_run Client 误领,也无法审计谁把任务设为真实执行。
做什么 / 不做什么
execution_mode=dry_run/live;旧数据和默认值 dry_run;管理员和其他正常状态用户均可经阻断确认创建 live;只允许指定声明 live 的 Client;领取按能力过滤;列表/详情显示模式;记录创建人和确认时间;同步 Client 契约。怎么做
tasks增加执行模式和 live 确认审计字段;DDL 可重放、自检后记录版本,生产前备份。execution_mode;旧 Client 缺字段只兼容 dry_run;同工单同步docs/client/04-admin-api-contract.md。admin/model/model.go、admin/repository/mysql_db.go、task.go、admin/service/purchase_workflow.go、领取 handler/service、模板、契约和测试。验收标准
怎么验证
使用独立 MySQL 8.4
_test库验证升级和能力矩阵,并运行 Admin/Client 契约测试。风险和回退
数据库/API 风险通过备份、默认 dry_run 和兼容测试控制。回退应用时保留追加字段,不删除迁移;误建风险由账号状态校验、双重确认、指定 Client 和服务端复核控制。
开始实施。范围严格按工单:新增不可变
execution_mode,默认dry_run;live仅管理员经阻断式确认创建,且必须分配给声明purchase_mode=live的客户端;领取接口按能力过滤;同步任务列表/详情/API 与契约文档。不会加入支付、验证码/风控绕过、批量真实下单或远程开启真实模式。范围变更(用户已确认):取消“仅管理员可创建 live”的限制。管理员和其他正常状态用户均可创建演练及真实采购任务;真实任务仍必须勾选确认、输入指定短语、分配给 live Client,并记录创建人与确认时间。禁用或状态异常账号不得创建。
实现完成,状态:待用户验收。
实现要点:
execution_mode。验证:
_test的 v4→v5、DDL 重放、错误形状不记版本通过。go vet ./...、go build ./...、格式检查通过。提交:
3aaa40cfe043d9cfb9841dd4c899d2a4d8b2d14103c87ec82dc6aa10f612ba19160fb74c5470b529docs/task/98-真实采购任务安全模式.md补充验证:无主采集任务领取与相同幂等键重复提交结果回归均在 Go 1.23.0 + 真实 MySQL 8
_test下通过。归档提交因补充该验证记录已更新为6249147229f5e9674159bd56c9333855944015cb(上一条中的03c87ec...已被本提交替代)。生产数据库核验完成:
autobuy2026-08-10T06:51:00.6763521Zchk_tasks_execution_mode、chk_tasks_live_confirmation均为强制启用idx_tasks_claim_mode列顺序和降序方向正确dry_run由于只读预检时已确认 v5 被应用启动流程执行,本次没有重复执行 DDL,也没有修改任务数据。归档同步提交:
7bd75510b20b04f59688a855d6ab839cf084c53f。按用户明确授权,已清空线上 MySQL 8 的
autobuyschema:删除库内全部 19 张表,保留autobuy数据库本身和账号权限;执行后复核剩余业务表数量为 0。执行前确认无其他活动连接。本次未创建包含业务数据或凭据的转储,因此原数据不可恢复。下一次启动当前 Admin 会从空库重建到最新 schema,并要求重新初始化管理员。用户已明确验收通过。关闭本工单,并已同步更新父工单 #97、#96 的任务清单及“正常状态用户可创建 live”权限决策。
用户已明确验收通过 #98。实现、验证、生产库结构核验和本地归档均已完成,现关闭工单并同步父工单 #96/#97。
用户于 2026-08-10 调整后续业务策略:Admin 新建采购任务固定为 live,不再提供 dry_run/live 选择。后续由 #112 实施并保留本工单已建立的执行模式字段、审计和 Client 能力隔离;#98 的历史实现与验收记录不重写。价格确认区调整另见 #113。