Page:
T-214
Pages
00-ai-start-here
01-vision
02-requirements
03-tech-stack
04-architecture
05-coding-rules
06-tasks
07-user-stories
08-interaction-checklist
Design
Home
Integrations-shunyunbao-contract
PPT
T-001
T-002
T-003
T-004
T-101
T-102
T-103
T-104
T-201
T-202
T-203
T-204
T-205
T-206
T-207
T-208
T-209
T-210
T-211
T-212
T-213
T-214
T-215
T-216
T-217
T-218
T-219
T-220
T-221
T-222
T-223
T-224
T-225
T-226
T-227
T-228
T-229
T-230
T-231
T-232
T-233
T-234
T-235
T-236
T-237
T-238
T-239
T-240
T-241
T-242
T-243
T-244
T-245
T-246
T-247
T-248
T-249
T-250
T-251
T-252
T-253
T-254
T-255
T-256
T-257
T-258
T-259
T-260
T-261
T-262
T-263
T-264
T-265
T-266
T-267
T-268
T-269
T-270
T-271
T-272
T-273
T-274
T-275
T-276
T-277
T-278
T-279
T-280
T-281
Task-Template
Tasks
agent-context
api
clean-state-checklist
current-state
routes
Clone
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/tasks/T-214.md· commitafc651f75a3a
id: T-214 title: 建立候选商品持久身份与重新定位指纹 phase: 2 deps:
- T-208
- T-213
status: DONE
created: 2026-07-28
context_ref:
e7f4c3ework_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。
冻结合约
- App 为每个原始候选回传:
card_signature:结果卡片可见语义的 SHA-256;detail_signature:详情页可见语义的 SHA-256;detail_evidence_sha256与specification_evidence_sha256;- 可可靠提取时回传
observed_title,否则保留明确的候选占位标题; product_url、image_url只有设备确实取得并通过 URL 校验时才允许非空。
- 后端验证四个指纹均为小写 SHA-256,并核对两个 evidence 哈希属于该 execution/observation 已上传的受控证据。不得信任客户端提交的任意哈希。
- 后端用版本化输入生成 64 位小写
candidate_key:execution_id + original ordinal + detail signature + specification evidence hash。 相同候选请求幂等重放必须得到相同 key;key 只表示本次 execution 的持久 observation,不宣称是拼多多全局商品 ID。 - 新表
candidate_observation_identities与candidate_observations(execution_id, ordinal)一对一,旧 v6 历史允许没有 identity;v7 以后新候选批次必须同事务生成 identity。 - Admin API/Web 在每个 observation 区块显示 candidate key、原 ordinal、规格、 价格、卡片/详情签名和受控截图引用。外链只作为不可执行审计文本,不由后端请求。
- 后续 Admin 选品和设备命令只能引用
candidate_key,并同时绑定 task、 execution、task content hash 和 review version,不能只传 ordinal 或 URL。
验收要点
- v7 migration
up/down/up可重复;有 identity 数据时破坏性 down 失败。 - App 回传全部 observation 的卡片/详情/双证据 SHA-256,不因模型拒绝而缺失。
- 后端拒绝格式错误、跨 execution、与 evidence 实际哈希不一致的指纹。
- 同一请求重放 candidate key 稳定,不同 observation key 不同。
- Admin API/Web 可按 candidate key 查看 observation、模型判断、人工结论和截图。
- 后端不会请求候选 URL;没有真实 URL 时保持空值而不是生成伪链接。
- 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 CLIup/down/up,Androidtest assembleDebug assembleRelease和根.\init.ps1全部通过。Debug APK1.4.12 (17)已覆盖安装到 PKG110,采购无障碍 仍在启用列表。