Skip to content

Stage D part 4: Knowledge, Workspaces and Workflow - #1313

Merged
Paul Lizer (paullizer) merged 2 commits into
feature/admin-settings-iafrom
admin-ia-stage-d4
Aug 19, 2026
Merged

Paul Lizer (paullizer) merged 2 commits into
feature/admin-settings-iafrom
admin-ia-stage-d4

Conversation

@paullizer

Copy link
Copy Markdown
Contributor

Fourth batch of Stage D. Splits Search & Extract and Workspaces, and promotes Workflow to its own group.

Base: feature/admin-settings-ia. Stacked on #1311, so review that first.

Why

Search & Extract held eight cards spanning four unrelated jobs — Bing consent sat next to chunk sizes and voice transcription. Workspaces mixed workspace types with file rules, workflow and extraction settings.

Knowledge

Tab Cards
Web & Research web search, URL access, deep research
Search Index Azure AI Search
Document Extraction document intelligence, chunk sizes, metadata extraction and multi-modal vision (from Workspaces)
Audio & Video video intelligence, voice conversations
File Sync unchanged

Voice and video sit under Knowledge rather than Chat because they are extraction pipelines that turn recordings into searchable content, not conversation features.

Workspaces and Workflow

Tab Cards
Workspace Types personal, group, public
Files & Sharing downloads, sharing, shared conversation file approvals (from AI Models)
Global Identities unchanged

Workflow is now its own group. It drives approvals and assignment across every workspace type and was too large to sit as a single card inside Workspaces.

Navigation is now 14 groups / 36 tabs / 88 sections — the group count the plan was aiming at.

A real bug this surfaced

The Group Workflow Assignment dialog sat between two cards in the Workspaces pane, so it followed file-download-settings-section into Files & Sharing while its trigger button went to Workflow. An inactive tab pane is hidden, so the dialog would never have opened — and nothing would have reported an error.

New test_admin_settings_modal_placement.py checks that every modal lives in a pane that can open it, and that modal ids are unique. It is verified against a deliberately stranded modal:

Modals stranded in a pane that never opens them:
  'groupWorkflowAssignmentModal' lives in 'files-sharing' but is only opened from ['workflow']

All 48 modals currently pass.

Also corrected two section comments that had drifted onto the wrong cards in ai-models, where the embeddings card was labelled "Processing Thoughts".

Two things worth knowing for the next batch

Card container ids are not the nav section ids. Six cards are wrapped in a container whose id differs from the nav map's section id, which is an inner anchor — web-search-section is really web-search-foundry-section, gpt-config is really gpt-configuration, and so on. The move and split tools take container ids.

gpt-configuration is not a top-level card. It lives inside legacyModelSettingsModal. Splitting AI Models therefore means moving a modal rather than a card, so AI Models and Agents are deliberately excluded here and get their own change.

No settings changed

Not one name= attribute was touched.

Check Result
Field contract 462 names / 110 card ids, byte-identical
Regression set (75 files) 32 failures, identical set to baseline
Jinja compile 38/38 admin templates
XSS sinks pass
Modal placement 48 modals, all reachable, all ids unique

Next

AI Models and Agents & Actions (needs the modal-aware approach), then Backup & Recovery last because of its ~985-line migration workflow. Then Stage E splits system-settings-section and mirrors the role toggles.

Paul Lizer (paullizer) and others added 2 commits August 19, 2026 16:11
General had grown into a catch-all of eleven unrelated cards. Security
held one card while a separate Safety tab mixed content filtering with
role permissions. Both are broken up here.

Appearance
  Branding             branding, home page text, appearance
  Notices & Agreements classification banner, chat AI notice, terms of
                       use, user agreement (from workspaces)
  Pages & Links        static pages, external links (from general)

Security
  Access & Roles   permissions-section        who gets in, and as what
  Secrets          keyvault-section           was the "security" tab
  Content Safety   content-safety-section     what may be said once in
  Session          system-settings-section    interim home, see below
  Network          front-door-section

Operations   Logging becomes Logging & Health, gaining health check and
             API documentation from General.
Help         Gains Support Menu from General.

system-settings-section is a mixed card: four of its eight fields are
idle timeout, so Session is the plurality home. The remaining fields
are split out to their real homes in a later change.

Two hardcoded-id traps closed
  openKeyVaultSettings switched tabs by the literal id "security-tab",
  so the Data Management link to Key Vault broke the moment that tab
  was renamed. The function was dead weight: the link now carries
  data-admin-link and the tab is resolved from the DOM.

  The landing pane was hardcoded twice, as "show active" in one pane
  and showAdminTab('general') in the sidebar. Splitting that pane left
  Admin Settings with no active pane at all. Every pane now renders
  {% if admin_landing_tab == '<id>' %} show active{% endif %}, fed by
  get_landing_tab_id(), and the sidebar reads the first rendered tab.

Four test files hardcoded 'general' or 'security'. They now assert the
durable properties instead: Latest Features is last, exactly one pane
resolves active, every tab renders exactly one pane.

Navigation is now 13 groups / 31 tabs / 88 sections.

Verified
  field contract   462 names / 110 card ids, unchanged
  regression set   32 failures, identical to baseline
  jinja compile    33/33 admin templates
  xss sinks        41 changed files pass
  render check     exactly one pane resolves active, and it is the
                   first tab of the first group

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Search & Extract held eight cards spanning four unrelated jobs, from
Bing consent to voice transcription. Workspaces mixed workspace types
with file rules, workflow and extraction settings.

Knowledge
  Web & Research       web search, URL access, deep research
  Search Index         Azure AI Search
  Document Extraction  document intelligence, chunk sizes, metadata
                       extraction and multi-modal vision (from
                       workspaces)
  Audio & Video        video intelligence, voice conversations
  File Sync            unchanged

  Voice and video sit under Knowledge rather than Chat because they
  are extraction pipelines, not conversation features.

Workspaces
  Workspace Types      personal, group, public
  Files & Sharing      downloads, sharing, shared conversation file
                       approvals (from ai-models)
  Global Identities    unchanged

Workflow is now its own group. It drives approvals and assignment
across every workspace type and was too large to sit as one card.

Navigation is now 14 groups / 36 tabs / 88 sections.

Bug found and fixed by doing this
  The Group Workflow Assignment modal sat between two cards, so it
  followed file-download-settings-section into Files & Sharing while
  its trigger button went to Workflow. An inactive tab pane is hidden,
  so the dialog would never have opened.

  test_admin_settings_modal_placement.py now checks every modal lives
  in a pane that can open it, and that modal ids are unique. Verified
  against a deliberately stranded modal: the test fails with exactly
  that diagnosis.

Also corrected two section comments that had drifted onto the wrong
cards in ai-models, labelling embeddings as processing thoughts.

AI Models and Agents are deliberately not in this change:
gpt-configuration is not a top-level card, it lives inside
legacyModelSettingsModal, so splitting that pane means moving a modal
rather than a card and deserves its own review.

Verified
  field contract   462 names / 110 card ids, unchanged
  regression set   32 failures, identical to baseline
  jinja compile    38/38 admin templates
  xss sinks        pass
  modal placement  48 modals, all reachable, all ids unique

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@paullizer
Paul Lizer (paullizer) merged commit a937b82 into feature/admin-settings-ia Aug 19, 2026
11 checks passed
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.

1 participant