From e0a13e4216d7c9e50661593e056141a6bbcddcfd Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 24 Oct 2026 17:44:16 +0700 Subject: [PATCH 01/10] chore(vendor-neutral): generalize explanatory interoperability comments --- src/mms/services.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mms/services.cpp b/src/mms/services.cpp index adb25ab62..ccc38b355 100644 --- a/src/mms/services.cpp +++ b/src/mms/services.cpp @@ -197,7 +197,7 @@ std::vector encode_type_impl( } auto encoded = BerWriter::encode_signed_integer( -static_cast(*type.size)); - // OMICRON reference IEC 61850 client emits variable maximum lengths in at least a + // independent IEC 61850 test client emits variable maximum lengths in at least a // two-octet signed field. In the golden capture Octet64 is // 89 02 FF C0 (not the mathematically minimal 89 01 C0). if (encoded.size() == 1U) encoded.insert(encoded.begin(), 0xFFU); From aadfce54036ac5288f951c2f5076b077b0fea2d3 Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 24 Oct 2026 17:44:20 +0700 Subject: [PATCH 02/10] chore(vendor-neutral): generalize explanatory interoperability comments --- src/mms/static_direct_control.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mms/static_direct_control.cpp b/src/mms/static_direct_control.cpp index 4c402de4a..35e06469b 100644 --- a/src/mms/static_direct_control.cpp +++ b/src/mms/static_direct_control.cpp @@ -235,7 +235,7 @@ void release_selection(MmsStaticDirectBooleanControlBinding& binding) noexcept { const MmsStaticDirectBooleanOperate& right, const bool compare_check) noexcept { // IEC 61850 enhanced SBO correlation is based on the selected command - // identity. OMICRON reference IEC 61850 client emits a fresh T for Oper (and may do so for + // identity. independent IEC 61850 test client emits a fresh T for Oper (and may do so for // Cancel) rather than replaying the SBOw timestamp, so T is intentionally // not part of selection identity. The accepted Oper itself is still kept // intact for CommandTermination correlation. @@ -261,7 +261,7 @@ void release_selection(MmsStaticDirectBooleanControlBinding& binding) noexcept { const MmsStaticDirectBooleanControlBinding& binding, const MmsStaticDirectBooleanOperate& command) noexcept { // ctlNum is an IEC 61850 wire value supplied by the remote client. Keep - // zero valid on the server path: OMICRON reference IEC 61850 client uses ctlNum=0 in real + // zero valid on the server path: independent IEC 61850 test client uses ctlNum=0 in real // SBOw/Oper traffic. ARStack's client-side auto-allocation policy (1..255) // is separate and remains unchanged. return command.origin_category <= 8U && From db20ba0351b3ab75016f2e640820f93ba8d291fb Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 24 Oct 2026 17:44:38 +0700 Subject: [PATCH 03/10] chore(vendor-neutral): generalize explanatory interoperability comments --- src/mms/static_dispatcher.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mms/static_dispatcher.cpp b/src/mms/static_dispatcher.cpp index aed679e0f..6145c42a5 100644 --- a/src/mms/static_dispatcher.cpp +++ b/src/mms/static_dispatcher.cpp @@ -636,7 +636,7 @@ struct SyntheticChildRank final { if (prefix.find("$BR$") != std::string_view::npos) { return {kBrcbAttributeOrder}; } - // OMICRON reference IEC 61850 client exposes control-service alternatives in this exact + // independent IEC 61850 test client exposes control-service alternatives in this exact // order at LN$CO$DO. Deeper service structures remain positional. if (prefix.find("$CO$") != std::string_view::npos && static_cast(std::count( From fa301ebee2e72dd4562fa8d796a6fd2f047b1fc1 Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 24 Oct 2026 17:44:45 +0700 Subject: [PATCH 04/10] chore(vendor-neutral): generalize explanatory interoperability comments --- src/simulation/ied_simulator_profile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/simulation/ied_simulator_profile.cpp b/src/simulation/ied_simulator_profile.cpp index bf9f5d97f..42c50d735 100644 --- a/src/simulation/ied_simulator_profile.cpp +++ b/src/simulation/ied_simulator_profile.cpp @@ -195,7 +195,7 @@ namespace { // q/t are semantic terminal DataAttribute names, not arbitrary suffixes. // The former ends_with("t") rule misclassified orCat, orIdent, // sboTimeout, operTimeout and Test as Timestamp, corrupting the live MMS - // TypeSpecification seen by OMICRON reference IEC 61850 client. + // TypeSpecification seen by independent IEC 61850 test client. if (entry.is_quality || attribute_leaf_is(entry.da_name, "q") || ascii_equal(entry.basic_type, "Quality")) { return "Quality"; From 207ea6a36bb272df9f5e01f9b0ed3ead14ac9568 Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 24 Oct 2026 17:44:49 +0700 Subject: [PATCH 05/10] chore(vendor-neutral): generalize explanatory interoperability comments --- include/ariec61850/mms/services_span.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/ariec61850/mms/services_span.hpp b/include/ariec61850/mms/services_span.hpp index 1d24238a9..b3b2b5dba 100644 --- a/include/ariec61850/mms/services_span.hpp +++ b/include/ariec61850/mms/services_span.hpp @@ -141,7 +141,7 @@ class MmsServiceSpanCodec final { static constexpr std::size_t maximum_identifiers = 128U; // reference IEC 61850 client performs bounded bulk reads while walking a full IEC 61850 model. - // The proven ARIEC61850 trace for the SIPROTEC reference model contains a + // The proven ARIEC61850 trace for the reference IEC 61850 model contains a // single 78-variable Read request. Keep the portable span profile bounded, // but leave enough headroom for that real discovery pattern. static constexpr std::size_t maximum_variables = 128U; From b6a3ba6d20e5a949132c530dba3e966e430764c3 Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 24 Oct 2026 17:45:14 +0700 Subject: [PATCH 06/10] chore(vendor-neutral): generalize independent client and model test commentary --- include/ariec61850/mms/simulator_manifest_codec.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/ariec61850/mms/simulator_manifest_codec.hpp b/include/ariec61850/mms/simulator_manifest_codec.hpp index e7176542d..7998f8714 100644 --- a/include/ariec61850/mms/simulator_manifest_codec.hpp +++ b/include/ariec61850/mms/simulator_manifest_codec.hpp @@ -69,8 +69,8 @@ class MmsSimulatorManifestCodec final { return result; } if (raw == "ENUM") { - // OMICRON reference IEC 61850 client advertises IEC 61850 Enum leaves as INTEGER(8) - // for the captured SIPROTEC model (Mod/Beh/Health/ctlModel). + // independent IEC 61850 test client advertises IEC 61850 Enum leaves as INTEGER(8) + // for the captured reference IED model (Mod/Beh/Health/ctlModel). result.kind = MmsTypeKind::integer; result.size = 8U; return result; From 6cb7472d89de672e899ae19704a78944fd8c16de Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 24 Oct 2026 17:45:17 +0700 Subject: [PATCH 07/10] chore(vendor-neutral): generalize independent client and model test commentary --- tests/test_mms_static_direct_control.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_mms_static_direct_control.cpp b/tests/test_mms_static_direct_control.cpp index 356a8ce42..b1741979e 100644 --- a/tests/test_mms_static_direct_control.cpp +++ b/tests/test_mms_static_direct_control.cpp @@ -197,7 +197,7 @@ void invalid_shape_and_values_are_rejected() { CHECK(!result.success); CHECK(result.failure_code == 7U); - // ctlNum=0 is valid on the incoming server wire. OMICRON reference IEC 61850 client uses it. + // ctlNum=0 is valid on the incoming server wire. independent IEC 61850 test client uses it. result = mms_static_direct_boolean_write_oper(&binding, make_oper(true, 0U, false)); CHECK(result.success); CHECK(state.last_control_number == 0U); @@ -329,7 +329,7 @@ void reference_iec61850_sbo_enhanced_accepts_ctl_num_zero_and_fresh_oper_timesta binding.policy.allow_synchro_check = true; binding.policy.allow_interlock_check = true; - // Captured OMICRON reference IEC 61850 client behavior: + // Captured independent IEC 61850 test client behavior: // SBOw uses ctlNum=0 and T1; Oper keeps the selected identity but sends T2. const auto selected = mms_static_boolean_write_sbow_contextual( &binding, From 872d5ae7b8e1c7760d8d09a6e83396cf5af0fb82 Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 24 Oct 2026 17:45:24 +0700 Subject: [PATCH 08/10] chore(vendor-neutral): generalize independent client and model test commentary --- tools/static_ied_server_iedsim/test_reporting_golden.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/static_ied_server_iedsim/test_reporting_golden.cpp b/tools/static_ied_server_iedsim/test_reporting_golden.cpp index 67c12cc7f..1a5617011 100644 --- a/tools/static_ied_server_iedsim/test_reporting_golden.cpp +++ b/tools/static_ied_server_iedsim/test_reporting_golden.cpp @@ -300,7 +300,7 @@ int main() { return 14; } - // The accepted OMICRON command capture produced a selective BRCB report + // The accepted independent test-client capture produced a selective BRCB report // after process feedback. Its 36-bit inclusion field selects member 33 and // ReasonForInclusion is data-change. Lock SqNum/EntryID progression too. constexpr std::size_t changed_member = 33U; From f3ed1717db4331df0e45cd9151ab6a3eea5c4d1a Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 24 Oct 2026 17:45:28 +0700 Subject: [PATCH 09/10] chore(vendor-neutral): generalize independent client and model test commentary --- tools/static_ied_server_iedsim/test_runtime_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/static_ied_server_iedsim/test_runtime_model.py b/tools/static_ied_server_iedsim/test_runtime_model.py index 83ba7a17c..b656a3fd3 100644 --- a/tools/static_ied_server_iedsim/test_runtime_model.py +++ b/tools/static_ied_server_iedsim/test_runtime_model.py @@ -26,7 +26,7 @@ def creation_flags() -> int: def manifest(revision: int, value: bool) -> str: """Build a vendor-style model with configured whole-DO DataSet members. - The 36/22 cardinalities mirror the SIPROTEC acceptance case that exposed the + The 36/22 cardinalities mirror the reference IED acceptance case that exposed the regression. Each configured member owns multiple leaves, so flattening the Digital DataSet would exceed the 64-member static DataSet limit while the correct configured membership remains safely at 36. From 2a32bd0fb884b406ce94dc1fb0b261f6af451a2a Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 24 Oct 2026 17:45:32 +0700 Subject: [PATCH 10/10] chore(vendor-neutral): generalize independent client and model test commentary --- tools/static_ied_server_iedsim/test_cswi1_type_golden.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/static_ied_server_iedsim/test_cswi1_type_golden.py b/tools/static_ied_server_iedsim/test_cswi1_type_golden.py index c52710959..7ccc8f066 100644 --- a/tools/static_ied_server_iedsim/test_cswi1_type_golden.py +++ b/tools/static_ied_server_iedsim/test_cswi1_type_golden.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Exact OMICRON reference IEC 61850 client CSWI1 TypeSpecification golden regression.""" +"""Exact independent IEC 61850 test client CSWI1 TypeSpecification golden regression.""" from __future__ import annotations @@ -29,7 +29,7 @@ def manifest() -> str: "ARSTACK_IED_MODEL\t2\t1", f"LN\t{d}\tCSWI1", - # ST — exact leaf order/type shape captured from OMICRON reference IEC 61850 client. + # ST — exact leaf order/type shape captured from independent IEC 61850 test client. f"OBJ\t{d}\tCSWI1$ST$Mod$stVal\tENUM\tEnumeration\t1", f"OBJ\t{d}\tCSWI1$ST$Mod$q\tQUALITY\tQuality\tgood", f"OBJ\t{d}\tCSWI1$ST$Mod$t\tTimestamp\tTimestamp\tunix-ms:1720000000000",