修复 Agent 当前页面采集无法把 PDD 切到前台 #107

Closed
opened 2026-08-27 14:15:24 +08:00 by ila · 4 comments
Owner

所属与来源

  • 关联工单:#101 Agent 当前 PDD 商品页临时采集、#104 页面恢复、#106 分享点击稳定与诊断。
  • 来源:用户于 2026-08-27 反馈“codex 更新了好几个工单,但 agent app 里点击采集还是不会把 pdd app 切到最前面、开始采集”,要求先分析原因再建单实施。
  • 类型:Android Agent / 当前页面采集 / 前后台切换与失败反馈缺陷。
  • 设计证据:不新增页面、组件与导航;确认对话框文案与流程沿用 #101 已审核原型,仅把失败提示从后台 Toast 改为可见反馈(前台服务通知 + 回到 Agent 后提示),属于恢复既有可见性的缺陷修复,不另做原型。

当前事实与根因(提交 1d1618c 复核)

  • android/app/src/main/java/cn/ilapage/goauto/agent/ui/TaskHistoryFragment.kt:497 点击“开始采集”后只调用 requireActivity().moveTaskToBack(true),随后调用 AgentForegroundService.collectCurrentPage。
  • android/app/src/main/java/cn/ilapage/goauto/agent/automation/CurrentPageCollection.kt:37 backgroundAndLaunch 的顺序固定为「先退后台、再启动服务」。
  • android/app/src/main/java/cn/ilapage/goauto/agent/automation/GoAutoAccessibilityService.kt:103 restoreRecentPddPage() 只有 READY / 按一次系统返回键 / 直接拒绝三种结果。
  • 全仓库 Agent 侧没有任何显式把 PDD 拉到前台的实现:grep -rn "getLaunchIntentForPackage\|moveTaskToFront" 无结果;PddNavigation.kt:39 的 ACTION_VIEW 只用于链接任务路径,当前页面采集不经过它。

由此得到四个失败点:

  1. moveTaskToBack(true) 只在 Agent 任务恰好压在 PDD 任务之上时才会露出 PDD。用户从桌面图标、最近任务或通知进入 Agent 时,露出的是桌面或其他应用,而该调用仍返回 true,UI 不报错;服务端随后 restoreRecentPddPage() 读到非 PDD 包名走 REJECT,任务以 CURRENT_PDD_PAGE_NOT_FOUND 失败。用户观察到的现象就是“PDD 没上来,也没开始采集”。
  2. BACK_FROM_AGENT 分支基本不可达:UI 已先退后台,服务判断时前台通常已不是 Agent;且两步之间夹着 createCurrentPageCollectionTask 网络请求(AgentForegroundService.kt:317),时序不确定。反向竞争下若判断时 PDD 已在前台而状态判定滞后,多按的一次返回键还可能退出商品详情页。
  3. collectCurrentPage 在 moveTaskToBack 之后调用 startForegroundService。Android 12+ 下若 Agent 前台服务此刻不处于运行中的前台状态,会抛 ForegroundServiceStartNotAllowedException,且调用处没有捕获,点击后完全静默。
  4. publishCurrentPageResult 的失败消息由已退到后台的 Fragment 用 Toast 显示,Android 12+ 后台 Toast 基本不可见,所有失败都表现为“点了没反应”。

(以上为提交 1d1618c 上可复核的代码事实;具体到用户这次失败停在哪一阶段,需要 #106 引入的本地诊断记录佐证,本工单不以此为前提。)

目标

  1. 由服务端显式把 PDD 现有任务拉回前台,并停在用户原来的商品详情页,不重置到首页。
  2. 调整启动顺序,避免在应用已退后台后再启动前台服务被系统拒绝。
  3. 前台切换与任务创建的时序确定:先确认 PDD 已在前台,再进入分享识别流程。
  4. 任何失败都有用户可见反馈,不再只依赖后台 Toast。

非目标

  • 不修改 Server、数据库、接口契约、Admin 与规则格式。
  • 不修改分享点击、剪贴板读取与诊断逻辑(#105、#106 范围)。
  • 不新增坐标点击、不猜测商品、不使用 OCR/VLM。
  • 不涉及采购、地址、创建订单与支付。
  • 不新增 UI 页面与导航;不改动采集间隔策略。

实施方案

前台切换

  1. 在 AgentForegroundService 的当前页面采集流程中,新增“恢复 PDD 前台”步骤,使用 packageManager.getLaunchIntentForPackage("com.xunmeng.pinduoduo") 加 FLAG_ACTIVITY_NEW_TASK 启动;不得附加 FLAG_ACTIVITY_CLEAR_TOP / FLAG_ACTIVITY_RESET_TASK_IF_NEEDED / FLAG_ACTIVITY_CLEAR_TASK,避免把 PDD 重置到首页而丢失商品详情页。
  2. 启动后轮询 currentPackage(),在超时预算(建议 5 秒,沿用现有 restoreRecentPddPage 超时口径)内等待前台变为 com.xunmeng.pinduoduo;超时仍失败并返回 CURRENT_PDD_PAGE_NOT_FOUND。
  3. restoreRecentPddPage 保留原有 READY 与返回键分支作为兜底:前台已是 PDD 直接返回;前台仍是 Agent 且近期见过 PDD 时可先尝试返回键;两者都不成立时改走上面的显式启动,而不是直接 REJECT。
  4. 找不到 PDD 启动 Intent(未安装或 queries 不生效)时明确失败并给出可读提示,不做任何猜测性跳转。

启动顺序与前台服务

  1. UI 点击确认后改为:先 AgentForegroundService.collectCurrentPage(...),由服务负责后续的前后台切换;moveTaskToBack 只作为兜底(或交由服务侧显式启动 PDD 时自然发生)。
  2. collectCurrentPage 的 startForegroundService 调用增加异常保护,捕获后向用户给出明确提示,不再静默。
  3. 相应调整 CurrentPageNavigationPolicy.backgroundAndLaunch 的契约与单元测试,使“启动失败”和“无法退后台”两种情况可区分。

失败反馈

  1. publishCurrentPageResult 的消息同时更新前台服务通知内容(沿用现有 updateNotification),保证 Agent 处于后台时用户仍能看到失败原因。
  2. 保留现有广播与 TaskHistoryFragment 提示路径,回到 Agent 时仍展示结果并刷新任务详情。

安全边界

  • 只启动 PDD 自身的启动 Intent,不构造深链、不传参、不携带任何用户数据。
  • 通知与日志不写 Token、账号、地址、剪贴板正文、商品 URL 与控件树。
  • 不改变一台设备同一时刻只执行一个任务的互斥与采集间隔约束。
  • 不采购、不修改地址、不创建订单、不支付。

验收标准

  • 从桌面图标或最近任务进入 Agent(Agent 任务未压在 PDD 之上)时,点击“开始采集”能把 PDD 恢复到前台,并停在原商品详情页而非首页。
  • 从 PDD 直接切到 Agent 的原有路径仍然可用,且不会多按一次返回键退出商品详情页。
  • PDD 未安装或无法获取启动 Intent 时明确失败,提示可读,不发生崩溃。
  • 前台服务被系统拒绝启动时给出可见提示,不再静默无反应。
  • 任一失败原因都能在 Agent 处于后台时通过前台服务通知看到。
  • 单元测试覆盖:前台已是 PDD、前台是 Agent、前台是第三方应用、启动 Intent 缺失、前台切换超时五种分支。
  • 采集成功路径(分享 → 复制链接 → 剪贴板 → 提交)与 #105/#106 行为保持不变。

验证方式

  • ./gradlew :app:testDebugUnitTest(Agent 单元测试)。
  • 真机验证(一加 PKG110 或等价设备)三条路径:PDD→Agent 直接切换、桌面进入 Agent、最近任务进入 Agent;记录设备型号、Agent 版本、规则快照与任务号。
  • 真机、多设备与云环境未覆盖的部分必须在工单如实记录。

风险与回退

  • 显式启动 PDD 可能在部分 ROM 上触发后台启动 Activity 限制;服务处于前台服务状态时通常允许,若个别设备被拦截,需在验证中记录并保留返回键兜底路径。
  • 回退方式:还原本工单提交即可恢复原 moveTaskToBack + 返回键行为,不涉及数据结构与接口变更。

文档影响

  • 待实施时确认:若 Agent 当前页面采集的运行说明(前台切换前提)在 Wiki 有描述,则同步更新对应页面;否则在工单说明「无长期文档影响」并跳过 Wiki 同步。

状态

待实施(由 Codex 执行)。

## 所属与来源 - 关联工单:#101 Agent 当前 PDD 商品页临时采集、#104 页面恢复、#106 分享点击稳定与诊断。 - 来源:用户于 2026-08-27 反馈“codex 更新了好几个工单,但 agent app 里点击采集还是不会把 pdd app 切到最前面、开始采集”,要求先分析原因再建单实施。 - 类型:Android Agent / 当前页面采集 / 前后台切换与失败反馈缺陷。 - 设计证据:不新增页面、组件与导航;确认对话框文案与流程沿用 #101 已审核原型,仅把失败提示从后台 Toast 改为可见反馈(前台服务通知 + 回到 Agent 后提示),属于恢复既有可见性的缺陷修复,不另做原型。 ## 当前事实与根因(提交 1d1618c 复核) - `android/app/src/main/java/cn/ilapage/goauto/agent/ui/TaskHistoryFragment.kt:497` 点击“开始采集”后只调用 `requireActivity().moveTaskToBack(true)`,随后调用 `AgentForegroundService.collectCurrentPage`。 - `android/app/src/main/java/cn/ilapage/goauto/agent/automation/CurrentPageCollection.kt:37` `backgroundAndLaunch` 的顺序固定为「先退后台、再启动服务」。 - `android/app/src/main/java/cn/ilapage/goauto/agent/automation/GoAutoAccessibilityService.kt:103` `restoreRecentPddPage()` 只有 READY / 按一次系统返回键 / 直接拒绝三种结果。 - 全仓库 Agent 侧没有任何显式把 PDD 拉到前台的实现:`grep -rn "getLaunchIntentForPackage\|moveTaskToFront"` 无结果;`PddNavigation.kt:39` 的 ACTION_VIEW 只用于链接任务路径,当前页面采集不经过它。 由此得到四个失败点: 1. `moveTaskToBack(true)` 只在 Agent 任务恰好压在 PDD 任务之上时才会露出 PDD。用户从桌面图标、最近任务或通知进入 Agent 时,露出的是桌面或其他应用,而该调用仍返回 `true`,UI 不报错;服务端随后 `restoreRecentPddPage()` 读到非 PDD 包名走 `REJECT`,任务以 `CURRENT_PDD_PAGE_NOT_FOUND` 失败。用户观察到的现象就是“PDD 没上来,也没开始采集”。 2. `BACK_FROM_AGENT` 分支基本不可达:UI 已先退后台,服务判断时前台通常已不是 Agent;且两步之间夹着 `createCurrentPageCollectionTask` 网络请求(`AgentForegroundService.kt:317`),时序不确定。反向竞争下若判断时 PDD 已在前台而状态判定滞后,多按的一次返回键还可能退出商品详情页。 3. `collectCurrentPage` 在 `moveTaskToBack` 之后调用 `startForegroundService`。Android 12+ 下若 Agent 前台服务此刻不处于运行中的前台状态,会抛 `ForegroundServiceStartNotAllowedException`,且调用处没有捕获,点击后完全静默。 4. `publishCurrentPageResult` 的失败消息由已退到后台的 Fragment 用 Toast 显示,Android 12+ 后台 Toast 基本不可见,所有失败都表现为“点了没反应”。 (以上为提交 1d1618c 上可复核的代码事实;具体到用户这次失败停在哪一阶段,需要 #106 引入的本地诊断记录佐证,本工单不以此为前提。) ## 目标 1. 由服务端显式把 PDD 现有任务拉回前台,并停在用户原来的商品详情页,不重置到首页。 2. 调整启动顺序,避免在应用已退后台后再启动前台服务被系统拒绝。 3. 前台切换与任务创建的时序确定:先确认 PDD 已在前台,再进入分享识别流程。 4. 任何失败都有用户可见反馈,不再只依赖后台 Toast。 ## 非目标 - 不修改 Server、数据库、接口契约、Admin 与规则格式。 - 不修改分享点击、剪贴板读取与诊断逻辑(#105、#106 范围)。 - 不新增坐标点击、不猜测商品、不使用 OCR/VLM。 - 不涉及采购、地址、创建订单与支付。 - 不新增 UI 页面与导航;不改动采集间隔策略。 ## 实施方案 ### 前台切换 1. 在 `AgentForegroundService` 的当前页面采集流程中,新增“恢复 PDD 前台”步骤,使用 `packageManager.getLaunchIntentForPackage("com.xunmeng.pinduoduo")` 加 `FLAG_ACTIVITY_NEW_TASK` 启动;**不得**附加 `FLAG_ACTIVITY_CLEAR_TOP` / `FLAG_ACTIVITY_RESET_TASK_IF_NEEDED` / `FLAG_ACTIVITY_CLEAR_TASK`,避免把 PDD 重置到首页而丢失商品详情页。 2. 启动后轮询 `currentPackage()`,在超时预算(建议 5 秒,沿用现有 `restoreRecentPddPage` 超时口径)内等待前台变为 `com.xunmeng.pinduoduo`;超时仍失败并返回 `CURRENT_PDD_PAGE_NOT_FOUND`。 3. `restoreRecentPddPage` 保留原有 READY 与返回键分支作为兜底:前台已是 PDD 直接返回;前台仍是 Agent 且近期见过 PDD 时可先尝试返回键;两者都不成立时改走上面的显式启动,而不是直接 `REJECT`。 4. 找不到 PDD 启动 Intent(未安装或 `queries` 不生效)时明确失败并给出可读提示,不做任何猜测性跳转。 ### 启动顺序与前台服务 5. UI 点击确认后改为:先 `AgentForegroundService.collectCurrentPage(...)`,由服务负责后续的前后台切换;`moveTaskToBack` 只作为兜底(或交由服务侧显式启动 PDD 时自然发生)。 6. `collectCurrentPage` 的 `startForegroundService` 调用增加异常保护,捕获后向用户给出明确提示,不再静默。 7. 相应调整 `CurrentPageNavigationPolicy.backgroundAndLaunch` 的契约与单元测试,使“启动失败”和“无法退后台”两种情况可区分。 ### 失败反馈 8. `publishCurrentPageResult` 的消息同时更新前台服务通知内容(沿用现有 `updateNotification`),保证 Agent 处于后台时用户仍能看到失败原因。 9. 保留现有广播与 `TaskHistoryFragment` 提示路径,回到 Agent 时仍展示结果并刷新任务详情。 ## 安全边界 - 只启动 PDD 自身的启动 Intent,不构造深链、不传参、不携带任何用户数据。 - 通知与日志不写 Token、账号、地址、剪贴板正文、商品 URL 与控件树。 - 不改变一台设备同一时刻只执行一个任务的互斥与采集间隔约束。 - 不采购、不修改地址、不创建订单、不支付。 ## 验收标准 - [ ] 从桌面图标或最近任务进入 Agent(Agent 任务未压在 PDD 之上)时,点击“开始采集”能把 PDD 恢复到前台,并停在原商品详情页而非首页。 - [ ] 从 PDD 直接切到 Agent 的原有路径仍然可用,且不会多按一次返回键退出商品详情页。 - [ ] PDD 未安装或无法获取启动 Intent 时明确失败,提示可读,不发生崩溃。 - [ ] 前台服务被系统拒绝启动时给出可见提示,不再静默无反应。 - [ ] 任一失败原因都能在 Agent 处于后台时通过前台服务通知看到。 - [ ] 单元测试覆盖:前台已是 PDD、前台是 Agent、前台是第三方应用、启动 Intent 缺失、前台切换超时五种分支。 - [ ] 采集成功路径(分享 → 复制链接 → 剪贴板 → 提交)与 #105/#106 行为保持不变。 ## 验证方式 - `./gradlew :app:testDebugUnitTest`(Agent 单元测试)。 - 真机验证(一加 PKG110 或等价设备)三条路径:PDD→Agent 直接切换、桌面进入 Agent、最近任务进入 Agent;记录设备型号、Agent 版本、规则快照与任务号。 - 真机、多设备与云环境未覆盖的部分必须在工单如实记录。 ## 风险与回退 - 显式启动 PDD 可能在部分 ROM 上触发后台启动 Activity 限制;服务处于前台服务状态时通常允许,若个别设备被拦截,需在验证中记录并保留返回键兜底路径。 - 回退方式:还原本工单提交即可恢复原 `moveTaskToBack` + 返回键行为,不涉及数据结构与接口变更。 ## 文档影响 - 待实施时确认:若 Agent 当前页面采集的运行说明(前台切换前提)在 Wiki 有描述,则同步更新对应页面;否则在工单说明「无长期文档影响」并跳过 Wiki 同步。 ## 状态 待实施(由 Codex 执行)。
Author
Owner

开始实施(2026-08-27)

已核对 #101、#104、#105、#106 的实现提交与 #107 当前代码事实,按工单最小范围修改 Android:

  • 点击确认时先启动前台服务,由服务负责恢复 PDD 前台;
  • 保留“PDD 已前台不返回 / Agent 前台只返回一次”的兼容路径,其他情况显式拉回 PDD 现有任务;
  • 增加前台服务启动异常保护与后台通知反馈;
  • 补齐前台已是 PDD、Agent、第三方应用、启动 Intent 缺失、切换超时等纯策略测试。

不修改 Server、数据库、接口、分享点击、剪贴板、采购或支付能力。现有 Wiki 明确写有旧恢复前提,因此本工单同步更新对应长期页面。

## 开始实施(2026-08-27) 已核对 #101、#104、#105、#106 的实现提交与 #107 当前代码事实,按工单最小范围修改 Android: - 点击确认时先启动前台服务,由服务负责恢复 PDD 前台; - 保留“PDD 已前台不返回 / Agent 前台只返回一次”的兼容路径,其他情况显式拉回 PDD 现有任务; - 增加前台服务启动异常保护与后台通知反馈; - 补齐前台已是 PDD、Agent、第三方应用、启动 Intent 缺失、切换超时等纯策略测试。 不修改 Server、数据库、接口、分享点击、剪贴板、采购或支付能力。现有 Wiki 明确写有旧恢复前提,因此本工单同步更新对应长期页面。
Author
Owner

实现完成,待验收(2026-08-27)

实现

  • Agent 版本更新为 0.9.4(versionCode 17)。
  • 采集确认后先启动前台服务,不再先执行 moveTaskToBack(true);前台服务启动异常会在 Agent 当前界面明确提示。
  • 当前页面任务恢复 PDD 时:
    • PDD 已在前台则直接继续,不多按返回键;
    • Agent 在前台且近期见过 PDD 时只尝试一次系统返回;
    • 第三方应用、桌面或一次返回未恢复时,使用 PDD 自身启动 Intent + FLAG_ACTIVITY_NEW_TASK 拉回现有任务;
    • 不附加 CLEAR_TOP / RESET_TASK_IF_NEEDED / CLEAR_TASK,不构造深链或传递用户数据;
    • 最多等待 5 秒确认前台包名,Intent 缺失、启动失败和超时均明确失败。
  • 当前页面执行结果返回具体失败原因;通知内容强制保留 30 秒,避免心跳立即覆盖。既有广播、任务详情刷新、分享/剪贴板/采集结果路径保持不变。
  • 单元测试覆盖前台已是 PDD、Agent 一次返回、第三方应用显式启动、启动 Intent 缺失、前台切换超时,以及前台服务启动失败/后台兜底失败区分。
  • 未修改 Server、数据库、接口、规则、采购或支付能力。

验证

  • cd android && .\gradlew.bat :app:testDebugUnitTest:通过。
  • cd android && .\gradlew.bat :app:assembleDebug:通过。
  • python dev_scripts/harness.py check --strict:通过。
  • git diff --check:通过。
  • 一加 PKG110 已覆盖安装 0.9.4 / versionCode 17,无障碍服务保持启用;安装前设备状态为在线空闲。
  • 只读/安全真机检查确认 PDD 既有任务栈顶部仍为 NewPageActivity;从桌面以 PDD Launcher Intent 拉回后仍停在同一个 NewPageActivity,未重置首页。
  • 未自动创建新的业务采集任务;PDD→Agent、桌面进入 Agent、最近任务进入 Agent 三条完整采集链路仍需用户在明确授权的测试商品页做验收。未覆盖多设备与云环境。

Wiki

已按长期事实变化更新线上页面并回读 revision:

  • Architecture-and-Code-Map:7a1281d8873c
  • Business-Rules-and-Glossary:fa2a6f6a4129
  • Local-Development-and-Verification:3dc6c3774b31

python dev_scripts/harness.py sync 与唯一一轮 sync --check 均通过。

提交

  • ea970c755e434af54ca565434e7943d2229dd23e fix(agent): restore PDD before current-page collection (#107)

工单保持打开,等待人工验收。

## 实现完成,待验收(2026-08-27) ### 实现 - Agent 版本更新为 **0.9.4(versionCode 17)**。 - 采集确认后先启动前台服务,不再先执行 `moveTaskToBack(true)`;前台服务启动异常会在 Agent 当前界面明确提示。 - 当前页面任务恢复 PDD 时: - PDD 已在前台则直接继续,不多按返回键; - Agent 在前台且近期见过 PDD 时只尝试一次系统返回; - 第三方应用、桌面或一次返回未恢复时,使用 PDD 自身启动 Intent + `FLAG_ACTIVITY_NEW_TASK` 拉回现有任务; - 不附加 CLEAR_TOP / RESET_TASK_IF_NEEDED / CLEAR_TASK,不构造深链或传递用户数据; - 最多等待 5 秒确认前台包名,Intent 缺失、启动失败和超时均明确失败。 - 当前页面执行结果返回具体失败原因;通知内容强制保留 30 秒,避免心跳立即覆盖。既有广播、任务详情刷新、分享/剪贴板/采集结果路径保持不变。 - 单元测试覆盖前台已是 PDD、Agent 一次返回、第三方应用显式启动、启动 Intent 缺失、前台切换超时,以及前台服务启动失败/后台兜底失败区分。 - 未修改 Server、数据库、接口、规则、采购或支付能力。 ### 验证 - `cd android && .\gradlew.bat :app:testDebugUnitTest`:通过。 - `cd android && .\gradlew.bat :app:assembleDebug`:通过。 - `python dev_scripts/harness.py check --strict`:通过。 - `git diff --check`:通过。 - 一加 PKG110 已覆盖安装 **0.9.4 / versionCode 17**,无障碍服务保持启用;安装前设备状态为在线空闲。 - 只读/安全真机检查确认 PDD 既有任务栈顶部仍为 `NewPageActivity`;从桌面以 PDD Launcher Intent 拉回后仍停在同一个 `NewPageActivity`,未重置首页。 - 未自动创建新的业务采集任务;PDD→Agent、桌面进入 Agent、最近任务进入 Agent 三条完整采集链路仍需用户在明确授权的测试商品页做验收。未覆盖多设备与云环境。 ### Wiki 已按长期事实变化更新线上页面并回读 revision: - Architecture-and-Code-Map:`7a1281d8873c` - Business-Rules-and-Glossary:`fa2a6f6a4129` - Local-Development-and-Verification:`3dc6c3774b31` `python dev_scripts/harness.py sync` 与唯一一轮 `sync --check` 均通过。 ### 提交 - `ea970c755e434af54ca565434e7943d2229dd23e fix(agent): restore PDD before current-page collection (#107)` 工单保持打开,等待人工验收。
Author
Owner

后续关联

  • 2026-08-27:#107 上线后(提交 ea970c7)实测 PDD 已能切回前台,但当前页面采集仍拿不到 goods_id。经复核,剩余问题不在前台恢复链路,而在商品身份解析链路:服务端短链分支只认 HTTP 3xx、响应正文被丢弃、UA 为自定义标识(server/app/goauto/task/current_page.go:262-297),且真实短链展开无测试覆盖。
  • 已另建 #108 处理:分享短链改为在 Agent 侧展开,goods_id 的校验、归一化、建档与并发互斥仍保留在服务端。
  • #107 自身范围(前台恢复)不受影响,验收结论按本工单原有标准判定。
## 后续关联 - 2026-08-27:#107 上线后(提交 `ea970c7`)实测 PDD 已能切回前台,但当前页面采集仍拿不到 goods_id。经复核,剩余问题不在前台恢复链路,而在商品身份解析链路:服务端短链分支只认 HTTP 3xx、响应正文被丢弃、UA 为自定义标识(`server/app/goauto/task/current_page.go:262-297`),且真实短链展开无测试覆盖。 - 已另建 #108 处理:分享短链改为在 Agent 侧展开,goods_id 的校验、归一化、建档与并发互斥仍保留在服务端。 - #107 自身范围(前台恢复)不受影响,验收结论按本工单原有标准判定。
Author
Owner

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。
ila closed this issue 2026-08-28 15:07:12 +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#107