Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 12 additions & 8 deletions docs/WORKBENCH_CURRENT_HANDOFF.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
# Native Qt IEC 61850 Workbench — current cross-thread handoff

> **Updated:** 2026-10-16 (WIB), snapshot only; always refresh GitHub refs and PR state before editing.
> **Updated:** 2026-10-17 (WIB), snapshot only; always refresh GitHub refs and PR state before editing.
> **Primary strategy and ownership contract:** [WORKBENCH_ARSAS_GUI_SSOT_STRATEGY.md](WORKBENCH_ARSAS_GUI_SSOT_STRATEGY.md).
> **Scope:** installed native ARStack Workbench in apps/ied_simulator. Not a web app, WPF clone, or the separate ESP32-P4/SMV Studio track.

## M2P Reporting/RCB exact InformationReport authority — 2026-10-17 (WIB)

- **Integrated code:** [PR #203](https://github.com/masarray/arstack61850/pull/203) MERGED into `main` at `a33271e90fea369abad551e7601b446752e10d54`, exact PR head `723ad3f46728b864c91e553820e410ab4171ad9a`. **13/13 exact-head workflows SUCCESS**, including C++ GCC/Clang/Windows MSVC, native IED Simulator Qt **55/55 steps**, Security and Evidence ASan/UBSan/libFuzzer, BRCB/RCB, MMS R1–R2, SCL-assisted Workbench and Connect, interoperability server, and naming guard; 0 unresolved review threads. This is CI/scripted production-path evidence, **not** a physical IED certification. Post-merge `main` workflow runs must be checked separately.
- **Reference parity without extra engine:** native `MmsReportSubscriptionRuntime` owns confirmed MMS Read/Write and unconfirmed InformationReport route; `MmsReportFrameMapper`, `MmsReportFrameBindingValidator` and bounded `MmsOfflineReportMonitor` guard and project exact observations. Reuses `MmsStaticReportSessionRuntime` ownership; GUI `MmsReportController`/`BrowserReportPane.qml` use same snapshots, not new receiver, decoder, thread or poller.
- **Identity authority:** check wire `RptID` before mapping values to any member names. Then verify DataSet reference and ConfRev when included, strict ascending inclusion indexes, each directory member, and each optional wire DataRef against canonical/user and typed MMS identities. Reject foreign, stale, contradictory or reordered reports without poisoning accepted-stream counters or labeling values.
- **RCB lifecycle:** static DataSet pinned through live probe, reservation and enable with no silent takeover; authored Dynamic DataSet retains explicit write and readback semantics. Probe excludes write-only GI, which is sent explicitly only when configured/supported after guarded RptEna verification; record not-supported/failed/sent distinctly from receiving an actual report.
- **Browser GUI:** use exact selected RCB reference in each projected InformationReport, not RptID-only matching (indexed RCBs can share an RptID). Show accepted, rejected and decode-failed counts, selected lifecycle events, and bounded detailed member evidence including q/t fields.
- **Scripted regression:** foreign `RptID`, live static DataSet rebind refusal with zero unsafe writes, valid report after foreign rejection, wrong/conflicting DataSet and ConfRev, member order/duplicate, swapped/foreign/empty DataRef, optional-field omissions, and exact typed MMS DataRef acceptance. Native Qt Report/RCB GUI QA and Browser convergence guard must pass on the same commit.
- **Physical acceptance remains open:** installed Windows package; real vendor relay `RptID/DatSet/ConfRev/OptFlds/TrgOps/Owner` readback; GI write and actual report reception; multiple RCBs with shared RptID; BRCB EntryID/BufOvfl/replay/segmentation; safe disable/cleanup and reconnect; actual PCAP + vendor/model/firmware. See [PR #203](https://github.com/masarray/arstack61850/pull/203) physical acceptance comment.

## M2N native Browser GOOSE Subscribe + ARSAS/ARIEC parity — 2026-10-16 (WIB)

- **Integrated `main` at this checkpoint:** `71580659f28c49207db94efd7f7d302d5fd12901`, [PR #200](https://github.com/masarray/arstack61850/pull/200) MERGED after exact-head `4df620874bdab9c0bf280d31a342c12dfa6ab38a` **3/3 relevant workflows SUCCESS**: 55/55 native IED Simulator Qt job steps, SCL-Assisted Workbench CI and Product Naming Guard. Three P1 review findings fixed/answered/resolved. Exact post-merge main jobs (IED Simulator Qt, SCL-assisted, Release Hardening) were still running; verify separately.
- **Reference-backed root cause:** `BrowserGoosePane.qml` previously presented only canonical configured SCL/control-block data, while `GooseWorkspace` already received real Ethernet GOOSE via `GooseMonitorController`, bounded AF_PACKET/Npcap, native `GooseFrameCodec`, sequence/TAL supervision and PCAP export. Cross-checked ARSAS `docs/GOOSE_SUBSCRIBER.md`, `GooseSubscriberRuntime.cs`, `GooseSubscriberLiteView.xaml` and ARIEC `GooseFrameParser.cs`. This ports missing capability into the existing native owner; **not** a duplicate parser, second NIC socket, .NET app, timer, poller or cache.
- **User-visible capability:** Browser → GOOSE has explicit interface picker, Refresh NICs and GOOSE Subscribe/Stop for the *shared passive* monitor; never silently auto-select first NIC. The selected configured stream displays actual matching wire stNum/sqNum, packet/timeout state and decoded ordered `allData`. After capture stops, retained values are clearly historical, not live. The full Sniffer remains available.
- **Identity and safe engineering naming:** exact case-preserved `goCBRef` and available DataSet, APPID (SCL hexadecimal), destination MAC, goID and VLAN/PCP; typed live MMS `LD/LN.GO.gcb`/ `LD/LN.DataSet` → canonical `$GO# Native Qt IEC 61850 Workbench — current cross-thread handoff

> **Updated:** 2026-10-16 (WIB), snapshot only; always refresh GitHub refs and PR state before editing.
> **Primary strategy and ownership contract:** [WORKBENCH_ARSAS_GUI_SSOT_STRATEGY.md](WORKBENCH_ARSAS_GUI_SSOT_STRATEGY.md).
> **Scope:** installed native ARStack Workbench in apps/ied_simulator. Not a web app, WPF clone, or the separate ESP32-P4/SMV Studio track.

/`$DataSet` wire conversion only (no global dot replacement). No APPID-only guesses; malformed/ambiguous/wrong-publisher evidence rejected. A model member is labeled with an observed value **only when the configured ConfRev AND DataSet member count agree**. Otherwise raw allData remains visible, explicitly unbound, with mismatch warning, no invented FCDA mapping.
- **Identity and safe engineering naming:** exact case-preserved `goCBRef` and available DataSet, APPID (SCL hexadecimal), destination MAC, goID and VLAN/PCP; typed live MMS `LD/LN.GO.gcb`/ `LD/LN.DataSet` → canonical `$GO$`/`$DataSet` wire conversion only (no global dot replacement). No APPID-only guesses; malformed/ambiguous/wrong-publisher evidence rejected. A model member is labeled with an observed value **only when the configured ConfRev AND DataSet member count agree**. Otherwise raw allData remains visible, explicitly unbound, with mismatch warning, no invented FCDA mapping.
- **Bounded performance:** one `GooseMonitorController` for the application, 256 streams/256 members/256 events/4096 retained packets/64 packets per poll; NIC enumeration cached behind its own `interfacesChanged`, refreshed only on command and never per incoming frame. Multiple IED tabs reuse the one monitor with strict stream binding, not multiple receivers.
- **Regression:** `ied_goose_workspace_qa` replays generated native GOOSE publisher PCAP; checks exact matching, allData order, canonical MMS references, wrong APPID/DataSet/MAC/goID/VLAN, malformed identity, case sensitivity, competing publishers with same ref/APPID, plus existing TTL/sequence/PCAP capacity. Qt QML smoke and rendered Browser routing passed on exact PR SHA. This is test evidence, **not** field IED capture or manufacturer interoperability certification.
- **Outstanding product gates:** test on physical publisher/relay and selected Windows Npcap NIC (including VLAN/offload/network path and physical frame receipt), validate ConfRev/FCDA values with real SCD, time-to-first-observation, Windows installed Workbench package, and independent reporting/RCB controls. No guessed GOOSE subscription acknowledgements or device state changes. Separate ESP32-P4/PTP/SMV Studio track remains independent.
Expand Down
Loading