Skip to content

Control Center V2 (4/6): group management - #1692

Merged
Paul Lizer (paullizer) merged 4 commits into
microsoft:paullizer-react-v2-uifrom
paullizer:paullizer-control-center-v2-groups
Oct 7, 2026
Merged

Paul Lizer (paullizer) merged 4 commits into
microsoft:paullizer-react-v2-uifrom
paullizer:paullizer-control-center-v2-groups

Conversation

@paullizer

Copy link
Copy Markdown
Collaborator

Summary

  • Replace the Groups placeholder with server-filtered/sorted/paged inventory, URL filters, cross-page selection, capped bulk status, freshness reporting and CSV export. Four batched Cosmos queries replace per-row enrichment.
  • Add seven-tab details with directory/CSV membership addition, supported member controls, ownership requests, status history, retention, recent activity/JSON/export, document summaries and Users links. Deletion and ownership remain approval-only; native Owner/Admin membership requirements remain intact.
  • Reuse the classic guarded status writer and shared table/selection/modal primitives. Generalize detail tabs/activity/export, add keyboard focus and nested Escape coverage, and align Users/Groups approval notices with /v2/approvals/all/<id> (group notices include group_id).
  • This PR also carries the previously reviewed Users changes from Control Center V2 (3/6): user management #1690 into integration. Control Center V2 (3/6): user management #1690 merged into paullizer-control-center-dashboard after Control Center V2 (2/6): dashboard #1686 merged that branch into paullizer-react-v2-ui, so Users was not in the integration branch. This branch preserves Users and merges the latest integration without rebasing. Groups version is 0.261.282.

Linked issue

Refs #1690, #1686. Layer 4 of the six-layer V2 Control Center series; no separate issue. Approval deep links follow the contract supplied by #1687.

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

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

Application version advanced to 0.261.282 after integration merge. Deployers unchanged.

Testing / validation

Final merged-head validation (Python route tests used an isolated environment with repository-required Flask 3.1.3/Werkzeug 3.1.6; no global package changes):

  • python -m pytest functional_tests\test_v2_control_center_groups.py functional_tests\test_control_center_group_writers.py functional_tests\test_control_center_group_token_totals.py functional_tests\test_v2_control_center_foundation.py functional_tests\test_v2_control_center_dashboard.py functional_tests\test_v2_control_center_users.py functional_tests\test_v2_api_security.py functional_tests\test_v2_admin_review_pages.py functional_tests\route_tests\test_route_blueprint_policy_inventory.py functional_tests\route_tests\test_route_unauthenticated_policy_contract.py functional_tests\route_tests\test_route_policy_test_coverage.py -q --tb=short --disable-warnings — 128 passed. Includes Groups filters/sort/paging/cache, safe errors, detail projection, bulk cap before writes, reasons/exclusions, audit parity, permission denials, formula-safe CSV, approval creation without direct mutation, preserved Users and integration regressions.
  • npm --prefix application\v2_ui run build — passed (TypeScript and Vite). Existing bundle-size warning remains; no CDN or dynamic-import additions.
  • python -m pytest ui_tests\test_v2_control_center_groups.py ui_tests\test_v2_control_center_users.py -q --tb=short — 10 passed on the final rebuilt bundle. Covers desktop/mobile details, hostile-text escaping, status/history/approval, member search/CSV/roles/removal, retention/ownership permissions, cross-page bulk/errors, one-shot refresh, keyboard tabs, nested Escape/focus restoration and V2 approval detail links.
  • python .\scripts\build_docs_inventory.py — passed; inventory remains unchanged because no capability/page inventory item was added or renamed.
  • python .\functional_tests\test_docs_app_surface_coverage.py — 7/7 passed.
  • python .\functional_tests\test_docs_site_quality.py — 6/6 passed.
  • python scripts\check_xss_sinks.py --full-file application\v2_ui\src\components\controlCenter\ControlCenterPrimitives.tsx application\v2_ui\src\components\controlCenter\GroupDetailDrawer.tsx application\v2_ui\src\components\controlCenter\UsersSection.tsx application\single_app\route_backend_control_center.py — passed.
  • python scripts\check_xss_sinks.py --full-file application\v2_ui\src\components\controlCenter\GroupsSection.tsx application\v2_ui\src\components\controlCenter\GroupDetailDrawer.tsx application\v2_ui\src\components\controlCenter\EntityDetailSections.tsx application\v2_ui\src\components\controlCenter\ControlCenterPrimitives.tsx application\v2_ui\src\components\ui\Modal.tsx application\v2_ui\src\components\membership\ImportMembersDialog.tsx application\v2_ui\src\pages\ControlCenterPage.tsx application\single_app\functions_control_center_groups.py — passed.
  • python scripts\check_broken_access_control.py --full-file application\single_app\route_backend_control_center.py application\single_app\functions_control_center_groups.py — passed.
  • Mechanical UI detector on GroupsSection, GroupDetailDrawer and EntityDetailSections — no findings; git diff --cached --check — passed.

Browser tests intercept APIs and use local static bundle assets; live Azure/Cosmos execution was not performed. The inventory is a 90-second process-local snapshot with server-side filtering/sorting/paging, not continuation-token query paging. Rebuild cost and memory scale with inventory/aggregates; external metrics writes can lag by that TTL. Detail activity/export contains the most recent 20 records. Known unrelated failing tests identified by the series plan were excluded from acceptance gates.

Documentation

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

Updated docs/explanation/features/V2_CONTROL_CENTER.md, docs/guides/v2-control-center.md, and release notes. Documents Groups API/filter/selection/freshness contracts, retained permissions, approval semantics, reusable components and Phase 6 group activity deep-link parameters. Preserved Users and integration release notes. Separate fix documentation is not needed for this feature layer.

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

Five new V2 routes require control_center_required('admin'). Detail projections do not return raw group/settings documents or credentials. Member removal/role changes and retention preserve existing Owner/Admin authorization. Destructive and ownership requests only create approvals. React text rendering, encoded URL IDs, formula-safe CSV and safe logged provider failures preserve frontend boundaries.

Paul Lizer (paullizer) and others added 3 commits October 7, 2026 10:25
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Implement batched group inventory, guarded bulk status, detail workflows, approval-only destructive actions, reusable drawer sections, and regression coverage.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Preserve reviewed Users changes, advance Groups to version 0.261.282, retain dashboard safety fixes, and align approval links with the V2 Approvals detail contract.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Comment thread application/single_app/route_backend_control_center.py Outdated
Comment thread application/single_app/route_backend_control_center.py Outdated
Comment thread application/single_app/route_backend_control_center.py Outdated
Comment thread application/single_app/route_backend_control_center.py Outdated
Comment thread application/single_app/route_backend_control_center.py Outdated
Comment thread application/single_app/route_backend_control_center.py Outdated
Comment thread application/single_app/route_backend_control_center.py Outdated
Comment thread application/single_app/route_backend_control_center.py Outdated
Comment thread application/single_app/route_backend_control_center.py
Comment thread functional_tests/test_v2_control_center_groups.py Outdated
Preserve both release histories and existing Groups version lineage; return stable validation errors in all nine reviewed handlers, document fail-closed expiry handling, and remove redundant test imports. Advance application patch to 0.261.283.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@paullizer
Paul Lizer (paullizer) merged commit fc1d402 into microsoft:paullizer-react-v2-ui Oct 7, 2026
11 checks passed
Paul Lizer (paullizer) added a commit to paullizer/simplechat that referenced this pull request Oct 7, 2026
Brings in V2 at 01c4959 (microsoft#1692, VERSION 0.261.282 and 0.261.283,
microsoft#1695, VERSION 0.261.284, and microsoft#1693, VERSION 0.261.285 and 0.261.286).

Conflicts:
- docs/explanation/release_notes.md: V2's file byte-for-byte, with this
  branch's own (v0.261.282) section inserted at the very top, above V2's
  first section, (v0.261.286). Every V2 section is unchanged. The next
  commit renumbers this branch's section, because microsoft#1692 already uses
  0.261.282.
- application/single_app/config.py: V2's file, including its new
  activity-log indexing policy, with this branch's VERSION line
  (0.261.282) kept for the merge. The VERSION line was the only
  conflicting hunk. The next commit renumbers it above V2's 0.261.286.

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
V2 now uses 0.261.286 (microsoft#1693), and microsoft#1692 already uses 0.261.282, so this
branch's version moves above both. Renumbers the same 20 lines in 15
files as the previous bump: config.py, this branch's release-notes
section, the documentation version notes and the new tests' headers.
V2's own (v0.261.282) release-notes section is untouched. The tests'
version floor stays 0.261.253.

Refs microsoft#1549

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
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