Review remediation: Lane D — AdminUI (opus for D1–D2, sonnet for D3–D4; review opus) #745

Open
opened 2026-10-22 06:05:20 -04:00 by dohertj2 · 0 comments
Owner

From the 2026-10-21 Fable system review. Findings R0x:ID refer to docs/reviews/2026-10-21/0x-*.md (location, evidence, failure scenario, fix recipe). Plan: docs/superpowers/plans/2026-10-22-review-remediation.md.

Lane D — AdminUI (opus for D1–D2, sonnet for D3–D4; review opus)

Owns: src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/**, except the per-driver editors/forms owned in Wave 2 and the A6 diagnostics panel.

  • D1 Monaco sync correctness (R04:P1, P9, S2, S3):
    • Fetch the editor text on demand at Save/blur via MonacoBlazor.getValue instead of per keystroke.
    • HubOptions.MaximumReceiveMessageSize = 1 MB.
    • Diagnostics generation counter + AbortController.
    • Drop the inlay-hints provider/endpoint.
    • Build a Problems list using MarkersChanged + RevealLineAsync.
  • D2 Roslyn analysis (P2, P3, S1):
    • One compilation per scoped service with ReplaceSyntaxTree.
    • RequestAborted plumbing + Monaco token honouring.
    • Sorted string[] + dictionary in the catalog snapshot.
    • An OTSCRIPT_SETVTAG_INERT warning marker.
  • D3 Rendering (P4–P8, H2):
    • /hosts dirty flag on tick.
    • RawTree cached menus + Virtualize + 500-per-level paging.
    • CSV import grid Virtualize + export via a download endpoint.
    • ScriptLog/Alerts 200 ms coalescing + ring buffer.
    • /scripts projection.
    • Cached modal parameter dictionaries.
  • D4 Leaks/hazards/stubs (L1–L5, H1, H3, S4–S7):
    • Snapshot-store eviction against the config load.
    • Threading.Timer in DriverTestConnectButton.
    • AlarmsHistorian page Fleet.razor pattern + "no historian on role" state.
    • Close an orphaned browse token after dispose.
    • Per-subscriber try/catch in broadcasters.
    • Confirm dialogs on equipment-page and ScriptEdit deletes.
    • Document the theme (H3).
    • Delete dead UnsTreeService members.
    • GET /api/deployments/{id}.
    • Equipment CSV via CsvParser.
    • Gate /dev/* behind #if DEBUG.

Lane gate (userGate-free, coordinator-run): docker-dev Chrome pass.

  • Paste a 100 KB script, Save, reload: the source persists.
  • Two-tab /hosts with 50 drivers: CPU stays flat.
  • Expand a 5k-tag device: renders in < 2 s.
  • Each delete confirms.
  • The A6 diagnostics panel shows real counts.
From the 2026-10-21 Fable system review. Findings `R0x:ID` refer to `docs/reviews/2026-10-21/0x-*.md` (location, evidence, failure scenario, fix recipe). Plan: `docs/superpowers/plans/2026-10-22-review-remediation.md`. ### Lane D — AdminUI (opus for D1–D2, sonnet for D3–D4; review opus) **Owns:** `src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/**`, except the per-driver editors/forms owned in Wave 2 and the A6 diagnostics panel. - **D1 Monaco sync correctness** (`R04:P1`, `P9`, `S2`, `S3`): - Fetch the editor text on demand at Save/blur via `MonacoBlazor.getValue` instead of per keystroke. - `HubOptions.MaximumReceiveMessageSize` = 1 MB. - Diagnostics generation counter + `AbortController`. - Drop the inlay-hints provider/endpoint. - Build a Problems list using `MarkersChanged` + `RevealLineAsync`. - **D2 Roslyn analysis** (`P2`, `P3`, `S1`): - One compilation per scoped service with `ReplaceSyntaxTree`. - `RequestAborted` plumbing + Monaco token honouring. - Sorted `string[]` + dictionary in the catalog snapshot. - An `OTSCRIPT_SETVTAG_INERT` warning marker. - **D3 Rendering** (`P4`–`P8`, `H2`): - `/hosts` dirty flag on tick. - `RawTree` cached menus + `Virtualize` + 500-per-level paging. - CSV import grid `Virtualize` + export via a download endpoint. - ScriptLog/Alerts 200 ms coalescing + ring buffer. - `/scripts` projection. - Cached modal parameter dictionaries. - **D4 Leaks/hazards/stubs** (`L1`–`L5`, `H1`, `H3`, `S4`–`S7`): - Snapshot-store eviction against the config load. - `Threading.Timer` in `DriverTestConnectButton`. - `AlarmsHistorian` page `Fleet.razor` pattern + "no historian on role" state. - Close an orphaned browse token after dispose. - Per-subscriber try/catch in broadcasters. - Confirm dialogs on equipment-page and ScriptEdit deletes. - Document the theme (`H3`). - Delete dead `UnsTreeService` members. - `GET /api/deployments/{id}`. - Equipment CSV via `CsvParser`. - Gate `/dev/*` behind `#if DEBUG`. **Lane gate (userGate-free, coordinator-run):** docker-dev Chrome pass. - Paste a 100 KB script, Save, reload: the source persists. - Two-tab `/hosts` with 50 drivers: CPU stays flat. - Expand a 5k-tag device: renders in < 2 s. - Each delete confirms. - The A6 diagnostics panel shows real counts.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dohertj2/lmxopcua#745