Skip to content

P6E: independent multi-IED engineering workspaces - #123

Merged
masarray merged 24 commits into
mainfrom
ux/p6e-multi-ied-workspace
Sep 26, 2026
Merged

masarray merged 24 commits into
mainfrom
ux/p6e-multi-ied-workspace

Conversation

@masarray

Copy link
Copy Markdown
Owner

Implements P6E from #118 from exact baseline/ux-p6d-validated (13abb65d845d297fe8811d0f99c490ad275cd4c8).

  • Bounded fleet of independent canonical context / client / Reports / Control / Utilities / SCL controller / session sets (max 8).
  • Persistent Browser tab per IED; switch does not disconnect or rebind another live association.
  • Explicit new, switch, offline-only close, and SCL multi-IED fork with source provenance and duplicate avoidance.
  • Existing P6A–P6D runtime ownership, static report-only behavior, and passive Sniffer remain unchanged.
  • Behavioral QA validates slot isolation, model authority, endpoint propagation, fork, close and capacity.

Draft pending full exact-head Qt/C++/release/behavioral regression evidence.

@masarray
masarray marked this pull request as ready for review September 26, 2026 10:09
@masarray
masarray merged commit de8ba6e into main Sep 26, 2026
22 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

onWatchedDataChanged: fleetGlobalData.refreshRows()

P1 Badge Coalesce aggregate rebuilds away from every report poll

When any workspace has an active report, MmsReportController emits reportsChanged after every 100 ms poll, including polls with no new report; BrowserGlobalDataPane.syncRows() then emits watchedDataChanged, so this unconditional handler clears and re-appends as many as 2,048 aggregate rows on the GUI thread for every active slot, even while the All IEDs pane is hidden. With several reporting IEDs this repeated allocation-heavy rebuild can dominate UI processing; gate it on aggregate-view visibility and coalesce or update only changed rows.

AGENTS.md reference: AGENTS.md:L88-L92


if (activeContext()->publishSclDocument(*source, sourcePath, name)) {

P2 Badge Share the parsed SCL source instead of copying it per slot

When several IEDs are opened from a large multi-IED SCD, this call deep-copies the complete SclDocument into the new context via publishSclDocument; the subsequent adoptSourceFrom also copies the complete document into that slot's workspace controller. At the eight-slot limit this retains roughly two full parsed-document copies per workspace in addition to each selected IED model, so memory grows with the entire source file rather than the selected IEDs; share immutable parsed source evidence between slots and keep only per-IED canonical projections independent.

AGENTS.md reference: AGENTS.md:L146-L150

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

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