Repository navigation
Final calm engineering polish — periodic SV report grouping, readable SCL and verified candidate FAT gates - #47
Conversation
…e manuals and repair instructions
…both capture consumers
…cture diagnostics
…ll forensic tooltip
…nd fix grouped event clipping
…ostic presentation
… volatile counters
…ic summary grouping
… closed for ambiguous sources
…fferent svID and severity
…sting occurrence semantics
…ertifying physical FAT
…-source SMV monitoring
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 16fe4680ba
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| <controls:WaveformPanelControl Grid.Row="2" | ||
| d:Visibility="Collapsed" | ||
| Snapshot="{Binding Waveform}" | ||
| IsStreamLive="{Binding SelectedStream.IsActive}" |
There was a problem hiding this comment.
Include capture state in live-display bindings
When capture is stopped less than two seconds after the last packet, the timer continues refreshing and ToStreamItem() recalculates SelectedStream.IsActive solely from packet age, overwriting the false assigned by StopAsync. Consequently, both waveform and phasor controls can brighten held samples as live again until the stale timeout expires. Bind IsStreamLive to the existing IsSelectedSvReceiving property, which also checks IsRunning, so a stopped capture immediately and persistently presents its retained snapshot as stale.
AGENTS.md reference: src/AGENTS.md:L45-L49
Useful? React with 👍 / 👎.
| schema = "processbus-build-v1" | ||
| version = $Version | ||
| commit = $sourceCommit | ||
| executableSha256 = (Get-FileHash -LiteralPath (Join-Path $stageDir "$AppName.exe") -Algorithm SHA256).Hash.ToLowerInvariant() |
There was a problem hiding this comment.
Hash the executable from the multi-file staging path
When publish-windows-portable.ps1 is invoked with its -MultiFile switch, the application is copied under stage/app, but this new provenance step unconditionally hashes stage/ProcessBusInsight.exe. That file does not exist in multi-file mode, so Get-FileHash terminates packaging before the ZIP is created. Either resolve the executable from $appStageDir in this mode or explicitly reject/remove the switch.
Useful? React with 👍 / 👎.
Latest addition: real per-channel SV freshness
SelectedStream.IsActiveand mutes all voltage/current traces and legends, retaining the last valid oscilloscope evidence (same visual semantics as phasors). ProminentSTALE · last valid sampleslane header.LIVE · WARN, not green.ChannelFreshnessin 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.Previously implemented in this PR
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:
280,8,*,8,320, rather than280,16,*,16,320.Grid.Row=0, like the central canvas, above the shared 8-DIP footer gutter.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:
Version 1.0.0 / Build 2026.04.BuildInfo.jsonwith exact Git SHA, version, GitHub run ID, and SHA256 of packaged EXE in both the Inno and portable payloads.Environment.ProcessPath); hover for the full SHA/path.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.
Calm engineering polish — baseline checkpoint and scope
Progress locked first at exact commit
03fc3657f2ba21df2bc570d2198c59bb2f2be2dc, oncheckpoint/pre-calm-engineering-polish-20261020, with all six baseline workflows green. All subsequent work remains on this PR.DiagnosticEventSummarizer, groups repetitions as×N, earliest/latest time tooltip; original forensicAnalyzerShellState.Eventsunchanged.ARRIVAL Δ · HOSTvs clock jitter claims; missing smpCnt evidence labeled inferred gaps, not confirmed NIC packet loss.RXwaveform badge separates reception from amberLIVE · WARNintegrity. The former pulsing animation was removed.Final five-tab screenshot follow-up — 2026-10-20
The 13:10 operator screenshots show restored premium/compact 8-DIP spacing, readable analyzer waveforms, clear passive PTP claims, and a meaningful SCL mismatch notice. Visual blocker: Diagnostics still shows dozens of periodic
SV arrival timing excursions >= 300 ussummaries. Root cause: the raw analyzer emits report messages with changing counters/latest-smpCnt values, while the UI initially grouped by full message. This is not proof that prior aggregation worked in the field.Targeted correction at current candidate head:
severity + svID + title, only if svID is explicit, retaining latest raw evidence, earliest/latest report timestamps and reporting×N reports(not misleading×N missing packets).checkpoint/calm-polish-candidate-273-20261020at754ec5d850b1d2b1f7572db8b17f484f103b6681.Stable public release deliberately BLOCKED until
docs/validation/V1.4.1_PUBLIC_RELEASE_ACCEPTANCE.mdphysical target-PC gates are signed on this exact candidate: actual NIC and 60-minute capture, multi-setting U/I validation, 4000/4800 rates, quality-gap/held/missing tests, 100/125/150% DPI and Npcap/installer lifecycle. CI, screenshots and candidate packaging are not calibrated relay/clock-lock or packet-loss proof. Remain Draft PR; do not merge/publish stable without this field evidence.