feat(syb): 未关联商品一键关联最近采集 PDD 并匹配保存规格(已上线,待验收) #253

Open
opened 2026-09-09 17:40:10 +08:00 by ila · 4 comments
Owner

当前部署状态(2026-09-10):#253及依赖#254已合并main(ca997f6)并发布线上,GoAuto已重启,外网页面/API/产物哈希通过。以下“未合并/未部署”是先前交付记录;以最新发布评论为准。仍待业务验收。

当前交付状态:实现完成,待用户验收(2026-09-10)

本节为当前状态,下方待审核/阻塞文字保留为历史。用户已确认 v2 原型并授权本单关联写入、并发保护实施;原型 App 6aa12b86191a826306a7fbb0、lastUUID 35949,确认人:用户,确认日期:2026-09-10,覆盖正文 v2 范围。未授权或执行实际采购/订单、迁移、发布和重启。

已实现

  • 只在原“去关联”旁增加“一键关联+小下拉箭头”,不新增顶部设备选择/商品预览。UI/UX规范用于主动作与切换分离、禁用防连击、就地加载/错误及人工恢复提示,沿用已确认 v2 和现有样式。
  • 首次主动作选手机后继续原行;记忆当前用户/浏览器/API环境的共用设备ID;与批量采购偏好隔离。箭头选择只保存偏好;取消不修改。离线手机可用历史成功采集,停用/不存在需重新选择。
  • 在服务端关联短事务中选定该设备最新 completed/completed_partial、source=agent_current_page 记录,按 finished_at DESC/id DESC 排序;最新部分成功、无有效规格、PDD不可用明确拒绝,不回退更旧商品。响应返回冻结 taskId/deviceId/PDD 和新规格版本。
  • 校验 SYB→蝦皮关联、未关联与原规格版本;锁定相关行并使用仅未关联更新条件。已有或他人更新的关联不覆盖。原人工选择/更换接口不变,无新表/迁移/路由/权限对账;Client API 明确拒绝此跨模块模式,不扩大密钥授权。
  • 关联后使用原采购准备判断是否能自动匹配;需要人工解析/缺SKU等保留关联并停止自动链路。可匹配时复用原 AutoMatchMappings 自动保存和 #254 的动态超时,不修改AI阈值、精确规格及可采购规则。AI失败保留关联,普通部分结果保留有效匹配;最后回读真实处理阶段。
  • 一次运行冻结行/手机/商品,防重复点击;选择其他手机不影响在途操作。关闭或缓存停用页面使旧回调失效,不再自动继续下一步。已发给服务端的请求不宣称取消或回滚;失败只有限回读,不自动重发POST。

验证

  • Server go test -p 1 ./... 全量通过;go build ./... 通过。新增候选排序/部分成功不回退、设备、规格、来源、失效上下文、人工解析边界、旧关联替换回归、客户端拒绝和并发调用单次写入测试。
  • 最初 go test ./... 在并行链接测试程序时因 Windows VirtualAlloc errno=1455 耗尽内存失败;降到 -p 1 后全量通过,未修改机器设置或为此改产品代码。
  • Node 实际方法/偏好测试21项通过(#253 11项+#254 10项);浏览器合成数据7场景通过(本单4+原匹配生命周期3),最终代码再跑本单4项通过;核对实际分体按钮和AI失败后人工入口截图。
  • 受影响文件 ESLint 通过,Web build:prod 通过;全站 lint 存量24个错误均位于未修改的 web/src/views/goauto/purchase-tasks/index.vue(对HEAD无差异),不混入本单修复。既有CSS伪类/大包警告保留;测试复用依赖junction时Vite拒绝既有Remix字体资源,未扩大文件访问配置;新按钮使用现有SVG图标且交互通过。
  • DevHarness check --strict、一次 Wiki sync 和一次 sync --check 均通过;未导出原型HTML或工单快照。

提交与文档

  • 分支 feat/253-one-click-link,基线 08d939a,包含 #254 9088e6b;实现 b1594dc,文档 ca997f61087875802f8b57e074ced0af79c4b0ac,已推送。main仍为 fdd26af;不混入 #251 未合并解析改动。
  • Wiki 已先在线更新并回读:Architecture-and-Code-Map 46a5f8234be2d55298779532058a0490a94d3167;Business-Rules-and-Glossary 6513b68930ee8a29327e91bcb51efd4f47e26990;Android-Agent-API-Contract 23160c055e8f6185a4108e284afc8216b41373e5。Gitea MCP未暴露,沿用安全配置API回退;标题明确沿用原页面名,未重命名。
  • 同步带回无关的 Troubleshooting 镜像更新,未纳入本单提交;其他工单、root配置及未提交文件未改。

待验收/运行边界

尚未合并 main、重启本地、发布线上或改 Android。启用需连同 #254 配套更新 Server/Web,Android无需升级。
真实SYB/PDD数据、真实DeepSeek、生产MySQL多连接行锁及跨设备业务闭环未验证;SQLite单连接并发测试只证明并发调用下单写入结果,不能代替生产行锁验收。未创建采集/采购任务、订单或支付。状态保持待验收,不关闭工单。


来源与原始需求(2026-09-09)

用户当前流程:Admin SYB 商品行查看参考图 → 手机 PDD 拍照搜商品 → 人工选择商品进入详情 → Agent 临时采集 → Admin 点击蝦皮商品 ID 打开详情抽屉 → 关联或更换 PDD → 一键匹配颜色尺码 → 保存修改 → 回 SYB 商品列表。
用户希望在未关联 PDD 的 SYB 商品行、处理阶段“去关联”右侧增加“一键关联”,将最近采集商品关联后自动匹配并保存,满足条件后进入可以采购。目标是合并人工选品采集之后的重复点击,不自动选品/采集/创建采购或付款。
用户本轮仅授权“把需求和建议方案建工单”,未授权实施;以下尚有待核验/确认项,不以讨论方案冒充已批准原型。

当前代码事实与前置依赖

参考核验基线 main fdd26af(2026-09-09),本单尚未专项核验所有接口。既有手动关联/更换、蝦皮规格匹配保存、SYB 处理阶段是复用对象,不另建公共业务规则。
关联 #251:存疑规格候选核对已在 64b4205 实现并推送,但尚未合并发布;其部署不是新按钮原型的阻塞,正式集成需核对目标环境版本。关联 #198:SYB 原文→蝦皮目标规格 AI 解析;它与蝦皮→PDD 规格映射是两个阶段,不得混为一项。
待核验:Agent 临时采集是否可靠记录采购员归属、当前用户到设备的对应关系、成功采集筛选条件、关联/保存事务边界及现有可采购判定。不得预设这些能力已存在。

建议方案(草案)

1. 入口与目标选择

  • 未关联 PDD 的 SYB 商品行,在“去关联”右侧新增“一键关联”;保留原入口和现有抽屉/手动流程。
  • 不能使用全系统最新采集商品。优先当前采购员最近一次成功采集的 PDD 商品;若现有数据不能可靠确定采购员归属,则使用明确选定设备的最近一次成功采集。作用域选择和默认设备规则待代码核验与用户确认,不得静默跨用户/设备取最新。
  • 在点击前就能看见候选 PDD 商品 ID/缩略图(具体采用行内展示或现有提示样式由原型确认),不默认新增确认弹窗。用户点击后固定本次目标,后续出现更新采集不能在执行中换目标。
  • 无符合条件记录、候选商品不可用、设备未确定时明确说明,保留手动“去关联”。完整成功与部分成功采集的可用范围待核验;首版不默默采用数据不完整的结果。

2. 一键执行

固定 SYB/蝦皮商品与候选 PDD → 关联 → 使用既有颜色尺码匹配逻辑 → 按现有保存规则保存 → 重新计算并刷新该行处理阶段。

  • 仅用户点击触发,不后台自动关联、不自动创建采购任务。
  • 全部必需规格已确认映射且满足现有其他采购条件,才显示“可以采购”;不能在新接口中直接硬设为可采购。
  • 忙碌显示“关联匹配中”并禁止重复点击;原流程及公共 API 默认行为保持不变。网络返回不明确时回读已保存状态,不盲目重复关联。
  • 保存前再次核对仍未关联且本次目标未被他人改变,不覆盖他人新关联;并发/事务的具体实现需方案确认及仓库高风险授权,不在本次建单中提前授权。

3. 规格异常及部分成功

  • SYB 规格确需人工确认/无可信目标时,可以先关联 PDD,停止后续不可靠的规格匹配,提示“请确认采购规格”。不能仅凭原 parse_status=uncertain 一律阻断:现有代码部分路径允许有规格值的存疑记录继续,必须复用统一业务判断并核对 #251/#198 确认结果。
  • AI 无结果或只匹配部分必需规格:保留关联和已合法保存的映射,未匹配项留空,按现有阶段显示待规格匹配/人工处理,不标可采购。
  • AI 超时/服务异常:保留已完成步骤,提示失败原因并支持重试未完成匹配,不重新关联、不清空成功结果。
  • 人工确认的映射不自动覆盖;如已有保存接口不支持安全部分保存,先记录差距、确认方案,不把草案当作既有实现。
  • 在当前行提供“确认规格”“补全匹配”或“重试匹配”等适当入口,直接打开现有详情的相关位置;具体入口优先复用,避免新增复杂状态机。

影响范围与非目标

  • 预计 Web:SYB 商品列表处理阶段入口及反馈,复用蝦皮详情/选择与匹配能力。
  • Server:候选定位、必要的流程编排/结果回读,复用关联、规格匹配、保存和阶段计算;是否需要新增 API、字段或迁移待核验,不能提前承诺不需要。
  • Android:首选不改。若当前临时采集无可靠归属,只提出设备限定替代方案;新增身份追踪需单独确认范围。
  • 原手动关联、更换、AI 匹配、保存和采购正常流程必须保留。不做全局自动匹配路由,不修改采购执行/可采购规则,不自动拍照/采集/下单/付款。

设计证据与状态

新“一键关联”独立交互需先制作 QuantUX 或等效可访问原型,用户审核后才能实施。当前没有原型链接/App ID/revision,状态为需求方案草案,不是原型已通过。
原型至少覆盖:正常候选预览、无候选、设备待选、运行中、全部成功、规格待确认、AI 部分无结果、AI 超时、保存失败/结果未知、目标被他人更改、无权限;展示重试与继续人工处理路径。
原型制作可在 #251 集成前开展;实现前核对依赖与关联接口,涉及共用文件时串行。只允许沿用当前操作者已有权限,不新增越权入口。

验收与验证计划

  • 代码核验后确认候选归属/设备策略,不能串用其他采购员或设备的最新记录。
  • 原型可访问且版本明确,用户明确确认。
  • 点击后目标固定,忙碌防重复;保存时不覆盖其他操作的关联。
  • 关联、匹配、保存完成后按现有规则准确计算可采购状态。
  • 待人工确认、部分无结果、超时、保存失败均保留可确认的进度,并可从未完成处继续。
  • 已有人工映射及其他规格不被清空/覆盖。
  • 原手动关联、更换、匹配、保存与采购预检回归通过;不执行真实下单/付款验证。
  • 权限/接口/事务测试、前端交互测试、失败与结果未知回读验证,使用合成数据。

风险、授权与文档影响

最大风险是“最近采集”选错商品,其次是共享蝦皮档案影响同商品多条 SYB 明细、部分保存、并发覆盖及网络结果不明确;需在设计中说明共享影响,不能把单行操作误当作私有数据。
本轮仅建单。实施/迁移/权限/并发/重启/部署/历史数据更新需遵守仓库相应确认要求;不保存凭据/原始控件树/个人数据。
预计长期文档:Business-Rules-and-Glossary、Architecture-and-Code-Map;新增/修改 API 时再明确对应权威契约页面。当前未实施,不更新 Wiki,不导出任务/原型快照。
Gitea MCP 不可用,安全配置 Gitea API 建单,凭据不输出。状态:待代码核验与原型确认。

2026-09-09 专项代码核验 + v1 原型待审核

用户追加要求“先核验代码,再出原型审核”;本轮仅核验、测试、设计,没有生产代码实施、真实业务写入或部署。下列核验与收敛方案补充并优先于上方未核验草案。

代码事实(main fdd26af,main-runtime 工作区)

  • server/app/goauto/models/schema.go:176 CollectionTask 有 DeviceID、Source、PDDProductID、FinishedAt,没有采购员字段;task/current_page.go:122 按设备创建临时采集。因此不能可靠取“当前采购员最新采集”。
  • web/src/views/goauto/shopee-products/ShopeeProductDetailDrawer.vue autoMatchMappings 调用 autoMatchShopeeSpecMappings 后刷新;已经自动保存,不需要再模拟保存修改。saveAllMappings 用于人工草稿变更。
  • shopeeproduct/auto_match.go:50 正常返回时事务保存合格颜色/尺码为 confirmed;ai_suggest.go:128 保留仍属于当前候选的有效已确认映射。沿用详情接口现有 AI 置信度配置,不改成 SYB 批量匹配的另一套标准。
  • 正常部分无结果可保存有效部分;任何维度的 Provider 调用报错会在事务前返回,本轮新结果不落库,不是“先保存颜色,再执行尺码”。关联与历史映射仍保留。匹配写入前已有版本/关联/候选重检。
  • shopeeproduct/service.go:273 LinkPDD 直接更新关联,既不要求未关联,也不能防止重放覆盖后续关联。新按钮不能只靠前端先查询再原样调用;需要最小的“仅未关联时写入”保护,原手动更换行为不动。
  • purchase/process_stage.go:139 与预检共同判定可采购:failed 且未人工/AI 确认需处理,uncertain 不是一律阻断。以当前 SYB 明细的必需规格和其他条件判断,不要求无关颜色都匹配,不直接硬设状态。
  • 关联和映射属于共享蝦皮商品,可能影响相同蝦皮商品的其他 SYB 明细;原型已提示。

v1 方案收敛(待用户确认,不是现有已实现能力)

  1. 列表增加“采集设备 + 最近采集预览”;按当前用户/浏览器/API 环境记住本入口设备选择,与批量采购设备偏好分开。首次不猜设备;设备仅限定候选来源,不发手机任务,不要求此时在线。
  2. 查询指定设备 agent_current_page 已完成记录,按 finished_at DESC、id DESC 排序,不使用商品 updated_at 或任务 ID 判断最近。最新成功终态为 completed_partial 时显示原因并禁用一键,不静默退回旧商品。完整 completed 且商品 active、规格可用时开放;无记录、停用、数据不完整保留人工去关联。预览由采购员核对是否选对商品。
  3. 点击固定 taskId/deviceId/pddProductId 及版本;服务端重检候选、SYB→蝦皮关系,仅仍未关联时写入。关联成功获取新 specContextVersion,复用详情 AutoMatchMappings 匹配保存,再刷新相关 SYB 预检。新保护不改变原手动更换默认行为。
  4. 无可信采购目标可先关联,再进入现有规格确认;不因为 uncertain 一律阻断。AI 部分无结果、异常或保存失败均保留已完成关联及已确认的有效历史映射;按真实已保存结果继续匹配或人工处理,不承诺保存中途未提交结果。
  5. 响应未知先回读关联/映射/预检,确认未完成后重试匹配,不盲目重新关联;last_update_request_id 不能当永久完整流程日志。相关保护正式实施前需确认并发/API方案。
  6. 不自动采购,不改原手动流程/采购执行/AI门槛。只沿用现有权限;服务端权限应覆盖底层关联与匹配动作,UI 隐藏不代替鉴权。预计不需 Android 改动或数据库字段;实施前仍核对实际 API、权限及高风险授权。

v1 在线设计证据

验证与边界

  • go test ./app/goauto/shopeeproduct -run 'TestAutoMatchMappings' -count=1 PASS(自动确认、低置信度留空、Provider失败不写、上下文漂移拒绝)。未连接真实 Provider,不是线上端到端验证。
  • 在线回读 16 屏、1078 控件、315 连线,悬空连线 0。桌面浏览器初始画面检查,一键关联→忙碌、10个成功/异常状态及手动去关联入口点击均通过。
  • 未验证手机响应式/完整键盘无障碍/真实新接口编排;原型审核不能代替生产功能验收。
  • 本轮没有长期实现事实变化,跳过 Wiki 更新同步;不导出 HTML/任务归档,不提交生产代码。
  • Gitea MCP 未暴露,沿用安全配置 API。QuantUX MCP 返回401,改用已有授权浏览器会话访问同域API,只写本单新建原型。

当前状态:代码核验完成,#253 v1 原型待用户审核;确认前不编写生产代码。

2026-09-10 v2 交互调整(当前方案,优先于 v1)

用户确认:每行“一键关联”右侧都有小下拉箭头;任意一行切换手机后,其他行后续一键关联也使用新手机。用户要求“按照最后这个方案来更新工单,然后更新原型”。本轮只更新工单及原型,不实施生产代码,不视为 v2 原型已验收。

  • 删除 v1 列表上方“采集设备选择+最近采集商品预览”,不加行内商品预览或额外商品确认弹窗。保留原“去关联”。未关联行新增分体按钮“一键关联 | 下拉箭头”。
  • 主按钮:已有有效设备偏好时,取这台手机最近成功终态的临时采集,校验后固定本次 taskId/deviceId/pddProductId,直接关联、匹配并保存。候选筛选规则沿用 v1,不能取全系统最新;最新 completed_partial/商品不可用时提示,不偷偷回退较早商品。
  • 首次未选手机:主按钮打开选择手机弹窗;“记住并继续关联”保存选择并继续原来点击行的一次关联。取消不记忆、不关联。无设备/加载失败显示原因并保留取消和重试。
  • 每行箭头:只打开菜单,显示“当前手机:A/尚未选择”和“切换手机”;菜单不执行关联。切换弹窗“保存选择”只更新共用偏好,回到原列表,不自动关联。取消保持原手机。
  • 偏好是本入口下当前用户、当前浏览器与 API 环境共用的一个 deviceId,不是逐行配置,不串用批量采购偏好。页面刷新后恢复;存储失败允许当前页面手动使用并说明下次需重选。设备被删除/停用/无权访问时要求重选,不静默换机;仅离线不阻断读取既有成功采集。
  • 切换只影响后续发起的操作。已固定/执行中的关联继续用原设备与候选,不被其他行切换覆盖;已关联商品完全不变。执行行主按钮与箭头禁用,其他未执行行的选择不改写在途上下文。旧异步返回不覆盖新偏好或新操作。
  • 成功/部分无结果/人工规格确认/AI异常/保存失败/结果未知/无权限/他人变更保护沿用 v1。关联的是共享蝦皮档案,原手动流程保持;不自动采购、不新增权限。
  • 匹配等待及有限回读复用 #254 的动态预算与错误处理;#254 已推送但未合并发布,实现集成前核对实际基线,不承诺线上已生效。

v2 原型验收补充

  • 每个未关联示例行均有主按钮与独立箭头,顶部无设备/候选栏。
  • 首次选手机继续原行;取消不写;有偏好主按钮直接执行。
  • A切换B只保存选择;另一行菜单同样显示B;后续点击取B候选。
  • 设备加载/无设备/失效/无候选/部分采集可恢复;不盲目替代设备或候选。
  • 已关联行与进行中操作不被切换改变,保留原人工入口与异常分支。

状态:v2 原型更新中,待线上版本验证后补链接;v1 不再作为当前交互实施依据。原型阶段无长期实现事实变化,跳过 Wiki 更新同步,不导出本地原型/任务归档。Gitea MCP未暴露,使用安全配置 API;QuantUX MCP鉴权401,检查可用编辑方式,不修改其鉴权配置。

#253 v2 在线原型待审核(2026-09-10)

当前审核以 v2 为准,上方 v1 与接口阻塞记录保留为历史。

本次交付

删除列表顶部设备选择及最近商品预览;两条未关联示例行均为“去关联”+“一键关联 | 下拉箭头”。主按钮首次选机“记住并继续关联”,有记忆直接执行。箭头显示当前手机及切换入口;包括尚未选过手机的箭头入口在内,“保存选择”都只记忆,不关联。所有行共享同一入口的设备偏好,取消不修改。
覆盖首次使用、A/B偏好、两行菜单/选择、运行/成功、部分未匹配、人工规格确认、AI失败、保存失败、结果未知、他人变更、无采集、部分采集、设备失效、只读、设备加载/失败/空态,以及既有人工处理示意。

验证与限制

  • 在线写入后完整回读模型一致;49屏、3767控件、1178连线,端点/子节点引用完整。
  • 自动核对两行首次选机继续目标行、从菜单选机仅保存、切换A/B共用后续选择、顶部旧控件移除,全部通过。
  • 桌面浏览器实际检查 v2 欢迎页、列表布局、主按钮首次弹窗及继续原行运行、切换菜单和保存后另一行显示新手机。截图视觉检查列表和切换弹窗。
  • 原型是合成数据状态屏与分支演示,不连接真实AI/商品、不保存真实设备偏好;演示区切换场景会重置样例,不能当作真实数据持久化、多请求并发、刷新恢复或端到端业务验收。已关联不变/在途目标冻结仍是实施必须满足的契约,不能以状态屏模拟替代测试。移动端、完整键盘无障碍、真实权限/接口均未验证。
  • UI/UX规范用于拆分主动作和切换动作、取消恢复、运行禁用和明确错误;保持既有页面风格。没有产品代码、迁移、发布、重启或真实订单操作。
  • 已恢复使用 C:/Users/ila20/.codex/quantux.env 的有效MCP配置;两份配置URL相同、Key不同,旧路径请求401而当前initialize/tools-list200。没有输出、修改或复制密钥,也未修改服务端配置。
  • 无长期实现事实变化,跳过Wiki更新及镜像同步,不导出原型HTML或任务归档,不提交生产源码。Gitea MCP未暴露,继续使用项目安全配置API。

确认人/确认时间:待用户审核;状态:v2 原型待确认。用户没有确认 v2 前,不实施生产代码。

> 当前部署状态(2026-09-10):#253及依赖#254已合并main(ca997f6)并发布线上,GoAuto已重启,外网页面/API/产物哈希通过。以下“未合并/未部署”是先前交付记录;以最新发布评论为准。仍待业务验收。 ## 当前交付状态:实现完成,待用户验收(2026-09-10) 本节为当前状态,下方待审核/阻塞文字保留为历史。用户已确认 v2 原型并授权本单关联写入、并发保护实施;原型 App `6aa12b86191a826306a7fbb0`、lastUUID `35949`,确认人:用户,确认日期:2026-09-10,覆盖正文 v2 范围。未授权或执行实际采购/订单、迁移、发布和重启。 ### 已实现 - 只在原“去关联”旁增加“一键关联+小下拉箭头”,不新增顶部设备选择/商品预览。UI/UX规范用于主动作与切换分离、禁用防连击、就地加载/错误及人工恢复提示,沿用已确认 v2 和现有样式。 - 首次主动作选手机后继续原行;记忆当前用户/浏览器/API环境的共用设备ID;与批量采购偏好隔离。箭头选择只保存偏好;取消不修改。离线手机可用历史成功采集,停用/不存在需重新选择。 - 在服务端关联短事务中选定该设备最新 completed/completed_partial、source=agent_current_page 记录,按 finished_at DESC/id DESC 排序;最新部分成功、无有效规格、PDD不可用明确拒绝,不回退更旧商品。响应返回冻结 taskId/deviceId/PDD 和新规格版本。 - 校验 SYB→蝦皮关联、未关联与原规格版本;锁定相关行并使用仅未关联更新条件。已有或他人更新的关联不覆盖。原人工选择/更换接口不变,无新表/迁移/路由/权限对账;Client API 明确拒绝此跨模块模式,不扩大密钥授权。 - 关联后使用原采购准备判断是否能自动匹配;需要人工解析/缺SKU等保留关联并停止自动链路。可匹配时复用原 AutoMatchMappings 自动保存和 #254 的动态超时,不修改AI阈值、精确规格及可采购规则。AI失败保留关联,普通部分结果保留有效匹配;最后回读真实处理阶段。 - 一次运行冻结行/手机/商品,防重复点击;选择其他手机不影响在途操作。关闭或缓存停用页面使旧回调失效,不再自动继续下一步。已发给服务端的请求不宣称取消或回滚;失败只有限回读,不自动重发POST。 ### 验证 - Server `go test -p 1 ./...` 全量通过;`go build ./...` 通过。新增候选排序/部分成功不回退、设备、规格、来源、失效上下文、人工解析边界、旧关联替换回归、客户端拒绝和并发调用单次写入测试。 - 最初 `go test ./...` 在并行链接测试程序时因 Windows VirtualAlloc errno=1455 耗尽内存失败;降到 -p 1 后全量通过,未修改机器设置或为此改产品代码。 - Node 实际方法/偏好测试21项通过(#253 11项+#254 10项);浏览器合成数据7场景通过(本单4+原匹配生命周期3),最终代码再跑本单4项通过;核对实际分体按钮和AI失败后人工入口截图。 - 受影响文件 ESLint 通过,Web build:prod 通过;全站 lint 存量24个错误均位于未修改的 `web/src/views/goauto/purchase-tasks/index.vue`(对HEAD无差异),不混入本单修复。既有CSS伪类/大包警告保留;测试复用依赖junction时Vite拒绝既有Remix字体资源,未扩大文件访问配置;新按钮使用现有SVG图标且交互通过。 - DevHarness check --strict、一次 Wiki sync 和一次 sync --check 均通过;未导出原型HTML或工单快照。 ### 提交与文档 - 分支 `feat/253-one-click-link`,基线 `08d939a`,包含 #254 `9088e6b`;实现 `b1594dc`,文档 `ca997f61087875802f8b57e074ced0af79c4b0ac`,已推送。main仍为 `fdd26af`;不混入 #251 未合并解析改动。 - Wiki 已先在线更新并回读:Architecture-and-Code-Map `46a5f8234be2d55298779532058a0490a94d3167`;Business-Rules-and-Glossary `6513b68930ee8a29327e91bcb51efd4f47e26990`;Android-Agent-API-Contract `23160c055e8f6185a4108e284afc8216b41373e5`。Gitea MCP未暴露,沿用安全配置API回退;标题明确沿用原页面名,未重命名。 - 同步带回无关的 Troubleshooting 镜像更新,未纳入本单提交;其他工单、root配置及未提交文件未改。 ### 待验收/运行边界 尚未合并 main、重启本地、发布线上或改 Android。启用需连同 #254 配套更新 Server/Web,Android无需升级。 真实SYB/PDD数据、真实DeepSeek、生产MySQL多连接行锁及跨设备业务闭环未验证;SQLite单连接并发测试只证明并发调用下单写入结果,不能代替生产行锁验收。未创建采集/采购任务、订单或支付。状态保持待验收,不关闭工单。 --- ## 来源与原始需求(2026-09-09) 用户当前流程:Admin SYB 商品行查看参考图 → 手机 PDD 拍照搜商品 → 人工选择商品进入详情 → Agent 临时采集 → Admin 点击蝦皮商品 ID 打开详情抽屉 → 关联或更换 PDD → 一键匹配颜色尺码 → 保存修改 → 回 SYB 商品列表。 用户希望在未关联 PDD 的 SYB 商品行、处理阶段“去关联”右侧增加“一键关联”,将最近采集商品关联后自动匹配并保存,满足条件后进入可以采购。目标是合并人工选品采集之后的重复点击,不自动选品/采集/创建采购或付款。 用户本轮仅授权“把需求和建议方案建工单”,未授权实施;以下尚有待核验/确认项,不以讨论方案冒充已批准原型。 ## 当前代码事实与前置依赖 参考核验基线 main fdd26af(2026-09-09),本单尚未专项核验所有接口。既有手动关联/更换、蝦皮规格匹配保存、SYB 处理阶段是复用对象,不另建公共业务规则。 关联 #251:存疑规格候选核对已在 64b4205 实现并推送,但尚未合并发布;其部署不是新按钮原型的阻塞,正式集成需核对目标环境版本。关联 #198:SYB 原文→蝦皮目标规格 AI 解析;它与蝦皮→PDD 规格映射是两个阶段,不得混为一项。 待核验:Agent 临时采集是否可靠记录采购员归属、当前用户到设备的对应关系、成功采集筛选条件、关联/保存事务边界及现有可采购判定。不得预设这些能力已存在。 ## 建议方案(草案) ### 1. 入口与目标选择 - 未关联 PDD 的 SYB 商品行,在“去关联”右侧新增“一键关联”;保留原入口和现有抽屉/手动流程。 - 不能使用全系统最新采集商品。优先当前采购员最近一次成功采集的 PDD 商品;若现有数据不能可靠确定采购员归属,则使用明确选定设备的最近一次成功采集。作用域选择和默认设备规则待代码核验与用户确认,不得静默跨用户/设备取最新。 - 在点击前就能看见候选 PDD 商品 ID/缩略图(具体采用行内展示或现有提示样式由原型确认),不默认新增确认弹窗。用户点击后固定本次目标,后续出现更新采集不能在执行中换目标。 - 无符合条件记录、候选商品不可用、设备未确定时明确说明,保留手动“去关联”。完整成功与部分成功采集的可用范围待核验;首版不默默采用数据不完整的结果。 ### 2. 一键执行 固定 SYB/蝦皮商品与候选 PDD → 关联 → 使用既有颜色尺码匹配逻辑 → 按现有保存规则保存 → 重新计算并刷新该行处理阶段。 - 仅用户点击触发,不后台自动关联、不自动创建采购任务。 - 全部必需规格已确认映射且满足现有其他采购条件,才显示“可以采购”;不能在新接口中直接硬设为可采购。 - 忙碌显示“关联匹配中”并禁止重复点击;原流程及公共 API 默认行为保持不变。网络返回不明确时回读已保存状态,不盲目重复关联。 - 保存前再次核对仍未关联且本次目标未被他人改变,不覆盖他人新关联;并发/事务的具体实现需方案确认及仓库高风险授权,不在本次建单中提前授权。 ### 3. 规格异常及部分成功 - SYB 规格确需人工确认/无可信目标时,可以先关联 PDD,停止后续不可靠的规格匹配,提示“请确认采购规格”。不能仅凭原 parse_status=uncertain 一律阻断:现有代码部分路径允许有规格值的存疑记录继续,必须复用统一业务判断并核对 #251/#198 确认结果。 - AI 无结果或只匹配部分必需规格:保留关联和已合法保存的映射,未匹配项留空,按现有阶段显示待规格匹配/人工处理,不标可采购。 - AI 超时/服务异常:保留已完成步骤,提示失败原因并支持重试未完成匹配,不重新关联、不清空成功结果。 - 人工确认的映射不自动覆盖;如已有保存接口不支持安全部分保存,先记录差距、确认方案,不把草案当作既有实现。 - 在当前行提供“确认规格”“补全匹配”或“重试匹配”等适当入口,直接打开现有详情的相关位置;具体入口优先复用,避免新增复杂状态机。 ## 影响范围与非目标 - 预计 Web:SYB 商品列表处理阶段入口及反馈,复用蝦皮详情/选择与匹配能力。 - Server:候选定位、必要的流程编排/结果回读,复用关联、规格匹配、保存和阶段计算;是否需要新增 API、字段或迁移待核验,不能提前承诺不需要。 - Android:首选不改。若当前临时采集无可靠归属,只提出设备限定替代方案;新增身份追踪需单独确认范围。 - 原手动关联、更换、AI 匹配、保存和采购正常流程必须保留。不做全局自动匹配路由,不修改采购执行/可采购规则,不自动拍照/采集/下单/付款。 ## 设计证据与状态 新“一键关联”独立交互需先制作 QuantUX 或等效可访问原型,用户审核后才能实施。当前没有原型链接/App ID/revision,状态为需求方案草案,不是原型已通过。 原型至少覆盖:正常候选预览、无候选、设备待选、运行中、全部成功、规格待确认、AI 部分无结果、AI 超时、保存失败/结果未知、目标被他人更改、无权限;展示重试与继续人工处理路径。 原型制作可在 #251 集成前开展;实现前核对依赖与关联接口,涉及共用文件时串行。只允许沿用当前操作者已有权限,不新增越权入口。 ## 验收与验证计划 - [ ] 代码核验后确认候选归属/设备策略,不能串用其他采购员或设备的最新记录。 - [ ] 原型可访问且版本明确,用户明确确认。 - [ ] 点击后目标固定,忙碌防重复;保存时不覆盖其他操作的关联。 - [ ] 关联、匹配、保存完成后按现有规则准确计算可采购状态。 - [ ] 待人工确认、部分无结果、超时、保存失败均保留可确认的进度,并可从未完成处继续。 - [ ] 已有人工映射及其他规格不被清空/覆盖。 - [ ] 原手动关联、更换、匹配、保存与采购预检回归通过;不执行真实下单/付款验证。 - [ ] 权限/接口/事务测试、前端交互测试、失败与结果未知回读验证,使用合成数据。 ## 风险、授权与文档影响 最大风险是“最近采集”选错商品,其次是共享蝦皮档案影响同商品多条 SYB 明细、部分保存、并发覆盖及网络结果不明确;需在设计中说明共享影响,不能把单行操作误当作私有数据。 本轮仅建单。实施/迁移/权限/并发/重启/部署/历史数据更新需遵守仓库相应确认要求;不保存凭据/原始控件树/个人数据。 预计长期文档:Business-Rules-and-Glossary、Architecture-and-Code-Map;新增/修改 API 时再明确对应权威契约页面。当前未实施,不更新 Wiki,不导出任务/原型快照。 Gitea MCP 不可用,安全配置 Gitea API 建单,凭据不输出。状态:待代码核验与原型确认。 ## 2026-09-09 专项代码核验 + v1 原型待审核 用户追加要求“先核验代码,再出原型审核”;本轮仅核验、测试、设计,没有生产代码实施、真实业务写入或部署。下列核验与收敛方案补充并优先于上方未核验草案。 ### 代码事实(main fdd26af,main-runtime 工作区) - `server/app/goauto/models/schema.go:176` CollectionTask 有 DeviceID、Source、PDDProductID、FinishedAt,没有采购员字段;`task/current_page.go:122` 按设备创建临时采集。因此不能可靠取“当前采购员最新采集”。 - `web/src/views/goauto/shopee-products/ShopeeProductDetailDrawer.vue` autoMatchMappings 调用 autoMatchShopeeSpecMappings 后刷新;已经自动保存,不需要再模拟保存修改。saveAllMappings 用于人工草稿变更。 - `shopeeproduct/auto_match.go:50` 正常返回时事务保存合格颜色/尺码为 confirmed;`ai_suggest.go:128` 保留仍属于当前候选的有效已确认映射。沿用详情接口现有 AI 置信度配置,不改成 SYB 批量匹配的另一套标准。 - 正常部分无结果可保存有效部分;任何维度的 Provider 调用报错会在事务前返回,本轮新结果不落库,不是“先保存颜色,再执行尺码”。关联与历史映射仍保留。匹配写入前已有版本/关联/候选重检。 - `shopeeproduct/service.go:273` LinkPDD 直接更新关联,既不要求未关联,也不能防止重放覆盖后续关联。新按钮不能只靠前端先查询再原样调用;需要最小的“仅未关联时写入”保护,原手动更换行为不动。 - `purchase/process_stage.go:139` 与预检共同判定可采购:failed 且未人工/AI 确认需处理,uncertain 不是一律阻断。以当前 SYB 明细的必需规格和其他条件判断,不要求无关颜色都匹配,不直接硬设状态。 - 关联和映射属于共享蝦皮商品,可能影响相同蝦皮商品的其他 SYB 明细;原型已提示。 ### v1 方案收敛(待用户确认,不是现有已实现能力) 1. 列表增加“采集设备 + 最近采集预览”;按当前用户/浏览器/API 环境记住本入口设备选择,与批量采购设备偏好分开。首次不猜设备;设备仅限定候选来源,不发手机任务,不要求此时在线。 2. 查询指定设备 agent_current_page 已完成记录,按 finished_at DESC、id DESC 排序,不使用商品 updated_at 或任务 ID 判断最近。最新成功终态为 completed_partial 时显示原因并禁用一键,不静默退回旧商品。完整 completed 且商品 active、规格可用时开放;无记录、停用、数据不完整保留人工去关联。预览由采购员核对是否选对商品。 3. 点击固定 taskId/deviceId/pddProductId 及版本;服务端重检候选、SYB→蝦皮关系,仅仍未关联时写入。关联成功获取新 specContextVersion,复用详情 AutoMatchMappings 匹配保存,再刷新相关 SYB 预检。新保护不改变原手动更换默认行为。 4. 无可信采购目标可先关联,再进入现有规格确认;不因为 uncertain 一律阻断。AI 部分无结果、异常或保存失败均保留已完成关联及已确认的有效历史映射;按真实已保存结果继续匹配或人工处理,不承诺保存中途未提交结果。 5. 响应未知先回读关联/映射/预检,确认未完成后重试匹配,不盲目重新关联;last_update_request_id 不能当永久完整流程日志。相关保护正式实施前需确认并发/API方案。 6. 不自动采购,不改原手动流程/采购执行/AI门槛。只沿用现有权限;服务端权限应覆盖底层关联与匹配动作,UI 隐藏不代替鉴权。预计不需 Android 改动或数据库字段;实施前仍核对实际 API、权限及高风险授权。 ### v1 在线设计证据 - 演示:https://qux.ilapage.cn/#/test.html?h=a2aa10ax9Enpqz7iLQTuMhXy7Lcuy2YvTXsoj5gEK5VyXtjSPdRtyAae5zuC&ln=en - 查看/评论:https://qux.ilapage.cn/#/share.html?h=a2aa10ax9Enpqz7iLQTuMhXy7Lcuy2YvTXsoj5gEK5VyXtjSPdRtyAae5zuC - 编辑:https://qux.ilapage.cn/#/apps/6aa12b86191a826306a7fbb0/design.html - App ID:`6aa12b86191a826306a7fbb0`;名称 `GoAuto #253 v1 · SYB 一键关联`;lastUUID `26709`;制作日期 2026-09-09;确认人/时间:待用户审核。 - 模型核心 screens/widgets/lines/startScreen/lastUUID 按在线读取顺序 JSON.stringify SHA-256:`9d7f1b707fb477169c505eb4e896ce38d519fbdea3847876c3fb308abb08f8de`。这是原型版本识别,不是生产版本。 - 覆盖 16 个状态屏:预览、设备选择、无候选、部分采集、运行、成功、部分未匹配、人工规格确认、AI异常、保存失败、结果未知、他人改关联、无权限、手动关联与详情补全。全部合成数据、图片占位;旧页面/抽屉是轻量示意,未重新设计已有完整功能。 - 进入演示 Next→Start;底部“原型演示区”手动切换结果分支,正式产品不显示。原型不会调用真实 AI/关联/采购。 - 使用 UI/UX 技能的明确反馈、恢复入口、禁用状态与一致性规范,沿用现有列表/抽屉风格,不引入新设计框架。 ### 验证与边界 - `go test ./app/goauto/shopeeproduct -run 'TestAutoMatchMappings' -count=1` PASS(自动确认、低置信度留空、Provider失败不写、上下文漂移拒绝)。未连接真实 Provider,不是线上端到端验证。 - 在线回读 16 屏、1078 控件、315 连线,悬空连线 0。桌面浏览器初始画面检查,一键关联→忙碌、10个成功/异常状态及手动去关联入口点击均通过。 - 未验证手机响应式/完整键盘无障碍/真实新接口编排;原型审核不能代替生产功能验收。 - 本轮没有长期实现事实变化,跳过 Wiki 更新同步;不导出 HTML/任务归档,不提交生产代码。 - Gitea MCP 未暴露,沿用安全配置 API。QuantUX MCP 返回401,改用已有授权浏览器会话访问同域API,只写本单新建原型。 当前状态:代码核验完成,#253 v1 原型待用户审核;确认前不编写生产代码。 ## 2026-09-10 v2 交互调整(当前方案,优先于 v1) 用户确认:每行“一键关联”右侧都有小下拉箭头;任意一行切换手机后,其他行后续一键关联也使用新手机。用户要求“按照最后这个方案来更新工单,然后更新原型”。本轮只更新工单及原型,不实施生产代码,不视为 v2 原型已验收。 - 删除 v1 列表上方“采集设备选择+最近采集商品预览”,不加行内商品预览或额外商品确认弹窗。保留原“去关联”。未关联行新增分体按钮“一键关联 | 下拉箭头”。 - 主按钮:已有有效设备偏好时,取这台手机最近成功终态的临时采集,校验后固定本次 taskId/deviceId/pddProductId,直接关联、匹配并保存。候选筛选规则沿用 v1,不能取全系统最新;最新 completed_partial/商品不可用时提示,不偷偷回退较早商品。 - 首次未选手机:主按钮打开选择手机弹窗;“记住并继续关联”保存选择并继续原来点击行的一次关联。取消不记忆、不关联。无设备/加载失败显示原因并保留取消和重试。 - 每行箭头:只打开菜单,显示“当前手机:A/尚未选择”和“切换手机”;菜单不执行关联。切换弹窗“保存选择”只更新共用偏好,回到原列表,不自动关联。取消保持原手机。 - 偏好是本入口下当前用户、当前浏览器与 API 环境共用的一个 deviceId,不是逐行配置,不串用批量采购偏好。页面刷新后恢复;存储失败允许当前页面手动使用并说明下次需重选。设备被删除/停用/无权访问时要求重选,不静默换机;仅离线不阻断读取既有成功采集。 - 切换只影响后续发起的操作。已固定/执行中的关联继续用原设备与候选,不被其他行切换覆盖;已关联商品完全不变。执行行主按钮与箭头禁用,其他未执行行的选择不改写在途上下文。旧异步返回不覆盖新偏好或新操作。 - 成功/部分无结果/人工规格确认/AI异常/保存失败/结果未知/无权限/他人变更保护沿用 v1。关联的是共享蝦皮档案,原手动流程保持;不自动采购、不新增权限。 - 匹配等待及有限回读复用 #254 的动态预算与错误处理;#254 已推送但未合并发布,实现集成前核对实际基线,不承诺线上已生效。 ### v2 原型验收补充 - [ ] 每个未关联示例行均有主按钮与独立箭头,顶部无设备/候选栏。 - [ ] 首次选手机继续原行;取消不写;有偏好主按钮直接执行。 - [ ] A切换B只保存选择;另一行菜单同样显示B;后续点击取B候选。 - [ ] 设备加载/无设备/失效/无候选/部分采集可恢复;不盲目替代设备或候选。 - [ ] 已关联行与进行中操作不被切换改变,保留原人工入口与异常分支。 状态:v2 原型更新中,待线上版本验证后补链接;v1 不再作为当前交互实施依据。原型阶段无长期实现事实变化,跳过 Wiki 更新同步,不导出本地原型/任务归档。Gitea MCP未暴露,使用安全配置 API;QuantUX MCP鉴权401,检查可用编辑方式,不修改其鉴权配置。 ## #253 v2 在线原型待审核(2026-09-10) 当前审核以 v2 为准,上方 v1 与接口阻塞记录保留为历史。 - 演示:https://qux.ilapage.cn/#/test.html?h=a2aa10ax9Enpqz7iLQTuMhXy7Lcuy2YvTXsoj5gEK5VyXtjSPdRtyAae5zuC&ln=en - 查看/评论:https://qux.ilapage.cn/#/share.html?h=a2aa10ax9Enpqz7iLQTuMhXy7Lcuy2YvTXsoj5gEK5VyXtjSPdRtyAae5zuC - 编辑:https://qux.ilapage.cn/#/apps/6aa12b86191a826306a7fbb0/design.html - App ID:`6aa12b86191a826306a7fbb0`;名称 `GoAuto #253 v2 · 行内一键关联与共用手机`;lastUUID `35949`。欢迎页及画面右上角应显示 v2,旧标签页请刷新。 - 版本指纹:对 name/description/screens/widgets/lines/startScreen/lastUUID/screenSize/grid 按 Python json.dumps(ensure_ascii=False,sort_keys=True,separators=(',',':')) UTF-8 SHA-256:`385578c79d9163100b3caf59fc40cab97328e0d5a3c755a5737236a2479b89b1`。 - v1 已先完整回读并保存到单独 App `6aa21aae191a826306a7fbf4`(名称 GoAuto #253 v1 · 历史原型(v2前保留),模型lastUUID26709),再更新原可访问审核链接;没有删除 v1,不把旧 v1 当当前审核版本。 ### 本次交付 删除列表顶部设备选择及最近商品预览;两条未关联示例行均为“去关联”+“一键关联 | 下拉箭头”。主按钮首次选机“记住并继续关联”,有记忆直接执行。箭头显示当前手机及切换入口;包括尚未选过手机的箭头入口在内,“保存选择”都只记忆,不关联。所有行共享同一入口的设备偏好,取消不修改。 覆盖首次使用、A/B偏好、两行菜单/选择、运行/成功、部分未匹配、人工规格确认、AI失败、保存失败、结果未知、他人变更、无采集、部分采集、设备失效、只读、设备加载/失败/空态,以及既有人工处理示意。 ### 验证与限制 - 在线写入后完整回读模型一致;49屏、3767控件、1178连线,端点/子节点引用完整。 - 自动核对两行首次选机继续目标行、从菜单选机仅保存、切换A/B共用后续选择、顶部旧控件移除,全部通过。 - 桌面浏览器实际检查 v2 欢迎页、列表布局、主按钮首次弹窗及继续原行运行、切换菜单和保存后另一行显示新手机。截图视觉检查列表和切换弹窗。 - 原型是合成数据状态屏与分支演示,不连接真实AI/商品、不保存真实设备偏好;演示区切换场景会重置样例,不能当作真实数据持久化、多请求并发、刷新恢复或端到端业务验收。已关联不变/在途目标冻结仍是实施必须满足的契约,不能以状态屏模拟替代测试。移动端、完整键盘无障碍、真实权限/接口均未验证。 - UI/UX规范用于拆分主动作和切换动作、取消恢复、运行禁用和明确错误;保持既有页面风格。没有产品代码、迁移、发布、重启或真实订单操作。 - 已恢复使用 `C:/Users/ila20/.codex/quantux.env` 的有效MCP配置;两份配置URL相同、Key不同,旧路径请求401而当前initialize/tools-list200。没有输出、修改或复制密钥,也未修改服务端配置。 - 无长期实现事实变化,跳过Wiki更新及镜像同步,不导出原型HTML或任务归档,不提交生产源码。Gitea MCP未暴露,继续使用项目安全配置API。 确认人/确认时间:待用户审核;状态:v2 原型待确认。用户没有确认 v2 前,不实施生产代码。
Author
Owner

2026-09-10 进展:已将用户确认的 v2 分体按钮、全行共用设备偏好、首次选机继续关联、切换仅保存偏好、取消与在途冻结边界写入正文并回读确认。原型尚未完成:配置的 QuantUX MCP initialize 返回 HTTP 401;浏览器可进入旧 v1 编辑器,但操作延迟且出现超时,检查到的 Import 为图片/Figma入口,未用其覆盖交互模型。没有对旧 v1 保存改动、没有生成可审核 v2、没有实施生产代码。需要恢复 QuantUX MCP 有效鉴权后继续原型更新及在线验证,不能将旧 v1 链接当成已更新版本。UI/UX规范用于主动作与切换动作分离、取消恢复、运行禁用和共享偏好说明。本轮无长期实现事实变化,跳过 Wiki/镜像同步、Git产品提交和原型导出。

2026-09-10 进展:已将用户确认的 v2 分体按钮、全行共用设备偏好、首次选机继续关联、切换仅保存偏好、取消与在途冻结边界写入正文并回读确认。原型尚未完成:配置的 QuantUX MCP initialize 返回 HTTP 401;浏览器可进入旧 v1 编辑器,但操作延迟且出现超时,检查到的 Import 为图片/Figma入口,未用其覆盖交互模型。没有对旧 v1 保存改动、没有生成可审核 v2、没有实施生产代码。需要恢复 QuantUX MCP 有效鉴权后继续原型更新及在线验证,不能将旧 v1 链接当成已更新版本。UI/UX规范用于主动作与切换动作分离、取消恢复、运行禁用和共享偏好说明。本轮无长期实现事实变化,跳过 Wiki/镜像同步、Git产品提交和原型导出。
Author
Owner

开始实施(2026-09-10)

用户已确认 v2 原型并授权关联写入及并发保护。审核依据:App 6aa12b86191a826306a7fbb0,lastUUID 35949,原正文 v2 链接;覆盖行内分体按钮、全行共用手机、首次选择继续原行、切换只保存、取消和在途冻结及异常状态。
基线:feat/253-one-click-link,08d939a,包含依赖 #254(9088e6b),未合并 main 或发布;#251 不混入。
实施:复用 Admin 现有关联接口,新增可选 latestCollection 模式(SYB ID、设备 ID、预期规格版本);在短事务内选定该设备最新 completed/completed_partial 临时采集并冻结 task/device/PDD/context,仅 completed 且 active/规格可用时在未关联条件下写入。返回冻结来源和新版本,再由前端调用现有自动匹配并保存,回读实际处理阶段。partial 不回退旧商品;离线设备可用历史结果;停用设备拒绝。此模式仅 Admin,不扩展客户端密钥的跨模块权限;原手动关联行为不变。
不新增迁移、不创建采集/采购/订单、不重启或发布。测试使用合成数据:排序、partial、设备、并发冲突、旧接口回归、首次/切换/偏好隔离、AI失败/超时回读、生命周期及界面构建。
长期文档影响:Architecture、Business-Rules-and-Glossary、Android-Agent-API-Contract。Gitea MCP 当前不可用,回退已配置凭据的 Gitea API;不输出凭据。完成后集中提交推送及回写待验收。

## 开始实施(2026-09-10) 用户已确认 v2 原型并授权关联写入及并发保护。审核依据:App 6aa12b86191a826306a7fbb0,lastUUID 35949,原正文 v2 链接;覆盖行内分体按钮、全行共用手机、首次选择继续原行、切换只保存、取消和在途冻结及异常状态。 基线:feat/253-one-click-link,08d939a,包含依赖 #254(9088e6b),未合并 main 或发布;#251 不混入。 实施:复用 Admin 现有关联接口,新增可选 latestCollection 模式(SYB ID、设备 ID、预期规格版本);在短事务内选定该设备最新 completed/completed_partial 临时采集并冻结 task/device/PDD/context,仅 completed 且 active/规格可用时在未关联条件下写入。返回冻结来源和新版本,再由前端调用现有自动匹配并保存,回读实际处理阶段。partial 不回退旧商品;离线设备可用历史结果;停用设备拒绝。此模式仅 Admin,不扩展客户端密钥的跨模块权限;原手动关联行为不变。 不新增迁移、不创建采集/采购/订单、不重启或发布。测试使用合成数据:排序、partial、设备、并发冲突、旧接口回归、首次/切换/偏好隔离、AI失败/超时回读、生命周期及界面构建。 长期文档影响:Architecture、Business-Rules-and-Glossary、Android-Agent-API-Contract。Gitea MCP 当前不可用,回退已配置凭据的 Gitea API;不输出凭据。完成后集中提交推送及回写待验收。
ila changed title from feat(syb): 未关联商品一键关联最近采集 PDD 并匹配保存规格(方案待审核) to feat(syb): 未关联商品一键关联最近采集 PDD 并匹配保存规格(待验收) 2026-09-10 11:39:37 +08:00
Author
Owner

2026-09-10 用户明确授权 #253 合并 main 并部署线上。发布含必要依赖 #254,目标 ca997f6;当前线上 d403f3b 与原 main fdd26af 的 Server/Web 无差异,新增发布仅为 #253/#254。无追加迁移,不修改AI设置/定时开关,不执行真实匹配、采集、采购或订单。使用新发布目录、保留旧目录可回滚,切换前复核任务空闲,重启 GoAuto 并验证外部页面/API与产物哈希。Gitea MCP未暴露,沿用项目安全配置API。部署拓扑和命令沿用现行文档,无长期契约变化,发布事实集中记录本工单,不重复同步 Wiki。

2026-09-10 用户明确授权 #253 合并 main 并部署线上。发布含必要依赖 #254,目标 ca997f6;当前线上 d403f3b 与原 main fdd26af 的 Server/Web 无差异,新增发布仅为 #253/#254。无追加迁移,不修改AI设置/定时开关,不执行真实匹配、采集、采购或订单。使用新发布目录、保留旧目录可回滚,切换前复核任务空闲,重启 GoAuto 并验证外部页面/API与产物哈希。Gitea MCP未暴露,沿用项目安全配置API。部署拓扑和命令沿用现行文档,无长期契约变化,发布事实集中记录本工单,不重复同步 Wiki。
Author
Owner

#253 合并及线上发布完成(2026-09-10)

按用户“#253合并到main并部署到线上服务器”授权执行,含必要依赖 #254;工单仍待用户业务验收,不关闭。

  • main 已从 fdd26af fast-forward 至 ca997f6108 并推送;新增仅 #254/#253 四个提交。原线上 d403f3b 与 fdd26af 的 Server/Web 无差异。main工作区干净,其他worktree用户改动未动。
  • 从main重新构建 Linux amd64/CGO=0 Server 与生产Web,受影响Go测试及21项Node测试通过,Web构建通过(保留既有样式/分包警告);复用同提交此前全量Go与浏览器验证。
  • 发布目录 /home/goauto/releases/20260910-ca997f6-253,current已切换;goauto.service active/running,运行PID 24291的/proc/exe哈希与新二进制一致。Nginx配置不变,无需重启,共用9527入口已返回新静态文件。
  • Server SHA256 18955c59bf5b0ad29c7dac651e81dada1b9d54c219bcf975d6a68d2ee01c9e63,66785442字节;Web压缩包SHA256 554611d90eab9f4e782baf8bee6dda157ad6fe1c82fddba7dcf4d626f94034fc,5115776字节;上传后逐个校验。
  • 外网 http://185.216.248.75:9527 首页HTTP200,首页及 js/syb-products.J0kjjdxS.js、js/ShopeeProductDetailDrawer.BjxJ59oS.js 内容哈希与本次构建完全一致;/api/v1/health HTTP200;未登录详情HTTP200、业务码401,鉴权未放宽。
  • 实际AI T=60,后端130秒、前端140秒;线上应用配置键 writertimeout=620、Nginx读/发送900秒,满足预算,未改AI/代理/服务配置。
  • 切换前采集、采购、SYB同步、两类AI运行数均0。无新增迁移,未执行migrate;迁移版本列表、sys_job全部job_id/status及AI超时切换前后完全一致。配置复制一致,var/static保留原持久目录。
  • 首次切换的验证脚本使用了旧systemd不支持的 systemctl show --value,返回“unrecognized option”,触发自动回滚;只读核验确认非应用启动错误。修改临时验证命令为解析 MainPID= 后重做切换成功,未改产品源码或机器配置。
  • 回滚目录 /home/goauto/releases/20260908-d403f3b-239 保留;无删除、无真实关联/AI匹配/采集/采购/订单操作。Android无需更新,未重启本地服务。
  • 本次只改变部署版本,拓扑/命令/业务契约无新增长期事实;发布记录在工单,复用已完成Wiki同步,不再重复导出镜像。
    待用户刷新/重新打开Admin验证一键关联;真实业务和生产MySQL并发验收仍未冒充完成。
## #253 合并及线上发布完成(2026-09-10) 按用户“#253合并到main并部署到线上服务器”授权执行,含必要依赖 #254;工单仍待用户业务验收,不关闭。 - main 已从 fdd26af fast-forward 至 ca997f61087875802f8b57e074ced0af79c4b0ac 并推送;新增仅 #254/#253 四个提交。原线上 d403f3b 与 fdd26af 的 Server/Web 无差异。main工作区干净,其他worktree用户改动未动。 - 从main重新构建 Linux amd64/CGO=0 Server 与生产Web,受影响Go测试及21项Node测试通过,Web构建通过(保留既有样式/分包警告);复用同提交此前全量Go与浏览器验证。 - 发布目录 `/home/goauto/releases/20260910-ca997f6-253`,current已切换;goauto.service active/running,运行PID 24291的/proc/exe哈希与新二进制一致。Nginx配置不变,无需重启,共用9527入口已返回新静态文件。 - Server SHA256 `18955c59bf5b0ad29c7dac651e81dada1b9d54c219bcf975d6a68d2ee01c9e63`,66785442字节;Web压缩包SHA256 `554611d90eab9f4e782baf8bee6dda157ad6fe1c82fddba7dcf4d626f94034fc`,5115776字节;上传后逐个校验。 - 外网 http://185.216.248.75:9527 首页HTTP200,首页及 `js/syb-products.J0kjjdxS.js`、`js/ShopeeProductDetailDrawer.BjxJ59oS.js` 内容哈希与本次构建完全一致;/api/v1/health HTTP200;未登录详情HTTP200、业务码401,鉴权未放宽。 - 实际AI T=60,后端130秒、前端140秒;线上应用配置键 `writertimeout=620`、Nginx读/发送900秒,满足预算,未改AI/代理/服务配置。 - 切换前采集、采购、SYB同步、两类AI运行数均0。无新增迁移,未执行migrate;迁移版本列表、sys_job全部job_id/status及AI超时切换前后完全一致。配置复制一致,var/static保留原持久目录。 - 首次切换的验证脚本使用了旧systemd不支持的 `systemctl show --value`,返回“unrecognized option”,触发自动回滚;只读核验确认非应用启动错误。修改临时验证命令为解析 MainPID= 后重做切换成功,未改产品源码或机器配置。 - 回滚目录 `/home/goauto/releases/20260908-d403f3b-239` 保留;无删除、无真实关联/AI匹配/采集/采购/订单操作。Android无需更新,未重启本地服务。 - 本次只改变部署版本,拓扑/命令/业务契约无新增长期事实;发布记录在工单,复用已完成Wiki同步,不再重复导出镜像。 待用户刷新/重新打开Admin验证一键关联;真实业务和生产MySQL并发验收仍未冒充完成。
ila changed title from feat(syb): 未关联商品一键关联最近采集 PDD 并匹配保存规格(待验收) to feat(syb): 未关联商品一键关联最近采集 PDD 并匹配保存规格(已上线,待验收) 2026-09-10 11:55:09 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#253