Skip to content

Fix action runtime names and add safe chat recovery - #1783

Merged
Paul Lizer (paullizer) merged 3 commits into
paullizer-react-v2-uifrom
paullizer-agent-calendar-action-investigation
Oct 19, 2026
Merged

Paul Lizer (paullizer) merged 3 commits into
paullizer-react-v2-uifrom
paullizer-agent-calendar-action-investigation

Conversation

@paullizer

Copy link
Copy Markdown
Collaborator

Summary

  • Fix a shared action-registration mismatch: SimpleChat accepts hyphens in saved names, but Semantic Kernel rejects them as plugin identifiers. The failing FED action was resolved correctly, then registration failed and chat silently continued without its capability. This was not special treatment for a particular Microsoft 365 agent.
  • Use deterministic, scoped runtime-only identifiers across the primary and legacy loaders, including collisions, SQL companions, factory facades, and qualified tool-name limits. Preserve saved names, IDs, assignments, secret references, enabled operations, and permissions.
  • Add explicit pre-model recovery to classic and V2 chat: cancel/recheck, permission-aware action-editor links, optional deduplicated owner/admin reports, or one-request consent to continue without the unavailable actions. Preserve existing credential, sign-in, and approval flows.
  • Bind continuation to the actor, conversation, unchanged request/agent/action configuration, expiry, and a one-shot ETag claim. Keep global-agent kernels request-local, reject stale browser responses, and prevent delegated/captured agents from inheriting the parent request's exclusions. Shared bridges and mid-run failures remain fail-closed without whole-request replay.

Scope: No production deployment, saved-agent migration, permission change, or calendar/email send/replay. Successful registration is not proof of Graph authentication or delivery; live provider delivery remains unverified.

Linked issue

Fixes #1781

Release Notes & Latest Features

  • New Feature
  • Bug Fix
  • UI Enhancement
  • Breaking Change
  • Internal only

Is this visible to end users?

  • Yes
  • No

Is this admin-facing (Admin Settings, governance, deployment, config)?

  • Yes
  • No

Should this become a Latest Feature card?

  • Yes
  • No
  • Already added

Screenshot needed for the card?

  • Yes
  • No
  • Attached

Release-note and issue-comment updates were offered separately. Approval was unavailable, so neither was posted; the implementation and fix documentation are included here.

Version bump

  • application/single_app/config.py VERSION third segment bumped, or not needed because this is docs-only
  • deployers/version.txt bumped, or not needed because deployers/ was not changed

Application version: 0.261.346 -> 0.261.347. No deployer changes.

Testing / validation

Backend commands used an isolated Python environment with repository-pinned Semantic Kernel 1.39.4 and Azure Cosmos SDK 4.9.0. PYTHONPATH included application\single_app and functional_tests. No repository dependency manifests or shared Python packages were changed.

Command Result
python -m pytest -q -p no:cacheprovider functional_tests\test_action_runtime_names.py functional_tests\test_action_runtime_recovery.py functional_tests\test_m365_loader_preflight.py functional_tests\test_m365_provider_core.py functional_tests\test_m365_chat_preflight_order.py functional_tests\test_orchestration_action_runtime.py -x --tb=short 256 passed. Includes real nonstreaming/streaming admission before kernel initialization or user-message persistence, cold imports in both orders under normal/optimized Python, and nested-execution isolation.
python scripts\check_cosmos_response_boundaries.py --run-contracts 1,082 passed; 244 subtests passed, with network access blocked. 1,066 owners, 410 doubles, zero inventory review gaps.
python -m pytest -q -p no:cacheprovider ui_tests\test_chat_action_recovery.py --tb=short 23 passed across classic/V2, desktop/mobile, keyboard cancellation, reporting, restored drafts, safe links/text, and late-response races.
python -m pytest -q -p no:cacheprovider ui_tests\test_v2_action_credentials.py --tb=short 22 passed, in a separate process to preserve existing Playwright fixture isolation.
npm --prefix application\v2_ui run typecheck Passed.
npm --prefix application\v2_ui run build Passed.
node --check application\single_app\static\js\chat\chat-action-recovery.js Passed.
node --check application\single_app\static\js\chat\chat-streaming.js Passed.
python functional_tests\route_tests\test_route_blueprint_policy_inventory.py 15 passed.
python functional_tests\route_tests\test_route_unauthenticated_policy_contract.py 10 passed.
python functional_tests\route_tests\test_route_policy_test_coverage.py 3 passed.
python functional_tests\test_docs_app_surface_coverage.py 7/7 passed; regenerated surface inventory is current and has no content change.
python functional_tests\test_docs_site_quality.py 6/6 passed.
git diff --check Passed.

Known baseline limitation: python -m pytest -q -p no:cacheprovider functional_tests\test_agent_delegation_runtime.py functional_tests\test_agent_delegation_auth_handoff.py functional_tests\test_agent_delegation_workflow_actor.py -x --tb=short produced 57 passed, 1 failed. The unchanged workflow-actor AST harness omits _prepare_workflow_xsd_generation; the same failure was reproduced against untouched HEAD source. Neither that workflow owner nor its harness is changed by this PR. This is not a claim that the entire repository suite is green.

Documentation

  • Release notes updated, or not needed
  • Feature documentation updated, or not needed
  • Fix documentation updated, or not needed

Added AGENT_ACTION_RECOVERY.md and ACTION_RUNTIME_NAME_COMPATIBILITY_FIX.md with version, contracts, validation, and limitations. Updated the agent/action guide, notification guide, and chat-controls reference. Release notes remain pending approval.

Security checklist

  • New Flask routes include @swagger_route(security=get_auth_security())
  • Settings sent to non-admin frontends use sanitize_settings_for_user()
  • Browser JavaScript is served from local SimpleChat static assets only; no CDN-hosted JS
  • No secrets, keys, connection strings, or local-only artifacts are included

New endpoints use the existing authenticated Blueprint, CSRF-protected writes, no-store responses, current object-level authorization, and safe projected action metadata rather than settings or raw exceptions. Reports exclude prompts, conversation IDs, credentials, and provider payloads. New recovery surfaces passed the repository XSS and broken-access-control guardrails.

Use scoped runtime-only action identifiers across primary and fallback loaders without changing saved identities or permissions. Add explicit pre-model action recovery, authorized remediation and deduplicated reporting to classic and V2 chat, with one-shot continuation and nested-execution isolation.

Fixes #1781

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Integrate the five latest base commits and preserve both reviewed Cosmos inventory additions: action-recovery fault injection and workspace metadata SDK projections. Application changes and chat documentation merged without manual code changes.

Validation: 375 focused backend tests, 1091 Cosmos contract tests with 244 subtests, 32 browser integration tests, 28 route-policy tests, 13 documentation checks, V2 typecheck/build, and classic JavaScript syntax checks passed.

Refs #1781

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Comment thread application/single_app/static/js/chat/chat-action-recovery.js
Comment thread application/single_app/semantic_kernel_loader.py Outdated
Comment thread ui_tests/test_chat_action_recovery.py
Comment thread functional_tests/test_action_runtime_recovery.py Outdated
Comment thread application/single_app/semantic_kernel_loader.py
Comment thread application/single_app/route_backend_chats.py
Comment thread application/single_app/functions_action_recovery.py
Comment thread application/single_app/functions_action_recovery.py
Comment thread application/single_app/functions_action_recovery.py
Comment thread application/single_app/functions_action_recovery.py
Comment thread application/single_app/functions_action_recovery.py
Refs #1781

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@paullizer
Paul Lizer (paullizer) merged commit 385eeff into paullizer-react-v2-ui Oct 19, 2026
12 checks passed
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.

2 participants