SYB 商品页新增批量取消待确认退货匹配 #347

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

基本信息

  • 类型:需求
  • 所属 Epic / MVP:无;关联 #338、#341、#345
  • 阶段:实现、提交和推送完成;待人工验收,未合并/部署

依赖与并行

  • 前置:#338 的单条取消、匹配信息查询;#341 的采购员/售后权限。代码已存在于 main。
  • 不需等待 #345 人工验收;可独立开发,但不得与其他任务同时修改同一 SYB 页面。

原始需求

  • 来源:用户对话,2026-09-28。
  • 需求摘要:线上 Admin SYB 商品筛选“退货待确认”后,批量勾选,批量取消匹配退货;在“匹配退货”按钮后增加“取消匹配”。
  • 用户接受简单内部系统方案:仅批量取消待确认项,确认一次,显示成功/跳过/失败,刷新并便于重试;不增加审批。

当前代码事实与基线

  • 核验提交:main e7c049dbd6c8e89a82109f8b79f5ec95d6522fc3,2026-09-28。
  • web/src/views/goauto/syb-products/index.vue:已有匹配退货按钮、selectedProducts、returnMatchByProductId、行内/详情单条取消,但未发现批量取消入口。
  • isSelectableCandidate 未显式纳入 return_pending,某些待确认行只能因其他候选条件碰巧可勾选,必须补齐操作对应的勾选资格。
  • web/src/api/goauto/return-matches.js:已有 POST /api/admin/v1/return-matches/:id/cancel。
  • server/app/goauto/returnmatch/service.go Cancel 使用事务和匹配行锁、清空 active 指向并记录取消日志;当前非 cancelled 状态均可取消,包括已用退货。批量仅靠前端过滤不足以防止确认并发后的误取消。
  • handler.go transition 沿用 requireCanPurchase,返回 NOT_FOUND/STATE_CONFLICT 等错误。

做什么 / 不做什么

  • 做:现有工具栏紧跟“匹配退货”增加“取消匹配 N”;支持当前页勾选、确认、逐条取消、结果汇总、刷新与失败项重新勾选。
  • 做:仅对 active 匹配且状态 matched / 处理阶段 return_pending 生效;执行时服务端再次验证 matched。
  • 不做:取消已用退货、删除匹配/商品、修改或取消采购任务、自动采购、付款、跨页全选、全局取消、批量确认退货、新角色或审批。
  • 不修改原单条取消已用退货的行为;这是批量入口的限制,不扩大既有单条行为变更。

方案

  1. 复用现有工具栏、按钮、计数、ElMessageBox 确认和加载反馈;无权限时隐藏。无有效待确认选中项、相关资料加载中或批量执行中禁用。行选择资格补入待确认匹配,不能因此让这些行进入采购/采集/AI 匹配候选。
  2. 点击时快照本次选中项与匹配 ID,去重;只处理当前 active matched,不查询/取消后来新建的替代匹配。候选不明时禁用并提示刷新,不猜测 ID。
  3. 确认文案:“取消选中的 N 条退货匹配?取消后商品将重新计算采购准备状态。”不会承诺每条立即可采购,仍沿用原 readiness。
  4. 最小接口方案:前端串行复用单条 cancel,增加可选 expectedStatus=matched 请求条件。服务端在现有行锁事务内验证期望状态,不符合返回 STATE_CONFLICT;旧无请求体调用兼容,原单条功能不变。只接受合法期望值,不新增权限或审批;不新建整套批量接口或批量事务。
  5. 单项事务独立。非候选或已取消/已确认等状态变化计跳过;网络、权限及真实处理错误计失败;成功计成功。认证失效停止余下请求,剩余项不计成功。网络结果不确定不盲目自动重放,重新读取原匹配后再允许人工重试。
  6. 执行中显示进度、阻止重复提交以及冲突的匹配/确认/取消操作;查询刷新和异步代次避免旧结果覆盖新筛选。完成保留现有查询条件,刷新 readiness 和 active 匹配数据。仅仍在当前页且可重试的失败项保留/恢复勾选,成功/跳过项解除;刷新后消失的失败项显示于结果,不跨页隐式操作。
  7. 保留既有审计 CancelledBy/CancelledAt/日志及 active 唯一占位释放。退货是否再次进入可用池仍服从 #345 等候选条件,不保证已重出/缺失商品可再匹配。

子项目影响及预计文件

  • Server/Web/shared-docs;无 Android 或 Agent 变化,无数据库迁移,默认无权限迁移。
  • web/src/views/goauto/syb-products/index.vue
  • web/src/api/goauto/return-matches.js
  • server/app/goauto/returnmatch/handler.go、service.go 及相关测试
  • 若实现发现不能沿用权限或必须迁移,先更新工单并单独授权,不混入扩权。

设计与原型门禁

  • 小范围 UI + 批量取消交互;沿用既有 SYB 页面组件规范。用户于 2026-09-29 要求补轻量设计审核。
  • 可编辑设计源与审核入口:https://qux.ilapage.cn/#/apps/6abb0de2191a826306a801ab.html
  • App ID:6abb0de2191a826306a801ab;版本 v1,形成日期 2026-09-29;App 名称含“GoAuto #347 v1 · SYB 批量取消匹配(轻量审核)”,每屏页眉标注 #347 v1,按 01~08 场景识别。8 屏/613 控件/72 条有效连接。
  • 覆盖:01 勾选及按钮位置;02 一次确认;03 执行中;04 部分成功结果;05 失败项保留选择;06 空与加载失败;07 禁用、混合选择及已用退货边界;08 无操作权限。
  • 仅新增取消匹配操作,紧跟匹配退货;其他布局为既有页面的轻量上下文示意,不授权重构筛选、表格或工具栏。底部场景切换、设计标注、“演示:查看完成结果”只用于审核,不进入生产代码。
  • 全部 DEMO 虚构数据,不连接线上取消接口;失败重试页只示意保留勾选,实际重试确认数量按当次候选重算。
  • 已验证:QuantUX MCP 可用、模型回读、所有连接目标存在;浏览器审核页可访问,8 场景内容显示;画布可视检查确认文字与确认/结果框渲染。Label/Button 同时使用 props.label/text,避免空文字。
  • 限制:浏览器模拟器运行/分享按钮未响应,未完成完整点击链运行验证;当前以在线可查看的场景画面和标注作为轻量审核证据,不宣称运行测试通过。
  • 状态:v1 已确认;确认人:用户;确认时间:2026-09-29(本会话“原型通过,做 #347”)。覆盖八类状态及本工单范围。
  • 本地 HTML 导出未要求,未导出、未生成或提交本地原型文件。

文档影响

  • 更新 Architecture-and-Code-Map:批量取消调用链、原接口可选条件。
  • 更新 Business-Rules-and-Glossary:批量仅待确认、状态重校验、结果与重试语义。
  • 更新 API 契约 Wiki Android-Agent-API-Contract 的管理端相关契约:cancel 可选 expectedStatus、旧调用兼容及冲突响应;Agent 接口不变。
  • 交付说明受众:管理员、采购员和售后;复用现有 Wiki 页面,人工查看功能。
  • 当前 Gitea 工单为任务事实来源,默认不创建任务快照。
  • 本轮建单无长期事实变化,不执行 Wiki 同步;实施完成后按规则在线回读 revision、一次 sync / sync --check。

验收标准

  • 待确认筛选下可勾选当前页行;取消按钮紧跟匹配退货,计数仅待确认项,无候选禁用。
  • mixed selection 中仅 matched 被取消;confirmed 不被批量取消,原单条行为不变。
  • 服务端在锁内验证 matched;选中后被其他人确认或重新匹配的旧 ID不会误取消新匹配。
  • 成功清空 active 关联并保留取消审计;采购准备阶段重新计算,已有采购任务不改动。
  • 确认取消不发送请求;执行中防重复,逐项反馈成功/跳过/失败,部分失败不回滚已成功项。
  • 失败保留可重试选择;重复/已取消明确跳过,网络结果不确定先回读;筛选、页码及异步刷新不被旧响应覆盖。
  • 管理员、采购员、售后沿用现有权限;无权限者不能调用;不新建角色、审批或迁移。
  • 原匹配退货、单条取消、退货确认、采购候选规则回归通过。

验证方式

  • Server:go test ./app/goauto/returnmatch;补 expectedStatus 缺省兼容、matched 成功、confirmed 拒绝、重复/不存在、事务审计与状态竞态用例。
  • Web:补按钮计数/勾选、确认取消、串行调用、部分失败、认证失效/网络不确定、失败选择恢复、筛选代次回归;pnpm build:prod。
  • 必要浏览器验证使用隔离模拟数据;生产取消、数据库/权限变化与部署需用户另行授权。

风险与回退

  • 取消释放业务占位属真实业务写入;本轮不操作生产数据。
  • 主要风险是选择时状态过期、已确认被误取消、批量重复提交和接口结果不确定。使用原匹配 ID、事务内期望状态、串行执行及刷新回读控制,不增加复杂门禁。
  • 回退代码/隐藏批量入口不回滚已取消数据,保留审计;恢复业务匹配须人工处理,不删除日志或恢复旧库覆盖。

工单访问

Gitea MCP 当前不可用,创建回退项目安全配置的 Gitea API;未输出凭据。

## 基本信息 - 类型:需求 - 所属 Epic / MVP:无;关联 #338、#341、#345 - 阶段:实现、提交和推送完成;待人工验收,未合并/部署 ## 依赖与并行 - 前置:#338 的单条取消、匹配信息查询;#341 的采购员/售后权限。代码已存在于 main。 - 不需等待 #345 人工验收;可独立开发,但不得与其他任务同时修改同一 SYB 页面。 ## 原始需求 - 来源:用户对话,2026-09-28。 - 需求摘要:线上 Admin SYB 商品筛选“退货待确认”后,批量勾选,批量取消匹配退货;在“匹配退货”按钮后增加“取消匹配”。 - 用户接受简单内部系统方案:仅批量取消待确认项,确认一次,显示成功/跳过/失败,刷新并便于重试;不增加审批。 ## 当前代码事实与基线 - 核验提交:main e7c049dbd6c8e89a82109f8b79f5ec95d6522fc3,2026-09-28。 - web/src/views/goauto/syb-products/index.vue:已有匹配退货按钮、selectedProducts、returnMatchByProductId、行内/详情单条取消,但未发现批量取消入口。 - isSelectableCandidate 未显式纳入 return_pending,某些待确认行只能因其他候选条件碰巧可勾选,必须补齐操作对应的勾选资格。 - web/src/api/goauto/return-matches.js:已有 POST /api/admin/v1/return-matches/:id/cancel。 - server/app/goauto/returnmatch/service.go Cancel 使用事务和匹配行锁、清空 active 指向并记录取消日志;当前非 cancelled 状态均可取消,包括已用退货。批量仅靠前端过滤不足以防止确认并发后的误取消。 - handler.go transition 沿用 requireCanPurchase,返回 NOT_FOUND/STATE_CONFLICT 等错误。 ## 做什么 / 不做什么 - 做:现有工具栏紧跟“匹配退货”增加“取消匹配 N”;支持当前页勾选、确认、逐条取消、结果汇总、刷新与失败项重新勾选。 - 做:仅对 active 匹配且状态 matched / 处理阶段 return_pending 生效;执行时服务端再次验证 matched。 - 不做:取消已用退货、删除匹配/商品、修改或取消采购任务、自动采购、付款、跨页全选、全局取消、批量确认退货、新角色或审批。 - 不修改原单条取消已用退货的行为;这是批量入口的限制,不扩大既有单条行为变更。 ## 方案 1. 复用现有工具栏、按钮、计数、ElMessageBox 确认和加载反馈;无权限时隐藏。无有效待确认选中项、相关资料加载中或批量执行中禁用。行选择资格补入待确认匹配,不能因此让这些行进入采购/采集/AI 匹配候选。 2. 点击时快照本次选中项与匹配 ID,去重;只处理当前 active matched,不查询/取消后来新建的替代匹配。候选不明时禁用并提示刷新,不猜测 ID。 3. 确认文案:“取消选中的 N 条退货匹配?取消后商品将重新计算采购准备状态。”不会承诺每条立即可采购,仍沿用原 readiness。 4. 最小接口方案:前端串行复用单条 cancel,增加可选 expectedStatus=matched 请求条件。服务端在现有行锁事务内验证期望状态,不符合返回 STATE_CONFLICT;旧无请求体调用兼容,原单条功能不变。只接受合法期望值,不新增权限或审批;不新建整套批量接口或批量事务。 5. 单项事务独立。非候选或已取消/已确认等状态变化计跳过;网络、权限及真实处理错误计失败;成功计成功。认证失效停止余下请求,剩余项不计成功。网络结果不确定不盲目自动重放,重新读取原匹配后再允许人工重试。 6. 执行中显示进度、阻止重复提交以及冲突的匹配/确认/取消操作;查询刷新和异步代次避免旧结果覆盖新筛选。完成保留现有查询条件,刷新 readiness 和 active 匹配数据。仅仍在当前页且可重试的失败项保留/恢复勾选,成功/跳过项解除;刷新后消失的失败项显示于结果,不跨页隐式操作。 7. 保留既有审计 CancelledBy/CancelledAt/日志及 active 唯一占位释放。退货是否再次进入可用池仍服从 #345 等候选条件,不保证已重出/缺失商品可再匹配。 ## 子项目影响及预计文件 - Server/Web/shared-docs;无 Android 或 Agent 变化,无数据库迁移,默认无权限迁移。 - web/src/views/goauto/syb-products/index.vue - web/src/api/goauto/return-matches.js - server/app/goauto/returnmatch/handler.go、service.go 及相关测试 - 若实现发现不能沿用权限或必须迁移,先更新工单并单独授权,不混入扩权。 ## 设计与原型门禁 - 小范围 UI + 批量取消交互;沿用既有 SYB 页面组件规范。用户于 2026-09-29 要求补轻量设计审核。 - 可编辑设计源与审核入口:https://qux.ilapage.cn/#/apps/6abb0de2191a826306a801ab.html - App ID:6abb0de2191a826306a801ab;版本 v1,形成日期 2026-09-29;App 名称含“GoAuto #347 v1 · SYB 批量取消匹配(轻量审核)”,每屏页眉标注 #347 v1,按 01~08 场景识别。8 屏/613 控件/72 条有效连接。 - 覆盖:01 勾选及按钮位置;02 一次确认;03 执行中;04 部分成功结果;05 失败项保留选择;06 空与加载失败;07 禁用、混合选择及已用退货边界;08 无操作权限。 - 仅新增取消匹配操作,紧跟匹配退货;其他布局为既有页面的轻量上下文示意,不授权重构筛选、表格或工具栏。底部场景切换、设计标注、“演示:查看完成结果”只用于审核,不进入生产代码。 - 全部 DEMO 虚构数据,不连接线上取消接口;失败重试页只示意保留勾选,实际重试确认数量按当次候选重算。 - 已验证:QuantUX MCP 可用、模型回读、所有连接目标存在;浏览器审核页可访问,8 场景内容显示;画布可视检查确认文字与确认/结果框渲染。Label/Button 同时使用 props.label/text,避免空文字。 - 限制:浏览器模拟器运行/分享按钮未响应,未完成完整点击链运行验证;当前以在线可查看的场景画面和标注作为轻量审核证据,不宣称运行测试通过。 - 状态:v1 已确认;确认人:用户;确认时间:2026-09-29(本会话“原型通过,做 #347”)。覆盖八类状态及本工单范围。 - 本地 HTML 导出未要求,未导出、未生成或提交本地原型文件。 ## 文档影响 - [x] 更新 Architecture-and-Code-Map:批量取消调用链、原接口可选条件。 - [x] 更新 Business-Rules-and-Glossary:批量仅待确认、状态重校验、结果与重试语义。 - [x] 更新 API 契约 Wiki Android-Agent-API-Contract 的管理端相关契约:cancel 可选 expectedStatus、旧调用兼容及冲突响应;Agent 接口不变。 - 交付说明受众:管理员、采购员和售后;复用现有 Wiki 页面,人工查看功能。 - [x] 当前 Gitea 工单为任务事实来源,默认不创建任务快照。 - 本轮建单无长期事实变化,不执行 Wiki 同步;实施完成后按规则在线回读 revision、一次 sync / sync --check。 ## 验收标准 - [ ] 待确认筛选下可勾选当前页行;取消按钮紧跟匹配退货,计数仅待确认项,无候选禁用。 - [ ] mixed selection 中仅 matched 被取消;confirmed 不被批量取消,原单条行为不变。 - [ ] 服务端在锁内验证 matched;选中后被其他人确认或重新匹配的旧 ID不会误取消新匹配。 - [ ] 成功清空 active 关联并保留取消审计;采购准备阶段重新计算,已有采购任务不改动。 - [ ] 确认取消不发送请求;执行中防重复,逐项反馈成功/跳过/失败,部分失败不回滚已成功项。 - [ ] 失败保留可重试选择;重复/已取消明确跳过,网络结果不确定先回读;筛选、页码及异步刷新不被旧响应覆盖。 - [ ] 管理员、采购员、售后沿用现有权限;无权限者不能调用;不新建角色、审批或迁移。 - [ ] 原匹配退货、单条取消、退货确认、采购候选规则回归通过。 ## 验证方式 - Server:go test ./app/goauto/returnmatch;补 expectedStatus 缺省兼容、matched 成功、confirmed 拒绝、重复/不存在、事务审计与状态竞态用例。 - Web:补按钮计数/勾选、确认取消、串行调用、部分失败、认证失效/网络不确定、失败选择恢复、筛选代次回归;pnpm build:prod。 - 必要浏览器验证使用隔离模拟数据;生产取消、数据库/权限变化与部署需用户另行授权。 ## 风险与回退 - 取消释放业务占位属真实业务写入;本轮不操作生产数据。 - 主要风险是选择时状态过期、已确认被误取消、批量重复提交和接口结果不确定。使用原匹配 ID、事务内期望状态、串行执行及刷新回读控制,不增加复杂门禁。 - 回退代码/隐藏批量入口不回滚已取消数据,保留审计;恢复业务匹配须人工处理,不删除日志或恢复旧库覆盖。 ## 工单访问 Gitea MCP 当前不可用,创建回退项目安全配置的 Gitea API;未输出凭据。
Author
Owner

已补齐 v1 轻量设计(2026-09-29),审核链接:https://qux.ilapage.cn/#/apps/6abb0de2191a826306a801ab.html 。8 个场景覆盖按钮位置、一次确认、进度、结果、失败项保留、空/失败、状态边界与权限。UI/UX skill 用于保持既有规范、禁用/反馈/恢复清晰,不采用新风格或附加门禁。已在线回读与浏览器访问/画布检查;模拟器按钮未响应,完整运行点击链未验证,详见正文。全部虚构数据;未改生产代码、未取消真实匹配、未部署。无长期实现事实变化,不更新 Wiki。Gitea MCP 不可用,按项目配置 API 回退。等待用户审核,不自动实施。

已补齐 v1 轻量设计(2026-09-29),审核链接:https://qux.ilapage.cn/#/apps/6abb0de2191a826306a801ab.html 。8 个场景覆盖按钮位置、一次确认、进度、结果、失败项保留、空/失败、状态边界与权限。UI/UX skill 用于保持既有规范、禁用/反馈/恢复清晰,不采用新风格或附加门禁。已在线回读与浏览器访问/画布检查;模拟器按钮未响应,完整运行点击链未验证,详见正文。全部虚构数据;未改生产代码、未取消真实匹配、未部署。无长期实现事实变化,不更新 Wiki。Gitea MCP 不可用,按项目配置 API 回退。等待用户审核,不自动实施。
Author
Owner

2026-09-29 用户明确批准 v1 并授权实施 #347。设计 App 6abb0de2191a826306a801ab,覆盖八类状态,按既定范围执行 Server/Web;基线 origin/main e7c049d,分支 feat/347-batch-return-cancel。不执行真实取消、不迁移权限、不发布线上。当前会话未发现已配置的 Gitea MCP 工具,因此本次工单/Wiki 操作回退 Gitea API。

2026-09-29 用户明确批准 v1 并授权实施 #347。设计 App 6abb0de2191a826306a801ab,覆盖八类状态,按既定范围执行 Server/Web;基线 origin/main e7c049d,分支 feat/347-batch-return-cancel。不执行真实取消、不迁移权限、不发布线上。当前会话未发现已配置的 Gitea MCP 工具,因此本次工单/Wiki 操作回退 Gitea API。
Author
Owner

实现完成,待验收(2026-09-29)

基线 main e7c049d;实现分支 feat/347-batch-return-cancel;提交并推送 a4c7b5e97b40cef14df5fd028310b83e05b0fa9f。用户已确认 QuantUX v1(App 6abb0de2191a826306a801ab,八类状态),界面沿用现有组件/样式,未加入原型演示导航。

已实施

  • “匹配退货”之后增加“取消匹配 N”;当前页待确认行可选,计数仅 return_pending + matched。没有候选、资料加载/失败或退货处理互斥期间禁用;原权限外隐藏。
  • 一次确认,冻结并去重 SYB ID 与原 match ID,串行调用单条取消,展示进度和成功/跳过/失败。批量请求携带 expectedStatus:matched,服务端原事务锁内检查;已确认/取消或占用失效 409,不追随新匹配。
  • 审计与释放占用同一事务;审计失败整体回滚。未携带前提的原单条取消仍兼容已确认匹配;不新增表、迁移或权限,不改变已有任务。
  • 网络结果未知只读回原匹配,不自动重复写入;401/登录失效(含共享拦截器 6401)停止余项。刷新保持筛选/页码,失败只恢复当前页仍为原匹配的待确认项;列表移出的失败保留结果;较新查询不被旧刷新覆盖。
  • 新增勾选资格不扩大采购/采集/图搜/AI 候选;批量 AI 请求排除有效退货匹配。

验证证据

  • go test ./app/goauto/returnmatch ./app/goauto/purchase -count=1:通过。新增 HTTP 条件/错误/角色兼容、确认后旧批次冲突、审计失败回滚;既有确认后单条取消与重新匹配等回归通过(SQLite 隔离数据库,不是生产 MySQL)。
  • go build ./...:通过;Web 受影响 3 文件 ESLint、pnpm build:prod:通过,保留既有 CSS/包体积警告。
  • Node 单元:#347 新增 15 项通过;连同 quick-link、shopee-match-lifecycle 合计 41/41 通过。
  • 浏览器隔离 mock:#347 7/7 通过(售后角色、无权限、确认撤销、混选/进度、部分失败选择、状态冲突、认证停止、元数据错误、筛选下成功项离页);相关网络与列表回归合计 18/18 通过。
  • 另外两项旧用例失败:紧凑布局同排断言与“101 项创建采集按钮应启用”断言。在原始 main e7c049d 的另一独立 Vite 实例(5180)均复现相同失败;本次实例5179。未修改旧用例或顺带调整既有布局/100项上限。
  • git diff --check 通过。harness.py sync 一次与 sync --check 一次通过;strict 检查因基线已有未登记 docs/evidence/pdd-home-35727-summary.md 失败,未扩大范围处理。

长期文档

在线更新并读取 revision,再同步镜像;本提交只纳入 #347 三页:

  • Architecture-and-Code-Map 0e0ad0b3312c524d90e063167dd2e945fb22b0e9
  • Business-Rules-and-Glossary e95c53cec27080e073e6f7a4aaed46d5421dddf5
  • Android-Agent-API-Contract fff074b921368be646cda1bf0a434608fc5082c8(Admin 管理接口补充,Agent 不变)
    核心同步另暴露 docs/12-syb-erp-interface.md 与在线旧源的非本单差异:在线缺少仓库 #343 会话段落。本次没有改此 Wiki,也没有提交该镜像差异,避免混入 #347。

未执行 / 交付边界

没有合并 main、没有部署/重启实际本地或线上服务,没有真实取消、删除、迁移、权限变更、采购或付款。生产数据、高并发 MySQL、多浏览器真实操作及正式页面仍需人工验收。工单保持打开待验收;后续合并/发布另需授权。

## 实现完成,待验收(2026-09-29) 基线 main e7c049d;实现分支 `feat/347-batch-return-cancel`;提交并推送 `a4c7b5e97b40cef14df5fd028310b83e05b0fa9f`。用户已确认 QuantUX v1(App `6abb0de2191a826306a801ab`,八类状态),界面沿用现有组件/样式,未加入原型演示导航。 ### 已实施 - “匹配退货”之后增加“取消匹配 N”;当前页待确认行可选,计数仅 `return_pending` + `matched`。没有候选、资料加载/失败或退货处理互斥期间禁用;原权限外隐藏。 - 一次确认,冻结并去重 SYB ID 与原 match ID,串行调用单条取消,展示进度和成功/跳过/失败。批量请求携带 `expectedStatus:matched`,服务端原事务锁内检查;已确认/取消或占用失效 409,不追随新匹配。 - 审计与释放占用同一事务;审计失败整体回滚。未携带前提的原单条取消仍兼容已确认匹配;不新增表、迁移或权限,不改变已有任务。 - 网络结果未知只读回原匹配,不自动重复写入;401/登录失效(含共享拦截器 6401)停止余项。刷新保持筛选/页码,失败只恢复当前页仍为原匹配的待确认项;列表移出的失败保留结果;较新查询不被旧刷新覆盖。 - 新增勾选资格不扩大采购/采集/图搜/AI 候选;批量 AI 请求排除有效退货匹配。 ### 验证证据 - `go test ./app/goauto/returnmatch ./app/goauto/purchase -count=1`:通过。新增 HTTP 条件/错误/角色兼容、确认后旧批次冲突、审计失败回滚;既有确认后单条取消与重新匹配等回归通过(SQLite 隔离数据库,不是生产 MySQL)。 - `go build ./...`:通过;Web 受影响 3 文件 ESLint、`pnpm build:prod`:通过,保留既有 CSS/包体积警告。 - Node 单元:#347 新增 15 项通过;连同 quick-link、shopee-match-lifecycle 合计 41/41 通过。 - 浏览器隔离 mock:#347 7/7 通过(售后角色、无权限、确认撤销、混选/进度、部分失败选择、状态冲突、认证停止、元数据错误、筛选下成功项离页);相关网络与列表回归合计 18/18 通过。 - 另外两项旧用例失败:紧凑布局同排断言与“101 项创建采集按钮应启用”断言。在原始 main e7c049d 的另一独立 Vite 实例(5180)均复现相同失败;本次实例5179。未修改旧用例或顺带调整既有布局/100项上限。 - `git diff --check` 通过。`harness.py sync` 一次与 `sync --check` 一次通过;strict 检查因基线已有未登记 `docs/evidence/pdd-home-35727-summary.md` 失败,未扩大范围处理。 ### 长期文档 在线更新并读取 revision,再同步镜像;本提交只纳入 #347 三页: - Architecture-and-Code-Map `0e0ad0b3312c524d90e063167dd2e945fb22b0e9` - Business-Rules-and-Glossary `e95c53cec27080e073e6f7a4aaed46d5421dddf5` - Android-Agent-API-Contract `fff074b921368be646cda1bf0a434608fc5082c8`(Admin 管理接口补充,Agent 不变) 核心同步另暴露 `docs/12-syb-erp-interface.md` 与在线旧源的非本单差异:在线缺少仓库 #343 会话段落。本次没有改此 Wiki,也没有提交该镜像差异,避免混入 #347。 ### 未执行 / 交付边界 没有合并 main、没有部署/重启实际本地或线上服务,没有真实取消、删除、迁移、权限变更、采购或付款。生产数据、高并发 MySQL、多浏览器真实操作及正式页面仍需人工验收。工单保持打开待验收;后续合并/发布另需授权。
Author
Owner

2026-09-29 按用户“合并 main”授权,#349 连同依赖 #347 已无冲突合并并推送 origin/main。合并提交 dd9160ec423546ab93df65927cd7f5d3fb0c1565;包含 a4c7b5e、4280115、14231c6,远端 main 已回读核对。合并树与已验证 #349 分支完全一致。合并后重新执行:32/32 Web 单元测试、Server returnmatch/purchase 两包回归、受影响文件 ESLint、Web 生产构建及 git diff --check 全部通过(保留已有 CSS/包体积警告)。原 15 项隔离浏览器回归证据仍适用同一代码树。仅合并代码,未部署、重启、迁移、权限写入或操作真实业务数据;保持打开待验收。本次合并无新增长期行为/契约变化,复用工单已记录的 Wiki 更新与同步证据,不重复同步。Gitea MCP 当前不可用,按项目规则回退已配置 Gitea API。

2026-09-29 按用户“合并 main”授权,#349 连同依赖 #347 已无冲突合并并推送 origin/main。合并提交 dd9160ec423546ab93df65927cd7f5d3fb0c1565;包含 a4c7b5e、4280115、14231c6,远端 main 已回读核对。合并树与已验证 #349 分支完全一致。合并后重新执行:32/32 Web 单元测试、Server returnmatch/purchase 两包回归、受影响文件 ESLint、Web 生产构建及 git diff --check 全部通过(保留已有 CSS/包体积警告)。原 15 项隔离浏览器回归证据仍适用同一代码树。仅合并代码,未部署、重启、迁移、权限写入或操作真实业务数据;保持打开待验收。本次合并无新增长期行为/契约变化,复用工单已记录的 Wiki 更新与同步证据,不重复同步。Gitea MCP 当前不可用,按项目规则回退已配置 Gitea API。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#347