docs(architecture): allow internal raw evidence screenshots
This commit is contained in:
+14
-32
@@ -149,41 +149,23 @@ T-103 已证明当前衣服商品没有独立「规格/已选」入口。T-110
|
|||||||
.\client\.venv\Scripts\python.exe client\scripts\capture_sku_panel_spike.py --serial <SERIAL> --url "https://mobile.yangkeduo.com/goods.html?goods_id=<GOODS_ID>" --state target-selection-restored --output-dir "$env:LOCALAPPDATA\cmbuyer\artifacts\T-103\sku-panel-target-restored-<GOODS_ID>-v2\raw" --timeout 10 --adb D:\Portable\adb\adb.exe
|
.\client\.venv\Scripts\python.exe client\scripts\capture_sku_panel_spike.py --serial <SERIAL> --url "https://mobile.yangkeduo.com/goods.html?goods_id=<GOODS_ID>" --state target-selection-restored --output-dir "$env:LOCALAPPDATA\cmbuyer\artifacts\T-103\sku-panel-target-restored-<GOODS_ID>-v2\raw" --timeout 10 --adb D:\Portable\adb\adb.exe
|
||||||
```
|
```
|
||||||
|
|
||||||
PDD 规格面板不可避免显示收货区域和掩码手机号。原始截图/XML 只能留在
|
PDD 规格面板不可避免显示收货区域和手机号。项目所有者确认 cmbuyer 是内部系统,正式流程允许把
|
||||||
`%LOCALAPPDATA%\cmbuyer\artifacts\...\raw` 隔离目录,不供 agent、fixture、业务或 HTTP 上传读取;
|
页面原始截图上传采购服务供已登录管理员查看,不做遮罩或裁剪。完整 XML 仍只留在
|
||||||
T-103 已在 `client/src/cmbuyer_client/device/sku_evidence_sanitizer.py` 实现本机确定性脱敏器,并由
|
`%LOCALAPPDATA%\cmbuyer\artifacts\...\raw`;采购工具运行时在内存中读取当前页面树,但只返回规格、
|
||||||
`client/scripts/sanitize_sku_panel_evidence.py` 提供离线 CLI。第一组新 raw 的 PNG 头部由人确认实际为
|
选中态、价格和页面状态摘要,不把地址或手机号解析为业务字段,也不写入日志、Git 或 Vikunja。
|
||||||
1080×2376,推翻了 v1 将截图和 XML 坐标空间都写成 1080×2400 的假设;v1 正确拒绝且原始证据未重采。
|
|
||||||
随后 v2 在同一份 raw 上安全报告 XML `observed 1080x2376` 并拒绝发布,证明其独立配置的
|
|
||||||
1080×2400 假设同样不成立。v3 用同一 raw 成功发布后,人已确认截图隐私带完整遮挡、派生 XML
|
|
||||||
不含地址或手机号且目标颜色和尺码仍为预选;但顶部当前价节点横跨隐私带边界,v3 只留下断片,
|
|
||||||
而下方完整的“提交订单 ¥12.88”属于第一趟硬拒绝区,不能作为 SKU 单价证据。
|
|
||||||
|
|
||||||
当前 `t103-privacy-v4` 继续精确绑定 PKG110 / Android 16 / 拼多多 8.17.0 / goods_id
|
T-103 已完成 `t103-privacy-v5` 的一次真实派生:人确认 XML 无实际地址/手机号、目标颜色
|
||||||
`937122477375`;screenshot space 与 XML coordinate space 仍分别建模、分别校验,当前都精确为
|
“黑色CHA(纯棉)”与尺码“M(建议100-115)”保留;安全节点显示顶部当前价“快卖完 ¥12.88”与原价
|
||||||
1080×2376,且都把
|
“¥29.88”,底部“提交订单 ¥12.88”明确属于第一趟硬拒绝区。派生截图的整宽黑色隐私带遮住了顶部
|
||||||
`[0,0,1080,540)` 作为整宽隐私带。截图覆盖该区域;XML 递归移除区域内节点,跨界容器只清空自身
|
价格文字的一半,这只说明该截图不适合上传展示,不否定 XML 中已经确认的规格面板价格事实。
|
||||||
敏感属性并保留下方子节点。v4 **不改变或缩小截图遮罩**,只允许交界带两个已取证精确 bounds 中,
|
|
||||||
属于拼多多包、不可点击、可见且启用的 `TextView` 叶节点投影最小价格属性;当前价必须唯一匹配
|
|
||||||
可选“快卖光”前缀加人民币符号和两位小数,原价同格式且最多一个。包外、可点击、结构漂移、重复、
|
|
||||||
零值、混杂文本或坐标变化一律拒绝。地址依靠已确认的整块几何隔离而不是易漏的关键词表;完整、
|
|
||||||
掩码、带分隔符或跨节点手机号残留会被自动复检拒绝。v4 离线实现已通过合成测试,仍须由人用同一
|
|
||||||
第一态 raw 重跑并确认派生结果,才构成真实价格证据。
|
|
||||||
|
|
||||||
```powershell
|
为加快 MVP,T-103 从此不再修改或调用截图遮罩器。现有 v5 派生 XML 只用于提取不含页面个人信息的
|
||||||
.\client\.venv\Scripts\python.exe client\scripts\sanitize_sku_panel_evidence.py --raw-dir "<证据目录>\raw" --output-dir "<证据目录>\derived"
|
最小 fixture;正式 `TrialSkuFlow` 在本机实时页面树上按拼多多 8.17.0 与面板结构读取允许字段,完整
|
||||||
```
|
页面树不落日志、不上传。T-204 直接接入原始截图上传,资产标记 `privacy_tier=INTERNAL_RAW`,只允许
|
||||||
|
已认证设备写入、已登录管理员读取;不上传 XML,不允许外部支付页或支付凭据。
|
||||||
|
|
||||||
脱敏器校验源 manifest 与文件哈希、设备/App/商品/人工状态、截图分辨率和 XML 隐私结构;XML 所有
|
这个范围调整不授权第一趟调整数量、进入确认页、点击“提交订单”或触碰支付控件。最终仍由人把两个
|
||||||
节点观察到的最大 right/bottom 必须精确为 1080×2376,否则只报告非敏感 observed 尺寸并拒绝。它只允许发布到
|
维度改成明确的非目标值,再运行受控入口、精确选择、读价和安全退出脚本完成真机验收。
|
||||||
同级且尚不存在的 `derived`;失败或发布竞态不覆盖已有目录、不留下 staging。派生 manifest 记录
|
|
||||||
`privacy_tier=SANITIZED`、sanitizer 版本、两个坐标空间、清理计数及本机 source/derived 哈希,不记录
|
|
||||||
原始路径、serial 或页面正文;v4 另记录 `preserved_crossing_price_nodes`,用于核对严格价格投影
|
|
||||||
数量。只有自动复检通过并经人确认状态对应性的派生物,agent 才能读取并提取最小 fixture、编写判据。
|
|
||||||
|
|
||||||
2026-08-04 的首轮旧证据只用于确认上述入口事实;其中旧 `initial` 不是规格面板,另两张原始截图含隐私
|
|
||||||
区域,因此 XML 未读取、fixture 与选择器未生成。T-110 完成受控入口与脱敏契约后,T-103 重新取证;
|
|
||||||
该边界调整不授权第一趟调整数量、进入确认页、点击“提交订单”或触碰任何支付控件。
|
|
||||||
|
|
||||||
Windows 的标准入口是仓库根 `./init.ps1`。它要求 Go、两端目录及其哨兵文件存在;已有合规
|
Windows 的标准入口是仓库根 `./init.ps1`。它要求 Go、两端目录及其哨兵文件存在;已有合规
|
||||||
`client/.venv` 时,所有采购工具检查与 validator 都使用该解释器。只有 venv 不存在时,才从 `py -0p`
|
`client/.venv` 时,所有采购工具检查与 validator 都使用该解释器。只有 venv 不存在时,才从 `py -0p`
|
||||||
|
|||||||
+20
-13
@@ -150,7 +150,8 @@ T-103 的真机证据推翻了“商品详情页存在独立规格入口”的
|
|||||||
1. 打开 canonical 商品链接。
|
1. 打开 canonical 商品链接。
|
||||||
2. 点击与证据哈希、拼多多版本和页面状态绑定的精确唯一 `快要抢光` 入口。
|
2. 点击与证据哈希、拼多多版本和页面状态绑定的精确唯一 `快要抢光` 入口。
|
||||||
3. 在已确认的维度容器中精确选择规格并读回选中态。
|
3. 在已确认的维度容器中精确选择规格并读回选中态。
|
||||||
4. 从规格面板读取单价、生成脱敏派生证据、关闭面板并退出商品页。
|
4. 从规格面板读取单价、保存原始截图、关闭面板并退出商品页。T-103 真机 spike 先在本机验证;
|
||||||
|
T-204 再把原始截图接入采购服务供管理员查看。
|
||||||
|
|
||||||
第一趟 capability **不得包含**通用 `click`、数量增减、进入订单确认页、提交订单或付款能力。
|
第一趟 capability **不得包含**通用 `click`、数量增减、进入订单确认页、提交订单或付款能力。
|
||||||
“免拼购买 / 单独购买 / 直接拼成”等其他文案即使人工认为行为相同,也必须各自重新取证后才能评审;
|
“免拼购买 / 单独购买 / 直接拼成”等其他文案即使人工认为行为相同,也必须各自重新取证后才能评审;
|
||||||
@@ -194,10 +195,10 @@ V2 实现时仍遵守:**图搜的唯一产出是 goods_id**,不在搜索结
|
|||||||
| 提交订单控件唯一 | 文本精确等于「提交订单」且可点击祖先唯一,否则停 | 点到未知控件 |
|
| 提交订单控件唯一 | 文本精确等于「提交订单」且可点击祖先唯一,否则停 | 点到未知控件 |
|
||||||
| 数量必须复核 | 设置后读回确认精确等于要求值,否则停 | 买错数量 |
|
| 数量必须复核 | 设置后读回确认精确等于要求值,否则停 | 买错数量 |
|
||||||
| 价格三道闸门 | 见第三节。任一道读不到或不通过即停,**不用其他位置的数字凑合** | 超预算采购 |
|
| 价格三道闸门 | 见第三节。任一道读不到或不通过即停,**不用其他位置的数字凑合** | 超预算采购 |
|
||||||
| 第一趟不下单 | 只允许点击证据/版本绑定的精确唯一受控入口打开规格面板,当前仅为 `快要抢光`;随后只选规格、读价、脱敏取证和返回。数量、确认页、`提交订单`、付款与通用点击能力均不可达 | 无授权下单 |
|
| 第一趟不下单 | 只允许点击证据/版本绑定的精确唯一受控入口打开规格面板,当前仅为 `快要抢光`;随后只选规格、读价、截图和返回。数量、确认页、`提交订单`、付款与通用点击能力均不可达 | 无授权下单 |
|
||||||
| 外部支付页 | 检测到微信等外部支付交接立即停止、转人工、保留证据 | 凭据泄露 |
|
| 外部支付页 | 检测到微信等外部支付交接立即停止、转人工、保留证据 | 凭据泄露 |
|
||||||
| 安全校验 | 检测到验证码、风控、人脸、短信校验立即停止,不尝试绕过 | 封号 / 违规 |
|
| 安全校验 | 检测到验证码、风控、人脸、短信校验立即停止,不尝试绕过 | 封号 / 违规 |
|
||||||
| 敏感信息 | 只读非敏感摘要,不提取收货地址原文、手机号、支付凭据 | 隐私泄露 |
|
| 页面个人信息 | 内部原始截图可包含并上传页面已显示的地址、手机号,供已登录管理员查看;不得把这些内容解析成业务字段或写入普通日志、Git、Vikunja。支付凭据仍不得读取或上传 | 非必要扩散 / 凭据泄露 |
|
||||||
| 授权一次性 | 一笔授权只能产生一笔订单,重复提交幂等 | 重复采购 |
|
| 授权一次性 | 一笔授权只能产生一笔订单,重复提交幂等 | 重复采购 |
|
||||||
| 服务端提交围栏 | 真机点击前必须由采购服务原子冻结授权并创建唯一提交记录;失败或响应不明不得点击 | 并发 / 断网导致重复下单 |
|
| 服务端提交围栏 | 真机点击前必须由采购服务原子冻结授权并创建唯一提交记录;失败或响应不明不得点击 | 并发 / 断网导致重复下单 |
|
||||||
| App 版本失配即停 | 运行版本与本项目已取证版本不一致时停止领取真机任务,先重新取证 | 旧判据误点新页面 |
|
| App 版本失配即停 | 运行版本与本项目已取证版本不一致时停止领取真机任务,先重新取证 | 旧判据误点新页面 |
|
||||||
@@ -387,18 +388,23 @@ PENDING_RETRIAL ─────────────┴─claim→ CLAIMED
|
|||||||
|
|
||||||
| 数据 | 位置 | 理由 |
|
| 数据 | 位置 | 理由 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| 原始商品页 / 规格页 screenshot/XML | **仅采购工具本机隔离目录** | PDD 页面不可避免包含收货区域和掩码手机号;只允许确定性脱敏器读取,不供业务、agent、fixture 或上传消费 |
|
| 原始商品页 / 规格页 screenshot | 采购工具本机 + 采购服务内部证据存储(T-204) | 内部系统允许保留页面中已显示的地址和手机号;设备鉴权后上传,只有已登录管理员可查看,不做遮罩或裁剪 |
|
||||||
| 脱敏派生商品页 / 规格页截图 | 上传采购服务 | 管理员做授权决策必须看;服务端只接收派生哈希和 sanitizer 版本,原始/派生哈希映射仅留本机 manifest |
|
| 原始商品页 / 规格页完整 XML | **仅采购工具本机隔离目录** | 自动化运行时在内存中读取规格/价格,完整 XML 不上传、不进入日志、Git、Vikunja 或 fixture |
|
||||||
|
| T-103 真机 spike 证据 | 先在采购工具本机;T-204 接入上传 | T-103 只验证选择与读价,不实现 HTTP 证据链;这是一项任务拆分,不是禁止原始截图上传 |
|
||||||
| 最小脱敏 XML fixture | 采购工具测试 / 可提交 Git | 只保留页面判据所需结构;自动复检无地址、手机号、支付凭据后才可发布 |
|
| 最小脱敏 XML fixture | 采购工具测试 / 可提交 Git | 只保留页面判据所需结构;自动复检无地址、手机号、支付凭据后才可发布 |
|
||||||
| 脱敏派生订单确认页截图 | 上传采购服务 | 授权后核对与审计必须留;原始物仍只在本机隔离目录 |
|
| 原始订单确认页截图 | 采购服务内部证据存储 | 授权后核对与审计必须留;允许页面已显示的地址/手机号,禁止外部支付凭据 |
|
||||||
| 脱敏派生订单核对截图 | 上传采购服务 | 资金核对证据;原始物仍只在本机隔离目录 |
|
| 原始订单核对截图 | 采购服务内部证据存储 | 资金核对证据;只有已认证设备上传、已登录管理员查看 |
|
||||||
| AI 调用记录(P1) | **仅采购工具本地** | 含 prompt / 响应全文,脱敏成本高 |
|
| AI 调用记录(P1) | **仅采购工具本地** | 含 prompt / 响应全文,脱敏成本高 |
|
||||||
| 失败现场快照 | 原始物仅采购工具本机;只能手工导出脱敏派生物 | 同上 |
|
| 失败现场快照 | 原始物仅采购工具本机;只能手工导出脱敏派生物 | 同上 |
|
||||||
|
|
||||||
原始目录不得被 HTTP sink、Vikunja 导出、日志或 fixture 构建器读取。脱敏器必须先验证设备分辨率、
|
截图上传器只能接收调用方显式传入的截图文件,不能枚举整个原始目录,也不能上传 XML、manifest 中的
|
||||||
页面/App 版本和预期隐私区域,再同时生成派生 screenshot/XML;派生 XML 仍命中手机号模式、截图隐私
|
本机路径或其他文件。采购工具可以在真机流程内存中读取当前页面树,但只返回规格、选中态、价格和页面
|
||||||
区域无法确定、sanitizer 异常或任一哈希不一致时,不发布派生目录。上传端只接受 manifest 明确标记
|
状态摘要;不得把地址或手机号解析成结构化业务字段。原始 XML 不进入 HTTP、日志、Vikunja、Git 或
|
||||||
`privacy_tier=SANITIZED` 的派生截图,**不上传含收货地址、手机号、支付凭据的区域或文本。**
|
fixture;仓库只允许进入与页面判据有关的最小 XML fixture。
|
||||||
|
|
||||||
|
T-204 负责原始截图上传、SHA-256 校验、内部访问控制和保留策略,不再实现遮罩或裁剪。证据响应使用
|
||||||
|
`Cache-Control: no-store`,不得暴露为无需登录的静态目录。外部支付页及任何支付凭据不属于“内部原图
|
||||||
|
可上传”的范围,遇到支付交接仍立即停止。
|
||||||
|
|
||||||
## 六、关键技术难点
|
## 六、关键技术难点
|
||||||
|
|
||||||
@@ -420,7 +426,7 @@ PENDING_RETRIAL ─────────────┴─claim→ CLAIMED
|
|||||||
|
|
||||||
1. **Phase 0 地基**:两端骨架、测试命令、`init` 脚本可运行。
|
1. **Phase 0 地基**:两端骨架、测试命令、`init` 脚本可运行。
|
||||||
2. **Phase 1 真机取证**:WiFi ADB 连通;先验证第一趟的打开商品 → 受控打开规格面板 → 按维度
|
2. **Phase 1 真机取证**:WiFi ADB 连通;先验证第一趟的打开商品 → 受控打开规格面板 → 按维度
|
||||||
精确勾选颜色分类和尺码 → **读到该 SKU 单价** → 脱敏取证 → 退出;再以独立的第二趟 spike
|
精确勾选颜色分类和尺码 → **读到该 SKU 单价** → 原始截图取证 → 退出;再以独立的第二趟 spike
|
||||||
验证设数量 → 进订单确认页 → 读「实付款」。第一趟 capability 不含后三项。
|
验证设数量 → 进订单确认页 → 读「实付款」。第一趟 capability 不含后三项。
|
||||||
**结论写入文档,判据带拼多多 App 版本。**
|
**结论写入文档,判据带拼多多 App 版本。**
|
||||||
3. **Phase 2 采购服务核心**:数据模型与状态机、手工建单、任务查询、试选结果接收、
|
3. **Phase 2 采购服务核心**:数据模型与状态机、手工建单、任务查询、试选结果接收、
|
||||||
@@ -435,7 +441,8 @@ PENDING_RETRIAL ─────────────┴─claim→ CLAIMED
|
|||||||
|
|
||||||
> 2026-08-04:Phase 1 证明已验证衣服商品没有独立规格入口。项目所有者随后批准 T-110 的受控入口
|
> 2026-08-04:Phase 1 证明已验证衣服商品没有独立规格入口。项目所有者随后批准 T-110 的受控入口
|
||||||
> 方案:当前只允许证据绑定的精确唯一 `快要抢光` 打开规格面板,并以 capability 隔离保证数量、确认页、
|
> 方案:当前只允许证据绑定的精确唯一 `快要抢光` 打开规格面板,并以 capability 隔离保证数量、确认页、
|
||||||
> 提交订单和付款在第一趟不可达。T-103 仍须先实现自动脱敏与新证据门禁,完成前 Phase 2 保持冻结。
|
> 提交订单和付款在第一趟不可达。项目所有者随后决定加速 MVP:停止截图遮罩器开发,T-103 使用现有
|
||||||
|
> 安全最小 XML 继续实现选择与读价;T-204 直接把内部原始截图上传采购服务,不遮罩地址或手机号。
|
||||||
|
|
||||||
## 八、项目结构
|
## 八、项目结构
|
||||||
|
|
||||||
|
|||||||
@@ -54,12 +54,13 @@
|
|||||||
|
|
||||||
- 检测到验证码、风控、人脸、短信校验时立即停止,**不尝试绕过**。
|
- 检测到验证码、风控、人脸、短信校验时立即停止,**不尝试绕过**。
|
||||||
- 检测到外部支付交接立即停止,**不读取、不保存、不输入任何凭据**。
|
- 检测到外部支付交接立即停止,**不读取、不保存、不输入任何凭据**。
|
||||||
- 只读非敏感摘要,**不提取收货地址原文、手机号、支付凭据**。
|
- 页面已显示的地址和手机号允许随**内部原始截图**上传采购服务,供已登录管理员核对;不做遮罩或裁剪。
|
||||||
- 上传服务端的证据必须先脱敏。
|
- 地址和手机号不得被解析为结构化业务字段,也不得写入普通日志、Git、Vikunja、fixture 或错误消息。
|
||||||
- PDD 页面不可避免显示地址/掩码手机号时,原始 screenshot/XML 只允许写入采购工具本机隔离目录,
|
原始完整 XML 只留采购工具本机;真机流程可在内存中读取,但只能返回规格、选中态、价格和页面状态摘要。
|
||||||
只由确定性脱敏器消费;业务代码、agent、fixture、日志和 HTTP sink 只能读取自动复检通过且 manifest
|
- 截图上传器只能接收显式文件,不得枚举原始目录或顺带上传 XML/manifest/其他文件;服务端必须校验
|
||||||
标记 `privacy_tier=SANITIZED` 的派生物。脱敏失败、分辨率/版本不符或派生 XML 仍命中手机号模式时
|
设备身份和 SHA-256,证据只允许已登录管理员访问,不得提供公开静态目录。
|
||||||
必须拒绝发布,不得用人工口头确认绕过。
|
- **支付凭据仍不得读取、保存或上传。** 外部支付交接不在“内部原图允许上传”的例外范围内。
|
||||||
|
- T-103 停止遮罩器开发并专注真机选择/读价;生产原始截图上传由 T-204 实现。
|
||||||
|
|
||||||
### 1.5 页面判据
|
### 1.5 页面判据
|
||||||
|
|
||||||
|
|||||||
+18
-15
@@ -168,26 +168,29 @@
|
|||||||
- 无可领任务返回 `200` 且 `task` 为 `null`,**不是 404**。
|
- 无可领任务返回 `200` 且 `task` 为 `null`,**不是 404**。
|
||||||
- 后续所有该任务的调用必须携带 `X-Claim-Token` 与匹配的 `claim_generation`。
|
- 后续所有该任务的调用必须携带 `X-Claim-Token` 与匹配的 `claim_generation`。
|
||||||
|
|
||||||
### `POST /api/v1/tasks/{id}/evidence`(只接收脱敏派生物)
|
### `POST /api/v1/tasks/{id}/evidence`(内部原始截图)
|
||||||
|
|
||||||
规格面板和订单确认页可能固定展示地址与掩码手机号。采购工具必须先在本机隔离目录保存原始证据,
|
> 本接口属于生产第一趟证据链,由 T-204 实现。T-103 只做本机真机可行性验证,不调用本接口,
|
||||||
再由确定性脱敏器生成派生 screenshot/XML;本接口只接受派生截图及如下审计元数据:
|
> 也不为上传目的继续扩展截图遮罩器。正式流程直接上传原始截图;T-103 与 T-204 的区分只是任务拆分。
|
||||||
|
|
||||||
|
这是内部系统。规格面板和订单确认页固定展示的地址与手机号允许保留在原始截图中。本接口只接受截图
|
||||||
|
文件及如下审计元数据;完整 XML、manifest、本机路径和目录中的其他文件一律不接收:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"kind": "SKU_PANEL_SCREENSHOT",
|
"kind": "SKU_PANEL_SCREENSHOT",
|
||||||
"privacy_tier": "SANITIZED",
|
"privacy_tier": "INTERNAL_RAW",
|
||||||
"artifact_sha256": "<派生截图 SHA-256>",
|
"artifact_sha256": "<原始截图 SHA-256>",
|
||||||
"sanitizer_version": "sku-panel-pdd-8.17.0-v1"
|
"pdd_version": "8.17.0"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- `privacy_tier` 必须精确为 `SANITIZED`;缺失、其他值或 sanitizer 元数据不完整均拒绝。
|
- `privacy_tier` 必须精确为 `INTERNAL_RAW`,明确告知服务端该资产可能包含页面个人信息。
|
||||||
- 上传内容的 SHA-256 必须等于 `artifact_sha256`。服务端不接收原始文件、原始哈希、原始路径、
|
- 上传截图的 SHA-256 必须等于 `artifact_sha256`。服务端不接收截图以外的原始文件、完整 XML、
|
||||||
原始 XML、地址、手机号或支付凭据;原始/派生哈希映射只存在于采购工具本机 manifest。
|
本机路径、源 manifest 或地址/手机号的结构化字段。支付凭据和外部支付页截图始终拒绝。
|
||||||
- 原始目录不得被 `HttpResultSink` 或证据上传器枚举;调用方必须显式传入已原子发布的派生目录。
|
- 原始目录不得被 `HttpResultSink` 或证据上传器枚举;调用方必须显式传入单个截图文件。
|
||||||
- 完整 XML 永不上传。经自动复检的最小脱敏 XML 只用于采购工具离线 fixture;仍命中手机号模式或
|
- 完整 XML 永不上传。最小 XML 只用于采购工具离线 fixture;fixture 不得包含地址、手机号或支付凭据。
|
||||||
脱敏结果不确定时,客户端调用 `/needs-manual`,不得上传截图或继续试选。
|
- 资产不得放在公开静态目录;读取要求管理会话,响应使用 `Cache-Control: no-store`。
|
||||||
|
|
||||||
### `POST /api/v1/tasks/{id}/spec-trial`(第一趟回传)
|
### `POST /api/v1/tasks/{id}/spec-trial`(第一趟回传)
|
||||||
|
|
||||||
@@ -208,7 +211,7 @@
|
|||||||
- `unit_price` 来自闸门一(规格面板)。**读不到时不要发这个接口**,改发
|
- `unit_price` 来自闸门一(规格面板)。**读不到时不要发这个接口**,改发
|
||||||
`/needs-manual` 并带原因码 `UNIT_PRICE_UNREADABLE`。
|
`/needs-manual` 并带原因码 `UNIT_PRICE_UNREADABLE`。
|
||||||
- `total_price` = `unit_price` × 任务数量,服务端会重算校验。
|
- `total_price` = `unit_price` × 任务数量,服务端会重算校验。
|
||||||
- 证据须先经 `/evidence` 上传,且对应资产必须为 `privacy_tier=SANITIZED`。
|
- 原始截图须先经 `/evidence` 上传,且对应资产必须为 `privacy_tier=INTERNAL_RAW`。
|
||||||
- 服务端接收后创建 `spec_trials` 记录,任务转 `WAITING_CONFIRMATION`。
|
- 服务端接收后创建 `spec_trials` 记录,任务转 `WAITING_CONFIRMATION`。
|
||||||
|
|
||||||
### dry-run 与真实提交协议
|
### dry-run 与真实提交协议
|
||||||
@@ -310,8 +313,8 @@ class ResultSink(ABC):
|
|||||||
| `open_product(url)` | TRIAL / ORDER | 商品 URL | 页面快照路径 | 只打开页面,不点击控件 |
|
| `open_product(url)` | TRIAL / ORDER | 商品 URL | 页面快照路径 | 只打开页面,不点击控件 |
|
||||||
| `open_trial_sku_panel(evidence_key)` | **仅 TRIAL** | 版本与证据绑定键 | 面板快照 | 只点击精确唯一、已取证的受控入口;当前仅 `快要抢光`,无通用 click |
|
| `open_trial_sku_panel(evidence_key)` | **仅 TRIAL** | 版本与证据绑定键 | 面板快照 | 只点击精确唯一、已取证的受控入口;当前仅 `快要抢光`,无通用 click |
|
||||||
| `select_sku_options(items)` | TRIAL / ORDER | `{维度: 值}` | 选中证据 | 按维度精确匹配,找不到抛错 |
|
| `select_sku_options(items)` | TRIAL / ORDER | `{维度: 值}` | 选中证据 | 按维度精确匹配,找不到抛错 |
|
||||||
| `sanitize_evidence(raw_manifest)` | TRIAL / ORDER | 本机隔离目录 manifest | 派生 manifest | 原子发布脱敏派生物;失败不发布,原始内容不进入日志/上传 |
|
| `capture_evidence(screenshot)` | TRIAL / ORDER | 单个原始截图路径 | 截图 SHA-256 | 只处理显式截图文件;不得枚举目录或读取/上传 XML,T-204 接入内部证据 API |
|
||||||
| `read_sku_unit_price(xml)` | TRIAL / ORDER | 脱敏规格面板 XML | 单价或 `None` | **闸门一 / 二**;读不到返回 `None`,不猜 |
|
| `read_sku_unit_price(xml)` | TRIAL / ORDER | 当前规格面板 XML 或安全最小 fixture | 单价或 `None` | **闸门一 / 二**;只返回金额摘要,读不到返回 `None`,不猜、不返回页面其他正文 |
|
||||||
| `leave_product()` | TRIAL / ORDER | - | - | 第一趟结束时退出并释放手机 |
|
| `leave_product()` | TRIAL / ORDER | - | - | 第一趟结束时退出并释放手机 |
|
||||||
| `set_quantity(n)` | **仅 ORDER** | 数量 | 读回值 | 必须复核等于 n;TRIAL capability 不暴露 |
|
| `set_quantity(n)` | **仅 ORDER** | 数量 | 读回值 | 必须复核等于 n;TRIAL capability 不暴露 |
|
||||||
| `go_to_order_confirm()` | **仅 ORDER** | - | 确认页摘要 | 需显式授权;TRIAL capability 不暴露 |
|
| `go_to_order_confirm()` | **仅 ORDER** | - | 确认页摘要 | 需显式授权;TRIAL capability 不暴露 |
|
||||||
|
|||||||
+17
-37
@@ -21,7 +21,7 @@
|
|||||||
`client/` 已有 Python 包、PySide6 最小入口、运行目录与日志脱敏策略,以及显式 serial 的 ADB
|
`client/` 已有 Python 包、PySide6 最小入口、运行目录与日志脱敏策略,以及显式 serial 的 ADB
|
||||||
连接边界、本地基线取证 CLI、受限商品链接打开取证 CLI、人工声明规格面板状态的只读取证 CLI,
|
连接边界、本地基线取证 CLI、受限商品链接打开取证 CLI、人工声明规格面板状态的只读取证 CLI,
|
||||||
以及绑定 PKG110 / Android 16 / 拼多多 8.17.0 的规格证据确定性脱敏 CLI;尚无规格选择、价格读取或下单流程
|
以及绑定 PKG110 / Android 16 / 拼多多 8.17.0 的规格证据确定性脱敏 CLI;尚无规格选择、价格读取或下单流程
|
||||||
- 测试:采购服务已覆盖健康检查、核心模型、迁移与状态机等离线包级测试;采购工具 78 项离线单元测试
|
- 测试:采购服务已覆盖健康检查、核心模型、迁移与状态机等离线包级测试;采购工具 80 项离线单元测试
|
||||||
(全部 mock,不连接真机)
|
(全部 mock,不连接真机)
|
||||||
- 数据:SQLite 核心表与迁移已落成;无业务实例数据
|
- 数据:SQLite 核心表与迁移已落成;无业务实例数据
|
||||||
- 标准启动路径:Windows PowerShell 运行 `./init.ps1`,Unix shell 运行 `./init.sh`。Windows 入口
|
- 标准启动路径:Windows PowerShell 运行 `./init.ps1`,Unix shell 运行 `./init.sh`。Windows 入口
|
||||||
@@ -31,13 +31,11 @@
|
|||||||
editable install / 包导入 / unittest / compileall,以及仓库上下文校验。可单独运行两端命令诊断。
|
editable install / 包导入 / unittest / compileall,以及仓库上下文校验。可单独运行两端命令诊断。
|
||||||
- 当前设备门禁:人工已确认拼多多 8.17.0、goods_id `937122477375` 的衣服商品只能通过“快要抢光”
|
- 当前设备门禁:人工已确认拼多多 8.17.0、goods_id `937122477375` 的衣服商品只能通过“快要抢光”
|
||||||
打开规格面板;T-110 已获项目所有者批准,只把该证据/版本绑定的精确唯一入口作为第一趟可逆导航,
|
打开规格面板;T-110 已获项目所有者批准,只把该证据/版本绑定的精确唯一入口作为第一趟可逆导航,
|
||||||
数量、确认页、提交订单、付款与通用点击能力仍不可达。T-103 的原始证据本机隔离与确定性脱敏器
|
数量、确认页、提交订单、付款与通用点击能力仍不可达。T-103 的 v5 派生 XML 已由人确认无实际地址/
|
||||||
已完成离线实现;第一态 v3 derived 已由人确认隐私安全,并证明目标颜色和尺码自动预选,派生哈希
|
手机号,并保留目标预选规格、顶部当前价“快卖完 ¥12.88”和原价“¥29.88”;底部“提交订单 ¥12.88”
|
||||||
复算一致。顶部规格价格横跨隐私遮罩边界,当前只保留了不可读断片;唯一完整金额位于禁触的
|
继续属于硬拒绝区。派生截图虽然把顶部价格遮住一半,但项目已停止遮罩器开发,视觉完整性不再阻塞
|
||||||
“提交订单 ¥12.88”区域,不能作为第一趟价格证据。v4 已在保持截图遮罩不变的前提下,只允许顶部
|
规格选择与读价;T-204 将直接上传内部原始截图供管理员查看。T-010 已允许不依赖真机字段的 T-201 和只创建
|
||||||
交界带中满足精确坐标、拼多多包、非点击叶节点和严格金额格式的文本投影到派生 XML,离线门禁已通过;
|
`DRAFT` 的 T-202 并行;
|
||||||
下一步由人保留已验收 v3 derived,并用同一 raw 重跑 v4。价格证据通过后才采集“两个维度改为非目标 /
|
|
||||||
两个维度恢复目标”两态。T-010 已允许不依赖真机字段的 T-201 和只创建 `DRAFT` 的 T-202 并行;
|
|
||||||
T-203 及后续会启动试选或依赖真机字段的 Phase 2 功能继续等待 T-103。
|
T-203 及后续会启动试选或依赖真机字段的 Phase 2 功能继续等待 T-103。
|
||||||
|
|
||||||
## 当前目录要点
|
## 当前目录要点
|
||||||
@@ -65,7 +63,8 @@
|
|||||||
- 已完成 T-010(安全并行门禁);T-201(管理员登录与会话)已在独立写路径并行开发。T-202 可在
|
- 已完成 T-010(安全并行门禁);T-201(管理员登录与会话)已在独立写路径并行开发。T-202 可在
|
||||||
T-201 完成后继续,但只能创建和展示 `DRAFT`,不得启动试选或引入未经 T-103 证实的真机字段。
|
T-201 完成后继续,但只能创建和展示 `DRAFT`,不得启动试选或引入未经 T-103 证实的真机字段。
|
||||||
- 已完成 T-110(第一趟受控规格入口与隐私脱敏边界)。T-103 是当前最高优先级和 MVP 生死线,
|
- 已完成 T-110(第一趟受控规格入口与隐私脱敏边界)。T-103 是当前最高优先级和 MVP 生死线,
|
||||||
已补充 T-110 依赖并恢复 `DOING`;v4 脱敏器离线实现已完成,三态派生证据和新真机验收完成前不开发
|
已补充 T-110 依赖并保持 `DOING`;现有安全派生 XML 足以开始最小 fixture、规格选择与读价实现,
|
||||||
|
内部原始截图上传与展示交给 T-204;T-103 最终真机验收完成前不开发
|
||||||
T-203 及后续依赖真机可读字段或会启动试选的 Phase 2 生产页面。
|
T-203 及后续依赖真机可读字段或会启动试选的 Phase 2 生产页面。
|
||||||
- 已确认原型继续只作信息架构依据;原型假数据不调用真实接口、不驱动真机。真机结论改变
|
- 已确认原型继续只作信息架构依据;原型假数据不调用真实接口、不驱动真机。真机结论改变
|
||||||
可读字段时必须先回修原型与交互清单。
|
可读字段时必须先回修原型与交互清单。
|
||||||
@@ -146,35 +145,16 @@ D:\Portable\adb\adb.exe devices -l
|
|||||||
不得提交 Git。T-102 已由人确认 goods_id `958756616606` 的目标商品及截图/XML 隐私,并完成验收。
|
不得提交 Git。T-102 已由人确认 goods_id `958756616606` 的目标商品及截图/XML 隐私,并完成验收。
|
||||||
|
|
||||||
T-103 已确认当前衣服商品只能从精确文案“快要抢光”进入规格面板;T-110 只批准该证据/版本绑定入口,
|
T-103 已确认当前衣服商品只能从精确文案“快要抢光”进入规格面板;T-110 只批准该证据/版本绑定入口,
|
||||||
不授权“免拼购买 / 单独购买 / 直接拼成”等其他文案。现有只读取证脚本本身仍不打开面板、不点击或选择
|
不授权“免拼购买 / 单独购买 / 直接拼成”等其他文案。面板刚打开时目标颜色“黑色CHA(纯棉)”与尺码
|
||||||
规格,也不读取价格;`--state` 只是人工声明,不能作为自动判据。面板刚打开时目标颜色
|
“M(建议100-115)”已经自动选中。v5 派生 XML 与人工观察已证明顶部当前价为“快卖完 ¥12.88”、
|
||||||
“黑色CHA(纯棉)”与尺码“M(建议100-115)”已经自动选中,不强行取消。人依次准备刚打开目标预选、
|
并列原价为“¥29.88”;促销前缀会变化,正式读价不能把该文案作为主判据,必须以面板结构、价格角色、
|
||||||
颜色和尺码均为非目标值、再恢复目标值三个状态,并分别采集到全新 `raw` 目录:
|
严格金额格式和唯一性组合判断,冲突时返回 unreadable。
|
||||||
|
|
||||||
```powershell
|
本轮不再运行或修改截图遮罩器。T-103 先用本机证据验证真机能力;T-204 再把原始规格页截图上传采购
|
||||||
# 仓库根目录;三次采集使用三个全新的 output-dir
|
服务,允许页面中已显示的地址和手机号,完整 XML 不上传。代码从已确认的派生 XML 提取最小 fixture,
|
||||||
.\client\.venv\Scripts\python.exe client\scripts\capture_sku_panel_spike.py --serial <SERIAL> --url "https://mobile.yangkeduo.com/goods.html?goods_id=<GOODS_ID>" --state panel-opened-target-preselected --output-dir "$env:LOCALAPPDATA\cmbuyer\artifacts\T-103\sku-panel-opened-target-<GOODS_ID>-v2\raw" --timeout 10 --adb D:\Portable\adb\adb.exe
|
并在真机运行时只返回获准摘要。下一步实现 `TrialSkuFlow` 的受控入口、
|
||||||
.\client\.venv\Scripts\python.exe client\scripts\capture_sku_panel_spike.py --serial <SERIAL> --url "https://mobile.yangkeduo.com/goods.html?goods_id=<GOODS_ID>" --state alternate-all-dimensions-selected --output-dir "$env:LOCALAPPDATA\cmbuyer\artifacts\T-103\sku-panel-alternate-<GOODS_ID>-v2\raw" --timeout 10 --adb D:\Portable\adb\adb.exe
|
按维度精确选择、选中态读回、SKU 单价读取与安全退出;完成离线主审后,由人先把两个维度改成明确
|
||||||
.\client\.venv\Scripts\python.exe client\scripts\capture_sku_panel_spike.py --serial <SERIAL> --url "https://mobile.yangkeduo.com/goods.html?goods_id=<GOODS_ID>" --state target-selection-restored --output-dir "$env:LOCALAPPDATA\cmbuyer\artifacts\T-103\sku-panel-target-restored-<GOODS_ID>-v2\raw" --timeout 10 --adb D:\Portable\adb\adb.exe
|
记录的非目标值,再执行真机脚本确认恢复目标规格与 `12.88` 单价。生产原始截图展示/上传由 T-204 处理。
|
||||||
```
|
|
||||||
|
|
||||||
每组 raw 采集成功后分别运行离线脱敏器;`derived` 必须尚不存在:
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
.\client\.venv\Scripts\python.exe client\scripts\sanitize_sku_panel_evidence.py --raw-dir "$env:LOCALAPPDATA\cmbuyer\artifacts\T-103\sku-panel-opened-target-<GOODS_ID>-v2\raw" --output-dir "$env:LOCALAPPDATA\cmbuyer\artifacts\T-103\sku-panel-opened-target-<GOODS_ID>-v2\derived"
|
|
||||||
.\client\.venv\Scripts\python.exe client\scripts\sanitize_sku_panel_evidence.py --raw-dir "$env:LOCALAPPDATA\cmbuyer\artifacts\T-103\sku-panel-alternate-<GOODS_ID>-v2\raw" --output-dir "$env:LOCALAPPDATA\cmbuyer\artifacts\T-103\sku-panel-alternate-<GOODS_ID>-v2\derived"
|
|
||||||
.\client\.venv\Scripts\python.exe client\scripts\sanitize_sku_panel_evidence.py --raw-dir "$env:LOCALAPPDATA\cmbuyer\artifacts\T-103\sku-panel-target-restored-<GOODS_ID>-v2\raw" --output-dir "$env:LOCALAPPDATA\cmbuyer\artifacts\T-103\sku-panel-target-restored-<GOODS_ID>-v2\derived"
|
|
||||||
```
|
|
||||||
|
|
||||||
PDD 现场显示地址和掩码手机号不阻塞真机流程;但原始 screenshot/XML 只能留在本机 `raw` 隔离目录,
|
|
||||||
不能由 agent、fixture、业务或上传端消费。`t103-privacy-v4` 把截图与 XML 保持为两个独立坐标空间,
|
|
||||||
并根据同一第一态 raw 的两次 fail-closed 安全观测将二者分别精确固定为 1080×2376;截图隐私带沿用
|
|
||||||
v3,不扩大、不缩小。v4 只从两个精确交界 bounds 投影属于拼多多包、不可点击且格式严格唯一的价格
|
|
||||||
叶节点,任何点击节点、包外节点、坐标/结构/文本漂移、重复或零值都 fail closed。它校验源哈希、
|
|
||||||
设备/App/商品/人工状态与隐私结构,在 sibling `derived` 目录原子发布 screenshot/XML 与 manifest;
|
|
||||||
任何不匹配、手机号残留或已有目标均拒绝发布。
|
|
||||||
自动复检通过且人确认三态对应性后,agent 才能读取派生物并提取最小 fixture、编写判据。
|
|
||||||
人工确认中还必须记录中间态实际选择的非目标颜色和尺码,不能只写“已切换”。
|
|
||||||
|
|
||||||
## 关键背景
|
## 关键背景
|
||||||
|
|
||||||
|
|||||||
+47
-31
@@ -25,38 +25,39 @@ write_paths:
|
|||||||
- docs/current-state.md
|
- docs/current-state.md
|
||||||
---
|
---
|
||||||
|
|
||||||
<!-- BEGIN VIKUNJA EXPORT id=23 synced=2026-08-04T06:56:08Z sha256=1f5f8b30076531a859c0cada576c91206cbe20471694a53690231fbb031e816e -->
|
<!-- BEGIN VIKUNJA EXPORT id=23 synced=2026-08-04T07:46:08Z sha256=48f9e0a02fd330550ae8d749b142a05cb9d92b16c8ee795c6289ccaedde6bca9 -->
|
||||||
## 问题 / 背景
|
## 问题 / 背景
|
||||||
|
|
||||||
T-102 已证明 canonical 链接可进入目标商品。T-103 随后在 PKG110 / Android 16 / 拼多多 8.17.0、衣服商品 goods_id `937122477375` 上确认:规格面板只能从详情页右下角精确文案“快要抢光”进入,面板固定显示收货区域和掩码手机号。T-110 经项目所有者批准,将该已取证点击定义为可逆、能力受限的规格面板导航;这不是通用购买入口豁免,不授权其他文案、数量、确认页、提交订单或支付。 项目所有者随后确认,面板刚打开时已自动选中目标颜色“黑色CHA(纯棉)”和尺码“M(建议100-115)”;因此本任务不再假设存在“未选择”或“只选择一个维度”的初始状态。
|
T-102 已证明 canonical 链接可进入目标商品。T-103 在 PKG110 / Android 16 / 拼多多 8.17.0、goods_id `937122477375` 上确认:规格面板只能由详情页精确唯一的“快要抢光”打开;T-110 已把该入口批准为可逆、能力受限的第一趟导航。面板刚打开时目标颜色“黑色CHA(纯棉)”和尺码“M(建议100-115)”自动选中。
|
||||||
|
|
||||||
|
真实 `t103-privacy-v5` 派生曾成功用于安全分析:顶部价格节点为“快卖完 ¥12.88”,并列原价为“¥29.88”;派生截图的整宽遮罩把顶部价格文字遮住一半。项目所有者确认 cmbuyer 是内部系统,要求停止遮罩返工:正式流程可以把包含页面地址/手机号的原始截图上传采购服务供已登录管理员查看。完整 XML 不上传,地址/手机号不解析为业务字段,支付凭据仍禁止处理。
|
||||||
|
|
||||||
## 关联需求与交互
|
## 关联需求与交互
|
||||||
|
|
||||||
- 功能:F-006 第一趟试选;覆盖自动脱敏、`open_trial_sku_panel()`、`select_sku_options()`、`read_sku_unit_price()` 的真机 spike。
|
- 功能:F-006 第一趟试选;覆盖 `open_trial_sku_panel()`、`select_sku_options()`、`read_sku_unit_price()` 和安全退出的真机 spike。
|
||||||
- 用户故事:US-003、US-004、US-008;本任务无生产 GUI。
|
- 用户故事:US-003、US-004、US-008;本任务无生产 GUI。T-103 先验证本机真机能力,T-204 接入原始截图 HTTP 上传与管理员查看。
|
||||||
- 架构 / API:`docs/04-architecture.md` 第三、四、5.4、六节;`docs/api.md` 证据上传和 `TrialSkuFlow`;T-104、T-105 与 Phase 2 的前置。
|
- 架构 / API:`docs/04-architecture.md` 第三、四、5.4、六节;`docs/api.md` 的 `TrialSkuFlow`;T-104、T-105 与 Phase 2 的前置。
|
||||||
|
|
||||||
## 方案
|
## 方案
|
||||||
|
|
||||||
1. 先实现本机确定性脱敏器,不先写页面判据。原始 screenshot/XML 只保存到 `%LOCALAPPDATA%\cmbuyer\artifacts\T-103\...\raw`,只允许脱敏器消费;agent、fixture、业务、日志、HTTP sink、Vikunja 与 Git 均不得读取/上传原始内容。
|
1. 停止修改或调用截图遮罩器。T-103 的截图先保存在 `%LOCALAPPDATA%\cmbuyer\artifacts\T-103\...` 完成本机验收;T-204 正式接入原始截图上传,资产标记 `privacy_tier=INTERNAL_RAW`,允许包含页面已显示的地址和手机号。
|
||||||
2. 脱敏器绑定 PKG110 分辨率、拼多多 8.17.0、goods_id、人工声明状态和本项目证据配置,同时从 screenshot/XML 移除收货区域、地址与手机号内容,在 sibling `derived` 目录原子发布派生物。派生 XML 仍命中手机号模式、隐私区域无法确认、结构/分辨率/版本失配、哈希不一致或目标目录存在时 fail closed,不发布半成品。服务端只接收派生截图哈希和 sanitizer 版本,不接收原始文件/哈希/路径/XML。
|
2. 完整 XML 只留采购工具本机,不上传、不进日志、Vikunja 或 Git。以已确认的 v5 派生 XML 提取只含页面判据节点的最小 fixture;fixture 不含地址、手机号或支付凭据。
|
||||||
3. 由人运行脱敏器并本地确认派生 screenshot/XML 的三种真实状态:panel-opened-target-preselected(刚打开且目标规格已自动选中)、alternate-all-dimensions-selected(人工把颜色和尺码都改成非目标值)、target-selection-restored(再把两个维度恢复为目标值)。主 agent 只在派生 manifest、每态实际选中值与人工确认齐全后读取派生证据,提取最小 fixture。首轮旧证据不得复用为 fixture。
|
3. 实现 `TrialSkuFlow` 窄 capability。`open_trial_sku_panel()` 只允许拼多多 8.17.0、goods_id `937122477375` 上证据绑定、精确唯一的 `快要抢光`;缺失、重复、版本失配或面板判据不唯一时零后续点击。其他购买文案不得复用。
|
||||||
4. 实现 `TrialSkuFlow` 窄 capability。`open_trial_sku_panel()` 只允许拼多多 8.17.0、goods_id `937122477375` 上证据绑定、精确唯一的 `快要抢光`;缺失、重复、版本失配或打开后面板判据不唯一时零后续点击。`免拼购买 / 单独购买 / 直接拼成` 等其他文案必须分别取证,不能包含、前缀、同义、OCR 或坐标兜底。
|
4. 第一趟只含打开商品、受控打开面板、在维度容器内精确选择、读回选中态、读取 SKU 单价、原始截图和退出。不得暴露通用 `click`、数量、确认页、提交订单或支付能力;“提交订单”、微信支付、先用后付和 0 元下单只作为硬拒绝判据。
|
||||||
5. 第一趟 capability 只含打开商品、受控打开面板、在维度容器内精确选择、读面板单价、脱敏取证和返回。接口不得暴露通用 `click`、`set_quantity()`、`go_to_order_confirm()`、`submit_order()` 或支付能力;规格面板中的“提交订单”、微信支付、先用后付和 0 元下单只作为硬拒绝判据,静态调用链测试证明不可达。
|
5. 规格选项按维度容器隔离后文本精确唯一匹配,防 `红`/`粉红`、`1`/`10` 前缀碰撞;缺失、重复、禁用、维度不明或选中态不唯一均停止。
|
||||||
6. 在脱敏派生 XML 上按维度容器隔离候选,文本等值匹配并读回选中态;缺失、重复、禁用、维度不明或选中态不唯一均停止。纯函数测试覆盖 `红`/`粉红`、`1`/`10` 等前缀碰撞。
|
6. 单价只从已取证规格面板结构中的当前价角色读取,严格解析人民币两位小数字符串。促销前缀会变化,不能把“快卖完”作为主判据;必须限定 PDD package、面板结构/相对位置、非点击价格叶节点、唯一当前价,并排除原价及“提交订单/支付/优惠/预估”等语义。任一歧义返回 unreadable,不从详情页或底部提交区补值。
|
||||||
7. 单价只从规格面板证据确定的唯一节点读取,以十进制字符串返回,禁止浮点。记录真实文本是否含优惠前缀、货币符号是否拆节点、是否并列原价/区间价;语义不唯一、节点缺失、候选冲突或只能从详情页读取时返回 unreadable。
|
7. 真机运行时在内存中读取当前页面树,只返回规格、选中态、价格和页面状态摘要;地址/手机号不解析为结构化字段。原始截图可由 T-204 显式上传,但截图上传器不得枚举目录或顺带上传 XML/manifest。
|
||||||
8. 人最终在真机先把两个维度改成一组明确记录的非目标值,再执行受控入口、精确选择和读价脚本恢复目标规格,确认实际选择颜色分类=黑色 CHA(纯棉)、尺码=M(建议100-115)(以派生 XML 精确文本为准)、面板单价语义、派生证据隐私与退出行为;agent 保持 DOING 直到人工验收。
|
8. 离线主审通过后,由人先把颜色和尺码改成明确记录的非目标值,再运行脚本恢复目标规格、读取 `12.88`、保存原始截图并安全退出。`needs_device=true`,agent 保持 DOING,等待人工验收。
|
||||||
|
|
||||||
## 验收要点
|
## 验收要点
|
||||||
|
|
||||||
- 三组原始证据分别对应 panel-opened-target-preselected、alternate-all-dimensions-selected、target-selection-restored,且仅在本机 raw 目录;脱敏器离线测试覆盖地址/手机号移除、截图与 XML 同步处理、状态/版本/分辨率/结构失配、手机号残留、原子性、异常脱敏和已有目录不覆盖。
|
- 最小 fixture 只来自本项目拼多多 8.17.0、goods_id `937122477375` 的已验收 v5 派生 XML,不含地址、手机号或支付凭据。
|
||||||
- 派生 manifest 记录 source/derived 本机哈希、sanitizer 版本、设备/App/goods_id/人工状态;原始页面正文、serial、地址和手机号不进入 manifest、日志、错误或上传。
|
- `快要抢光` 精确唯一时才打开面板;其他入口、版本失配、面板不唯一、规格碰撞/禁用、选中态或价格不唯一均 fail closed。
|
||||||
- 只从人工验收通过的派生证据编写页面判据与最小 fixture;判据绑定拼多多 8.17.0 和证据哈希。
|
- 价格读取不依赖可变促销文案,能区分当前价 `12.88`、原价 `29.88` 和硬拒绝区“提交订单 ¥12.88”;金额只用十进制字符串。
|
||||||
- `快要抢光` 精确唯一时才打开面板;其他文案、入口缺失/重复、面板不唯一、规格缺失/碰撞/禁用、价格不唯一均 fail closed。
|
- 静态 API/导入测试证明第一趟无通用点击、数量、确认页、提交订单或支付能力。
|
||||||
- 静态 API/导入测试证明 T-103 第一趟无通用点击、数量、确认页、提交订单或支付能力,“提交订单”及资金控件不可达。
|
- T-103 不再开发遮罩;T-204 原始截图上传必须限制为显式截图文件、设备鉴权、SHA-256 校验和管理员会话读取,不上传完整 XML 或支付凭据。
|
||||||
- 从规格面板可靠读取选中 SKU 单价为十进制字符串;无法唯一解释优惠价/原价/区间价时返回 unreadable。
|
|
||||||
- client 全部单测、compileall、wheel metadata、上下文校验、完整 `init.ps1` 与 diff-check 通过。
|
- client 全部单测、compileall、wheel metadata、上下文校验、完整 `init.ps1` 与 diff-check 通过。
|
||||||
- `needs_device=true`:只有人完成受控入口、精确选择、单价读取、派生证据对应性/隐私和安全退出验收后才能 DONE。
|
- 只有人完成受控入口、精确规格选择、单价读取、页面对应性、原始截图与安全退出验收后才能 DONE。
|
||||||
|
|
||||||
## 执行记录
|
## 执行记录
|
||||||
|
|
||||||
@@ -147,14 +148,29 @@ T-103 sanitizer v2 坐标修正与主审:提交 44c027a 将 screenshot space
|
|||||||
### 2026-08-04T06:55:52Z · ila
|
### 2026-08-04T06:55:52Z · ila
|
||||||
|
|
||||||
2026-08-04 项目所有者用同一第一态 raw 运行 v4,脱敏器按设计 fail closed:跨界价格节点文本不匹配,未发布 derived;raw 与已保留的 derived-v3-reviewed 未受损。提交 ef1ac60 增加最小安全诊断:失败只输出两个固定价格槽位和受控 reason 枚举,不回显原文、金额、数字串、字符码点、长度或原始属性,v4 成功白名单与原子不发布语义不变。主 agent 独立复跑 78 项 client 单测、compileall、CLI help 与 diff-check,全部通过。等待项目所有者用同一 raw 重跑并反馈 slot/reason;T-103 保持 DOING。
|
2026-08-04 项目所有者用同一第一态 raw 运行 v4,脱敏器按设计 fail closed:跨界价格节点文本不匹配,未发布 derived;raw 与已保留的 derived-v3-reviewed 未受损。提交 ef1ac60 增加最小安全诊断:失败只输出两个固定价格槽位和受控 reason 枚举,不回显原文、金额、数字串、字符码点、长度或原始属性,v4 成功白名单与原子不发布语义不变。主 agent 独立复跑 78 项 client 单测、compileall、CLI help 与 diff-check,全部通过。等待项目所有者用同一 raw 重跑并反馈 slot/reason;T-103 保持 DOING。
|
||||||
|
|
||||||
|
### 2026-08-04T07:17:10Z · ila
|
||||||
|
|
||||||
|
2026-08-04 项目所有者重跑安全诊断,固定当前价槽 [396,503][712,570] 返回 reason=known_prefix_missing,证明 raw 文本以“快”开头但不是 v4 假设的精确“快卖光”;该原因不足以证明具体前缀,成功白名单未放宽。提交 6e001b2 仅细分一个已人工观察过的安全枚举:若该槽精确以“快要抢光”开头则返回 observed_prefix_kuaiyaoqiangguang,其余“快”开头仍为 generic;不回显后缀、金额、长度、码点或 raw 属性。主 agent 独立复跑 79 项 client 单测、compileall 与 diff-check 通过。等待项目所有者用同一 raw 再次重跑;T-103 保持 DOING。
|
||||||
|
|
||||||
|
### 2026-08-04T07:19:42Z · ila
|
||||||
|
|
||||||
|
2026-08-04 项目所有者在手机 live 规格面板人工确认:固定顶部当前价槽的完整非敏感文字为“快卖完 ¥12.88”;底部购买按钮“快要抢光”是另一控件。主 agent 未读取 raw。该事实解释了 v4 对未经验证“快卖光”假设的两次安全拒绝。下一步升级 v5:删除“快卖光”成功假设,只允许证据绑定的精确“快卖完”当前价;坐标、遮罩、结构、PDD package、非点击叶节点、唯一性与原价限制全部不变。T-103 保持 DOING。
|
||||||
|
|
||||||
|
### 2026-08-04T07:42:53Z · ila
|
||||||
|
|
||||||
|
2026-08-04 范围调整:`t103-privacy-v5` 已在真实第一态成功生成,人工确认派生 XML 无实际地址/手机号、目标规格保留;顶部当前价为“快卖完 ¥12.88”、原价为“¥29.88”,底部“提交订单 ¥12.88”继续属于第一趟硬拒绝区。派生截图的整宽遮罩把顶部价格遮住一半。项目所有者要求停止遮罩返工并加速 MVP:T-103 不上传规格页截图,以安全最小 XML fixture 继续选择/读价;正式管理员证据截图归 T-204,上传端仍不得接收地址、手机号或支付凭据。未完成真机选择/读价验收,T-103 保持 Doing。
|
||||||
|
|
||||||
|
### 2026-08-04T07:45:57Z · ila
|
||||||
|
|
||||||
|
2026-08-04 最终范围澄清:上一条“正式截图仍需脱敏/裁剪”的记录已被项目所有者新决定取代。cmbuyer 是内部系统,正式第一趟允许把包含页面已显示地址/手机号的原始截图上传采购服务,不做遮罩或裁剪;T-204 负责设备鉴权上传、SHA-256 校验与管理员会话访问。完整 XML、普通日志、Git、Vikunja 和支付凭据仍不接收。T-103 立即停止遮罩开发,继续受控规格选择与 SKU 读价,任务保持 Doing。
|
||||||
<!-- END VIKUNJA EXPORT -->
|
<!-- END VIKUNJA EXPORT -->
|
||||||
|
|
||||||
## 边界
|
## 边界
|
||||||
|
|
||||||
- 任何规格面板入口、维度容器、选项、选中态和价格判据都必须来自本项目新采集、自动复检通过的
|
- 任何规格面板入口、维度容器、选项、选中态和价格判据都必须来自本项目拼多多 8.17.0 真机证据;
|
||||||
拼多多 8.17.0 **脱敏派生** screenshot/XML;T-102 详情页证据只能证明已到目标商品,不能证明
|
T-102 详情页证据只能证明已到目标商品,不能证明规格面板结构。T-103 只使用已由人确认无实际地址/
|
||||||
规格面板结构。派生证据路径、SHA-256、goods_id、设备、Android、App 与 sanitizer 版本写入
|
手机号的 v5 派生 XML 提取最小 fixture;派生截图的上传适用性不再是本任务的代码门禁。
|
||||||
执行记录之前,不得提交页面判据代码。
|
|
||||||
- 第一趟只允许 T-110 批准的 `open_trial_sku_panel()` 窄能力点击证据/版本绑定、精确唯一的
|
- 第一趟只允许 T-110 批准的 `open_trial_sku_panel()` 窄能力点击证据/版本绑定、精确唯一的
|
||||||
`快要抢光`;当前事实仅覆盖 goods_id `937122477375`、拼多多 `8.17.0`。不得把“免拼购买 /
|
`快要抢光`;当前事实仅覆盖 goods_id `937122477375`、拼多多 `8.17.0`。不得把“免拼购买 /
|
||||||
单独购买 / 直接拼成”等其他文案加入包含、前缀、同义或坐标兜底,分别取证前一律拒绝。
|
单独购买 / 直接拼成”等其他文案加入包含、前缀、同义或坐标兜底,分别取证前一律拒绝。
|
||||||
@@ -169,11 +185,11 @@ T-103 sanitizer v2 坐标修正与主审:提交 44c027a 将 screenshot space
|
|||||||
规格面板中的“提交订单”、微信支付、先用后付、0 元下单只可作为硬拒绝判据,不能返回可点击对象。
|
规格面板中的“提交订单”、微信支付、先用后付、0 元下单只可作为硬拒绝判据,不能返回可点击对象。
|
||||||
- 不把 `/mnt/d/chengma/cmroubao`、`/mnt/d/chengma/cmpdd` 或任何旧版本的节点、Activity、选择器、
|
- 不把 `/mnt/d/chengma/cmroubao`、`/mnt/d/chengma/cmpdd` 或任何旧版本的节点、Activity、选择器、
|
||||||
坐标、文本形态和页面结论当作事实;前序项目只可用于理解为什么必须 fail closed。
|
坐标、文本形态和页面结论当作事实;前序项目只可用于理解为什么必须 fail closed。
|
||||||
- 原始 screenshot/XML 只保存在 `%LOCALAPPDATA%\cmbuyer\artifacts\T-103\...\raw`,只允许本机
|
- 原始完整 XML 只保存在 `%LOCALAPPDATA%\cmbuyer\artifacts\T-103\...\raw`,不得由 HTTP sink、
|
||||||
确定性脱敏器消费,不得由 agent、业务、fixture、HTTP sink、Vikunja 或 Git 读取/上传。脱敏器必须
|
Vikunja 或 Git 读取/上传。真机流程可在内存中读取当前页面树,但只返回规格、选中态、价格和页面
|
||||||
校验设备分辨率、页面/App 版本和预期隐私区域,同时移除 screenshot/XML 中的地址与手机号内容;
|
状态摘要;不得把地址、手机号或支付凭据解析成业务字段或写入日志。
|
||||||
派生 XML 仍命中手机号模式、结构/版本/分辨率失配或哈希不一致时不得发布 `derived`。
|
- T-103 不再扩展截图遮罩器;本任务先以本机原始截图完成真机验收。生产第一趟原始截图上传由 T-204
|
||||||
- 只有自动复检通过的最小脱敏 fixture、派生路径/哈希、sanitizer 版本与非敏感结论可入库;服务端
|
接入,允许截图包含页面已显示的地址和手机号,但只允许已认证设备上传、已登录管理员查看;完整 XML、
|
||||||
不接收原始文件、原始路径或原始哈希。
|
外部支付页和支付凭据不得上传。
|
||||||
- `needs_device: true`:agent 只能完成离线实现并保持 `DOING`;只有人完成安全入口、精确规格选择、
|
- `needs_device: true`:agent 只能完成离线实现并保持 `DOING`;只有人完成安全入口、精确规格选择、
|
||||||
SKU 单价语义、页面对应性与派生证据验收后才能标 `DONE`。
|
SKU 单价语义、页面对应性与安全退出验收后才能标 `DONE`。HTTP 截图上传实现不属于 T-103 验收。
|
||||||
|
|||||||
Reference in New Issue
Block a user