Skip to content

P0: restore active Browser panel routing and enforce rendered QA - #127

Draft
masarray wants to merge 43 commits into
main-workbench-ux-prdfrom
fix/workbench-browser-recovery-20260927
Draft

masarray wants to merge 43 commits into
main-workbench-ux-prdfrom
fix/workbench-browser-recovery-20260927

Conversation

@masarray

@masarray masarray commented Sep 27, 2026 •

Copy link
Copy Markdown
Owner

Recover from the blank/misaligned workbench regression. The previous hotfix 009855c addressed shadowed QML services, but this UX branch still retained the obsolete StackLayout/Repeater slot mapping despite validated routing changes already merged on main.

  • Port the validated persistent plain-Item Browser host and explicit active-slot visibility from the accepted main baseline.
  • Keep root.browserFleet service bindings for each independent IED.
  • Restore validated C++ rendered --qa-browser-routing smoke/fixture path; enforce it in Qt and Release Hardening CI.
  • Update P6B/P6E/delegate contracts to match the actual non-shadowed, accurately routed shell.
  • No MMS, SCL or report wire-runtime changes.

Additional root cause confirmed by rendered CI

  • MmsClientWorkspace.qml and IedBrowserNavigation.qml declared required property int index but used model.* without required property var model. Qt 6 does not inject the implicit model context when any required delegate properties are declared. CI reproduced ReferenceError: model is not defined, blank delegate values, and a missing signal-tree QA identity.
  • Explicitly bind required property var model, restore observable tree/value-table object names, and require the first rendered model value label to equal the fixture IED name. QA now also checks that all per-IED controller pointers match the active slot.
  • Earlier CI red is retained as failure evidence. Exact-head validation and real-device behavior remain outstanding.

Do not merge or publish a portable build until exact-head CI is green and rendered/fixture checks pass. main remains unchanged.

Formal acceptance milestones

The latest CI found a real failure (unbound rendered label) rather than a compilation issue. The rendered QA now walks QQuickItem visual children. File/Home self-binding and transient DataSet ownership dereference are corrected. Qt/Release gate now rejects QML ReferenceError, TypeError, and binding loops. Keep Draft until exact-head checks are green and the real IED test is documented.

Copy link
Copy Markdown
Owner Author

R0 diagnostic / lifecycle fix (2026-09-27)

Last tested head 48728708 had Qt and Linux Release Hardening failure, even though all protocol-side CI passed and the Windows package job succeeded independently.
The rendered fixture actually printed BROWSER_FLEET_ROUTING_PASS (correct active tab, offline signal and Model Values text, reindex) but then emitted many TypeError: ... of null as per-IED service QObjects were destroyed while Repeater views still held live bindings. These errors were correctly caught by the new log gate; they are not evidence of missing model data.
Changes in this follow-up: defer retirement of a closed slot through the next Qt event-loop turn; detach Browser Repeater delegates in aboutToQuit before fleet C++ destruction; retain source regression contracts; enforce Linux rendered acceptance as a prerequisite for publishing the Windows RC artifact.
Exact-head validation is pending. Do not merge or link stale artifacts as a release. Milestone #128 tracks R0 exit; #129 tracks SCL/Discovery static report parity.

Copy link
Copy Markdown
Owner Author

R0 exact-head validation update — 8b077f5e

  • IED Simulator Qt: success. The rendered active-slot/offline signal/value label test and subsequent P6A/P6B/P6C workflow contracts succeeded.
  • Release Hardening: Linux release-soak success (rendered Browser, QML runtime diagnostic gate, MMS reconnect, app-close child/socket soak); gated Windows package is still building.
  • Source cause fixed: services are now frozen to the corresponding Browser delegate at creation; removed slot lifetime is retained briefly for visual teardown; delegates detach before application shutdown. This prevents QML service pointers from transiently re-binding to the wrong IED or becoming null.
  • Remaining R0 gates: full Windows package success + exact-head artifact validation, offline Open SCL GUI walkthrough, real AA1E1F06R4 device acceptance, and deliberate promotion strategy without overwriting main.

Copy link
Copy Markdown
Owner Author

R0.1 compact Browser command surface (#135)

Extended recovery branch at 3a3ceef9 with a two-row, 96px model/connection command bar. The former single row could overflow the supported 1024px width, causing apparently blank or inaccessible commands. Top row: model source/Save SCL/identity. Bottom row: IP, TCP port, context-aware Online/Discover/Disconnect, and session status. Status uses compact ellipsis and full tooltip.
Added stable object identities for command bar, host/port and status, plus rendered Qt QA at 1024px asserting their actual visual geometry while retaining the existing nonblank signal tree/Model Values and multi-IED routing checks. Regression contract rejects reintroduction of the 68px single-row header.
All code is pushed; exact-head CI is running. This is not complete parity with IEDScout or real-device acceptance; next exit checks are #135 and #129. R0 previously green on 8b077f5e remains the recovery baseline, and main remains untouched.

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