Simple Chat

Release notes 0.260 series

Back to release notes index

(v0.260.025)

Bug Fixes

  • Agent Actions Are No Longer Skipped When A Workspace Is In Scope
    • Selecting an agent that has actions and enabling a workspace produced answers that never invoked any of the agent’s actions. The assistant answered from retrieved document text alone, even when the retrieved excerpts did not contain what the question asked for.
    • The retrieval prompt instructed the model to base its answer only on the retrieved excerpts, so although the agent’s actions were attached and available, the model was told not to reach for them. Retrieved excerpts are now framed as starting evidence, and the model is directed to call an available action when the excerpts lack what the question needs, then reason over the excerpts and the action results together. The rule against fabricating unsupported values is unchanged.
    • (Ref: build_search_augmentation_system_prompt, build_mixed_source_evidence_handoff, agent actions, workspace search, #1332)
  • Spreadsheets In A Workspace Are Now Actually Computed
    • A quantitative question about a spreadsheet could return values that were not in the file. Tabular computation was suppressed whenever workspace search also returned any narrative document, and the heuristic treated topic words such as “report”, “policy”, and “memo” as reasons to skip computation entirely.
    • Because only a truncated three-row preview of a spreadsheet is indexed for search, skipping computation left the model deriving totals and averages from those preview rows. Tabular sources in scope are now computed unless the question unambiguously names a narrative artifact such as a PDF or presentation, restoring parity with the behavior already used when mixed-source search is disabled.
    • (Ref: should_run_tabular_evidence, functions_mixed_source_orchestration.py, tabular processing, mixed-source evidence, #1332)
  • A Skipped Spreadsheet Now Tells The Model What It Is Missing
    • When tabular computation is skipped, the evidence record previously said processing “was not needed”, which implied the source was irrelevant and left the model free to compute from indexed preview rows.
    • It now states that the full table was never read, that any indexed excerpt is a truncated preview, that numeric conclusions must not be drawn from it, and that the tabular analysis action should be called if values from that source are required.
    • (Ref: execute_tabular_evidence_sources, evidence envelopes, tabular citations, #1332)

(v0.260.024)

Bug Fixes

  • Inline Images And Videos Now Show Only Cited Media
    • Assistant messages rendered an inline image or video gallery for every media file that retrieval returned, so a search that surfaced five workspace images produced five inline tiles even when the answer referenced only one of them, or none at all. Media that had nothing to do with the answer was presented inside the message bubble as though it supported the answer.
    • Inline galleries now render only the media the response actually cited. The five-item gallery cap therefore goes to genuinely cited media instead of retrieval noise, and unreferenced workspace files no longer trigger enhanced-citation fetches.
    • Galleries produced by an action or tool the assistant actually ran are unaffected, since those are executed results rather than unused search candidates. Conversations created before cited-source tracking existed also keep their previous behavior.
    • The Sources disclosure is unchanged and still lists every retrieved document and web result, so nothing becomes harder to find.
    • (Ref: chat-citation-tracking.js, chat-inline-images.js, chat-inline-videos.js, chat-messages.js, cited_hybrid_citations, #1329)

(v0.260.023)

Bug Fixes

  • Running Simple Chat Directly No Longer Fails To Start When An Agent Has Actions
    • Starting Simple Chat with python app.py (including via uv run) aborted with RuntimeError: Working outside of request context whenever any agent had an action assigned. The app started normally until the first action was saved, which made the failure look intermittent.
    • Semantic Kernel initialization runs before any request exists on that path, but agent plugin loading read the signed-in user from the Flask session. It now resolves the user only when a request is actually in progress and otherwise loads with no user identity, matching how global plugin loading already behaved.
    • Container and App Service deployments were never affected, because they start through gunicorn and initialize during the first request. Their behavior is unchanged.
    • Three further identity lookups used for group scope and personal model endpoints had the same latent problem and were corrected at the same time.
    • (Ref: semantic_kernel_loader.py, functions_authentication.py, get_current_user_id_or_none, issue #1327)

(v0.260.021)

Bug Fixes

  • Documentation Screenshot Viewer Validates Its Image Source
    • The documentation site’s click-to-enlarge screenshot viewer assigned an image URL taken from a data attribute in the page. Because that value flows from page content into a URL, CodeQL flagged it as a potential DOM-based cross-site scripting sink.
    • The viewer now resolves the value and requires a same-origin http or https URL ending in an image extension before using it, so scheme-based payloads such as javascript: and data: URLs, and any off-site source, are rejected. All documentation media is local, so no legitimate image is affected.
    • (Ref: docs/assets/js/media.js, safeMediaUrl, ui_tests/test_docs_media_lightbox_source_validation.js, CodeQL js/xss-through-dom)

(v0.260.020)

New Features

  • Admin Documentation Rebuilt For The Grouped Settings Layout
    • Admin Settings was reorganized from 18 flat tabs into 14 groups containing 44 tabs and 93 settings sections. The documentation was still written against the old flat layout, so it described tabs that no longer exist and omitted the new ones.
    • The admin documentation is now one page per group, with every tab reachable by its own anchor so links to a specific tab keep working. Every retired tab URL redirects to the group that now owns its settings, so existing links and bookmarks continue to resolve.
    • (Ref: docs/admin/, application/single_app/admin_settings_nav.py, docs/_data/app_surface.yml)
  • Collaborating In A Conversation Is Now Documented
    • Added a guide covering shared conversations end to end: sharing a conversation, mentioning a participant with @ and Tab completion, how shared files are approved before they become available, and what participants can and cannot do.
    • The Blob Storage action reference now explains its managed identity and account key options.
    • (Ref: docs/guides/collaborate-in-a-conversation/, docs/reference/actions/blob-storage/, enable_collaborative_conversations)
  • Documentation Site Now Reflects the v0.260.001 Release
    • The documentation site’s Latest Release section was a full release behind, still presenting v0.250.001 as current. It now mirrors the same three-tier model the application uses: v0.260.001 as the current release, v0.250.001 as the previous release, and v0.239.001-v0.241.007 in the archive.
    • Added 20 feature guides for the v0.260.001 release covering enhanced extraction, embedded Office images, workflow task sequences, the MCP platform, the Yamcs and RocksDB actions, agent instruction references, action test connections, Azure Blob file sync, terms of use, audio file support, completion notifications, the chat AI notice, conversation context grounding, used documents on fork, the conversation contents drawer, font size and zoom, message audio export, public workspace display names, and chat scroll accessibility.
    • (Ref: docs/_data/latest_release_features.yml, docs/latest-release/release-260-*, application/single_app/support_menu_config.py)
  • Placeholder Screenshots Are Now Tracked
    • The v0.260.001 release ships branded “Screenshot pending” placeholder graphics so feature cards render while final captures are pending. Those placeholders are now listed on the documentation media status page with the exact file paths to overwrite, so they are visible work rather than a silent gap.
    • (Ref: docs/_data/media_pending.yml, /contributing/media-status/)

User Interface Enhancements

  • Admin Settings Pages Show Real Screenshots
    • Fourteen admin settings tab pages were rendering “screenshot needed” placeholders even though real screenshots already existed in the repository. Those pages now display the actual screenshots for the General, AI Models, Search and Extract, Workspaces, File Sync, Workspace Identities, Citation, Safety, Security, Agents, Scale, Control Center, Logging, and Send Feedback tabs.
    • The four tabs with no captured screenshot still show a placeholder naming the exact file to create, so genuine gaps stay visible.
    • (Ref: docs/admin/, docs/images/admin-settings/)

Bug Fixes

  • Release Notes Pages No Longer Break On Quoted Template Syntax
    • Release notes legitimately quote template syntax when describing template work, such as a Jinja block tag. The page generator emitted that verbatim, so the site build failed with an unknown tag error. Quoted template syntax is now escaped in generated pages and renders as literal text.
    • (Ref: scripts/build_release_notes_pages.py)
  • Release Notes Links To Internal Engineering Notes
    • Some release note entries linked to the internal feature and fix note trees, which are intentionally not published on the documentation site. Those links now point at the repository.
    • (Ref: docs/explanation/release_notes.md)
  • Release Notes Index No Longer Exceeds Its Page Budget
    • The release notes page generator inlined a fixed number of recent releases on its index. The consolidated v0.260.001 rollup is large enough on its own that this pushed the index past the maximum page size and failed generation. The index now fills its inline section by size rather than by count, so a single large rollup cannot break it.
    • (Ref: scripts/build_release_notes_pages.py)
  • Archived Release Notes Links
    • The archived release notes page linked to the internal feature and fix note trees, which are intentionally not published on the documentation site. Those links now point at the repository instead.
    • (Ref: docs/explanation/archive_release_notes.md)

(v0.260.019)

Bug Fixes

  • Admin Settings Loads Again
    • Admin Settings returned a 500 error on every request after the settings restructure. The Document Action Capabilities card moved to the Actions tab but the two values it reads stayed behind in the Agents tab, and each tab is rendered separately, so those values were never there when the card asked for them.
    • Both values are now defined in the tab that uses them, and a new test renders the two tabs together to keep them there.
    • (Ref: admin/_panes/actions.html, admin/_panes/agents.html, document action capabilities)
  • Server Errors Are Visible In The App Service Log Again
    • Once Application Insights was configured it took ownership of logging, which had the side effect of stopping Flask writing unhandled errors to the container log. A failing page left nothing behind but its access-log line, so diagnosing it meant querying Application Insights.
    • Unhandled errors are now written to both, so the reason for a failure is visible in the App Service log stream.
    • (Ref: functions_appinsights.py, ensure_console_error_logging, App Service console logs)
  • Document Access Index Diagnostics Appear When Enabled
    • The Cosmos DB tab checked the wrong thing for the debug setting, so the backfill controls, shadow validation metrics and reset option stayed hidden even after an admin turned the setting on.
    • (Ref: admin/_panes/cosmos.html, enable_dai_debug)

(v0.260.018)

Bug Fixes

  • Setup Walkthrough Lands On The Right Settings Again
    • The guided setup walkthrough sent each step to a named tab. After the Admin Settings restructure, eleven of its twelve steps named tabs that no longer existed, so those steps would have moved nowhere and left the admin looking at whatever was already on screen.
    • Each step now names the setting it is about and the tab is worked out from the page, so the walkthrough follows settings wherever they live.
    • (Ref: setup walkthrough, admin_settings.js, admin_card_links.js)
  • Cosmos Throughput Validation Reveals The Invalid Field
    • When Cosmos throughput values failed validation, the page tried to switch to a tab that no longer exists, so the field needing attention could be left on a hidden tab with no indication of where to look.
    • Validation now jumps to wherever the invalid field actually is.
    • (Ref: Cosmos throughput validation, admin_settings.js)

User Interface Enhancements

  • Admin Settings Restructure Merged With Current Development
    • Version bump covering the merge of the Admin Settings information architecture work with the generated file output fixes developed in parallel. Both reached v0.260.011 independently, so their release notes are combined under that version.
    • (Ref: Admin Settings navigation, generated file exports)

(v0.260.017)

New Features

  • All App Role Requirements In One Place
    • Ten settings across seven tabs can each require an Entra app role, which made the overall access policy impossible to read without hunting through the whole of Admin Settings.
    • Security → Access & Roles now lists every one of them with a switch and a link to the setting in its own tab. Changing a switch here changes the setting itself.
    • The list is built from the page, so a new role requirement added anywhere appears here automatically.
    • (Ref: app-role-requirements-section, admin_access_roles_roster.js)

User Interface Enhancements

  • System Settings Card Split To Where Each Setting Belongs
    • One card mixed maximum file size, conversation history, idle timeout, the default system prompt and the access denied message — five unrelated concerns under one heading.
    • Maximum File Size is now in Workspaces → Files & Sharing, Conversation History and Default System Prompt in Chat → Chat Experience, and Access Denied Message in Security → Access & Roles.
    • What remains in Security → Session is the idle timeout, and the card is now named for it.
    • Every setting keeps its saved value; nothing needs re-entering.
    • (Ref: idle-timeout-section, file-size-limit-section, conversation-history-section, default-system-prompt-section, access-denied-message-section)

(v0.260.016)

User Interface Enhancements

  • Backup, Migrate & Restore Split Into Five Tabs
    • One tab carried the entire backup, migration, restore, Cosmos editing and job history surface — over 1,600 lines in a single scroll.
    • Backup & Recovery now has Backup (readiness, backup, schedule, storage, encryption), Migrate, Restore, Cosmos Editor and Jobs.
    • The save button, status line and operational-hours warning are shared by all five tabs, so they sit above the tabs and stay available wherever you are in the group.
    • This completes the Admin Settings restructure: 14 groups and 44 tabs, from an original 17 flat tabs.
    • (Ref: backup, migrate, restore, cosmos-editor, jobs)

Bug Fixes

  • Backup Dialogs Remain Available From Every Tab
    • The eleven Backup & Recovery dialogs are opened from more than one place and several are opened from code rather than a button. Left inside a tab, a dialog cannot appear while a different tab is showing.
    • They now sit outside the tabs, so restore, migration cancel, job detail, the Cosmos editor dialogs and the five setup guides all open wherever they are triggered from.
    • (Ref: Backup & Recovery dialogs, admin_data_management.js)
  • Shared Controls Work In Both Navigation Layouts
    • Shared group controls resolve their group from whichever navigation is on screen, so the Backup & Recovery save button is present in the sidebar layout as well as the tab layout.
    • (Ref: data-admin-group-shared, admin_sidebar_nav.js)

(v0.260.015)

User Interface Enhancements

  • AI Models Split By Model Purpose
    • AI Models presented every model setting on one tab. It is now Model Endpoints (endpoint and fallback configuration, plus the Chat Model dialog opened from it), Embeddings and Image Generation.
    • (Ref: model-endpoints, embeddings, image-generation)
  • Agents And Actions Are Now Separate Tabs
    • A single “Agents and Actions” tab carried agent configuration, template approvals, document action capabilities, action configuration and the whole inbound MCP surface.
    • It is now Agents, Actions and Inbound MCP.
    • Inbound MCP is a large area with its own dialogs and diagnostics, and the whole tab is hidden when the inbound MCP interface is turned off rather than showing an empty tab.
    • (Ref: agents, actions, inbound-mcp)

Bug Fixes

  • Model Setup Guide Available From Every Model Tab
    • The Azure OpenAI Model Setup Guide dialog is opened from the endpoints, embeddings and image generation cards. Once those moved to separate tabs it could only have opened from one of them.
    • The dialog now sits outside the tabs, so it opens from all three.
    • (Ref: legacyModelDiscoveryIdentityGuideModal)
  • Dangling Section Comments Removed
    • Seven tabs ended with a comment labelling a card that had since moved to another tab.
    • (Ref: admin settings tab panes)

(v0.260.014)

User Interface Enhancements

  • Knowledge Settings Split By What They Actually Do
    • Search & Extract held eight cards spanning four unrelated jobs, from Bing consent to voice transcription.
    • Knowledge now has Web & Research (web search, URL access, deep research), Search Index (Azure AI Search), Document Extraction (document intelligence, chunk sizes, plus metadata extraction and multi-modal vision brought over from Workspaces) and Audio & Video (video intelligence, voice conversations), alongside the existing File Sync.
    • Voice and video sit under Knowledge rather than Chat because they are extraction pipelines that turn recordings into searchable content.
    • (Ref: web-research, search-index, extraction, audio-video)
  • Workspaces Focused On Workspaces
    • Workspaces mixed workspace types with file rules, workflow and extraction settings.
    • It is now Workspace Types (personal, group, public), Files & Sharing (downloads, sharing, and shared conversation file approvals brought over from AI Models) and the existing Global Identities.
    • (Ref: workspace-types, files-sharing)
  • Workflow Is Its Own Area
    • Workflow drives approvals and assignment across every workspace type and was too large to sit as one card inside Workspaces. It now has its own group.
    • (Ref: workflow, workflow-settings-section)

Bug Fixes

  • Group Workflow Assignment Dialog Could Not Open
    • The Group Workflow Assignment dialog ended up in a different tab from the button that opens it. Because an inactive tab is hidden, the dialog would not have appeared at all.
    • The dialog now sits with its button, and a new check verifies this for every dialog in Admin Settings so it cannot happen again.
    • (Ref: groupWorkflowAssignmentModal, test_admin_settings_modal_placement.py)
  • Misplaced Section Comments In AI Models
    • Two section comments had drifted onto the wrong cards while settings were being regrouped, labelling the embeddings card as processing thoughts.
    • (Ref: ai-models pane)

(v0.260.013)

User Interface Enhancements

  • General Tab Broken Up Into Focused Tabs
    • General had grown into a catch-all of eleven unrelated cards: branding sat next to health checks, API documentation, terms of use and system settings.
    • Appearance now has Branding (branding, home page text, appearance), Notices & Agreements (classification banner, chat AI notice, terms of use and the user agreement pulled across from Workspaces) and Pages & Links (static pages plus external links).
    • Health Check and API Documentation moved to Operations, which is now Logging & Health — they report on how the app is running rather than how it looks.
    • Support moved to Help as its own Support Menu tab, next to Send Feedback.
    • (Ref: branding, notices, custom-pages, logging, support-menu)
  • Security Split Into Five Purposeful Tabs
    • Security held a single Key Vault card while an unrelated Safety tab mixed content filtering with role permissions, which are different jobs.
    • Security is now Access & Roles (who gets in and with what role), Secrets (Key Vault), Content Safety (what may be said once you are in), Session (idle timeout and related system settings) and Network (Azure Front Door).
    • (Ref: access-roles, secrets, content-safety, session, network)

Bug Fixes

  • “Open Key Vault Settings” Link No Longer Depends On A Hardcoded Tab
    • The link from Data Management to Key Vault switched tabs by a hardcoded id, so it silently stopped working whenever that tab was renamed.
    • It now uses the standard card link, which finds the owning tab from the page itself and stays correct however the settings are grouped.
    • (Ref: data-management-key-vault-link, admin_card_links.js, admin_data_management.js)
  • Admin Settings Always Opens On A Real Tab
    • The tab shown on arrival was pinned to a specific id in both the markup and the sidebar script. Regrouping settings could leave Admin Settings opening with no tab selected at all.
    • The landing tab is now taken from the navigation map, so it follows the settings and can never be Latest Features.
    • (Ref: admin_landing_tab, get_landing_tab_id, admin_sidebar_nav.js)
  • Stale Tab Names In Latest Features
    • Several Latest Features entries pointed readers at tabs by their old names after the settings moved.
    • (Ref: latest-features pane)

(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

  • Governance And Scale Split Into Focused Tabs
    • Governance held five cards covering three different jobs. It is now Feature Governance (which features are governed), Policies (the policies themselves), and MCP Governance.
    • Scale mixed cache configuration with Cosmos capacity, and is now Redis & Caching and Cosmos.
    • Azure Front Door moved out of Scale into Security, under a new Network tab. It configures authentication and redirect flows rather than throughput, so it never belonged with capacity settings.
    • Existing links and bookmarks to #governance and #scale still work and land on the first tab of each group.
    • No settings changed. Every option keeps its name and its saved value.
    • (Ref: navigation map, feature-governance, governance-policies, mcp-governance, redis-caching, cosmos, network)

Bug Fixes

  • Governance Status Messages No Longer Get Stuck On One Tab
    • The inline governance status message lived inside the Governance pane, so a message raised while working in one area could end up rendered on a tab you were not looking at.
    • It now sits outside the tabs and is visible wherever you are in Governance.
    • (Ref: governance-status, admin_governance.js)

Bug Fixes

  • Reliable File Generation From Agent Action Results
    • Asking an agent for a downloadable file built from action results now produces the complete dataset in the requested format. Previously these requests could fail outright, publish a three-row sample of a large result, overwrite the assistant’s written answer, or return nothing at all. Delivered across v0.260.004 through v0.260.011.
    • Files no longer fail to generate. A CSV built from several actions in one turn could stop with Generated output schema mismatch at row 2, because each action returned a different set of columns. The export now pins a union of every column before the run starts and pads the missing cells, so mixed-shape results serialize instead of failing.
    • The written answer is no longer replaced by the file card. CSV replies were suppressed alongside JSON and XML, but only JSON and XML withhold their payload from the response. CSV, DOCX, and PDF now keep the assistant’s answer and append the file card beneath it.
    • Files contain the retrieved data, not a sample of it. When the assistant pasted a few example rows above its answer, that excerpt outranked the real result set, producing a 3-row file from a 900-row query. Pasted rows are now used only when they are not an excerpt of the data actually retrieved.
    • Discovery calls no longer dilute the dataset. A turn that lists instances, lists parameters, then retrieves history used to blend all three into one file. Rows are grouped by the action that produced them, and the action holding the substantive dataset wins.
    • Follow-up requests reuse data already gathered. Asking “now make that a CSV” after the data was retrieved in an earlier turn no longer returns an empty result. The export reaches back through stored conversation citations, bounded by the conversation history limit in Admin Settings, and reuses the rows already collected instead of re-querying the source.
    • Answering a clarifying question now delivers the file. When the assistant asks which rows and columns to include, replying “yes, all columns” now publishes the file that was originally requested. The clarification turn itself no longer publishes a placeholder file built from the question text.
    • The assistant no longer claims it cannot create files. Every format now states the publication contract to the model, including on the turn that only answers a clarification, so replies stop saying “I cannot create or attach a file in this interface” and then producing one anyway.
    • Overlapping result pages no longer double the row count. Agents frequently re-request a range from the same start time rather than paging forward, which produced a 1,000-row file for a window holding roughly 500 distinct records. Rows an earlier page of the same action already returned are dropped, while genuinely repeated records inside a single response are preserved.
    • Partial data is now labeled. When an action reports that it truncated its own results, the file carries a Partial badge and a note explaining that it covers only the rows the action returned. Agents are also instructed to request the remainder starting after the last row they already hold, rather than repeating the original range.
    • CSV, DOCX, PDF, JSON, and XML now behave identically. All five formats resolve rows the same way, reach back to earlier turns, decline to publish on a clarification turn, and report truncation.
    • (Ref: functions_generated_file_exports.py, functions_tabular_generated_exports.py, route_backend_chats.py, chat-messages.js, Generated Artifact Paging, Truncation, and Guidance Carry-Forward Fix, Refs #1071)

(v0.260.010)

New Features

  • Admin Settings Navigation Is Now Grouped
    • Admin Settings presented 18 tabs in one flat list. Related tabs are now collected under 12 groups such as Appearance, Knowledge, Security and Operations, so the list is scannable and has room to grow.
    • In the sidebar, groups are collapsible and remember whether you left them open. In the tab layout, a row of group pills filters the tab strip to one group at a time.
    • Opening a tab always reveals its group first, so a deep link or a cross-reference can never land you on a pane whose tab is hidden.
    • Sidebar search now matches group names as well as tab and setting names, and expands whatever it needs to show a result.
    • No settings moved in this release. Every tab keeps its contents; only the navigation around them changed.
    • (Ref: admin_settings_nav.py, _sidebar_nav.html, admin_settings.html, admin_sidebar_nav.js)

Bug Fixes

  • Shared Conversation File Approvals Is Reachable From The Sidebar
    • The Shared Conversation File Approvals card had no navigation entry, so it could only be found by scrolling the AI Models tab. It is now listed like every other setting.
    • (Ref: shared-conversation-file-approvals-section, navigation map)
  • Navigation Labels And Order Can No Longer Drift
    • The tab strip and the sidebar each maintained the same structure by hand and had diverged: tab order differed between them, and Agents, Custom Pages and Search and Extract each showed a different name depending on which navigation you used.
    • Both now render from one definition, so a change is made once and appears in both.
    • (Ref: admin_settings_nav.py, test_admin_settings_nav_map.py)

(v0.260.009)

New Features

  • Admin Settings Form Field Contract Is Now Enforced
    • Admin Settings submits one form and the backend reads every value by field name, so the set of name attributes is the real contract between the template and the settings backend. Renaming or dropping one silently stops that setting from saving, with no error anywhere.
    • A new test pins every field name against a committed baseline, and fails the build if one disappears. Adding settings is unaffected; removing one now requires regenerating the baseline in the same commit, which makes it a visible, reviewed decision.
    • The same test rejects duplicate field names, which is what prevents a mirrored control from submitting a value twice.
    • (Ref: test_admin_settings_field_contract.py, admin_settings_field_baseline.json)

(v0.260.008)

New Features

  • Settings That Need Another Setting Now Say So
    • Some Admin Settings options only work when a different option is enabled, and the two often live in different tabs. That was previously explained only in prose, in a tooltip, or in a warning after saving, so you could switch something on and have nothing happen with no visible reason.
    • Affected cards now show an inline notice naming what they need, with a switch to enable the prerequisite without leaving the tab and a link straight to its full configuration.
    • File Sync announces its Redis Cache requirement live, and keeps its save-your-intent behaviour: settings can still be saved and activate once Redis is ready.
    • The FeedbackAdmin role control is disabled until User Feedback is enabled, since the role only governs access to the User Feedback report. The unrelated SafetyViolationAdmin control in the same card stays usable.
    • These notices are guidance only. The server still validates every prerequisite.
    • (Ref: admin_settings_dependencies.js, data-requires, File Sync, Permissions)

Bug Fixes

  • Cross-Tab Links In Admin Settings Now Point At The Right Place
    • Links that send you from one Admin Settings tab to a related setting used to name a tab button directly, so they broke silently whenever a tab was renamed or reorganised: no tab opened, and the address bar was left pointing at nothing.
    • Two were already wrong. The Video File Support and Audio File Support references in Citations sent you to the Workspaces tab, but those settings live under Search and Extract. Both now open the correct card.
    • All twelve cross-tab links now name the card they want, and the owning tab is worked out when you click. The destination card is briefly highlighted so it is obvious where you landed.
    • (Ref: admin_card_links.js, data-admin-link, openAdminCard, test_admin_card_links.py)
  • User Agreement Preview Sanitized At The Sink
    • The User Agreement preview rendered Markdown through a guarded reassignment, which reads as unsanitized to static analysis and matched the pattern already corrected for the Home Page Text preview.
    • Now sanitized inline with DOMPurify.sanitize(...) at the point of rendering. marked and DOMPurify are both loaded globally, so the availability guards were redundant.
    • (Ref: User Agreement, admin_settings.html preview handler, DOMPurify)

(v0.260.007)

User Interface Enhancements

  • Latest Features No Longer Opens Every Time You Visit Admin Settings
    • Latest Features was pinned first in both the top tabs and the admin sidebar, and its pane was hard-coded as the default active tab, so a curated release-notes page behaved like the Admin Settings landing page.
    • It now sits last in both navigations, after Send Feedback, and General is the landing tab instead.
    • The Latest Features content is unchanged, including its New badge and the hide/unhide option.
    • (Ref: admin_settings.html top-tab strip, _sidebar_nav.html, admin_sidebar_nav.js default tab)
  • Global Identities Is No Longer An Unlabelled Widget
    • The Global Identities tab rendered a bare control with no heading or description, unlike every other Admin Settings tab.
    • It now has a heading and explains that identities are deployment-wide and that secrets are stored in Key Vault when Key Vault storage is configured.
    • (Ref: Global Identities, workspace-identities-section, functions_workspace_identities.py)
  • File Sync Is Now Reachable From The Sidebar
    • File Sync is one of the larger settings surfaces but was the only tab with no sidebar submenu, so its sub-areas could not be jumped to or found with sidebar search.
    • Visible Source Types, Personal Workspace Sync, Group Workspace Sync, and Public Workspace Sync are now sidebar destinations.
    • (Ref: File Sync, _sidebar_nav.html, file-sync-submenu)

Bug Fixes

  • Classification Banner Preview Now Updates As You Type
    • The live preview in Admin Settings never updated, because its script sat between template blocks where Jinja discards it, so the code was never rendered to the page.
    • The preview now responds to banner text, background colour, and text colour changes.
    • (Ref: Classification Banner, admin_settings.html {% block scripts %})
  • Admin Sidebar Section Map Cleaned Up
    • The sidebar’s sectionMap had grown to 72 entries, but 66 of them mapped a key to itself, which the existing fallback already handled, and one pointed at an element that no longer exists.
    • Reduced to the 6 entries that are genuine aliases. A new test now fails if a redundant, dangling, or unreferenced entry is reintroduced.
    • (Ref: admin_sidebar_nav.js, scrollToSection, test_admin_settings_sidebar_card_parity.py)
  • Home Page Text Preview No Longer Reinterprets Editor Text As HTML
    • The Home Page Text preview in Admin Settings assigned the raw editor contents to innerHTML when the Markdown editor had not initialized, so text typed into the editor was reinterpreted as HTML. CodeQL flagged this as js/xss-through-dom (high severity).
    • The raw fallback now uses textContent, which is what the code intended by “just show raw text”, and the Markdown path is sanitized inline with DOMPurify.sanitize(...) at the sink. DOMPurify is loaded globally from the local vendored bundle, so no external asset is introduced.
    • (Ref: Home Page Text, admin_settings.html showPreview, DOMPurify)

Breaking Changes

  • Admin Settings Template Split Into Per-Tab Partials
    • admin_settings.html had grown to 13,526 lines in a single 1 MB file. Each tab pane now lives in templates/admin/_panes/ and is included by the parent, which keeps the global form, the modals, and the script blocks.
    • No settings behaviour changes: every form field name and all 110 configuration card ids are byte-identical, so the submitted payload and the settings backend are untouched.
    • Migration: code or tests that read templates/admin_settings.html directly now see only the parent shell. Use test_support.templates.read_admin_settings_template() in functional tests, or compose_if_admin_settings() inside a shared file-reading helper. A new contract test fails if a test asserts on a partial-backed card or field without composing the template first.
    • (Ref: templates/admin/_panes/, functional_tests/test_support/templates.py, test_admin_settings_template_composition.py)

(v0.260.006)

New Features

  • Shared Conversation File Approvals
    • Files generated by a participant in a shared conversation are now created immediately and held in a pending approval state instead of being refused, because they are saved into the conversation owner’s storage.
    • The conversation owner approves personal shared conversations; any group Owner, Admin, or Document Manager approves group shared conversations. Requesters can never approve their own file.
    • Approvers get an inline Approve / Deny card on the pending file plus a notification. Approving releases the file, denying deletes the stored file and records who declined it.
    • A staged file is not downloadable by anyone, including the requester, until it is released.
    • Only downloadable deliverables are gated (CSV, XLSX, DOCX, PDF, JSON, XML). Generated images and charts are never gated.
    • Unapproved files are automatically declined and deleted after 3 days, matching the existing Control Center approval window.
    • New Admin Settings toggle Require approval for participant-generated files, enabled by default.
    • (Ref: functions_generated_file_approvals.py, chat-file-approvals.js, require_shared_conversation_file_approval, /api/collaboration/file-approvals)

Bug Fixes

  • Actions Using the Application Identity Are Now Restricted to Azure Endpoints
    • Actions that authenticate with the application’s own managed identity can no longer be pointed at an arbitrary endpoint. Blob Storage, Queue Storage, Cosmos, Databricks, and Log Analytics actions now accept only canonical Azure service hostnames for the public, US Government, China, and Germany clouds.
    • Previously a caller holding only the normal User role could save a personal action with an attacker-controlled endpoint and application managed-identity authentication, causing the application to send a token minted for its own workload identity to that destination.
    • Endpoints are validated when the action is saved and again immediately before the client is built, so actions stored before this release stop working rather than continuing to send credentials.
    • Log Analytics custom clouds can no longer choose the Microsoft Entra token authority or the OAuth resource used for delegated tokens.
    • Existing actions using standard Azure hostnames are unaffected. Custom domains, development storage, Azure Stack, and direct private-link hostnames are intentionally rejected, matching the Azure Blob File Sync hardening in v0.250.068.
    • (Ref: functions_azure_endpoint_validation.py, plugin_health_checker.py, blob_storage_plugin.py, queue_storage_plugin.py, cosmos_query_plugin.py, databricks_plugin.py, log_analytics_plugin.py, Action App-Identity Endpoint Hardening Fix)
  • Action Authentication Types Are Now Enforced on the Server
    • Each action type’s supported authentication methods, declared in its schema definition file, are now enforced when an action is saved or tested. Previously the list was only used to populate the action modal and was never checked by the backend.
    • This prevents an action type from being configured with an authentication method it was never designed to support, such as requesting application-identity authentication for an OpenAPI or Microsoft Graph action.
    • The auth-types API now resolves through the same helper the save paths use, so the modal and the backend cannot drift apart.
    • (Ref: json_schema_validation.py, get_allowed_auth_types_for_plugin_type, validate_plugin_auth_type_allowed, route_backend_plugins.py)

User Interface Enhancements

  • Blob Storage Actions Can Now Use Managed Identity or an Account Key
    • The Blob Storage action modal gained an authentication selector offering Connection String, Managed Identity, and Account Key, along with blob service endpoint and account key fields.
    • Previously the modal only collected a connection string even though the backend accepted other methods, so managed identity was not reachable through the UI.
    • The endpoint field is validated against the Azure Blob hostname allowlist before the action is saved.
    • (Ref: _plugin_modal.html, plugin_modal_stepper.js, blob_storage.definition.json)
  • Shared Conversations No Longer Fail With “Stream interrupted: Forbidden”
    • Fixed invited participants being unable to invoke the AI at all in a shared conversation. Any explicit AI request returned Forbidden with no content.
    • Root cause was the hidden source conversation behind every shared conversation being owned by its creator, so participants failed a plain ownership comparison in the chat streaming route even though they are legitimate members.
    • Because shared conversations only call the AI on an explicit mention, this surfaced the first time a participant asked the assistant for something, which made it look file-specific.
    • Participants can also now download generated files from a shared conversation, which was blocked by the same comparison.
    • Also fixed background CSV exports queued by a participant becoming unreadable for the owner, because publication checks looked up the export run under the wrong user partition.
    • (Ref: build_conversation_participation_context, route_backend_chats.py, route_enhanced_citations.py, functions_simplechat_operations.py)

User Interface Enhancements

  • Clearer Group Workspace Save Errors
    • Attempting to save a generated document into a group workspace without document rights now names the roles that can complete it and suggests requesting the content as a downloadable file instead of failing with a bare permission error.
    • (Ref: _resolve_group_upload_target_for_current_user)

(v0.260.005)

User Interface Enhancements

  • Tab Now Completes an @ Mention in Shared Conversations
    • In multi-user conversations, pressing Tab while the @ suggestion menu is open now accepts the highlighted participant, agent, model, or invite suggestion, exactly like Enter already did.
    • Previously Tab moved focus out of the message box and left the half-typed @par text behind, which broke the autocomplete habit most people bring from other editors and chat clients.
    • Shift+Tab is deliberately unchanged and still moves focus backwards, and Tab still moves focus normally when the menu is showing “No matching participants…”.
    • The chat mention menu now matches the agent instruction mention menu, which already accepted Tab.
    • (Ref: chat-collaboration.js, handleComposerKeydown, selectActiveMentionSuggestion, Fixes #1299)
  • Mention Menu Is Now Announced Correctly By Screen Readers
    • Each @ suggestion is now exposed as a proper listbox option with aria-selected, and the message box references the highlighted suggestion through aria-activedescendant paired with aria-controls so assistive technology can resolve it.
    • The highlighted suggestion is also scrolled into view while arrowing through a long list, so keyboard navigation no longer highlights an off-screen entry.
    • (Ref: chat-collaboration.js, renderMentionMenu, updateMentionMenuActiveItem, applyMentionComboboxState, chats.html)

(v0.260.004)

Bug Fixes

  • New Chat Now Clears The Conversation Documents Side Pane
    • Fixed the conversation side drawer keeping the previous conversation’s documents after clicking New chat. The stale list, the header documents toggle, and its count badge all stayed visible, and the drawer would not close.
    • Root cause was the New chat reset signal carrying a null conversation id while window.currentConversationId still pointed at the conversation being left, so the drawer fell back to the old conversation and re-fetched its documents instead of clearing. The Contents pane was unaffected because it resets from a separate chatbox observer.
    • The Documents pane now empties out and the drawer closes, matching Contents behavior. Switching between existing conversations is unchanged, and one redundant conversation-metadata request per New chat click is eliminated.
    • (Ref: chat-conversation-contents.js, refreshConversationDocuments, chat:conversation-context-changed, updateDrawerTriggers, Fixes #1298)

(v0.260.003)

Bug Fixes

  • Data Management Timeline Steps Now Show Their Own Status
    • Fixed completed job steps showing a running badge on the Data Management job timeline. Events such as “Cosmos DB export step completed” and “Migration reconciliation completed” now read completed.
    • Root cause was _set_job_progress stamping the job status onto every step event it recorded, so a finished step inherited running because the job itself was still running.
    • Step status is now decoupled from job status: steps that start report running, steps that finish report completed, and the job continues running until it genuinely finishes.
    • Applies to backup, restore, and migration timelines.
    • (Ref: functions_data_management.py, _set_job_progress, _complete_job_step, _record_data_management_job_event)

User Interface Enhancements

  • Finished Jobs No Longer Look Stuck
    • Completed backup jobs no longer display Current container: Waiting, which made a finished job look like it was still churning.
    • Migration jobs no longer display a Liveness: Running row after reaching a terminal status.
    • Live-only telemetry is now hidden once a job is completed, completed_with_warnings, failed, or canceled.
    • (Ref: admin_data_management.js, getBackupLiveMetrics, getMigrationLiveMetrics, isTerminalJobStatus)

(v0.260.002)

Bug Fixes

  • Backup Inventory No Longer Fails To Load
    • Fixed the Backup Inventory panel in Admin Settings → Data Management always returning 503 and showing 0 for available, full, and partial backups.
    • The global summary used a Cosmos GROUP BY with a non-VALUE aggregate (COUNT(1) AS count), a combination the azure-cosmos Python client does not support. Cosmos rejected the query during plan negotiation with BadRequest ... GroupBy NonValueAggregate.
    • Counts are now computed with bounded, fully supported SELECT VALUE COUNT(1) queries, so the panel renders real numbers without loading backup history into memory.
    • This was not a throttling or indexing problem; the composite index was already aligned. Backup Inventory had been broken since the summary shipped.
    • (Ref: functions_data_management.py, _get_data_management_backup_global_summary, _count_data_management_backups, /api/admin/data-management/backups)

User Interface Enhancements

  • Run Retention Cleanup Now Explains Itself
    • Added a hover tooltip and an (i) toggle that expands inline guidance next to the Run Retention Cleanup button.
    • Documents that cleanup permanently deletes backups past the retention period along with their artifacts, skips jobs that are still running, honors Keep latest full backup, and deletes at most 25 backups per run.
    • Clarifies that “found no expired backups to delete” means every backup is still inside the retention window, which is expected rather than a failure.
    • (Ref: admin_settings.html, backup retention cleanup, Data Management)

(v0.260.001)

v0.260.001 consolidates all work released after v0.250.001 into one major release note, spanning 117 incremental patch builds. This rollup highlights the major feature, UI, reliability, security, and operations themes while preserving the full per-build history in the Detailed Change Log at the end of this section.

Breaking Changes

  • Workflow Alert Configuration Model
    • The legacy single alert_priority workflow field is superseded by alert_mode, alert_rules, and alert_evaluation for rules-based workflow notifications.
    • Existing workflows are auto-migrated on read into equivalent failed-run and completed-run notification rules.
    • Migration: Review upgraded workflow alert rules and prune any always-notify completed-run rule that is no longer desired.
  • New Yamcs Client Dependency
    • The Yamcs Mission Control action adds yamcs-client==2.1.0, the repository’s first LGPL-3.0 dynamically linked pip dependency.
    • SimpleChat can still start without it, but Yamcs actions return an actionable dependency error until installed.
    • Migration: Run pip install -r requirements.txt or rebuild deployment images so the Yamcs client dependency is present where Yamcs actions are used.
  • Internal Route Name Hardening
    • Blueprint security hardening changed internal route names and required broad route policy/test updates.
    • Shared-conversation streaming regressions from the rename sequence were fixed in the consolidated patch history.
    • Migration: Update any custom integrations that call SimpleChat by internal endpoint name rather than public route URL.
  • Conversation Cache Fallback Behavior
    • Volatile chat bootstrap and conversation cache payloads no longer fall back to the Cosmos settings container when Redis is unavailable.
    • Deployments without Redis keep full functionality, but bypass these cache benefits.
    • Migration: Configure Redis for deployments that depend on chat bootstrap or conversation cache acceleration.

Upgrade Notes

  • Enhanced Extraction Settings Migration
    • Deployments already configured for Enhanced or Auto extraction are automatically migrated on first settings read to preserve their existing extraction mode.
    • No manual change is required unless admins want to revise extraction defaults after upgrade.
  • Embedded Image Chunk Placement
    • Word and PowerPoint figures are now merged into chunks with surrounding text instead of appended as extra chunks.
    • Existing documents keep their current chunk layout until re-extracted.
    • Use Change Extraction or re-upload documents to benefit from the new placement behavior.
  • Workflow Alert Review
    • Rules-based workflow notifications can express run status, text/regex matches, File Sync results, AI-judged outcomes, and agent signals.
    • Review workflow owner expectations after upgrade because migrated rules intentionally preserve prior notification behavior.
  • Redis-Backed Cache Operations
    • DAI document/tag caches and conversation list/feed caches now include Redis-backed invalidation and metrics behavior.
    • Monitor Redis availability to keep cache acceleration active; safety-sensitive cache invalidation fails closed when state is unknown.
  • Detailed Patch Traceability
    • The original v0.250.003 through v0.250.229 entries are preserved verbatim below with demoted headings for audit and support lookup.

New Features

  • Enhanced Document Extraction and Analysis
    • Azure AI Content Understanding supports AI-generated figure descriptions for PDFs/images, with Auto mode figure detection.
    • Embedded Office images, including EMF/WMF diagrams and legacy DOC/PPT media, are rasterized, analyzed, and indexed as citable chunks.
    • Optional Document Intelligence formula extraction adds LaTeX equation capture for PDFs when enabled.
    • (Ref: Azure AI Content Understanding, Document Intelligence, embedded image extraction, formula extraction)
  • Workflow Multi-Task Automation and Alerts
    • Workflows now support ordered instruction tasks with prior-task context chaining, per-task document actions, retry/failure handling, and configurable task limits.
    • Conditional alert rules cover run status, text/regex matches, File Sync summaries, AI-judged results, and agent-raised signals across five severity levels.
    • Active workflow runs can be cancelled from workspace rows, run history, or activity surfaces.
    • (Ref: workflow task sequencing, workflow alert rules, raise_workflow_alert, run cancellation)
  • Expanded Agent and Action Integrations
    • Yamcs and RocksDB action types add mission-control and HTTP/JSON data-service integrations.
    • Inbound MCP exposes governed SimpleChat capabilities for conversations, documents, prompts, tags, and workflows.
    • Action connection testing now covers OpenAPI, Maps, Blob, Databricks, Log Analytics, MCP, Snowflake, Tableau, RocksDB, Yamcs, SQL, and Cosmos DB.
    • (Ref: Yamcs action, RocksDB action, MCP inbound server, action test connection)
  • Governance, Security, and Model Administration
    • Governance policies support explicit block lists for feature and delegated item policies alongside allow rules.
    • Key Vault secret expiration reminders track per-action secrets with background sweeps, notifications, and telemetry.
    • Model requests can include HMAC-hashed user identity headers, and admins can configure per-model output token ceilings.
    • (Ref: governance policies, Key Vault secret inventory, model endpoint identity header, output token limits)
  • Chat Productivity, Grounding, and Notifications
    • Users can opt into response completion sounds, desktop notifications, configurable AI notices, and per-message MP3 export.
    • Conversation grounding now exposes model/workspace/document/agent context, used-document panes, assistant-response forks, and a contents drawer.
    • User font size preferences, generated JSON/XML export artifacts, and smarter scroll behavior improve long-session usability.
    • (Ref: chat notifications, grounding citations, used documents pane, conversation fork, contents drawer, export artifacts)
  • Workspace, Sync, and Data Management Operations
    • Azure Blob Storage File Sync adds SAS, managed identity, service principal auth, virtual-folder browsing, and ETag change detection.
    • Admin operations add automatic Control Center statistics refresh, backup cleanup/retention, restore workflows, Cosmos JSON editing, Redis Explorer, feedback/safety lifecycle controls, and file-processing log cleanup.
    • Multi-select metadata extraction, configurable Public Workspace naming, and index auto-login improve workspace administration.
    • (Ref: File Sync, Control Center, Backup Inventory, Data Management, Redis Explorer, metadata extraction)
  • Caching, Runtime, and Durable Processing Capabilities
    • DAI Redis read-through caches document lists, tag lists, and legacy counts with scope-version invalidation.
    • Conversation list/feed caching adds Redis hit/miss metrics for Admin Settings visibility.
    • Durable tabular analyze/search preflight parity, FFmpeg audio runtime support, and the model capability catalog broaden platform readiness.
    • (Ref: DAI Redis cache, conversation cache metrics, tabular durable preflight, FFmpeg, model capability catalog)
  • Latest Features Release Tiers for v0.260.001
    • Shifted the end-user Latest Features page and Admin Settings tab into current, previous, and archive release tiers for the v0.260.001 rollout.
    • Preserved per-tenant visibility choices across the shift. The new v0.260.001 user-facing cards ship hidden until their placeholder screenshots are replaced, so admins publish each card once its real capture is in place.
    • (Ref: Latest Features release groups, support catalog, admin catalog, visibility normalization)
  • Deeper End-User Feature Cards
    • Added 20 v0.260.001 end-user cards with seven concrete How To Try It steps and a three-image gallery each.
    • Expanded the Latest Features card helper with the images=[...] gallery form for multi-image cards.
    • (Ref: _latest_feature_card, _SUPPORT_RELEASE_260_FEATURE_CATALOG, Latest Features image galleries)
  • Admin Latest Features Archive Tier
    • Brought the Admin Settings Latest Features tab to the same three-tier current, previous, and archive model used by the end-user page.
    • Keeps v0.250.001 admin cards and older v0.241.x admin highlights available without crowding the current release tier.
    • (Ref: _ADMIN_LATEST_FEATURE_RELEASE_GROUPS, _ADMIN_RELEASE_260_FEATURE_CATALOG, Admin Settings Latest Features tab)
  • Latest Features PR Workflow Hooks
    • Added a Latest Features authoring prompt, PR template checklist, and CI warning path so feature PRs consider release notes, cards, and screenshots together.
    • Helps future releases keep in-app Latest Features content aligned with shipped user and admin changes.
    • (Ref: .github/prompts/update-latest-features.prompt.md, .github/PULL_REQUEST_TEMPLATE.md, release-notes-check.yml)

User Interface Enhancements

  • Agent and Workflow Builder Refresh
    • Agent configuration now follows Actions → Knowledge → Instructions, with selected actions visible in the Instructions step.
    • Workflows use a stepped General/Trigger/Tasks/Reliability/Review builder with per-task runner controls and alert-rule editing.
    • (Ref: agent modal, workflow builder, workflow runner controls, alert rules editor)
  • Administration and Configuration UX Improvements
    • Workspace sections now use a consistent Documents → Prompts → Identities → Sync → Endpoints → Actions → Agents → Workflows order.
    • Governance policy copy/inverse/show-users actions, dedicated Log Analytics configuration, refreshed backup/migrate/restore flows, and reviewed data migration steps reduce admin friction.
    • External links can be reordered, custom pages can be opened directly, and non-blocking Bootstrap toasts replace browser alerts across admin, workspace, and profile pages.
    • (Ref: workspace section order, governance UI, Log Analytics settings, data migration UI, toast notifications)
  • Chat, Navigation, and Accessibility Enhancements
    • Chat, navigation, and sidebar layouts remain usable at 200% zoom and with large text.
    • The Conversation Contents drawer adds safe labels, keyboard focus handling, active-location tracking, and responsive desktop/mobile navigation.
    • Long source lists collapse behind a disclosure, document picker rows show file-name context, and Refresh Documents preserves selection with clearer status.
    • (Ref: 508 usability, conversation contents drawer, source disclosure, document picker, refresh documents)
  • Data Explorer and Extraction Status UX
    • Redis Explorer uses a fixed-height modal with independent key-list and preview scrolling.
    • Cosmos query results open in a scrollable modal so the main editor stays focused on query setup.
    • Extraction badges identify the engine that ran and show Content Understanding vs. Document Intelligence fallback reasons.
    • (Ref: Redis Explorer, Cosmos editor results modal, extraction badges)
  • Placeholder Screenshots for Pending Captures
    • Added 76 branded “Screenshot pending” placeholders so every v0.260.001 Latest Features card renders a valid local image while final captures are pending.
    • Placeholders can be replaced in place with real screenshots without changing the catalog configuration.
    • (Ref: application/single_app/static/images/features/, Latest Features image galleries)