|
|
@@ -457,3 +457,31 @@
|
|
|
- **跨端依赖(计划已标红)**:新 alarmTypeKey(HOUSE_INIT_EXCLUDED/HOUSE_CAMERA_FAULT/HOUSE_SERIAL_FAULT/HOUSE_RUNTIME_FAULT)需在 **Java 告警字典登记**,否则 reportCloudAlarm 落库被拒、front 无从展示。Task7 Step4 先探,第四阶段落地登记。
|
|
|
- **核实**:计划自查三项过(spec §27/§28/§33-35/§38-41/§48-51 逐节有对应 Task;类型一致性 HouseFault/HouseFaultRow/Policy 签名/AppData 调用贯穿;无 TBD 占位)。**用户已定 a+c 的 ① 已于上一会话完成提交、② 本轮完成**。
|
|
|
- **下一步**:开工第一阶段——建分支 feature/house-fault-isolation,按计划 Task1 起(建议子代理驱动逐 Task,真机拔插 Claude 自主跑)。D2-02 第一阶段分支 + 本专项分支均待并 main。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 2026-06-24 · 舱室故障隔离专项 第一阶段【代码全完成】Task1-6 + 关键方案修正(复用现有报警闭环)
|
|
|
+
|
|
|
+- **背景**:接上轮拆好的实现计划开工。分支 `feature/house-fault-isolation`(从 `feature/d2-02-debug-command-proxy` 切——因单测工程 IvfTl.ControlHost.Tests 在 D2-02 分支、main 落后 16 commit,从 main 切会丢测试工程)。
|
|
|
+- **执行中发现并纠正 2 处计划偏差**:
|
|
|
+ 1. **路径**:control 的 Entity 工程是 `control/ivf_tl_Entity/`(命名空间 `IvfTl.Control.Entity.InitEntitys`),非计划写的 `IvfTl.Control.Entity/` 目录名。HouseFault.cs 建在 `control/ivf_tl_Entity/InitEntitys/`。
|
|
|
+ 2. **★告警通道(用户中途追问"系统原本有报警功能,要核实,完整闭环")→ 深挖 codegraph 核实后大改方案**:
|
|
|
+ - 系统**已有完整舱室报警闭环**:`SerialBinController.ReportAlarmController(tlSn,houseSn,houseState,comState,photoState,wellSn,airSwapState)` → Java `/reportAlarm` → **报警责任链**(温度/气压/舱门/**串口HousePort**/舱态/**相机Photo**/排气 handler)→ 写 **`alarm` 表** → **front报警列表 + operate顶部"系统异常(N)" 都读这表** + **短信/电话通知**(报警链内置 getNotifier→模板)+ `muteAlarm`静音 + 恢复自动 `stopAlarm` 消警。
|
|
|
+ - **状态码语义(AlarmDTO 接口确认 + 两 handler 实读)**:每维度 **0=正常 / 1=异常 / -1=跳过该维度**(`HousePortAlarmHandler`/`PhotoStateAlarmHandler` 均 `if(SKIP==state)return;`,SKIP=-1)。
|
|
|
+ - **运行期串口/相机异常本就接此闭环**(`HouseBin.ComBin_ComStateEvent`→`HouseStateEvent`→`ReportAlarmController`)。
|
|
|
+ - ❌ **弃用**原计划的 `reportCloudAlarm`:实读 `AlarmManageImpl.reportCloudAlarm` 只 `sendGroupMessage` 发 IM 群消息(钉钉),**不入alarm表/不进列表/不能消警**——形不成闭环;且新建 HOUSE_* alarmTypeKey 要 Java 字典登记=多余跨端依赖。**全删**。用户明确"群消息不要了""短信电话需要的"——正好对齐(短信电话=reportAlarm闭环内置,保留并复用)。
|
|
|
+ - ✅ 启动排除舱改走 `ReportAlarmController`:相机类故障(CcdSnMissing/CcdSnDuplicate/Camera*)→photoState=1;串口/编号/Init类→comState=1;其余维度-1跳过(不误清别的告警)。spec §4.2 + 计划 Task6 + 自查已同步改。
|
|
|
+- **代码 Task1-6 全落地(TDD,逐 commit)**:
|
|
|
+ - Task1 `HouseFault`+`HouseFaultType`枚举(control/ivf_tl_Entity/InitEntitys/HouseFault.cs)——2单测绿。commit f7d1d75。
|
|
|
+ - Task2 `StartupFaultPolicy`(ivf_tl_Control,BadHouseSns/RunnableHouses/IsFatal,纯函数)——真值表6单测绿。761a996。
|
|
|
+ - Task3 SerialBin(control/ivf_tl_Com)6处errorlist旁登记结构化 Faults(相机重复/相机catch/舱号重复/CCDSN缺失/CCDSN重复/扫口catch),保留errorlist。abbf490。
|
|
|
+ - 方案修正文档(spec+计划) c2686f7。
|
|
|
+ - Task6 AppData.StartupFaults + GetMonitorSnapshot透出Faults + ReportStartupFaults(走ReportAlarmController闭环) + MonitorSnapshot.Faults/HouseFaultRow(2单测)。4b60fd9。AppData缺`using IvfTl.Control.Entity.InitEntitys`已补。
|
|
|
+ - Task4 InitTL:相机/串口errorlist不再整机中止→只记日志;`StartupFaultPolicy.RunnableHouses`算可跑舱;坏舱标Isolated存`AppData.StartupFaults`;`IsFatal`(零可跑)才中止。a9045c9。
|
|
|
+ - Task5 InitHouse:本地helper `Build(sn,Action)`/`Start(sn,Action)`逐舱try-catch,单舱构造异常登记InitException坏舱+跳过、不拖垮其余;CamNum/StartTask全加`!=null`判空。**上报挪到StartRun(InitHouse之后)**报含构造期故障的完整清单一次。最新commit。
|
|
|
+- **核实**:每步 red→green;全量 `dotnet test IvfTl.ControlHost.Tests` = **37 绿 0 失败**(原27 + HouseFault2 + Policy6 + Snapshot2);`dotnet build ivf_tl_Control.sln -c Debug` **0 错**。决策逻辑纯单测覆盖;启动核心改动(SerialBin/InitTL/InitHouse)行为靠 Task7 真机验。
|
|
|
+- **下一步 = Task7 真机拔插验收**:
|
|
|
+ - ① 基线(全好舱):提权起 control(须从 operate 输出根 `control\` 子目录跑,`..\tl-shared.config`才解析)→ `/status` 看 `snapshot.Faults`空 + started + houses齐 + 无回归。**可自主跑**。
|
|
|
+ - ② 半坏舱注入:**物理拔某舱相机USB → 软件无法做(拔USB只能人手)**。待与用户对齐:人配合拔一下 / 软件模拟注入 / 暂缓。
|
|
|
+ - ③ 待确认点:被排除舱可能没写入 house 表,报警链按houseSn查house/tlSetting可能查不到→alarm能否落库需真机验,查不到补一步。
|
|
|
+- **诚实边界**:本轮纯代码+单测,真机一步未跑(Task7 待开)。
|