8.9 KiB
id, title, phase, deps, status, created, vikunja_task_id, context_ref, work_branch, needs_device, needs_human_review, write_paths
| id | title | phase | deps | status | created | vikunja_task_id | context_ref | work_branch | needs_device | needs_human_review | write_paths | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| T-102 | 验证按链接打开商品详情页 | 1 |
|
DOING | 2026-08-04 | 22 | 393f26d |
task/t-102-open-product | true | true |
|
问题 / 背景
T-101 已证明同一台 PKG110(Android 16、拼多多 8.17.0)可通过 USB/WiFi 显式 serial 完成只读截图与完整 XML 取证。MVP 下一风险是任务自带的合法拼多多链接能否由 Android intent 打开到对应商品详情页。此前项目和旧文档不能证明当前 App 的行为;若先写详情页判据,会把未经本项目真机验证的假设带入 T-103。
关联需求与交互
- 功能:F-006 的第一步
open_product(url);仅覆盖链接打开,不覆盖规格面板、规格选择或价格。 - 用户故事 / 交互:采购工具执行链接任务前的只读真机 spike;无生产 GUI。
- 架构 / API:
docs/04-architecture.md第三节 A 路径;docs/api.md的 canonicalproduct_url/goods_id示例;T-103 前置。
方案
- 只接受 HTTPS canonical 链接
https://mobile.yangkeduo.com/goods.html?goods_id=<纯数字>;拒绝 userinfo、非默认端口、fragment、重复/缺失/非数字 goods_id、其他 host/path 和额外业务参数。解析后由代码按 goods_id 重建 canonical URL,绝不把任意输入拼入 shell。 - 复用 T-101 的显式 serial、同机多通道 fail-closed、no-reconnect、类型化超时和原子证据发布边界;运行拼多多版本必须精确等于本项目已取证的 8.17.0,否则在打开链接前停止。
- 通过参数数组执行只含 Android
VIEWintent 语义的adb shell am start -W,显式限定包com.xunmeng.pinduoduo;不使用 shell 字符串、不点击/滑动/输入任何控件。Android 命令失败、超时、未解析 intent、未停留在拼多多包、截图/XML 失败分别给出脱敏错误。 - 启动后只读取 current app/package、截图和
dumpWindowHierarchy(compressed=False),manifest 记录 goods_id、canonical URL、设备/App 元数据、命令结果摘要、路径与 SHA-256,不记录页面全文或原始 serial。原始截图/XML 仅存%LOCALAPPDATA%,不提交 Git。 - 离线 mock 测试覆盖 URL 正反例、参数数组与超时、版本失配在 intent 前停止、包不匹配、无 UI 点击 API、证据原子性和异常脱敏。代码完成后由人使用一个明确 goods_id 在仅单通道在线的真机执行,人工确认截图确为对应商品详情页并检查 XML/截图无敏感信息;再把设备、Android、拼多多版本、goods_id、路径、SHA-256 与结论写入执行记录。
验收要点
- 合法 canonical 链接可在拼多多 8.17.0 上打开;人工确认到达与 goods_id 对应的商品详情页。
- 非法链接、设备状态、App 版本失配、intent 失败/超时、落在非拼多多包、证据失败均有可区分且不泄露页面内容的错误。
- 取证记录包含 PKG110、Android 16、连接方式、拼多多 8.17.0、goods_id、canonical URL、截图/XML 本地路径与 SHA-256。
- client 全部单测、compileall、wheel metadata、上下文校验及完整
init.ps1通过。 needs_device=true:agent 只能完成离线实现并保持 DOING;只有人完成真机链接打开、页面对应性与隐私检查后才能 DONE。
执行记录
2026-08-04T01:09:47Z · ila
2026-08-04:已认领 T-102,工作分支 task/t-102-open-product,从任务定义提交 4281b06 开始实现。离线阶段只实现严格 canonical URL 校验、Android VIEW intent、版本/设备 fail-closed 与原子证据采集;不写商品详情页节点判据,不操作任何 App 控件。needs_device=true,离线实现完成后仍保持 DOING,等待人工提供明确商品链接并完成真机页面对应性和隐私验收。
2026-08-04T01:27:08Z · ila
2026-08-04:T-102 离线实现已由子 agent 完成并经主 agent 独立审查、两轮退回修正后通过,代码提交 7040bb6。实现包含:唯一 canonical 商品 URL 校验与重建、ADB 内层纯数字 goods_id 二次围栏、固定 package 的 Android VIEW intent、拼多多 8.17.0 intent 前版本围栏、前台 package 核验,以及截图/XML 原子取证与脱敏 manifest;无点击、滑动、输入、规格、价格、下单或支付能力,也未写商品详情页节点/Activity 判据。主审验证:43 项 client 离线测试、compileall、完整 init.ps1(含 admin test/vet/build)、wheel metadata、agent-context 与 diff-check 均通过;当前 wheel SHA-256 为 c675cd527849149ec25f213a0d67da31d0bb497cd8c5ed255d71154c103659ed(审计临时产物已清理)。未连接或操作真机,T-102 继续保持 DOING,等待人工使用明确 canonical 商品链接执行取证,并确认页面对应性与隐私。
2026-08-04T01:32:31Z · ila
2026-08-04 人工真机首轮:使用 WiFi serial 192.168.0.173:5555 与 canonical 商品链接 https://mobile.yangkeduo.com/goods.html?goods_id=958756616606 执行 T-102 脚本。脚本通过 URL/intent 前置围栏,但在 intent 后返回“商品链接打开后前台应用不是拼多多”,按 fail-closed 规则停止,未发布完整取证。人在 Chrome 中可打开该 URL,只能证明网页链接有效,不能证明拼多多 App 已接管。T-102 保持 DOING;下一步由人只读取当前前台 package,区分瞬时切换/检查过早与实际落到 Chrome、系统解析器或其他包,在得到事实前不移除 package 围栏、不增加页面判据或 UI 兜底。
2026-08-04T01:34:39Z · ila
2026-08-04 人工追加诊断:T-102 首轮返回前台包不符后,人在未切换 App 的情况下立即执行只读 dumpsys window,得到 mCurrentFocus 与 mFocusedApp 均为 com.xunmeng.pinduoduo/com.xunmeng.pinduoduo.activity.NewPageActivity。该事实证明失败返回后前台已稳定到拼多多,支持“一次性 app_current 检查过早/存在异步切换窗口”的诊断;Activity 名只记录为诊断证据,不作为商品详情页判据。修复保持 package 围栏:改为有限时长、只读 package 的轮询,超时仍 fail closed,期间不点击、滑动、输入或读取页面节点。
2026-08-04T01:40:42Z · ila
2026-08-04:已按人工 foreground 证据完成最小修复,代码提交 cb646b4。保留 PDD package 围栏,将 intent 后的一次性判断改为以 CLI --timeout 为 deadline、默认 0.2 秒间隔的只读 package 轮询;只有观察到 com.xunmeng.pinduoduo 才采集截图/XML,超时仍 fail closed。轮询不读取 Activity/节点,不点击、滑动或输入。主 agent 已独立验证 46 项 client 测试、compileall、完整 init.ps1、wheel metadata、agent-context、diff-check;wheel SHA-256 80fbc73785bb12b40856c6b1ef503bdb5cbc350fadd2b23cc6cc58358499bfe1,临时产物已清理。未由 agent 连接真机,T-102 保持 DOING,等待人以 goods_id 958756616606 重跑原命令并检查页面对应性与隐私。
边界
- 本任务只验证由显式 canonical 链接启动拼多多并采集本地证据;不编写或声称商品详情页节点判据, 页面是否为对应商品必须由人查看本项目新产物确认。
- 只允许 Android
VIEWintent;不点击、滑动、长按、输入任何 App 控件,不打开规格面板,不选择 颜色或尺码,不读取价格,不进入购买或订单页面。 - 不引用或实现
go_to_order_confirm()、submit_order()、提交订单、付款、支付、授权或采购服务接口; 不把前序项目的 URL、activity、节点文本或页面结论当作事实。 - 输入 URL 必须先严格解析并按纯数字
goods_id重建,再以参数数组传给 ADB;禁止 shell 拼接、 任意 scheme/host/path、短链跳转、额外参数或自动猜测链接。 - 运行拼多多版本与本项目已取证版本不一致时必须在 intent 前停止;证据失败、当前包不符或结果无法 由人确认时均不得声称成功,不增加自动点击或其他兜底路径。
- 截图和完整 XML 只保存在明确的本地 T-102 目录,人工检查后只把路径、SHA-256 与非敏感元数据 写入执行记录;不得提交原始证据,不记录地址、手机号、支付信息或无关页面正文。
- 不修改
admin/、业务 API、数据模型、生产 GUI 或 T-103 规格面板逻辑。 needs_device: true:agent 完成离线实现后保持DOING;只有人使用明确 goods_id 完成真机打开、 确认对应商品详情页并完成隐私检查后才能标DONE。