Skip to content

Diagnose stale WPF layout via exact build provenance, 8-DIP geometry, and verified Inno installer - #47

Draft
masarray wants to merge 125 commits into
mainfrom
fix/phasor-ssot-responsive-lightweight-20261019
Draft

masarray wants to merge 125 commits into
mainfrom
fix/phasor-ssot-responsive-lightweight-20261019

Conversation

@masarray

@masarray masarray commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Latest addition: real per-channel SV freshness

  • Full stream STALE: the waveform control binds SelectedStream.IsActive and mutes all voltage/current traces and legends, retaining the last valid oscilloscope evidence (same visual semantics as phasors). Prominent STALE · last valid samples lane header.
  • Partial 4I+4V quality fault: only the channel whose verified instMag/q word indicates invalid/old/untrusted data is withheld. Its previous coherent waveform/phasor/RMS is shown as HELD at 38% opacity; if no prior valid samples exist it becomes MISSING. Five healthy phases remain normal. The stream becomes amber LIVE · WARN, not green.
  • A channel is not switched to LIVE on the first good ASDU: it needs a full new coherent window. Zero-amplitude valid data remains LIVE; never infer stale from a flat waveform.
  • All consumers share ChannelFreshness in the selected-stream analyzer SSOT: waveform, phasor, measurement rows, immutable runtime snapshot and power readout. Three-phase power returns N/A if any required channel is HELD/MISSING; held data is not claimed as a current measurement.
  • Same raw decoding and aligned smpCnt window, no additional background timer, packet worker, or channel packet cache. Presentation uses per-trace opacity and existing frozen pens.
  • Respect SCL channel-to-element mapping for quality bits when channel ordering differs, and fail conservatively for unverified layouts. Unsupported arbitrary layouts do not get guessed channel freshness.
  • Fix an initial quality-window off-by-one regression discovered by CI: exact 2/4/8-cycle PCAP replay remains valid. Test covers one bad Ic, five healthy peers, recovery, missing-quality semantics and valid zero.

Previously implemented in this PR

  • Phasor exact-tip callouts for co-linear U/I, stable label collision avoidance, snapshot-driven U/I scaling, and source-relative electrical angles.
  • Npcap trusted native DLL selection; no fabricated fallback Ethernet NIC.
  • Safe Windows Inno Setup installer with in-place repair and local PDF manuals regenerated from Markdown with SHA256 provenance.
  • Public release remains manually gated on main and documented physical target-NIC/long-running injector field acceptance. No auto-merge or automatic stable release.

Validation

Current head automated Windows CI, Runtime Architecture, Runtime Stability, candidate package and CodeQL are the gate. Physical single-channel quality inject test on the target PC and the full 60-minute bench are still pending.

WPF visible-spacing correction — follow-up to physical screenshots (2026-10-20)

The first styling pass was insufficient: it standardized padding, but retained a visibly oversized 16-DIP gap between the 280-DIP explorer, central canvas and 320-DIP inspector, versus only 8 DIP below the capture header and 12 DIP between Phasors / Measurements.

Actual Grid geometry fixed in this follow-up:

  • Outer shell horizontal gutters: 280,8,*,8,320, rather than 280,16,*,16,320.
  • Analyzer interior canvas/inspector and phasor/measurement split: 8 DIP.
  • Diagnostics hero/metric vertical and nine adjacent metric-card horizontal gaps: 8 DIP.
  • GOOSE timeline/inspector: 8 DIP.
  • Timing/PTP hero / evidence / events and three header cards: 8 DIP.
  • SCL hero/body and catalog/inspector: 8 DIP.
  • All primary panel sibling gaps now use compact 8 DIP, with independent 12-DIP inside-panel padding.
  • Fixed explorer Grid.RowSpan=2 bug that caused the sidebar bottom to overlap the footer gap and fail to align with the main canvas bottom. It now occupies exactly Grid.Row=0, like the central canvas, above the shared 8-DIP footer gutter.
  • The updated parsed-XAML CI contract checks root shell geometry, major tab grids, actual left panel row alignment, and legacy metric gaps. No data acquisition/decoder/phasor math changed.

Validation: Windows CI, runtime architecture/stability, CodeQL, dependency review, and Inno installer for current commit are the automated gates. Live Windows screenshots at 100%/125%/150% DPI remain a separate visual acceptance gate.

Physical screenshot verification and build provenance (2026-10-20)

Four same-resolution (1586x893) operator screenshots show a 16 px explorer/main gap (left edge x9 to right edge x288; next panel begins x305), and the SCL hero/body and analyzer right-stack still resemble the old 12 px split. The left explorer also extends ~8 px below the center panel. These are incompatible with the PR's parsed XAML 8-DIP shell and removed RowSpan, so do not claim that those screenshots prove Candidate 251 was installed or launch-path-correct. TabControl template uses zero padding and only a SelectedContent presenter, so a hidden 8-DIP template inset is not supported by source review.

Installer/runtime diagnostic added:

  • Remove misleading static About labels Version 1.0.0 / Build 2026.04.
  • Include BuildInfo.json with exact Git SHA, version, GitHub run ID, and SHA256 of packaged EXE in both the Inno and portable payloads.
  • About shows the assembly version, short commit/CI number, and the actual executable path (Environment.ProcessPath); hover for the full SHA/path.
  • Both ZIP validator and Inno install/repair smoke verify provenance manifest and actual EXE hash, making accidental stale/mismatched installation detectable.

Field acceptance still pending: Install the verified new candidate, open top-right Info → About, record the Build commit and actual executable path. Compare against candidate artifact and capture fresh screenshots of workspace gaps. If correct commit shows old 16px gutters at 100% Windows scale, investigate WPF visual-tree geometry/DPI live rather than making speculative spacing edits.

@masarray masarray changed the title Fix phasor SSOT, compact-label collisions and redundant WPF redraws Fix phasor SSOT and ship repairable Inno Setup Windows installer Oct 19, 2026
@masarray masarray changed the title Fix exact-tip phasor callouts, SSOT, Npcap and safe Inno installer Fix SV per-channel stale/missing visualization, phasor SSOT and Inno installer Oct 20, 2026
@masarray masarray changed the title Fix SV per-channel stale/missing visualization, phasor SSOT and Inno installer Improve consistent five-tab WPF spacing, SV channel freshness, phasor SSOT and Inno installer Oct 20, 2026
@masarray masarray changed the title Improve consistent five-tab WPF spacing, SV channel freshness, phasor SSOT and Inno installer Fix actual WPF panel geometry (8-DIP gutters and footer alignment), SV freshness and Inno installer Oct 20, 2026
@masarray masarray changed the title Fix actual WPF panel geometry (8-DIP gutters and footer alignment), SV freshness and Inno installer Diagnose stale WPF layout via exact build provenance, 8-DIP geometry, and verified Inno installer Oct 20, 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