# 断点记录（2026-09-14 晚）

## 用户指令

- **暂停**：账号要自己使用。
- 后续会**留出 17:00 的时间**给自动化登录下载数据 → 时间已从 16:00 改为 **17:00**。
- 登录逻辑要求：**先判断密码框，有密码就直接点登录，空白才输入密码**。

## 一、已完成

### 1. 数据源切换：通达信本机客户端（成功）

`run_daily_update.cmd --check` → **`ready: true`**，退出码 0，全部字段干净：

```
missingModules     : []
missingPaths       : []
missingSourcePaths : []
warnings           : []
tdxRoot   : C:\new_tdx64
shDaily   : C:\new_tdx64\vipdoc\sh\lday   (4820 files)
szDaily   : C:\new_tdx64\vipdoc\sz\lday   (4322 files)
finance   : C:\new_tdx64\vipdoc\cw        (147 个 gpcw*.dat)
gbbq      : C:\new_tdx64\T0002\hq_cache\gbbq (5449.8 KB)
```

`config\local_paths.toml` 已指向 `C:/new_tdx64`（无 BOM）。

### 2. 依赖缺口已补

`pyarrow 25.0.1`、`duckdb 1.5.5` 已装入 `vendor\`（发布包漏打包）。

### 3. `configure_host.ps1` 的 BOM bug 已修

原脚本用 `Set-Content -Encoding UTF8` 写入，PowerShell 5.1 会加 BOM，
而 `tomllib` 不接受 BOM → `Invalid statement (at line 1, column 1)`。
已改为 `[System.IO.File]::WriteAllText` + `UTF8Encoding($false)`。

### 4. 定时下载设置已写入

`C:\new_tdx64\T0002\user.ini`：

```ini
TimeDown=1        ← 我曾以为这是「启用定时自动下载日线」
DownMin=1020      ← 1020 分钟 = 17:00
DownAllABGp=1     ← 下载所有A股类品种
OnlyDownABGData=1 ← 仅下载A股类数据
```

> ## ⚠️ 以上「定时自动下载」的结论已被证伪（2026-09-15）
>
> 2026-09-15 17:00 **什么都没有发生**：通达信当时根本没在运行
> （客户端启动后被我关掉了），且 `.day` 文件时间戳仍停在 09-14 15:59。
>
> 结论：**`TimeDown=1` 不等于「启用定时自动下载日线」**，
> 或者该功能依赖客户端处于运行状态。总之**不能依赖它实现无人值守下载**。
>
> 目前的定论是：**下载这一步必须由人工在通达信界面完成**。

通达信设置界面里确实存在这些选项（从 `TdxW.exe` 资源中读出）：
- `定时自动下载日线`（旁边有 `SysDateTimePick32` 时间选择器）
- `程序运行后自动登录`

但 `Ctrl+D` 打开的是「**系统设置**」，**不是**「盘后数据下载」。

### 5. 登录状态（已解决）

- **自动登录已实测成功**，可重复：启动客户端 → 强制激活登录框 →
  点红色「登录」按钮（真实鼠标点击），约 6 秒进入主界面。
- 账号/密码框**会自动填充**（`SavePass=1`、`SAVEZH=1`），无需每次输入。
- 完整可用方法见 `deploy\通达信自动登录方法.md`。

## 二、阻塞：自动登录点不到「登录」按钮

### 现象

- 登录框结构：账号 `SafeEdit id=1058`、密码 `SafeEdit id=1443`、
  「登录」`Button id=1`（**`IsWindowVisible=false`**，是自绘红底按钮）。
- 账号框和密码框 `IsWindowVisible=true`，但**没有任何子窗口**结构。

### 试过且无效的手段

| 手段 | 结果 |
| --- | --- |
| `SendKeys` 输入密码 | 无效（前台锁：当时前台是 Edge，非登录框） |
| `AttachThreadInput` + `SetForegroundWindow` | 前台切换**成功**（前台确实变 0x100478），但密码框长度仍读为 0 |
| `WM_GETTEXTLENGTH` 判断密码是否已有 | **恒返回 0**，不可用于判断（用户确认框里其实有密码） |
| `BM_CLICK` 点「登录」(id=1) | 无效 |
| `WM_LBUTTONDOWN/UP` 发到按钮 | 无效 |
| `SetCursorPos` + `mouse_event` 真实硬件点击（屏幕坐标 620,511） | 无效 |

显示器 1360×768、无 DPI 缩放，坐标计算无误。

### 判断

「登录」按钮**极可能是 CEF 网页元素**（窗口里有 `CefBrowserWindow`、
`Chrome_RenderWidgetHostHWND`），Win32 合成消息到不了它。
账号/密码框是 `SafeEdit`，也屏蔽了读取和部分写入。

### 建议下一步

1. **先确认配置文件方案是否已足够**：`TimeDown=1` + `DownMin=1020` 若真的生效，
   通达信会在 17:00 自行下载，**根本不需要点登录按钮**。
   验证方法：明天（交易日）17:00 后检查
   `vipdoc\sh\lday\*.day` 的更新时间是否推进。
2. 若原生定时下载不生效，再考虑：把登录界面改为「记住密码后自动提交」的配置，
   或改用 `deploy\tdx_download.ps1`（`/downdata` 开关）方案。

## 三、用户需要知道的一处我造成的问题（已修复）

我一度用 UTF-8 覆盖写了 `user.ini`（原文件是 **GBK**），导致 6 个中文字体名变乱码
（`宋体` → `瀹嬩綋`）。已通过「UTF-8 读 → GBK 写」完整还原：

- 文件大小回到 **22599 字节**，与编辑前一致
- `FONTNAME3=宋体`、`FONTNAME7=微软雅黑`、`TQZBCode=TQ回测` 均正常
- `RegUID`/`TDXToken`/`TPSession`/`OID`/`RegPhone`/`BigDataCfgMD5` 全部未变

备份位置：`deploy\backup_pretest\`
（`user.ini.pre` 原始、`user.ini.utf8` 我写的错误版本、`usercomm.ini.cur`）

**教训：`user.ini` 是 GBK，修改必须用 `Encoding.GetEncoding(936)` 读写。**

## 四、尚未解决的事项

1. **`audit_legacy_csv` 代码 bug**（`CODE_ERROR`）——M1 在第 145 行
   `master.merge(legacy, on="source_code")` 崩溃，因为 `data/input` 无 CSV，
   `pd.DataFrame([])` 返回零列表。详见 `缺陷报告-audit_legacy_csv.md`。**尚未授权修复。**
2. **看板数据仍停留在 `asOf 2026-09-11`** —— 因为 M1 从未成功跑完。
3. 日更计划任务未注册（提示词规定由人工安装）。
4. `run_daily_update.cmd` 完整链路尚未成功过一次。

## 五、服务状态

- 看板服务 8765、cloudflared 隧道、看门狗（WMI 分离进程）此前均正常。
  公网地址见 `deploy\public_url.txt`（临时隧道，重启会变）。
