最终设计候选版(2026-08-29)。 本版固定采用采购独立工作项表与通用 runner 原语,明确 API、重试、锁顺序、超时和写回边界。仍须完成标注截图确认,并在实施迁移前取得用户再次授权。历史评论仅作决策记录,冲突时以本正文为准。
purchase_spec_match_work_item
spec_probe_pending
pending
字段至少包含:purchase_task_id 唯一键、status(pending/running/retry_wait/matched/manual_required/cancelled)、attempt_count、next_attempt_at、lease_owner、lease_expires_at、last_error_code、last_error_at、限长脱敏 reason、input_fingerprint、input_snapshot_json、created/updated/completed_at。
pending/running/retry_wait/matched/manual_required/cancelled
SpecSource=unresolved
matching
status
executable
reasonCode
reason
nextAction
nextAttemptAt
executable=false
min(configured_timeout, 60s)
固定顺序:purchase_task -> purchase_spec_match_work_item -> syb_product -> shopee_product -> pdd_product。
purchase_task -> purchase_spec_match_work_item -> syb_product -> shopee_product -> pdd_product
INPUT_CHANGED
access/purchaser.go
采购任务列表和详情复用现有 Element Plus 风格,不新增页面:
go test ./app/goauto/purchase/... ./app/goauto/aimatching/... ./app/goauto/replacement/... ./app/goauto/...
Business-Rules-and-Glossary
Architecture-and-Code-Map
Android-Agent-API-Contract
待 #147 完成、标注截图确认、自动确认口径确认及数据库迁移授权。
只把外部 AI 调用异步化、本地确定性匹配继续同步,这个边界合理;不在数据库事务内等待 provider 也正确。但 #131 的 worker 是“商品替换”领域专用实现,不是可直接复用的通用采购匹配队列。当前正文缺少数据模型、可靠重试、人工处理和状态竞态设计,不能直接实施。
#131 worker 当前直接依赖:
pdd_product_replacement_item
采购任务不能直接复用该工作项模型。建议调整为以下一种明确方案:
subject_type + subject_id
无论选择哪种,都不能让采购任务伪装成 replacement item。正文中的“不新造第二套调度”应解释为“不复制第二套 runner/租约框架”,而不是“不允许采购拥有独立工作项”。
持久化工作项至少需要:
这必然涉及追加数据库迁移、状态/并发和权限边界。请在正文明确:设计确认后,实施迁移前仍需用户再次授权。当前“待实施”应改为“待设计证据确认及数据库迁移授权”。
#131 当前对可重试错误会在一次 RunPending 中立即继续尝试;达到次数后转 manual_required。它没有延迟退避,也没有在 provider 恢复后自动把人工状态重新入队。
RunPending
manual_required
若本单验收要求“外部服务恢复后自动补齐”,必须新增并明确:
next_attempt_at
同时定义哪些错误可重试:网络、超时、5xx 可重试;未配置、候选歧义、结果越界、置信度不达标通常直接转人工。
spec_probe_pending 当前属于 Agent 规格探测/决策流程,并非“创建后等待 AI”。复用它会扩大状态语义,与正文“既有语义未改变”冲突。
当前 Next 会跳过映射均为空的 spec_probe_pending,但直接 Claim 仍接受该状态;仅依赖 Next 不能构成安全边界。
Next
Claim
请二选一并明确:
Start
如果坚持复用 spec_probe_pending,必须更新长期语义,并在 Next/Claim/Start 全部增加原子保护和并发测试,不能再宣称状态语义未改变。
Next/Claim/Start
现有 POST /:taskId/spec-decision 强制要求:
POST /:taskId/spec-decision
taskAttemptId
spec_probe_completed
创建阶段的异步 AI 工作项没有 Agent attempt,因此“有限重试后转人工”目前没有可用写回路径。
请补齐:
只有状态文案,没有可执行的人工入口,不构成闭环。
当前普通采购 Create() 对 Resolve() 返回的合法候选会直接写入任务;正文提出复用 #131 的置信度、reason 和自动确认门槛,这实际上可能改变普通采购的既有裁决行为。
Create()
Resolve()
请明确并由用户确认:
若选择后者,应作为业务规则变化更新验收和 Wiki,不能同时写“判定逻辑不变”。
另需决定匹配成功是否只固化到任务快照,还是同时回写虾皮商品的持久规格映射。若回写,必须增加共享档案的版本校验和审计;若不回写,需说明后续任务可能再次触发 AI。
至少增加以下验收:
创建/批量创建响应需明确返回:
列表和详情至少覆盖 matching、retry_wait、manual_required、matched、输入失效、加载失败和无权限。既然增加现有页面状态展示与人工动作,先提供标注截图并取得用户确认,再进入生产实现。
本单方向可保留,但在上述设计补齐前应保持“待设计”,不应按现文直接实施。
QuantUX App ID:6a924dab191a826306a7f48f 原型名称:GoAuto #148 采购规格异步匹配 v1 状态:草稿,待用户确认。
6a924dab191a826306a7f48f
GoAuto #148 采购规格异步匹配 v1
覆盖范围:
验证:QuantUX verify PASS;3 screens、39 widgets、2 flows,无 runtime error。
PASS
建议采用 #131 严格自动确认口径:exact_match 不要求置信度;ai_match 必须达到当前最小置信度、严格属于当前候选、角色唯一、reason 非空且脱敏限长。AI 结果只写采购任务快照,不自动写回 Shopee 长期映射。
exact_match
ai_match
确认该原型与上述口径后,仍需按仓库高风险门禁再次明确授权数据库迁移、并发与权限变更,才能开始生产实现。
用户于 2026-08-29 明确确认 QuantUX 原型 v1 通过审核。
剩余实施门禁:确认 AI 自动确认业务口径,并明确授权数据库迁移、并发控制和 Admin 权限/API 变更。
用户于 2026-08-29 明确确认:
原型、业务规则和高风险门禁均已满足,可以开始生产实施。
提交:11c407d feat(#148): match purchase specs asynchronously,已推送 main。
11c407d feat(#148): match purchase specs asynchronously
main
go test -count=1 ./app/goauto/purchase/... ./app/goauto/aimatching/... ./app/goauto/replacement/... ./app/goauto/...
npm run build:prod
git diff --check
线上并回读:Business-Rules-and-Glossary、Architecture-and-Code-Map、Android-Agent-API-Contract。本地三份镜像已更新并提交。harness.py sync / sync --check 在远端 Wiki 读取阶段长时间不退出,已停止;python dev_scripts/harness.py check --strict 通过。
harness.py sync
sync --check
python dev_scripts/harness.py check --strict
#148 实施后的 Admin API 启动回归已由关联缺陷 #149 修复:遗漏的 purchase_spec_match_work_item 增量迁移已补齐,提交 afa29f1。本机旧数据库完成一次新增迁移、再次执行安全跳过,Supervisor 已稳定 Running,HTTP 验证通过。#148 的业务逻辑和 UI 未改动。
afa29f1
用户于 2026-08-29 明确确认本工单通过验收。验收结论已记录,现关闭工单。没有新的长期事实变化,本次不重复同步 Wiki。
No dependencies set.
The note is not visible to the blocked user.
来源、前置与门禁
目标
固定架构决定
采购独立工作项
purchase_spec_match_work_item,不建立通用 subject 表,也不复用 replacement item。spec_probe_pending。采购任务保持pending,工作项表达 matching。工作项模型
字段至少包含:purchase_task_id 唯一键、status(
pending/running/retry_wait/matched/manual_required/cancelled)、attempt_count、next_attempt_at、lease_owner、lease_expires_at、last_error_code、last_error_at、限长脱敏 reason、input_fingerprint、input_snapshot_json、created/updated/completed_at。创建与 API 契约
SpecSource=unresolved、状态pending创建任务,并在同一事务插入工作项。matching:status、executable、reasonCode、reason、nextAction、nextAttemptAt。executable=false。matched 或不存在工作项且规格已解析时为 true。manual_required 为 false。自动确认口径
超时与重试
min(configured_timeout, 60s);60 秒是异步路径正式上限,设置页和 Wiki 明确。手动测试连接仍使用原配置。并发与锁顺序
固定顺序:
purchase_task -> purchase_spec_match_work_item -> syb_product -> shopee_product -> pdd_product。INPUT_CHANGED;不静默刷新旧快照。管理员可基于当前输入重新入队生成新指纹。人工闭环与权限
access/purchaser.go显式登记管理员/采购员查看和写权限。UI 设计范围
采购任务列表和详情复用现有 Element Plus 风格,不新增页面:
非目标
验收
验证
go test ./app/goauto/purchase/... ./app/goauto/aimatching/... ./app/goauto/replacement/... ./app/goauto/...文档
Business-Rules-and-Glossary、Architecture-and-Code-Map;认领契约变化时更新Android-Agent-API-Contract。先改线上并回读 revision,再执行一次 sync 和 sync --check。状态
待 #147 完成、标注截图确认、自动确认口径确认及数据库迁移授权。
全栈审核意见:异步方向合理,但持久化、状态和人工闭环尚未成立
结论
只把外部 AI 调用异步化、本地确定性匹配继续同步,这个边界合理;不在数据库事务内等待 provider 也正确。但 #131 的 worker 是“商品替换”领域专用实现,不是可直接复用的通用采购匹配队列。当前正文缺少数据模型、可靠重试、人工处理和状态竞态设计,不能直接实施。
一、明确“复用机制”而不是复用替换业务表
#131 worker 当前直接依赖:
pdd_product_replacement_item;采购任务不能直接复用该工作项模型。建议调整为以下一种明确方案:
subject_type + subject_id区分 replacement item 与 purchase task,并由领域适配器完成输入和写回。无论选择哪种,都不能让采购任务伪装成 replacement item。正文中的“不新造第二套调度”应解释为“不复制第二套 runner/租约框架”,而不是“不允许采购拥有独立工作项”。
二、补齐数据库迁移与高风险授权门禁
持久化工作项至少需要:
这必然涉及追加数据库迁移、状态/并发和权限边界。请在正文明确:设计确认后,实施迁移前仍需用户再次授权。当前“待实施”应改为“待设计证据确认及数据库迁移授权”。
三、“服务恢复后自动补齐”不能直接继承 #131
#131 当前对可重试错误会在一次
RunPending中立即继续尝试;达到次数后转manual_required。它没有延迟退避,也没有在 provider 恢复后自动把人工状态重新入队。若本单验收要求“外部服务恢复后自动补齐”,必须新增并明确:
next_attempt_at;同时定义哪些错误可重试:网络、超时、5xx 可重试;未配置、候选歧义、结果越界、置信度不达标通常直接转人工。
四、不要无说明地复用
spec_probe_pendingspec_probe_pending当前属于 Agent 规格探测/决策流程,并非“创建后等待 AI”。复用它会扩大状态语义,与正文“既有语义未改变”冲突。当前
Next会跳过映射均为空的spec_probe_pending,但直接Claim仍接受该状态;仅依赖Next不能构成安全边界。请二选一并明确:
Next、Claim、Start三个入口统一拒绝仍有活动匹配工作项的任务。如果坚持复用
spec_probe_pending,必须更新长期语义,并在Next/Claim/Start全部增加原子保护和并发测试,不能再宣称状态语义未改变。五、现有人工规格接口无法直接承接创建阶段任务
现有
POST /:taskId/spec-decision强制要求:taskAttemptId;spec_probe_completed。创建阶段的异步 AI 工作项没有 Agent attempt,因此“有限重试后转人工”目前没有可用写回路径。
请补齐:
只有状态文案,没有可执行的人工入口,不构成闭环。
六、明确 AI 自动确认口径是否发生变化
当前普通采购
Create()对Resolve()返回的合法候选会直接写入任务;正文提出复用 #131 的置信度、reason 和自动确认门槛,这实际上可能改变普通采购的既有裁决行为。请明确并由用户确认:
若选择后者,应作为业务规则变化更新验收和 Wiki,不能同时写“判定逻辑不变”。
另需决定匹配成功是否只固化到任务快照,还是同时回写虾皮商品的持久规格映射。若回写,必须增加共享档案的版本校验和审计;若不回写,需说明后续任务可能再次触发 AI。
七、补齐并发、取消和队列公平性
至少增加以下验收:
Next、Claim、Start与匹配成功写回采用固定锁顺序;八、接口与 UI 设计证据
创建/批量创建响应需明确返回:
列表和详情至少覆盖 matching、retry_wait、manual_required、matched、输入失效、加载失败和无权限。既然增加现有页面状态展示与人工动作,先提供标注截图并取得用户确认,再进入生产实现。
推荐实施顺序
门禁结论
本单方向可保留,但在上述设计补齐前应保持“待设计”,不应按现文直接实施。
ila referenced this issue2026-08-29 10:55:11 +08:00
建任务时规格匹配异步化(复用 #131 持久 worker,不新造调度)to 建任务时规格匹配异步化:独立工作项、退避恢复与人工闭环标注交互原型 v1 待确认
QuantUX App ID:
6a924dab191a826306a7f48f原型名称:
GoAuto #148 采购规格异步匹配 v1状态:草稿,待用户确认。
覆盖范围:
manual_required、目标规格、失败原因、候选和最后尝试;验证:QuantUX verify
PASS;3 screens、39 widgets、2 flows,无 runtime error。需要用户同时确认的业务决定
建议采用 #131 严格自动确认口径:
exact_match不要求置信度;ai_match必须达到当前最小置信度、严格属于当前候选、角色唯一、reason 非空且脱敏限长。AI 结果只写采购任务快照,不自动写回 Shopee 长期映射。确认该原型与上述口径后,仍需按仓库高风险门禁再次明确授权数据库迁移、并发与权限变更,才能开始生产实现。
原型审核通过
用户于 2026-08-29 明确确认 QuantUX 原型 v1 通过审核。
6a924dab191a826306a7f48fGoAuto #148 采购规格异步匹配 v1剩余实施门禁:确认 AI 自动确认业务口径,并明确授权数据库迁移、并发控制和 Admin 权限/API 变更。
业务口径确认与高风险实施授权
用户于 2026-08-29 明确确认:
exact_match直接确认;ai_match必须达到配置阈值、严格属于当前候选、角色唯一且 reason 合规;结果只写采购任务快照,不写回 Shopee 长期映射。原型、业务规则和高风险门禁均已满足,可以开始生产实施。
实施完成,待验收
提交:
11c407d feat(#148): match purchase specs asynchronously,已推送main。实现
purchase_spec_match_work_item,任务与工作项同事务创建,需要外部 AI 时创建接口立即返回。验证
go test -count=1 ./app/goauto/purchase/... ./app/goauto/aimatching/... ./app/goauto/replacement/... ./app/goauto/...:通过。npm run build:prod:通过;只有既有 LightningCSS/chunk size 警告。git diff --check:通过。Wiki
线上并回读:
Business-Rules-and-Glossary、Architecture-and-Code-Map、Android-Agent-API-Contract。本地三份镜像已更新并提交。harness.py sync/sync --check在远端 Wiki 读取阶段长时间不退出,已停止;python dev_scripts/harness.py check --strict通过。未执行
#148 实施后的 Admin API 启动回归已由关联缺陷 #149 修复:遗漏的
purchase_spec_match_work_item增量迁移已补齐,提交afa29f1。本机旧数据库完成一次新增迁移、再次执行安全跳过,Supervisor 已稳定 Running,HTTP 验证通过。#148 的业务逻辑和 UI 未改动。用户于 2026-08-29 明确确认本工单通过验收。验收结论已记录,现关闭工单。没有新的长期事实变化,本次不重复同步 Wiki。