Skip to content

P7.6B follow-up: copy exact bounded semantic parity basis in diagnostics - #482

Closed
masarray wants to merge 2 commits into
feat/446-p7-6b-parity-evidence-integrityfrom
feat/446-p7-6b-semantic-diagnostic-evidence
Closed

masarray wants to merge 2 commits into
feat/446-p7-6b-parity-evidence-integrityfrom
feat/446-p7-6b-semantic-diagnostic-evidence

Conversation

@masarray

@masarray masarray commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

Exact-head validation — 2026-10-08

Commit 0b84e81547ab8a5fded5c1f5f45e652c7dd3508b: 9/9 triggered GitHub Actions workflows SUCCESS, including Merge Execution Guard (1371 passed, 0 failed, 0 skipped) and native Windows Build/Smoke SUCCESS.

  • Portable Windows x64 single-EXE artifact
  • Field-capture Windows x64 artifact
  • Mainline Readiness initially failed 2 unrelated STA WPF UI test timeouts on the parallel runner (8s/25s); a GitHub rerun of only the failed job on the same commit PASSED, with no code/test/timeout changes. Preserve first-attempt failure as evidence.
  • CodeCommitted, CIPassed, ArtifactAvailable. Discovery/Open SCL semantic parity still mismatched; PhysicalVerified/MergeReady/Merged/Released = NO. This artifact is for recapture, not production promotion.

Physical evidence motivating this change

The operator captured successful Open SCD and Discovery IP static monitoring for the same real 7SX85-class local MMS test endpoint with identical ARSAS/ARIEC61850 code:

  • Both: 13/13 report-backed selected process values, BRCB+URCB ingress 2/2, cyclic process polling 0.
  • Source-neutral semantic fingerprints differ even though static-coverage counts agree. Open SCD fingerprint starts c57e...; Discovery starts cb563....
  • The paths were captured in separate processes; each diagnostic showed AWAITING PEER INGRESS. The current copied report retains hash and concrete RCB slots but omits normalized ordered member/FC and selected-point rows that produced that hash.
  • Discovery additionally reports 2 unresolved primary descriptors vs Open SCD 0. This is an investigation lead, not proof of root cause.

Scope (stacked draft over P7.6B #481)

A diagnostic-only addition to Services/DiagnosticReportBuilder.cs: for each captured ingress, Copy Diagnostic now includes the exact source-neutral semantic hash input rows, with explicit COMPARABLE/INCOMPLETE gate, bounded row count/length and untrusted CR/LF escaping. Indexed concrete RCB slots remain separate runtime evidence, never fingerprint inputs. Rows truncated for safety are explicitly marked and must not serve as complete parity proof.

No modifications to engine pin, SCL parsing, MMS session/report traffic, RCB writes, static reporting selection, UI flow, model/runtime state, timestamp or polling.

New tests verify cross-ingress inspectability, safe bounded output, CR/LF escaping and incomplete gate.

Parent #446, dependency #481. Keep draft; CI and physical recapture needed. Do not merge/release automatically. Operator-specific SCD/device IP/diagnostic files were NOT committed.

masarray commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

P7.6B physical pair recaptured — deterministic fingerprint root cause confirmed (2026-10-08)

Operator used the same field-capture binary for Open SCD and Discovery IP (app 03435979bffc659e13d89803c9f5e005040b71e1, engine 352c81e6a798635c6addcee0683235ca87ad416d). Both independently achieved: 13/13 values visible, configured static BRCB+URCB 2/2 actual routed, zero uncovered, zero cyclic MMS process polling. Diagnostic semantic gates both COMPARABLE.

Copied fingerprint input rows prove precisely one parity-hash drift:

  • Open SCD Indications indexes 1..7, Measurments 1..6; hash c57e265e1edf9b0d3d1286f6a151fb985e23ca223edc1a0806dfa2cd6d4db198.
  • Discovery IP Indications indexes 0..6, Measurments 0..5; hash cb563f46ea1a61634ab67c6af4802d353d8d8f9caf8e793b7a89580525ffd206.
  • All ordered member references, FCs, selected runtime identities and counts match exactly. Rebase only Open SCD's member ordinal numbers from 1-based to 0-based, then both semantic input lines and recomputed SHA-256 exactly equal the Discovery hash cb563f.... No other semantic-line differences were found.
  • Indexed live RCB slot difference (Open SCD Rpt_ind01 vs Discovery Rpt_ind02) correctly excluded from semantic fingerprint.

Root cause: StaticAcquisitionParityTracker.BuildEvidence hashes the source LiveIedDataSetMemberModel.Index as though its absolute numbering were source-neutral. SCD projection is 1-based, live discovery 0-based; this is false mismatch in evidence comparison, NOT a wire/reporting failure.

Proposed scoped fix: sort members by their source index as now, keep integrity guards against duplicate/negative indexes; encode canonical positional ordinal via .Select((member, ordinal) => ... ordinal ...) only in semantic fingerprint. Retain the original index in provenance diagnostics if needed, outside hash. Add regression fixture comparing 1-based SCD vs 0-based live model and a negative test proving an actual order/FC/reference drift still yields MISMATCH. Do not modify MMS, RCB, control, GI, polling or the immutable engine pin.

Separate follow-ups (not cause of hash mismatch): Discovery inventory still has 2 primary unresolved vs SCD 0 and control companion projection 0+5 vs 2+3. Investigate independently with fail-closed safeguards; no forced model/signal cosmetics.

Both diagnostics showed AWAITING PEER INGRESS because evidence capture occurred in separate app processes, not because there was no routed traffic. Continue draft/physical gate discipline; do not claim in-app DUAL INGRESS TRAFFIC PROVEN from separately captured sessions. Device-specific diagnostics/SCD are not committed.

Copy link
Copy Markdown
Owner Author

D16 checked historical PR #482 against protected RC 817c3910e8223fa2ac531a4426ada5d2d4bbbe50:

  1. Historical HEAD 0b84e81547ab8a5fded5c1f5f45e652c7dd3508b is ancestor of the RC (GitHub compare: behind=0); its two changed paths are present in RC. This is ancestry integration, not a fresh merge into main.
  2. Original regression tests/ARSAS.Tests/StaticParityDiagnosticBasisP76BTests.cs is byte-for-byte identical at historical HEAD and RC (Git blob SHA comparison); both positive and adverse-path assertions remain intact.
  3. Evolved implementation Services/DiagnosticReportBuilder.cs is not byte-identical; checked that RC still implements the original invariant: bounded AppendStaticSemanticBasis, explicit COMPARABLE/INCOMPLETE parity gate, full-row length truncation marker, and escaped CR/LF to prevent forged diagnostic rows.
  4. Exact RC-head Windows CI and R7 SCL CI completed SUCCESS. These do not claim physical-device acceptance.

Decision: close as integrated/superseded by RC #727/#729; no independent semantic/test delta requiring another merge. Do not cherry-pick this old stacked branch. Keep overall issue #446 and physical release gates independent; ARSAS main, stable v1.6.42, ARIEC engine pin and concurrent-owner branches remain unchanged.

@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