diff --git a/docs/tasks/T-303.md b/docs/tasks/T-303.md index 16005ca..e611c1c 100644 --- a/docs/tasks/T-303.md +++ b/docs/tasks/T-303.md @@ -28,7 +28,7 @@ write_paths: - docs/06-tasks.md --- - + ## 问题 / 背景 T-302 完成后,采购工具需要真实、安全、可恢复地领取/续租任务;T-204 已提供受控截图上传接口。但 client 当前只有真机能力和最小窗口,没有 HTTP 抽象、设备凭据存储或断网/重启幂等状态。T-303 建立 `HttpTaskSource`、窄 `HttpEvidenceSink` 与 Windows 本地恢复底座;事件/fail/fence/result 尚分别依赖 T-205/T-208,本任务不伪造完整 `HttpResultSink` 或占位请求。 @@ -67,7 +67,9 @@ T-302 完成后,采购工具需要真实、安全、可恢复地领取/续租 ## 执行记录 -(暂无) +### 2026-08-04T13:27:53Z · ila + +2026-08-04 T-304 预研反向约束 T-303:localstate 必须提供唯一的原子 API 给 UI 使用,至少覆盖 profile 配置读写、同 profile 单实例 guard、recovery snapshot、polling session start/resume/stop、pending claim/active claim 查询与原 session_id+claim_request_id 恢复;T-304 不得另写 SQLite/DPAPI/mutex。profile 需承载 service_url/device_id+加密 token、adb_path、serial、transport、poll interval、failure threshold、request/step timeout。当前服务端没有 heartbeat,配置页不能拿 claim-next 做无副作用连接探测,只能显示“凭据已安全保存,将在领取时验证”。 ## 边界 @@ -82,6 +84,9 @@ T-302 完成后,采购工具需要真实、安全、可恢复地领取/续租 只能重放同一键同一载荷;不得生成新 key、领取第二条、续租复活、替换截图或覆盖本地 active claim。 - 停止轮询、Esc、关闭窗口和进程退出都不 release/abandon 当前 claim,也不自动恢复真机页面动作。 已发 claim 的未知结果和 active claim 必须跨重启保留;租约过期交 T-207 人工处理,不自动转领。 +- T-303 必须向 T-304 暴露唯一的原子 profile/session/recovery API;T-304 不得另建 SQLite、DPAPI + 或 mutex 状态源。服务端尚无 heartbeat 时,不得把 `claim-next` 当作配置页连接探测,否则“测试连接” + 会产生 EMPTY 幂等事实甚至领取任务;配置页只能说明凭据将在真实领取时验证。 - EvidenceSink 只传调用方显式给出的单个 PNG 和 T-204 固定字段;不得枚举目录、读取或上传 XML、 manifest、本机路径、外部支付页或支付凭据,不得自行向 multipart 增加 claim token/session 字段。 - 本任务不修改 `app.py` 或实现配置/轮询 UI,不连接真机,不导入 PDD 点击能力。T-304 负责桌面交互,