eis/eqpalg/eqpalg_refactoring_status.md

179 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# eqpalg 重构过程状态 — 2026-05-15
## 当前状态Phase 1-4 代码完成,编译通过,运行调测中
---
## 已完成Phases 1-4
### Phase 1: ExpressionEngine 统一表达式引擎 ✅
- ❌ 删除 ExpModule250 行)
- ❌ 删除 `is_exp_alg_` 补丁标志
- ❌ 消除双 FunVars
- ✅ 创建 ExpressionEngine347 行,`eqpalg/utility/expression_engine.*`
- ✅ 统一变量刷新、表达式注册/求值、FunVars 管理、hold 变量
### Phase 2: FbStateMachine 反馈状态机 ✅
- ✅ 创建 FbStateMachine348 行,`eqpalg/utility/fb_state_machine.*`
- ✅ 7 状态显式建模Idle → Started → InProgress → Done/NotHold/Timeout
- ✅ 变量快照/累积/清零内置于状态机
- ❌ 删除 act_start_done/not_hold/done/timeout 4 方法
- ❌ 删除 act_started_/triggered_/fb_triggered_/fb_done_ 4 标志
### Phase 3: ExpBase 解耦 + 算法子类化 ✅
- ✅ BoundChecker 提取(`eqpalg/utility/bound_checker.*`90 行)
- ✅ StatCollector 提取(`eqpalg/utility/stat_collector.*`206 行)
- ✅ 4 个算法子类:
- LogicAlgAlg 136 行)
- BoundAlgAlg 285 行)
- BoundHoldAlgAlg 576 行)
- FeedbackAlgAlg 3/4132 行)
- ✅ build_algorithm.cpp 工厂切换到子类
- ✅ ExpBase 从 1956 行瘦身到 1105 行(-43%
### Phase 4: 单元测试 ✅
- ✅ 77 个测试用例3 个测试文件)
- ✅ ExpressionEngine 测试14 用例)
- ✅ FbStateMachine 测试11 用例)
- ✅ 算法组件测试52 用例,含 BoundChecker/Roller3/FaultCode 工具函数)
---
## 当前问题:运行时段错误
### 已修复的编译问题12 个 commit
- CMake 测试 target include 路径缺失
- `""` vs `<>` include 风格不符项目规范
- `enum class DetectMode``ostream<<`
- `mix_cc::time_range_t` 未声明
- 5 个子类未实现纯虚 `doMonProc()`
- `bound_alg.cpp` 访问私有 `exps_`
- ExpBase 子类残留旧方法调用
- roller2/roller3 残留 `init_hold_exp_str`/`exp_messy_code_check`
### 当前运行问题
1. **段错误**`std::map::operator[]` 中 string 键为 null 指针
- 根因VarsCache::tag_num 未初始化垃圾值ensureVarCache 惰性检查不可靠
- 修复:改用 tag_keys.size() 判断(最新 commit fe98fed
- 状态:**待验证**
2. **表达式变量缺失**`Unknown variable tag2` 错误日志
- 已通过 ExpressionEngine 构造函数预初始化 mm_vars 修复commit b53c061
- 状态:**待验证**
---
## 待完成
### 短期(运行调测)
- [ ] 验证段错误修复rebuild + GDB 测试)
- [ ] 验证 `Unknown variable` 错误修复
- [ ] 全量回归测试eqpalg-mon 正常运行,报警正常触发)
### 中期(代码质量)
- [ ] 清理 remaining 蓝色 warningGlobDefine.h format、dsm/public.h return-type
- [ ] exp_base.cpp:804 行 `&&` 优先级加括号
- [ ] glitch_detection.cpp:137 load_exp() 无 return 值
### 长期(可选)
- [ ] VarManager 独立提取Phase 3a 子步骤)
- [ ] 为 IHDB 依赖算法TrendSlope/Roller/GlitchDetection编写集成测试
- [ ] TrendSlope2/3 的 hardcoded 60s 时间偏移评估
---
## 关键文件清单
### 新增文件
| 文件 | 行数 | 说明 |
|------|------|------|
| `eqpalg/utility/expression_engine.h` | 130 | 统一表达式引擎头文件 |
| `eqpalg/utility/expression_engine.cpp` | 240 | 统一表达式引擎实现 |
| `eqpalg/utility/fb_state_machine.h` | 122 | 反馈状态机头文件 |
| `eqpalg/utility/fb_state_machine.cpp` | 226 | 反馈状态机实现 |
| `eqpalg/utility/bound_checker.h` | 56 | 上下限检测器 |
| `eqpalg/utility/bound_checker.cpp` | 34 | 上下限检测器实现 |
| `eqpalg/utility/stat_collector.h` | 94 | 统计学习收集器 |
| `eqpalg/utility/stat_collector.cpp` | 112 | 统计学习收集器实现 |
| `eqpalg/algs/logic_alg.h/.cpp` | 36 | Alg 1 |
| `eqpalg/algs/bound_alg.h/.cpp` | 85 | Alg 2 |
| `eqpalg/algs/bound_hold_alg.h/.cpp` | 76 | Alg 5 |
| `eqpalg/algs/feedback_alg.h/.cpp` | 132 | Alg 3/4 |
| `eqpalg/test/test_harness.h` | 84 | 测试框架 |
| `eqpalg/test/test_main.cc` | 7 | 测试入口 |
| `eqpalg/test/test_expression_engine.cc` | 140 | 14 测试 |
| `eqpalg/test/test_fb_state_machine.cc` | 197 | 11 测试 |
| `eqpalg/test/test_algorithms.cc` | 915 | 52 测试 |
| `eqpalg/test/README.md` | 295 | 测试文档 |
### 删除文件
| 文件 | 说明 |
|------|------|
| `eqpalg/utility/ExpModule.h` | 被 ExpressionEngine 替代 |
| `eqpalg/utility/ExpModule.cc` | 被 ExpressionEngine 替代 |
### 设计文档
| 文件 | 说明 |
|------|------|
| `eqpalg/algs/ALGORITHMS_FUNCTIONAL_DESCRIPTION.md` | 14 个算法功能阐述 |
| `eqpalg/algs/EXPBASE_REFACTOR_PLAN.md` | ExpBase 解耦方案 |
| `eqpalg/algs/FBSTATE_DEEP_ANALYSIS.md` | FbStateMachine 7 状态分析 |
| `eqpalg/algs/UNIFIED_EXPRESSION_ENGINE.md` | 双 FunVars 消除方案 |
| `eqpalg/eqpalg_changes_2026-05-15.md` | 完整变更文档 |
| `docs/superpowers/plans/2026-05-15-expression-engine.md` | Phase 1 执行计划 |
---
## 全部 Commit35 个)
```
fe98fed fix: ensureVarCache 改用 tag_keys.size() 判断
f3b1543 fix: ensureVarCache 移到 expression_engine.h 内联
b53c061 fix: ExpressionEngine 构造函数预初始化 mm_vars
9758459 fix: 修正 bound_checker_setDetectMode_override 测试预期
d79d17a docs: 更新 eqpalg 重构变更文档
06ebc21 fix: roller2/roller3 init_hold_exp_str/exp_messy_code_check 改用 ExpressionEngine
367802f fix: roller3.cpp DetectMode enum class LOG 输出和 stoi 赋值 cast
ba0bf8c fix: 清理 ExpBase 子类残留旧方法调用
43c545e fix: 添加 hasExpression(),修复 bound_alg/exp_bound 编译错误
18a5675 fix: 子类实现 doMonProc() + 测试 CMake 添加缺失链接文件
62a2e55 fix: expression_engine.h 添加 <mix_cc/ihyper_db.h>
dc26b6a fix: enum class CHECK_EQ 改为 CHECK(==)
5a026ac build: 添加 -Wno-unused-parameter/variable/sign-compare/reorder
2754b7a docs: 添加 eqpalg 测试说明文档
4032ff9 fix: 测试文件 "" include 改为 <> 风格
3f10d4d fix: 为 eqpalg_test 添加缺失 include 路径
153ce64 docs: 添加 2026-05-15 eqpalg 重构变更文档
ca2147e test: 核心算法单元测试
032f0d0 refactor: 切换 build_algorithm 工厂到算法子类
ae7834a refactor: 算法子类化 — 消除 exp_type_ 分支
4f8eecd refactor: 提取 StatCollector 统计学习组件
b9cf5f4 refactor: 提取 BoundChecker 上下限检测组件
c4bcb66 refactor: 删除旧反馈状态方法和标志
0106e55 refactor: 集成 FbStateMachine 到 ExpBase::mon_proc()
fad4ee8 test: FbStateMachine 状态转换单元测试
9f66fc1 feat: FbStateMachine 状态转换 + 变量操作实现
f2f6d6f feat: 添加 FbStateMachine 头文件
e9b2c17 refactor: 删除 ExpModule 类
3f8d281 fix: 清理 ExpBase 子类残留引用
38d0942 refactor: 非 ExpBase 算法适配 ExpressionEngine API
7c2fe7f refactor: ExpBase 表达式管理迁移到 ExpressionEngine
96ca4d0 refactor: AlgBase 从 ExpModule 迁移到 ExpressionEngine
f10da49 test: ExpressionEngine 单元测试用例
693d3b5 feat: ExpressionEngine firstFill + printVars 实现
e575efd feat: ExpressionEngine FunVars 控制 + hold 变量管理
5017368 feat: ExpressionEngine 变量刷新实现
da9eb2e feat: ExpressionEngine 核心实现
2f7ca1e feat: 添加 ExpressionEngine 头文件声明
ec8e44c test: 为 eqpalg 添加测试基础设施
```
## 下次继续步骤
1. `git pull` 拉取最新代码
2. `cd eqpalg/build && cmake .. && make -j4` 编译
3. `bpm debug eqpalg -mon` 运行并检查是否还崩溃
4. 如崩溃,`bt` 查看 GDB 堆栈
5. 验证 eqpalg-mon 正常运行,报警功能正常
6. 清理蓝色 warning