Fail closed on deferred OpenDSS geometry - #484
Conversation
Conversion MatrixMatrix generation failed before writing the report. See the workflow logs. |
|
I traced the workspace compile failure after The current failures are in facade code that still assumes Suggested invariant for each consumer: let Some(linecode) = line.linecode.as_deref() else {
// record/return the existing unresolved-impedance error for this semantic path
// and do not lower/serialize/analyze this line
continue; // or return the appropriate readiness/lowering error
};Then use I also searched the tree for remaining direct Happy to keep validating the propagation against #480's fail-closed contract; the important point is preserving |
Why
OpenDSS lines whose impedance comes from
LineGeometry,LineSpacing,WireData,CNData, orTSDatacurrently fall through to theLineclassfactory impedance. That can turn a real geometry into plausible but wrong
electrical parameters and can turn a one-conductor SWER line into three
conductors without a parse diagnostic (#479).
This implementation is intentionally stacked on Burhan Abdullah's regression
and safety-contract PR #480. The temporary base branch is an exact mirror of
#480's head so this PR contains only the follow-up implementation commit. Merge
#480 first; this PR can then be retargeted to
mainwithout copying thecontributor's work.
What changed
DistLine.linecode: None.phases,linecode,geometry,spacing, and conductor/cable-listassignments in source order so terminal maps retain the stated conductor
shape.
calculated.
diagnostic instead of inventing a linecode or electrical values.
Validation
cargo test -p powerio-distcargo check -p powerio-dist --all-featurescargo clippy -p powerio-dist --all-targets -- -D warningscargo fmt --all --checkgit diff --checkThe regression coverage includes four-conductor geometry, single-conductor
SWER, spacing plus conductor lists, parse severity, exact DSS echo, and every
semantic distribution writer.
Depends on #480. Addresses #479 without implementing the separate Carson/line
constants work tracked in #84.