工作计划表.md 9.5 KB

operate / control 双进程拆分 · 工作计划表

续接载体之一(人类可读主表)。配套:进度状态.yaml / 交接卡.md / 待验证清单.md。 状态图例:☑完成(含真机验证)|🟢代码完成待真机|◐进行中|☐未开始。 新任务(2026-06-22 启动)。旧任务(M0-M8 合并改造)代码完成、真机验收整体未做、有 operate 侧降级遗留(见待验证清单 M-01~M-07)、旧文档已清空,本表仅服务新任务。


〇、全局概览 · 续接指南(打开本表先看这里)

当前状态(2026-06-22):新任务"operate/control 双进程拆分"启动。需求梳理 + 架构设计 + 阶段1实现计划 + 文档体系重建均已完成,阶段1 待开工

任务本质:control 从 operate 进程内剥离成独立常驻进程,operate 经本地 HTTP 按需拉起并读状态;operate 关闭后 control 续命。只动 operate/control,front 不动,control 业务逻辑零改动。

文档三层结构

  • 需求文档/ = *做什么*:specs/...-design.md(架构设计)、control-逻辑与配置全景.md(现状基线)
  • 开发计划/ = 怎么做:2026-06-22-阶段1-control独立进程骨架.md(阶段1 七任务)
  • 进度/ = 到哪了:本表 + 进度状态.yaml(断点)+ 交接卡.md(历史)+ 待验证清单.md

续接三件套:① 本表 ② 阶段1计划 ③ 进度状态.yaml(断点)。


阶段总览


阶段1 · 任务分解(详见 开发计划/2026-06-22-阶段1-control独立进程骨架.md

阶段 内容 状态 出口验收
阶段1 control 独立进程骨架 🟢 代码完成·真机闭环打通(待并 main) control 独立 exe 能起✓、HTTP探活/读状态✓、续命✓、单实例✓、硬件获取✓、真机自控环运行✓;阻塞闭环的 D1-08 串口握手死锁已修复
阶段2 监控补全 + 调试借串口 + 受护栏停止 🟢 监控/受护栏停止/借串口让路 已实现+真机验;D2-02 调试页完整借串口:第一阶段 control 后端 批A+批B 已落地(2026-06-23,TDD 25单测绿),待批C(HTTP路由+装配)+真机冒烟 监控页跨进程 /status 显示完整✓;受护栏 /shutdown 安全停✓;/serial 让路✓;D2-02(会话式借用+通用command分发+MJPEG预览+红线钳位+超时自动回收)spec+计划已出;第一阶段 control 后端:批A(单测工程/数据类 DebugSession+DebugCommandResult/红线钳位 MotorClamp/Fakes 测试替身)✓ + 批B(DebugSessionManager:acquire/release/heartbeat/幂等+超时自动回收+Execute 命令分发含电机红线钳位/EEPROM写)✓ 全 TDD 25 单测绿,8 commit 在 feature/d2-02-debug-command-proxy;剩 批C=Task8 ControlHttpServer /debug 路由+Task9 Program 装配 SweepExpired 看门狗,再 Task10 真机 curl 冒烟,待并 main
阶段3 清理老壳 + 装机收尾 🟢 退役删ControlTest+部署文档+开机自启 已做;D1-10 control oplog审计埋点已迁移+真机验证;D3-05 control崩溃看门狗已实现+真机验证(2026-06-23);HIL硬件在环回归套件已入库+真机验证(2026-06-23);配置收敛 已完成+真机验证(2026-06-23);删operate死栈延后 退役删 ivf_tl_ControlTest✓;双进程部署指南✓;开机自启✓;D1-10 oplog审计迁移到control活栈✓;D3-05 看门狗(崩溃重拉/DPAPI凭据/可暂停停止卸载)✓;HIL套件 IvfTl.Hardware.HilTests(守护M-05帧长/M-06按well焦点/M-01-03 EEPROM写,门控Skip+默认零写入)✓;配置收敛(operate↔control连接组7键单一数据源tl-shared.config经合并读+operate删12换气CCD死键,真机改一处对称生效)✓;ComBin删operate死栈(D3-04,被D2-02阻塞)仍延后
编号 任务 状态 验证方式
Task1 新建 ivf_tl_ControlHost 项目骨架 编译0错
Task2 HostArgs 命令行参数解析 xUnit 4过
Task3 StatusDto + /ping 返回体 xUnit 2过
Task4 内嵌 HttpListener(/ping /status) 编译+真机/status
Task5 Program.cs 完整启动序(Mutex→参数→Login→盘→ScanDevices→StartRun→HTTP驻留) 编译0错+真机起
Task6 operate 改为拉起独立 control(探活+Process.Start+轮询) Release编译0错+机制验证
Task7 [真机] 端到端验证(能起/能连/operate关了续命/重开复用/单实例) ☑ 真机闭环打通 独立起/HTTP/单实例/硬件获取/续命/采集自控环 全✓(修D1-08死锁后)

真机门控:Task7 由 Claude 自主完成(UAC ConsentPromptBehaviorAdmin=0 静默提权,无需用户配合起停进程/点击)。采集闭环已打通:D1-08 串口握手死锁(HAL借用ComBin重开端口不复活发送线程)已定位+修复+真机 red→green 验证(started:true/tlSn/温压门换气自控环运行),见 待验证清单 D1-07/D1-08 + 交接卡 2026-06-22 D1-08段。:operate端完整链路复测(需清僵尸20268/重启)+ D1-09 SQLite schema专项 + M-01~M-07 降级专项。


执行方式

子代理驱动开发(subagent-driven-development):每个 Task 派全新子代理实现 + 两阶段审查(spec 合规 → 代码质量),主线收结论。先在 feature 分支干 Task1-6(纯编码),Task7 真机验证(真机已连,由 Claude 自主跑完、无需用户在场/配合;仅「水平电机」「垂直 Z 电机」运动范围需守安全区间,参考 临时文件/相关参数.html)。

提交边界 = 文档已同步(CLAUDE.md 第三节)。


追加 · 2026-06-23 进展

D2-02 第一阶段(control 后端)= 🟢 代码完成 · ☑ 真机验证通过

  • Task0-9 全落地,27 单测全绿(含 C-1 非零起点红线回归),Debug/Release 0 错,11 个 commit 在 feature/d2-02-debug-command-proxy
  • 真机完整冒烟过:借真实舱6→读温 36.46℃/握手6→电机越界 HTTP400 实拒(不下发)→心跳/归还→超时14s自动回收。逐舱(2/4/6/7/8/9)读温均≈36℃健康。详见交接卡/待验证清单 2026-06-23。
  • 真机踩坑均已解(僵尸不挡 control / 登录真因=测试目录缺 tl-shared.config 致 BaseUrl 坏 / auth 库本零用户已插 admin/123456 可逆)。
  • 第二阶段(MJPEG 出图)、第三阶段(operate 接入 + V-012 电机真机走位)待拆。

新加固专项 · 舱室故障隔离 + 双端故障提示 = 🟢 第一阶段代码完成 · ☑ 真机核心验证过(残留 H-07 物理注入)

  • spec + 实现计划 + 方案修正(复用现有 reportAlarm 报警闭环,弃用群消息 reportCloudAlarm)均已落盘;分支 feature/house-fault-isolation(代码+文档 commit)。
  • 结论:运行期单舱坏已隔离 ✓ 且已接现有报警闭环;启动期缺口已修 ✓(只排坏舱、好舱继续、零可跑才中止)。
  • 代码 Task1-6 全完成(37 单测绿):HouseFault/StartupFaultPolicy(纯TDD)→ SerialBin 6处登记 → InitTL 零可跑才中止 → InitHouse 逐舱兜底 → AppData 快照透出 Faults + ReportStartupFaults(走 ReportAlarmController 闭环)。
  • 真机核心验证过(2026-06-24,无活体培养):H-04 基线新 control(pid10360)无回归(/status Faults 空、好舱齐、started);H-05 reportAlarm 相机异常→alarm 表落 PHOTO_STATE_ALARM(闭环+排除舱能落库);H-06 插联系人→定时任务→阿里云短信,alarm_send_info 记"发送成功!"派发至 18223210384(到达由阿里云,用户自查)。测试数据已清理。
  • 残留 H-07:物理拔相机USB 制造半坏舱(软件做不到,需物理/模拟);剔除决策已单测、登记点镜像现有错误位、基线+闭环已真机验。
  • 可并 main。后续阶段:operate 监控页"舱故障"区(读 /status Faults)/ 运行期按需补去抖 / front 复用现有报警列表(H-05/06 已通)。

H-08 后续阶段 · operate 监控页"舱故障"区 = 🟢 代码完成 · ☑ 逻辑/契约验证(残 WPF像素 + H-07物理注入)

  • 范围:H-08 拆两半——operate 监控页"舱故障"区(本步,读 /status Faults)+ front 报警列表(H-05/06 已通)。control 端 Faults 第一阶段已透出,本步纯 operate 侧加展示,不碰 control
  • 改 3 文件:① 新增 ViewModel/ServiceMonitorFaultMapper.cs(纯静态、不依赖 WPF/control:FaultTypeZh 8 枚举名→中文 + 未知码原样、HouseTextAtText UTC→本地、IsolatedText);② ViewModel/ServiceMonitorViewModel.csFaults 集合 + 汇总(HasFaults/FaultSummaryText/FaultSummaryBrush)+ 显隐(FaultListVisibility/NoFaultVisibility 直给 Visibility,不用未注册的布尔转换器)+ BuildFaultRows + HouseFaultRowVm;③ View/ServiceMonitorView.xaml 在"舱室状态"与"受护栏停止"间插红色故障区(无故障显绿条 / 有故障逐条红底:舱号/类型/原因/阶段/时间/隔离态)。
  • 验证 3 层(operate WPF 外壳受僵尸 20268 占 Mutex 阻塞,同 D2-01 粒度):① operate Release 编译 0 错(XAML→BAML = 绑定路径/属性/语法全对);② curl 在跑 control pid10360 /statusFaults 字段透出=True、基线空数组、字段名匹配 operate 反序列化目标;③ 映射 harness 临时文件/FaultMapperTest(Compile Include 真实 mapper 源码,零依赖)14 检查全过(8 枚举名中文化 + 未知码兜底 + 舱号边界 + UTC 01:30→本地 09:30 东八区+8 + 隔离布尔)。
  • :WPF 像素渲染待清僵尸真重启复测;"有故障"端到端无法软件注入启动故障(=H-07 物理拔相机门控)。
  • 下一步:代码+文档一起提交;后续清僵尸真重启 + H-07 物理注入复测红区,或推进 D2-02 二/三阶段。