Releases: Gawg-AI/EnerOS
Release list
v0.52.0 — IEC 61850 Server + GOOSE Publisher + CIM XML + Deep Verification
EnerOS v0.52.0 — IEC 61850 Server + GOOSE Publisher + CIM XML + Deep Verification
Highlights
Phase 1-4: New Features
- IEC 61850 MMS Server — Full server-side COTP/Session/Presentation/ACSE/MMS stack (TCP 102). Answers Initiate/Read/Write/GetNameList from a live IedModel tree.
- GOOSE Publisher — IEC 61850-8-1 Layer-2 publisher via Linux AF_PACKET. ASN.1 BER PDU encoding (tag 0x61), stNum/sqNum state machine, T1/T2/T3 retransmission backoff. >=1000 fps encoding throughput.
- CIM XML Production Import — Replaced hand-written parser with quick-xml 0.41 event stream. Added 6 CIM 16/17 types (OperationalLimit, GeographicalRegion, etc.).
- v0.51.0 Deferred Items — AC OPF (IEEE 30/118), FD solver (IEEE 118), proptest (15 properties x 256 cases = 3840 cases, 0 failure).
Phase 5/6/7: Deep Verification & Security Hardening
Spec: verify-v0520-comprehensive-validation (11 phases V1-V11, ~80 tasks, ~90 checkpoints)
2 correctness bugs fixed:
- GOOSE Publisher doctest Arc wrapping fix
- clippy needless_question_mark fix
3 HIGH-risk remote DoS vulnerabilities fixed:
- BER deep-nesting stack overflow — 4 recursive BER walker functions had no depth limit. Fixed with MAX_BER_DEPTH=16 (MMS negotiates data-structure-nesting=10, 16 leaves safety margin).
- max_connections unenforced — ServerConfig::max_connections existed but run_accept_loop ignored it (unlimited task spawning). Fixed with Arc RAII permit pattern.
- Slowloris no timeout — Zero timeout calls in entire server. Fixed with dual-layer tokio::time::timeout (30s overall + 10s per-read).
4 new security tests added.
Quality Gates (all pass)
- cargo fmt --all -- --check: 0 diff
- cargo build --workspace: 0 error / 0 warning
- cargo clippy --workspace --all-targets -- -D warnings: 0 warning
- cargo test --workspace: ~7700+ tests pass (exit 0)
- cargo deny check: advisories/bans/licenses/sources all ok
- cargo audit: 0 Critical (14 Warning-level, 2 new: ttf-parser + cxx, both in deny.toml ignore list, deferred to v0.53.0)
Dependency Governance
- deny.toml: +RUSTSEC-2026-0192 (ttf-parser unmaintained) +RUSTSEC-2026-0202 (cxx unsound)
- Both Warning severity, low real risk (not exposed to untrusted input), deferred to v0.53.0
Spec
- Build: .trae/specs/add-v0520-iec61850-server-cim-xml/
- Verification: .trae/specs/verify-v0520-comprehensive-validation/
Full changelog: CHANGELOG.md
v0.51.2 — 综合验证归档 (Comprehensive Validation Archive)
概要
v0.51.2 是 v0.51.1 发布后的综合验证归档版本(PATCH),对 v0.51.1 时点进行 4 项全量验证并归档基线报告:性能基准 / e2e 场景 / 安全扫描 / 协议一致性。本版本为纯验证+文档版本:0 源码变更、0 新功能、0 BREAKING 变更、0 新 crate、0 新协议。56 个 crate 数量与 v0.51.1 完全一致。
验证工作
1. 性能基线归档(Batch A)
- 13 criterion bench 全部通过(无 panic / 超时 / 编译错误)
- 总运行时间:1199.33s(~20 分钟)
- 14 个 markdown 报告归档到
docs/quality/perf-baseline-v0511/ - 关键指标(mean / median / p95 / p99 / std_dev / CI95)已提取
- 回归对比:
cargo bench -- --save-baseline v0511/--baseline v0511
2. v0.51.0 特性 e2e 场景(Batch B)
- 4 个新 e2e 测试全部通过:
test_e2e_v0510_fd_solver— FastDecoupled IEEE-14 + OpenBranch/CloseBranchtest_e2e_v0510_repository_audit_sink— 100 并发 + HMAC 链test_e2e_v0510_hardware_watchdog— arm/feed/trigger 生命周期test_e2e_v0510_harmonic_gbt14549— GB/T 14549 限值验证
- 全量回归:221 测试通过,clippy 0 warning
3. 安全扫描归档(Batch C)
- SAST OWASP Top 10:100 测试通过,A01-A10 全 PASS,0 Critical/High
- cargo-audit(923 依赖):0 Critical ✅ / 3 High(lopdf+quick-xml,v0.52.0+ 修复)
- cargo-deny:advisories/bans/licenses/sources 4 项全 ok
4. 协议一致性归档(Batch D)
- 7 协议 275 测试:248 通过 / 0 失败 / 27 ignored(全部有归因)
- IEC 104 / IEC 103 / IEC 61850 / Modbus / PMU C37.118 / ICCP / CDT 全部 PASS
已知限制
- 3 个 High 依赖漏洞(lopdf 0.31.0 / quick-xml 0.36.2 ×2)— v0.52.0+ 修复
- 27 项协议测试 ignored — 均有明确归因,非协议实现缺陷
- perf_bench af_xdp_vs_af_packet — Windows 平台 no-op
- HardwareWatchdog e2e — 非 Linux 平台 graceful skip
升级指南
v0.51.2 为纯验证+文档版本,无 API 变更,无需升级操作。
git fetch origin
git checkout v0.51.2
cargo build --workspacev0.51.1 — 验证修复补丁
v0.51.1 — 验证修复补丁 (Post-Release Verification Fixes)
发布日期:2026-07-05
SemVer 等级:PATCH(仅 bug 修复 + 测试/配置硬化,无 API 变更)
前序版本:v0.51.0(commit d23e5ff)
概要
v0.51.1 是 v0.51.0 发布后的验证硬化补丁版本,修复 v0.51.0 发布后多批次重验证
(Batches A–E)发现的 4 项 bug。本版本为纯修复版本:0 新功能、0 BREAKING 变更、
0 新 crate、0 新协议。56 个 crate 数量与 v0.51.0 完全一致。
修复清单
BUG-A1 — config save/load roundtrip 测试偶发失败 (P2)
eneros-core::config::tests::test_save_and_load_roundtrip 在 cargo test --workspace
并行运行时偶发失败(missing field topology / 空文件)。
调查结论:生产代码无 bug——to_toml_string() 对 EnerOSConfig::default() 产出非空 TOML。
失败由测试使用固定临时路径 eneros_config_test/test_config.toml 在并发测试或残留临时文件
场景下产生竞态。
修复:测试临时路径改为唯一路径(PID + nanos),新增非空 + [topology] section 回归断言。
BUG-C1-1 — FastDecoupledSolver 零电压初值产生 NaN (P1)
FastDecoupledSolver::solve 当 v_initial 含 0.0 时产出 NaN 电压,返回 Ok 含 NaN
而非报错。根因:FD solver 在 P-θ 与 Q-V 更新中对 v[i] 做除法(Stott & Alsac /V 缩放),
未校验初值。
修复:solve() 顶部校验所有 v_initial 条目为正有限数;若任何条目 ≤ 0 或非 finite,
返回 Err(EnerOSError::PowerFlow("v_initial contains non-positive or non-finite voltage..."))。
新增测试:
fd_solver.rs::test_fd_rejects_non_positive_voltage_initial(单元回归,覆盖 0/负/NaN/Inf)fd_solver_boundary.rs(新文件,7 边界测试:空 Y-Bus / 单节点 / 奇异 B' / 零电压 / 极值 tolerance / max_iterations=0)
BUG-E3-1 — eneros.toml [quality].fuzz_targets 缺失 (P3)
eneros.toml [quality] section 不含 fuzz_targets 字段。
修复:新增 fuzz_targets = ["iec104", "iec103", "dlt698", "pmu_c37118"]。
BUG-E3-2 — eneros.toml proptest_cases=1000 与注释 256 漂移 (P3)
eneros.toml proptest_cases = 1000,但注释说 "proptest 默认 256 cases(CI 友好)"。
修复:改为 proptest_cases = 256,与注释一致。
验证结果(F2 全量质量门)
| 质量门 | 结果 |
|---|---|
cargo fmt --all -- --check |
PASS(0 diff) |
cargo build --workspace |
PASS(0 error) |
cargo clippy --workspace --all-targets -- -D warnings |
PASS(0 warning) |
cargo test --workspace |
PASS(~4018 passed / 0 failed / 17 ignored) |
cargo doc --workspace --no-deps |
PASS(0 new warning) |
cargo deny check |
PASS(advisories/bans/licenses/sources 全 ok) |
升级指南
v0.51.1 是 PATCH 版本,无 BREAKING 变更,可直接从 v0.51.0 升级:
git fetch && git checkout v0.51.1
cargo build --workspace行为变更:FastDecoupledSolver::solve 现在对 v_initial 中的非正/非 finite 电压返回
Err(EnerOSError::PowerFlow(...)),而非静默产出 NaN。调用方应确保初值为正有限数
(flat start 使用 None 或 Some(&[1.0; n]))。
详细变更
详见 CHANGELOG.md §"[0.51.1]"。
v0.51.0 — 算法精度验证 + 协议 Fuzz + 技术债清零
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+ 子任务)
ADR:docs/adr/0019-v0510-algorithm-fuzz.md(5 项子决策)
概要
v0.51.0 是 v0.50.x 系列后的质量与精度强化版本,围绕三条主线交付:
- 算法精度验证:Fast-Decoupled 潮流求解器(Stott & Alsac 1974)+ AC-OPF MATPOWER 对照(IEEE 14)+ IEEE 39-bus 暂态 CCT + GB/T 14549-1993 谐波限值合规
- 协议鲁棒性:4 个电力协议解析器(IEC 104 / IEC 103 / DL/T 698 / PMU C37.118)cargo-fuzz fuzz target + 5 个核心 crate proptest 属性测试(30 properties × 256 cases = 7680 verifications)
- 技术债清零:88 处 unwrap/expect 违规全部清零(含 16 个二进制 main.rs)+ 全仓
#![allow(clippy::unwrap_used, clippy::expect_used)]顶层属性清零(改为#![deny(...)] + #![cfg_attr(test, allow(...))]模式)+HardwareWatchdog接入 Linux/dev/watchdog+RepositoryAuditSinkHMAC 链审计后端
主要变更
批次 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)
- A7:
HardwareWatchdog接入 Linux/dev/watchdog(arm/feed/trigger/force_close_no_magic,3 单元测试) - A8:
RepositoryAuditSinkHMAC 链审计后端(AuditSinkFactory配置驱动构造,17 单元测试)
批次 B — Fast-Decoupled 求解器(3 任务)
- B1:
crates/eneros-powerflow/src/fd_solver.rs新增FastDecoupledSolver(B'/B'' 矩阵构建 + /V 缩放 + 9 单元测试) - B2:
PowerFlowAlgorithm::FastDecoupled枚举变体(Q limits 非空时返回 Err) - B3:
eneros-simulator集成(with_algorithmbuilder +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 任务)
- F1:
CHANGELOG.md+ROADMAP.md(v0.51.0 发布基线 + 完成项移入) - F2:
README.md+README_en.md(版本号 + 变更内容 + 使用场景) - F3:
DEVGUIDE.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]顶层属性
已知限制
- AC-OPF IEEE 30/118:推迟到 Phase 2(v0.52.0+)
- AC-OPF 求解器升级:当前 merit-order ED 启发式 + 梯度下降内点法无法达到 MATPOWER 1e-6 pu 精度,需 KKT 系统原对偶内点法(TODO v0.52.0+)
- IEEE 39-bus CCT:3 处 API gap(flat-start init / post-fault line tripping / 恒阻抗负荷)阻止 5% 误差断言,标记
#[ignore](TODO v0.52.0+) - Fuzz 60s smoke + 24h run:nightly toolchain 网络瓶颈推迟,用户本地执行说明见
docs/quality/fuzz-logs-v0510/README.md - 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 节
v0.50.2 — LLM Agent 20-Round Semantic Correctness Verification
v0.50.2 — LLM Agent 20-Round Semantic Correctness Verification
Summary
Adds a semantic correctness verification layer on top of v0.50.1's safety hard-invariants. While v0.50.1 only verified safety compliance (EmergencyOverride non-leakage, JSON parse rate ≥95%, SafetyGateway non-bypass, audit 100%), v0.50.2 evaluates whether LLM Agent outputs are semantically aligned with real power scenarios — answering the project's core question: "Can the Agent's output semantics be correct and make correct judgments in real scenarios?"
Core Deliverables
| File | Type | Description |
|---|---|---|
tests/llm_verify/src/semantic.rs |
new (~600 LOC) | 11 expectation rules + 3 matching dimensions (keyword / action_type / direction) + 16 unit tests |
tests/llm_verify/src/recording_client.rs |
new | RecordingLlmClient decorator wraps OllamaClient, captures raw LlmResponse without modifying LlmAgent's existing API + 3 unit tests |
tests/llm_verify/src/harness.rs |
extended | new_with_recording() constructor + recording_client field + auto-populates result.raw_response + 3 new unit tests |
tests/llm_verify/src/scenarios.rs |
extended | load_20_semantic_subset() returns 20 fixtures (8 Dispatch + 8 SelfHealing + 4 Forecast) |
tests/llm_verify/src/report.rs |
extended | generate_semantic_report() writes markdown report + failure dumps |
tests/llm_verify/tests/llm_verify_semantic_20.rs |
new | Main test entry, feature-gated by llm_verify_real; graceful skip when Ollama unavailable; asserts pass_count >= 16 (80% threshold) |
tests/llm_verify/scripts/cleanup.ps1 |
new | Default: delete semantic_20_*.md + failures; -IncludeModels: ollama rm qwen2.5:7b-instruct; -DryRun: preview |
docs/adr/0018-llm-semantic-correctness-verification.md |
new ADR | 5 sub-decisions: why 20 rounds / 7b model / keyword match / 80% threshold / RecordingLlmClient |
11 Expectation Rules
| # | Agent | Scenario Kind | Keywords | Direction | Action Types |
|---|---|---|---|---|---|
| 1 | DispatchAgent | LineTrip | line, trip, open, redispatch, rebalance | — | GeneratorSetpoint |
| 2 | DispatchAgent | LoadChange (delta > 0) | load, increase, generation, dispatch | Increase | GeneratorSetpoint |
| 3 | DispatchAgent | LoadChange (delta < 0) | load, decrease, reduce, dispatch | Decrease | GeneratorSetpoint |
| 4 | DispatchAgent | FreqDeviation (delta > 0) | frequency, over, high, reduce | Decrease | GeneratorSetpoint |
| 5 | DispatchAgent | FreqDeviation (delta < 0) | frequency, under, low, increase | Increase | GeneratorSetpoint |
| 6 | DispatchAgent | GenOutage | generator, outage, trip, redispatch, compensate | Increase | GeneratorSetpoint |
| 7 | SelfHealingAgent | LineTrip | line, fault, isolate, switch, restore | Isolate | SwitchToggle |
| 8 | SelfHealingAgent | BusFault | bus, fault, isolate, restore | Isolate | SwitchToggle |
| 9 | SelfHealingAgent | LoadChange | load, transfer, reroute, switch | — | SwitchToggle |
| 10 | ForecastAgent | LoadForecast | load, forecast, predict, mw | Forecast | LogMessage, PublishEvent, Any |
| 11 | ForecastAgent | RenewableForecast | solar, pv, wind, renewable, forecast, predict | Forecast | LogMessage, PublishEvent, Any |
Key Metrics
- 20 scenarios (8 Dispatch + 8 SelfHealing + 4 Forecast)
- 11 expectation rules
- 80% pass threshold (≥16/20 PASS)
- 26 new unit tests (all pass)
- 0 BREAKING changes
- 0 new production dependencies
E2 Real LLM Verification (DEFERRED)
The real 20-round LLM verification could not be executed in the development environment due to network bandwidth bottleneck (~20 KB/s). The 700MB Ollama installer + 4.4GB qwen2.5:7b-instruct model cannot be downloaded in a reasonable time.
The test framework correctly handles graceful skip: preflight probe fails → return Ok(()) (skipped, NOT failed).
$ cargo test --test llm_verify_semantic_20 --features llm_verify_real -- --nocapture --test-threads=1
Skipping v0.50.2 semantic verification: neither qwen2.5:7b-instruct nor qwen2.5:14b is pulled.
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.06s
How to Run E2 Locally
# 1. Install Ollama (https://ollama.com)
winget install Ollama.Ollama
# 2. Pull the model
ollama pull qwen2.5:7b-instruct # ~4.4 GB
# 3. Run the semantic verification
cd f:\eneros
cargo test --test llm_verify_semantic_20 --features llm_verify_real -- --nocapture --test-threads=1
# 4. View the report
# Report path: tests/llm_verify/reports/semantic_20_<timestamp>.md
# 5. Cleanup (optional)
pwsh tests/llm_verify/scripts/cleanup.ps1 # delete reports only
pwsh tests/llm_verify/scripts/cleanup.ps1 -IncludeModels # also delete 7b model
pwsh tests/llm_verify/scripts/cleanup.ps1 -DryRun # preview onlyKnown Limitations
- keyword match only — not LLM-as-judge (avoids new dependency; evaluation loop is non-deterministic)
- IEEE-14 only — fixtures inherited from v0.50.1
- Ollama local only — no OpenAI/Anthropic integration
- 7b model capability lower bound — qwen2.5:7b-instruct is the minimum; 14b is fallback
- E2 deferred — Ollama unreachable in dev environment (network bottleneck)
- permissive fallback — unmatched scenario types use
SemanticExpectation::permissive()(any action passes)
Validation Results
| Check | Result |
|---|---|
cargo fmt --all -- --check |
✅ PASS |
cargo build --workspace |
✅ 0 error (41.28s) |
cargo clippy --workspace --all-targets -- -D warnings |
✅ 0 warning (18.86s) |
cargo test --workspace |
✅ 7395 passed / 0 failed / 78 ignored (200 binaries) |
cargo doc --workspace --no-deps |
✅ 0 new warning (7 pre-existing in eneros-agent/eneros-trust deferred to v0.51.0) |
cargo deny check |
✅ advisories ok, bans ok, licenses ok, sources ok |
Documentation Synced
- ✅
CHANGELOG.md— v0.50.2 section - ✅
README.md/README_en.md— version bump 0.50.1 → 0.50.2 + new section - ✅
ROADMAP.md— v0.50.2 marked completed 2026-07-05 - ✅
docs/developer-guide.md— 8.6 section - ✅
docs/adr/0018-llm-semantic-correctness-verification.md— new ADR - ✅
eneros.toml—[llm_verify]semantic_model/scenarios/threshold - ✅
tests/llm_verify/Cargo.toml— description updated
Architectural Decisions (ADR-0018)
- Why 20 rounds, not 100? Cost/time balance (7b CPU ~5-15s × 20 = 2-5 min vs 100 = 10-25 min)
- Why 7b, not 14b? CPU speed (7b ~5-15s vs 14b ~10-30s) + 4.4 GB vs 9 GB disk
- Why keyword match, not LLM-as-judge? v0.50.2 patch scope + no new dependency + non-deterministic eval loop
- Why 80% threshold? LLM randomness tolerance + 7b capability lower bound + allows 4 fails out of 20
- Why RecordingLlmClient, not modifying LlmAgent? No pollution of existing crate + single LLM call + raw_response identical to what LlmAgent sees
Full Changelog: v0.50.1...v0.50.2
v0.50.1 — LLM Agent 真实场景验证补丁
v0.50.1 — LLM Agent 真实场景验证补丁
v0.50.0 的补丁版本,新增独立的 LLM Agent 真实场景验证测试 crate tests/llm_verify/。该补丁不打扰 v0.50.0 的 MVP 闭环基础设施,而是用独立最小测试基础设施验证 3 个 LlmAgent 包装的 Agent(DispatchAgent / SelfHealingAgent / LoadForecastAgent)在 100 个真实电力场景下的输出与场景一致性。
核心交付
- 新增 crate:
tests/llm_verify/(eneros-llm-verify-testspackage,加入 workspace members) - 100 场景(35 Dispatch + 35 SelfHealing + 30 Forecast,70 标准 + 30 随机扰动 seed=20260705)
- 4 项硬指标(C1 EmergencyOverride leak=0 / C2 JSON parse ≥95% / C3 SafetyGateway bypass=0 / C4 audit=100%)
- Ollama 集成(本地 qwen2.5:14b,opt-in feature
llm_verify_real默认 OFF 不打扰 CI) - Markdown 报告生成(
tests/llm_verify/reports/,gitignored) - ADR-0017 决策记录
关键数字
- 100 场景(35+35+30 分布,70 标准 + 30 随机扰动)
- 29 单元测试通过
- 100 fixture JSON 文件(IEEE-14 公开数据,确定性可复现 seed=20260705)
- 0 BREAKING 变更(仅新增 crate,不修改既有 API)
- 26 处 API 校正(spec 原文与实际签名偏差,全部按实际签名实现)
运行方式
# 1. 启动本地 Ollama
ollama serve &
ollama pull qwen2.5:14b
# 2. 运行 100 场景验证
cargo test --test llm_verify --features llm_verify_real
# 3. 查看报告
ls tests/llm_verify/reports/已知限制
- 仅本地 Ollama 验证(未接入 OpenAI/Anthropic)
- 仅 IEEE-14 测试系统(未覆盖 IEEE-30/118)
- 仅安全合规硬指标(质量评分推迟 v0.53.0+)
- 单次运行(默认不进入 CI,opt-in feature)
- InMemoryAuditSink 不维护 HMAC 链(通过 verify_audit_chain() 镜像间接验证)
- Token 用量未精确捕获(推迟到后续迭代)
- 真实 LLM 100 场景验证(D8.7)留待用户本地执行
验证
cargo fmt --all -- --check通过cargo build --workspace --all-targets0 errorcargo clippy --workspace --all-targets -- -D warnings0 warning(53.50s)cargo test --workspace0 failurecargo doc --workspace --no-deps0 v0.50.1 引入 warningcargo deny check0 error
详见 CHANGELOG.md §[0.50.1] 和 ADR-0017。
v0.50.0: 电力 MVP 纵向闭环 — enerosctl demo + RT 类型层硬保证
见 CHANGELOG.md