release: promote physical-proven P0.7 finishing stack to main - #345
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f8306eca77
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| var liveDirectory = discovery.DataSetDirectories.SingleOrDefault(result => | ||
| result.IsSuccess && SameStaticReference(result.DataSetReference, dataSetReference)); |
There was a problem hiding this comment.
Verify SCL DataSet order against the live IED
In the SCL-assisted workflow, ConnectUsingSclAsync fills discovery.DataSetDirectories using BuildModelDataSetDirectories(_liveModel, "TrustedScl"), so liveDirectory here comes from the same SCL model as modelDirectory. The new comparison therefore always self-validates instead of checking the connected IED; if the loaded SCL has stale membership or ordering, the RCB is armed and report values are positionally assigned to the wrong signals. Preserve a real GetDataSetDirectoriesAsync verification or equivalent independently acquired live evidence before arming.
AGENTS.md reference: AGENTS.md:L145-L149
Useful? React with 👍 / 👎.
| if (TryNormalizeBoolean(normalizedValue, out var boolean) || | ||
| (IsBooleanDataType(dataType) && | ||
| TryNormalizeBooleanCode(normalizedValue, out boolean))) | ||
| { | ||
| return boolean ? "True [1]" : "False [0]"; |
There was a problem hiding this comment.
Normalize bracketed booleans before detecting report edges
For hybrid monitoring, polling starts immediately and formats a Boolean as True/False, while the first report now formats the same state as True [1]/False [0]. HasExactSemanticEdge normalizes the former as bool:1 but the latter as state:1, so an unchanged first report increments the sequence and can emit a false SOE event. Make the edge normalizer treat these representations as equivalent, or use the same Boolean representation for both polling and reporting.
AGENTS.md reference: AGENTS.md:L153-L153
Useful? React with 👍 / 👎.
| targetDoType.SetAttributeValue("cdc", "INS"); | ||
| stVal.SetAttributeValue("bType", "INT32"); | ||
| stVal.Attribute("type")?.Remove(); |
There was a problem hiding this comment.
Gate the counter rewrite on authoritative type evidence
Any live model containing the literal MPLS_GGIO1.CBClsCounter path is rewritten to INS/INT32, regardless of the model's actual CDC and attribute type; the added regression fixture even supplies InferredCdc = "SPS" and still expects this rewrite. On another device or firmware where that object is legitimately Boolean/SPS, saving SCL corrupts its engineering schema and subsequently removes its non-integer instance value. Apply this correction only when authoritative device/type evidence proves the integer semantics rather than using the object name alone.
AGENTS.md reference: AGENTS.md:L153-L153
Useful? React with 👍 / 👎.
Purpose
Promote the exact physically accepted P0.7 finishing stack to
mainwithout changing its tested tree.Immutable candidate
f8306eca77c08a797a60db1219431c18ff84d2b40d0b9204d6637e3d62e2eee94000386ae43cd0e9648124097621046f5f127ceb1cf853fea54db7301059913341610601132063Current
mainis an ancestor of the good finishing base; there is no divergent main-side source change to reconcile.Candidate validation already green
Merge policy
Use a normal merge commit, never squash/rebase. The merge is acceptable only if:
f8306eca77c08a797a60db1219431c18ff84d2b4;648124097621046f5f127ceb1cf853fea54db730;Rollback anchor before this promotion:
backup/main-pre-p0.7-release-20260920->a69469a61893f8a3d49012de583f592e3e1e1105.Release candidate anchor:
release-candidate/p0.7-finishing-r7-f8306ec->f8306eca77c08a797a60db1219431c18ff84d2b4.