Agent 可配置随机采集间隔与任务结束冷却 #102

Closed
opened 2026-08-26 20:28:36 +08:00 by ila · 12 comments
Owner

所属与来源

  • 父 MVP:#86 Android Agent 设备端任务中心与现场运维。
  • 关联:#98 状态页主动检查、#100 Agent 四 Tab 信息精简、#101 当前 PDD 商品页临时采集。
  • 来源:用户于 2026-08-26 提出:在 Agent 设置中增加采集任务间隔秒数;每个采集任务结束后暂停指定秒数,再领取下一条采集任务。
  • 用户已确认建立独立工单,并要求先更新 Agent 设置页小范围原型,审核通过后才能编写生产代码。
  • 类型:Android / Agent 设置 / 任务调度 / UI。
  • 当前阶段:v3 随机采集间隔已按提交 f79f824 实施并完成自动化验证、Wiki 更新与镜像同步,现处于待验收;用户明确验收前工单保持开启。真机覆盖安装、界面检查和连续采集尚未执行。

当前事实

  • 当前采集任务执行器结束并释放本地任务互斥锁后会立即触发下一次同步,因此可能马上领取下一条采集任务。
  • 当前已有的固定 15 秒冷却只用于“任务结束后确认队列为空并返回 Agent 界面”,期间仍允许领取新任务;它不是采集间隔。
  • 采购任务在调度中优先于采集任务。本工单不得改变采购优先级、采购执行或支付边界。

目标

为每台 Agent 增加本地、可持久化的“采集间隔”设置。采集任务实际结束后,Agent 先可靠提交或持久化结果,再等待配置时间;间隔结束后主动检查下一条采集任务,降低连续采集造成的页面状态不稳定,同时保持采购任务可正常执行。

已确认方案

设置

  • 设置名称固定为“采集间隔”,不使用容易误解为采购也受影响的“任务间隔”。
  • 位于 Agent“设置”Tab 的“任务执行”组件组。
  • 数值单位为秒,只接受整数 0~600,默认 15。
  • 0 表示不等待。
  • 设置保存在当前 Android 安装实例本地,不新增 Server API 或数据库字段。
  • 保存成功显示简短反馈;空值、非整数和越界时不保存,并在输入框附近提示“请输入 0~600 的整数”。
  • 修改设置只影响下一次采集任务结束后新创建的间隔,不改写已经开始的倒计时。

调度语义

  • 采集执行实际进入终态后均创建间隔:completed、completed_partial 和 failed。
  • 任务在执行前因配置、认证或网络失败而没有实际进入采集执行器时,不创建间隔。
  • 必须先让结果得到服务端确认,或安全写入既有本地持久化结果/Outbox,再记录间隔截止时间;不得因为等待而延迟结果提交。
  • 间隔截止时间在本地持久化,Agent 服务或进程重启不能绕过;异常时钟变化后的剩余时间必须限制在当前配置上限内,不能无限等待。
  • 间隔只阻止 nextTask、采集领取和开始,不阻止心跳、结果补交、历史同步、采购任务检查或采购执行。
  • 采购任务仍保持现有优先级,可以在采集间隔期间领取;采购结束不会重新开始或延长采集间隔。
  • 间隔结束时合并触发一次现有调度器检查,不新增第二个轮询器;重复定时回调和手动刷新不得并发领取。
  • 设置为 0 时保持现有“任务结束后立即检查”的行为。

手动入口与反馈

  • 状态 Tab 下拉“检查任务”不绕过采集间隔;仍可完成心跳和采购检查,若没有采购任务则提示“采集间隔中,还需 N 秒”。
  • 采集 Tab 的重新采集以及 #101 后续实现的“采集当前商品”同样遵守间隔;间隔未结束时不创建或启动新的采集执行。
  • 状态页在间隔中显示“采集间隔中 · 还剩 N 秒”,不显示技术错误码。
  • 间隔结束且没有任务时恢复既有在线空闲显示。

与15秒自动返回、亮屏的关系

  • “采集间隔”和现有“任务结束15秒后返回 Agent”是两个独立状态,不复用字段或状态机。
  • 返回 Agent 只改变前台页面,不清除或绕过采集间隔。
  • 为保证间隔结束后仍可自动执行,采集间隔期间继续使用现有有界亮屏策略;间隔完成、被采购任务接管或服务停止时及时释放,不能泄漏 WakeLock。
  • 不自动解锁 PIN、图案或密码。

非目标

  • 不修改服务端、数据库、Admin 页面或设备管理状态。
  • 不改变采购任务调度、规格选择、地址、创建订单或支付行为。
  • 不把间隔作为规避 PDD 风控的承诺。
  • 不增加随机间隔、按规则单独配置、云端批量配置或账号级配置。
  • 不新增轮询器,不改变现有15秒心跳和自动检查周期。

原型要求

第一阶段制作小范围 Agent 原型,复用 #100 已确认的 390×844 深色四 Tab 基线,不覆盖历史原型:

  1. 设置页默认状态:任务执行组件组,采集间隔为 15 秒,提供保存按钮。
  2. 校验失败状态:示例值 601,输入框就近提示“请输入 0~600 的整数”,不显示保存成功。
  3. 保存成功状态:示例值 30,显示“已保存,下次采集任务结束后生效”。
  4. 状态页间隔状态:显示“采集间隔中 · 还剩 12 秒”,手动检查反馈不绕过间隔。
  5. 输入框和按钮高度不少于 48dp,数字输入有可访问名称,错误不能只靠颜色表达。
  6. 导出到 prototypes/<本工单号>/v1/index.html,资源相对且可离线浏览。

设计验收

  • “采集间隔”位于独立“任务执行”组件组,不与任务记录同步天数或连接设置混淆。
  • 默认值、单位、范围、0 的含义和保存动作清晰。
  • 可点击演示正常保存、越界错误和间隔中的状态反馈。
  • 不出现采购间隔、创建订单或支付能力。
  • QuantUX 在线原型和本地 HTML 均可审阅,用户明确审核通过。

后续生产验收

  • 设置默认15秒,可保存并在重启后读取;只接受0~600整数。
  • 成功、部分完成和失败采集结束后先提交/持久化结果,再启动间隔。
  • 间隔内不请求或领取下一条采集任务,但心跳、结果补交和采购正常。
  • 间隔结束主动合并触发一次现有调度,不重复领取。
  • 手动检查、重新采集和当前页采集不绕过间隔,并有剩余秒数提示。
  • 设置0秒保持现有立即检查行为。
  • 服务重启不能绕过未结束间隔;亮屏资源有界且无泄漏。
  • 既有自动返回、任务串行、采购优先和15秒轮询测试通过。

验证计划

  • 单元测试:输入策略边界(空、负数、0、15、600、601、小数、超长值);间隔状态机;重启恢复与时钟异常;0秒路径。
  • 调度测试:结果先于间隔、采购不被阻止、采集被阻止、到期只触发一次、手动检查不绕过、重复回调合并。
  • UI 测试:默认、错误、保存成功、间隔状态、48dp触控与可访问描述。
  • 回归:既有 IdleReturnCoordinator、任务互斥、心跳、采购优先和屏幕保持测试。
  • 真机:获用户授权后在一台设备执行连续两个采集任务,验证间隔、倒计时、采购不受影响和无锁屏;不采购、不创建订单、不支付。

风险

  • 把采集间隔错误复用为自动返回冷却,会导致等待逻辑互相取消;必须使用独立状态。
  • 在任务结果提交前等待会让服务端误判任务运行中;必须先提交或持久化终态。
  • 只做进程内计时会被重启绕过;必须持久化截止时间并限制异常剩余时长。
  • 长时间保持亮屏会增加耗电;范围限制为600秒并在到期或被其他任务接管时释放。
  • 若以后需要20台设备统一配置,应另建 Admin/Server 集中配置工单,不在本任务扩展。

文档影响

  • 当前建单和原型阶段没有已实现长期事实,跳过 Wiki。
  • 生产实施后需要更新 Android 运行说明、业务规则中的 Agent 调度行为;如果接口和服务端不变,不更新 Agent API 契约。

需求变更:随机采集间隔范围(2026-08-27)

变更来源

  • 用户明确要求直接修改 #102,不另建增强工单。
  • 原固定单值“采集间隔”调整为“最短秒数~最长秒数”的随机范围;其余采购优先、结果先提交、持久恢复、手动入口不可绕过和支付边界保持不变。
  • 已提交的固定间隔实现 3164675 与 v1 原型保留为历史基线,不回退、不覆盖;随机范围最终确认原型为 prototypes/102/v3/index.html(提交 fc52ec5),用户已于 2026-08-27 审核通过。

更新后的设置契约

  • 设置卡片标题为“采集任务执行间隔”,显示两个数值输入框、“~”、单位“秒”和保存按钮;不显示“最短”“最长”,也不使用“采购间隔”或“风控间隔”。输入框通过无障碍描述区分范围起始值和结束值。
  • 最短值和最长值都只接受 0~600 的整数,默认值为 15~15,以兼容现有固定 15 秒行为。
  • 最短值不得大于最长值;不合法时不保存,并在对应输入附近提示普通人可理解的原因。
  • 两值相等时是固定间隔;0~0 表示不等待;当范围包含 0 时允许本次随机到 0 并立即继续现有调度。
  • 保存成功提示“已保存,下次采集任务结束后生效”。修改设置不改变已经开始的本次倒计时。
  • 设置继续只保存在当前 Android 安装实例本地,不新增 Server API、数据库字段或 Admin 设置。

更新后的随机与恢复契约

  • 只有采集结果被服务端安全接收后,才在闭区间 [最短秒数, 最长秒数] 内等概率随机一次整数秒;领取前失败、配置/认证错误、结果未安全提交和采购任务结束均不随机。
  • 本次随机值、开始依据和截止时间作为同一个本地间隔 ticket 固定保存;服务或进程重启只能恢复剩余时间,不能重新随机。
  • 系统时间回拨时最多按本次已抽取的原始随机秒数重新截断,不能改用当前设置重新抽取,也不能无限等待。
  • 状态页只显示本次已经抽中的实际剩余时间,例如“采集间隔中 · 还剩 23 秒”,不展示随机算法或技术字段。
  • 随机数不是安全凭据,使用可测试的均匀整数随机即可;测试必须注入可控随机源,覆盖上下边界且避免概率性测试。
  • 随机间隔不作为规避 PDD 风控的承诺。

v3 原型要求(已通过)

  1. 基于 #102 v1 和当前 Agent 设置页制作新版本,不覆盖 v1、v2。
  2. 设置页默认状态显示 15~15 秒;不显示“最短”“最长”,两个输入仍有“范围起始值 / 范围结束值”的无障碍描述。
  3. 演示合法范围 15~30 的保存成功反馈。
  4. 演示最短值大于最长值、空值、非整数和超出 0~600 的就近错误提示。
  5. 设置页不显示“相同表示固定;0~0 表示不等待”辅助文字,避免占用区域;数值语义仍按本工单设置契约执行。
  6. 状态页沿用已抽中后的单一剩余秒数,不显示范围倒计时。
  7. 输入和保存按钮触控目标不少于 48dp,错误不能只靠颜色表达。
  8. 最终确认版导出到 prototypes/102/v3/index.html,资源相对、可离线浏览;用户已于 2026-08-27 明确审核通过。

更新后的生产验收

  • 默认 15~15,可保存并在重启后读取;两个值均只接受 0~600 整数且最短不大于最长。
  • 相等范围保持固定间隔,0~0 保持立即检查,范围包含 0 时允许抽到 0。
  • 每个符合条件的采集终态只随机一次,并持久化本次随机值和截止时间。
  • 服务/进程重启、设置修改和系统时间回拨都不会让同一间隔重新随机。
  • 随机结果始终包含上下边界且使用可控随机源完成确定性单元测试。
  • 间隔内只阻止采集;采购、心跳、Outbox、历史刷新/同步继续正常。
  • 状态下拉、重新采集以及后续 #101 当前页采集都不能绕过,并显示实际剩余秒数。
  • 既有自动返回、串行、采购优先、有界亮屏和永久禁止支付规则保持不变。

文档影响

  • 当前只是需求与设计契约变化,尚未形成新的已实现长期事实;本次不更新 Wiki。
  • v3 原型对应的生产实施完成后再更新业务规则、Android 运行说明和本地验证页;接口未变化时仍不更新 Agent API 契约。
## 所属与来源 - 父 MVP:#86 Android Agent 设备端任务中心与现场运维。 - 关联:#98 状态页主动检查、#100 Agent 四 Tab 信息精简、#101 当前 PDD 商品页临时采集。 - 来源:用户于 2026-08-26 提出:在 Agent 设置中增加采集任务间隔秒数;每个采集任务结束后暂停指定秒数,再领取下一条采集任务。 - 用户已确认建立独立工单,并要求先更新 Agent 设置页小范围原型,审核通过后才能编写生产代码。 - 类型:Android / Agent 设置 / 任务调度 / UI。 - 当前阶段:**v3 随机采集间隔已按提交 `f79f824` 实施并完成自动化验证、Wiki 更新与镜像同步,现处于待验收;用户明确验收前工单保持开启。真机覆盖安装、界面检查和连续采集尚未执行。** ## 当前事实 - 当前采集任务执行器结束并释放本地任务互斥锁后会立即触发下一次同步,因此可能马上领取下一条采集任务。 - 当前已有的固定 15 秒冷却只用于“任务结束后确认队列为空并返回 Agent 界面”,期间仍允许领取新任务;它不是采集间隔。 - 采购任务在调度中优先于采集任务。本工单不得改变采购优先级、采购执行或支付边界。 ## 目标 为每台 Agent 增加本地、可持久化的“采集间隔”设置。采集任务实际结束后,Agent 先可靠提交或持久化结果,再等待配置时间;间隔结束后主动检查下一条采集任务,降低连续采集造成的页面状态不稳定,同时保持采购任务可正常执行。 ## 已确认方案 ### 设置 - 设置名称固定为“采集间隔”,不使用容易误解为采购也受影响的“任务间隔”。 - 位于 Agent“设置”Tab 的“任务执行”组件组。 - 数值单位为秒,只接受整数 `0~600`,默认 `15`。 - `0` 表示不等待。 - 设置保存在当前 Android 安装实例本地,不新增 Server API 或数据库字段。 - 保存成功显示简短反馈;空值、非整数和越界时不保存,并在输入框附近提示“请输入 0~600 的整数”。 - 修改设置只影响下一次采集任务结束后新创建的间隔,不改写已经开始的倒计时。 ### 调度语义 - 采集执行实际进入终态后均创建间隔:`completed`、`completed_partial` 和 `failed`。 - 任务在执行前因配置、认证或网络失败而没有实际进入采集执行器时,不创建间隔。 - 必须先让结果得到服务端确认,或安全写入既有本地持久化结果/Outbox,再记录间隔截止时间;不得因为等待而延迟结果提交。 - 间隔截止时间在本地持久化,Agent 服务或进程重启不能绕过;异常时钟变化后的剩余时间必须限制在当前配置上限内,不能无限等待。 - 间隔只阻止 `nextTask`、采集领取和开始,不阻止心跳、结果补交、历史同步、采购任务检查或采购执行。 - 采购任务仍保持现有优先级,可以在采集间隔期间领取;采购结束不会重新开始或延长采集间隔。 - 间隔结束时合并触发一次现有调度器检查,不新增第二个轮询器;重复定时回调和手动刷新不得并发领取。 - 设置为 `0` 时保持现有“任务结束后立即检查”的行为。 ### 手动入口与反馈 - 状态 Tab 下拉“检查任务”不绕过采集间隔;仍可完成心跳和采购检查,若没有采购任务则提示“采集间隔中,还需 N 秒”。 - 采集 Tab 的重新采集以及 #101 后续实现的“采集当前商品”同样遵守间隔;间隔未结束时不创建或启动新的采集执行。 - 状态页在间隔中显示“采集间隔中 · 还剩 N 秒”,不显示技术错误码。 - 间隔结束且没有任务时恢复既有在线空闲显示。 ### 与15秒自动返回、亮屏的关系 - “采集间隔”和现有“任务结束15秒后返回 Agent”是两个独立状态,不复用字段或状态机。 - 返回 Agent 只改变前台页面,不清除或绕过采集间隔。 - 为保证间隔结束后仍可自动执行,采集间隔期间继续使用现有有界亮屏策略;间隔完成、被采购任务接管或服务停止时及时释放,不能泄漏 WakeLock。 - 不自动解锁 PIN、图案或密码。 ## 非目标 - 不修改服务端、数据库、Admin 页面或设备管理状态。 - 不改变采购任务调度、规格选择、地址、创建订单或支付行为。 - 不把间隔作为规避 PDD 风控的承诺。 - 不增加随机间隔、按规则单独配置、云端批量配置或账号级配置。 - 不新增轮询器,不改变现有15秒心跳和自动检查周期。 ## 原型要求 第一阶段制作小范围 Agent 原型,复用 #100 已确认的 390×844 深色四 Tab 基线,不覆盖历史原型: 1. 设置页默认状态:任务执行组件组,采集间隔为 15 秒,提供保存按钮。 2. 校验失败状态:示例值 601,输入框就近提示“请输入 0~600 的整数”,不显示保存成功。 3. 保存成功状态:示例值 30,显示“已保存,下次采集任务结束后生效”。 4. 状态页间隔状态:显示“采集间隔中 · 还剩 12 秒”,手动检查反馈不绕过间隔。 5. 输入框和按钮高度不少于 48dp,数字输入有可访问名称,错误不能只靠颜色表达。 6. 导出到 `prototypes/<本工单号>/v1/index.html`,资源相对且可离线浏览。 ## 设计验收 - [x] “采集间隔”位于独立“任务执行”组件组,不与任务记录同步天数或连接设置混淆。 - [x] 默认值、单位、范围、`0` 的含义和保存动作清晰。 - [x] 可点击演示正常保存、越界错误和间隔中的状态反馈。 - [x] 不出现采购间隔、创建订单或支付能力。 - [x] QuantUX 在线原型和本地 HTML 均可审阅,用户明确审核通过。 ## 后续生产验收 - [ ] 设置默认15秒,可保存并在重启后读取;只接受0~600整数。 - [ ] 成功、部分完成和失败采集结束后先提交/持久化结果,再启动间隔。 - [ ] 间隔内不请求或领取下一条采集任务,但心跳、结果补交和采购正常。 - [ ] 间隔结束主动合并触发一次现有调度,不重复领取。 - [ ] 手动检查、重新采集和当前页采集不绕过间隔,并有剩余秒数提示。 - [ ] 设置0秒保持现有立即检查行为。 - [ ] 服务重启不能绕过未结束间隔;亮屏资源有界且无泄漏。 - [ ] 既有自动返回、任务串行、采购优先和15秒轮询测试通过。 ## 验证计划 - 单元测试:输入策略边界(空、负数、0、15、600、601、小数、超长值);间隔状态机;重启恢复与时钟异常;0秒路径。 - 调度测试:结果先于间隔、采购不被阻止、采集被阻止、到期只触发一次、手动检查不绕过、重复回调合并。 - UI 测试:默认、错误、保存成功、间隔状态、48dp触控与可访问描述。 - 回归:既有 IdleReturnCoordinator、任务互斥、心跳、采购优先和屏幕保持测试。 - 真机:获用户授权后在一台设备执行连续两个采集任务,验证间隔、倒计时、采购不受影响和无锁屏;不采购、不创建订单、不支付。 ## 风险 - 把采集间隔错误复用为自动返回冷却,会导致等待逻辑互相取消;必须使用独立状态。 - 在任务结果提交前等待会让服务端误判任务运行中;必须先提交或持久化终态。 - 只做进程内计时会被重启绕过;必须持久化截止时间并限制异常剩余时长。 - 长时间保持亮屏会增加耗电;范围限制为600秒并在到期或被其他任务接管时释放。 - 若以后需要20台设备统一配置,应另建 Admin/Server 集中配置工单,不在本任务扩展。 ## 文档影响 - 当前建单和原型阶段没有已实现长期事实,跳过 Wiki。 - 生产实施后需要更新 Android 运行说明、业务规则中的 Agent 调度行为;如果接口和服务端不变,不更新 Agent API 契约。 ## 需求变更:随机采集间隔范围(2026-08-27) ### 变更来源 - 用户明确要求直接修改 #102,不另建增强工单。 - 原固定单值“采集间隔”调整为“最短秒数~最长秒数”的随机范围;其余采购优先、结果先提交、持久恢复、手动入口不可绕过和支付边界保持不变。 - 已提交的固定间隔实现 `3164675` 与 v1 原型保留为历史基线,不回退、不覆盖;随机范围最终确认原型为 `prototypes/102/v3/index.html`(提交 `fc52ec5`),用户已于 2026-08-27 审核通过。 ### 更新后的设置契约 - 设置卡片标题为“采集任务执行间隔”,显示两个数值输入框、“~”、单位“秒”和保存按钮;不显示“最短”“最长”,也不使用“采购间隔”或“风控间隔”。输入框通过无障碍描述区分范围起始值和结束值。 - 最短值和最长值都只接受 `0~600` 的整数,默认值为 `15~15`,以兼容现有固定 15 秒行为。 - 最短值不得大于最长值;不合法时不保存,并在对应输入附近提示普通人可理解的原因。 - 两值相等时是固定间隔;`0~0` 表示不等待;当范围包含 0 时允许本次随机到 0 并立即继续现有调度。 - 保存成功提示“已保存,下次采集任务结束后生效”。修改设置不改变已经开始的本次倒计时。 - 设置继续只保存在当前 Android 安装实例本地,不新增 Server API、数据库字段或 Admin 设置。 ### 更新后的随机与恢复契约 - 只有采集结果被服务端安全接收后,才在闭区间 `[最短秒数, 最长秒数]` 内等概率随机一次整数秒;领取前失败、配置/认证错误、结果未安全提交和采购任务结束均不随机。 - 本次随机值、开始依据和截止时间作为同一个本地间隔 ticket 固定保存;服务或进程重启只能恢复剩余时间,不能重新随机。 - 系统时间回拨时最多按本次已抽取的原始随机秒数重新截断,不能改用当前设置重新抽取,也不能无限等待。 - 状态页只显示本次已经抽中的实际剩余时间,例如“采集间隔中 · 还剩 23 秒”,不展示随机算法或技术字段。 - 随机数不是安全凭据,使用可测试的均匀整数随机即可;测试必须注入可控随机源,覆盖上下边界且避免概率性测试。 - 随机间隔不作为规避 PDD 风控的承诺。 ### v3 原型要求(已通过) 1. 基于 #102 v1 和当前 Agent 设置页制作新版本,不覆盖 v1、v2。 2. 设置页默认状态显示 `15~15 秒`;不显示“最短”“最长”,两个输入仍有“范围起始值 / 范围结束值”的无障碍描述。 3. 演示合法范围 `15~30` 的保存成功反馈。 4. 演示最短值大于最长值、空值、非整数和超出 `0~600` 的就近错误提示。 5. 设置页不显示“相同表示固定;0~0 表示不等待”辅助文字,避免占用区域;数值语义仍按本工单设置契约执行。 6. 状态页沿用已抽中后的单一剩余秒数,不显示范围倒计时。 7. 输入和保存按钮触控目标不少于 48dp,错误不能只靠颜色表达。 8. 最终确认版导出到 `prototypes/102/v3/index.html`,资源相对、可离线浏览;用户已于 2026-08-27 明确审核通过。 ### 更新后的生产验收 - [ ] 默认 `15~15`,可保存并在重启后读取;两个值均只接受 `0~600` 整数且最短不大于最长。 - [ ] 相等范围保持固定间隔,`0~0` 保持立即检查,范围包含 0 时允许抽到 0。 - [ ] 每个符合条件的采集终态只随机一次,并持久化本次随机值和截止时间。 - [ ] 服务/进程重启、设置修改和系统时间回拨都不会让同一间隔重新随机。 - [ ] 随机结果始终包含上下边界且使用可控随机源完成确定性单元测试。 - [ ] 间隔内只阻止采集;采购、心跳、Outbox、历史刷新/同步继续正常。 - [ ] 状态下拉、重新采集以及后续 #101 当前页采集都不能绕过,并显示实际剩余秒数。 - [ ] 既有自动返回、串行、采购优先、有界亮屏和永久禁止支付规则保持不变。 ### 文档影响 - 当前只是需求与设计契约变化,尚未形成新的已实现长期事实;本次不更新 Wiki。 - v3 原型对应的生产实施完成后再更新业务规则、Android 运行说明和本地验证页;接口未变化时仍不更新 Agent API 契约。
Author
Owner

#102 v1 小范围原型已完成,等待审核

本阶段只完成工单、行为契约和设计证据,尚未修改 Android、Server 或数据库生产代码。

设计证据

原型覆盖

  • 设置页独立“任务执行”组件组。
  • “采集间隔”默认15秒,范围0~600秒,0表示不等待。
  • 保存30秒后的成功反馈。
  • 输入601时的就近校验错误。
  • 状态页“采集间隔中 · 还剩12秒”及手动检查不绕过间隔的反馈。
  • 输入框和保存按钮为48dp触控高度;错误同时使用文字,不只依赖颜色。
  • 原型中的“原型审核”跳转按钮仅用于切换审核状态,不属于生产界面。

验证

  • QuantUX 导出一致性验证:PASS;4个界面、100个组件、10条交互连线,无运行时错误和不支持组件。
  • 离线HTML静态检查:默认值、越界值、错误、保存反馈、倒计时齐全;无远程脚本/样式依赖。
  • 未发现“采购间隔”“创建订单”或“支付”动作。
  • python dev_scripts/harness.py check --strict:通过。
  • git diff --check:通过。

文档影响

当前仍为待审核设计,没有已实现长期事实,按工单约定跳过 Wiki。

状态:等待用户审核 #102 v1;审核通过后才实施 Android 设置、冷却状态机和调度测试。

## #102 v1 小范围原型已完成,等待审核 本阶段只完成工单、行为契约和设计证据,尚未修改 Android、Server 或数据库生产代码。 ### 设计证据 - QuantUX App:`6a8edc0c191a826306a7f38f` - 在线地址:https://qux.ilapage.cn/#/apps/6a8edc0c191a826306a7f38f.html - 本地离线快照:`prototypes/102/v1/index.html` - Git 提交:`8c51754` - 基线:复用 #100 已确认的 390×844 深色四 Tab 布局,未覆盖历史原型。 ### 原型覆盖 - 设置页独立“任务执行”组件组。 - “采集间隔”默认15秒,范围0~600秒,0表示不等待。 - 保存30秒后的成功反馈。 - 输入601时的就近校验错误。 - 状态页“采集间隔中 · 还剩12秒”及手动检查不绕过间隔的反馈。 - 输入框和保存按钮为48dp触控高度;错误同时使用文字,不只依赖颜色。 - 原型中的“原型审核”跳转按钮仅用于切换审核状态,不属于生产界面。 ### 验证 - QuantUX 导出一致性验证:`PASS`;4个界面、100个组件、10条交互连线,无运行时错误和不支持组件。 - 离线HTML静态检查:默认值、越界值、错误、保存反馈、倒计时齐全;无远程脚本/样式依赖。 - 未发现“采购间隔”“创建订单”或“支付”动作。 - `python dev_scripts/harness.py check --strict`:通过。 - `git diff --check`:通过。 ### 文档影响 当前仍为待审核设计,没有已实现长期事实,按工单约定跳过 Wiki。 状态:**等待用户审核 #102 v1;审核通过后才实施 Android 设置、冷却状态机和调度测试。**
Author
Owner

用户于 2026-08-26 明确确认 #102 v1 原型通过验收,授权开始生产实施。实施范围保持为 Android 本地设置、独立采集间隔状态机、调度与状态反馈;不修改 Server、数据库、采购流程或支付边界。

用户于 2026-08-26 明确确认 #102 v1 原型通过验收,授权开始生产实施。实施范围保持为 Android 本地设置、独立采集间隔状态机、调度与状态反馈;不修改 Server、数据库、采购流程或支付边界。
ila changed title from Agent 可配置采集间隔与任务结束冷却(先行原型) to Agent 可配置采集间隔与任务结束冷却 2026-08-26 22:17:10 +08:00
Author
Owner

生产实现完成,等待用户验收

实现

  • 设置 Tab 新增独立“任务执行”组件组;“采集间隔”默认 15 秒,只接受 0~600 整数,0 表示不等待,保存后仅影响下一次新间隔。
  • 采集完成、部分完成或失败的结果被服务端安全接收后,持久化本次间隔截止时间;结果未安全提交或任务尚未进入执行时不开始间隔。
  • 新增独立采集间隔状态机,不复用 15 秒自动返回。进程/服务重启恢复倒计时,系统时间回拨时按本次原始时长截断。
  • 调度在间隔期间仍先检查采购;采购可优先执行,心跳、采购 Outbox、记录刷新与同步不受影响。只有下一次采集请求/领取/开始被阻止;到期合并触发现有调度器一次。
  • 状态页显示“在线 · 采集间隔中”和剩余秒数;状态下拉与采集记录“重新采集”均不能绕过并给出可读提示。
  • 新增独立、有界的 :collection-cooldown WakeLock;采购接管或服务停止时释放,采购结束且原间隔未到期时恢复。
  • 未修改 Server、数据库、Admin、采购动作或支付边界;#101 尚未实施,其未来“当前商品采集”入口应复用本次本地间隔门禁。

设计与代码

  • 已确认原型:QuantUX 6a8edc0c191a826306a7f38f
  • 本地审核快照:prototypes/102/v1/index.html
  • 实现提交:3164675(已推送 main)

验证

  • android\\gradlew.bat testDebugUnitTest:通过。
  • .\\scripts\\verify.ps1 -Component android:通过(Debug/Release 单测及 Debug APK)。
  • android\\gradlew.bat assembleRelease:通过。
  • python dev_scripts/harness.py check --strict:通过。
  • git diff --check:通过。
  • 单元测试覆盖输入边界、0 秒、倒计时取整/过期、时钟回拨截断、设置变更不影响当前 ticket、采购优先和亮屏组合策略。

长期文档

已先更新线上 Wiki 并回读 revision,再完成本地镜像同步与 sync --check:

  • Business-Rules-and-Glossary:d234ec2be1a4f6d01a9a46a90a901abdebd229be
  • Local-Development-and-Verification:c31d953495bb18ebfb1c7de0015e987c42dd43e4

Agent API 没有变化,因此未更新 API 契约。

未验证与验收建议

尚未安装到真机,也未创建采集或采购任务。请在设备空闲时覆盖安装后重点验收:

  1. 设置默认值、0/15/600 和越界提示;
  2. 连续两条采集之间的倒计时、状态下拉与“重新采集”阻止;
  3. 间隔中重启 Agent 后继续倒计时;
  4. 间隔中采购仍优先(此项若涉及正式采购必须另行授权);
  5. :collection-cooldown WakeLock 到期或停止服务后释放。

状态:待用户验收,工单保持打开。

## 生产实现完成,等待用户验收 ### 实现 - 设置 Tab 新增独立“任务执行”组件组;“采集间隔”默认 15 秒,只接受 0~600 整数,0 表示不等待,保存后仅影响下一次新间隔。 - 采集完成、部分完成或失败的结果被服务端安全接收后,持久化本次间隔截止时间;结果未安全提交或任务尚未进入执行时不开始间隔。 - 新增独立采集间隔状态机,不复用 15 秒自动返回。进程/服务重启恢复倒计时,系统时间回拨时按本次原始时长截断。 - 调度在间隔期间仍先检查采购;采购可优先执行,心跳、采购 Outbox、记录刷新与同步不受影响。只有下一次采集请求/领取/开始被阻止;到期合并触发现有调度器一次。 - 状态页显示“在线 · 采集间隔中”和剩余秒数;状态下拉与采集记录“重新采集”均不能绕过并给出可读提示。 - 新增独立、有界的 `:collection-cooldown` WakeLock;采购接管或服务停止时释放,采购结束且原间隔未到期时恢复。 - 未修改 Server、数据库、Admin、采购动作或支付边界;#101 尚未实施,其未来“当前商品采集”入口应复用本次本地间隔门禁。 ### 设计与代码 - 已确认原型:QuantUX `6a8edc0c191a826306a7f38f` - 本地审核快照:`prototypes/102/v1/index.html` - 实现提交:`3164675`(已推送 `main`) ### 验证 - `android\\gradlew.bat testDebugUnitTest`:通过。 - `.\\scripts\\verify.ps1 -Component android`:通过(Debug/Release 单测及 Debug APK)。 - `android\\gradlew.bat assembleRelease`:通过。 - `python dev_scripts/harness.py check --strict`:通过。 - `git diff --check`:通过。 - 单元测试覆盖输入边界、0 秒、倒计时取整/过期、时钟回拨截断、设置变更不影响当前 ticket、采购优先和亮屏组合策略。 ### 长期文档 已先更新线上 Wiki 并回读 revision,再完成本地镜像同步与 `sync --check`: - Business-Rules-and-Glossary:`d234ec2be1a4f6d01a9a46a90a901abdebd229be` - Local-Development-and-Verification:`c31d953495bb18ebfb1c7de0015e987c42dd43e4` Agent API 没有变化,因此未更新 API 契约。 ### 未验证与验收建议 尚未安装到真机,也未创建采集或采购任务。请在设备空闲时覆盖安装后重点验收: 1. 设置默认值、0/15/600 和越界提示; 2. 连续两条采集之间的倒计时、状态下拉与“重新采集”阻止; 3. 间隔中重启 Agent 后继续倒计时; 4. 间隔中采购仍优先(此项若涉及正式采购必须另行授权); 5. `:collection-cooldown` WakeLock 到期或停止服务后释放。 状态:**待用户验收,工单保持打开。**
Author
Owner

2026-08-27 真机安装记录:

  • 设备:一加 PKG110(序列号仅在本地检查,未写入工单)
  • 安装前确认 Agent 本地没有活动采集/采购任务
  • APK:提交 3164675 对应 Debug APK
  • adb install -r:Success
  • 已安装版本:0.8.0 (versionCode 12)
  • Agent 已启动到前台;“采集采购助手”无障碍服务仍为启用
  • 设备保留的服务地址为 http://192.168.0.224:8010,当前连接失败,因此本次只完成安全覆盖安装,尚未进行 #102 连续采集/倒计时真机验收,也未触发采购、创建订单或支付

工单继续保持待验收。

2026-08-27 真机安装记录: - 设备:一加 PKG110(序列号仅在本地检查,未写入工单) - 安装前确认 Agent 本地没有活动采集/采购任务 - APK:提交 `3164675` 对应 Debug APK - `adb install -r`:Success - 已安装版本:`0.8.0 (versionCode 12)` - Agent 已启动到前台;“采集采购助手”无障碍服务仍为启用 - 设备保留的服务地址为 `http://192.168.0.224:8010`,当前连接失败,因此本次只完成安全覆盖安装,尚未进行 #102 连续采集/倒计时真机验收,也未触发采购、创建订单或支付 工单继续保持待验收。
ila changed title from Agent 可配置采集间隔与任务结束冷却 to Agent 可配置随机采集间隔与任务结束冷却 2026-08-27 09:01:35 +08:00
Author
Owner

已按用户 2026-08-27 的明确要求直接修改 #102,不另建工单。

变更结论:

  • 固定单值改为“最短秒数~最长秒数”的闭区间随机整数。
  • 默认 15~15,兼容当前固定 15 秒实现;两值相等表示固定,0~0 表示不等待。
  • 每次符合条件的采集结果安全提交后只随机一次,并把本次随机值与截止时间固定持久化;重启、改设置和系统时间回拨均不得重新随机。
  • 采购优先、手动入口不可绕过、有界亮屏、无 Server/DB 变化和永久禁止支付等边界保持不变。
  • 现有 v1 与提交 3164675 保留为基线,不覆盖、不回退。
  • 工单已退回设计门禁:下一步制作 prototypes/102/v2/index.html;用户审核 v2 前不继续修改 Android 生产代码。
  • 当前仅更新工单需求与验收契约,没有新的已实现长期事实,因此跳过 Wiki。
已按用户 2026-08-27 的明确要求直接修改 #102,不另建工单。 变更结论: - 固定单值改为“最短秒数~最长秒数”的闭区间随机整数。 - 默认 `15~15`,兼容当前固定 15 秒实现;两值相等表示固定,`0~0` 表示不等待。 - 每次符合条件的采集结果安全提交后只随机一次,并把本次随机值与截止时间固定持久化;重启、改设置和系统时间回拨均不得重新随机。 - 采购优先、手动入口不可绕过、有界亮屏、无 Server/DB 变化和永久禁止支付等边界保持不变。 - 现有 v1 与提交 `3164675` 保留为基线,不覆盖、不回退。 - 工单已退回设计门禁:下一步制作 `prototypes/102/v2/index.html`;用户审核 v2 前不继续修改 Android 生产代码。 - 当前仅更新工单需求与验收契约,没有新的已实现长期事实,因此跳过 Wiki。
Author
Owner

v2 原型已完成,等待审核

本次只更新设计证据,尚未修改 Agent 生产代码。

  • QuantUX App:6a8edc0c191a826306a7f38f
  • 在线原型:https://qux.ilapage.cn/#/apps/6a8edc0c191a826306a7f38f.html
  • 本地离线快照:prototypes/102/v2/index.html
  • Git 提交:b6e4283
  • QuantUX 导出验证:PASS(4 个页面、115 个组件、导航与输入交互通过)
  • v1 快照保持不变:prototypes/102/v1/index.html

v2 覆盖范围

  1. 设置页由单个采集间隔改为“最短 / 最长”双整数输入,默认 15~15 秒。
  2. 说明“相同表示固定;0~0 表示不等待”。
  3. 保存成功态演示 15~30 秒,并显示“已保存,下次采集任务结束后生效”。
  4. 输入检查页集中展示四类就近错误:最短值大于最长值、空值、非整数、超出 0~600。
  5. 状态页展示本次随机得到的实际剩余时间,例如“采集间隔中 · 还剩 23 秒”。
  6. 保留采购任务优先、仅阻塞下一条采集任务的原有语义。

验证与文档

  • 离线 HTML 为单文件,无外部脚本和样式依赖,关键文案完整。
  • python dev_scripts/harness.py check --strict:通过。
  • 无长期事实变化,本阶段不更新 Wiki。
  • 浏览器安全策略不允许自动打开本地 file:// 页面;已由 QuantUX 导出验证和静态完整性检查覆盖。

请先审核 v2 原型;审核通过后再进入代码实施。

## v2 原型已完成,等待审核 本次只更新设计证据,尚未修改 Agent 生产代码。 - QuantUX App:`6a8edc0c191a826306a7f38f` - 在线原型:https://qux.ilapage.cn/#/apps/6a8edc0c191a826306a7f38f.html - 本地离线快照:`prototypes/102/v2/index.html` - Git 提交:`b6e4283` - QuantUX 导出验证:PASS(4 个页面、115 个组件、导航与输入交互通过) - v1 快照保持不变:`prototypes/102/v1/index.html` ### v2 覆盖范围 1. 设置页由单个采集间隔改为“最短 / 最长”双整数输入,默认 `15~15` 秒。 2. 说明“相同表示固定;`0~0` 表示不等待”。 3. 保存成功态演示 `15~30` 秒,并显示“已保存,下次采集任务结束后生效”。 4. 输入检查页集中展示四类就近错误:最短值大于最长值、空值、非整数、超出 `0~600`。 5. 状态页展示本次随机得到的实际剩余时间,例如“采集间隔中 · 还剩 23 秒”。 6. 保留采购任务优先、仅阻塞下一条采集任务的原有语义。 ### 验证与文档 - 离线 HTML 为单文件,无外部脚本和样式依赖,关键文案完整。 - `python dev_scripts/harness.py check --strict`:通过。 - 无长期事实变化,本阶段不更新 Wiki。 - 浏览器安全策略不允许自动打开本地 `file://` 页面;已由 QuantUX 导出验证和静态完整性检查覆盖。 请先审核 v2 原型;审核通过后再进入代码实施。
Author
Owner

原型调整要求(2026-08-27)

用户要求继续精简 #102 设置页:

  • “任务执行”改为“采集任务执行间隔”;
  • 删除两个输入框上方可见的“最短”“最长”文字;
  • 删除“相同表示固定;0~0 表示不等待”说明;
  • 两个数值框继续使用“~”表达范围,并保留“秒”和“保存”;
  • 可见标签删除后,输入框仍保留“范围起始值 / 范围结束值”的无障碍描述。

v2 已作为审核证据提交,本次生成 prototypes/102/v3/index.html,不覆盖 v2;仍只更新原型,不修改 Agent 生产代码。

## 原型调整要求(2026-08-27) 用户要求继续精简 #102 设置页: - “任务执行”改为“采集任务执行间隔”; - 删除两个输入框上方可见的“最短”“最长”文字; - 删除“相同表示固定;0~0 表示不等待”说明; - 两个数值框继续使用“~”表达范围,并保留“秒”和“保存”; - 可见标签删除后,输入框仍保留“范围起始值 / 范围结束值”的无障碍描述。 v2 已作为审核证据提交,本次生成 `prototypes/102/v3/index.html`,不覆盖 v2;仍只更新原型,不修改 Agent 生产代码。
Author
Owner

v3 原型已更新,等待审核

已按本轮反馈精简设置页:

  • “任务执行”改为“采集任务执行间隔”;
  • 设置页删除可见的“最短”“最长”;
  • 删除“相同表示固定;0~0 表示不等待”;
  • 保留两个数值框、“~”、“秒”和“保存”;
  • 输入框无障碍描述使用“范围起始值 / 范围结束值”,不在界面显示;
  • 输入检查页仍保留明确错误信息,便于说明错误原因和修正方式。

设计证据:

  • 在线原型:https://qux.ilapage.cn/#/apps/6a8edc0c191a826306a7f38f.html
  • 本地快照:prototypes/102/v3/index.html
  • 提交:fc52ec5
  • QuantUX 验证:PASS(4 个页面、110 个组件、导航和输入交互正常)
  • v1、v2 快照均未覆盖
  • 本阶段仍未修改 Agent 生产代码,也无长期 Wiki 影响

请审核 v3,确认后再继续实施。

## v3 原型已更新,等待审核 已按本轮反馈精简设置页: - “任务执行”改为“采集任务执行间隔”; - 设置页删除可见的“最短”“最长”; - 删除“相同表示固定;0~0 表示不等待”; - 保留两个数值框、“~”、“秒”和“保存”; - 输入框无障碍描述使用“范围起始值 / 范围结束值”,不在界面显示; - 输入检查页仍保留明确错误信息,便于说明错误原因和修正方式。 设计证据: - 在线原型:https://qux.ilapage.cn/#/apps/6a8edc0c191a826306a7f38f.html - 本地快照:`prototypes/102/v3/index.html` - 提交:`fc52ec5` - QuantUX 验证:PASS(4 个页面、110 个组件、导航和输入交互正常) - v1、v2 快照均未覆盖 - 本阶段仍未修改 Agent 生产代码,也无长期 Wiki 影响 请审核 v3,确认后再继续实施。
Author
Owner

v3 原型审核通过

  • 审核人:用户
  • 审核时间:2026-08-27
  • 确认版本:prototypes/102/v3/index.html
  • QuantUX App:6a8edc0c191a826306a7f38f
  • 设计提交:fc52ec5
  • 确认范围:“采集任务执行间隔”标题、双数值范围输入、删除可见“最短/最长”和辅助说明、保存及输入错误状态、实际剩余时间状态。
  • 结论:设计门禁解除,#102 保持开启,可按工单进入 Android 生产实施;本次仅记录审核,不关闭工单、不修改代码、不更新 Wiki。
## v3 原型审核通过 - 审核人:用户 - 审核时间:2026-08-27 - 确认版本:`prototypes/102/v3/index.html` - QuantUX App:`6a8edc0c191a826306a7f38f` - 设计提交:`fc52ec5` - 确认范围:“采集任务执行间隔”标题、双数值范围输入、删除可见“最短/最长”和辅助说明、保存及输入错误状态、实际剩余时间状态。 - 结论:设计门禁解除,#102 保持开启,可按工单进入 Android 生产实施;本次仅记录审核,不关闭工单、不修改代码、不更新 Wiki。
Author
Owner

实施完成,等待验收

实现

  • 设置页按已确认 v3 显示“采集任务执行间隔”,使用两个整数输入框、“~”、单位“秒”和保存按钮;不显示“最短/最长”和辅助说明。
  • 默认值为 15~15,两端均校验 0~600,左侧大于右侧时就近提示且不保存。
  • 旧版单值 collection_interval_seconds 自动读取为相同起止值;首次保存范围后原子写入两个新字段并移除旧字段。
  • 每个符合条件的采集终态在结果安全提交后,使用均匀整数随机源在闭区间内抽取一次;0~0 和包含 0 的范围允许本次不等待。
  • 本次抽中的秒数、开始时间和截止时间作为一个本地票据保存。重启、设置修改和系统时间回拨不会让同一票据重新随机。
  • 继续复用既有调度器:间隔只阻止采集;采购优先、心跳、Outbox、历史刷新与同步不变。没有新增 Server API、数据库字段或付款能力。

验证

  • .\scripts\verify.ps1 -Component android:通过。
    • Debug/Release 单元测试通过。
    • Debug APK 构建通过。
  • cd android && .\gradlew.bat assembleRelease:通过。
  • 最终 cd android && .\gradlew.bat test:通过。
  • 测试报告:Debug/Release 两个变体合计 218 项,0 失败、0 错误、0 跳过。
  • 新增确定性测试覆盖固定范围、0~0、范围包含 0、随机上下边界、每次只调用一次随机源、倒计时、过期和时间回拨;没有概率性测试。
  • git diff --check:通过。
  • python dev_scripts/harness.py check --strict:通过。
  • Wiki 镜像执行一次 sync 和一次 sync --check:通过。

文档

  • Business-Rules-and-Glossary revision:800b2e0845f8cc69759246d33083793df4cbef7f
  • Local-Development-and-Verification revision:a75499ddf3d238810d1f845050cdd4b46e49297e
  • 本地镜像已随实现提交。

提交与未验证项

  • 实现提交:f79f824(已推送 main)
  • 未执行:真机覆盖安装、设置页实际显示、连续两个采集任务的随机间隔、间隔中重启恢复与 WakeLock 真机检查。
  • 未触发采购、修改地址、创建订单或支付;永久禁止支付边界不变。
  • 工作区原有未跟踪文件 gitea.zip 保持未修改。

工单保持开启并处于待验收。

## 实施完成,等待验收 ### 实现 - 设置页按已确认 v3 显示“采集任务执行间隔”,使用两个整数输入框、“~”、单位“秒”和保存按钮;不显示“最短/最长”和辅助说明。 - 默认值为 `15~15`,两端均校验 `0~600`,左侧大于右侧时就近提示且不保存。 - 旧版单值 `collection_interval_seconds` 自动读取为相同起止值;首次保存范围后原子写入两个新字段并移除旧字段。 - 每个符合条件的采集终态在结果安全提交后,使用均匀整数随机源在闭区间内抽取一次;`0~0` 和包含 0 的范围允许本次不等待。 - 本次抽中的秒数、开始时间和截止时间作为一个本地票据保存。重启、设置修改和系统时间回拨不会让同一票据重新随机。 - 继续复用既有调度器:间隔只阻止采集;采购优先、心跳、Outbox、历史刷新与同步不变。没有新增 Server API、数据库字段或付款能力。 ### 验证 - `.\scripts\verify.ps1 -Component android`:通过。 - Debug/Release 单元测试通过。 - Debug APK 构建通过。 - `cd android && .\gradlew.bat assembleRelease`:通过。 - 最终 `cd android && .\gradlew.bat test`:通过。 - 测试报告:Debug/Release 两个变体合计 218 项,0 失败、0 错误、0 跳过。 - 新增确定性测试覆盖固定范围、`0~0`、范围包含 0、随机上下边界、每次只调用一次随机源、倒计时、过期和时间回拨;没有概率性测试。 - `git diff --check`:通过。 - `python dev_scripts/harness.py check --strict`:通过。 - Wiki 镜像执行一次 `sync` 和一次 `sync --check`:通过。 ### 文档 - Business-Rules-and-Glossary revision:`800b2e0845f8cc69759246d33083793df4cbef7f` - Local-Development-and-Verification revision:`a75499ddf3d238810d1f845050cdd4b46e49297e` - 本地镜像已随实现提交。 ### 提交与未验证项 - 实现提交:`f79f824`(已推送 `main`) - 未执行:真机覆盖安装、设置页实际显示、连续两个采集任务的随机间隔、间隔中重启恢复与 WakeLock 真机检查。 - 未触发采购、修改地址、创建订单或支付;永久禁止支付边界不变。 - 工作区原有未跟踪文件 `gitea.zip` 保持未修改。 工单保持开启并处于待验收。
Author
Owner

真机安装补充

  • 时间:2026-08-27 09:36(Asia/Shanghai)
  • 设备:一加 PKG110(ADB 序列号已脱敏记录为尾号 0000)
  • 安装方式:Debug APK 覆盖安装并保留应用数据
  • 安装结果:Success
  • 已安装包:cn.ilapage.goauto.agent
  • 版本:0.8.0(versionCode 12)
  • 设备回读更新时间:2026-08-27 09:36:08

本次只完成安装和包信息回读,未自动启动采集/采购任务,未修改地址、创建订单或支付。设置页显示、随机间隔、重启恢复和 WakeLock 仍等待真机验收。

## 真机安装补充 - 时间:2026-08-27 09:36(Asia/Shanghai) - 设备:一加 `PKG110`(ADB 序列号已脱敏记录为尾号 `0000`) - 安装方式:Debug APK 覆盖安装并保留应用数据 - 安装结果:`Success` - 已安装包:`cn.ilapage.goauto.agent` - 版本:`0.8.0`(versionCode `12`) - 设备回读更新时间:`2026-08-27 09:36:08` 本次只完成安装和包信息回读,未自动启动采集/采购任务,未修改地址、创建订单或支付。设置页显示、随机间隔、重启恢复和 WakeLock 仍等待真机验收。
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#102