Skip to content

M2.14 BCUGE: expose exact failed SG/DA MMS reads instead of ambiguous Not read - #598

Closed
masarray wants to merge 3 commits into
fix/m214-browser-isolated-schema-fidelity-20261016from
fix/m214-browser-per-attribute-read-failures-20261016
Closed

masarray wants to merge 3 commits into
fix/m214-browser-isolated-schema-fidelity-20261016from
fix/m214-browser-per-attribute-read-failures-20261016

Conversation

@masarray

Copy link
Copy Markdown
Owner

User-observed issue

BCUGE SGCB page reports 55 verified scalar values / 80 attributes · 25 unavailable, but every failed SG leaf is painted Not read. The existing UI only shows the first 3 errors when hovering the subtitle, so the remaining 22 failures cannot be diagnosed from the selected row.

Fix

  • Record only unsuccessful explicit Read attempts, keyed by exact canonical MMS reference + FC. Bounded 4096 error entries / 320 characters per error. No second value cache.
  • Attach error text to the corresponding SG/DA and SGCB control field: Unavailable + MMS Read failed provenance + exact MMS result/reason in row tooltip. Not read continues to mean never attempted/no evidence.
  • Existing canonical real Read/Report values always win. Successful subsequent reads clear any earlier failure for that exact reference + FC.
  • Reject a diagnostic if IED object, MMS association, connection lifecycle or schema projection epoch changes; clear on disconnect and new operator Read.
  • Refresh the selected rows even when a sweep produced zero scalar values; no extra UI refresh timer or polling.
  • Four regression cases: exact SG/FC vs sibling fence; declared alias only; success clearing and wrong-IED/reconnect/schema invalidation; empty/oversized response handling.

Does not label any failed value as good/zero/false or claim repaired physical relay. Stacked on #597. Keep draft and require Windows exact-SHA CI + BCUGE acceptance.

Copy link
Copy Markdown
Owner Author

D6 semantic reconciliation — bounded explicit MMS Read failure provenance preserved, close historical carrier unmerged

Disposition A — superseded, original head 3b87e653cd73a312d6662941135999e1cd0a1982 exact ancestor of protected draft RC 817c3910e8223fa2ac531a4426ada5d2d4bbbe50 (+1272/-0, merge-base historical head). All 3 changed paths compared for unique behavior, not ancestry-only.

Canonical: integrated draft RC #727 / #729 pinned 817c3910e8223fa2ac531a4426ada5d2d4bbbe50.

Unique delta proof: Models/IedBrowserReadFailureEvidence.cs original 4b315bb3e61ffa76bac27e4f156be8ee10d83ec0 → RC 391f5c0c2a4b0673472eb4e9768277dc7548b7e3 still bounds 4096 association-scoped absence-only entries (no second value store), exact canonical object-ref+FC key, owner-identity and association plus model/epoch fence, bounded 320-char reason, case-safe fallback ONLY when caller supplies explicit UI projected fallback and actual failures cleared upon successful read. RC improves concurrency via gate lock and distinguishes Failed, Interrupted, Deferred rather than claiming all no-data is MMS rejection. The original failure API signature remains through overload.

MainWindow.IedBrowser.cs original 6600753185f5761c3fe90fa0e9e91c0fc9a37c46 → RC 21a0551413a5437a562c463f011204868aab7b3e: source still records only actual error/failed safe scalar verdict in DrainReadResults, calls _iedBrowserReadFailureEvidence?.ClearFailure on accepted read, refreshes on failure-only batches, shows Unavailable/MMS Read failed for exact target (including SGCB), expires stale sweep on owner/association; new TryGetBrowserReadFailure also projects InitialHydrationFailures and Not read / Initial read deferred instead of inventing failed wire observation for never-attempted reads. New timer/SSOT safety intentionally changes preexisting display but strengthens, not discards, the original failure contract.

tests/ARSAS.Tests/M214BrowserReadFailureEvidenceTests.cs original e55171d714c956166544408dc96270a27ecca4a5 → RC eab72838b0107a0a54e86521f865b9161e6159e2: all four original test methods and assertion statements remain, including exact SG reference/FC, no sibling bleed, stale reconnect/catalog invalidation, fallback, success-clears-failure, and bounded missing/oversized reason. RC adds exact separation of deferred-budget vs failed and uncertain Interrupted Read, so no fake successful scalar or fabricated quality.

Safety: This is a historical tracking close unmerged; no code/RC/main/engine/stable v1.6.42 changes or Wire/Control action. #753 exact six-file Windows/native/portable & SCL CI now green (Windows, SCL) but no real relay acceptance implied.

Follow-up: Continue preserving one canonical value ledger, explicit read failure/deferred/interrupted semantics, same-association checks. Field BCUGE/F650 failure taxonomy/FAT must be measured independently. Original #598 head/branch remain intact.

@masarray masarray closed this Oct 26, 2026
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