G
YouTube TikTok Games
Skip to content

P0 IEC-101: reconcile #136 and integrate shared per-link transaction/FCB core - #145

Draft
masarray wants to merge 43 commits into
masterfrom
feat/iec101-shared-transaction-core-20261111
Draft

masarray wants to merge 43 commits into
masterfrom
feat/iec101-shared-transaction-core-20261111

Conversation

@masarray

@masarray masarray commented Nov 10, 2026 •

Copy link
Copy Markdown
Owner

2026-11-11 — CURRENT cross-thread reconciliation checkpoint

Branch state: feat/iec101-shared-transaction-core-20261111@78b09bafcba9e201322a835a4ea6fb204d0b74c7, two-parent merge of prior engine 1a2eb88c plus latest master@0cedf8891bf28954b862b7912e0db29f68aebc68. Behind master: 0; ahead 43; path overlap with #164: 0.


2026-11-11 — SICAM A8000 FC0 startup field finding carried into P0 branch

  • User physical finding: previously failing IEC-101 SICAM A8000 startup connection works after enabling Reset remote link on connect; this SICAM-specific startup subcase is resolved. No raw/signed 60/500/2000-SOE or physical USB-unplug proof was supplied.
  • Shipped master change: PR #163 merged at 39973eb551b17f0ce4587673a5123a88390c7e86. Active IEC-101 single/A-B fresh default FC0=true, explicit/saved OFF preserved; IEC-103/104 and IEC101 passive are unchanged. FC0 resets link-layer FCB state, not RTU process/user application.
  • P0 reconciliation: two-parent merge 1a2eb88cb753da202e85faa72cf5ca0997a53614 carries IEC-101: default FC0 Reset Remote Link on active Connect after SICAM field finding #163 into this draft without overwriting the P0 transaction/serial recovery; 3 overlapping files were merged semantically and 2 unmodified-by-engine files inherited verbatim. master...PR145 is 0 behind at reconciliation.
  • Exact merged-head CI: #42999624991 SUCCESS — 980/980 xUnit, 19/19 smoke, Windows Release build; CodeQL #42999624800 is a separate security check. Dependency review and repository hygiene SUCCESS.
  • Scope: keep this PR Draft and keep issue P0 IEC-101 transaction reliability: shared engine, serial recovery, multi-vendor proof (M0–M5) #143 open for L11/T04, staged GI/SBO, COM physical unplug/FAT, independent 1200-bps SOE burst, multi-vendor. No new RC/installer and no full M0–M5 closure.

2026-11-11 — RECONCILIATION AFTER FRAME DETAILS UX #161


2026-11-11 — CURRENT L14/P05 physical COM reopen implementation

  • Exact Draft head: c4e3bf84d98dd133b017642532f72b306a87f14e, reconciled with master@859ca50d724b60d8015bd99bd47136c08d358ee0 in two-parent commit 7a54f173; 0 behind master at reconciliation. Preserves Desktop: ArSee versioned window title • IEC 101/104/103 #157 versioned ArSee title, smart CI and both concurrent passive-monitor test stabilizations.
  • Single-link physical epoch recovery: efe93b80 catches actual driver/port errors (not normal response timeout/DFC), invalidates pending FCB transaction, clears stale controls, closes/reopens same configured COM with bounded exponential backoff and cancellation, then requires addressed FC9 secondary verification before normal polling. Configured startup GI/clock-sync are one-shot per operator session; no blind application replay or automatic remote reset.
  • Dual A/B physical fault isolation: 3f6d705d tags faulting physical owner, continues healthy link, clears stale active controls/owner generation only, per-link reopen/backoff, re-verification and existing fresh-proof standby promotion; standby never acquires active poll/GI rights merely by opening COM.
  • Driver read exceptions: 39365cdc distinguishes unexpected COM BytesToRead/Read invalidation from a regular protocol timeout, including cases where OS driver still reports the handle open.
  • Deterministic fixture coverage: 76d6c8a3, c47efffb, eab9e1a4 and c4e3bf84: initial port missing, active A unplug during Class2, missing standby, both COM missing, cancellation, RX I/O failure while IsOpen=true, false recovery of a non-transport engine invariant, and no re-transmission of startup GI after a physical reconnect.
  • Software evidence: prior exact head #42972537633 SUCCESS (965/965 xUnit, 19/19 protocol smoke, Windows build). Current exact head: CI #42973710153 SUCCESS — 968/968 xUnit, 19/19 smoke; CodeQL #42973710062, dependency and hygiene SUCCESS. Exact-SHA full Windows integration #42974280001 SUCCESS: Windows GUI and IEC101 2/4 RX field test artifacts, real WPF 1,400-frame viewport/screenshots. Installer upgrade not run; physical FAT still pending.
  • Limitations remain: physical USB/COM driver close/write cancellation FAT, FCB/FCV resynchronization after physical disconnect, intrinsically ambiguous same-service FC11 (L11/T04), staged GI/SBO (S04/S05/T08), independent 1200-bps SOE FIFO verification and matched SICAM/IEC_Test hardware. No stable release, no full L14/P05 hardware sign-off. Source-of-truth memo: IEC101_P05_SERIAL_REOPEN_SOFTWARE_EVIDENCE_20261111.md.

2026-11-11 — Screenshot-driven Frame Interpreter merged + IEC101 P0 integration checkpoint

  • Latest branch: 4c3c66def5275d1719077ea857ae3b5ed78b671f, a two-parent reconciliation merge of prior engine 5e5d08bf with current master 8617f048. 0 overlapping source paths, 0 commits behind master at integration, engine changes preserved. Public master only contains the merged UI correction; P0 engine remains a Draft PR until software/field gates are distinguished.
  • UX/TRACE PR #153 merged into master 8617f048: darker amber ACD (not a fault), spaced IOA3: 128 · IOA2: 0 · IOA1: 107, consistent child-detail ↳ line, 17.5 DIP WPF line rhythm/4 DIP paragraph gaps; original hex, frame ownership, quality, timestamps and full-work UI unchanged.
  • PR #153 full-WPF run #42954272463 SUCCESS. Viewed real Windows artifacts; 10,000 synthetic frames, no WPF collection reset, and compact 1024×576 viewport screenshot inspected; requested wide viewport dimensions were constrained by CI desktop to ~1044 DIP, not a physical high-DPI claim.
  • This combined exact-head Windows regression #42954998647 SUCCESS: 952/952 xUnit and 19/19 protocol smoke. Combined exact-head full-WPF/package #42955419036 SUCCESS (952/952 xUnit, 19/19 smoke, Windows portable GUI + IEC101 RX field tools, actual WPF acceptance and screenshots). GUI artifact 13826633964, WPF evidence artifact 13826847292. Visually inspected combined screenshot: IOA labels with spaces, per-IOA ↳ details, amber ACD; synthetic 10,000-frame acceptance, rolling resets 0, selection p95 29.77 ms. CI wide requested dimensions constrained to ~1044 DIP; not hardware/DPI qualification.
  • Screenshot CA evidence: configured Link 105 / CA 105, observed process CA 1, positive TI100 ACTCON/ACTTERM at CA105 and negative GI ACTCON at CA1. GI105 coverage must remain unverified for CA1 objects; no silent command retarget or made-up protocol completion. Recorded in issue P0 IEC-101 transaction reliability: shared engine, serial recovery, multi-vendor proof (M0–M5) #143.
  • No artificially isolated lab mode or new GI/control gate; use configured full Master workflow. Serial recovery, complete GI/SBO lifecycle, independent-peer and real 1200 bps SOE FAT remain outstanding engineering/evidence milestones.

2026-11-11 — Full-workflow IEC-101 P0, no artificial lab mode

Previously validated engine-only head: 5e5d08bf8ee6e47e428d2ffc451319dae6325772 (master 37baba35, reconciled). User authority: the application must remain immediately usable as a real IEC101 active Master; the user manages field isolation. Do not introduce lab-only modes, disabled GI/command features, mandatory workflow wizard or blanket UI blocking. Retain actual IEC101 link verification/FCB/DFC safety, correct configuration and explicit operator intents.

  • 973950d3 — Correct unrequested GI on learned CA: only a session with startup, manual or profile-approved GI actually requested may do one follow-up GI at observed CA. Full Class1/2/event reception remains active even when startup GI is off. Restrict CA observation to decoded valid process objects. Stop mutating BaseSettings.CommonAddress or silently rerouting physical controls from observed process traffic. Synthetic single + A/B GI-disabled negative tests and positive configured-GI/command-target test.
  • 32c97017 — Reset CA learning and one-shot retry hints on physical A/B promotion; post-switch GI on B uses B's configured CA rather than old A's observed CA. New failover source-ownership regression test.
  • 69412bbe — Red owner-swap regression found a real missing PhysicalSource on dual-link TX evidence; Iec101DualLinkChannel.SendRawAsync now tags every fixed/variable TX with its physical A/B source and test rejects unattributed TX.
  • 5e5d08bf — GI authorization is now per promoted active owner, not the global GI counter. A's earlier GI must not trigger a hidden observed-CA GI on B when the configured post-switch policy is Disabled or ManualOnly; B Class2/events stay operational. Additional negative A/B failover regression.
  • Documentation: Full-workflow CA authority. No GUI mode or serial control-line behavior altered.
  • Evidence: latest exact-head CI #42949221339 SUCCESS — 951/951 xUnit, 19/19 protocol smoke, Windows Release, WPF 1,400-frame acceptance, GUI/RX test artifacts; dependency #42949221341 and hygiene #42949221333 SUCCESS; CodeQL #42949221407 SUCCESS. Non-blocking repository-wide dotnet format debt is still present and not clean.
  • Remaining code work, not UI gates: COM unplug/automatic recovery, intrinsically ambiguous late FC11, staged source-qualified GI/SBO, physical 1200-bps SOE and independent peer. No public release tag changed.

2026-11-11 · S02 / L10-L14 / P02-P09 reliability execution — CURRENT HEAD

  • Exact head: 70724e189e1b1ac353f2fba90d7a4463e0418a27 on existing Draft PR P0 IEC-101: reconcile #136 and integrate shared per-link transaction/FCB core #145. Master 37baba35 already reconciled; no public release.
  • IEC101-R05/R07 L10/L14 (9026b162): expire FT1.2 incomplete prefix on timeout and cancellation; preserve fragment frame/byte counters and block ambiguous late E5 until a verified addressed frame; cancelled Close always releases COM ownership. Focused timeout/cancel tests, including legitimate E5 after re-synchronization; previous exact-head software CI SUCCESS.
  • IEC101-R08 S02 (72ef098c): fixed true Class 2 starvation under perpetual ACD in single-link and active A/B; use configured MaxConsecutiveClass1BeforeClass2, never Class 2 on standby/new owner or under DFC busy. Permanent-ACD synthetic peer tests; previous exact-head Windows CI SUCCESS, 941/941 xUnit and 19/19 protocol smoke.
  • IEC101-R14 P02 (f3ff5585): 60, 500, 2,000 spontaneous Type1/COT3 synthetic SOE source-to-engine accounting fixtures. These are intentionally instantaneous, not physical 1200 bps. Validate original ASDU/frame counts, in-memory retained event facts, and zero silent memory drop when capacity sufficient.
  • IEC101-R14/P09 (7ae6acc7): replace unbounded single-link evidence List and dual-link O(n) RemoveAt(0) with consistent O(1) bounded Queue. EvidenceEventsDroppedFromMemory counts evictions, and EvidenceReceived callback still delivers every live event. Negative small-window test checks explicit eviction and 60 live callbacks.
  • IEC101-R08 S08 (70724e18): keep periodic standby FC9-only status supervision alive during continuous active ACD, with unchanged active owner guard. Added a paced synthetic A/B fixture proving standby gets a second health probe before the Class 2 fairness poll.
  • Verification: prior-head Windows CI SUCCESS, 945/945 xUnit, 19/19 smoke, CodeQL and hygiene; current-head CI and CodeQL CI SUCCESS: 946/946 xUnit, 19/19 protocol smoke, Windows Release/WPF and packaged artifacts; CodeQL #42934641677 SUCCESS, dependency review SUCCESS, hygiene SUCCESS at this note. The previous f3ff intermediate run was superseded; only final-head validation authorizes closure.
  • Still open: L11/T04 intrinsically ambiguous same-service late FC11, physical L14/P05 COM unplug/reopen, S04/S05/T08 staged GI/command, P02/P03 RTU FIFO reconciliation, independent peer and matched-physical-port SICAM A8000 1200-bps long soak. NUC101 full conformance and active balanced IEC101 NOT claimed.
  • Source of record: issue #143 M0 audited/reconciled; M1-M5 remain only partial/field pending. Software evidence memo.

2026-11-11 · reconciled NUC101 runtime PROFILE-01 / RED-01 milestone (CURRENT HEAD)

  • HEAD: 816046555904a13c9563f7543e697e106d78928b, parent efce3a1 and second parent master 37baba3; Git compare 22 ahead / 0 behind master. Full merged tree preserves all 24 prior IEC101/monitor files and all 102 distinct master UI/rebrand/website files (zero overlapping changed paths).
  • Actual runtime defect fixed: dual-link WPF session factory previously hardcoded post-switch GI Required irrespective of selected versioned Historical NUC101 / project policy. Selected profile is now validated and bound to Iec101DualLinkRedundancyOptions, using one pre-existing GI scheduler. Generic default retains previous on-failover GI; Historical NUC101 default does not force GI; Disabled, Manual, OnFailover, ProjectRequired project policy values map to actual dual-link behavior.
  • Tests added: Iec101DualLinkRedundancyOptionsTests covers generic/NUC/project GI policy, wrong widths/protocol/unsupported balanced mode; commit 81604655 additionally rejects unrepresentable Link A/B station addresses before TX and verifies valid 2-byte link addresses remain intact. Read implementation and limitations.
  • Evidence: exact-head CI SUCCESS, 937/937 xUnit, 19/19 protocol smoke, Windows Release, WPF and artifact; CodeQL SUCCESS, dependency SUCCESS, hygiene SUCCESS. Repo-wide formatting diagnostic remains non-blocking.
  • NOT DONE: L11/T04 late same-service reply ambiguity; L14/P05 COM cancellation/reconnect; S04/S05/T08 full source-qualified GI/SBO; 60/500/2000 SOE 1200-bps stress; NUC101 balanced state machine; full NUC unbalanced reset/line takeover FAT; matched SICAM/IEC_Test real-port FAT. No auto remote reset, RTU control retry, serial RTS/DTR change or public release. PR remains Draft.

Closes no release gate yet. References #143; implementation lineage and reconciliation from draft #136 (preserved, not overwritten).

M0 — reconciled baseline

M1 — shared engine, actual runtime integration

  • One Iec101PerLinkTransactionEngine per physical link; original transmitted frame, source, connection epoch, exchange ID, pending primary FC, in-flight exclusion, canonical Iec101SecondaryResponseValidator, typed verdict and exclusive FCB transition owner.
  • Both Iec101MasterSession and Iec101DualLinkChannel use the same Begin → TransmitAttempt → Await → Validate → Complete sequence.
  • FC1 NACK / DFC / FC11 out-of-context / invalid E5 cannot advance FCB. Ambiguous FC3 commands receive UnknownDelivery and are not automatically retried. FC7 reset success must be confirmed.
  • Parity, ambiguous-delivery, stale-epoch and negative fixtures: Iec101SharedTransactionCoreTests.

M2/M3 — initial reliability hardening

  • Single and A/B FT1.2 reader persists across exchanges; reader re-created on new COM epoch. Stale RTU health/DFC state invalidated.
  • Shared bounded 64-command FIFO; new work explicitly rejected when full, no eviction of earlier commands; pending controls discarded on Stop with diagnostic. A/B manual failover queue capped at 8.
  • Dual mutating controls bound to both active owner generation and physical connection epoch (A→B→A / same-port reconnect cannot resurrect old controls). Iec101QueueAndEpochSafetyTests.
  • Retain PR P0 IEC-101: serial diagnostics, FC11 response correlation and safe dual-link reliability #136 serial byte telemetry, DFC busy gate, safe dual failover and field diagnostics.

Evidence, gates and non-claims

  • Exact-head 55e77c4: Windows CI success, CodeQL success, Dependency review success, Repository hygiene success.
  • Latest eac974d Windows CI, CodeQL, dependency, hygiene; exact-head gates must complete before readiness.
  • Fixture IDs covered in part: L01–L08, T01/T03/T05/T06/T07/T10, S03/S06 and RX/serial portions of L09/L10; do not claim entire matrix passed.
  • Remaining P0: eligible unchanged-frame bounded read retransmission policy (T02), late identical-FC ambiguity (L11/T04), full COM write/read cancellation lifetime and timing (L14/P05), explicit GI coverage and command application stages (S04/S05/T08), independent 1200-bps throughput/SOE stress (P02), actual SICAM/IEC_Test matched-port FAT and multi-vendor field verification.
  • Verdict: Software Candidate / Hardware FAT Pending; draft PR, no public release, no changes to v3.6.8-rc.3.

 authority

Preserve IEC101 serial/DFC/response/dual-link work from draft #136 and all current master GUI, release and canonical P0 docs. Combine FAT introductions without changing published RC. Refs #143.
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.
…och proofs

IEC101-R06/R09/T06/T10/S06: shared bounded no-eviction operator FIFO for single and A/B, explicit capacity rejection and stop discard; bounded manual A/B switch intents; purge old secondary link proof, DFC, and reader state on new physical epochs. Require positive FC7 reset acknowledgment before resetting single-link FCB. Refs #143.
… epoch

IEC101-R09/R10, T07/T10: reject stale queued controls when A→B→A changes the active generation or same COM reconnect changes epoch, even if visible link name matches. Add owner-stamp negative fixture. Refs #143.

Copy link
Copy Markdown
Owner Author

Parallel-work reconciliation notice — 2026-11-11

PR #146 Raw Frames readability is merged into master at 02099cb1ec8200424ae50c30d243d5d2a2f80d34 (UI-only, all 857 xUnit and Windows real-WPF acceptance passed; CodeQL/dependency/hygiene green).
Your P0 IEC101 engine PR #145 remains Draft and unmerged at eac974d7820f0ced197a221233154a388691ec51; the new master is one commit ahead of its base. The UI change touched desktop view models, layout, theme, and desktop tests, not IEC101 Master/serial transaction paths.
Before #145 integration, reconcile the new master exact SHA and verify no accidental UI/test overwrite; keep its separate safety/FAT gates. No automatic rebase, force push or public release change was performed.

Build on draft #145 only: shared per-link transaction policy, exact FC9/10/11 retransmission after true physical RX silence, no mutating FC3 retry, single+A/B integration, partial-frame/no-RX/FC11/FCB/stop/failover fixtures. 925 xUnit + real WPF Windows CI, CodeQL/dependency/hygiene green. No hardware FAT, never treat as production release.

Copy link
Copy Markdown
Owner Author

M1/T02 integration checkpoint — 2026-11-11

Stacked PR #148 squash-merged into THIS DRAFT branch at 306f36ec070cb99869a8f9b873008d6c6e64debf, not public master.

IEC101-R02/R03, T02 milestone: one unchanged-FCB/FCV byte-exact FC9/10/11 read retransmission after verified total physical serial RX silence; shared per-link transaction core used by single-link and A/B dual-link; no variable FC3/GI/control retransmission; no retry on partial bytes, malformed/out-of-context reply or stale link epoch. Only one outstanding exchange; terminal failure once; physical retry trace labeled. Deterministic single/A/B, FC11 recovery, partial FT1.2 and actual failover-after-2-drops fixtures.

Exact-head #148 base-master validation (7826980e): Windows CI success, 925/925 xUnit, real-WPF acceptance/packaging, CodeQL success, dependency/hygiene success. The optional dotnet format substep still reports 1,221 existing formatting issues across 61 files; CI sets it non-blocking. This is debt, not a clean formatting gate claim.

State: parent #145 remains Draft, now 19 commits ahead / 2 behind public master 59ebc36f (UI #147). Refresh and reconcile master before further engine PRs, do NOT force push, overwrite UI or publish release. Hardware SICAM/IEC_Test matched-physical-port FAT remains undone.

Next P0 risks: L11/T04 late old FC11/current FC9 ambiguity; L14/P05 COM cancel/unplug; S04/S05/T08 source-qualified GI/command outcome stages; P02 60/500/2,000 SOE 1200-bps throughput/FIFO. This software checkpoint is not certification or release authorization.

…n journal bytes

Eliminate CI timing race: verify writer-completed bytes and intact baseline before changing one existing payload byte. Preserve strict CRC32 and truncated-capture negative assertions; no production monitor/runtime behavior changed.

Copy link
Copy Markdown
Owner Author

Reliability CI stabilization — exact-head follow-up

CI on #145 head 306f36ec failed solely in PassiveMonitorP0Tests.CorruptOrTruncatedJournalIsNotMistakenForCompleteCapture: the 140-ms fixed-duration fixture sometimes had not written its first payload byte. Mutating at offset 40 then read -1 and created a synthetic zero-filled malformed record instead of corrupting a real payload, so the verifier correctly returned Out-of-range record length rather than the expected CRC32 mismatch. This is a test synchronization defect, not evidence of field IEC-101 decoder failure.

Commit efce3a1772f14a32cb9819c61b7882d340f68228 fixes the fixture in this draft branch only: wait until writer-owned ScadaBytes=200 and RtuBytes=6 (bounded test timeout), cancel/finalize, assert valid original archive, and flip an actual payload byte at offset PassiveJournalFormat.HeaderSize. Still assert CRC32 failure and truncated journal incomplete. No production monitor/serial code changed.

New exact-head CI pending. Draft P0 still cannot be marketed as field certified; physical SICAM A8000 FAT, late-response and SOE count proof remain open.

…y to live A/B runtime

Merge draft shared engine with UI/rebrand master without overlapping file replacements.
PROFILE-01/RED-01: selected historical NUC101 does not force post-switch GI; project overrides are fail-closed; generic preserves previous UI failover behavior. Add positive/negative Master profile fixtures and evidence-limits doc.

No physical FAT, balanced IEC101 or universal NUC compliance claim.

Copy link
Copy Markdown
Owner Author

/ci full

Copy link
Copy Markdown
Owner Author

2026-11-13 — ARIEC60870 cross-thread checkpoint / live GitHub reconciliation

Public master (verified): fe3b760b4f66449ffb020c8dd68c56135370c9b5 — #200 brand PNG/top-header alignment (merged). Preceding merged milestones: #199 6ac65826dd51527eaff15248403469ad3a5f3d20 (bounded one-owner IEC-101 TX/RX forensic evidence); #198 157a8fa1e4e1ae8ee4208e983bf0d7fdc0cd78a2 (OBS-C fresh-window isolation); #197 a08c74f8a7a9eec5f610eb9e39b7bfea4d896052 (context-aware Event follow, original TX/RX trace, restored RX ASDU).

Validation, exact master SHA: Windows CI run #43413562094 SUCCESS — Release build, format, protocol smoke, 989/989 xUnit (Core 93, Master 213, Monitor 129, Reporting 5, Desktop 509, Repository 40), packaged GUI, real-WPF OBS-C 1,400-frame acceptance and screenshot artifacts. CodeQL #43413561907 SUCCESS; repository hygiene #43413561925 SUCCESS. Windows GUI, field-tools, OBS-C and test-results artifacts available from that master CI run. Do not equate simulated/WPF acceptance to physical SICAM RTU FAT.

Published release: stable v3.6.9, tag f7b29ca09a899b2498797e0f2c32ce4ce545a337. Live comparison v3.6.9...master: 4 commits ahead, 0 behind, 19 files changed; #197–#200 are source/CI only, NOT in the published v3.6.9 setup/ZIP. Do not tell a field tester that installing v3.6.9 contains those changes. Do not publish a new stable release without its independent update/installer FAT gate.

This IEC-101 active-master Draft PR #145: branch feat/iec101-shared-transaction-core-20261111@78b09bafcba9e201322a835a4ea6fb204d0b74c7 remains OPEN, DRAFT, UNMERGED. Exact live comparison master...#145: 43 ahead / 44 behind; diverged; 38 changed paths (including master IEC-101 session, FT1.2 reader, secondary validator, dual-link engine, transport). The previous 2026-11-11 checkpoint saying "0 behind master" is historical and no longer true. Before any new work: reconcile with master semantically, preserve shipped Event/Trace/UI fixes and startup FC0 behavior, check overlap, then run current exact-SHA CI. No blanket merge, no forced branch rewrite or silent overwrite.

Remaining proof boundaries: software-successful forensic UI and one-owner RX evidence do NOT certify Master per-link FCB/FCV recovery, USB/COM unplug and reconnect on physical hardware, dual A/B switchover, staged GI/SBO lifecycle, multi-vendor interoperability, nor 1,200-bps 60/500/2,000 SOE FIFO completeness. Issue #143 remains CLOSED by owner; do not reopen just because Draft #145 is pending.

Next milestone recommendation: stage a scoped semantic rebase/merge of Draft #145 onto exact master (no source rollbacks), identify genuinely overlapping transport/decoder paths and add red-test evidence for IEC-101 late same-service reply, physical COM recovery and 1,200-bps SOE burst. Keep full-work active Master UX: no artificial mandatory lab mode, no disabled GI/command workflows, no speculative field-certification claims.

Checkpoint policy: This comment is a traceable snapshot, not a code change, release or approval to merge the Draft.

masarray commented Nov 13, 2026 •

Copy link
Copy Markdown
Owner Author

2026-11-13 — LIVE P0 semantic reconciliation (after #201 and #202 merges)

Current verified source master: 3ee6453a6a391015290b9d131b6a15b7e4edc51a (PR #202). Original prework master: fe3b760b4f66449ffb020c8dd68c56135370c9b5. PR #145 remains OPEN DRAFT UNMERGED, head 78b09bafcba9e201322a835a4ea6fb204d0b74c7, now 43 commits ahead / 46 behind master, common ancestor 0cedf8891bf28954b862b7912e0db29f68aebc68. Draft's source diff has 38 paths, master side has 111, five shared paths after the isolated reader port:

  1. MainWindow.Session.cs — profile-owned GI policy versus post-fix(ArSee): context-aware Event follow and verified TX/RX Original Frame inspection #197–200 UI;
  2. Iec101DualLinkChannel.cs — bounded reader change versus draft transaction ownership;
  3. Iec101MasterSession.cs — persistent frame owner versus draft transaction/COM epoch redesign;
  4. Ft12StreamReader.cs — select port of draft already integrated, DO NOT port twice;
  5. PassiveMonitorP0Tests.cs — preserve current capture/acceptance isolation and apply fixture fixes only after reconciling semantics.

Merged milestone #201: PR #201 at squash merge 4ebee7d96e6ef149d5ae4739ecfe938d1b9dedc2. User-supplied SCADA 101/104 I/O table 31 rows is now represented by uniquely bay-qualified names (FEEDER/KOPEL/TRAFO CB status, LR and commands, Busbar voltage, 4 previously absent RTU alarms) in both public profile copies; legacy generic IOA-only Resolve() fallback now fails closed for mismatched CA/TI. Exact PR head 1026/1026 xUnit pass, Windows CI, CodeQL, dependency and repository hygiene success; verified previous master push CI + CodeQL success. Saved customer/user-owned profiles are not silently overwritten.

Merged milestone #202: PR #202 at squash merge 3ee6453a6a391015290b9d131b6a15b7e4edc51a. Selectively integrated baud-aware Ft12StreamReader partial/completion budget from draft into current master, passed configured IEC-101 baud in single and A/B channels; retained one single-link reader per physical COM connection epoch so malformed/expired FT1.2 framing ambiguity persists across FC9/Class requests. Test fixtures include actual Master first FC9 truncated reply followed by second FC9 unaddressed E5, plus paced 1200-bps framing, silence, cancellation, stale E5; exact PR SHA 0992d1667623ca26274b724174a97bd904b78c30 passed 1032/1032 xUnit, protocol smoke, Windows Release build, CodeQL, dependency and hygiene. POST-MERGE MASTER VERIFIED: exact master@3ee6453a6a391015290b9d131b6a15b7e4edc51a passed Windows CI master #43424994992, CodeQL #43424994975, Repository hygiene #43424995082. Master Windows verified 1032/1032 xUnit, release build, protocol smoke, integrated GUI packaging and OBS-C real-WPF viewport/1400-frame acceptance, with uploaded screenshot/metric artifact. No installer or physical FAT claimed.

Semantic integration disposition: Do not reintroduce the outdated draft reader implementation or wholesale replace any current master source file. #145's Iec101PerLinkTransactionEngine and FCB/FCV + secondary-response correctness, COM driver reopen, single/A/B owner generation, Class1/2 fairness and bounded FIFO remain unmerged and unevaluated as an integrated candidate. #199's EventFrameExchangeTracker is a forensic TX/RX evidence tracker, not a protocol transaction owner. Preserve it separately, and ensure no new competing link authority. See merged docs/IEC101_P0_RECONCILIATION_20261113.md for detailed matrix.

Remaining critical software gate: source/epoch-correct late identical FC11, E5 permitted service context, FCB advance only on the right acknowledged request, safe read-only retry versus unknown command delivery, DFC/ACD and Class1/2 fairness, GI staged ACTCON/ACTTERM, SBO/DO verified feedback, A/B physical unplug/reopen cancellation and stale command elimination. Keep #145 draft until semantically reconciled, valid exact-head CI and field evidence. Do not equate RX bytes/frames or GUI event rows with RTU source-side event completeness.

FIELD FAT PENDING: physical SICAM A8000 1200-bps SOE 60 / 500 / 2000 source-event versus raw / decoded / valid / duplicate / missing accounting, IEC_Test same-adapter matched comparison, dual A/B failover, COM unplug/replug, command lifecycle/multi-vendor. Prior operator report that active FC0 enabled startup is not evidence of these other FAT cases.

Release: stable v3.6.9 untouched; no installer/updater FAT or new stable publication.

masarray added a commit that referenced this pull request Nov 13, 2026
)

* feat(iec101): port bounded 1200-bps frame completion and partial RX accounting from draft #145

* fix(iec101): apply configured baud to single-link FT1.2 receive budget

* fix(iec101): apply configured baud to A/B link FT1.2 receive budget

* test(iec101): deterministic 1200-bps frame completion, timeout and stale E5 suppression

* docs(iec101): record live 43/44 draft reconciliation and hard reliability gates

* fix(iec101): retain canonical single-link RX reader for entire COM epoch

* test(iec101): aborted status prefix cannot make stale E5 verify single-link RTU

* docs(iec101): record persistent RX epoch owner and cross-poll E5 regression

masarray commented Nov 13, 2026 •

Copy link
Copy Markdown
Owner Author

2026-11-13 — v3.6.10 PUBLIC STABLE & post-release master reconciliation (supersedes prior release status)

PUBLICATION VERIFIED: ArSee / ARIEC60870 v3.6.10 exists, draft=false, prerelease=false. Public release/tag both point to immutable source commit ce7e16ee23ff6510e9747bc86c2d70e5b306f072. The Package run #43436696449 succeeded and uploaded 4 nonempty public assets: signed-by-GitHub-release-digest checksums (SHA256SUMS.txt), SPDX SBOM, ARIEC60870-v3.6.10-setup-win-x64.exe and portable ZIP. Setup currently unsigned Authenticode; SHA-256 and build provenance are not a publisher signature.

Exact-source gate: master CI #43435781986 succeeded on ce7e16ee including six xUnit suites (1,032 pass), protocol smoke, Windows Release, real WPF OBS-C, Inno Setup and the Native Windows independent updater FAT job whose Verify independent update worker from genuine installed previous release step was successful. CodeQL #43435781817 and repository hygiene #43435781781 also succeeded. These software/installer FAT tests are not hardware protocol field FAT.

Included software milestones: #197/#198/#199/#200 forensic Event Journal and Original Frame features, #201 bay-specific 31-point IEC-101/104 example mapping and fail-closed CA/TI lookup, #202 bounded 1200-bps FT1.2 receive, per-COM-epoch persistent reader and stale-E5 suppression. Draft #145 remains OPEN / UNMERGED: shared transaction/FCB authority, dual-link recovery and more aggressive retransmission semantics not included, not certified.

Landing/download synchronization: post-publication PR #204 was merged after green docs-only CI/hygiene. Current master is 39c88366fce4e6e22c178a2b1230ade18a480a5b, two documentation-only commits after the release tag (#204 and #205); comparison confirms 18 unique README, site/docs and metadata paths changed and zero changes to src/, tests/, installer, version or engine since the immutable release commit. GitHub Pages #43437911461 succeeded and the website has version-pinned v3.6.10 direct links plus dynamic complete-release discovery. PR #205 additionally fixed the README five-minute quick-start's three remaining outdated v3.6.8 asset URLs; exact-head static CI and hygiene succeeded.

Known limits / FIELD FAT PENDING: SICAM A8000 physical 1200-bps event batches 60/500/2,000 with source-device versus physical RX/decode/filter/drop reconciliation; serial USB COM unplug/replug, GI ACTCON/ACTTERM, SBO/DO feedback, dual-link A/B failover and multi-vendor acceptance. Never equate runtime event counters or a green simulation with physical SCADA conformance.

Next engine milestone: Reconcile #145 semantically against current release source and #199 forensic-only TX/RX tracker. Preserve the published GUI, sample profile, updater and site; no blind merge. Stop double transaction ownership, test out-of-context FC11/E5/DFC/FCB and unknown-delivery mutating commands before any further stable release.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants