fix(agent): 正式采购未横向搜索导致精确颜色不可见 #230

Open
opened 2026-09-07 09:36:15 +08:00 by ila · 7 comments
Owner

原始需求摘要

2026-09-07,本地服务正式采购任务 CG99 已进入 PDD 商品规格面板,但失败为“有界搜索后未找到精确规格”。用户观察颜色/尺码较多,目标可能需要横向滑动;要求在尽量不影响当前高成功率采购流程的前提下修复。

当前事实与根因

基线提交:1f40a7f。

  • CG99 首趟 spec_probe 已采集 20 个颜色、5 个尺码;固化目标颜色位于探测颜色数组第 14 项,目标尺码位于第 3 项,说明服务端匹配结果属于当次真实候选。
  • 正式采购 PurchaseRehearsalExecutor.locateExactSpec() 只执行 DOWN 3 次、UP 6 次纵向搜索,没有横向颜色搜索。
  • 采集器已有锁定颜色行、左右有界遍历与稳定边界终止能力,但正式选择器未复用。
  • 结论:Agent 正式选择阶段能力缺口,不是 Admin 规则或服务端规格匹配错误。

目标

只在既有精确规格直接查找和纵向有界搜索均未找到目标颜色时,增加基于已解析颜色行的横向有界兜底搜索,并继续只点击服务端下发的逐字精确值。

非目标

  • 不改变首趟探测、服务端 AI/确定性匹配、任务状态机、重试语义、地址、价格、创建订单或核单逻辑。
  • 不允许相似规格、本地猜测、OCR/VLM、无限滑动或全屏盲滑。
  • 尺码继续使用现有纵向搜索;正常首屏或纵向即可找到的规格不得进入新分支。
  • 不执行真机任务、创建订单或支付。

实施方案

  1. 保持现有“当前可见 → 原纵向搜索”执行顺序不变。
  2. 仅当 dimension=color 且原路径返回目标不可见时,启动横向兜底;单列纵向颜色不横滑。
  3. 每次从当前解析结果锁定包含多个可选颜色的具体视觉行,以行内节点作为锚点调用既有安全规格滑动;不得对整个订单/规格面板盲目横滑。
  4. 先有限向 RIGHT 恢复较早颜色,再向 LEFT 查找后续颜色;每次动作后重新 capture/parse,重新定位唯一目标与行锚点。
  5. 使用现有默认 specHorizontalSwipes=12、stableEdgeReads=2 作为上限和稳定边界;页面关闭、容器/行消失、滑动失败、目标歧义或不可用均 fail-closed。
  6. 错误仅增加维度、横向/纵向次数、可见候选数、终止原因等标量,不保存/上传规格文字、坐标、原始控件树或截图。

设计证据

恢复既有精确规格选择行为的非 UI 缺陷,不新增页面或交互,不需要原型。

验收

  • 首屏精确颜色仍零横滑成功;既有纵向颜色和尺码路径保持成功。
  • 横向后续页面的精确颜色能够找到并只点击一次。
  • 单列颜色不横滑;相似值不冒充;同名多个目标仍失败。
  • 页面关闭、行/锚点丢失、滑动失败或到达稳定边界时明确失败,且不进入地址、创建订单或支付。
  • 已选规格不重复点击;现有 Android 采购测试全部通过。
  • 构建新版本 APK;安装前确认目标设备空闲。未获单独真机任务授权时只安装,不自动重试 CG99。

风险与控制

修改点位于公共规格选择器,回归风险为低到中。通过“原成功路径不变、仅颜色最终不可见时进入横向兜底”、严格精确匹配、有限次数与完整回归降低风险。付款永久禁止。

依赖、并行与文档影响

  • 依赖:当前 Android 采购执行基线;不依赖数据库、API 或规则迁移。
  • 不与其他修改同一选择器的工单并行。
  • 无长期 Wiki 影响:实现既有“规格面板内有限查找精确规格”规则的横向缺口,契约与业务规则不变,完成时跳过 Wiki 更新。
  • Gitea MCP 当前不可用,按仓库规则回退到本机忽略的 gitea.env + Gitea API;凭据不输出、不入库。
## 原始需求摘要 2026-09-07,本地服务正式采购任务 CG99 已进入 PDD 商品规格面板,但失败为“有界搜索后未找到精确规格”。用户观察颜色/尺码较多,目标可能需要横向滑动;要求在尽量不影响当前高成功率采购流程的前提下修复。 ## 当前事实与根因 基线提交:`1f40a7f`。 - CG99 首趟 `spec_probe` 已采集 20 个颜色、5 个尺码;固化目标颜色位于探测颜色数组第 14 项,目标尺码位于第 3 项,说明服务端匹配结果属于当次真实候选。 - 正式采购 `PurchaseRehearsalExecutor.locateExactSpec()` 只执行 DOWN 3 次、UP 6 次纵向搜索,没有横向颜色搜索。 - 采集器已有锁定颜色行、左右有界遍历与稳定边界终止能力,但正式选择器未复用。 - 结论:Agent 正式选择阶段能力缺口,不是 Admin 规则或服务端规格匹配错误。 ## 目标 只在既有精确规格直接查找和纵向有界搜索均未找到目标颜色时,增加基于已解析颜色行的横向有界兜底搜索,并继续只点击服务端下发的逐字精确值。 ## 非目标 - 不改变首趟探测、服务端 AI/确定性匹配、任务状态机、重试语义、地址、价格、创建订单或核单逻辑。 - 不允许相似规格、本地猜测、OCR/VLM、无限滑动或全屏盲滑。 - 尺码继续使用现有纵向搜索;正常首屏或纵向即可找到的规格不得进入新分支。 - 不执行真机任务、创建订单或支付。 ## 实施方案 1. 保持现有“当前可见 → 原纵向搜索”执行顺序不变。 2. 仅当 `dimension=color` 且原路径返回目标不可见时,启动横向兜底;单列纵向颜色不横滑。 3. 每次从当前解析结果锁定包含多个可选颜色的具体视觉行,以行内节点作为锚点调用既有安全规格滑动;不得对整个订单/规格面板盲目横滑。 4. 先有限向 RIGHT 恢复较早颜色,再向 LEFT 查找后续颜色;每次动作后重新 capture/parse,重新定位唯一目标与行锚点。 5. 使用现有默认 `specHorizontalSwipes=12`、`stableEdgeReads=2` 作为上限和稳定边界;页面关闭、容器/行消失、滑动失败、目标歧义或不可用均 fail-closed。 6. 错误仅增加维度、横向/纵向次数、可见候选数、终止原因等标量,不保存/上传规格文字、坐标、原始控件树或截图。 ## 设计证据 恢复既有精确规格选择行为的非 UI 缺陷,不新增页面或交互,不需要原型。 ## 验收 - 首屏精确颜色仍零横滑成功;既有纵向颜色和尺码路径保持成功。 - 横向后续页面的精确颜色能够找到并只点击一次。 - 单列颜色不横滑;相似值不冒充;同名多个目标仍失败。 - 页面关闭、行/锚点丢失、滑动失败或到达稳定边界时明确失败,且不进入地址、创建订单或支付。 - 已选规格不重复点击;现有 Android 采购测试全部通过。 - 构建新版本 APK;安装前确认目标设备空闲。未获单独真机任务授权时只安装,不自动重试 CG99。 ## 风险与控制 修改点位于公共规格选择器,回归风险为低到中。通过“原成功路径不变、仅颜色最终不可见时进入横向兜底”、严格精确匹配、有限次数与完整回归降低风险。付款永久禁止。 ## 依赖、并行与文档影响 - 依赖:当前 Android 采购执行基线;不依赖数据库、API 或规则迁移。 - 不与其他修改同一选择器的工单并行。 - 无长期 Wiki 影响:实现既有“规格面板内有限查找精确规格”规则的横向缺口,契约与业务规则不变,完成时跳过 Wiki 更新。 - Gitea MCP 当前不可用,按仓库规则回退到本机忽略的 `gitea.env` + Gitea API;凭据不输出、不入库。
Author
Owner

实施完成,待人工验收

实现:

  • 保持原有“当前可见 → 纵向有界搜索”主路径不变;仅颜色最终不可见时进入横向兜底。
  • 横向兜底先在唯一规格面板内恢复颜色区域,再按可见颜色视觉行锚定最近的横向滚动容器;禁止全局横滑。
  • 先向 RIGHT 有界恢复早期颜色,再向 LEFT 搜索后续颜色;每次滑动后重新 capture/parse/精确匹配。
  • 上限直接复用采集器默认 specHorizontalSwipes=12 与 stableEdgeReads=2,避免两套常量漂移。
  • 单列颜色不横滑;精确目标歧义、不可用、行丢失、滑动失败、面板关闭均 fail-closed。
  • 失败诊断只增加维度、横纵滑动次数、可见候选数量和终止原因,不记录规格文本、坐标、原始控件树或截图。

代码:

  • 分支:fix/230-horizontal-spec-selection
  • 提交:7b9fcfb fix(agent): search horizontally for exact purchase color (#230)
  • Agent:0.9.53(versionCode 66)

验证:

  • PurchaseRehearsalExecutorTest 定向测试通过;新增覆盖横向后页精确颜色、首屏零横滑、单列不横滑、横滑失败安全终止。
  • 原有相似规格拒绝、纵向尺码、已选不重复点击、歧义与规格复核用例继续通过。
  • scripts/verify.ps1 -Component android:Debug/Release 单元测试与 Debug APK 构建通过。
  • python dev_scripts/harness.py check --strict、git diff --check:通过。
  • 安装前设备 10(PKG110)运行中采购/采集任务均为 0。
  • APK:6,623,150 bytes;SHA-256 3D222F30246E007A5A91249AB51BA0608834DC13F01B2BAB93C6B7F259DA704F。
  • 已安装到 192.168.0.173:42681,回读 0.9.53(66),GoAuto 无障碍服务仍启用。

未自动重试 CG99,未修改地址、未创建订单、未支付。CG99 可由用户手动执行同任务重试验收。无长期规则或契约变化,跳过 Wiki 更新。

实施前工作区不存在未提交业务源码;既有 settings.yml 本机超时改动、重复 Wiki 镜像头、原型与临时文件均与本工单无关,其中原始控件树禁止入库,已全部原样保留且未纳入提交。

## 实施完成,待人工验收 实现: - 保持原有“当前可见 → 纵向有界搜索”主路径不变;仅颜色最终不可见时进入横向兜底。 - 横向兜底先在唯一规格面板内恢复颜色区域,再按可见颜色视觉行锚定最近的横向滚动容器;禁止全局横滑。 - 先向 RIGHT 有界恢复早期颜色,再向 LEFT 搜索后续颜色;每次滑动后重新 capture/parse/精确匹配。 - 上限直接复用采集器默认 `specHorizontalSwipes=12` 与 `stableEdgeReads=2`,避免两套常量漂移。 - 单列颜色不横滑;精确目标歧义、不可用、行丢失、滑动失败、面板关闭均 fail-closed。 - 失败诊断只增加维度、横纵滑动次数、可见候选数量和终止原因,不记录规格文本、坐标、原始控件树或截图。 代码: - 分支:`fix/230-horizontal-spec-selection` - 提交:`7b9fcfb fix(agent): search horizontally for exact purchase color (#230)` - Agent:0.9.53(versionCode 66) 验证: - `PurchaseRehearsalExecutorTest` 定向测试通过;新增覆盖横向后页精确颜色、首屏零横滑、单列不横滑、横滑失败安全终止。 - 原有相似规格拒绝、纵向尺码、已选不重复点击、歧义与规格复核用例继续通过。 - `scripts/verify.ps1 -Component android`:Debug/Release 单元测试与 Debug APK 构建通过。 - `python dev_scripts/harness.py check --strict`、`git diff --check`:通过。 - 安装前设备 10(PKG110)运行中采购/采集任务均为 0。 - APK:6,623,150 bytes;SHA-256 `3D222F30246E007A5A91249AB51BA0608834DC13F01B2BAB93C6B7F259DA704F`。 - 已安装到 `192.168.0.173:42681`,回读 0.9.53(66),GoAuto 无障碍服务仍启用。 未自动重试 CG99,未修改地址、未创建订单、未支付。CG99 可由用户手动执行同任务重试验收。无长期规则或契约变化,跳过 Wiki 更新。 实施前工作区不存在未提交业务源码;既有 `settings.yml` 本机超时改动、重复 Wiki 镜像头、原型与临时文件均与本工单无关,其中原始控件树禁止入库,已全部原样保留且未纳入提交。
Author
Owner

v2 范围更新(CG99 真机回归)

0.9.53 真机重试 CG99 后,目标颜色已成功选中,但尺码未选中并返回无诊断后缀的旧错误“有界搜索后未找到精确规格”。数据库确认首趟探测存在 5 个尺码,固化目标尺码位于第 3 项;当前实现仅 dimension=color 进入横向兜底,尺码仍只执行纵向搜索。

v2 调整:

  • 将现有横向兜底泛化为颜色/尺码的“当前维度规格行”搜索,不改变当前可见与原纵向搜索主路径。
  • 每次重新解析后只从当前 dimension 的值构造视觉行并选择锚点;不得使用另一维度节点,也不得全局横滑。
  • 多值横向行允许搜索;若单屏只有一个值,仅在该值存在区别于主规格面板的宽屏横向可滚动祖先时允许横滑,避免把单列纵向列表误判为横向行。
  • 颜色点击导致 PDD 重排后,尺码阶段必须重新 capture/parse/定位尺码行,不能复用颜色锚点或旧节点。
  • 诊断中的 dimension 改为真实维度;精确匹配、歧义、不可用、稳定终止与禁止相似值边界不变。

新增验收:长尺码位于横向后页可精确选中;首屏尺码零横滑;颜色横向选中后尺码使用独立新锚点;单列且无横向容器的尺码不横滑;既有颜色及全部采购回归通过。

仍不修改服务端、规则、状态机、地址、价格、订单和支付行为;不自动重试 CG99。

## v2 范围更新(CG99 真机回归) 0.9.53 真机重试 CG99 后,目标颜色已成功选中,但尺码未选中并返回无诊断后缀的旧错误“有界搜索后未找到精确规格”。数据库确认首趟探测存在 5 个尺码,固化目标尺码位于第 3 项;当前实现仅 `dimension=color` 进入横向兜底,尺码仍只执行纵向搜索。 v2 调整: - 将现有横向兜底泛化为颜色/尺码的“当前维度规格行”搜索,不改变当前可见与原纵向搜索主路径。 - 每次重新解析后只从当前 dimension 的值构造视觉行并选择锚点;不得使用另一维度节点,也不得全局横滑。 - 多值横向行允许搜索;若单屏只有一个值,仅在该值存在区别于主规格面板的宽屏横向可滚动祖先时允许横滑,避免把单列纵向列表误判为横向行。 - 颜色点击导致 PDD 重排后,尺码阶段必须重新 capture/parse/定位尺码行,不能复用颜色锚点或旧节点。 - 诊断中的 dimension 改为真实维度;精确匹配、歧义、不可用、稳定终止与禁止相似值边界不变。 新增验收:长尺码位于横向后页可精确选中;首屏尺码零横滑;颜色横向选中后尺码使用独立新锚点;单列且无横向容器的尺码不横滑;既有颜色及全部采购回归通过。 仍不修改服务端、规则、状态机、地址、价格、订单和支付行为;不自动重试 CG99。
Author
Owner

v2 实施完成,待人工验收

  • 提交:4e6afc2 fix(agent): search horizontally for exact purchase size (#230)(基于 v1 7b9fcfb)
  • Agent:0.9.54(versionCode 67)

实现:

  • 横向兜底由仅 color 泛化为 color / size,但当前可见和原纵向有界搜索仍优先,原成功路径不进入新逻辑。
  • 每次只读取当前 dimension 的值并重新构造视觉行;颜色选中后尺码阶段重新 capture/parse,不复用颜色锚点。
  • 多值视觉行可进入横向搜索;单屏仅一个长规格时,只有存在区别于主规格面板的宽屏横向可滚动祖先才允许横滑。
  • Android 动作仍通过当前规格节点重新定位其最近横向滚动祖先,禁止全局横滑;目标逐字精确匹配、歧义/不可用/到边/失败关闭不变。
  • 错误诊断输出真实 dimension 及横纵次数、候选数、终止原因,不记录规格正文、坐标、控件树或截图。

验证:

  • 新增长尺码横向后页、单屏单个长尺码+独立横向容器、颜色/尺码分别重新定位行锚点、首屏尺码零横滑等测试,全部通过。
  • PurchaseRehearsalExecutorTest 定向测试通过。
  • scripts/verify.ps1 -Component android:Debug/Release 单测与 Debug APK 构建通过。
  • python dev_scripts/harness.py check --strict、git diff --check:通过。
  • 安装前设备 10(PKG110)运行中采购/采集任务均为 0。
  • APK:6,298,544 bytes;SHA-256 7AFBECC4276DE9F1DBFC5E7BE12D108A101998DB68B066E187210826D65A6460。
  • 已覆盖安装到 192.168.0.173:42681,回读为 0.9.54(67),GoAuto 无障碍服务仍启用。

未自动重试 CG99,未修改地址、未创建订单、未支付。请由用户手动执行同任务重试验收。无长期契约/规则变化,跳过 Wiki 更新;既有无关工作区改动继续保留。

## v2 实施完成,待人工验收 - 提交:`4e6afc2 fix(agent): search horizontally for exact purchase size (#230)`(基于 v1 `7b9fcfb`) - Agent:0.9.54(versionCode 67) 实现: - 横向兜底由仅 `color` 泛化为 `color` / `size`,但当前可见和原纵向有界搜索仍优先,原成功路径不进入新逻辑。 - 每次只读取当前 dimension 的值并重新构造视觉行;颜色选中后尺码阶段重新 capture/parse,不复用颜色锚点。 - 多值视觉行可进入横向搜索;单屏仅一个长规格时,只有存在区别于主规格面板的宽屏横向可滚动祖先才允许横滑。 - Android 动作仍通过当前规格节点重新定位其最近横向滚动祖先,禁止全局横滑;目标逐字精确匹配、歧义/不可用/到边/失败关闭不变。 - 错误诊断输出真实 `dimension` 及横纵次数、候选数、终止原因,不记录规格正文、坐标、控件树或截图。 验证: - 新增长尺码横向后页、单屏单个长尺码+独立横向容器、颜色/尺码分别重新定位行锚点、首屏尺码零横滑等测试,全部通过。 - `PurchaseRehearsalExecutorTest` 定向测试通过。 - `scripts/verify.ps1 -Component android`:Debug/Release 单测与 Debug APK 构建通过。 - `python dev_scripts/harness.py check --strict`、`git diff --check`:通过。 - 安装前设备 10(PKG110)运行中采购/采集任务均为 0。 - APK:6,298,544 bytes;SHA-256 `7AFBECC4276DE9F1DBFC5E7BE12D108A101998DB68B066E187210826D65A6460`。 - 已覆盖安装到 `192.168.0.173:42681`,回读为 0.9.54(67),GoAuto 无障碍服务仍启用。 未自动重试 CG99,未修改地址、未创建订单、未支付。请由用户手动执行同任务重试验收。无长期契约/规则变化,跳过 Wiki 更新;既有无关工作区改动继续保留。
Author
Owner

v3 开始实施

用户确认继续 #230 v3。最新 CG99 错误为 dimension=size;horizontalSwipes=0;verticalRecoverySwipes=0;visibleCandidates=2;reason=restoreSwipeFailed,设备已确认 0.9.54(67)。
修正上层同排多值即横滑、底层要求横向容器的不一致;横向容器不存在时按纵向网格继续有界搜索;滑动后重新定位,移除旧锚点回退,稳定判定包括布局变化并区分预算与边界。细分底层锚点、容器、手势失败诊断。补充真实结构回归,构建安装;不自动执行真实订单。
实际底层失败原因尚缺日志证据,不将缺少容器写为已证实根因。无 API、数据库、规则与业务安全边界变化,作为既有精确选择内部修复,无长期 Wiki 影响。
当前无 Gitea MCP,沿用已记录的安全配置 API 回退。

## v3 开始实施 用户确认继续 #230 v3。最新 CG99 错误为 dimension=size;horizontalSwipes=0;verticalRecoverySwipes=0;visibleCandidates=2;reason=restoreSwipeFailed,设备已确认 0.9.54(67)。 修正上层同排多值即横滑、底层要求横向容器的不一致;横向容器不存在时按纵向网格继续有界搜索;滑动后重新定位,移除旧锚点回退,稳定判定包括布局变化并区分预算与边界。细分底层锚点、容器、手势失败诊断。补充真实结构回归,构建安装;不自动执行真实订单。 实际底层失败原因尚缺日志证据,不将缺少容器写为已证实根因。无 API、数据库、规则与业务安全边界变化,作为既有精确选择内部修复,无长期 Wiki 影响。 当前无 Gitea MCP,沿用已记录的安全配置 API 回退。
Author
Owner

v4 开始实施:真机嵌套容器定位冲突

用户已授权修复。现场两个 RecyclerView 中心偏差18/20像素,旧定位只比较类型与中心±32,两个均命中使纵滑失败。人工从尺码标题上滑后目标精确文字出现,enabled/clickable=true、selected=false,祖先为外层规格容器。
方案:优先按当前节点路径及类型、完整边界校验重新定位;路径变化只允许唯一完整边界匹配,歧义或失效保持失败。补嵌套同中心与路径失效测试,构建安装,不自动下单。恢复既有滚动行为,无长期Wiki变化。当前Gitea MCP不可用,沿用API回退。

## v4 开始实施:真机嵌套容器定位冲突 用户已授权修复。现场两个 RecyclerView 中心偏差18/20像素,旧定位只比较类型与中心±32,两个均命中使纵滑失败。人工从尺码标题上滑后目标精确文字出现,enabled/clickable=true、selected=false,祖先为外层规格容器。 方案:优先按当前节点路径及类型、完整边界校验重新定位;路径变化只允许唯一完整边界匹配,歧义或失效保持失败。补嵌套同中心与路径失效测试,构建安装,不自动下单。恢复既有滚动行为,无长期Wiki变化。当前Gitea MCP不可用,沿用API回退。
Author
Owner

v4 实现、测试、安装完成,真机待验收

提交666d19a,基于v3提交c2c1044。此次仅修正swipePurchaseIn的容器重定位:递归路径与capture一致,优先当前路径+类型+四边界校验,路径变化时只接受唯一完整边界候选,冲突拒绝。
新增5项测试覆盖现场嵌套近中心容器、同边界按路径区分、路径变化唯一回退、旧路径被不同几何节点复用、类型及四边界校验。scripts/verify.ps1 -Component android 的Debug/Release全量单测和APK构建通过,harness check --strict及git diff --check通过。
设备10空闲检查通过,已覆盖安装192.168.0.173:42681,回读0.9.56(69),GoAuto无障碍仍启用。SHA256 D4C56CDAACF5083E7FE519E6D2CC6CF4F5946CCFC0450BE0015A7DEF7CDD8561。
未自动重试CG99、改地址或下单。实际选码成功仍需用户重试验证,不能以单测代替真机验收。无长期规则变化,跳过Wiki,无关改动保留。
补记v3:c2c1044实现普通网格纵向恢复及横滑失败继续搜索,相关回归及全量Android测试通过。上次集中回写遭429未成功。
当前Git远端仍返回HTTP429,c2c1044和666d19a尚未推送;远端恢复后补推送。

## v4 实现、测试、安装完成,真机待验收 提交666d19a,基于v3提交c2c1044。此次仅修正swipePurchaseIn的容器重定位:递归路径与capture一致,优先当前路径+类型+四边界校验,路径变化时只接受唯一完整边界候选,冲突拒绝。 新增5项测试覆盖现场嵌套近中心容器、同边界按路径区分、路径变化唯一回退、旧路径被不同几何节点复用、类型及四边界校验。scripts/verify.ps1 -Component android 的Debug/Release全量单测和APK构建通过,harness check --strict及git diff --check通过。 设备10空闲检查通过,已覆盖安装192.168.0.173:42681,回读0.9.56(69),GoAuto无障碍仍启用。SHA256 D4C56CDAACF5083E7FE519E6D2CC6CF4F5946CCFC0450BE0015A7DEF7CDD8561。 未自动重试CG99、改地址或下单。实际选码成功仍需用户重试验证,不能以单测代替真机验收。无长期规则变化,跳过Wiki,无关改动保留。 补记v3:c2c1044实现普通网格纵向恢复及横滑失败继续搜索,相关回归及全量Android测试通过。上次集中回写遭429未成功。 当前Git远端仍返回HTTP429,c2c1044和666d19a尚未推送;远端恢复后补推送。
Author
Owner

补记:远端恢复,c2c1044与666d19a已随#232推送成功。用户反馈CG99采购成功,记录真机结果;未视作整个工单正式验收关闭。

补记:远端恢复,c2c1044与666d19a已随#232推送成功。用户反馈CG99采购成功,记录真机结果;未视作整个工单正式验收关闭。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#230