Skip to content

fix(goose): stable publisher selection, coherent live inspector and v1.4.2 hotfix - #48

Merged
masarray merged 21 commits into
mainfrom
fix/goose-publisher-selection-ssot-20261021
Oct 21, 2026
Merged

masarray merged 21 commits into
mainfrom
fix/goose-publisher-selection-ssot-20261021

Conversation

@masarray

Copy link
Copy Markdown
Owner

Scope / provenance

  • Based on unchanged main SHA 561bf69a5cceee76d66b46350decea1e7da7593d, published v1.4.1.
  • Isolated v1.4.2 hotfix candidate; v1.4.1 tag and release artifacts remain untouched.
  • Operator screenshots/handoff: single-click GOOSE publisher selection releases under snapshots; DataSet Inspector flickers/empties, timeline/publisher mix historical/live state.

Code-level root cause addressed

  • Snapshot producer returns new cloned GooseMessageItem objects each snapshot; WPF ListView was bound to fully replaced IReadOnlyList and SelectedItem to a short-lived object. View recreation/null feedback could clear selection.
  • Timeline selected-item setter also wrote publisher selection and unconditional collection-view Refresh() reset the DataGrid.
  • Inspector network metadata came from a timeline event while DataSet values came from a different live publisher frame.
  • Raw analyzer originally indexed publishers by GoCbRef alone; multiple physical publishers with the same control-block reference could coalesce.

Implementation

  • Stable GoosePublisherKey: source MAC + APPID + VLAN + exact GoCBRef (fallback GoID/DataSet only if no GoCBRef); excludes stNum/sqNum/last-seen.
  • Bounded keyed incremental ObservableCollection<GoosePublisherRow> with persistent row instances and change-specific property notifications.
  • Selected publisher key is the single source for its latest frame; WPF transient null is not an operator Clear.
  • Publisher click chooses Live latest coherent snapshot. Timeline click explicitly pins historical event. Timeline events are not allowed to mutate publisher selection; pure collection additions do not force view resets.
  • STALE state holds selected publisher's last decoded typed DataSet; explicit Clear removes selection. Filter options only change when available identities change.
  • Engine's raw GOOSE state key now separates same GoCBRef from distinct source MACs.
  • Regression: 1000 retransmissions without row recreation; same GoID multi-source/VLAN; alternating traffic; temporary disappearance/recovery; state-number changes; explicit Clear; bounded 500-source churn; raw same-GoCb distinct-MAC test.
  • No changes to 8-DIP layout, SV phasor, waveforms or PTP path.

Verification matrix

Automated: Windows CI, Runtime Stability, Runtime Architecture, CodeQL, candidate Windows/Inno install + repair, repository health at exact PR HEAD SHA. Runs are required before approval; a green CI does not constitute mouse-click proof.

Manual Windows acceptance still required: sustained real GOOSE stream, single click at 100%, 125%, 150% DPI; retransmissions OFF/ON; multiple publishers; changes of filter/search; select timeline then publisher; STALE/recovery; matching/missing SCL. Verify About BuildInfo exact commit and installed executable hash against candidate manifest.

CI efficiency

One focused PR branch (no redundant branch builds), version reserved pre-PR so the Inno package gate won't fail on the already-published v1.4.1. Normal concurrency cancellation handles superseded SHA builds; rerun only failed jobs after code changes. No release tagging or auto-merge.

Do not merge/release as validated until workflows are green and field selection acceptance is recorded.

Copy link
Copy Markdown
Owner Author

Exact-SHA validation — v1.4.2 GOOSE selection hotfix candidate

PR HEAD: 44ec3fc0e041cada0125ede07c8b7985d5434bee (source branch fix/goose-publisher-selection-ssot-20261021; base main 561bf69a5cceee76d66b46350decea1e7da7593d).

All six checks completed SUCCESS for this exact SHA:

Candidate artifact: ProcessBusInsight-v1.4.2-win-x64-inno-candidate-292, GitHub artifact ID 12304818556; archive contains ProcessBusInsight-v1.4.2-win-x64-setup.exe, candidate-manifest.json, SHA256SUMS.txt, candidate-tests.trx. Candidate manifest commit is exactly 44ec3fc0e041cada0125ede07c8b7985d5434bee.

Installer SHA256 (verified directly against archive bytes): 5917a6fb2b61a6f706a7efd089c27c852cd119e4ea25e06b8591ffa5bfc2baba.

Important remaining gate — real Windows UI/traffic: while automated tests cover keyed reconciliation, real WPF mouse-click retention under sustained GOOSE retransmissions, selected-row highlighting at 100/125/150% DPI, switch to/from historical timeline, physical NIC/SCL mapping, STALE/resume and same-name multi-publisher behavior still need operator bench acceptance on the exact candidate EXE. CI cannot prove this. Keep PR draft and avoid publishing a stable release until that evidence is supplied.

No v1.4.1 release/tag/assets changed, no auto-merge, and no manual rerun/duplicate CI request was triggered.

@masarray
masarray marked this pull request as ready for review October 21, 2026 13:04
@masarray
masarray merged commit 09aa54f into main Oct 21, 2026
8 checks passed
@masarray
masarray deleted the fix/goose-publisher-selection-ssot-20261021 branch October 21, 2026 13:05
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-21T13:05:48.124543Z 44ec3fc Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

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