diff --git a/docs/current-state.md b/docs/current-state.md index 0e5ff5c..5274a3f 100644 --- a/docs/current-state.md +++ b/docs/current-state.md @@ -12,7 +12,7 @@ ## 当前快照 - 日期:2026-08-05 -- 阶段:**Phase 1 · T-104 同商品安全退出与 Phase 2 安全服务端任务并行** +- 阶段:**Phase 1 · T-105 数量设置取证与 Phase 2 安全服务端任务并行** - MVP 形态:手工填链接建单 → 批量“开始采购”并签发一次性授权 → 定时领取 → 同一趟精确 选规格 / 三道价格闸门 / 提交围栏 / 点击一次 → 待付款。管理员点击“开始采购”即授权桌面端 创建待付款订单;不再有试选后确认,系统绝不自动付款。 @@ -28,9 +28,9 @@ 凭据保护、SQLite append-only 恢复状态图、Global named mutex 与 durable gateway。原生桌面主界面、 显式本地配置、停止/重启会话边界和安全轮询协调器已实现;未注入单趟执行 consumer 时保持零领取。 已取证的固定尺码 reveal、精确 M 选择、规格面板单价 `12.88` 与一次 Back 已进入生产 Flow 并完成 - 真机人工验收;同商品详情页的自动安全退出判据由 T-104 收紧,数量/确认页/提交仍未开放。 + 真机人工验收;T-104 已把同商品详情页安全退出收紧为版本绑定、连续两帧稳定判据,数量/确认页/提交仍未开放。 - 测试:采购服务已覆盖登录、建单、授权、详情/证据、设备身份、迁移、原子 claim/renew 与竞态; - 采购工具 293 项离线单元测试(全部 mock,不连接真机)。 + 采购工具 298 项离线单元测试(全部 mock,不连接真机)。 - 数据:受保护迁移已落到 `00005_task_claims.sql`。旧两趟模型已移除;开始采购会锁定任务快照并签发 一次性授权,领取会创建唯一 attempt/claim、HMAC claim token 与有界租约。T-211 已统一 title、SKU、 goods_id 与金额的双端 wire 上限,并证明最坏合法 claim 响应小于 32 KiB。仓库不含业务实例数据。 @@ -52,8 +52,8 @@ 第一行中心 `(865,2218)`,旧内容区小字为零点击反例并保留一次点击无重试。T-103 已完成固定一次 reveal 的原子证据、人审和生产化:同一 Flow 只允许 current-only 初态依次执行目标颜色、reveal、 exact M,随后复用既有 dual 目标态读取 `12.88`;入口、颜色、reveal、M、Back 各一次的生产真机 - manifest 与 Back 前后截图已由项目所有者完成三项人工确认。T-104 接续把“Back 后仍为同一商品” - 从人工结论收紧为连续两帧、版本绑定的自动 post-exit 判据。 + manifest 与 Back 前后截图已由项目所有者完成三项人工确认。T-104 又用独立 post-exit 真机证据, + 把“Back 后仍为同一商品”收紧为完整标题正锚、底部入口、连续两帧与版本绑定的自动判据。 完整事件链必须等待 T-107 与 T-210:先让 Gate2/Gate3 证据进入真实 schema,再实现 T-205 事件, 不用 mock 或无证据成功事件抢跑。 @@ -62,7 +62,7 @@ | 路径 | 状态 | 说明 | | --- | --- | --- | | `docs/` | 已有 | 项目规范化文档,本次已完整生成 | -| `docs/tasks/` | 已有(含 T-001~T-111、T-201~T-211、T-301~T-308、T-400~T-405) | T-103、T-303、T-211 已完成;T-304 代码完成后保持 DOING 等人工 UI 复核;T-104 阶段 A 窄取证脚本已通过离线审查,等待一次真机 Back 与人工复核;双端围栏、真实提交、调和、打包与只读验收均已落成任务 | +| `docs/tasks/` | 已有(含 T-001~T-111、T-201~T-211、T-301~T-308、T-400~T-405) | T-103、T-104、T-303、T-211 已完成;T-304 代码完成后保持 DOING 等人工 UI 复核;下一段真机能力为 T-105 数量设置取证;双端围栏、真实提交、调和、打包与只读验收均已落成任务 | | `docs/design/` | 已有(6 个原型) | web 登录 / 建单 / 工作台 / 详情,desk 采购执行 / 配置;均已人工确认 | | `scripts/` | 已有 | 上下文门禁、Vikunja 单向导出与 MCP 启动包装 | | `admin/` | 已初始化 | Go 1.23+ / gin / SQLite,含建单/授权/详情/证据/设备身份与原子 claim/renew;不执行真机动作 | @@ -85,7 +85,7 @@ - 已完成 T-110、T-111、T-203、T-204、T-301 与 T-302。服务端已能授权、认证设备、原子领取、 稳定重放和续租;claim token 不是提交许可,尚无事件、提交围栏或结果 API。 - T-103 已完成受控入口、精确颜色、固定 reveal、exact M、规格面板 `12.88` 读价、一次 Back 和最终 - 人工真机验收;T-104~T-107 按安全退出、数量、确认页风险逐段开放。真机运行要求 + 人工真机验收;T-104 已完成同商品安全退出,T-105~T-107 继续按数量、确认页风险逐段开放。真机运行要求 同一物理手机只保留一个 ADB 通道;CLI 已增加不回显页面 正文的固定白名单失败阶段码;`sku_entry` 动态页面误判已按最新真机证据修复,覆盖点击中心的浮窗 会保持零点击,入口失败也已细分为前置、发现、点击和面板后置验证四个固定子阶段。服务端后续顺序已收紧为 @@ -206,8 +206,8 @@ classifier、颜色与 S→M 精确选择、滚动态价格判据和独立一次 2. **拼多多页面结构随版本变化**,已观察到详情页无独立规格入口、价格节点被拆分等情况。 3. **授权卡死**:前序项目出现过 `EXECUTING` 授权永不推进导致任务锁死。本项目在 T-207 实现围栏前超时 / 放弃,在 T-208 实现围栏后调和;围栏后不得释放或重试。 -4. **安全退出仍需收紧**:T-103 已完成规格选择与闸门一读价,但 Back 后同一商品身份目前仍由人审; - T-104 必须用本项目 post-exit 真机证据形成连续稳定的自动判据,不能把“面板消失”当成功。 +4. **数量能力仍未开放**:T-104 已完成同商品连续稳定安全退出;T-105 必须先取得本项目数量控件与 + readback 的真机证据,不能从旧项目或推理直接实现加减数量。 5. **MVP 已收窄**:只做手工填链接、批量开始采购和单趟创建待付款订单。Excel、ERP、图搜、 批量顺序编排 / 暂停接管、订单自动核对、AI 辅助全部推到 V2(见 `06-tasks.md` 的 T-501~T-508)。 diff --git a/docs/tasks/T-104.md b/docs/tasks/T-104.md index cc982b2..eef76c3 100644 --- a/docs/tasks/T-104.md +++ b/docs/tasks/T-104.md @@ -3,7 +3,7 @@ id: T-104 title: 验证规格选择能力安全退出 phase: 1 deps: [T-103] -status: DOING +status: DONE created: 2026-08-04 vikunja_task_id: 32 context_ref: 29fb528 @@ -21,7 +21,7 @@ write_paths: - docs/current-state.md --- - + ## 问题 / 背景 T-103 已实现受控规格选择、闸门一读价、规格面板原始截图和单次 Back,但当前 `exit_sku_panel_safely()` 只要 hierarchy 变化且规格面板判据不再成立就返回成功。现有纯 mock 测试还把 Back 后的空 hierarchy 当成成功并允许 runner 发布 `safe_exit=completed`。2026-08-04 的只读诊断同时证明:通知栏覆盖时 `app_current` 仍可能报告拼多多,而节点树全部属于 SystemUI。因此“面板消失”或“前台包仍是 PDD”都不是安全退出的充分条件;T-104 必须先取得独立 post-exit 真机证据,再把后置条件收紧为稳定回到同一目标商品详情页。 @@ -112,6 +112,20 @@ root 独立门禁:focused 71/71、client full 293/293、compileall、validate_ 项目所有者完成三项人工确认:①手机与截图均为 goods_id 937122477375 的同一商品详情;②规格面板已关闭,未进入确认、提交或支付页面;③未创建订单。截图/XML 由同一 staging 原子发布且前后 package/activity/version 稳定。 阶段 A 达标。任务保持 DOING,下一步只从上述本项目真实 post-exit XML 提取无个人信息/支付凭据的最小 `product_exit_8_17_0.xml`,再实现版本绑定、同商品正锚、连续两帧稳定的阶段 B 判据。 + +### 2026-08-05T09:56:55Z · ila + +2026-08-05 T-104 阶段 B 完成,代码 commit `1bb5492` 已推送 main。 + +从已人工确认 raw XML 提取最小 `client/tests/pdd/fixtures/product_exit_8_17_0.xml`:同商品正锚为唯一 exact `tv_title` 容器、完整标题 content-desc、两段直接只读文本及固定属性;同时要求已取证底部规格入口完整投影唯一。安全退出不解析或返回商品页价格,规格入口中的金额只保持既有身份常量,Gate1 仍只来自规格面板原始截图。 + +`exit_sku_panel_safely()` 现在每帧重查 PDD 8.17.0/前台包,要求同商品投影连续两次一致;单次命中后发生漂移会清空稳定计数。空 hierarchy、面板仍在、SystemUI、锁屏、非 PDD overlay、PDD 其他页、正锚缺失/重复/属性漂移、版本/前台漂移与合成危险动作语义全部失败关闭,所有路径 Back≤1。 + +runner 只有在精确规格、Gate1 读价、原始规格 PNG、严格同商品退出和完整动作审计全部成功后才发布 `safe_exit=completed`;`SkuSelectionRunResult` 明确返回原始规格 `screenshot_path` 与截图 RPC 成功附近的 UTC-aware `captured_at`,manifest 使用同一时间。post-exit 图不进入 runner 结果,也无 Gate1 资格。 + +验证:真实 post-exit raw 与最小 fixture 均被新投影命中;focused 76/76、client full 298/298、compileall、validate_agent_context、git diff --check、完整 init.ps1 全部通过。静态边界继续证明 T-104 不可达数量、确认、授权、提交围栏、submit_order_once 或支付能力。 + +结合阶段 A 的最终 manifest 与项目所有者三项人工确认,T-104 全部验收要点已满足,可转 DONE。 ## 边界