Repository navigation
Conversation
…g and dual-link safety
…before resuming data
… require fresh standby failover proof
Canonical IEC-101 P0 reliability execution plan (2026-11-11)The owner has approved a detailed shared transaction engine + serial resilience + interoperability implementation strategy. Tracking and proposed architecture are now committed for review in documentation PR #144, with the milestone issue #143, implementation plan and 43-case verification matrix. Coordination for this existing draft PR #136: preserve its tested FC-specific response validation, DFC remote-busy gate, baud-aware deadlines, safe command ownership and A/B proof. First reconcile it with latest Release boundary: public This is coordination/documentation only, not a claim that the listed runtime fixes are done. |
M1 IEC101-R01–R04: migrate single and dual A/B to one admitted exchange, canonical secondary correlation, FCB completion rule, no automatic mutating replay and immutable TX per exchange. M2 IEC101-R05: persistent RX framer per COM epoch for single and dual. Add negative, busy, NACK, stale epoch and dual-parity fixtures. Refs #143; preserves draft #136.
Reconciliation handoff — 2026-11-11This draft #136 is superseded by integrated draft PR #145. Verified Git ancestry: comparing #136 head Closing this obsolete draft PR only reduces duplicate/unsafe merge risk from the old base. No code is deleted, and no P0 reliability completeness / production FAT is asserted. Follow-up work and independent physical 1200-bps SOE, late FC11, GI/SBO and serial unplug proof remain with #145. The SICAM A8000 startup connectivity symptom itself is user-confirmed resolved by configuring FC0. Issue #143 has been closed by the repo owner; do not confuse that closure with full vendor interoperability proof. |
2026-11-10 P0 SICAM no-RX / FC11 correlation checkpoint — e5b6634
The owner captured two different field behaviors with SICAM A8000:
New code:
ITransportExchangeObserveris an optional boundary between IEC101 protocol exchange and serial diagnostics only: captures FC, accepted vs rejected exchange, decoded candidate count.SerialByteTransportnow collects actual driver RX byte totals and a bounded first-two/power-of-two no-frame/uncorrelated exchange trail, including CTS/DSR/DCD and TX bytes queued.IEC60870-SERIAL-NO-FRAME-EVIDENCEdifferentiates actual zero driver RX bytes vs data received but no complete FT1.2 candidate.IEC60870-SERIAL-RX-NOT-CORRELATEDcaptures frames seen but unaccepted. No RTS/DTR auto-toggle, station reset, blind retry, or speculative profile switching.IEC101-RX-OUT-OF-CONTEXT-FC11identifies the exact observed mismatch: FC11 after FC3/FC10/FC11 must not prove GI/Class service or advance FCB, but this alone is not evidence the SICAM RTU violates IEC.IEC101-NO-COMPLETE-RX-FRAMESsummarizes zero complete RX candidates during a TX-only run and includes actionable safe field checks.Reconciliation / RC independence:
v3.6.8-rc.2master checkpoint4128f04e. Diff only changes IEC101 engine, tests and field FAT documentation; behindmaster= 0 at this checkpoint, no overlap with Frame Trace, installer/release notes.ARIEC60870-Passive-Monitor-P0-GUI-win-x64is downloadable as a test artifact, not a newly published public RC.Latest reconciled checkpoint — 2026-11-10 · 2665226
Current scope: P0 IEC-101 standards-first serial reliability; unbalanced single-link + dual-link independent RTU busy handling, safe command ownership and conservative failover.
New single-link changes in this checkpoint:
IEC101-COMMAND-STALE-LINKrather than sent after recovery. Class 2/FC9 diagnostics continue; no blind operator control retry.Reconciliation: Merge commit
266522621has parents8ffc9c33(P0 fixes atop old branch) and4128f04e(currentmasterwith the public v3.6.8-rc.2, release validation documents and Frame Trace fixes). Compared withmaster: behind=0, 16 P0 IEC-101 engine/test/FAT files differ, no collisions with release/GUI work. No changes made tomaster, RC tag or published assets.Exact-head verification: Windows CI #42770212161 SUCCESS: Release build, formatting, protocol smoke, all xUnit regression suites, Windows x64 GUI/test toolkit artifacts and 1400-frame real-WPF acceptance. Dependency review SUCCESS; repository hygiene SUCCESS; CodeQL SUCCESS (exact HEAD).
Evidence confidence: Owner reports simulator operation OK, but no documented physical SICAM 1200-bps/RTS/CTS, plug/unplug COM, or real dual-link/command FAT. Keep PR Draft, do not merge into released branch on simulator/CI proof alone. Compare against IEC_Test on an isolated, authorized physical test link; no production RTU resets or unapproved control commands.
Field regression
Owner reports Serial write timeout in History and cases where GI is TX but no RTU RX, while IEC_Test can communicate on the same RTU. A successful local COM open / TX call does not prove an electrical send or valid IEC101 secondary response.
Audited root causes and corrections
StartupDelayMs; dual-link probed before the second COM had settled. Both now wait the configured startup interval before first FT1.2 TX, cancellably.10or68start byte, separate fixed/variable budgets; no-byte silence remains bounded.max(2000ms, ResponseTimeoutMs)even for up to 262-byte FT1.2 at 1200 baud, where full 8E2 wire time is up to ~2620ms. The driver write limit now uses a bounded baud-aware budget independent of remote response time (3620ms at 1200 8E2). This is not a blind retry and does not bypass hardware flow control.IEC101-RX-UNEXPECTED-E5-STATUSduring FC9; contextual E5 after other requests preserved. Existing checksum, PRM, LA and FCB safety remain.Verification
master:225d777a9fe0396718192d3ab880b88fb7c679d6, no open competing PRs at audit.38ac3851passed full Windows CI after fixing two old fake-COM fixture assumptions. Previous head415f28bbpassed complete Windows CI, xUnit, smoke, CodeQL, dependency and hygiene. The065b6f47intermediate CI exposed 9 pre-existing fake-RTU Table 10 violations (its build/format/smoke passed); current HEADe0f74ab3passed all Windows CI stages and all xUnit, including GUI packaging and WPF acceptance; CodeQL pending at this update.Hardware discrimination steps
Compare IEC_Test and ARIEC profiles (COM exclusive ownership; baud, 8E1/8E2, stop/parity, flow/RTS/DTR, 1/2-byte LA, CA/COT/IOA, unbalanced role). Reproduce with one isolated link and collect
IEC60870-SERIAL-OPEN-PROFILE,IEC60870-TRANSPORT-WRITE-TIMEOUTand allIEC101-RX-*rows plus full TX/RX HEX. Distinguish driver TX completion, verified PRM=0 FC11 link status and actual GI data/ACTCON/ACTTERM. No RTS/CTS or cable changes on a production SCADA link without approval.IEC-101 Table 10 context-aware validation — commit
065b6f47Simulator/dual-link test architecture correction — commit
e0f74ab3P0 follow-up: standards-based remote DFC busy recovery (2026-11-10)
Exact reviewed HEAD:
b6cda620db6bf23a6c01a1ccb68afa23444079e3Protocol architecture / safety
IEC101-RX-STATUS-BUSY), not remote silence, positive link readiness or FCB progress. This follows IEC 60870-5-101 unbalanced flow-control procedures; it is independent of host COM RTS/CTS.Iec101UnbalancedBusyGatecentralizes validated DFC state and a bounded status-only FC9 recheck interval (BusyBackoffMs, clamp 100..30000 ms). E5 has no DFC and cannot clear the gate. On a valid addressed DFC=0 reply, Class 1/2 polling and queued commands may resume.Deterministic regression evidence
Iec101RemoteBusyRecoveryTestsfake serial fixtures for single busy→status→ready, queued command gating, active A/busy versus healthy standby B, and unaddressed reset E5 single/dual.ARIEC60870-Passive-Monitor-P0-GUI-win-x64in CI run Artifacts. It is not a republished public RC.Remaining non-negotiable gate: Isolated SICAM A8000/known-good IEC_Test A/B FAT including DFC=1 timing, 1200bps timing, RTS/CTS and repeated COM reopen/USB disruption, using real TX/RX traces. CI does not demonstrate physical IEC-101 interoperability. Keep PR Draft, do not merge or change the public RC until field validation/release reconciliation.
P0 follow-up: safe dual-link command ownership and fresh standby validation — 2026-11-10
Exact HEAD:
a278070a15e830658989fcd33542d558b7f09dd5IEC101-DUAL-COMMAND-STALE-OWNERif queued without verified ownership, after owner A↔B changes, or after 30s. No automatic replay of a stale physical control onto the new active path. Read and GI remain non-mutating but still require validated active readiness.masteradvanced independently with Frame Trace/GUI work; there are no overlapping files in the current diff. Do not overwrite those changes in the RC.