Skip to content

Add personal credentials for shared Yamcs actions - #1766

Merged
Paul Lizer (paullizer) merged 4 commits into
paullizer-react-v2-uifrom
paullizer-personal-action-credentials
Oct 14, 2026
Merged

Paul Lizer (paullizer) merged 4 commits into
paullizer-react-v2-uifrom
paullizer-personal-action-credentials

Conversation

@paullizer

@paullizer Paul Lizer (paullizer) commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Let administrators publish global/group Yamcs actions and agents without sharing a credential across users. Add an actor-private credential framework with independent service/proxy identity bindings; other connector adapters remain follow-ons.
  • Add private credential cards and personal-source controls in classic and React. Users select, create, or rotate their identities without gaining personal action/agent authoring permissions; secrets stay outside prompts, transcripts, generic elicitation, and browser stores.
  • Save and continue resumes revision-fenced, server-owned work through existing chat/orchestration execution, including nested agents, without replaying completed operations. Access, configuration, retained documents, and identity revisions are revalidated before continuation.
  • Web/scheduler bootstrap inject authorization, identity, and source-access callbacks into lower-level credential modules, removing the reviewed import cycles. Merge the latest V2 base in 26eaad04e, preserving both credential and workflow Cosmos inventory reviews. Current application version is 0.261.337.

Scope and review notes: existing service/proxy Authorization-header restrictions remain. Private bindings, requests, and checkpoints are excluded from backup/restore and migration, requiring explicit rebinding after restore. Private partition purge is tested, but no full account-deletion endpoint exists to integrate. Existing workspace-identity expiration/reminder limitations are unchanged. OAuth/OBO and other connector integrations are outside this PR.

Linked issue

N/A. No issue was created, as requested.

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 notes and a Latest Feature card are not included. Release-note approval was unavailable; feature, fix, and user-guide documentation are included.

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

Current application version: 0.261.337. The framework was initially implemented in 0.261.333; 0.261.336 resolves the credential import-boundary findings, and 0.261.337 integrates the updated V2 base. No deployer changes.

Testing / validation

The merged local gate passed at 0.261.337: 843 tests plus 231 subtests, with external network blocked. The inventory has 1057 owners, 400 doubles, and zero review gaps. No assertions or test timeout limits were relaxed.

Backend commands below used a temporary isolated dependency overlay with the application's pinned Flask, Semantic Kernel, Cosmos, OpenAI, and Yamcs packages. Set $env:PYTHONPATH='application\single_app;functional_tests' and $env:TIKTOKEN_CACHE_DIR=(Join-Path (Get-Location) 'artifacts\credential-merge-tiktoken'); warm the declared tiktoken assets before blocking network. The overlay and its cache were removed and are not committed. npm commands ran from application\v2_ui; other commands ran from the repository root.

  • & .\artifacts\credential-merge-venv\Scripts\python.exe -c "import tiktoken; tiktoken.get_encoding('cl100k_base'); tiktoken.get_encoding('o200k_base')" - passed before network-blocked validation.
  • & .\artifacts\credential-merge-venv\Scripts\python.exe .\scripts\check_cosmos_response_boundaries.py --run-contracts - passed at 0.261.337: 843 tests and 231 subtests.
  • & .\artifacts\credential-merge-venv\Scripts\python.exe -m pytest -p test_support.cosmos_network_guard .\functional_tests\test_action_personal_credentials.py .\functional_tests\test_action_credentials_sk_continuation.py .\functional_tests\test_action_credentials_orchestration_continuation.py .\functional_tests\test_action_credentials_bootstrap.py -q --disable-warnings --tb=short - passed at 0.261.337: 49 tests, including normal/optimized real web/scheduler bootstrap, both early import orders, identity-service outages, concurrent deletion, and nested SK continuation.
  • python -m pytest .\ui_tests\test_v2_action_credentials.py .\ui_tests\test_classic_action_credentials.py -q --disable-warnings --tb=short - passed at 0.261.337: 36 browser cases.
  • node .\functional_tests\test_v2_action_personal_credentials.mjs and node .\functional_tests\test_v2_editor_assist_handoff.mjs - passed at 0.261.337.
  • npm run typecheck and npm run build - passed on the merged V2 source; the existing large-bundle warning remains.
  • python .\functional_tests\route_tests\test_route_blueprint_policy_inventory.py, python .\functional_tests\route_tests\test_route_unauthenticated_policy_contract.py, and python .\functional_tests\route_tests\test_route_policy_test_coverage.py - passed at 0.261.337: 15, 10, and 3 checks respectively.
  • python .\functional_tests\test_docs_app_surface_coverage.py and python .\functional_tests\test_docs_site_quality.py - passed at 0.261.337: 7 and 6 checks respectively.
  • git -c core.whitespace=blank-at-eol,blank-at-eof,space-before-tab,cr-at-eol --no-pager diff --cached --check - passed before the merge commit.

Previous validation: at 0.261.336 the complete local Cosmos gate passed 837 tests plus 231 subtests, and full-file BAC/XSS checks passed for the five credential backend files. Initial Windows cold-import timeouts are recorded as historical context in the feature documentation. The initially attempted system-Python bootstrap run at 0.261.337 failed on an incompatible global OpenSSL/aiortc dependency chain; the isolated declared-pin overlay passed all 49 credential tests and the full gate.

CI note: the published 275b5b1 Cosmos workflow was cancelled after exceeding its 20-minute job limit at about 54% completion; the other reported checks passed. This local merge validation does not establish that GitHub CI is passing. Current-head checks must complete on 26eaad04e.

A broader compatibility run at 0.261.336 with & .\artifacts\credential-review-venv\Scripts\python.exe -m pytest -p test_support.cosmos_network_guard .\functional_tests\test_agent_delegation_runtime.py .\functional_tests\test_agent_delegation_auth_handoff.py .\functional_tests\test_agent_delegation_entrypoints.py .\functional_tests\test_action_workspace_identity_scoping.py -q --disable-warnings --tb=short had 72 passes and nine failures in existing AST-extracted entrypoint fixtures with missing globals. The loader, workflow, and chat source files were unchanged by that review fix; no unrelated fixture repairs were bundled.

Manual UI inspection covered desktop light and mobile dark layouts, long destination labels, and overflow.

Documentation

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

Added docs/explanation/features/PERSONAL_ACTION_CREDENTIALS.md, docs/guides/personal-action-credentials.md, and docs/explanation/fixes/ACTION_CREDENTIAL_IMPORT_BOUNDARIES_FIX.md. Updated Yamcs, workspace identities, shared-action/agent guides, chat controls, logging tags, current-version metadata, and reviewed storage evidence.

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

Add actor-private credential bindings, private chat cards, and revision-fenced continuation, with Yamcs as the first adapter. Support classic and React authoring and chat, preserve existing identity storage, and document lifecycle limits and validation blockers.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Preserve Ask AI handoff continuity and personal action credentials. Set the combined application version to 0.261.335 and align current-version metadata while retaining the original implementation history.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Comment thread application/single_app/agent_delegation_runtime.py Fixed
Comment thread application/single_app/agent_delegation_runtime.py Fixed
Comment thread application/single_app/functions_action_credential_continuation.py Fixed
Comment thread application/single_app/functions_action_credential_continuation.py Fixed
Comment thread application/single_app/functions_action_credential_continuation.py Fixed
Comment thread application/single_app/functions_action_credentials.py Fixed
Comment thread application/single_app/functions_action_credentials.py Fixed
Comment thread application/single_app/functions_action_credentials.py Fixed
Comment thread application/single_app/route_backend_action_credentials.py Fixed
Comment thread ui_tests/test_classic_action_credentials.py Fixed
Compose authorization, identity, and retained-source services from web and scheduler bootstrap instead of importing owners back into the credential resolver and journal. Add real cold-import, outage, and concurrent-delete regressions; remove unused imports and clarify filter/deletion control flow. Bump application version to 0.261.336.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Keep both private credential and workflow inventory evidence. Advance the combined application to 0.261.337 and record passing merged validation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@paullizer
Paul Lizer (paullizer) merged commit 46c57ba into paullizer-react-v2-ui Oct 14, 2026
11 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