docs: import wiki at afc651f75a3a
+106
@@ -0,0 +1,106 @@
|
||||
<!-- docs-wiki-sync:docs/tasks/T-214.md@afc651f75a3abc2676bb13aa8a80f6aa6a25a72e -->
|
||||
> 同步来源:[`docs/tasks/T-214.md`](/chengma/mroubao/src/commit/afc651f75a3abc2676bb13aa8a80f6aa6a25a72e/docs/tasks/T-214.md) · commit `afc651f75a3a`
|
||||
|
||||
---
|
||||
id: T-214
|
||||
title: 建立候选商品持久身份与重新定位指纹
|
||||
phase: 2
|
||||
deps:
|
||||
- T-208
|
||||
- T-213
|
||||
status: DONE
|
||||
created: 2026-07-28
|
||||
context_ref: e7f4c3e
|
||||
work_branch: null
|
||||
write_paths:
|
||||
- docs/tasks/T-214.md
|
||||
- docs/00-ai-start-here.md
|
||||
- docs/03-tech-stack.md
|
||||
- docs/04-architecture.md
|
||||
- docs/06-tasks.md
|
||||
- docs/api.md
|
||||
- docs/current-state.md
|
||||
- backend-api/migrations/**
|
||||
- backend-api/internal/domain/**
|
||||
- backend-api/internal/usecase/**
|
||||
- backend-api/internal/repository/sqlite/**
|
||||
- backend-api/internal/transport/httpapi/**
|
||||
- backend-api/internal/transport/webui/**
|
||||
- android-buyer/app/src/main/java/com/roubao/autopilot/MainActivity.kt
|
||||
- android-buyer/app/src/main/java/com/roubao/autopilot/pinduoduo/**
|
||||
- android-buyer/app/src/main/java/com/roubao/autopilot/procurement/**
|
||||
- android-buyer/app/src/test/java/com/roubao/autopilot/pinduoduo/**
|
||||
- android-buyer/app/src/test/java/com/roubao/autopilot/procurement/**
|
||||
---
|
||||
|
||||
## 问题 / 背景
|
||||
|
||||
T-208 已能保存原始候选 observation 和人工结论,但 Admin 与后续设备命令仍只能用
|
||||
`execution_id + ordinal` 描述候选。拼多多结果排序会变化,ordinal 不能作为商品身份;
|
||||
当前 8.17.0 无障碍树也不提供可验证的商品 URL 或平台 goods ID,不能伪造链接。
|
||||
|
||||
本任务为每个 observation 建立后台持久 `candidate_key`,并保存手机当时采集的卡片、
|
||||
详情和证据指纹。后续设备重新以图搜图时,必须用任务参考图、指纹、已确认 SKU 和
|
||||
价格重新核验,不能按旧 ordinal 盲点。真实平台 URL/图片 URL 仍允许作为可选观测值,
|
||||
但不是授权或主证据。
|
||||
|
||||
## 关联需求与交互
|
||||
|
||||
- 功能:F-008;为后续订单提交审批建立候选引用。
|
||||
- 用户故事:US-008,以及后续“人工授权后下单”故事。
|
||||
- 交互:IX-009;本任务只增强 Admin 候选详情可识别性,不新增下单按钮。
|
||||
- 架构/API:候选决策数据集、`POST /api/v1/tasks/{id}/candidates`。
|
||||
|
||||
## 冻结合约
|
||||
|
||||
1. App 为每个原始候选回传:
|
||||
- `card_signature`:结果卡片可见语义的 SHA-256;
|
||||
- `detail_signature`:详情页可见语义的 SHA-256;
|
||||
- `detail_evidence_sha256` 与 `specification_evidence_sha256`;
|
||||
- 可可靠提取时回传 `observed_title`,否则保留明确的候选占位标题;
|
||||
- `product_url`、`image_url` 只有设备确实取得并通过 URL 校验时才允许非空。
|
||||
2. 后端验证四个指纹均为小写 SHA-256,并核对两个 evidence 哈希属于该
|
||||
execution/observation 已上传的受控证据。不得信任客户端提交的任意哈希。
|
||||
3. 后端用版本化输入生成 64 位小写 `candidate_key`:
|
||||
`execution_id + original ordinal + detail signature + specification evidence hash`。
|
||||
相同候选请求幂等重放必须得到相同 key;key 只表示本次 execution 的持久
|
||||
observation,不宣称是拼多多全局商品 ID。
|
||||
4. 新表 `candidate_observation_identities` 与
|
||||
`candidate_observations(execution_id, ordinal)` 一对一,旧 v6 历史允许没有
|
||||
identity;v7 以后新候选批次必须同事务生成 identity。
|
||||
5. Admin API/Web 在每个 observation 区块显示 candidate key、原 ordinal、规格、
|
||||
价格、卡片/详情签名和受控截图引用。外链只作为不可执行审计文本,不由后端请求。
|
||||
6. 后续 Admin 选品和设备命令只能引用 `candidate_key`,并同时绑定 task、
|
||||
execution、task content hash 和 review version,不能只传 ordinal 或 URL。
|
||||
|
||||
## 验收要点
|
||||
|
||||
- [x] v7 migration `up/down/up` 可重复;有 identity 数据时破坏性 down 失败。
|
||||
- [x] App 回传全部 observation 的卡片/详情/双证据 SHA-256,不因模型拒绝而缺失。
|
||||
- [x] 后端拒绝格式错误、跨 execution、与 evidence 实际哈希不一致的指纹。
|
||||
- [x] 同一请求重放 candidate key 稳定,不同 observation key 不同。
|
||||
- [x] Admin API/Web 可按 candidate key 查看 observation、模型判断、人工结论和截图。
|
||||
- [x] 后端不会请求候选 URL;没有真实 URL 时保持空值而不是生成伪链接。
|
||||
- [x] Android/Go 测试、race、migration、Debug/Release 和根验证通过。
|
||||
|
||||
## 边界
|
||||
|
||||
- 不实现 Admin 选品按钮和下单授权;属于 T-215。
|
||||
- 不实现设备命令、重新搜索或 SKU/数量操作;属于 T-216/T-217。
|
||||
- 不通过分享面板、剪贴板、root 或 dumpsys 抓取商品链接。
|
||||
- 不把截图 SHA-256 当作跨时间相同商品的唯一证明;重新定位仍需多信号复核。
|
||||
|
||||
## 执行记录
|
||||
|
||||
- 2026-07-28:T-208 实现提交 `e7f4c3e` 后领取。确认当前 observation 已有可选
|
||||
product/image URL 和受控 evidence,但 App 实际无法从拼多多无障碍树取得可信 URL,
|
||||
因此冻结 execution-scoped candidate key 与多指纹方案。
|
||||
- 2026-07-28:App manifest 升级到 v4,保存 best-effort 可见标题、卡片/详情语义
|
||||
SHA-256 和详情/规格双截图哈希;候选出站固定提交两个不同的 evidence asset。
|
||||
- 2026-07-28:后端 migration v7 增加 `candidate_observation_identities`,候选写入
|
||||
同事务生成稳定 key,并按顺序核对两个 evidence 的实际哈希。Admin API/Web 已能
|
||||
查看 identity、原始 observation、模型/人工结论和受控截图。
|
||||
- 2026-07-28:`go test ./...`、`go test -race ./...`、`go vet ./...`,migration
|
||||
CLI `up/down/up`,Android `test assembleDebug assembleRelease` 和根
|
||||
`.\init.ps1` 全部通过。Debug APK `1.4.12 (17)` 已覆盖安装到 PKG110,采购无障碍
|
||||
仍在启用列表。
|
||||
Reference in New Issue
Block a user