From 404d0d3ca46c042cfdac010bd1908d03ff2efe6a Mon Sep 17 00:00:00 2001 From: QiuSW <105186638@qq.com> Date: Wed, 5 Aug 2026 01:17:33 +0800 Subject: [PATCH] task(T-304): add metadata and stop-latch contract --- docs/tasks/T-304.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/docs/tasks/T-304.md b/docs/tasks/T-304.md index 33b7c68..4890557 100644 --- a/docs/tasks/T-304.md +++ b/docs/tasks/T-304.md @@ -15,12 +15,15 @@ write_paths: - client/src/cmbuyer_client/app.py - client/src/cmbuyer_client/polling/** - client/src/cmbuyer_client/ui/** + - client/src/cmbuyer_client/localstate/models.py + - client/src/cmbuyer_client/localstate/store.py - client/tests/test_app.py - client/tests/polling/** - client/tests/ui/** + - client/tests/localstate/test_store.py --- - + ## 问题 / 背景 T-006 已确认采购工具双 Tab 原型,T-303 将提供唯一的 HTTP、本地恢复、DPAPI 与单实例底座。T-304 把原型转换为可测试的原生 PySide6 主界面和定时轮询协调器,但在真实单趟执行器接入前不得领取真实任务,避免形成无人消费的 active claim。 @@ -57,6 +60,12 @@ T-006 已确认采购工具双 Tab 原型,T-303 将提供唯一的 HTTP、本 - 应用独立启动、切换 Tab、Esc、查看记录与关闭窗口均产生零 claim、零 release、零 ADB;代码不导入 PDD 点击、数量、确认页、围栏、提交或付款能力。 - client 全量 unittest、compileall、wheel metadata、根目录完整 init、Vikunja 导出、上下文校验与 diff-check 通过。 +### T-303 metadata-only 配置摘要与 Stop epoch 补充 + +1. 允许精确扩展 localstate/models.py、store.py 与对应 test_store.py,只增加 metadata-only profile summary/settings 读取;不得调用 DPAPI 或返回 token/密文。 +2. Stop 必须提升 epoch/latch,使旧 timer dispatch 失效;飞行中结果先 durable commit,再按 CLAIMED/EMPTY/错误进入安全停止或恢复态。 +3. 存在 pending/active 时冻结全部非 token 配置,只允许同 device id 替换 token;关闭窗口不得 terminate 正在 I/O 的 QThread,须等待有界返回与落库。 + ## 执行记录 ### 2026-08-04T13:35:53Z · ila @@ -91,3 +100,10 @@ T-006 已确认采购工具双 Tab 原型,T-303 将提供唯一的 HTTP、本 不停止轮询、不关闭窗口、不释放 claim、不改变服务端状态;返回后按稳定记录 ID 恢复选择、滚动和焦点。 - 不导入或实现 PDD 页面判据、规格选择、数量、确认页、证据上传、事件、失败上报、提交围栏或结果接口; 不编写或引用点击“提交订单”的代码,不编写支付、免密支付、先用后付或任何扣款控件代码。 +- T-303 的 `load_profile()` 会解密设备 token,配置页不得为了读取普通设置或“已保存”布尔状态调用它。 + 本任务只可在既有 localstate store 增加 metadata-only 的 profile summary/settings 只读 API:沿用同一 + SQLite 表与事务,不调用 DPAPI、不返回密文或明文 token、不新增存储、mutex 或第二套状态源。 +- Stop 必须提升会话 epoch/latch,先取消 timer 并使已经排队的旧 epoch dispatch 失效。飞行中领取仍等待 + HTTP 自身有界结果并由 T-303 完成 durable commit:成功领取转 `RECOVERY_REQUIRED`,EMPTY 转 + `STOPPED`,结果不明、401、409、协议或本地错误保留原槽并停止;只有下一次显式 Start 才可同 key 恢复。 + 关闭窗口同样不得 terminate 正在 I/O 的 QThread,必须等待其有界返回与落库后再结束 worker。