Repository navigation
Add Backup & Recovery to V2 Admin Settings with V1 parity - #1682
Merged
Paul Lizer (paullizer) merged 5 commits intoOct 7, 2026
Merged
Paul Lizer (paullizer) merged 5 commits into
Paul Lizer (paullizer) merged 5 commits into
Conversation
V2 listed the Backup & Recovery group but showed "No settings match" for it. Each of its nine sections now has a V2 card with parity to the classic page, over the existing admin-only data-management API: - Start Here readiness, Backup runs, Schedule, Storage, Encryption - Six-step Migration wizard with preflight review and live progress - Backup Inventory workbench with restore review, delete and retention cleanup - Locked Cosmos DB editor with ETag-guarded saves - Job history workbench with live detail, retry/resume and cancel Backup settings join the page Save bar and save after the main settings. Actions that run against saved settings save first; retry never does. A cross-document guard asks to save all when Enhanced Citations or Key Vault settings have unsaved edits, and leaving the page with unsaved work asks first. Also fixes the literal "&" in the Backup Inventory & Restore nav label, approves the reviewed migrationManifestUrl builder in the XSS sink checker, and documents the group and the V2 save model. Version 0.261.260. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Parity, design and code audits compared every classic Backup & Recovery control with the V2 cards. Fixes for the verified gaps: - Migration: All asks the server for each scope's count and totals the principal scopes, as the classic page does; a failed count waits for Retry instead of re-requesting. A known total of 0 blocks review. Confirm now shows the server-normalized plan from the review, and Validate Cosmos access reports data-copy access. Empty searches say "No matches found." - Restore: a destination is required only for the selected surfaces, and the create-only copy now says the review blocks when the destination Cosmos DB or AI Search already holds data. - Inventory and Jobs step back a page when a later page empties; deleting a backup clears it from Job detail; stacked workbenches scroll the selected detail into view. - Accessibility and copy: contextual names for the Start Here buttons, latest full backup kept by default, storage-test and RU Boost guide notes, no duplicate unlock toast. Docs: the settings tables in docs/admin/backup-recovery.md are rewritten with verified descriptions, defaults and bounds, and the admin and feature docs describe the new behavior. Browser coverage grows from 26 to 64 tests. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Resolves conflicts with 65 target commits: - admin_settings_fields.py: keep both appended groups (Backup & Recovery components, then Operations, in navigation order) and both new field descriptors (keywords, on_enable). - AdminSettingsPage.tsx: keep both sets of imports and renderer cases, and pass fieldsByKey to computeSectionStatus alongside the Backup & Recovery statuses. The target removed agent delegation, so its delegationDirty input is dropped from the leave guard. - One navigation blocker: the target added a useBlocker for opening a global agent or action editor with unsaved settings. React Router honours one blocker at a time, so the two guards are combined. Opening an editor with only main settings unsaved keeps the editors' discard prompt; anything else asks with the page's dialog. Whether the held navigation targets an editor is decided inside the blocker function, which sees basename-relative paths (blocker.location keeps the base path). - adminFields.ts: search text includes both keywords and endpoint lists. - test_v2_admin_capability_placement.py: Backup & Recovery joins the target's fully described groups. - Version 0.261.274; the release-notes entry moves to that version. Also waits for the inventory and job lists to load before the two invalid-date-range browser tests take their request baseline, and pins a single useBlocker on the page in the functional test. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Brings in the Scale settings parity work (#1681), which also took 0.261.274. - admin_settings_fields.py: Scale joins the fully described groups in the module notes, alongside the Backup & Recovery component note. - adminFields.ts: search text includes keywords, label variants and endpoint lists. - AdminSettingsPage.tsx: keep both sets of imports; section status keeps the Backup & Recovery override and passes the target's runtimeFlags; keep the target's section-dependents and throughput-validation memos; render both the leave dialog and CosmosCapacityConfirm. Still one useBlocker. - test_v2_admin_capability_placement.py: Backup & Recovery and Scale are both fully described groups. - Version 0.261.275: the Backup & Recovery release-notes entry moves to its own section above Scale's 0.261.274, and this feature's test and doc headers follow it. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer)
merged commit Oct 7, 2026
919375b
into
paullizer-react-v2-ui
11 checks passed
Paul Lizer (paullizer)
added a commit
that referenced
this pull request
Oct 7, 2026
…61.276 Brings in Backup & Recovery (#1682), which took 0.261.275, so this branch moves to 0.261.276. Four conflicts, each resolved by keeping both sides: - admin_settings_fields.py: the related_section docstring stays. The fully described groups list Governance, Help and Scale, followed by the base's note that Backup & Recovery is described one component per section. - AdminSettingsPage.tsx: the Help component cases sit beside the base's nine data-management cases. - release_notes.md: this branch's entries move to a v0.261.276 section, above the base's v0.261.275 Backup & Recovery section. - test_v2_admin_capability_placement.py: both history lines are kept, and invariant 1 names Backup & Recovery and Help, matching the tuple, which auto-merged with both ids. The nav redirect block auto-merged beside the base's "Backup Inventory & Restore" label fix. Regenerating docs/_data/app_surface.yml leaves it unchanged. This branch's own version references move to 0.261.276; the base's 0.261.275 Backup & Recovery lines are left as they are. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer)
added a commit
to paullizer/simplechat
that referenced
this pull request
Oct 7, 2026
Brings in V2 at 919375b (microsoft#1682, VERSION 0.261.275), which also includes microsoft#1681 (VERSION 0.261.274). Conflicts: - docs/explanation/release_notes.md: V2's file byte-for-byte, with this branch's own (v0.261.256) section inserted at the very top, above V2's first section, (v0.261.275). Every V2 section is unchanged. - application/single_app/config.py merged cleanly to V2's file (VERSION 0.261.275), because this branch hadn't changed it since the last merge. The renumber commit sets the final number. 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
/api/admin/data-management/*routes. There are no backend changes.&in the "Backup Inventory & Restore" navigation label, on both the classic and V2 pages.Notes for reviewers
paullizer-react-v2-uiis merged in, atb8db49d71, including Governance (Add the Governance group to V2 Admin Settings #1680) and Scale (Bring V2 admin Scale settings to parity with the classic page #1681). Conflicts were resolved by keeping both sides, except for the two points below.useBlockerthat asks before opening a global agent or action editor with unsaved settings. React Router honours one blocker at a time and silently ignores the others, so the page now has a single guard:blocker.locationkeeps the/v2base path.useBlocker.scripts/check_xss_sinks.pynow listsmigrationManifestUrlas a reviewed same-origin URL builder. It isapiUrl()over a literal prefix and an encoded job id, and a functional test pins that shape. Worth a look since it is a security tool.Linked issue
N/A - no tracking 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-only0.261.274(base) ->0.261.275. The release-notes entry is in its ownv0.261.275section, and this feature's test and doc headers use the same version.deployers/version.txtbumped, or not needed becausedeployers/was not changedTesting / validation
All results are from the branch after the base was merged in.
npx tsc -p tsconfig.json --noEmit(inapplication/v2_ui): passednpm run build(inapplication/v2_ui): passedpython -m pytest ui_tests/test_v2_admin*.py: 223 passed. This includes the 64 Backup & Recovery browser tests, which run against the built SPA with an in-memory copy of the data-management API, and the base's global agents/actions tests for its editor prompt.python functional_tests/test_v2_admin_backup_recovery.py: 4/4 passed, including 42 TypeScript logic checkspython functional_tests/test_v2_admin_backup_recovery_parity.py: 5/5 passedpython -m pytest functional_tests/test_v2_admin_*.py: 367 passed, 3 failed. None of the three is caused by this PR:test_v2_admin_security_parity.py::test_every_v1_security_field_is_claimedfails without this PR.test_v2_admin_settings_schema.py::test_defaults_match_their_field_typefails without this PR.test_v2_admin_settings_rail_collapse.py::test_the_rail_collapses_to_labelled_iconsfails on the base itself: it still expectsdisabled={delegationDirty}, which the base removed.python functional_tests/test_docs_app_surface_coverage.py: 7/7 passed. Regenerating the inventory withpython scripts/build_docs_inventory.pychanged nothing.python functional_tests/test_docs_site_quality.py: 6/6 passedpython functional_tests/test_data_management_security_patterns.py: passedpython scripts/check_xss_sinks.pyover the 24.ts/.tsxfiles this PR changes: passed. Run over every file the merge brought in, it also flagspages/workspace/AgentEditorPage.tsx:195, which is unchanged from the base.git diff --check: cleanDocumentation
docs/explanation/features/V2_ADMIN_BACKUP_RECOVERY.md.docs/admin/backup-recovery.md.Security checklist
@swagger_route(security=get_auth_security())(no new routes)sanitize_settings_for_user()(no change: the cards use the existing admin-only routes)