Skip to content

P0-P2 #144: evidence-driven RCB interoperability and canonical static convergence - #145

Draft
masarray wants to merge 40 commits into
mainfrom
fix/144-smart-interop-p0
Draft

masarray wants to merge 40 commits into
mainfrom
fix/144-smart-interop-p0

Conversation

@masarray

@masarray masarray commented Oct 7, 2026 •

Copy link
Copy Markdown
Owner

Implements the first coordinated slices of #144 on top of current physical baseline main e5deed1d8aa11d97991695c6e390baafea7ab797.

Authority / teamwork boundary

This branch is intentionally additive to the current physical baseline and coordinated with parallel work:

No vendor-name branching is introduced.

Implemented

P0 — type-safe RCB mutation

  • central MmsReportControlSemanticWrite boundary;
  • RptEna, Resv, GI -> MMS BOOLEAN;
  • ResvTms -> MMS INTEGER with signed INT16 representation;
  • static-SCL, persistent monitor, live-session and cleanup paths migrated away from raw scalar choices;
  • wire regression locks ResvTms=60 to MMS integer tag [5] / 0x85, never unsigned [6] / 0x86.

P1 — bounded live type evidence

  • exact GetVariableAccessAttributes preflight on the mutation surface;
  • exact live type contradictions block before mutation;
  • unavailable type evidence remains missing evidence, not a false negative;
  • exact type evidence is cached only for the current MMS association and reset on re-association;
  • no blind alternate-type retry.

P2 — structured interoperability evidence

  • structured DataAccessError classification and recovery hints;
  • type recovery is driven by structured failure kind, not message parsing;
  • missing evidence is separated from positive blocker evidence.

P-1 canonical convergence foundation

  • source-neutral StartConfiguredStaticReportMonitorAsync; legacy SCL entry point delegates to it;
  • fresh static hybrid plans route through the same configured-static lifecycle:
    receiver registration -> direct RptEna -> bounded BRCB ResvTms fallback -> readback -> optional GI;
  • pure CanonicalIedModel static-report coverage resolver shared by Discovery/Open-SCL ingress;
  • full ordered DataSet membership is retained even when only a subset of signals is selected;
  • bounded configured-reference normalization converges SCL $ syntax with live dotted syntax without globally rewriting canonical identity;
  • real Discovery-builder vs SCL-importer regression proves equivalent static DataSet/RCB coverage.

Interoperability-safe reduced static eligibility

  • explicit policy distinguishes exact/explicit free state, caller-owned state, genuinely missing reservation evidence, malformed evidence and positive busy evidence;
  • new AllowConfiguredStaticWithMissingReservationEvidence option is false by default;
  • when explicitly enabled, only configured static RCBs with verified populated DataSet + RptEna=false + no positive busy evidence can use the reduced path;
  • malformed reservation values and foreign Owner remain blockers;
  • dynamic DataSet mutation remains under the existing exact-free requirements.

Preserved behavior

  • dynamic report safety/quarantine is not loosened;
  • no polling fallback is interpreted as signal absence;
  • no positional report projection without ordered DataSet authority;
  • no ARSAS-side IEC semantic workaround is added;
  • existing exact-evidence production defaults remain unchanged unless the new reduced-static option is explicitly enabled.

Current software gate

Exact base-lane head: 302f7882cb3a52c1ec9604026717fc42496041b7.

.NET CI #737: PASS

  • source/provenance/wording/license verification;
  • restore;
  • Release build;
  • complete test suite;
  • package test build;
  • diagnostics/artifact upload.

Earlier checkpoints #718, #721 and #731 passed. A later parallel canonical-ingress edit introduced text corruption in CanonicalLiveModelAdapter.cs; CI #736 caught it at compile time. The malformed generated block was repaired without reverting the intended configured-reference canonicalization, and exact-head CI #737 then passed. P3 readback-proof work continues separately in stacked Draft PR #146 to avoid racing this base lane.

Remaining before production promotion

  1. Keep this PR draft while the next convergence/consumer slices are reviewed.
  2. Repin ARSAS only through a coordinated #446 consumer branch; do not fork active PR #425/#445 work.
  3. Physical regression must prove BRCB reservation/enable/GI/report traffic on the affected IED class.
  4. Discovery and Open-SCL must produce equivalent canonical static acquisition decisions for the same physical IED.
  5. No merge/release/production repin merely from CI green; physical interoperability evidence remains the final authority.

@masarray masarray changed the title P0 #144: type-safe RCB scalar mutation and ResvTms INT16 fix P0-P2 #144: evidence-driven RCB interoperability and canonical static convergence Oct 7, 2026

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.

1 participant