1
current-state
ila edited this page 2026-08-07 16:37:20 +08:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

同步来源:docs/current-state.md · commit afc651f75a3a

当前实现状态

可覆盖的项目级快照。任务执行日志写入对应任务文件。

当前快照

  • 日期:2026-08-01

  • 阶段:T-256、T-257、T-258、T-259、T-260、T-261、T-262、T-263、T-264、 T-265、T-268、T-269、T-270、T-271、T-272 DOING,T-266、T-267 DONE;T-257 Android 代码已加入规格价格形状计数、候选 队列原因码、无预算组合价未确认候选放行和卡片价格观察隔离;T-258 后端已只放宽 collection_complete=true 的候选下限,单个带 match_type 的候选可进入确认流程, 原数量上限、轮次、互斥、证据和商品身份校验保持不变。T-259 允许安全停止且 session 有效时在冷启动执行一次既有 outbox HTTP 补传,随后仍返回 STOP;不续租、不重新领取、 不触发拼多多 dry-run、提交或支付。自动化校验已通过,最终真机 outbox 收敛和 Admin 确认区仍待验证。T-260 已完成设备本地操作停顿与三轮浏览预算配置代码,默认 1000 / 3000 / 100000 / 100000 / 45000 不变;失败动作同样停顿,配置需同时通过 单候选可行性和授权窗口 60% 校验,后台 payload 不能覆盖。五条 Android Gradle 验证 已通过,最终慢档真机执行与 Admin 诊断键核对待验证。T-261 已实现仅限技术失败的 有界现场清理、规格读取失败细分和四个追加诊断计数;任何安全停止或清理途中出现 风控/支付边界均不再点击,清理失败不覆盖原失败码。Debug/Release 各 282 项单测、 lint 与两个 APK 构建通过;最终真机残留现场恢复和 Admin 细分码核对待验证。 T-262 已在 PinduoduoPageClassifier 判定不变的前提下,为 PAYMENT_BOUNDARY 追加 payCheckoutRoot/payMarkerIndex/payMarkerHits/payClickable/ payExact 五个归因诊断键(未触发时取默认值 0/-1/0/0/0),并让归因经 AutomationResult.Blocked/WorkflowReport 透传,使阻塞发生在 pdd_open_app 等任意工作流步骤时都能带出;Debug/Release 各 299 项单测、 lint 与两个 APK 构建通过;真机复现 PAYMENT_BOUNDARY 阻塞与真实订单确认页 对照采样待人工验证。 T-263 已在 paymentMarkers/hasCheckoutRoot/containsAny 逐字节不变、 登录/验证码/风控优先级不变的前提下,追加占满屏 WebView + 语义文本数不超 阈值、须连续 3 次快照确认的结构判据(新主判据),并让文本判据仅在页面未被 正面识别为商品详情/规格弹层/搜索结果/图片搜索结果/首页时才强制停止(放行时 计数不停止);CandidateSearchDiagnostics 追加 payStructureHit/ payStructureStreak/payTextSuppressed 三个尾部诊断键。已用 T-262 记录的 四个真机样本构造夹具验证:首页、优惠券页不判,商品规格弹层误报被修复为不判, 结算页结构连续 3 次后判定;另覆盖连续 1/2 次不判、结构中断清零、 hasCheckoutRoot 单独命中仍判定、UNKNOWN 页面文本命中仍强制停止。 Debug/Release 各 313 项单测、lint 与两个 APK 构建通过;真机复跑候选任务 确认不再卡在 pdd_open_app,以及从 Admin 核对 payTextSuppressed 合理性 待人工验证。 T-264 已移除 openPinduoduoSpecifications() 中「找不到安全入口就点击 『免拼购买』」的兜底分支,找不到唯一安全入口时改为返回 ENTRY_ABSENT 并 新增 specEntryAbsent 诊断计数;hasOrderConfirmation 追加原生订单确认页 判据(掩码手机号 + 已选 摘要 + 数量/运费语义同时成立,既有三个判据不变), 用于解决无规格商品被兜底点击后误入订单确认页却无法识别、只能卡死的问题; PaymentBoundaryAttribution/CandidateSearchDiagnostics 追加 payPage 页面分类名称归因(未触发时为 NONE)。T-263 结构判据、hasCheckoutRoot、 paymentMarkers 及抑制规则、登录/验证码/风控优先级均未改动。 Debug/Release 各 329 项单测、lint 与两个 APK 构建通过;真机复跑无规格商品 采购任务确认不再卡在订单确认页,以及从 Admin 核对 specEntryAbsent/ payPage 待人工验证。 T-265 根据真机详情页无独立规格入口的证据,恢复唯一「免拼购买」次优先入口; 安全入口仍优先,其它购买语义仍拒绝。落到订单确认页时只执行既有返回动作并跳过 当前候选,返回失败仍阻塞在支付边界;诊断尾部追加 specEntryViaPurchase/ specLandedOnCheckout。Debug/Release 各 336 项单测、lintDebug 和两个 APK 构建通过;T-265 Debug APK 已覆盖安装到 PKG110,采购无障碍、悬浮窗、通知和 Shizuku 权限保持启用,真机重跑和 Admin 计数核对待完成。 T-266 将新签发 BUYER 设备 Bearer token 的绝对有效期改为固定30天 (2592000 秒),不滚动续期;禁用、撤销和绑定检查仍立即生效。既有 token 不迁移,后端重启后设备重新登录一次才取得新期限。 T-267 已把新创建 ADMIN Web Session 的固定绝对有效期从8小时改为30天,并保持 Cookie Expires/Max-Age 与服务端到期时间一致;既有 session 不迁移,CSRF Cookie 和 BUYER token 不受影响。Go 全量测试和根 init.ps1 已通过。 T-268 已在 ProcurementExecutionCycle(接入点不变)为 shouldRunOrderDryRun 九个子条件与 canStartProbe 四个子条件新增 ORDER_DRY_RUN_GATE 逐条件观测 事件、为 shouldRunOrderSubmission 新增 ORDER_SUBMISSION_GATE 观测事件, 经 T-207 既有 outbox 上报;取值不变不重复写,10 分钟保底写一条,写入用 runCatching 包裹不阻塞循环;两个既有门控属性、canStartProbe/blockers 计算方式、短路顺序、runOnce() 调用条件与既有 onFailure 日志全部保持原样 (回归测试覆盖);DeviceObservationStore 更新时机和 loginBlocker 粘滞行为 未动,只让其结果可见。message 只含布尔量、计数与自有 ASCII 大写枚举名,单测 证明不含任何页面原文。Debug/Release 各 392 项单测、lintDebug、 assembleDebug、assembleRelease 全部通过;真机复现 dry-run 卡在 PREPARING 并从 Admin 核对具体是哪一个子条件为 0 待完成,任务保持 DOING。 T-269 已修正真机任务 54ee4d8a-41a8-4a63-bba2-a7b77162f27d 三轮全部卡在 pdd_open_app 的根因:hasDetailBack 原要求返回元素自身可点,真机商品 详情页的「返回」contentDescription 挂在不可点子节点上(真正可点的是祖先 容器,与 T-262 payClickable 恒为 0 同一模式),导致该页被误判 UNKNOWN 并被文本判据强制 PAYMENT_BOUNDARY。改为「自身或有界祖先可点」(复用 BuyerAccessibilityService.clickableNodeOrAncestor() 模式与 MAX_CLICK_ANCESTORS 上限,在 uiElement() 采集侧预先算好布尔量随 PinduoduoUiElement 带出,分类器不遍历树),detailMarkerCount>=2 与返回 语义文本匹配规则不变;新增 PinduoduoHomeRecoveryPolicy,只在『纯文本命中 且无任何结算迹象的 UNKNOWN 页面』上于 AndroidPinduoduoImageSearchDriver .openApp() 执行最多 MAX_HOME_RECOVERY_STEPS(3) 次系统返回、每步前复查 hasCheckoutRoot/T-263 结构判据/ORDER_CONFIRMATION/登录验证码风控, 命中任一立即停止且不归位;归位只调用系统返回,不点击任何控件。 CandidateSearchDiagnostics 尾部追加 homeRecoverySteps/homeRecovered 两个键;paymentMarkers/hasCheckoutRoot/containsAny/T-263 结构判据与 抑制名单/T-264 原生订单确认页判据/T-265 落到结算页跳过逻辑/T-268 门控 诊断均未改动。已用真机商品详情页特征构造夹具验证识别修复,并回归覆盖 搜索结果页/首页/规格弹层/订单确认页不因本次放宽被误判为商品详情页。 Debug/Release 各 412 项单测、lintDebug、assembleDebug、 assembleRelease 全部通过;真机故意停在商品详情页复跑并从 Admin 核对 payPage/homeRecoverySteps/homeRecovered 待人工验证,任务保持 DOING。 T-270 已从已持久化的候选等待确认、pending FAIL、授权结束、人工对账和订单已核对 五类阶段派生前台返回目标;进程共享协调器先持久化最多 32 条 SHA-256(executionId + phase) 幂等 receipt,再发布可点击结果通知并用显式 Intent 请求返回 Roubao 采购任务页。Activity 与前台 Service 同时观察但同阶段只消费一次, 中间搜索/回传/下单状态不触发,后台拉起失败不改变业务状态。Debug/Release 各 417 项 单测、lintDebug 和两个 APK 构建通过;1.4.18 (23) 已覆盖安装到 PKG110,并验证从 拼多多 8.17.0 显式返回 Roubao。真实候选封板/订单核对自动触发和系统拦截后的通知降级 待真机验收,任务保持 DOING。 T-271 已解决真机三轮 CANDIDATE_RESULTS_NOT_READY、cards=0 的根因:候选卡片 过滤的第六项 hasImage 判据在图片尚未加载完成时否决了本应通过的真实商品卡; 现移除 hasImage 的否决权,其余七项(className/宽度/高度/可见面积/语义文本数/ 价格语义/安全点击目标/稳定签名)判定逻辑、阈值常量与先后顺序全部不变。为此把 候选容器的八项判定抽成不依赖 AccessibilityNodeInfo 的纯函数 PinduoduoCandidateContainerFilter.evaluate()(新文件), BuyerAccessibilityService.candidateNodes() 只负责把无障碍树读出的原始度量 喂给它、再把结果落回既有诊断计数,判定本身未改一行;纯函数可直接用真机 dump 数值构造夹具做 JVM 单测。PinduoduoCandidateCard.hasImage 如实记录该卡 当时是否已有可见图片。诊断口径变更:rejectedImage(rejImage)不再是 否决计数,语义改为「已被接受为候选但当时缺图」的观测计数,不再计入 PinduoduoCandidateCardRead 的容器恒等式;新恒等式为 containers - (rejClass+rejWidth+rejHeight+rejVisible+rejTexts+rejPrice+ rejClick+rejSignature) = 返回卡片数,由该类 init 块强制校验并有单测覆盖。 candidateReadyPollLimit/轮询间隔、颜色尺码硬约束、商品身份解析、双证据、 支付边界/订单确认页/登录/验证码/风控判定、T-265 规格入口与跳过逻辑、T-268 门控诊断、T-269 详情页识别与归位策略均未改动。已用真机图搜结果页 dump(8 个 子节点:4 张 535×764 真实商品卡、2 个 535×182 矮容器、1 个 LinearLayout、1 个 RecyclerView)构造夹具验证:4 张真实卡在图片未 visible/enabled 时仍被接受, 矮容器仍因高度被拒,非卡片容器仍因 className 被拒;并逐项回归宽度过窄/过宽、 可见面积不足、文本不足、缺价格、缺点击目标、缺签名的拒绝行为不变。 T-272 已修正规格文字子节点因祖先可点/祖先 selected 或 checked 而被漏读、误判未选中 的确定性缺口;自动领取会按 Roubao 本机安全 VLM 配置固定 execution 模式,Admin 不 代理模型。前两轮候选在规则无法定位或点击后无法确认时,最多使用两次严格 node-ID 定位和一次同帧双规格视觉复核;节点/截图受限脱敏,模型返回后重读 path + fingerprint, 页面变化和安全停止均拒绝点击。最终 selection_proof 与保存的规格截图 hash 绑定, 进度快照可恢复但不伪造节点 selected。诊断尾部追加四个 specVlm* 聚合键;第三轮、 订单 dry-run、Admin/Go API/数据库均未改变。Debug/Release 各 442 项单测、lint 和两种 APK 构建通过;真机颜色/尺码缺失样本与 Admin 诊断核对待完成,任务保持 DOING。 T-276 已将候选搜索改为两轮:第一轮最多检查 6 个并保存最多 5 个严格候选,第二轮 最多检查并保存 2 个保底候选;新上传契约只接受 search_round=1..2,历史第三轮数据库 记录保持可读。 T-277 已扩展 T-272 最终规格复核:本机 VLM 只选择当前颜色、尺码和价格节点,App 复核快照后自行解析 SKU 摘要及拆分价格;候选会显式回传规格/价格验证状态和值来源。 T-278 已修复任务价格为空时的授权策略:候选展示价不再作为等值门槛,后台在人工确认时 冻结任务最高总预算或默认 200 元低价总额上限,App 和后台都按实际所选规格总价复核。 T-279 已收口 Admin 确认后的真实执行链路:App 定向打开授权商品后,以当前 goods_id、 授权详情指纹或受限分享解析严格复核身份;规则无法唯一读取颜色、尺码或价格时复用 Roubao 本机模型,最多调用三次并由代码复核 node ID、结构和金额。瞬时自动化只重试一次;终态 失败先加密保存再幂等回传后台并切回 Roubao,成功则继续既有单次提交围栏和待支付对账。 T-280 已修复过期安全停止任务无法确认 Admin 取消的问题:显式控制面同步允许发送后端 已支持的 SAFE_STOPPED heartbeat,但不延长 claim 或恢复自动化;收到取消请求后使用 原 execution 幂等确认并清理本地状态。任务页恢复及十秒轮询会自动执行该同步。 T-253 已完成;PDD ps 分享链接的小体积重定向 响应可从受信 Location 解析 goods_id,不再被 Android 误判为网络失败

  • Git:当前分支为 main;T-001 至 T-004、T-101 至 T-104、T-201 至 T-219 均按文档提交、实现提交的顺序纳入历史

  • 生产代码:android-buyer/ 已接入 Roubao Android 源码

  • Android:固定 main@c8a6d7f03422eb01744b01f3ee77bf7757741f7e;MIT 许可证已保留

  • 后端:Go 1.23.0 + Gin 1.11.0 + SQLite + Goose 3.26.0;已实现图片/任务业务、 SSR 管理 Web、ADMIN/BUYER 联合认证、设备 readiness、原子 claim、租约状态机、 task-scoped 参考图和 authctl

  • ERP 货运:Go 后端以受锁内存 ERP 会话直连按完整单号或创建日期同步;v12 保存 同步记录、货运头和全部明细,canonical hash 控制 revision,Admin 已有 /freight、 /freight/import、/freight/{id} 与对应 JSON API。T-237 已将完整单号改为 55 秒 同步响应,成功后直接进入可见货运列表;超时/取消使用独立 cleanup context 写 FAILED,日期范围仍后台异步。HTTP WriteTimeout 为 70 秒。T-238 已兼容真实详情 created 的分钟精度,仍按 Asia/Shanghai 严格解析并转 UTC。T-239 至 T-241 已保存 productSpec、TWD 原始单价和数字图片引用,以有界并发缓存归一化 JPEG,并在鉴权 本地路由、货运列表和详情中显示图片、状态与采购字段。T-244 对缺失 Content-Type 或通用二进制的 ERP 图片使用 512 字节受控嗅探,完整解码和 20 MB 限制不变。 T-242/T-243 允许 ADMIN 从 详情页删除本地货运快照、缓存图以及无参考图/任务的采购需求草稿;已绑定参考图或已生成 采购任务时分别原子拒绝,不修改 ERP、同步运行历史或增量水位,完整订单号可重新导入。

  • ERP Go 迁移:T-225 已用脱敏 fixture 固定 internal/platform/shunyunbao 的 header、 单号/日期查询、分页、详情批量和字段 allowlist,并使货运用例依赖来源中立错误。T-226 已增加受锁保护的 Go 内存 Cookie jar、验证码 ticket、登录和用户校验,以及 ADMIN 的 /erp 页面/API;账号密码可由 backend-api/.env 的受控 CMROUBAO_SHUNYUNBAO_* 回退提供,进程环境变量优先。T-230 改为导入前由受控 CMROUBAO_OCR_API_URL 获取验证码 文字并建立内存会话,人工 /erp 模块已删除。T-227 已将其作为 FreightSource, 查询先校验会话、再执行有界分页/详情 批量并返回 allowlist;T-228 已删除旧 Python Connector、loopback 端口和共享 API Key; T-236 在 ERP 明确拒绝验证码时额外重试 6 次,每次重新取图和 OCR,单次认证最多 7 次登录并受 20 秒总预算限制;不对账号密码、OCR、网络或协议错误重试。未访问真实 ERP。

  • ERP 增量同步:v14 支持 Asia/Shanghai 创建日期闭区间和“同步至现在”,source 单窗 最多 7 天,后端对较长水位范围切窗并从成功水位前 10 分钟所在自然日回看。 货运落库、同步成功和水位推进同事务完成;失败与较旧范围成功不推进水位。Admin 可查看查询范围、计数、稳定错误码和最近成功水位。

  • 采购需求:v13 按货运商品 revision 保存可复核快照;ADMIN 显式确认采购、上传参考 图后生成不可变 PENDING 任务。T-245 在当前商品有 READY 本地 ERP 缓存图时,将其 重新校验并复制为独立 TASK_REFERENCE,需求直接进入 READY;v17 记录 ERP_FREIGHT_IMAGE/MANUAL_UPLOAD 来源。无图仍进入 NEEDS_IMAGE,既有需求可在 图片恢复后显式升级;任务生成前可人工替换并清理旧自动副本。来源变化不会改写任务, Roubao 继续使用原 image_asset_id 和 claim 流程。

  • 采购重试:v20 保留 (freight_order_item_id, source_revision) 的单一采购需求和 原任务 ID;仅允许没有任何下单信号的 FAILED/CANCELED 任务带原因重新排入 PENDING。重试事务记录操作人、原状态、原因和事件;存在 execution outcome 或 order submission 下单信号时 fail-closed,禁止重复采购。

  • 本机 Android 工具:JDK 17.0.13、Command-line Tools 22.0、SDK 34、 Build Tools 34.0.0、Platform Tools/ADB 37.0.0;用户级 SDK 环境变量已设置

  • Android Studio:未安装;winget 静默安装卡住后已终止,不阻塞命令行构建

  • 测试:T-248 Android Debug/Release 单元测试与构建通过

  • T-250:Android Debug/Release 单测、lint、Debug/Release 构建和根 init.ps1 通过;Debug APK 1.4.16 (21) 已覆盖安装到 PKG110,手机 APK 哈希与本地构建一致, 安装后 Roubao 保持停止,尚未启动拼多多

  • T-251:Android Debug/Release 单测、lint、Debug/Release 构建和根 init.ps1 通过;覆盖延迟/空候选卡、SKU 不匹配、身份未解析、三轮门禁与终态恢复。新 Debug APK 已覆盖安装到 PKG110,手机和本地 APK SHA-256 一致,无障碍仍启用;启动 Roubao 后 ADB 断开且后端 TLS 握手超时,现场 execution 的终态收敛待连接恢复后复验

  • T-256:Android 端将候选采集的“至少一个已解析身份”与“达到目标或三轮耗尽后收尾” 分离;不足目标但有有效候选时继续执行剩余轮次,收尾审计沿用 T-254 诊断 message 并记录累计实际候选数。testDebugUnitTest、testReleaseUnitTest、lintDebug、 assembleDebug、assembleRelease 均通过;最终真机/Admin 候选确认区验收待执行

  • T-259:安全停止后的运行同步先用有效 session 有界 flush 已收集 outbox,再无条件 返回 STOP;冷启动只在仍有实际待传项时启动一次服务。执行页只显示待传数量或已 回传完成,不展示候选字段。Debug/Release 各 262 项单测、lintDebug 和 Debug/Release APK 构建通过;单测证明 flush 成功、失败、session 失效、RECONCILED、 reconciliationPending 和拼多多协调器零调用边界

  • 后端测试:T-226 至 T-245 已运行 go test ./...、go test -race ./...、go vet ./... 和三个 Go 入口构建;T-227 增加 Go source 的伪 ERP 会话预检、完整单号、日期分页去重、 详情 allowlist 和稳定错误码覆盖;根 init.ps1 的 Android 测试/Debug APK 与 Go 标准 验证也通过,均未访问真实 ERP; T-248 再次通过上述 Go 全量检查和三个入口构建,并覆盖候选增量快照、最终状态切换及 完成后旧快照拒绝;T-249 同样通过 Go 全量检查和三个入口构建,并覆盖安全重试、 幂等重放、下单信号阻断、审计历史和 v20 上下迁移; T-258 通过 GOTOOLCHAIN=local go test ./... 和根 init.ps1,覆盖单个 EXACT_MATCH/FALLBACK 完成快照,并回归候选数量上限、轮次归属、混合互斥和 goods_id 去重;既有设备结果流继续覆盖证据 hash 冲突和最终状态切换; 覆盖 v14 上下迁移、7 天切窗、水位重叠、中途失败、空窗口、重复页、来源 revision、 水位事务/不回退、Admin API/SSR 和 Go source 严格响应窗口;未访问真实 ERP

  • 原型:4 个管理 Web 页面和 7 个 Android 页面均可离线独立打开;Playwright 以 1440×900、390×844、360×800 验证 36 个页面/视口组合,无页面横向溢出、 脚本错误或外部请求,Android 可见交互控件均不小于 44px

  • 管理 Web:真实 Gin/SQLite 流程已完成图片上传、任务创建、列表、详情参考图和 非终态取消;执行中只显示“请求安全停止”,ADMIN 登录/退出和安全返回路径已接入, 货运列表/导入/详情在 1440×900、390×844、360×800 无横向溢出或页头重叠

  • 货运管理展示:列表按外部商品 ID 确定性展示第一条当前商品的 56px 代表图、标题和 总项数;详情展示 84px/移动端 72px 本地图片、单一规格 SKU、数量、TWD 原始单价、 图片状态和采购操作。Playwright 已在 1440、768、390、375 四档宽度验证无横向溢出、 破图、遮挡和控制台错误。ERP 缺失图片媒体类型时,JPEG/PNG 使用标准嗅探,WebP 使用 严格文件签名,再由 asset store 完整验证并保存为本地归一化 JPEG。

  • 货运本地删除:详情页二次确认后调用 CSRF 保护的 SSR POST,JSON API 提供幂等 DELETE; 删除事务覆盖全部历史商品并清理无引用的 BLOCKED、NEEDS_IMAGE、SOURCE_CHANGED 采购草稿;已绑定参考图或采购任务分别返回稳定冲突,任务优先。提交后以有界预算清理 缓存 JPEG。真实隔离服务已验证草稿随货运单删除后列表为空;顺运宝 ERP 未被调用。

  • 鉴权:bcrypt 密码、30天管理 session、30天 App access token 和设备 secret 均不明文落库;设备首次绑定原子化,禁用/过期/撤销每次请求重新检查;管理/App 登录各自按来源地址执行内存有界限流,账号和设备支持 authctl 启停

  • 生命周期:设备 heartbeat 记录三个版本、两个就绪位和服务端活跃任务;claim 使用 client-generated 256 bit token + 独立幂等 key、SQLite immediate transaction、 10 分钟 CLAIMED/默认 30 分钟运行授权和 2 分钟 readiness TTL。start/heartbeat/release/ cancel-ack、过期回收、跨连接并发唯一领取、管理安全停止与 task-scoped 参考图均 已实现;运行授权允许配置 5-120 分钟并显式返回截止时间,过期状态同步不延长旧 授权;原 claim token/hash 不进入响应或日志

  • Android 后台采购:新增独立“任务”入口、BUYER/设备登录、Keystore-backed 加密 状态、严格 HTTPS/Debug loopback 地址策略、HttpTaskSource、参考图校验、手动领取、 预览/start 二次确认、release、30 秒前台 heartbeat、有限离线、SAFE_STOPPED、 取消确认和进程恢复;后台任务不读取或覆盖本地 VLM provider

  • 登录重试:采购登录失败、本地校验失败或网络失败时保留当前页面输入,只有成功才清理 Compose 内存中的密码和设备密钥;敏感值不新增持久化或日志路径

  • T-207 结果闭环:execution_events、受控截图、候选批次、模型出处、人工结论与 失败记录均按 execution 存储;Android 使用加密 outbox 按事件、截图、候选和终态 顺序回传,授权到期补报单独审计,所有终态固定 order_submitted=false。管理任务 详情展示模型/候选/人工理由/事件/证据摘要,不保存 VLM Key、完整 endpoint 或原始响应。

  • T-208 决策数据:候选批次同事务规范化为 search run、原始 observation、逐项 model evaluation 和确定性 recommendation;模型拒绝项不再被过滤或重排。App 在 COMPLETE 前提交幂等 HUMAN_REVIEW,接受项和其余拒绝项均有结构化理由;修订按 supersedes/version 追加。Admin/API 分区显示 observation、prediction、 recommendation 和完整人工 review 历史。

  • T-211 图片检索:后台任务固定使用经 SHA-256 校验的参考 JPEG,经一次性 MediaStore 图片进入拼多多拍照搜索;App 本地从 SKU 唯一提取颜色和尺码,schema v3 逐项返回 MATCH/MISMATCH/UNKNOWN。实际曝光的 0..5 项全部按原 ordinal 回传;只有两项 均匹配且分数/置信度不低于 0.75 的候选能成为确定性 recommendation。

  • T-213 规格核验:DISCOVERY_INSPECT 可从唯一“免拼购买”进入规格弹层,按任务 SKU 唯一选择颜色/尺码并复核 selected/已选摘要,最多滚动 2 次;严格保存单一 人民币组合价和详情/规格双证据,并允许明确的“首件¥金额”当前单件价。区间、 券后、对照促销、冲突或缺失价格降级 UNKNOWN,直达订单确认页只系统返回。候选 探查不能加入购物车、提交订单或触发支付。

  • T-214 候选身份:App 回传卡片/详情语义签名和详情/规格双证据 hash;后端逐一核对 已上传 asset 后,在 v7 表中生成 execution-scoped candidate_key。Admin API/Web 展示 key、指纹、原始 observation、模型/人工结论和截图;缺少真实平台 URL 时保持 空值,后端不请求第三方 URL。

  • T-215 下单授权:非空候选回传原子进入 WAITING_CONFIRMATION;Admin 按 candidate key 选择并为全部候选填写结构化理由,服务端在同一事务追加人工 review、 不可变授权快照、事件和幂等记录。领取前可按版本改选,已投递后禁改;页面明确仅 授权创建设备端待付款订单,不授权付款。

  • T-216 设备命令:App 在 heartbeat 后主动拉取同一条不可变授权,严格校验跨端 canonical hash、任务内容和候选四组指纹,先写 Keystore-backed 状态再幂等 ACK。 网络响应丢失和进程重启复用同一 ACK key;后台候选不再允许手机本地选择或重复 采集。本任务只同步授权,未打开拼多多或执行下单。

  • T-217 订单 dry-run:App 自动用参考图重新搜索并以旧 card/detail 指纹、标题、 唯一颜色/尺码、数量和预算重新核验 Admin 选择;确认页 WebView 折叠时使用端上 中文 OCR 做只读 fail-closed 证据提取。后端保存 v10 READY、截图、SKU、数量、 单价/总额和事件;无障碍动作集中不含订单提交或支付。

  • T-218 单次提交:后端先创建唯一 submission fence,App 点击前持久化 CLICK_ASSUMED,最多点击一次精确“提交订单”;进程/网络不确定和租约到期后只 回读待付款订单或转人工,绝不重复提交或点击支付。v11 保存围栏、幂等操作、订单号/ 时间、证据和审计事件,唯一对账后才写 order_submitted=true。

  • T-219 待付款提醒:Admin API/SSR 按任务鉴权读取 submission,区分围栏中、人工 对账和唯一对账成功;成功态展示完整订单号、平台时间、授权 SKU/数量/金额及受控 证据,只提醒采购员打开拼多多人工核对付款。Roubao 显示相同终态;Web/App 均没有 付款、重复提交或自动支付动作。隔离数据库真实 SSR 已通过三个响应式视口验收。

  • T-220 至 T-228 ERP 来源:字段契约已固定 stock/detail/item 外部身份、PII 最小化和 缺图边界;Go API 以受锁内存会话完成受控验证码登录,并直接按完整单号或日期范围查询 allowlist schema。T-229 仅允许 API 从当前目录 .env 回退读取三个 ERP 配置,且不会 改写进程环境或加载其他配置。旧 Python Connector、8091 端口和共享服务密钥已删除; 未访问线上 ERP。

  • Workflow:纯 Kotlin runner 已支持步骤 timeout、最多 3 次 retry、安全阻塞、 用户停止和单 runner 并发拒绝;T-102 已接入搜索加有界候选采集五步

  • TaskSource:严格 CLI 已生成并验证真实私有 ProbeTask;默认 APK 不含私有 fixture

  • VLM:需求提取与候选评估均使用严格 schema、0.75 阈值、受控证据源、安全端点和 单次调用边界;候选最多 5 个并按 ordinal 串行评估,本地产生建议并停在人工确认, SKU/数量由本地原值回填,颜色/尺码硬约束由本地生成,预算保持空,订单提交状态固定 为 false

  • VLM 部署决策:手机本地调用已配置的 OpenAI 兼容 provider;管理后端只负责身份、 任务控制和结果审计,不保存/代理模型。T-207 保留 Roubao 独立模式并把端上 Key 迁移到 Keystore-backed 加密存储

  • 离线执行:默认 30 分钟有限授权和 30 秒 best-effort heartbeat 已实现;PKG110 真机断开临时后端 95 秒后保持同一 execution,重连后滑动续期;到期持久安全停止, RUNNING 不自动重新分配

  • 测试设备:OnePlus PKG110,Android 16/API 36;已安装包含 T-253 的肉包 1.4.18 (23) Debug APK;拼多多 8.17.0 (81700)。覆盖安装后已正常启动, 采购无障碍、悬浮窗、通知和 Shizuku 权限均保持启用

  • 设备就绪:拼多多首页、文字/图片搜索、双列候选卡、详情截图和返回均已通过 8.17.0 真机验证;ColorOS 在 T-246 覆盖安装时曾移除肉包采购无障碍,T-251 覆盖后授权仍 启用,因此每次覆盖安装后都必须复核该系统授权

  • 拼多多 8.17 兼容:结果页可识别新版显示查询词的文本搜索栏和“推荐、手机、女装”等 分类栏,也保留旧版“综合、销量、价格、筛选”识别;长任务搜索词的拼多多省略显示须 至少两个按序片段对应原词才通过。每次候选探针会重写本次搜索词,不复用已有结果页。 PKG110 真机已验证确认结果页完成、5 份候选证据采集、详情截图及返回结果页;未进入 下单或支付页面。

  • 版本控制内测试数据:仅有脱敏、运行时生成的单元测试 fixture;没有真实订单内容

  • 本地私有样本:仓库根目录存在一组未跟踪、已本地排除的同名蝦皮文本/JPEG; 已用 CLI 真实导入并逐字段/图片哈希验证,生成物位于被忽略的 .local/

  • 标准启动路径:$env:RUN_START_COMMAND="1"; .\init.ps1

  • 标准验证路径:.\init.ps1

  • 当前 blocker:当前真机确认页缺少已配置收货地址且显示 “立即支付/先用后付”,T-218 已按合约证明不创建围栏、不点击。不能为测试自动添加 地址或跨过付款边界。真实 VLM 服务地址、模型、 设备级测试凭证、成本上限和数据留存尚未确认;当前只支持单 SKU/JPEG;候选探针 截图要求 Android 11/API 30+。T-258/T-259 仍需在测试设备验证 execution 9c634321-7f77-49d9-9444-3ccd2104c104 的既有 outbox 自动上传后进入 WAITING_CONFIRMATION,并确认候选出现在 Admin 确认区且事件标注为授权到期后补报

当前目录

路径 状态 说明
AGENTS.md 已有 agent 权威入口
docs/ 已有 Harness Coding 文档
docs/tasks/T-001.md DONE Android 可构建、可安装、可启动基线
docs/tasks/T-002.md DONE 设备版本、无障碍、前台和登录阻塞就绪检查
docs/tasks/T-003.md DONE 可注入 Fake automation 的受限 workflow runner
docs/tasks/T-004.md DONE 私有蝦皮文本/JPEG 严格导入和 Debug TaskSource
docs/tasks/T-101.md DONE 固定脱敏词拼多多搜索和结果页真机验证
docs/tasks/T-102.md DONE 最多 5 个候选详情截图、证据 manifest 和结果页返回
docs/tasks/T-103.md DONE 私有任务需求 schema、硬约束、隐私边界和 VLM 适配器
docs/tasks/T-104.md DONE 动态搜索、候选严格评估、本地建议和人工确认点
docs/tasks/T-201.md DONE Go-Gin、SQLite、Goose migration 和健康检查骨架
docs/tasks/T-202.md DONE 生成并确认 P0 Web/App 低保真原型
docs/tasks/T-203.md DONE 图片/任务 API、SQLite 业务层和 SSR 管理 Web
docs/tasks/T-204.md DONE 用户、管理会话和预授权设备联合身份
docs/tasks/T-205.md DONE 原子 claim、租约、execution 和取消安全确认
docs/tasks/T-206.md DONE App 领取、默认 30 分钟有限离线执行、恢复和安全停止
docs/tasks/T-207.md DONE App 本地 VLM、Key 加密、候选、事件、截图和结果回传
docs/tasks/T-209.md DONE 登录失败保留采购员和设备输入以便直接重试
docs/tasks/T-210.md DONE 兼容拼多多 8.17 搜索结果页与长词省略显示
docs/tasks/T-211.md DONE 参考图召回、SKU 颜色尺码硬匹配与 0..5 候选回传
docs/tasks/T-212.md DONE 修复重排候选、推荐、证据与人工接受的身份映射
docs/tasks/T-213.md DONE 真机选择目标 SKU、读取组合价并安全返回
docs/tasks/T-208.md DONE 归一化候选决策数据并增加结构化人工 review
docs/tasks/T-214.md DONE 建立 execution-scoped candidate key 与设备采集指纹
docs/tasks/T-215.md DONE Admin 按 candidate key 选择并创建不可变待投递授权
docs/tasks/T-216.md DONE App 主动拉取并先加密落盘再确认同一条下单命令
docs/tasks/T-217.md DONE 重新核对已授权商品并选择 SKU/数量,停在最终提交前
docs/tasks/T-218.md DONE 单次提交围栏、最多一次提交动作和待付款订单唯一对账
docs/tasks/T-219.md DONE Admin 待付款提醒、Roubao 终态和跨端闭环验收
docs/tasks/T-220.md DONE 顺运宝 ERP 字段契约与凭证安全基线
docs/tasks/T-221.md DONE 顺运宝精确单号 Connector
docs/tasks/T-222.md DONE 货运信息存储、API 与 Admin 页面
docs/tasks/T-223.md DONE 待采购需求提取与任务生成
docs/tasks/T-224.md DONE ERP 日期增量同步
docs/tasks/T-225.md DONE 冻结 Go 直连 ERP 协议与安全边界
docs/tasks/T-226.md DONE Go ERP 会话、验证码登录与 Admin 连接页
docs/tasks/T-227.md DONE Go 直连顺运宝查询接入货运同步
docs/tasks/T-228.md DONE 移除 Python Connector 并完成 Go 切换
docs/tasks/T-229.md DONE 从受控 .env 加载 ERP 凭证
docs/tasks/T-230.md DONE OCR 自动登录并移除人工 ERP 连接页
docs/tasks/T-231.md DONE 显示 ERP/OCR 导入预检稳定错误
docs/tasks/T-232.md DONE 记录 ERP/OCR 导入预检安全诊断日志
docs/tasks/T-233.md DONE 修复预检错误映射并增加受控 ERP 诊断日志
docs/tasks/T-234.md DONE 在受控诊断模式输出 OCR 验证码文本
docs/tasks/T-235.md DONE 修复顺运宝登录后用户会话校验协议
docs/tasks/T-236.md DONE 验证码错误时重新取图和 OCR,最多额外重试 6 次
docs/tasks/T-237.md DONE 完整单号在 55 秒预算内同步导入并可靠收敛终态
docs/tasks/T-238.md DONE 兼容顺运宝详情分钟精度时间
docs/tasks/T-239.md DONE 冻结货运规格 SKU、TWD 原始单价和图片引用契约
docs/tasks/T-240.md DONE 后端受控缓存并鉴权提供货运商品图片
docs/tasks/T-241.md DONE 优化货运列表代表图与商品采购信息展示
docs/tasks/T-242.md DONE 受约束删除本地货运快照并保护采购审计
docs/tasks/T-247.md DONE 修复图片搜索循环并完成两个 SKU 候选回传
docs/tasks/T-248.md DONE 增量回传准确候选并增加第三轮保底搜索
docs/tasks/T-249.md DONE 保留原任务身份并为未下单的终态任务提供安全重试
docs/tasks/T-250.md DONE 缩短三轮图片搜索预算并移除重复内层重试
docs/tasks/T-251.md DONE 修复候选结果页早判与三轮耗尽后执行不终止
docs/tasks/T-252.md DONE 修复 Android 16 商品链接读取并回传身份未解析候选
docs/tasks/T-253.md DONE 修复 PDD ps 分享链接重定向被误判为网络失败
docs/tasks/T-255.md DOING 候选卡片九条件拒绝归因与 recycler 可见性观测已实现;最终真机复跑待采购人员执行
docs/tasks/T-256.md DOING 允许少于目标数量的有效候选进入人工确认
docs/tasks/T-259.md DOING 安全停止后仅补传既有 outbox,自动化继续保持停止;待真机验证
docs/tasks/T-260.md DOING 设备本地操作节奏和三轮预算已实现;待慢档真机与 Admin 诊断验收
docs/tasks/T-261.md DOING 技术失败有界清理与规格读取细分已实现;待真机残留现场和 Admin 诊断验收
docs/tasks/T-262.md DOING 支付边界命中归因五键已实现,判定逻辑不变;待真机复现阻塞与订单确认页对照采样
docs/tasks/T-263.md DOING 结构判据与文本判据按页面类型收敛已实现,paymentMarkers/hasCheckoutRoot 不变;待真机复跑与 Admin 诊断验收
docs/tasks/T-264.md DOING 移除免拼购买兜底、原生订单确认页识别与 payPage 归因已实现;待真机验证与 Admin 诊断核对
docs/tasks/T-265.md DOING T-265 APK 已安装;待真机重跑与 Admin 两个计数核对
docs/tasks/T-266.md DONE 将新签发设备 Bearer token 固定有效期延长为30天
docs/tasks/T-269.md DOING 商品详情页返回祖先可点识别修复与开 App 有界归位已实现;待真机停在详情页复跑与 Admin 诊断验收
docs/tasks/T-270.md DOING 状态派生、一次性切回与通知降级已实现并完成显式返回 smoke;待真实终态自动触发验收
docs/tasks/T-271.md DOING 移除候选卡片过滤 hasImage 否决权,rejImage 改为观测计数,其余七项判定不变;待真机验证与 Admin 计数核对
docs/tasks/T-272.md DOING 规则优先并使用 Roubao 本地 VLM 有界兜底选择、最终同时复核颜色和尺码
docs/tasks/T-273.md DONE 设置页用固定测试图单次验证本机模型配置并显示稳定失败分类
docs/tasks/T-274.md DONE 临时候选 locator 唯一消歧重复标题签名并细分节点打开失败
docs/tasks/T-275.md DONE 拆分超长候选事件、修复旧 outbox,并正确处理不可重试的后台拒绝
docs/tasks/T-276.md DONE 将候选图片搜索收敛为两轮:第一轮检查 6 个,第二轮检查 2 个并保底
docs/tasks/T-277.md DONE 使用裁剪节点 JSON 和本机 VLM 兜底规格选择、SKU 摘要及拆分价格
docs/tasks/T-278.md DONE 任务价格为空时使用后端冻结的低价总额上限,并按实际规格价格复核
docs/tasks/T-279.md DONE 跑通 Admin 确认商品后的身份复核、规格/价格兜底和待支付下单
docs/tasks/T-280.md DONE 安全停止后通过控制面心跳确认后台取消并清理本地任务
docs/tasks/T-281.md DONE 修复首轮规格 AI 兜底、空价格调用和带标签价格解析,并写入本地采购诊断记录
docs/design/ 已确认 T-202 原型索引、4 个管理页和 7 个 Android 页面
deepseek总结.txt 已有 历史讨论摘要,不是正式需求权威
android-buyer/ 已有 Roubao main 固定 commit 的 Android 基线
android-buyer/task-contract/ 已有 Android/CLI 共享 ProbeTask 与 TaskSource
android-buyer/tools/shopee-importer/ 已有 开发机私有 fixture 导入 CLI
backend-api/ 已有 Go-Gin 任务 API、SQLite、图片存储、管理 Web 和 migration
init.ps1 / init.sh 已验证/待跨平台 Windows 同时验证 Android/Go;Unix 入口待 Linux/WSL 复核

任务摘要

  • 已完成:T-001 至 T-004、T-101 至 T-104、T-201 至 T-219。
  • 已完成:另含 T-220 至 T-242 ERP 契约、货运存储、采购需求生成、日期增量同步、Go 直连协议、OCR 会话预检、稳定预检错误、安全诊断日志、直连 FreightSource、旧 Connector 清理、受控本地凭证加载、同步单号导入、分钟时间兼容、货运商品元数据契约、本地图片缓存、 货运管理展示优化和受约束本地删除。
  • 已完成:T-247/T-248 图片搜索状态机、execution-scoped 三阶段门禁、SKU 硬匹配、 准确候选增量快照、第三轮两个默认结果保底、受限分享链接解析和 1 至 3 秒动作停顿。
  • 已完成:T-249 保留同一 ERP 商品 revision 的单一采购需求/任务身份,为未触发下单 围栏的 FAILED/CANCELED 任务增加带原因、审计和幂等保护的安全重新执行;任何下单 状态不确定的任务继续禁止重试。
  • 已完成:T-250 将前两轮图片搜索限制为每轮 150 秒、第三轮 95 秒,配套收紧候选 检查和滚动数量并移除候选步骤内部重复重试;三轮步骤预算合计 395 秒。
  • 已完成:T-251 在结果页外壳出现后最多等待 10 秒候选卡稳定,细分无卡片、SKU 不匹配、身份未解析和未找到目标,并在第三轮耗尽后复用终态 outbox 结束 execution; 升级前已耗尽状态也能幂等恢复。
  • 已完成:T-252 使用内部 exported=false 前台 Activity 读取 PDD 复制链接,按 分享、复制、前台中继、剪贴板权限、链接格式/网络和身份冲突细分失败;规格已核验 但身份未解析的商品最多保留两个诊断观察,终态前与 resolved 前缀一并回传但不能 授权下单。确定性的剪贴板基础设施故障首轮终止,不再重复三轮。
  • 已完成:T-253 将跳转响应改为优先验证 Location 且不读取正文,并把普通响应 正文改为最多读取 64 KiB;goods2.html?ps=<opaque-token> 的小体积 307 可直接 解析下一跳 goods_id,不会因固定长度正文读取抛 EOFException。Debug/Release 各 235 项 App 单测、lint、APK 构建和根 init.ps1 均通过。
  • 已完成:T-266 将新签发设备 Bearer token 改为固定30天绝对有效期,API 返回 expires_in=2592000;不迁移既有 token,不滚动续期,禁用和撤销立即生效。
  • 当前 DOING:T-259 已实现安全停止后一次性补传既有 outbox,并保持同步决策为 STOP;最终需在测试设备冷启动 Roubao,验证既有 execution 收敛到 WAITING_CONFIRMATION 且不发生任何拼多多动作。T-260 已实现设备本地节奏设置、 成败动作同停顿、轮次预算联动、可行性/60% 授权窗口校验和数值诊断;Debug/Release 各 272 项单测、lint 和两个 APK 构建通过,最终慢档真机执行仍待采购人员完成。 T-261 已实现技术失败后的关闭规格弹层/返回结果页清理、规格读取失败细分和追加诊断; 安全停止零清理,清理中遇风控或支付边界立即中止,原技术失败码不变。Debug/Release 各 282 项单测、lint 和两个 APK 构建通过,最终真机复现与 Admin 诊断核对待完成。 T-265 已恢复安全入口之后的唯一「免拼购买」入口,订单确认页只允许返回并跳过当前 候选,新增两个尾部诊断计数;Debug/Release 各 336 项单测、lintDebug 和两个 APK 构建通过,待设备连接后完成真机与 Admin 验收。

当前可运行内容

.\init.ps1

$env:RUN_START_COMMAND = "1"
.\init.ps1

Set-Location backend-api
$env:GOTOOLCHAIN = "local"
go run ./cmd/migrate up
$env:CMROUBAO_AUTH_PASSWORD = "至少 5 个 UTF-8 字节"
go run ./cmd/authctl create-user ADMIN admin
Remove-Item Env:CMROUBAO_AUTH_PASSWORD
$env:CMROUBAO_AUTH_PASSWORD = "账号新密码,至少 5 个 UTF-8 字节"
go run ./cmd/authctl reset-password admin
Remove-Item Env:CMROUBAO_AUTH_PASSWORD
go run ./cmd/api

2026-07-25 已在 PKG110、Android 16/API 36、拼多多 8.17.0 上完成 Debug APK 固定词搜索和 5 个候选采集。默认首屏为候选探针,用户点击后五步全部完成,5 张 匿名 PNG 与 manifest 哈希一致并返回结果页;logcat 无崩溃或 ANR。

同日用显式私有 fixture 和一次性本机 OpenAI 兼容 mock 完成 T-103 Android smoke: 只发出 1 次 POST 和 1 张 JPEG data URL,请求不含订单/店铺字段或数量键;严格响应 进入 READY,UI 保留原 SKU/数量、空预算和警告。恢复无密钥 provider 后失败状态会 清空旧结果;设备原 API provider 设置已恢复。该 smoke 只证明集成与隐私边界,不 代表真实 VLM 提取质量;真实凭证调用未执行。

同日完成 T-104 真机 smoke:结构化需求搜索词驱动拼多多搜索并采集 5 份候选证据, 本机 mock 精确收到 5 次按 ordinal 排序的单图 POST;请求未包含订单、店铺、本机 路径或数量字段。严格评估进入“等待人工确认”,人员可标记建议候选可用或拒绝, order_submitted 始终为 false;日志敏感词、Base64、原始响应和 schema/prompt 命中均为 0。该结果不代表真实模型的商品匹配质量。

2026-07-27 完成 T-211 真机 smoke:PKG110 上从后台任务下载并校验参考 JPEG,写入 一次性匿名 MediaStore 图片后进入拼多多拍照搜索并选择该图。App 完成 4 个有界候选 详情和证据采集并以 PDD_IMAGE_SEARCH 回传后台;不足 5 个未凑数,临时图库图片在 流程结束后删除。验证期间修复相机自动结果页竞态和 MediaStore volume URI 差异; 测试任务随后取消,全程未进入购物车、订单或支付。真实 VLM provider 尚未参与本次 smoke,当前结论只覆盖图片召回、严格契约和回传链路。

同日完成 T-201 后端 smoke:本机迁移执行 status -> up -> up -> down -> up, 第二次 up 应用数为 0;API 真实进程的 GET /healthz 返回 200 和稳定 JSON, 未知路由返回 404,错误方法返回 405,无默认 CORS,stdout/stderr 均为空。 http.Server.Shutdown 由集成测试验证在 1 秒预算内结束。当前 Windows 没有可用 WSL 发行版,因此 init.sh 未实际运行;Windows 标准入口已验证。

2026-07-26 完成 T-203:新增两条业务 migration、图片规范化存储、任务领域/用例/ SQLite 仓储、管理 API 和 SSR Web。创建/上传幂等,列表稳定分页,详情可读取同源 规范化参考图,只有 PENDING 可取消。T-204 前业务路由仅限 loopback,Web 写操作 使用双提交 CSRF;这不是正式鉴权。真实 HTTP/Playwright 和 migration CLI smoke、 99 个 Go 测试、全包 race/vet、Windows 构建与根 init.ps1 全部通过。

2026-07-26 完成 T-204:新增 users/devices/admin_sessions/access_tokens 与任务 actor migration、bcrypt 密码、opaque 凭证、authctl、管理登录/退出和 App 联合认证。 ADMIN Cookie 与 BUYER 设备 Bearer token 完全隔离;非 loopback 监听必须配置内建 TLS。真实 SQLite/Gin smoke 验证 migration up/down/up、账号/设备预置、App token、 管理登录、任务创建 actor 和退出;Playwright 在 1440×900、390×844、360×800 验证无横向溢出,发现并修复退出路由漏装配及 T-203 旧 CSRF Cookie 路径兼容问题。 142 个 Go 测试、全包 race/vet、Windows 三入口构建与根 init.ps1 均通过。

2026-07-26 完成 T-205:新增设备 readiness、claim/execution/lifecycle migration, 实现 client-generated claim token 安全重放、跨连接原子领取、CLAIMED/运行租约、 start/heartbeat/release、管理取消请求、App cancel-ack 和当前 claim 参考图授权。 真实 TCP 并发测试验证同设备同时 claim 只有一个成功;迁移 CLI 完成 status/up/up/down/up。Playwright 连接真实服务验证管理任务详情在 1440×900、 390×844、360×800 无横向溢出、破图或取消弹窗重叠;执行中安全停止文案由 SSR 测试覆盖。192 个 Go 测试、全包 race/vet、Windows 三入口构建和根 init.ps1 全部通过。

2026-07-29 完成 T-246 代码:App 登录且 readiness 通过后每 10 秒自动检查任务, 自动 claim、等待参考图稳定窗口并 start;本地 VLM 配置完整时串联需求提取、图片搜索 和候选评估,否则使用确定性 SKU 硬约束。候选只在语义或本地 OCR 得到唯一 goods_id 后回传,后台保存规范 PDD URL、标题、SKU、价格及两张本地证据图。 Admin 选中后,schema v2 命令把商品 ID/URL 纳入不可变授权和 SHA-256,App 定向打开 该商品并复核后沿用 T-218 一次提交围栏和待付款订单对账。后台 heartbeat 可原子清理 已请求取消且租约过期的旧任务。go test ./...、race、vet、三个 Go 入口构建、 Android 单测、Debug/Release 构建均通过;Debug APK 已覆盖安装到 PKG110。为避免在 服务端应用 v18 前触发真实采购,本次未自动启动 App,真实 PDD 页面 smoke 待启动后 执行。

维护规则

发生以下变化时覆盖更新本文:

  • 初始化 Git 或接入上游代码。
  • 获得首个可复现 Android 构建、安装或启动命令。
  • 建立后端和真实测试命令。
  • 设备、拼多多和 VLM 基线确定。
  • 项目阶段、目录或 blocker 变化。

任务的详细状态、验证和决策写入 docs/tasks/T-<编号>.md,本文只保留快照。