# 待验证清单 · operate/control 双进程拆分 > 续接载体之一。真机/运行期门控项,每验一条回写状态 + 进度状态.yaml + 交接卡 + 进度数据.js。 > 状态:☐ 未验 / ☑ 已验通过 / ✗ 验证失败。新任务(2026-06-22)重列。 > 红线:真机门控须用户在场,绝不无人值守驱动电机。 --- ## 阶段1 · control 独立进程骨架 | 编号 | 验证项 | 门控 | 状态 | |------|--------|------|------| | D1-01 | operate 启动后能拉起独立 `ivf_tl_ControlHost.exe`(管理员静默,不弹 UAC) | 运行 | ☑ 真外壳实跑 | | D1-02 | `http://127.0.0.1:38080/ping`、`/status` 返回 JSON | 运行 | ☑ | | D1-03 | control 独立进程真机硬件获取(6相机SN读到/7 COM口 True) | **真机** | ☑ | | D1-04 | **operate 关闭后 control 进程仍在驱动**(核心目标) | 运行 | ☑ 真外壳实跑 | | D1-05 | 重开 operate 复用已在跑的 control(不重复拉起) | 运行 | ☑ 真实代码实跑 | | D1-06 | 单实例:手动起第二个 control 发现 Mutex 已占自退(进程数仍为1) | 运行 | ☑ | | D1-07 | **control 完整采集闭环 + 数据入库(started:true / 真机自控环 / 落库)** | **真机** | ☑(修死锁后·DB实证) | | D1-08 | **serialBin/HAL 借用ComBin重开不复活发送线程致串口握手死锁** 修复 | **真机** | ☑ 已修复并真机验证 | | D1-09 | control 本地 SQLite 建表 schema bug(预存,非死锁) | 运行 | ✗ 待修 | | D1-10 | control 硬件操作不进 operation_log(oplog 埋点在 operate 的另一套栈) | 运行 | ✗ 归阶段3(两栈去重) | > **2026-06-22 真机验证实测说明(D1-xx 详情见交接卡同日段)**: > - **D1-01/D1-05 真实代码实跑(非机制层)**:编译运行 operate 端真实 `ControlProcessLauncher.EnsureRunning`(集成测试 harness `临时文件/LauncherTest`,`` 链入真文件):① control 未运行时 `IsControlAlive=False → 已拉起 control.exe → 轮询就绪 → True`(拉起路径);② control 已运行时 `IsControlAlive=True → "已在运行,直接连接" → True、PID 不变、进程数恒 1`(复用路径)。harness(operate 代理)退出后 control 仍在 = **续命**亦由真实拉起路径实证。**唯一未跑** = operate WPF 外壳(登录窗→MainWindow),因僵尸 20268 占 operate 单实例 Mutex,但其调用的拉起逻辑已实跑验证。 > - **D1-07 数据入库闭环 DB 实证**:control 运行期(20:19 起)直查 108 `aivfo_tl_setting` 库:`house_collect` 20:18 后新增 22 行、`alarm_data` 新增 270 行;抽样实读:`house_collect` = `tl_sn=NEO-1-20230411, house_sn=2..9, temperature=37.16/37.46℃(真实箱体温), 多点温度, house_door=0, create_by=admin_admin, create_time=20:29`;`alarm_data` = `house_sn=11 PRESS alarm`(control 自主检测缓冲瓶低压上报)。**闭环:control 读真机传感器 → MQTT/服务器 → 108 库入库,实锤。** > - ☑ 项均 108 集群在线 + 真机连接、Claude **UAC 静默提权**自主完成,全程无需用户配合点击/起停进程。死锁修复同样惠及 operate(同 ScanDevices→serialBin 路径)。 > - ✗ **D1-09 预存 SQLite schema bug**(非死锁/非拆分):`InitTables` 报 `AUTOINCREMENT only allowed on INTEGER PRIMARY KEY`,某表建表失败,control 仍运行(读本地培养记录成功),影响限该表本地持久化。 > - ✗ **D1-10 oplog 缺口(归阶段3,非闭环阻塞)**:核查发现全 `OperationLogger` 埋点都在 **operate 侧**(ivf_tl_Operate + operate 的 ivf_tl_Services/HttpHelper + operate 的 ivf_tl_Entity 的 Camera/ComBin),**control 子树零埋点**。control 硬件操作的 oplog 收口本就挂在 operate 的**另一套 ComBin/Camera 栈**(=阶段3 "ComBin 两套栈去重 G1-2")——故给 ControlHost 单加 `InitOperationLog` 也不会产 oplog(control 自己串口栈无埋点)。归阶段3 两栈去重一并处理。control 诊断走 `RunRecord/HouseComRecord` 文件日志(本次定位全程靠它),业务数据入库走 MQTT,**闭环不受影响**。 > - 旁注:`ServiceDishAndBalanceData 接口返回失败`=无皿时服务器无培养记录、回退本地,正常非缺陷。 ## 阶段2 · 监控补全 + 调试借串口 + 受护栏停止 | 编号 | 验证项 | 门控 | 状态 | |------|--------|------|------| | D2-01 | 监控页跨进程显示完整(/status 三块:活动/阀态/借用让路 + 心跳/磁盘/链路) | 运行 | ☑ 真机验证 | | D2-02 | 调试借串口:control 让路(暂停该舱采集)→ 恢复(原 V-012) | **真机** | ◑ 让路契约已验/调试页完整驱动待设计 | | D2-03 | 受护栏停止(二次确认+工程师口令)能安全停 control | 运行 | ☑ 真机验证 | > **2026-06-22 阶段2 实测说明(详见交接卡同日段)**: > - **D2-01 ☑**:control 端 `/status` 返回完整 `MonitorSnapshot`(补 §6 三块:`WorkingType/ValveState/CapturePausedByGate`);operate 端 `ControlClient.GetStatusSnapshot()`(harness 实跑真代码)往返反序列化 10 舱、真温 37℃、三块字段正确;`ServiceMonitorViewModel.Refresh` 已由"同进程 AppData"改为 HTTP /status;监控页 XAML 加三列。 > - **D2-03 ☑**:`/shutdown` 错口令→403 拒绝、对口令 `tl13579`→200 安全停机(`HAL.ShutdownAll` 关硬件 + 进程退出 + 7 COM 口全释放,非僵尸);operate 端 `ShutdownControlCommand`(二次确认+`Microsoft.VisualBasic.InputBox` 口令)+ 监控页受护栏按钮。 > - **D2-02 ◑**:`/serial/pause {houseSn}` 实测——舱2 `CapturePausedByGate=true` 且 COM4 串口停发(control 让路,**不驱动电机**)→ `/serial/resume` 恢复;operate `ControlClient.SerialPause/Resume` 验证生效。**但调试页完整借串口驱动在拆分下断链**:debug 页原 `gate.Acquire` 借**同进程 HAL 同一物理句柄**(`HouseDebugPageViewModel:256`),拆分后 operate 进程 HAL 是空单例、拿不到 control 持有的串口——需 **control 暴露串口/相机命令代理**(当前设计文档未细化的大改面)+ 驱动电机受安全红线门控(设计 §178 需用户在场)。让路契约(/serial/pause|resume)已就位作基础,调试页完整驱动列独立子任务(需设计+受监督真机验)。 ## 阶段3 · 清理 + 装机(待阶段3拆计划后补全) | 编号 | 验证项 | 门控 | 状态 | |------|--------|------|------| | D3-01 | 退役删 ivf_tl_ControlTest 后 operate/control 仍编译运行正常 | 编译+运行 | ☐ | | D3-02 | operate 开机自启,开机自动起 operate→拉起 control | 运行 | ☐ | | D3-03 | 全新部署一次到位(两 exe + 端口 + DependFile + 开机自启) | 部署 | ☐ | ## 合并遗留 · operate 侧降级 / 待验证(与双进程拆分并行存在) > 来源:2026-06-22 复核评审逐条源码坐实;详见 `需求文档/操作端逻辑与配置全景.md` §八。 > 这些是"三项目合并"阶段**做了一半、未真机验收**的功能缺口——合并代码完成 ≠ 业务闭环。 > 状态:☐ 未验 / ☑ 已验通过 / ✗ 验证失败 / ▼ 已知降级未接通。 > 根因统一:`ivf_tl_operate_2.0/control/IvfTl.Hardware/Impl/SerialChannelImpl.cs`(control 端 Commander 缺 builder)。 | 编号 | 验证项 | 现状(file:line) | 门控 | 状态 | |------|--------|------|------|------| | M-01 | 舱室排气阀时间**写** EEPROM 真下发下位机 | `SerialChannelImpl.cs:130` return false 不下发,仅本地暂存(HouseDebug:534);需补 control `CreateWriteEEPROOpenVentTimeCommand` + 真机核对字节(源码注释挂 V-010) | **真机** | ▼ | | M-02 | 舱室排气阀时间**读** 真读下位机 | `SerialChannelImpl.cs:137` return -1,静默保留旧值(**无 UI 提示**,最易误判正常) | **真机** | ▼ | | M-03 | 缓冲瓶灯光亮度**写** EEPROM 真下发 | `SerialChannelImpl.cs:143` return false,仅本地+服务器(Buffer:268);需补 control `CreateWriteEEPROMLightNum` | **真机** | ▼ | | M-04 | 调试页存图与基准一致 | `CameraImpl.cs:148` 丢弃宽高转 `SaveBmpPic`,自称等价**未验证**;核对落盘格式/旋转/位深(**无 UI 提示**) | **真机** | ☐ | | M-05 | 写 EEPROM 类"成功=true"可靠性 | `WriteWellHorizontalPos`/`WriteScanStep`/`WriteOpenIntakeTime` 阻塞收回复即 true,未校验真实成功(SerialChannelImpl.cs:106-118) | **真机** | ☐ | | M-06 | `ReadWellFocusZero` 按 well 区分 | control Z 对焦零点为整舱单值,`well` 入参被忽略,与 autofocus 按 well 读零点有差异(SerialChannelImpl.cs:94) | **真机** | ☐ | | M-07 | Release 连内网网关(非测试外网) | `AppData.cs:91-111` `#if DEBUG` 覆写 BaseUrl 到 test-gateway 外网;真机/排障必须用 Release + 现场核对 `urlIp` | 部署 | ☐ |