Skip to content

feat(designer-v2): Enable runtime connection expressions - #9609

Merged
Riley Evans (rllyy97) merged 4 commits into
mainfrom
rllyy97-dynamic-connection-properties
Sep 10, 2026
Merged

feat(designer-v2): Enable runtime connection expressions#9609
Riley Evans (rllyy97) merged 4 commits into
mainfrom
rllyy97-dynamic-connection-properties

Conversation

@rllyy97

@rllyy97 Riley Evans (rllyy97) commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Commit Type

  • feature - New functionality
  • fix - Bug fix
  • refactor - Code restructuring without behavior change
  • perf - Performance improvement
  • docs - Documentation update
  • test - Test-related changes
  • chore - Maintenance/tooling

Risk Level

  • Low - Minor changes, limited scope
  • Medium - Moderate changes, some user impact
  • High - Major changes, significant user/system impact

What & Why

Add runtime connection selection to Change connection in Designer V2, following Dynamic connection properties in Azure Logic Apps Standard.

The feature is enabled by default for Standard ServiceProvider actions. There is no host option or opt-in wiring. Designer V1 and the host applications are unchanged.

Users can author an expression in inputs.serviceProviderConfiguration.connectionName and optionally select a concrete connection for design-time browsing/schema discovery. The design-time reference is session-only: it never replaces the runtime expression, becomes a runtime fallback, or gets serialized into the workflow.

Without a design-time reference, declared dynamic-schema inputs remain manually editable, and unresolved runtime expressions are not sent to connection-dependent metadata APIs. Edited values and removed properties survive import/save and transitions between manual inputs and expanded schemas. Optional root inputs remain optional even when their schemas require child properties. Existing ServiceProvider connection targets and their exact, case-sensitive keys are preserved.

Includes expression validation and tokens, connection status/list presentation, copy/paste and reference remapping, undo/redo, Code View handling, localization, documentation, and regression coverage. The outer connection panel preserves expression selection instead of forcing connection creation when no concrete connections are returned. The shared test-only Lexical helper lives outside production source instrumentation, while remaining in the editor package for correct dependency resolution.

Impact of Change

  • Users: Designer V2 Standard built-in ServiceProvider actions gain an Existing connection / Use expression choice by default. Triggers, managed API connections, Consumption, and bulk expression authoring remain unsupported. Imported expressions are preserved in unsupported contexts; read-only and monitoring views remain nonmutating.
  • Developers: Adds expression-aware connection state to Designer V2 only. Consumers distinguish runtime expressions from concrete connection keys. No new host option or host configuration is required; Designer V1 retains its existing behavior and types.
  • System: Changes V2 connection state, metadata requests, and serialization. No new dependencies, credential handling, or runtime connection creation. Medium risk reflects the state/serialization scope; ordinary static connection behavior remains supported.

Test Plan

  • Unit tests added/updated

  • E2E tests added/updated

  • Manual testing completed

  • Tested in: Windows local Designer V2 validation; Chromium Standalone V2 with browser-only mocked SQL ServiceProvider metadata and connection references (no live Azure resource execution).

  • Final V2 behavior: 145 tests passed across 6 related suites, including default-on authoring with ordinary host options, supported stateful/stateless actions, restricted contexts, empty connection lists, optional-root requiredness, manual/schema transitions, and Code View.

  • Coverage-enabled follow-up: 121 tests passed across 3 core/UI suites with Istanbul enabled (overlaps the selection above). Designer V2 TypeScript checking passes.

  • Added 79 MCP regressions across 5 suites for concrete, expression, null, missing, and dangling mappings; connector status/edit/delete; panel submission/navigation; dynamic loaders; and parameter value/input-type changes. The combined Istanbul run and report generation succeed. All five previously uncovered MCP source files have 100% whole-file line coverage in this targeted run. No production behavior or coverage policy was changed by this test-only follow-up.

  • Designer UI coverage instrumentation also completed using its existing parser suite (21 tests passed); the relocated helper no longer breaks instrumentation. Coverage thresholds and production-source coverage policy are unchanged.

  • Verified V1 and all six previously modified host files exactly match the pre-feature baseline, and no references to the removed host option remain in source or documentation.

  • Browser smoke from initial V2 implementation: imported a runtime expression, opened Change connection with no concrete connections returned, confirmed invalid escaped input disables Apply, applied a valid expression, and verified serialization retains the expression and query inputs. The screenshot below shows this same V2 UI.

  • CI on production-code commit 588c9b41d passed the Node 20/22/24 build/test matrix and all Designer, Chat, and VS Code E2E jobs. Its five uncovered-file blockers are addressed by the MCP test-only follow-up. Refer to the PR checks and coverage report for the latest full-run results; existing partial whole-file coverage warnings are not claims of a measured coverage regression. Live Logic Apps runtime execution has not been performed.

Contributors

Riley Evans (@rllyy97), with implementation and regression assistance from GitHub Copilot.

Screenshots/Videos

image image image

Add expression-based Standard connection selection in both designers with optional session-only design-time connections, safe input preservation, host capability gating, and regression coverage.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings September 9, 2026 20:10
@rllyy97 Riley Evans (rllyy97) added the risk:medium Medium risk change with potential impact label Sep 9, 2026
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

🤖 AI PR Validation Report

PR Review Results

Thank you for your submission! Here's detailed feedback on your PR title and body compliance:

PR Title

  • Current: feat(designer-v2): Enable runtime connection expressions
  • Issue: None — valid feat prefix with scope and a clear, descriptive summary.
  • Recommendation: No change needed.

Commit Type

  • Exactly one type selected (feat - New functionality), which matches the title prefix and the new-functionality diff.
  • Note: The template label reads "feature" but maps correctly to feat. No action required.

Risk Level

  • Exactly one box selected (Medium) and it matches the risk:medium label and my advised estimate. The change touches Designer V2 connection state, metadata requests, and serialization — squarely Medium per the rubric (state-management/serialization scope, no security/auth or breaking shared-utility impact). Correctly declared.

What & Why

  • Current: Detailed explanation of runtime connection expression selection, default-on behavior for Standard ServiceProvider actions, and design-time reference semantics.
  • Issue: None.
  • Recommendation: No change needed.

Impact of Change

  • All three audiences are addressed (Users, Developers, System) with concrete detail.
  • Recommendation:
    • Users: Clearly stated (Existing connection / Use expression choice for V2 Standard built-in ServiceProvider actions).
    • Developers: Clearly stated (expression-aware V2 connection state; V1 unchanged).
    • System: Clearly stated (V2 connection state/metadata/serialization changes; no new deps).

Test Plan

  • Unit tests added/updated is checked and confirmed in the diff (new serviceProviderConnectionExpressions.spec.ts with 1143 lines, plus additions to updateNodeFromCodeView.spec.ts). Manual testing is also documented. Passes CHECK TESTS.

Contributors


Screenshots/Videos

  • Visual UI change is present and three screenshots are attached, satisfying the screenshot requirement.

Summary Table

Section Status Recommendation
Title No change needed
Commit Type No change needed
Risk Level Medium is correct
What & Why No change needed
Impact of Change No change needed
Test Plan Unit tests confirmed
Contributors No change needed
Screenshots/Videos Screenshots provided

All checks pass. The declared Medium risk matches the advised estimate, required tests and screenshots are present, and the title/body are template-compliant. Good to merge.


Powered by: Copilot CLI (claude-opus-4.8) | Last updated: Thu, 10 Sep 2026 18:42:17 GMT

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

Both designers incorrectly mark some optional dynamic-schema inputs as required when no design-time connection is selected.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Adds runtime ServiceProvider connection expressions across both designer generations, including authoring UI, state handling, serialization, metadata safeguards, copy/paste, undo/redo, and host integration.

Changes:

  • Adds expression-aware connection selection and optional design-time references.
  • Preserves runtime expressions and dynamic inputs through serialization and editing flows.
  • Adds host capability wiring, documentation, and regression tests.
File summaries
File Description
libs/designer/src/lib/ui/panel/nodeDetailsPanel/tabs/parametersTab/identityselector.tsx Handles absent concrete references.
libs/designer/src/lib/ui/panel/nodeDetailsPanel/tabs/parametersTab/connectionDisplay.tsx Displays runtime expressions and status.
libs/designer/src/lib/ui/panel/connectionsPanel/selectConnection/selectConnection.tsx Integrates expression selection.
libs/designer/src/lib/ui/panel/connectionsPanel/selectConnection/connectionExpression.tsx Adds the expression-authoring UI.
libs/designer/src/lib/ui/panel/connectionsPanel/connectionsPanel.tsx Prevents inappropriate connection creation.
libs/designer/src/lib/ui/panel/connectionsPanel/allConnections/allConnections.tsx Lists runtime-selected connections.
libs/designer/src/lib/ui/panel/connectionsPanel/__test__/connectionsPanel.spec.tsx Tests panel selection behavior.
libs/designer/src/lib/ui/mcp/parameters/parameterfield.tsx Safely resolves concrete MCP references.
libs/designer/src/lib/ui/mcp/parameters/ParameterEditor.tsx Safely resolves editor references.
libs/designer/src/lib/ui/mcp/panel/connector/usePanelTabs.tsx Excludes expression mappings from MCP references.
libs/designer/src/lib/ui/mcp/hooks/connection.ts Validates concrete MCP mappings.
libs/designer/src/lib/ui/mcp/connectors/ListConnectors.tsx Handles union connection mappings.
libs/designer/src/lib/core/utils/parameters/helper.ts Suppresses unsupported dynamic requests.
libs/designer/src/lib/core/utils/parameters/dynamicdata.ts Adds dynamic-connection invocation guards.
libs/designer/src/lib/core/utils/middleware.ts Supports expression undo and parameter renaming.
libs/designer/src/lib/core/utils/connectors/connections.ts Resolves optional design-time references.
libs/designer/src/lib/core/utils/connectors/connectionExpression.ts Parses, validates, remaps, and serializes expressions.
libs/designer/src/lib/core/utils/__test__/middleware.spec.ts Tests expression-aware history behavior.
libs/designer/src/lib/core/state/undoRedo/undoRedoTypes.ts Registers new undoable operations.
libs/designer/src/lib/core/state/operation/operationMetadataSlice.ts Stores preserved connection inputs.
libs/designer/src/lib/core/state/mcp/selector.ts Ignores expression mappings in MCP grouping.
libs/designer/src/lib/core/state/designerOptions/designerOptionsInterfaces.ts Defines the host capability.
libs/designer/src/lib/core/state/connection/connectionSlice.ts Stores and remaps expression mappings.
libs/designer/src/lib/core/state/connection/connectionSelector.ts Adds expression-aware selectors and copy data.
libs/designer/src/lib/core/state/__test__/connectionSlice.spec.ts Tests exact ServiceProvider keys.
libs/designer/src/lib/core/queries/connector.ts Preserves case-sensitive query keys.
libs/designer/src/lib/core/queries/connections.ts Prevents expression resource requests.
libs/designer/src/lib/core/mcp/utils/serializer.ts Serializes only concrete MCP references.
libs/designer/src/lib/core/index.ts Exports expression APIs.
libs/designer/src/lib/core/configuretemplate/utils/helper.ts Filters non-concrete template mappings.
libs/designer/src/lib/core/actions/bjsworkflow/serializer.ts Serializes expressions and preserved inputs.
libs/designer/src/lib/core/actions/bjsworkflow/operationdeserializer.ts Preserves imported expression inputs.
libs/designer/src/lib/core/actions/bjsworkflow/initialize.ts Creates manual dynamic-schema inputs.
libs/designer/src/lib/core/actions/bjsworkflow/copypaste.ts Preserves and remaps expressions on copy/paste.
libs/designer/src/lib/core/actions/bjsworkflow/connections.ts Implements expression updates and metadata refresh.
libs/designer/src/lib/common/models/workflow.ts Extends the connection-mapping model.
libs/designer-v2/src/lib/ui/panel/nodeDetailsPanel/tabs/parametersTab/identityselector.tsx Handles absent concrete references.
libs/designer-v2/src/lib/ui/panel/nodeDetailsPanel/tabs/parametersTab/connectionDisplay.tsx Displays runtime expressions and status.
libs/designer-v2/src/lib/ui/panel/connectionsPanel/selectConnection/selectConnection.tsx Integrates expression selection.
libs/designer-v2/src/lib/ui/panel/connectionsPanel/selectConnection/connectionExpression.tsx Adds the expression-authoring UI.
libs/designer-v2/src/lib/ui/panel/connectionsPanel/connectionsPanel.tsx Gates automatic connection creation.
libs/designer-v2/src/lib/ui/panel/connectionsPanel/allConnections/allConnections.tsx Lists runtime-selected connections.
libs/designer-v2/src/lib/ui/panel/connectionsPanel/__test__/connectionsPanel.spec.tsx Tests panel and reentry behavior.
libs/designer-v2/src/lib/ui/mcp/parameters/parameterfield.tsx Safely resolves concrete MCP references.
libs/designer-v2/src/lib/ui/mcp/parameters/ParameterEditor.tsx Safely resolves editor references.
libs/designer-v2/src/lib/ui/mcp/panel/connector/usePanelTabs.tsx Excludes expression mappings from MCP references.
libs/designer-v2/src/lib/ui/mcp/connectors/ListConnectors.tsx Handles union connection mappings.
libs/designer-v2/src/lib/core/utils/parameters/helper.ts Suppresses unsupported dynamic requests.
libs/designer-v2/src/lib/core/utils/parameters/dynamicdata.ts Adds dynamic-connection invocation guards.
libs/designer-v2/src/lib/core/utils/middleware.ts Supports expression undo and parameter renaming.
libs/designer-v2/src/lib/core/utils/connectors/connections.ts Resolves optional design-time references.
libs/designer-v2/src/lib/core/utils/connectors/connectionExpression.ts Implements expression utilities.
libs/designer-v2/src/lib/core/utils/__test__/middleware.spec.ts Tests expression-aware history behavior.
libs/designer-v2/src/lib/core/state/undoRedo/undoRedoTypes.ts Registers new undoable operations.
libs/designer-v2/src/lib/core/state/operation/operationMetadataSlice.ts Preserves inputs and dynamic values.
libs/designer-v2/src/lib/core/state/mcp/selector.ts Ignores expression mappings in MCP grouping.
libs/designer-v2/src/lib/core/state/designerOptions/designerOptionsInterfaces.ts Defines the host capability.
libs/designer-v2/src/lib/core/state/connection/connectionSlice.ts Stores and remaps expression mappings.
libs/designer-v2/src/lib/core/state/connection/connectionSelector.ts Adds expression-aware selectors.
libs/designer-v2/src/lib/core/state/__test__/connectionSlice.spec.ts Tests exact ServiceProvider keys.
libs/designer-v2/src/lib/core/queries/connector.ts Preserves case-sensitive query keys.
libs/designer-v2/src/lib/core/queries/connections.ts Prevents expression resource requests.
libs/designer-v2/src/lib/core/mcp/utils/serializer.ts Serializes only concrete MCP references.
libs/designer-v2/src/lib/core/index.ts Exports expression APIs.
libs/designer-v2/src/lib/core/configuretemplate/utils/helper.ts Filters non-concrete template mappings.
libs/designer-v2/src/lib/core/actions/bjsworkflow/updateNodeFromCodeView.ts Synchronizes Code View mappings.
libs/designer-v2/src/lib/core/actions/bjsworkflow/serializer.ts Serializes expressions and preserved inputs.
libs/designer-v2/src/lib/core/actions/bjsworkflow/operationdeserializer.ts Preserves imported expression inputs.
libs/designer-v2/src/lib/core/actions/bjsworkflow/initialize.ts Creates manual dynamic-schema inputs.
libs/designer-v2/src/lib/core/actions/bjsworkflow/copypaste.ts Preserves and remaps expressions on copy/paste.
libs/designer-v2/src/lib/core/actions/bjsworkflow/connections.ts Implements expression updates and metadata refresh.
libs/designer-v2/src/lib/core/actions/bjsworkflow/__test__/updateNodeFromCodeView.spec.ts Tests Code View mapping synchronization.
libs/designer-v2/src/lib/common/models/workflow.ts Extends the connection-mapping model.
libs/designer-ui/src/lib/editor/__test__/connection-expression-editor-helper.tsx Supports Lexical editor tests.
apps/vs-code-react/src/app/designer/appV2.tsx Enables the V2 capability.
apps/vs-code-react/src/app/designer/app.tsx Enables the V1 capability.
apps/Standalone/src/designer/app/LocalDesigner/localDesignerV2.tsx Enables expressions for local Standard V2.
apps/Standalone/src/designer/app/LocalDesigner/localDesigner.tsx Enables expressions for local Standard V1.
apps/Standalone/src/designer/app/AzureLogicAppsDesigner/laDesignerV2.tsx Enables expressions in Standalone V2.
apps/Standalone/src/designer/app/AzureLogicAppsDesigner/laDesigner.tsx Enables expressions in Standalone V1.
apps/docs/docs/api-reference.md Documents runtime connection selection.
Review details
  • Files reviewed: 86/86 changed files
  • Comments generated: 2
  • Review effort level: Balanced

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread libs/designer-v2/src/lib/core/actions/bjsworkflow/initialize.ts
Comment thread libs/designer/src/lib/core/actions/bjsworkflow/initialize.ts Outdated
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

📊 Coverage Check

The following changed files need attention:

⚠️ libs/designer-v2/src/lib/core/actions/bjsworkflow/connections.ts - 62% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/core/actions/bjsworkflow/copypaste.ts - 48% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/core/actions/bjsworkflow/initialize.ts - 43% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/core/actions/bjsworkflow/serializer.ts - 54% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/core/configuretemplate/utils/helper.ts - 30% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/core/mcp/utils/serializer.ts - 16% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/core/queries/connections.ts - 58% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/core/queries/connector.ts - 58% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/core/state/connection/connectionSelector.ts - 31% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/core/state/connection/connectionSlice.ts - 59% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/core/state/operation/operationMetadataSlice.ts - 49% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/core/utils/connectors/connections.ts - 43% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/core/utils/parameters/dynamicdata.ts - 60% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/core/utils/parameters/helper.ts - 54% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/ui/panel/connectionsPanel/allConnections/allConnections.tsx - 66% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/ui/panel/connectionsPanel/selectConnection/selectConnection.tsx - 76% covered (needs improvement)
⚠️ libs/designer-v2/src/lib/ui/panel/nodeDetailsPanel/tabs/parametersTab/identityselector.tsx - 9% covered (needs improvement)

Please add tests for the uncovered files before merging.

Limit the feature to Designer V2 and remove host opt-in wiring. Preserve optional manual-input requiredness and relocate the Lexical test helper outside production coverage instrumentation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@rllyy97 Riley Evans (rllyy97) changed the title feat(designer): support runtime ServiceProvider connection expressions feat(designer-v2): enable runtime connection expressions by default Sep 9, 2026
Exercise concrete, runtime-expression, and missing connection mappings through MCP selectors, connector panels, and parameter editors. Cover all five previously untested MCP paths without changing production behavior or coverage policy.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@rllyy97 Riley Evans (rllyy97) changed the title feat(designer-v2): enable runtime connection expressions by default feat(designer-v2): Enable runtime connection expressions Sep 10, 2026
@rllyy97
Riley Evans (rllyy97) merged commit 0e9cf1f into main Sep 10, 2026
43 checks passed
@rllyy97
Riley Evans (rllyy97) deleted the rllyy97-dynamic-connection-properties branch September 10, 2026 20:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-validated risk:medium Medium risk change with potential impact

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants