Repository navigation
P0 follow-up: retire unresolved MMS control sessions without blocking reconnect - #615
Conversation
… or leaking authority
…mmand was not sent
…te legacy ownership regressions
…late command stages by attempt and association
|
Reconciliation finding (2026-10-26): KEEP OPEN — command-safety unique-delta investigation. This PR HEAD |
Reconciliation D1 — confirmed outstanding WPF command-ownership hazard (2026-10-26)Disposition: D/E — KEEP OPEN. This is NOT proven equivalent to integrated RC, frozen MMS Write #726, or Boolean-safety #716. Reproducible source-path evidence (same byte-identical runtime file in RC
The historical missing Safety & required follow-up: Keep #615 OPEN; coordinate with active MMS Control/Write owner before source edit. Add focused regression proving that late native session completion cannot mutate the WPF signal after stop/reconnect; review every caller (UI facade, headless runtime, command dock), validate immutable command-only copy at the single owner boundary, and keep new verified MMS control semantics on the local command copy only until an association-fenced UI publication. Preserve exact command target, SBO/Operate order, fail-closed control admission, and frozen #726 Write/SSOT behavior. Targeted regression + required canonical CI before merge. Do NOT blind-cherry-pick the old PR, authorize physical operation, or close as integrated. |
D4 P0 Control/Write owner handoff — proof and execution gate (2026-10-26)Status / safety: KEEP #615 OPEN. I re-read exact protected RC Source-proven ownership defect in current RC (no physical incident asserted):
Specific owner remediation gate, in active Command/Write lane only:
Current associated work: #753 GOOSE/SGCB read-only draft canonical Windows application/native/packaging CI success, yet #615 is still open. This comment is an owner handoff and verifiable acceptance contract, not a fix, merge or CI claim for Control. |
D10 P0 remediation is now REAL SOURCE/TEST, staged for coordinated integration — KEEP #615 OPENPrevious exact RC Implementation: restored historic #615 command-only Regression: CI: exact-head Windows and SCL R7 were running when first inspected; Reference Guard and P1 Advisory already succeeded. No blanket reruns. Keep #615 OPEN until compile, meaningful async regression, owner code review, and RC integration/retest accepted. Owner gate: frozen field-accepted Write #726 / Boolean editor #716, SG7 #688, IP form #732 and protected #727/#729 branch not modified. New draft is explicitly for owner reconciliation, not competing wholesale branch merge. Review exact five-file diff and native command outcomes before deciding RC integration. No accepted v1.6.42/stable/tag/engine repin changed. |
D10 final-head correction to draft #754 (does NOT close #615)Draft #754 latest HEAD is
|
D12 P0: previously hidden read-only native inspection GUI alias now corrected on isolated #755 onlyDuring D12 source review of fully green original #755 New candidate draft #755, HEAD Test: deterministic wrong-association/foreign-root reject, verified direct control, StatusOnly downgrade, and native/caller source contract. Initial SCL 40321106212 built and ran 2,996 tests (2,995 pass); one brittle expectation used raw StatusOnly source text vs intentional D12 handoff checkpoint: full source/CI/status. #753 GOOSE |
D12 P0 read-only inspection ownership — exact-head fully QUALIFIED by managed/native CI, not physical FATLatest OPEN DRAFT #755 source HEAD Proven exact-head CI: Windows Build+regression+native CTest+packaged managed bridge+portable EXE smoke+seal #40321671036 COMPLETED SUCCESS; SCL R7 canonical + engine + portable #40321671103 COMPLETED SUCCESS; IEC guard SUCCESS. Portable EXE artifact #12649647222 is a candidate, not the stable v1.6.42 release. Complete D12 source/test checkpoint. Code contract: background native inspection now receives detached SignalDefinition only. Facade on captured caller GUI context publishes typed capabilities only with current nonreusable association GUID, exact control-root identity, and no in-flight command. Ready direct/SBO model may receive semantic proof only from typed live descriptor; StatusOnly/Unknown fails closed and clears prior verified live CDC. Old/cancelled IED native continuations cannot mutate the new GUI signal. No native Operate protocol change, extra MMS call, or new observation cache. This correction is additional to original D11 union; current #755 is 12-path follow-up, not byte-identical 6+5 overlay anymore. Release/owner stop: #753/#754 historical candidate branches remain unchanged, RC #727/#729 |
D13 real P0 correction — post-Write stale inspection dual-epoch publication gate; #755 draft, not mergedSource: draft #755, exact HEAD Previously unchecked GUI ownership leak: even with D12's detached native Inspection, Implemented on isolated #755 with precisely two follow-up commits
Full immutable D13 audit and handoff. Owner gates remain: #615 native Command Direct/SBO and post-Write inspect behavioral owner acceptance, #606 GOOSE/SGCB seven cases on real relay, #727/#729 integrated RC, R7/R10 physical FAT. No physical Operate/readback success inferred from CI. Frozen #726 Write/readback, #716 Boolean, #688 SG7, #732 IP, SMV, engine pin and accepted v1.6.42 untouched. Do not merge draft #755 automatically. |
D13 FINAL: post-Write dual-epoch Command GUI fence — current SHA full CI SUCCESS (NOT physical FAT)Exact #755 HEAD Windows 40325732039 COMPLETED SUCCESS: Windows .NET8 solution, pinned engine identity/SCL regression, all ARSAS app tests (D13 dual-epoch invalid/positive tests), pinned ArdIrec native CTest, packaged bridge managed integration, portable EXE publish/smoke/seal. SCL R7 40325732197 SUCCESS, IEC guard 40325732127 and advisory 40325732341 SUCCESS. Exact-HEAD portable candidate artifact #12652020557, named Root cause closed in candidate source: stale post-Write D13 historical semantic audit #599 collapsed-by-default and #583 revised Nav+SMV order remain KEEP OPEN, no blind closure. Complete source/test/CI checkpoint. Still release-blocked pending owner & real IED tests: #615 Direct/SBO post-Write/Stop/reconnect acceptance; #606 seven-case GOOSE/SGCB GUI/IED; #727/#729 RC integration owner, R7/R10 FAT. Do NOT merge #755 just because CI passed. #726 accepted Write, #716 Boolean, SG7 #688, IP form #732, SMV, engine pin, RC/main/stable remain unmodified. |
D15 incremental P0 safety fix — routine Command Dock Refresh now honors MMS GUID + live model epochFound distinct gap after D13 #755 exact head Real narrow candidate: stacked draft #756, SHA Implementation pins MMS association GUID + D15 full checkpoint. Keep both #755/#756 draft until Control owner #615/RC owner #727 review and physical IED R7/R10 acceptance; GOOSE/SGCB #606 7-case field checks separate. No automatic merge. |
|
D28 legacy candidate archived, not merged. Per the operator's explicit instruction, the latest accepted ARSAS working evidence is the baseline; no new hardware/packet capture cycle is required for cleaning up outdated PRs. Historical candidate |
P0 Command continuation (stacked on #614)
Addresses a verified consumer lifecycle hazard:
StopDeviceAsynccould awaitNativeIec61850Client.DisposeAsyncindefinitely while an unresolved native control held the MMS I/O gate. The process-widedeviceId|controlReferencemap also allowed a late release from an old association to interfere with a new connection.Changes
Iec61850ControlSessionLeasewith sticky quarantine, retirement, and an actual-native-release drain task.Important limitations / safety
Validation
Pending fresh GitHub CI on this PR and physical acceptance. Preserve ARIEC pin
036e2c00d83a0815b6160147b14ea05975057965and ArdIrec pin7dbc7149db668126a493ce338264363a6ec5ec00. No merge to main.Additional fail-closed evidence and engine follow-up
CompletionState=WireStateUnknown(or explicit timeout state) also quarantines the association before release; no subsequent Operate is admitted.Command outcome UNKNOWNfromCommand not sentfor both native-unknown and outer-deadline timeout paths.BestEffortCancelAsync(CancellationToken.None)was identified by source audit; it is not yet proven to be the field incident's root cause. No engine repin.Command snapshot / diagnostic hardening
SignalDefinitionsnapshot; a late ARIEC task cannot write its mutable control fields into the WPF-owned model after old-session retirement.CancelledandAssociationLostcontrol outcomes are conservatively quarantined alongsideWireStateUnknownandTimedOut.attemptId+associationId, admission UTC, native task creation (NOT evidence of an actual wire send), timeout, terminal result and late-native observation.No physical wire-send or invoke ID is claimed without ARIEC evidence.
Verified CI evidence (HEAD
b22f0f8e92e76f7d602b7955321c165cf626499e)