当前 Client–Admin 契约只有登记、领取、提交结果和提交失败四类调用,Client 在采购规格面板找不到任务尺码时只能结束任务。要在同一次、尚未进入不可逆阶段的采购中取得 Admin 规格决策,必须新增一个语义明确的运行时解析命令,并先确定版本、幂等、最小数据、审计和隐私边界。
现有提交失败接口会改变任务状态,不能同时承载“返回决策并继续执行”;也不能让 Client 周期性查询 Admin 状态。
POST /api/v1/client/tasks/{task_id}/spec-resolution
Idempotency-Key
task_id + attempt_id + candidate_snapshot_hash
matched / uncertain / rejected / failed
pdd_products.skus_json
docs/client/04-admin-api-contract.md
docs/admin/04-client-api.md
purchase_spec_resolutions
预计修改文件:
docs/client/03-data-model.md
docs/admin/03-data-model.md
admin/model/model.go
admin/repository/mysql_db.go
docs/task/<工单号>-运行时规格解析契约与审计模型.md
从 admin/ 执行:
admin/
$env:GOTOOLCHAIN='go1.23.0' gofmt -l . go build ./... go test ./... -count=1 go vet ./... Remove-Item Env:GOTOOLCHAIN
使用独立 MySQL 8.4 _test 库验证首次迁移、上一版本升级、重复迁移、唯一键和候选 JSON 边界;逐项对照两侧契约字段。
_test
开始实施。已确认范围仅包含:冻结 POST /api/v1/client/tasks/{task_id}/spec-resolution 契约、增加 MySQL v26 审计表与模型/Repository、同步 Admin/Client 数据模型和接口文档、补充迁移/Repository 验证。不会在本工单实现路由 Handler、AI 匹配逻辑、Client 真机候选采集或采购续跑;也不会改动现有 Client 本地未提交文件。
实施进度:已完成 MySQL v26 purchase_spec_resolutions、Admin 模型与 Repository(新增、按编号/业务身份读取、幂等复查、只完成一次),并同步 Client/Admin 接口契约和数据模型。接口固定为一次性 POST /api/v1/client/tasks/{task_id}/spec-resolution,无 GET、轮询、租约或心跳;候选最大 100 条、请求最大 64 KiB,响应只能复用请求候选。验证已通过:Go 1.23.0 gofmt、go build ./...、go test ./... -count=1、go vet ./...;另在本机临时隔离 MySQL 8.4 实例实际通过全新建库、v25→v26、重复迁移、唯一键/幂等复查、决策只完成一次和候选数量约束测试。未连接或修改生产库。
gofmt
go build ./...
go test ./... -count=1
go vet ./...
已按工单范围完成:
验证结果:Go 1.23.0 gofmt、go build ./...、go test ./... -count=1、go vet ./... 全部通过;本机临时隔离 MySQL 8.4.8 实际通过全新建库、v25→v26、重复迁移、唯一键/冲突、决策只完成一次和候选上限测试。未连接或修改生产库。
提交:
1241465
feat: 定义运行时规格解析契约与审计模型 (#254)
f187bfe
docs: 归档任务 #254
归档:docs/task/254-运行时规格解析契约与审计模型.md
docs/task/254-运行时规格解析契约与审计模型.md
当前状态:已完成,待用户验收;工单暂不关闭。
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
当前 Client–Admin 契约只有登记、领取、提交结果和提交失败四类调用,Client 在采购规格面板找不到任务尺码时只能结束任务。要在同一次、尚未进入不可逆阶段的采购中取得 Admin 规格决策,必须新增一个语义明确的运行时解析命令,并先确定版本、幂等、最小数据、审计和隐私边界。
现有提交失败接口会改变任务状态,不能同时承载“返回决策并继续执行”;也不能让 Client 周期性查询 Admin 状态。
做什么 / 不做什么
POST /api/v1/client/tasks/{task_id}/spec-resolution的版本化请求、响应和稳定错误代码。Idempotency-Key,业务身份包含task_id + attempt_id + candidate_snapshot_hash;相同键同内容返回同一决策,相同���不同内容返回冲突。matched / uncertain / rejected / failed、解析记录 ID、来源、候选编号、原始候选规格、置信度、候选哈希和可读原因。pdd_products.skus_json。怎么做
docs/client/04-admin-api-contract.md定义完整 HTTP 契约、幂等规则、错误格式、兼容策略和安全边界;同步更新docs/admin/04-client-api.md。purchase_spec_resolutions(名称实施时可保持同等清晰语义)及唯一约束;一个记录同时保存观察、决策和审计,避免拆分无必要的多表。预计修改文件:
docs/client/04-admin-api-contract.mddocs/client/03-data-model.mddocs/admin/04-client-api.mddocs/admin/03-data-model.mdadmin/model/model.goadmin/repository/mysql_db.go及相邻 migration / repository 测试docs/task/<工单号>-运行时规格解析契约与审计模型.md验收标准
pdd_products.skus_json,不改变采购任务状态和原四个 Client 接口。怎么验证
从
admin/执行:使用独立 MySQL 8.4
_test库验证首次迁移、上一版本升级、重复迁移、唯一键和候选 JSON 边界;逐项对照两侧契约字段。风险和回退
开始实施。已确认范围仅包含:冻结
POST /api/v1/client/tasks/{task_id}/spec-resolution契约、增加 MySQL v26 审计表与模型/Repository、同步 Admin/Client 数据模型和接口文档、补充迁移/Repository 验证。不会在本工单实现路由 Handler、AI 匹配逻辑、Client 真机候选采集或采购续跑;也不会改动现有 Client 本地未提交文件。实施进度:已完成 MySQL v26
purchase_spec_resolutions、Admin 模型与 Repository(新增、按编号/业务身份读取、幂等复查、只完成一次),并同步 Client/Admin 接口契约和数据模型。接口固定为一次性POST /api/v1/client/tasks/{task_id}/spec-resolution,无 GET、轮询、租约或心跳;候选最大 100 条、请求最大 64 KiB,响应只能复用请求候选。验证已通过:Go 1.23.0gofmt、go build ./...、go test ./... -count=1、go vet ./...;另在本机临时隔离 MySQL 8.4 实例实际通过全新建库、v25→v26、重复迁移、唯一键/幂等复查、决策只完成一次和候选数量约束测试。未连接或修改生产库。完成记录(待用户验收)
已按工单范围完成:
purchase_spec_resolutions,一张表保存候选观察与最终决策;验证结果:Go 1.23.0
gofmt、go build ./...、go test ./... -count=1、go vet ./...全部通过;本机临时隔离 MySQL 8.4.8 实际通过全新建库、v25→v26、重复迁移、唯一键/冲突、决策只完成一次和候选上限测试。未连接或修改生产库。提交:
1241465feat: 定义运行时规格解析契约与审计模型 (#254)f187bfedocs: 归档任务 #254归档:
docs/task/254-运行时规格解析契约与审计模型.md当前状态:已完成,待用户验收;工单暂不关闭。