Universal discovery browser: full controller-tree render is live-verify-blocked by the ab_server fixture (no @tags walk) #468

Open
opened 2026-07-15 18:38:43 -04:00 by dohertj2 · 0 comments
Owner

Context

The Wave-0 universal Discover-backed browser (DiscoveryDriverBrowser) merged to master (commit 056887d6) — one generic browser that captures any discovery-capable driver's ITagDiscovery.DiscoverAsync and serves it through the picker, lighting up AbCip/TwinCAT/FOCAS pickers with zero per-driver browser code. Design: docs/plans/2026-07-15-universal-discovery-browser-design.md; plan + live-gate result: docs/plans/2026-07-15-universal-discovery-browser-implementation.md (§ "Live-gate result").

What the Task 18 live gate DID verify (docker-dev)

  • AbCip picker renders the "Browse controller" button — full CanBrowse binding chain works end-to-end.
  • Clicking it runs the universal browser in production (central-2 logs: BrowserSessionService.OpenUniversalAsync -> DiscoveryDriverBrowser.OpenAsync -> RunCaptureAsync -> CaptureAsync -> DiscoverTreeAsync), with PatchForBrowse demonstrably applied — the controller @tags walk ran even though the authored config never set EnableControllerBrowse (that walk only runs when the flag is true).
  • Error surfaced as a graceful UI chip (no dead binding, crash, or hang); bounded shutdown ran.
  • Modbus picker shows no Browse button (negative).

What is BLOCKED (this issue)

A populated controller-tag tree render + leaf-commit round-trip could not be verified. The libplctag ab_server test sim (ControlLogix fixture at 10.100.0.35:44818, tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbCip.IntegrationTests/Docker/) implements tag read/write but not the CIP Symbol Object controller enumeration — the @tags walk returns ErrorUnsupported. This is a fixture capability gap, not a code defect: the browse binding is proven alive and PatchForBrowse is proven to run in production.

Definition of done

Point the universal browser at a symbol-enumeration-capable Allen-Bradley backend and confirm:

  1. The AbCip picker renders a populated controller-tag tree (folders + leaves).
  2. Refresh re-captures.
  3. Picking a leaf writes the CIP tag path into TagConfig.FullName and the tag saves.

Options: a real ControlLogix over VPN/on-prem, or an ab_server/sim variant that serves @tags. TwinCAT (ADS symbol upload) and FOCAS (FixedTree UntilStable settle) have the same fixture-availability gap and can ride the same verification once a backend exists.

Related follow-up (already fixed)

Driver-config-page pickers not passing live config -> fixed in commit 10e23f8b (threaded GetConfigJson through AbCipDriverPage/TwinCATDriverPage/FOCASDriverPage).

## Context The Wave-0 universal Discover-backed browser (`DiscoveryDriverBrowser`) merged to master (commit `056887d6`) — one generic browser that captures any discovery-capable driver's `ITagDiscovery.DiscoverAsync` and serves it through the picker, lighting up AbCip/TwinCAT/FOCAS pickers with zero per-driver browser code. Design: `docs/plans/2026-07-15-universal-discovery-browser-design.md`; plan + live-gate result: `docs/plans/2026-07-15-universal-discovery-browser-implementation.md` (§ "Live-gate result"). ## What the Task 18 live gate DID verify (docker-dev) - AbCip picker renders the **"Browse controller"** button — full `CanBrowse` binding chain works end-to-end. - Clicking it runs the universal browser **in production** (central-2 logs: `BrowserSessionService.OpenUniversalAsync -> DiscoveryDriverBrowser.OpenAsync -> RunCaptureAsync -> CaptureAsync -> DiscoverTreeAsync`), with `PatchForBrowse` **demonstrably applied** — the controller `@tags` walk ran even though the authored config never set `EnableControllerBrowse` (that walk only runs when the flag is true). - Error surfaced as a graceful UI chip (no dead binding, crash, or hang); bounded shutdown ran. - Modbus picker shows **no** Browse button (negative). ## What is BLOCKED (this issue) A **populated controller-tag tree render + leaf-commit round-trip** could not be verified. The libplctag `ab_server` test sim (ControlLogix fixture at `10.100.0.35:44818`, `tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbCip.IntegrationTests/Docker/`) implements tag read/write but **not** the CIP Symbol Object controller enumeration — the `@tags` walk returns `ErrorUnsupported`. This is a **fixture capability gap, not a code defect**: the browse binding is proven alive and `PatchForBrowse` is proven to run in production. ## Definition of done Point the universal browser at a symbol-enumeration-capable Allen-Bradley backend and confirm: 1. The AbCip picker renders a populated controller-tag tree (folders + leaves). 2. Refresh re-captures. 3. Picking a leaf writes the CIP tag path into `TagConfig.FullName` and the tag saves. Options: a real ControlLogix over VPN/on-prem, or an `ab_server`/sim variant that serves `@tags`. TwinCAT (ADS symbol upload) and FOCAS (FixedTree `UntilStable` settle) have the same fixture-availability gap and can ride the same verification once a backend exists. ## Related follow-up (already fixed) Driver-config-page pickers not passing live config -> fixed in commit `10e23f8b` (threaded `GetConfigJson` through `AbCipDriverPage`/`TwinCATDriverPage`/`FOCASDriverPage`).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dohertj2/lmxopcua#468