Integrate Development updates into React V2 - #1508
Merged
Paul Lizer (paullizer) merged 309 commits intoSep 21, 2026
Merged
Paul Lizer (paullizer) merged 309 commits into
Paul Lizer (paullizer) merged 309 commits into
Conversation
Ground segments commonly publish Yamcs through a reverse proxy, such as Apache, that challenges every request with HTTP Basic authentication against a directory before the request reaches Yamcs. Yamcs behind that proxy often has no authentication of its own. The Yamcs action could authenticate to Yamcs but had no way to answer a front-door proxy challenge, so such a server was unreachable even when every Yamcs setting was correct. Adds an optional Reverse Proxy Authentication layer, independent of the Yamcs authentication method and off by default so a directly reachable server, such as a local simulator, is unaffected. Credentials can be entered inline, with the password stored in Key Vault, or supplied by a reusable username/password identity. The proxy credential gets its own identity reference, separate from the Yamcs credential, so one action can use both and a rotating temporary password is maintained once under Workspace > Identities instead of by editing the action. Proxy Basic auth combines with the none and api_key Yamcs methods. It is blocked for username_password and bearer_token: only one Authorization header can be sent, and the Yamcs token exchange would itself be refused by the proxy. The rule is enforced in the plugin, the health checker, the test-connection route, and the action modal, so the conflict surfaces before an agent depends on it. Implementation notes: - yamcs-client 2.1.0 already ships BasicAuthCredentials, so no dependency change is needed. It is imported separately from the other credential classes so a deployment on an older client keeps working for every non-proxy method. - basic_auth_password is registered in YAMCS_SENSITIVE_ADDITIONAL_FIELDS, which routes it through the existing Key Vault store, redact, retrieve, and delete handling. - The proxy identity reference is resolved inside validate_action_identity_reference and hydrate_action_identity_reference, so personal, group, and global action paths pick it up unchanged. UI hydration returns the identity username but never its password. - Turning the toggle off preserves the stored credential rather than blanking it, which would drop the Key Vault reference and orphan the secret. Fixes #1435 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Validate the OAuth2 token endpoint when the token is fetched, not only when the endpoint is saved. Checking at save time leaves the request itself unguarded, because settings can be written by another path, restored from backup, or changed after validation, so code scanning was right to call this a server-side request forgery. The token URL is now revalidated against the same outbound policy as the inference endpoint and the request runs on the same pinned transport, so its addresses are validated at connection time. That transport refuses redirects, which the previous code avoided on the stated grounds that token endpoints commonly redirect. That reasoning was wrong: redirects belong to the browser-based authorization-code flow, while a client-credentials token endpoint answers a server-to-server POST with a JSON body. A regression test now asserts a blocked token URL is refused before any HTTP client is constructed. Remove backtracking from the version-segment pattern. Its optional suffix could begin with a digit, making it ambiguous with the preceding digits and quadratic on a long run of them: 8,000 characters took about 0.19s to reject and now takes 0.0003s. Requiring the suffix to begin with a letter matches exactly the same segments. Move the auth-type constants and their normalizer to the provider registry so validation no longer imports the authentication module. That removes the real coupling behind several cyclic-import findings and lets the token fetch import validation normally rather than through a deferred import whose comment would otherwise have become untrue. Drop genuinely dead imports, and declare the deliberate re-exports in functions_model_endpoint_types with __all__, since functions_settings and the provider tests import those constants through it. Close file handles in tests and stop importing the same module both ways. The remaining cyclic-import findings are pre-existing: the same single nine-module cycle is present on Development, and none of the modules in this change participate in an import-time cycle. Refs #1228 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…ease Development published v0.261.010 and v0.261.011 for the Azure Managed Redis work while this branch was using the same numbers, so both release-notes sections and config.py collided. Development's sections are authoritative and are kept exactly as published. This branch's nine sections move above them, to v0.261.012 through v0.261.020, and config.py becomes 0.261.020. The restored PR #1228 entry is renumbered too: its original v0.261.010 claim was vacated when that PR was reverted, so it re-lands alongside the fixes stacked on it. Version references in this branch's tests and feature documentation are updated to match, so each still names the version its behaviour ships in. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
… through an exception' Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Add HTTP Basic authentication to the Yamcs action for proxied servers
…ease Development published v0.261.012 for the Yamcs basic authentication work while this branch was using that number for the restored PR #1228 entry, so the release notes and config.py collided again. Development's sections are kept exactly as published. This branch's nine sections shift up one, to v0.261.013 through v0.261.021, and config.py becomes 0.261.021. Version references in this branch's tests and feature documentation move with them. The sections belonging to this branch are now identified by content rather than by a hardcoded list of numbers, so a further collision while this PR is open is resolved the same way without guessing which sections are whose. The generated release-notes pages are rebuilt from the merged source rather than hand-resolved, since they are build output. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…nts-v2 Re-land Custom model endpoint provider with the provider-coverage gaps closed
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The delegated permission GUIDs in Initialize-EntraApplication.ps1 were shifted by one entry, so the script configured permissions that did not match the names it logged: - "People.Read.All" used b340eb25-... which is actually User.ReadBasic.All - "User.ReadBasic.All" used b4e74841-... which is actually User.ReadWrite As a result People.Read.All was never granted, and User.ReadWrite - a write scope the application never uses - was granted instead. The app only requires User.Read, User.ReadBasic.All, People.Read.All and Group.Read.All (see SCOPE in application/single_app/config.py). All eight GUIDs verified against the Microsoft Graph service principal oauth2PermissionScopes. Bumps deployers/version.txt to 1.0.29.
Fix incorrect Microsoft Graph permission GUIDs in Entra app registration script
Preserve current Development export, approval, workflow, and streaming behavior while retaining fail-closed XSD ingestion and schema-validated XML publication. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Return only allowlisted XSD ingestion messages and status codes from chat uploads, with a safe fallback for unknown failures. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add XSD ingestion and schema-driven XML generation
postconfig.py provisioned and RBAC-granted a Redis cache but never wrote the
settings the application reads, leaving a placeholder:
# Scale > Redis Cache
# todo support redis cache configuration
The App Service only receives REDIS_ENTRA_TOKEN_SCOPE, and configure_sessions()
in app.py reads enable_redis_cache and redis_url from the Cosmos settings
document. Those stayed False and empty, so every deployment that enabled Redis
silently fell back to filesystem sessions and in-memory caching.
postconfig now writes enable_redis_cache, redis_url, redis_auth_type,
redis_service_type, redis_port and redis_key when the deployment provisioned a
cache. It is skipped when no cache was provisioned so an operator-configured
external Redis is preserved.
The Bicep redisCacheKind parameter uses managed/classic while the application
uses azure_managed_redis/azure_cache_for_redis, so the value is translated
rather than passed through. Writing it through unchanged would resolve the
wrong TLS port (10000 vs 6380).
Adds functional_tests/test_postconfig_redis_cache_configuration.py, which also
cross-checks the identifiers against the SERVICE_TYPE constants in
functions_redis_client.py so the two vocabularies cannot drift apart.
Bumps deployers/version.txt to 1.0.30.
Write Redis cache settings during post-deployment configuration
Fixes #1472 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…invites Fix group-scoped conversation invite source storage
Fixes #1477 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Make explicit action-type item policies authoritative during governance checks. Previously, a feature-level allow could still permit an action type such as Azure Maps even when an explicit personal_action_type policy existed with allow_all=false and no allowed principals. This updates action-type enforcement so: - feature-level policy grants access only when no explicit item policy exists - explicit item policies must pass once they are present - empty explicit allowlists correctly block the targeted action type
[BREAKING] Fix cross-worker settings consistency and Redis Explorer
with an identity that lacks the required SimpleChat app role and show the current signed-in account on the access-denied page.
Promote Development to Staging (v0.261.027)
Use tenant-scoped Entra Cosmos access for managed-identity deployments without automatic firewall edits or silent key fallback. Scope hook environment lookups and POSIX role operations to the selected deployment. Consolidate Redis configuration, publish settings through the shared fenced OCC store, and create only missing Search indexes from application schemas. Include Windows/POSIX execution and concurrency regressions plus deployment documentation.
Promote Staging to main (v0.261.027)
Bumps the github-actions group with 1 update in the / directory: [azure/login](https://github.com/azure/login). Updates `azure/login` from 3.0.1 to 3.1.0 - [Release notes](https://github.com/azure/login/releases) - [Commits](Azure/login@f5d393a...a641126) --- updated-dependencies: - dependency-name: azure/login dependency-version: 3.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com>
Reject explicitly empty nested source policies and non-boolean partial opt-ins, preserve recognized Analyze origin semantics, and keep the bounded reader additive to the committed keyword interface. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
React V2 already includes Analyze through workflow PR #1484. Resolve the original and cherry-picked history conflicts while preserving the integrated v0.261.112 tree unchanged. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Make Analyze results readable and reusable across chat and workflows
Refs #1476 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Expose a dedicated settings tab, connect the V2 policy editor, reject failed saves truthfully, and include V2 sources in ACR builds. Refs #1476. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add matching custom rules and starter packs, gate optional AI configuration without clearing saved values, separate workspace model permissions, and show required baseline checks. Update documentation and application version to 0.261.108. Refs #1476 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Preserve screening holds across durable Analyze, concurrent model calls, checkpoint reuse, assistant publication, saved-result responses and exports. Retain embedding compatibility and workflow budget guards alongside strict screening credentials. Reconcile application version 0.261.113 and documentation inventory. Refs #1476; updates #1485 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…ramework Add content screening, document quarantine, and review workflows
Initialize a blank baseline on first activation and use normal upload processing until effective checks exist. Preserve existing holds, saved policies, and policy drafts across classic and React V2 settings changes. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…orkflow Allow Content Screening to stay enabled with an empty policy
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Merge the current React V2 screening baseline, preserve screening-aware artifact delivery, and record scoped validation and live acceptance limits. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Integrate the current React V2 baseline and align the Analyze release, documentation and regression headers with the next patch version. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Stabilize Analyze planning, downloads, and mobile chat
Introduce opt-in v3 structured paths, typed conditions, scoped durable executions, exact result/publication identities, and native V2 List authoring and run inspection. Preserve legacy workflows and document the independently releasable M4A slice in application 0.261.116. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Keep document_results distinct from record collections when loading complete-record pages, with legacy and structured result-reader coverage. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add structured workflow control flow and V2 List tools (M4A)
Extend the merged M4A v3 runner with frozen authorized inputs, execution-scoped serial loops, exact paged Collect, locally metered reporting, admin item limits, and V2 List authoring and inspection. Preserve legacy contracts and defer M4C/M5. Bump application to 0.261.117. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add M4B serial workflow loops and exact Collect
Add opt-in Submitted, Approved, and Indexed-ready completion for native Analyze artifacts in structured workflows. Reuse exact publication receipts and native lifecycle proof across waits, retries, and worker restarts while preserving legacy behavior. Include List controls, closed regressions, documentation, and application version 0.261.118. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…n-completion Add durable workflow publication completion policies (M4C-1)
Export complete saved workflow records as exact JSON through the shared generated-file framework, with source-bound recovery, authorized reads, and existing publication completion semantics. Add V2 List controls, regression coverage, and documentation; bump the application to 0.261.119. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…blication M4C-2: publish exact saved workflow and Collect outputs
Implement typed state, frozen finite batch policy, durable manual continuation, mixed iteration identities, authorized inspection, and V2 authoring. Preserve the existing exact saved-record export and publication contracts. Bump the application to 0.261.120. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
M4C-3: add finite Repeat-until workflows
Add saved, draft-preview, and exact frozen-run Flow views over the existing compiler and runtime. Reuse bounded execution inspectors, retain temporary layout isolation and source authorization, and add offline regression coverage and documentation for version 0.261.121. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…-handoff Add read-only workflow Flow inspection (M5A)
Restore historical merge intent and integrate M365 durable workflows, guarded Custom embeddings, and native administration surfaces while preserving Development contracts. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Preserve the verified Development integration while incorporating M5B visual authoring and M5C history. Retain Microsoft 365 Run as in history and preview contracts, with cross-surface and scoped browser regressions. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer)
merged commit Sep 21, 2026
1f6b444
into
paullizer-react-v2-ui
2 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
f1be106e) into the existing React V2 work through a merge-preserving rebase and integration repairs. The base ispaullizer-react-v2-ui, notDevelopmentormain.The current React V2 base (
da39b2f6, including #1506 and #1507) is incorporated by merge commitebffe973. Historical replay conflicts were distinguished from actual target-side changes using the preserved pre-rebase snapshot. The merge retains both parent histories and resolves the actual editor, version, and release-history overlaps.Development's remote-only MCP policy is intentionally retained: local/STDIO MCP remains disabled. Only the PR head branch was pushed; Development, main, and the React V2 target branch were not modified.
Linked issue
N/A. This branch integration was requested directly; no associated issue was supplied.
Release Notes & Latest Features
The breaking-change flag calls out retention of Development's remote-only MCP policy for React V2 configurations that previously used local/STDIO MCP.
Is this visible to end users?
Is this admin-facing (Admin Settings, governance, deployment, config)?
Should this become a Latest Feature card?
Screenshot needed for the card?
Version bump
application/single_app/config.pyVERSIONthird segment bumped, or not needed because this is docs-onlydeployers/version.txtbumped, or not needed becausedeployers/was not changedApplication version:
0.261.124. The integrated deployer version is1.0.31, compared with1.0.26on the React V2 target. Compiling the merged Bicep with version0.44.1reproduced the checked-in deployment JSON exactly; the subsequent authoring merge introduced no deployer changes.Testing / validation
npm run buildinapplication/v2_ui: final combined TypeScript and production build passed.node --testacrosstest_workflow_authoring_history.js,test_workflow_authoring_session.js,test_workflow_field_drafts.js,test_workflow_flow_authoring_commands.js, andtest_workflow_m365_run_as_client.js: 147 passed.python -m pytest -q functional_tests/test_workflow_flow_authoring.py functional_tests/test_workflow_authoring_history.py: 68 passed, including real preview/Save field parity and equal authored digests. The durable/M365 integration and continuation cases also passed (31).test_route_blueprint_policy_inventory.py,test_route_unauthenticated_policy_contract.py, andtest_route_policy_test_coverage.pyunderfunctional_tests/route_tests/.python functional_tests/test_docs_app_surface_coverage.pyandpython functional_tests/test_docs_site_quality.py: 7/7 and 6/6 passed. Python syntax and whitespace checks passed, and the final merge changed only the 40 incoming paths plus directly related integration documentation and the scoped test fixture.Validation used local browser fixtures and controlled service boundaries. No live Azure/Microsoft 365 operations or deployments were performed. The final authoring coverage includes the combined tree with #1506/#1507.
Documentation
A separate release-note entry for this integration was not added; the incoming M5C release entry and existing historical entries were retained. Integration decisions and validation are documented in
docs/explanation/fixes/DEVELOPMENT_REBASE_INTEGRATION_FIX.md; workflow guides, Undo/Redo documentation, and the application-surface inventory remain aligned.Security checklist
@swagger_route(security=get_auth_security())sanitize_settings_for_user()