Repository navigation
Stage D part 4: Knowledge, Workspaces and Workflow - #1313
Merged
Paul Lizer (paullizer) merged 2 commits intoAug 19, 2026
Merged
Conversation
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>
Paul Lizer (paullizer)
merged commit Aug 19, 2026
a937b82
into
feature/admin-settings-ia
11 checks passed
This was referenced Aug 19, 2026
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.
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
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
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-sectioninto 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.pychecks 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: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-sectionis reallyweb-search-foundry-section,gpt-configis reallygpt-configuration, and so on. The move and split tools take container ids.gpt-configurationis not a top-level card. It lives insidelegacyModelSettingsModal. 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.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-sectionand mirrors the role toggles.