Fix add account request metadata handling

This commit is contained in:
2026-09-21 18:42:43 +08:00
parent 638df6993c
commit 3800ed3df4
3 changed files with 51 additions and 2 deletions
@@ -0,0 +1,39 @@
# 添加小号失败修复与 Windows 发布记录
## 问题与修复
日志中的真实异常为:
```text
[操作失败] 添加账号:TypeError
```
根因是界面请求统一注入 `_request_id`,账号添加分支却将完整请求字典传给 `Store.add(**data)``Store.add()` 不接受 `_request_id`,因此抛出 `TypeError`
修复:`src/account_engine.py``add` 分支改为显式传递 `role``name``uid``owner`,保留请求元数据供 UI 回包,但不传入存储层。`src/test_accounts.py` 增加带 `_request_id` 的回归输入。
## 本地验证
- `src/test_accounts.py` + `src/test_plan01.py`54 项通过。
- onboarding UI 相关聚焦测试:1 项通过。
- Python 编译、`git diff --check`:通过。
- 完整 onboarding UI 测试在当前 Linux offscreen 环境的既有 profile 测试处超时;未将其归因于本次改动。
- 其余本地测试 77 项通过,另有 1 项既有日志文案断言与当前文案不一致,未扩大本次修复范围。
## Windows 原生构建与安装
- 主机:`10.1.1.101`
- 构建目录:`C:\Users\Rogee\douyin-pc-build-20260920-follow`
- 安装目录:`C:\Users\Rogee\AppData\Local\Programs\DouyinAccounts`
- Windows Python3.12.10
- 构建命令:`python build_windows.py`
- PyInstaller、打包离线冒烟、CLI `--help`、Inno Setup:通过。
- 安装包:`release/DouyinAccounts-0.1.8-Windows-x64-Setup.exe`
- 安装包大小:222,720,245 bytes
- SHA-256`12591caf2359f21a333e3b2a1232265ce0b935c49709280afdf2edf470a9c512`
- 安装退出码:`0`
- 安装日志:`Installation process succeeded.`
- 构建目录与安装目录的 `DouyinAccounts.exe` SHA-256 均为:`6f16dd1818449363be1df262cc5aa0d1b8ac987552ba3ab188cbda769e58821d`
- 原有本地数据目录仍存在,未传输、删除或修改登录目录、Cookie、数据库内容。
源码和构建文件通过 SSH 传输;未传输账号数据。安装后通过 Windows MCP 启动并检查 GUI,窗口及“添加账号/停止全部/设置”等控件正常显示。未自动登录、启动业务规则、关注、私信或标记已读;应用当前保持打开供用户手动验证。
+6 -1
View File
@@ -928,7 +928,12 @@ class Engine:
async def _command(self, name, data):
if name == "add":
ident = self.store.add(**data)
ident = self.store.add(
role=data["role"],
name=data["name"],
uid=data.get("uid"),
owner=data.get("owner"),
)
self.begin_login(ident)
return ident
if name == "rule":
+6 -1
View File
@@ -756,7 +756,12 @@ class EngineTest(unittest.IsolatedAsyncioTestCase):
async def test_unbound_group_cannot_start_and_add_starts_login_only(self):
with patch.object(self.engine, "begin_login") as login:
ident = await self.engine.command(
"add", {"role": "main", "name": "界面名称"}
"add",
{
"role": "main",
"name": "界面名称",
"_request_id": "request-1",
},
)
login.assert_called_once_with(ident)
with self.assertRaises(ValueError):