diff --git a/application/single_app/admin_settings_nav.py b/application/single_app/admin_settings_nav.py index f256b6ebe..00dd71d46 100644 --- a/application/single_app/admin_settings_nav.py +++ b/application/single_app/admin_settings_nav.py @@ -51,6 +51,26 @@ "label": "Chat", "icon": "bi-chat-square-text", "tabs": [ + { + "id": "chat-experience", + "label": "Chat Experience", + "icon": "bi-chat-square-dots", + "sections": [ + {"id": "processing-thoughts-section", "label": "Processing Thoughts", "icon": "bi-stars"}, + {"id": "chat-file-uploads-section", "label": "Chat File Uploads", "icon": "bi-paperclip"}, + {"id": "conversation-contents-drawer-section", "label": "Conversation Contents Drawer", "icon": "bi-list-nested"}, + {"id": "workspace-scope-lock-section", "label": "Workspace Scope Lock", "icon": "bi-lock"}, + ], + }, + { + "id": "feedback-alerts", + "label": "Feedback & Alerts", + "icon": "bi-chat-square-heart", + "sections": [ + {"id": "user-feedback-section", "label": "User Feedback", "icon": "bi-chat-square-heart"}, + {"id": "desktop-notifications-section", "label": "Desktop Conversation Notifications", "icon": "bi-bell"}, + ], + }, { "id": "citation", "label": "Citations", @@ -73,7 +93,6 @@ "icon": "bi-cpu", "sections": [ {"id": "multi-endpoint-configuration", "label": "Model Endpoints", "icon": "bi-hdd-network"}, - {"id": "processing-thoughts-section", "label": "Processing Thoughts", "icon": "bi-stars"}, {"id": "shared-conversation-file-approvals-section", "label": "Shared Conversation File Approvals", "icon": "bi-file-earmark-lock"}, {"id": "embeddings-config", "label": "Embeddings", "icon": "bi-vector-pen"}, {"id": "image-config", "label": "Image Generation", "icon": "bi-image"}, @@ -117,12 +136,8 @@ {"id": "group-workspaces-section", "label": "Group Workspaces", "icon": "bi-people"}, {"id": "public-workspaces-section", "label": "Public Workspaces", "icon": "bi-globe"}, {"id": "file-sharing-section", "label": "File Sharing", "icon": "bi-share"}, - {"id": "chat-file-uploads-section", "label": "Chat File Uploads", "icon": "bi-paperclip"}, {"id": "metadata-extraction-section", "label": "Metadata Extraction", "icon": "bi-file-earmark-code"}, {"id": "multimodal-vision-section", "label": "Multi-Modal Vision Analysis", "icon": "bi-eye"}, - {"id": "document-classification-section", "label": "Document Classification", "icon": "bi-tags"}, - {"id": "retention-policy-section", "label": "Retention Policy", "icon": "bi-hourglass-split"}, - {"id": "workspace-scope-lock-section", "label": "Workspace Scope Lock", "icon": "bi-lock"}, {"id": "user-agreement-section", "label": "User Agreement", "icon": "bi-file-earmark-check"}, ], }, @@ -187,10 +202,7 @@ "icon": "bi-shield-check", "sections": [ {"id": "content-safety-section", "label": "Content Safety", "icon": "bi-shield-exclamation"}, - {"id": "user-feedback-section", "label": "User Feedback", "icon": "bi-chat-square-heart"}, - {"id": "desktop-notifications-section", "label": "Desktop Conversation Notifications", "icon": "bi-bell"}, {"id": "permissions-section", "label": "Permissions", "icon": "bi-person-check"}, - {"id": "conversation-archiving-section", "label": "Conversation Archiving", "icon": "bi-archive"}, ], }, { @@ -238,6 +250,37 @@ }, ], }, + { + "id": "data-lifecycle", + "label": "Data Lifecycle", + "icon": "bi-hourglass-split", + "tabs": [ + { + "id": "retention", + "label": "Retention", + "icon": "bi-hourglass-split", + "sections": [ + {"id": "retention-policy-section", "label": "Retention Policy", "icon": "bi-hourglass-split"}, + ], + }, + { + "id": "classification", + "label": "Classification", + "icon": "bi-tags", + "sections": [ + {"id": "document-classification-section", "label": "Document Classification", "icon": "bi-tags"}, + ], + }, + { + "id": "archiving", + "label": "Archiving", + "icon": "bi-archive", + "sections": [ + {"id": "conversation-archiving-section", "label": "Conversation Archiving", "icon": "bi-archive"}, + ], + }, + ], + }, { "id": "backup-recovery", "label": "Backup & Recovery", diff --git a/application/single_app/config.py b/application/single_app/config.py index 7dab85ab9..0244ed3e0 100644 --- a/application/single_app/config.py +++ b/application/single_app/config.py @@ -96,7 +96,7 @@ EXECUTOR_TYPE = 'thread' EXECUTOR_MAX_WORKERS = 30 SESSION_TYPE = 'filesystem' -VERSION = "0.260.011" +VERSION = "0.260.012" IS_DEVELOPMENT = is_development_env_enabled() SESSION_COOKIE_SAMESITE = os.getenv('SESSION_COOKIE_SAMESITE', 'Lax') diff --git a/application/single_app/templates/admin/_panes/ai-models.html b/application/single_app/templates/admin/_panes/ai-models.html index 3df45b251..f12b06236 100644 --- a/application/single_app/templates/admin/_panes/ai-models.html +++ b/application/single_app/templates/admin/_panes/ai-models.html @@ -236,27 +236,6 @@
Global Endpoints
-
-
- Processing Thoughts -
-

When enabled, real-time processing steps are shown to users during chat responses and persisted for later review.

-
- - - -
-
- -
Shared Conversation File Approvals diff --git a/application/single_app/templates/admin/_panes/archiving.html b/application/single_app/templates/admin/_panes/archiving.html new file mode 100644 index 000000000..0d56b6223 --- /dev/null +++ b/application/single_app/templates/admin/_panes/archiving.html @@ -0,0 +1,21 @@ +
+
+
+ Conversation Archiving +
+

When enabled, conversation deletions will be archived instead of permanently deleted.

+
+ + + +
+
+
\ No newline at end of file diff --git a/application/single_app/templates/admin/_panes/chat-experience.html b/application/single_app/templates/admin/_panes/chat-experience.html new file mode 100644 index 000000000..223e1beb0 --- /dev/null +++ b/application/single_app/templates/admin/_panes/chat-experience.html @@ -0,0 +1,102 @@ +
+
+
+ Processing Thoughts +
+

When enabled, real-time processing steps are shown to users during chat responses and persisted for later review.

+
+ + + +
+
+ + +
+
+ Chat File Uploads +
+

+ Control whether users can upload files directly into chat conversations. +

+
+ + + +
+ +
+
+ Conversation Contents Drawer +
+

+ Let users navigate long conversations from a list of their prompts. +

+
+ + + +
+

+ When enabled, users can turn the drawer off for their own account from Profile settings. +

+
+
+ + + +
+

+ Required app role value: ChatFileUploadUser. Assign this role to users or groups in the Enterprise App before enabling the requirement. Existing chat attachments remain visible; this only controls new uploads. +

+
+
+
+ Workspace Scope Lock +
+

+ Control whether users can unlock workspace scope in chat conversations. When scope is locked, conversations are restricted to the workspaces that produced search results, preventing accidental cross-contamination with other data sources. +

+
+ + + +
+
+ + +
\ No newline at end of file diff --git a/application/single_app/templates/admin/_panes/classification.html b/application/single_app/templates/admin/_panes/classification.html new file mode 100644 index 000000000..597736e46 --- /dev/null +++ b/application/single_app/templates/admin/_panes/classification.html @@ -0,0 +1,47 @@ +
+
+
+ Document Classification +
+

+ Enable this feature to allow users to classify documents uploaded to their workspaces using predefined categories. +

+
+ + + +
+ + +
+
Classification Categories
+

Define the labels and corresponding colors for document classification.

+ + + + + + + + + + + +
LabelColorActions
+ + + +
+
+ + +
\ No newline at end of file diff --git a/application/single_app/templates/admin/_panes/feedback-alerts.html b/application/single_app/templates/admin/_panes/feedback-alerts.html new file mode 100644 index 000000000..4ee6ae562 --- /dev/null +++ b/application/single_app/templates/admin/_panes/feedback-alerts.html @@ -0,0 +1,44 @@ +
+
+
+ User Feedback +
+

Enable user feedback (thumbs up/down) for AI responses.

+
+ + + +
+
+
+
+ Desktop Conversation Notifications +
+

+ Allow users to receive an operating system notification when an AI response finishes while SimpleChat is open in a hidden or unfocused browser tab. +

+
+ + +
+

+ Users can turn notifications off from Profile. Browser permission is required, and notifications stop when the SimpleChat tab is closed. +

+
+
\ No newline at end of file diff --git a/application/single_app/templates/admin/_panes/retention.html b/application/single_app/templates/admin/_panes/retention.html new file mode 100644 index 000000000..c3aa2258a --- /dev/null +++ b/application/single_app/templates/admin/_panes/retention.html @@ -0,0 +1,270 @@ +
+
+
+ Retention Policy +
+

Automatically delete aged conversations and documents based on configurable retention periods. Users, group owners, and public workspace admins can set their own retention policies.

+ + + + +
+
+
+ + + +
+
+
+
+ + + +
+
+
+
+ + + +
+
+
+ + +
+
Default Retention Policies
+

Set organization-wide default retention periods for each workspace type. Users can override these defaults with their own preferences. Setting a default here means new users/workspaces will start with this retention period.

+ + +
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + Force Push: Override all user/group/workspace custom retention policies with the organization defaults above. Users will then use the organization default until they set their own preference. +
+ +
+
+
+ + +
+ + + Retention policy will run once daily at this hour (UTC timezone). +
+ + +
+
+ +
+ {% if settings.retention_policy_last_run %} + {{ settings.retention_policy_last_run }} + {% else %} + Never run + {% endif %} +
+
+
+ +
+ {% if settings.retention_policy_next_run %} + {{ settings.retention_policy_next_run }} + {% else %} + Not scheduled + {% endif %} +
+
+
+ + +
+ + + Trigger retention policy execution immediately for selected workspace types, bypassing the scheduled time. + +
+ + +
+ + +
\ No newline at end of file diff --git a/application/single_app/templates/admin/_panes/safety.html b/application/single_app/templates/admin/_panes/safety.html index 5fda7791e..c4973acdb 100644 --- a/application/single_app/templates/admin/_panes/safety.html +++ b/application/single_app/templates/admin/_panes/safety.html @@ -171,49 +171,7 @@
-
-
- User Feedback -
-

Enable user feedback (thumbs up/down) for AI responses.

-
- - - -
-
-
-
- Desktop Conversation Notifications -
-

- Allow users to receive an operating system notification when an AI response finishes while SimpleChat is open in a hidden or unfocused browser tab. -

-
- - -
-

- Users can turn notifications off from Profile. Browser permission is required, and notifications stop when the SimpleChat tab is closed. -

-
-
-
- Conversation Archiving -
-

When enabled, conversation deletions will be archived instead of permanently deleted.

-
- - - -
-
diff --git a/application/single_app/templates/admin/_panes/workspaces.html b/application/single_app/templates/admin/_panes/workspaces.html index 3bf8d4aa9..9200f71d9 100644 --- a/application/single_app/templates/admin/_panes/workspaces.html +++ b/application/single_app/templates/admin/_panes/workspaces.html @@ -506,64 +506,6 @@
-
-
- Chat File Uploads -
-

- Control whether users can upload files directly into chat conversations. -

-
- - - -
- -
-
- Conversation Contents Drawer -
-

- Let users navigate long conversations from a list of their prompts. -

-
- - - -
-

- When enabled, users can turn the drawer off for their own account from Profile settings. -

-
-
- - - -
-

- Required app role value: ChatFileUploadUser. Assign this role to users or groups in the Enterprise App before enabling the requirement. Existing chat attachments remain visible; this only controls new uploads. -

-
@@ -698,340 +640,6 @@
-
-
- Document Classification -
-

- Enable this feature to allow users to classify documents uploaded to their workspaces using predefined categories. -

-
- - - -
- - -
-
Classification Categories
-

Define the labels and corresponding colors for document classification.

- - - - - - - - - - - -
LabelColorActions
- - - -
-
- - -
-
- Retention Policy -
-

Automatically delete aged conversations and documents based on configurable retention periods. Users, group owners, and public workspace admins can set their own retention policies.

- - - - -
-
-
- - - -
-
-
-
- - - -
-
-
-
- - - -
-
-
- - -
-
Default Retention Policies
-

Set organization-wide default retention periods for each workspace type. Users can override these defaults with their own preferences. Setting a default here means new users/workspaces will start with this retention period.

- - -
-
- -
-
- - -
-
- - -
-
- - -
-
- -
-
- - -
-
- - -
-
- - -
-
- -
-
- - -
-
- - -
-
- - -
-
-
- - Force Push: Override all user/group/workspace custom retention policies with the organization defaults above. Users will then use the organization default until they set their own preference. -
- -
-
-
- - -
- - - Retention policy will run once daily at this hour (UTC timezone). -
- - -
-
- -
- {% if settings.retention_policy_last_run %} - {{ settings.retention_policy_last_run }} - {% else %} - Never run - {% endif %} -
-
-
- -
- {% if settings.retention_policy_next_run %} - {{ settings.retention_policy_next_run }} - {% else %} - Not scheduled - {% endif %} -
-
-
- - -
- - - Trigger retention policy execution immediately for selected workspace types, bypassing the scheduled time. - -
- - -
- - -
-
- Workspace Scope Lock -
-

- Control whether users can unlock workspace scope in chat conversations. When scope is locked, conversations are restricted to the workspaces that produced search results, preventing accidental cross-contamination with other data sources. -

-
- - - -
-
- -
User Agreement diff --git a/application/single_app/templates/admin_settings.html b/application/single_app/templates/admin_settings.html index 5e26216b9..65e958b1d 100644 --- a/application/single_app/templates/admin_settings.html +++ b/application/single_app/templates/admin_settings.html @@ -1018,9 +1018,18 @@

12. Enhanced Citations and Image Generation

{% include "admin/_panes/workspaces.html" %} + {# Data Lifecycle: what happens to user data over time #} + {% include "admin/_panes/retention.html" %} + {% include "admin/_panes/classification.html" %} + {% include "admin/_panes/archiving.html" %} + {% include "admin/_panes/citation.html" %} + {# Chat: the conversation surface itself #} + {% include "admin/_panes/chat-experience.html" %} + {% include "admin/_panes/feedback-alerts.html" %} + {% include "admin/_panes/safety.html" %} diff --git a/docs/explanation/features/ADMIN_SETTINGS_IA_REWORK_STATUS.md b/docs/explanation/features/ADMIN_SETTINGS_IA_REWORK_STATUS.md index 985751668..0e9a7ef64 100644 --- a/docs/explanation/features/ADMIN_SETTINGS_IA_REWORK_STATUS.md +++ b/docs/explanation/features/ADMIN_SETTINGS_IA_REWORK_STATUS.md @@ -22,7 +22,8 @@ Development ─── feature/admin-settings-ia ──┬── #1297 stage 1 └──► final PR ──► Development ``` -Current version: **0.260.011**. Fingerprint: **462 field names / 110 card ids**. +Current version: **0.260.012**. Fingerprint: **462 field names / 110 card ids**. +Navigation: **13 groups / 27 tabs / 88 sections**. ### Shipped @@ -106,14 +107,21 @@ moved from Scale to Security that way. |---|---| | Governance | → Feature Governance, Policies, MCP Governance | | Scale | → Redis & Caching, Cosmos; Front Door moved to Security as Network | +| Data Lifecycle | **New group.** Retention + Classification pulled from Workspaces, Archiving pulled from Safety | +| Chat | **New group.** Chat Experience (thoughts from AI Models, file uploads + contents drawer and scope lock from Workspaces), Feedback & Alerts (feedback + desktop notifications from Safety) | -### Remaining, and the gap to close first +### The cross-pane move tool -The remaining groups pull cards from **several** source panes, for example Data -Lifecycle wants Retention and Classification out of Workspaces and Archiving -out of Safety. The split tool only splits one pane at a time, so a -**move-card-between-panes** operation is needed next, with the same -every-line-accounted-for guarantee. +`move_card.py` moves a top-level card from one pane to another with the same +every-line-accounted-for guarantee as the split tool. Two behaviours matter: + +- **Nested cards travel with their parent automatically**, because the card + scanner skips over card bodies. `conversation-contents-drawer-section` moved + inside `chat-file-uploads-section` without being named. +- **The gap after a card travels with it**, which is what correctly routes an + interleaved modal to the tab that owns its trigger. + +### Remaining Three complications found while splitting: diff --git a/docs/explanation/release_notes.md b/docs/explanation/release_notes.md index 9da97239a..3d12d8127 100644 --- a/docs/explanation/release_notes.md +++ b/docs/explanation/release_notes.md @@ -2,6 +2,26 @@ For feature-focused and fix-focused drill-downs by version, see [Features by Version](/explanation/features/) and [Fixes by Version](/explanation/fixes/). +### **(v0.260.012)** + +#### User Interface Enhancements + +* **New Data Lifecycle Group For Retention, Classification And Archiving** + * Retention policy, document classification and conversation archiving all decide how long content lives and how it is labelled, but they were split across Workspaces and Safety. They now sit together in a **Data Lifecycle** group with a tab each: **Retention**, **Classification** and **Archiving**. + * Conversation archiving in particular was buried under Safety, which described what it protects against rather than what it does. + * (Ref: navigation map, `retention-policy-section`, `document-classification-section`, `conversation-archiving-section`) + +* **Chat Group Gathers The Settings That Shape A Conversation** + * Settings that change what a conversation looks and behaves like were spread across AI Models, Workspaces and Safety. The **Chat** group now holds them in two tabs. + * **Chat Experience** collects model thought display, chat file uploads (with the conversation contents drawer) and workspace scope lock. + * **Feedback & Alerts** collects user feedback and desktop notifications, which are both about how the app talks back to the user rather than about safety enforcement. + * (Ref: `chat-experience`, `feedback-alerts`, `processing-thoughts-section`, `chat-file-uploads-section`, `workspace-scope-lock-section`, `user-feedback-section`, `desktop-notifications-section`) + +* **Settings Keep Their Values Through The Move** + * Cards were relocated between tabs without renaming a single field, so every saved value is preserved and the form submits exactly the payload it did before. + * Sidebar search still finds a setting by group, tab or card name, so you can reach anything without knowing where it now lives. + * (Ref: admin settings field contract, `admin_settings_nav.py`) + ### **(v0.260.011)** #### User Interface Enhancements