|
@@ -1,10 +1,10 @@
|
|
|
// 实时面板数据源(监控面板.html 读 window.PROGRESS_DATA)。每推进一步更新本文件。
|
|
// 实时面板数据源(监控面板.html 读 window.PROGRESS_DATA)。每推进一步更新本文件。
|
|
|
window.PROGRESS_DATA = {
|
|
window.PROGRESS_DATA = {
|
|
|
project: "operate/control 双进程拆分",
|
|
project: "operate/control 双进程拆分",
|
|
|
- generatedAt: "2026-06-23 20:30",
|
|
|
|
|
- phase: "三阶段主体完成;M区全闭合;D1-10 oplog审计迁移;D3-05 看门狗;HIL硬件在环回归套件;配置收敛(连接组单一数据源+删死键)真机验证",
|
|
|
|
|
- currentTask: "配置收敛(operate↔control 连接组单一数据源 + operate死键清理,=昨日建议「配置收敛」):7个共享连接键(urlIp/urlPort/mqttIp/mqttPort/kfkaIP/kfkaPort/outInter)收敛为唯一数据源tl-shared.config,operate/control各自App.config经<appSettings file=>只读合并→两进程读取C#零改动、换机只改一处;写入由operate AppConfigHelper经新SharedConfigStore(XDocument直写)收口;operate删12个换气/CCD死副本键。子代理驱动6任务+每任务两阶段审查。真机:control经..\\tl-shared.config读到ServerUrl=127.0.0.1:10010、改urlPort 10010↔19999重启对称生效、回归operate6/SerialHelper40/HIL2过2跳/双编译0错。",
|
|
|
|
|
- note: "痛点:双进程拆分后operate与control的App.config约25键逐字重复、control那份注释明写'必须手动同步'=漂移源头。核查厘清:operate的AppData不读那12个换气/CCD键(合并时代死副本只control读)→删;真正两进程都读会漂移的是连接组7键。机制=方案一(共享片段+<appSettings file=..>只读合并,选file=不选configSource因前者支持..上级路径;写由operate收口),control只加一行XML、C#/csproj零改动。Task1临时harness真机坐实file=+..子目录读父目录(probeKey=HELLO/exit0)。Task2 SharedConfigStore+operate首个单测工程6绿。Task3 AppConfigHelper.Save按SharedKeys分流。Task4建tl-shared.config(108值)+csproj拷输出根+operate App.config接file=删7共享键+grep坐实后删12死键。Task5 control接..\\tl-shared.config删7共享键(换气/CCD全留)。Task6真机:部署布局下control经..读到共享连接配置、改一处重启对称生效(19999↔10010)、回归全绿。operate真外壳受僵尸20268 Mutex门控未跑通(读取机制与control同源据其判定成立)。凭据组本轮不并入(独立小决策)。分支feature/config-consolidation待并main。",
|
|
|
|
|
|
|
+ generatedAt: "2026-06-23 21:30",
|
|
|
|
|
+ phase: "三阶段主体完成;M区全闭合;配置收敛真机验证;D2-02 调试页命令代理 第一阶段 control 后端 批A+批B 落地(TDD 25单测绿)",
|
|
|
|
|
+ currentTask: "D2-02 调试页跨进程命令代理 · 第一阶段(control后端):批A(单测工程 IvfTl.ControlHost.Tests + 数据类 DebugSession/DebugCommandResult + 红线电机钳位 MotorClamp + 测试替身 Fakes)+ 批B(DebugSessionManager:acquire/release/heartbeat/幂等 + 超时自动回收 SweepExpired + Execute 命令分发 读数/握手/阀/LED/电机红线钳位/EEPROM写)。全程严格 TDD red→green,逐 Task 单独 commit,全量 25 单测绿(Smoke1+MotorClamp10+SessionManager6+Execute8)。8 commit 在 feature/d2-02-debug-command-proxy。剩 批C(Task8 ControlHttpServer /debug 路由 + Task9 Program 装配 SweepExpired 看门狗)+ Task10 真机 curl 冒烟。",
|
|
|
|
|
+ note: "安全地基(spec §5):DebugSessionManager 注入 Func<int,IHouseGate>+Func<DateTime> 时钟可纯单测;会话表 ConcurrentDictionary;绝不指望 operate 主动还,SweepExpired 超时(TTL)自动 Dispose 归还兜底,心跳续约只罚失联不罚操作时长。红线电机钳位放 control:VerticalMoveTo/HorizontalMoveTo 及 Forward/Backward 相对目标越界(垂直[0,125000]/水平[0,220000])返 OUT_OF_RANGE 且不下发串口。Execute 失效 sessionId 一律拒(SESSION_EXPIRED 防抢串口)。Task5 踩坑:批A FakeLease.Dispose 不触发 gate.ResumeCapture 致超时回收测试红,改 FakeLease 持 gate 引用 Dispose 时恢复采集(对齐真实 HardwareLeaseImpl)。8 commit:批A b4da856/e3fa590/ae80804/be88acf + 批B 968ad59/b7e8e40/cdc4976/5922797。分支 feature/d2-02-debug-command-proxy 待并 main。",
|
|
|
milestones: [
|
|
milestones: [
|
|
|
{ name: "阶段1 · control 独立进程骨架(完成)", tasks: [
|
|
{ name: "阶段1 · control 独立进程骨架(完成)", tasks: [
|
|
|
{ id: "Task1-7", name: "全过+D1-08死锁修复+operate真外壳E2E+数据入库DB铁证", status: "☑" }
|
|
{ id: "Task1-7", name: "全过+D1-08死锁修复+operate真外壳E2E+数据入库DB铁证", status: "☑" }
|
|
@@ -12,7 +12,7 @@ window.PROGRESS_DATA = {
|
|
|
{ name: "阶段2 · 监控补全+借串口+受护栏停止", tasks: [
|
|
{ name: "阶段2 · 监控补全+借串口+受护栏停止", tasks: [
|
|
|
{ id: "D2-01", name: "监控页跨进程/status三块(harness验)", status: "☑" },
|
|
{ id: "D2-01", name: "监控页跨进程/status三块(harness验)", status: "☑" },
|
|
|
{ id: "D2-03", name: "受护栏停止/shutdown(口令+安全停机释放硬件)", status: "☑" },
|
|
{ id: "D2-03", name: "受护栏停止/shutdown(口令+安全停机释放硬件)", status: "☑" },
|
|
|
- { id: "D2-02", name: "借串口/serial让路(验);调试页完整驱动待命令代理设计", status: "◑" }
|
|
|
|
|
|
|
+ { id: "D2-02", name: "调试页命令代理:第一阶段control后端 批A+批B(单测工程/数据类/红线钳位MotorClamp/Fakes + DebugSessionManager 会话/超时回收/Execute分发含电机钳位,TDD 25绿);剩批C HTTP路由+装配+真机冒烟", status: "◑" }
|
|
|
]},
|
|
]},
|
|
|
{ name: "阶段3 · 清理老壳+装机收尾", tasks: [
|
|
{ name: "阶段3 · 清理老壳+装机收尾", tasks: [
|
|
|
{ id: "D3-01", name: "退役删ivf_tl_ControlTest(两编译0错)", status: "☑" },
|
|
{ id: "D3-01", name: "退役删ivf_tl_ControlTest(两编译0错)", status: "☑" },
|