Repository navigation
Bring V2 Operations admin settings to parity with the classic page - #1675
Merged
Paul Lizer (paullizer) merged 6 commits intoOct 7, 2026
Merged
Paul Lizer (paullizer) merged 6 commits into
Paul Lizer (paullizer) merged 6 commits into
Conversation
Describe all seven Operations sections in the V2 settings schema so none fall back to guessed enable_* switches, and add readouts and guides that show what a save will do before it is made. - Share the schedule and logging-timer rules between the classic save, the V2 normalizer and the background checks (functions_logging_timers, functions_control_center_schedule). Turnoff times are stored in UTC; legacy naive values are still read as server-local time. - V2 validates refresh time and timezone, clamps timer durations per unit, and derives turnoff times and the next refresh on save. - Add refresh schedule (both zones, Use my timezone), Control Center access table, logging turnoff, restart-pending, endpoint links, stored log cleanup, and Document Access Index diagnostics with a DAI link. - Port the role setup, health check and Swagger modals as in-app guides, correcting statements the classic modals got wrong. - Fix the DashboardReader registry entry, rewrite docs/admin/operations.md, document enable_dai_debug instead of exempting it, bump to 0.261.260. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Also correct the feature note: the shared timer and schedule helpers keep the classic page's recalculation rules rather than changing them. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The picker shows the reader's own clock format, so an empty value now gets its own message instead of one about 24-hour clocks. API callers sending an unreadable time still get the HH:MM guidance. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
V2 already showed enable_dai_debug as an unexplained fallback switch; it was the classic page that had no control for it. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
, #1671, #1674) and renumber the Operations settings parity to 0.261.269 Conflict resolutions: - admin_settings_fields.py: keep the full Operations block. The Application Insights and Health Check declarations #1670 added beside Appearance are superseded by it, and its mixed-source telemetry switch moves into the Operations Application Insights section, after the global logging readouts. Keep #1668's on_enable documentation and both sides' V2_ONLY_FIELDS entries. - route_backend_v2.py: fold content_understanding_supported into _build_runtime_flags. - SettingsSection.tsx, AdminSettingsPage.tsx, adminFields.ts: keep both the section guide and runtimeFlags props, and on_enable beside the Operations field properties. - operations.md, release_notes.md and tests: keep both sides. Both enable_dai_debug and enable_mixed_source_development_telemetry are documented rather than exempted, and Workspaces and Operations are both fully described. - Renumber this branch's 0.261.260 references to 0.261.269; the base's own 0.261.260 Web Search fix references are unchanged. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add same-origin and HTTPS link guards for Operations admin links. Remove unused control-center schedule re-exports and document intentional schedule parse fallbacks. Update focused regression coverage for the guarded links and schedule helper imports. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer)
merged commit Oct 7, 2026
931b426
into
paullizer-react-v2-ui
11 checks passed
Paul Lizer (paullizer)
added a commit
that referenced
this pull request
Oct 7, 2026
… 0.261.270 The Operations settings parity (#1675) took 0.261.269, so this pull request's version, release notes section and version references move to 0.261.270. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer)
added a commit
that referenced
this pull request
Oct 7, 2026
…ditors to 0.261.270 Brings in the V2 Operations settings parity (#1675), which took 0.261.269, the version this pull request had just moved to. - AdminSettingsPage.tsx: kept both sides in all three conflicts. Imports keep the global agents, global actions and approvals components and the base's Operations helpers; the Global agent delegation imports stay removed, because nothing on the page uses that card any more. Helpers keep selectCategory (category scroll reset) beside the base's readSwitch and renderRelatedSection. Overlays keep the unsaved-settings prompt for the global editors and the base's section guide dialog. - admin_settings_fields.py auto-merged; the global manager components are intact and no delegation card was reintroduced. - config.py: VERSION 0.261.270 (both sides had moved to 0.261.269). - release_notes.md: this pull request's section moves to v0.261.270 above the base's v0.261.269 Operations section, which is kept unchanged. - Renumbered this pull request's 30 other 0.261.269 references; the fix doc's version transition now reads 0.261.269 -> 0.261.270. The base's own 0.261.269 references are untouched. - docs/_data/app_surface.yml regenerated; unchanged. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
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
The V2 Operations group (Control Center and Logging & Health) was mostly undescribed in the V2 settings schema. Most of it rendered as guessed
enable_*switches such as "Dai debug", and three sections did not render at all, so admins had to go back to the classic page for the refresh schedule, health checks, Swagger, logging timers and log cleanup. This PR brings the group to full parity using the V2 design language, and shows what a save will do before it is made.admin_settings_fields.py, so nothing falls back to the key-name scan. Automatic Data Refresh, Health Check and API Documentation appear in V2 for the first time, andenable_dai_debuggets a real control with a link to the DAI Metrics card it affects.functions_logging_timers.pyandfunctions_control_center_schedule.py, are now used by the classic save, the V2 normalizer and the background checks. Logging turnoff times are stored in UTC, and legacy naive values are still read as server-local time, so timers set before the upgrade end when they were meant to.Worth a careful look
02:00/America/New_York.GET /api/v2/admin/settings(admin-only) addssection_guides, three boolean runtime flags (appinsights_connection_configured,appinsights_global_logging_active,swagger_routes_registered) and anappinsights_connectionstatus readout. The connection string never leaves the server.functions_control_center_schedule.py.background_tasks.py,route_backend_control_center.pyandroute_frontend_admin_settings.pyimport them from there, andfunctions_control_center.pykeeps only the one it uses.swagger_wrapper.pyaddsSWAGGER_BLUEPRINT_NAMEandare_swagger_routes_registered(app).safeSameOriginUrlkeeps an endpoint address on this deployment, refusing other hosts andjavascript:.safeHttpsUrlkeeps documentation links to plain HTTPS. A link that fails its guard is not shown.admin_app_roles.py: the ControlCenterDashboardReader entry no longer claims to depend on the ControlCenterAdmin requirement, becausecontrol_center_requiredadmits it on its own.content_understanding_supportedflag is now reported through_build_runtime_flags().Screenshots
These are from the UI test fixture, with synthetic data.
Linked issue
N/A - no issue was filed for this work.
Release Notes & Latest Features
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-only (0.261.268 -> 0.261.269)deployers/version.txtbumped, or not needed becausedeployers/was not changedV2
7bc21b612(#1662 through #1674) is merged in, and this change is renumbered from 0.261.260 to 0.261.269. The base's own 0.261.260 references, from the Web Search nested-settings fix, are unchanged.Testing / validation
All results below are from the merged tree:
python -m pytestover all 10ui_tests\test_v2_admin_*.pysuites with-m ui -q: 107 passed. This includes this PR's 21 Operations tests, which drive the built SPA with the real schema and normalizer behind intercepted APIs, in light and dark at 390 and 1920 px, including large text. It also includes the base's mixed-source, enhanced extraction, rail collapse, search cache and file sync suites. After the link guards landed, I re-ran the Operations suite: 21 passed.python scripts\check_xss_sinks.py --base-sha <base> --head-sha <head> <changed application files>: passed (thexss-sink-checkjob)python functional_tests\test_v2_admin_operations_parity.py: 11/11 passed (new)python functional_tests\test_v2_admin_operations_derivations.py: 14/14 passed (new). Also runstest_v2_admin_operations_logic.ts, with 29 TypeScript checks. These include daylight-saving gaps and overlaps that mirror Pythonzoneinfo, and the link guards refusing other hosts,javascript:and non-HTTPS links.npx tsc -b --noEmitandnpm run buildinapplication/v2_ui: passedfunctional_tests\test_v2_admin_*.pysuite (33), run individually withpython <file>, plustest_admin_app_role_settings_consistency.py(3/3): all pass except the pre-existing failures below.test_mixed_source_settings_derivation.py9/9,test_app_settings_auxiliary_writers.py103 passed, andtest_codeql_import_cycle_lazy_imports.py2/2.test_control_center_auto_refresh_schedule.pyandtest_admin_update_banner_version_comparison.py: passed.test_route_blueprint_policy_inventory.py12/12,test_route_unauthenticated_policy_contract.py7/7,test_route_policy_test_coverage.py2/2test_docs_app_surface_coverage.py7/7 (including the inventory sync check) andtest_docs_site_quality.py6/6python functional_tests\test_pytest_return_false_guard.py: 7/7.git diff --check: clean.These failures are pre-existing and unrelated. The first three fail identically on a clean checkout of
7bc21b612. The last two failed the same way without this PR's changes, before the merge:test_v2_admin_security_parity.py7/8 (chat_content_settings_presentunclaimed)test_v2_admin_settings_schema.py10/11 (m365_trusted_download_hostsdefault type)test_content_understanding_extraction_engine.py18/19 (expects"azure_content_understanding_key",infunctions_settings.py, which this PR does not touch)test_logging_tag_standardization.py(nonstandard workflow logging tags)test_docs_release_notes_integrity.py(generated release-notes pages are stale)Documentation
v0.261.269section)docs/explanation/features/V2_ADMIN_OPERATIONS_SETTINGS.md, and rewrotedocs/admin/operations.md, which was boilerplate, with every section anchor kept and Tie mixed-source behavior to Enhanced Citations and describe its settings #1670's mixed-source telemetry content included.enable_dai_debugis now documented instead of exempted from docs coverage, and[LOGGING_TIMERS]was added todocs/reference/logging-tags.md.Security checklist
@swagger_route(security=get_auth_security())(no new routes; the cleanup UI reuses the existing admin endpoint)sanitize_settings_for_user()(only the admin-only V2 settings payload changed; App Insights state is returned as booleans and fixed messages)ui_tests/artifactsis git-ignored)