Repository navigation
Bring the V2 admin Help group to parity with the classic page - #1679
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
Support now declares the menu name, the Send Feedback destination and its recipient, nested under the menu switch. The card reads Needs configuration while Send Feedback has no recipient, the empty field is marked Required, and a malformed address is refused in place instead of silently cleared. Send Feedback gains its overview and the bug report and feature request forms, posting to the existing endpoint and opening the mailto draft without touching the settings draft. User-Facing Latest Features lists every announcement by release with share checkboxes, bulk actions and a preview of what users see, and stays editable before publishing with a publication notice that jumps to Support. The visibility map merges over the stored one so partial saves cannot re-share. Admin Latest Features renders as a catalogue card marked New, served by the new admin-only GET /api/v2/admin/latest-features. Shortcuts jump to V2 cards or fall back to the classic tab through a Python mirror of LEGACY_TAB_REDIRECTS. The version banner gains the release notifications registration badge. Also fixes the application title being substituted twice in Latest Features copy when it contains "SimpleChat". Version 0.261.260. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…61.273
Brings in the base through the data-lifecycle parity merge and resolves the
nine conflicts by keeping both sides:
- admin_settings_fields.py: Help declarations, validators and legacy maps sit
beside the new Data Lifecycle, Operations and on_enable work. Health Check
now lives with Operations, as the base moved it.
- related_section: the base shipped the same descriptor as
{section_id, label, classic_only}, drawn by RelatedSectionLink.tsx. The
Latest Features destination now uses that shape and renderer, and the
duplicate {id, label} link and onNavigate plumbing in fields.tsx and
adminFields.ts are removed. The schema test accepts the base's shape.
- SettingsSection.tsx: the header badge joins the guide button and status
chip; the status context wraps the base's new grouped body.
- fields.tsx: the Required flag reads the section status before the
timezone branch, so the hook runs on every render.
- AdminSettingsPage.tsx: catalogue fetch, search and Help cases sit beside
the section guides, retention and operations cases. In the collapsible
rail the Help New pill becomes a dot, keeping "New" in the accessible name.
- Tests and fixture headers keep both histories. FULLY_DESCRIBED_GROUP_IDS
now includes data-lifecycle, operations and help.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…61.274 Brings in the Governance group (#1680), which took 0.261.273, so this branch moves to 0.261.274. Four conflicts, each resolved by keeping both sides: - SettingsSection.tsx: the section-status provider still wraps the body, and requirement notices now pass the base's onNavigate through. - AdminSettingsPage.tsx: the Help catalogue helpers sit beside the base's navigateToSetting and effectiveSettings. - test_v2_admin_capability_placement.py and test_v2_admin_settings_schema.py: both history lines are kept, and invariant 1 lists Governance and Help. The schema docstring now lists Governance among the fully described groups. This branch's own version references move to 0.261.274; the base's 0.261.273 governance lines are left as they are. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…61.275 Brings in the Scale group (#1681), which took 0.261.274, so this branch moves to 0.261.275. Six conflicts, each resolved by keeping both sides: - admin_settings_fields.py: the related_section docstring stays, and the fully described groups list both Scale and Help. The Help constants sit beside the Scale groups and Cosmos limits. The recipient and visibility validators sit beside the Redis port and container-policy checks. - SettingsSection.tsx: the section-status provider wraps the base's new "Used by" dependents line as well as the requirement notices. - AdminSettingsPage.tsx: one adminSections import with buildSectionDependents and readSectionValue, plus the base's cosmosThroughput import. - release_notes.md: this branch's entries move to a v0.261.275 section, above the base's v0.261.274 Scale section. - test_v2_admin_capability_placement.py: both history lines and narratives are kept, FULLY_DESCRIBED_GROUP_IDS includes scale and help, and invariant 1 now names Scale, which the base's tuple already held. - ui_tests/fixtures/v2_admin_settings.py: both history lines are kept, and the built-in Help stubs run before the base's test-supplied extra_routes. This branch's own version references move to 0.261.275. The base's 0.261.274 Scale lines are left as they are. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…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)
merged commit Oct 7, 2026
705774d
into
paullizer-react-v2-ui
11 checks passed
Paul Lizer (paullizer)
added a commit
to paullizer/simplechat
that referenced
this pull request
Oct 7, 2026
Brings in V2 at 705774d (microsoft#1679, VERSION 0.261.276). Conflicts: - docs/explanation/release_notes.md: V2's file byte-for-byte, with this branch's own (v0.261.277) section inserted at the very top, above V2's first section, (v0.261.276). Every V2 section is unchanged. - application/single_app/config.py: kept this branch's VERSION 0.261.277, which is above V2's 0.261.276. The two files differed only on the VERSION line. 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
V2 Admin Settings declared only three Help switches, so most of the classic Help group was missing from V2:
The Send Feedback switch was also guessed onto the wrong card by the
enable_*fallback scan. This PR brings V2 to parity using the V2 card, status, nesting, and search patterns rather than porting the classic markup./api/admin/settings/send_feedback_emailendpoint and open the mailto draft. They never touch the settings draft or the save bar.GET /api/v2/admin/latest-features.This also fixes a bug in both interfaces: an app title containing "SimpleChat" (for example "SimpleChat Contoso") was substituted twice in Latest Features copy.
Intentional differences from the classic page:
Before merging:
paullizer-react-v2-uihas moved 58 commits ahead and is now at 0.261.271.git merge-tree) reports conflicts in:admin_settings_fields.pyconfig.pySettingsSection.tsxfields.tsxAdminSettingsPage.tsxrelease_notes.mdtest_v2_admin_capability_placement.pytest_v2_admin_settings_schema.pyui_tests/fixtures/v2_admin_settings.pyScreenshots (UI test fixture data, which is why the version reads 0.261.093)
Before
After: Support needs a recipient, the Send Feedback overview, and the New marker on Help
After: User-Facing Latest Features with a preview open
After: Admin Latest Features with an entry open
After: Report a Bug
After: Release notifications registration
Linked issue
N/A - no tracking issue for this change.
Release Notes & Latest Features
Is this visible to end users?
Only the Latest Features app-title fix reaches end users. Everything else is in V2 Admin Settings.
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 changedBumped 0.261.259 -> 0.261.260. The base is now at 0.261.271, so this needs renumbering to the next free patch version when
paullizer-react-v2-uiis merged in.Testing / validation
npx tsc -b --noEmit(inapplication/v2_ui): passednpm --prefix application/v2_ui run build: passedpython functional_tests/test_v2_admin_help_parity.py: passed, 9/9python functional_tests/test_v2_admin_help_settings_normalization.py: passed, 7/7python functional_tests/test_v2_admin_latest_features_api.py: passed, 8/8python functional_tests/test_v2_admin_help_logic.py: passed, 16/16 TypeScript checksFunctional sweep: 317 passed, 3 failed. Command:
The 3 failures are unrelated. All three fail identically on the unmodified base commit
1b8d4c47b:test_v2_admin_security_parity::test_every_v1_security_field_is_claimed: missingcontent-screeningpanetest_admin_latest_features_tab::test_admin_settings_tab_uniqueness: missingcontent-screeningpanetest_v2_admin_settings_schema::test_defaults_match_their_field_type:m365_trusted_download_hostsdefaultUI tests: passed, 76/76, run with local Chromium against the built SPA. Command:
PR workflow checks, run locally with
--base-sha 1b8d4c47b(merge base),--head-sha 5922cd1c3, and the changed files each workflow would pass:python scripts/check_xss_sinks.py: passed, 21 filespython scripts/check_broken_access_control.py: passed, 6 filespython scripts/check_swagger_routes.py: passed, 1 changed route filepython -m py_compileon the 14 changed.pyfiles: passedpython scripts/check_malicious_pr_security_review.py --verify-release-age: passed, exit 0 with no blocker findings. Its "Needs investigation" verdict comes from advisory keyword matches, such as docstrings mentioning "Security".Manual: reviewed the Help cards at 390, 1440 and 1920px in light and dark (screenshots above).
Documentation
Release notes updated, or not needed
Feature documentation updated, or not needed
Fix documentation updated, or not needed
docs/explanation/release_notes.md: v0.261.260 entry.docs/explanation/features/V2_ADMIN_HELP_SETTINGS.md: new.docs/admin/help.md: rewritten for both interfaces, plus its row indocs/admin/index.md.The app-title fix is covered in the release notes and the feature doc rather than a separate fix doc.
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
GET /api/v2/admin/latest-featuresis on the admin blueprint with@login_requiredand@admin_required. It returns release copy and links only, no settings values.No settings payloads for non-admin frontends changed.
Shortcut and screenshot URLs are restricted to same-origin paths or http(s), and mailto drafts to a single plain address.