Skip to content

Commit d4fb825

Browse files
authored
Merge PR #49: readable GOOSE Inspector and verified DataSet UX
feat(goose): readable engineering Inspector, verified quality and stable DataSet details
2 parents 09aa54f + 927346b commit d4fb825

21 files changed

Lines changed: 1644 additions & 398 deletions

‎docs/RELEASE_NOTES_v1.4.2.md‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,13 @@ This hotfix follows published v1.4.1 and is **not** an IEC 61850 certification o
1414
A Windows hotfix candidate must pass repository health, Windows CI/test, Runtime Stability, Runtime Architecture, CodeQL, verified Inno installation/repair and exact-SHA BuildInfo provenance. A physical click/selection stream test remains a separate required check (100%, 125%, 150% DPI; sustained retransmissions, multiple publishers and filters).
1515

1616
**Distribution:** candidate artifacts produced by the PR workflow are not a published stable v1.4.2 release. Preserve v1.4.1 tag and published assets. Explicit approval required to release the hotfix.
17+
18+
## Engineer-focused GOOSE readout refinement
19+
20+
- Compact chevrons instead of prominent circular disclosure controls, with stable expanded raw MMS details during high-rate retransmissions.
21+
- Each unmapped entry is explicitly named `Entry n`; signal references appear only from matching SCL data.
22+
- `TEST` badges on publisher and Inspector, distinct `RX frames` and `visible events` counters, and GOOSE-specific capture status.
23+
- Explicit `LIVE / STALE / PINNED EVENT` context. Returning to Live clears the timeline's historical selection.
24+
- Strict 13-bit IEC 61850 q bit-string padding validation and additional positive/negative regression coverage.
25+
26+
Manual Windows GUI/display-scaling field acceptance remains a separate approval gate.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# GOOSE Compact Operator UX — Windows Acceptance
2+
3+
Scope: GOOSE workspace only. Retain key-stable publisher selection, the bounded live and historical traffic views, the 8-DIP workspace gutters, raw MMS evidence, and the previously validated signal interpretation.
4+
5+
## Design behavior
6+
7+
- The source rail has one search field with local WPF vector Material-style search/close icons. An empty search hides the clear control; typing reveals it. Clicking clear resets the existing filter and restores focus to the search input, without rebuilding publisher identity or changing the selected publisher.
8+
- The duplicate message-name dropdown and duplicate explanatory source footer are removed. The repeated-messages toggle still controls timeline visibility only.
9+
- Only the source ListView scrolls. Its Grid star row constrains height and the ListView uses the WPF recyclable virtualizing stack; the title, search and retransmission toggle remain visible.
10+
- The sticky Inspector status remains visible above the scrollable evidence. Within that evidence are three independent sections: Message (open), Network (closed) and Values (open). Users can expand/collapse each in any combination, using mouse, touch or keyboard. The static controls preserve their state through receive updates.
11+
- Values have no forced maximum height. Closing Message/Network reveals more DataSet rows, and the single evidence scrollbar reveals overflowing content.
12+
- The compact circle-chevron icon is drawn as vector geometry with no downloaded font, icon dependency or network access.
13+
- Raw MMS types and true signal identity remain traceable from expanded entry detail; unconfigured bit patterns are not translated into physical switch states.
14+
15+
## Acceptance matrix
16+
17+
| Test | Expected |
18+
| --- | --- |
19+
| 20+ publishers at 768 px window height | Source ListView scrolls to last item; search and toggle remain fixed |
20+
| Search by message/source/MAC, then clear | Matching rows update without reset of keyed publisher; clear icon disappears on empty |
21+
| Search miss, then clear | No false publisher removal; all sources return |
22+
| Expand Message + Network + Values | Headers are independently clickable; one evidence scrollbar handles overflow |
23+
| Collapse Message + Network | Values gain available viewport area; entry row expanders still work |
24+
| Receive repeated messages with one or more sections collapsed | No unexpected accordion state flip, Inspector target loss or UI-thread blocking |
25+
| Select a historical event and return to live | Sticky context updates but accordion states persist |
26+
| 100/125/150% Windows scaling | Circle-chevron, search, X and signal/value text remain aligned and not clipped |
27+
| Keyboard focus and accessibility | Search and section headers can be focused; toggle activation works by keyboard |
28+
| Import matching SCL / omit SCL | Verified names and quality when matched; raw data items with no fabricated meaning otherwise |
29+
30+
## CI discipline
31+
32+
Use one exact-SHA Windows CI and runtime/security/Inno candidate workflow set after committing the complete UX checkpoint. Review any failure and fix only the affected surface. Do not rerun successful jobs without a substantive reason. Keep v1.4.1 stable assets untouched and treat this as v1.4.2 pre-release candidate until physical acceptance.
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# GOOSE Engineering Readout — P0–P3 Validation Handoff
2+
3+
Date: 2026-10-21. Scope: receive-only GOOSE engineering workspace. Baseline: selection/inspector single-source-of-truth hotfix plus v1.4.2 GUI candidate. This is **not** an IEC 61850 conformance claim.
4+
5+
## Engineering invariants
6+
7+
1. Selection is keyed to source MAC, APPID, VLAN, and GoCB reference; transient WPF null/retransmission does not delete operator intent.
8+
2. **Live** Inspector always shows the latest coherent frame of the explicitly selected publisher. Choosing an event pins an immutable historical snapshot. Returning to Live explicitly clears timeline selection; switching publisher cannot leave a misleading historic highlight.
9+
3. RX frame count is distinct from event count **visible after filters**. Retransmission toggle governs only event history visibility; it does not stop receiving retransmitted packets.
10+
4. Raw MMS data without matching SCL is labeled `Entry 1…n` with its decoded wire type/value. Signal names, DPC meanings, and IEC 61850 q quality are never inferred from arbitrary bit patterns.
11+
5. Only a matched SCL quality field with a valid 13-bit MMS BIT STRING can be interpreted as IEC 61850 q. Invalid unused-bit padding, unexpected width, bad hex, and non-BitString types fail closed.
12+
6. The initial observed DataSet is a baseline, not a fabricated field change. Subsequent changes use prior observed values.
13+
7. Test-mode publishers show explicit **TEST** identifiers; no red/green Boolean good/bad assumptions.
14+
8. Keyed publisher rows and per-index DataSet rows survive passive refreshes without collapsing an opened MMS detail. Deliberately changing publisher or pinning a different event resets only that DataSet context.
15+
16+
## Visual contract
17+
18+
- Workspace shell and panel gutters: 8 DIP. GOOSE detail width: 460 DIP; other workspaces unchanged.
19+
- Compact Signal / Value rows with a subdued chevron, expanded MMS raw value and payload hex, semantically resolved quality details only with a matching SCL.
20+
- Publisher label and full reference available without high-contrast action ornamentation.
21+
- Timeline remains a forensic event list, not a decorative panel filled with unrelated cards.
22+
- Time-sensitive status strip reflects GOOSE traffic when the GOOSE workspace is active, without changing other workspaces' status.
23+
24+
## Required automatic gates
25+
26+
Windows repository health, workspace layout/source contract, full .NET solution compilation, unit tests, Runtime Stability, Runtime Architecture, CodeQL, dependency checks and Inno installer package/install/repair. These must all reference the *same commit SHA* and be verified on the PR head.
27+
28+
### Regression coverage
29+
30+
- Empty/malformed quality, invalid unused padding, exact 13-bit validity values, substituted/test/operator-blocked detail flags.
31+
- Generic entry names versus explicit matching SCL signal reference names.
32+
- Publisher TEST flag changes on an existing selected keyed row.
33+
- Multi-publisher identity, retransmission, same-GoID split MAC/VLAN, filter-miss, stale/recovery, 1,000 retransmissions, 500-source bounded churn.
34+
- First-frame baseline versus later observed state-change semantics.
35+
36+
## Manual Windows field acceptance (still required after automated PASS)
37+
38+
At 1366×768, 1586×893 and 1920×1080 (where available) under 100%, 125%, and 150% display scaling: inspect normal/expanded DataSet rows without clipping, confirm chevron click and keyboard toggle, tab through TEST/LIVE/PINNED/STALE indicators, select multiple GOOSE publishers during continuous retransmissions, pin events, click Return to Live, use filter search/GOOSE ID with no selection loss, and observe updates with real or recorded GOOSE traffic. Import a matching SCL and verify genuine signal/quality mappings, then repeat without SCL to confirm raw-only fallback.
39+
40+
**Acceptance boundary:** a successful automated CI build does not prove physical UI readability or IEC 61850 interoperability at a specific field installation. Keep candidate publication and branch promotion separate from this manual sign-off.
41+
42+
## Follow-up: operator screenshot inspection, expanded raw MMS entries
43+
44+
Three operator screenshots of the P0–P3 candidate demonstrate selection stability during reception and successful simultaneous expansion of two typed DataSet entries. They also reveal three visual defects: DataSet title/count running together, the Inspector context disappearing when the entire pane scrolls, and unnecessarily tall expanded MMS details.
45+
46+
The targeted follow-up uses a fixed Inspector header row (including PINNED/TEST and Return to Live), a single scrolling evidence region, an explicitly aligned DataSet title/count grid, and compact key/value MMS details. These corrections do not alter packet reception, GOOSE state matching, generic typed decoding, or the 8-DIP workspace gutter.
47+
48+
Required physical acceptance: expand two entries, scroll to the bottom and back, confirm the Inspector mode and Return to Live remain visible throughout; confirm the DataSet count does not touch the title at 100%, 125%, 150% DPI; verify selecting a different publisher or returning to Live changes Inspector context correctly without replacing unrelated publisher rows.
49+
50+
## Operator language acceptance — message/field terminology
51+
52+
The application must explain what an electrical engineer is seeing without requiring familiarity with every IEC 61850 field name. Keep accurate original wire references in tooltips or expandable forensic rows.
53+
54+
| Main display | Original technical evidence |
55+
| --- | --- |
56+
| Message name | goID |
57+
| Control block | goCbRef |
58+
| Application code | APPID |
59+
| State number / Sequence number | stNum / sqNum |
60+
| Sender address / Group address | Ethernet source / destination MAC |
61+
| Network group | VLAN ID and priority |
62+
| Configuration version | confRev |
63+
| Allowed wait | timeAllowedToLive, milliseconds |
64+
| Binary bit pattern | MMS BitString |
65+
| Data item 1, Data item 2… | Raw decoded values without matching SCL |
66+
| Open/Closed (verified switch-position signal only) | Matched SCL XCBR or XSWI / Pos.stVal |
67+
| First seen / State changed / Repeated | New / State Change / Retrans reception events |
68+
69+
**Failure safety:** no breaker position can be inferred from a bare `00/01/10/11` bit pattern, unrelated DPC attributes, quality fields, timestamps or incomplete SCL identity. Source data is not renamed when evidence is missing. A configuration-tab shortcut explains how to identify signals.
70+
71+
**Clock semantics:** the reception time in message history must use the same local clock as the recorded-message Inspector timestamp, avoiding false multi-hour offsets on site.
72+
73+
**Additional physical acceptance:** use a multi-publisher real capture and a matching imported device configuration. Compare message history time against the Inspector time; validate names, interpreted switch position and decoded quality against a separately verified record. With no configuration, all entries remain generic with readable data type and raw bit/hex evidence. Test 100/125/150% scaling and expand two data rows without losing the sticky Inspector heading.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# GOOSE Message Terminology — Field Acceptance
2+
3+
## Purpose
4+
5+
Use widely recognized GOOSE capture and protocol field terminology in the GOOSE workspace while retaining the existing application layout, stable publisher selection, compact search and three independent Inspector sections. All terms describe actual received evidence, not assumed switching states.
6+
7+
## Capture table
8+
9+
| Column | Evidence |
10+
| --- | --- |
11+
| Time | Local receive time from the actual frame timestamp (seven fractional digits where available) |
12+
| Relative time | Seconds since the first observed GOOSE history event after capture start/reset; **not** the time gap to the preceding event |
13+
| Source | Source Ethernet MAC address |
14+
| Destination | Destination Ethernet MAC address |
15+
| Description | Original GOOSE control-block reference (GoCBRef), with full text in a tooltip |
16+
17+
The small `G` marker denotes a GOOSE frame; its tooltip retains the event distinction (first seen, state change, repeated). The repeated-message filter still controls which events are visible, not which frames are received. The receive count and event count remain separate.
18+
19+
## Details
20+
21+
- Control Block reference, Application ID, GOOSE ID, Status number (stNum), Sequence number (sqNum), Entry time.
22+
- Destination MAC address, Source MAC address, DataSet reference, VLAN ID, VLAN priority, Needs commissioning, Configuration revision, Simulation/Test, Time allowed to live (ms).
23+
- Data: Name and Value columns. When no valid SCL identity is available, a received MMS BitString is named **Bitstring N** only as an ordinal/type label, not as an IEC 61850 object identifier. Other recognized wire types likewise may use type/ordinal labels.
24+
25+
## Operator contract
26+
27+
- Dark theme, 8-DIP gutters, scrollable publisher list, one Material-style search/clear field and independent Message/Network/Data disclosure controls remain in place.
28+
- DataSet interpretation does **not** infer a breaker position from an unmapped bit pattern. Verifiable SCL matching remains a prerequisite to semantic values and quality.
29+
- Historical event selection remains distinct from live publisher selection. **Show Latest** returns to live evidence. The Inspector displays the selected message snapshot coherently.
30+
- No external product/provider names are introduced in source, commit history, public PR or validation notes.
31+
32+
## Automated and physical checks
33+
34+
Automated: exact-SHA Windows compile, full tests, 8-DIP geometry and terminology contract, runtime architecture/stability, CodeQL, dependency analysis and candidate Inno install/repair smoke.
35+
36+
Physical: inspect 20+ active GOOSE sources, select two different messages, compare Source/Destination with a verified Ethernet capture, ensure Relative time is monotonic and reset with capture clearing, inspect all detail labels without clipping at 100%/125%/150% scaling, import matching SCL for genuine values and test raw Bitstring fallback without SCL.
37+
38+
Green CI is not a substitute for the final physical reading/interaction test.

0 commit comments

Comments
 (0)