Skip to content

v0.51.0 — 算法精度验证 + 协议 Fuzz + 技术债清零

Choose a tag to compare

@Gawg-AI Gawg-AI released this 05 Jul 09:59

v0.51.0 — 算法精度验证 + 协议 Fuzz + 技术债清零

发布日期:2026-07-05
SemVer 等级:MINOR(新增 PowerFlowAlgorithm::FastDecoupled 枚举变体 + 新 trait AuditSinkFactory + 新结构体 RepositoryAuditSink + 新模块 fd_solver / matpower_loader / harmonic_limits_gbt14549
Spec.trae/specs/add-v0510-algorithm-fuzz/spec.md(6 批次 A-F,30+ 子任务)
ADRdocs/adr/0019-v0510-algorithm-fuzz.md(5 项子决策)

概要

v0.51.0 是 v0.50.x 系列后的质量与精度强化版本,围绕三条主线交付:

  1. 算法精度验证:Fast-Decoupled 潮流求解器(Stott & Alsac 1974)+ AC-OPF MATPOWER 对照(IEEE 14)+ IEEE 39-bus 暂态 CCT + GB/T 14549-1993 谐波限值合规
  2. 协议鲁棒性:4 个电力协议解析器(IEC 104 / IEC 103 / DL/T 698 / PMU C37.118)cargo-fuzz fuzz target + 5 个核心 crate proptest 属性测试(30 properties × 256 cases = 7680 verifications)
  3. 技术债清零:88 处 unwrap/expect 违规全部清零(含 16 个二进制 main.rs)+ 全仓 #![allow(clippy::unwrap_used, clippy::expect_used)] 顶层属性清零(改为 #![deny(...)] + #![cfg_attr(test, allow(...))] 模式)+ HardwareWatchdog 接入 Linux /dev/watchdog + RepositoryAuditSink HMAC 链审计后端

主要变更

批次 A — 技术债清偿(8 任务)

  • A1:盘点 unwrap/expect 违规分布(104 警告,含 16 测试代码;非测试违规 88 处,spec 估计 67 处,差异 +21)
  • A2-A6:按 7 Phase 修复 88 处违规(eneros-powerflow / eneros-analysis / eneros-protocol-iec103 / eneros-device / eneros-agent / eneros-os / eneros-api / eneros-market / eneros-sdk-c / eneros-ha + 16 二进制 main.rs)
  • A7HardwareWatchdog 接入 Linux /dev/watchdog(arm/feed/trigger/force_close_no_magic,3 单元测试)
  • A8RepositoryAuditSink HMAC 链审计后端(AuditSinkFactory 配置驱动构造,17 单元测试)

批次 B — Fast-Decoupled 求解器(3 任务)

  • B1crates/eneros-powerflow/src/fd_solver.rs 新增 FastDecoupledSolver(B'/B'' 矩阵构建 + /V 缩放 + 9 单元测试)
  • B2PowerFlowAlgorithm::FastDecoupled 枚举变体(Q limits 非空时返回 Err)
  • B3eneros-simulator 集成(with_algorithm builder + parse_algorithm 自由函数 + 8 单元测试)

批次 C — 算法精度验证(3 任务)

  • C1:AC-OPF IEEE 14 MATPOWER 对照(matpower_loader.rs 解析器 + fixture + 快照 + 集成测试;IEEE 30/118 推迟 Phase 2)
  • C2:IEEE 39-bus 暂态 CCT(3 处 API gap 详细记录 + #[ignore] + TODO v0.52.0+)
  • C3:GB/T 14549-1993 谐波限值合规(625 行 + 完整 Table 2 orders 2-25 + 4 电压等级 + 29 新测试)

批次 D — 协议 Fuzz 基础设施(6 任务)

  • D1:4 个 fuzz target(IEC 104 / IEC 103 / DL/T 698 / PMU C37.118)+ libfuzzer-sys 集成
  • D2-D6:60s smoke 测试推迟(nightly toolchain 网络瓶颈 ~20KB/s,200MB+ 下载受阻)—— fuzz target 编译通过 cargo build --workspace 验证,API 路径已确认;用户本地执行说明见 docs/quality/fuzz-logs-v0510/README.md

批次 E — Property-Based Testing(6 任务)

  • E1-E5:5 个核心 crate proptest(eneros-core / eneros-powerflow / eneros-constraint / eneros-gateway / eneros-scada,30 properties × 256 cases = 7680 verifications)
  • E6:workspace 依赖 proptest = "1.5"

批次 F — 文档同步(6 任务)

  • F1CHANGELOG.md + ROADMAP.md(v0.51.0 发布基线 + 完成项移入)
  • F2README.md + README_en.md(版本号 + 变更内容 + 使用场景)
  • F3DEVGUIDE.md + docs/developer-guide.md + docs/user-manual.md + docs/deployment/mvp-demo.md
  • F4:ADR-0019 + eneros.toml [quality] section
  • F5:全量验证(fmt / build / clippy / test / doc / deny 全绿)
  • F6:Git tag + GitHub Release

验证

检查项 结果
cargo fmt --all -- --check 0 diff
cargo build --workspace 25.25s, 0 error
cargo clippy --workspace --all-targets -- -D warnings 0 warning (55.85s)
cargo test --workspace ~7500+ passed / 0 failed / 78 ignored
cargo doc --workspace --no-deps 0 new warning in v0.51.0 modules
cargo deny check advisories/bans/licenses/sources ok

关键数字

  • 86 files changed, +9557 / -302
  • 88 unwrap/expect 违规清零
  • 30 proptest properties × 256 cases = 7680 verifications
  • 4 fuzz target(smoke 推迟)
  • ~7500+ tests passed
  • 0 clippy warning
  • 0 #![allow] 顶层属性

已知限制

  1. AC-OPF IEEE 30/118:推迟到 Phase 2(v0.52.0+)
  2. AC-OPF 求解器升级:当前 merit-order ED 启发式 + 梯度下降内点法无法达到 MATPOWER 1e-6 pu 精度,需 KKT 系统原对偶内点法(TODO v0.52.0+)
  3. IEEE 39-bus CCT:3 处 API gap(flat-start init / post-fault line tripping / 恒阻抗负荷)阻止 5% 误差断言,标记 #[ignore](TODO v0.52.0+)
  4. Fuzz 60s smoke + 24h run:nightly toolchain 网络瓶颈推迟,用户本地执行说明见 docs/quality/fuzz-logs-v0510/README.md
  5. proptest 扩展:eneros-analysis / eneros-device / eneros-agent 待 v0.52.0+

升级指南

# Cargo.toml
[dependencies]
eneros-powerflow = "0.51"
eneros-analysis = "0.51"
eneros-gateway = "0.51"
# eneros.toml — 新增 [quality] section
[quality]
fuzz_targets = ["iec104", "iec103", "dlt698", "pmu_c37118"]
proptest_cases = 256

[demo]
algorithm = "nr"  # "nr" | "fd" | "bfsw" | "dc"

[demo.gateway]
watchdog = "mock"  # "mock" | "hardware"

[demo.audit]
sink = "memory"  # "memory" | "repository"

完整变更日志:见 CHANGELOG.md v0.51.0 节