v2.39 - ask the assistant to protect personal data
You can now raise personal-data protection for a conversation just by asking - say 'redact personal information' (or type /redact) and the assistant masks personal details in its replies for that chat. Ask to 'block' to withhold anything sensitive instead, or '/redact off' to return to normal. Protection can be increased anytime but never lowered below your organization's baseline.
v2.37 - getting-started tools + a thinking animation
New here? The assistant now has friendly getting-started help built in. Just ask 'how do I get started?', 'what can I do here?', or 'how do I connect a data source?' — or tap the new starter suggestion. It explains how to ask questions and how connecting a data source works (you simply ask the assistant; the sign-in is handled behind the scenes).
While the assistant is working on your answer, its reply now shows a gentle typing animation so you can see it's thinking, instead of a blank space.
v2.36 - per-user OAuth MCP tools actually load
Fixed the last mile of per-user MCP connections (e.g. Market Mover): after you Connect, the assistant now discovers and caches that server's tools using your connection, so it can actually call them. Before, connecting stored your credentials but never learned the server's tool list (the background health check can't see per-user servers), so the assistant only ever offered a 'Connect' button and reported the tools as unavailable.
Also self-heals connections made before this release: the first chat turn after connecting picks up the tool list automatically — no reconnect needed.
v2.35 - capability switchboard + streaming fix
New floating admin switchboard (bottom-right, Tier 3 only): pause or resume Tool calls, the LLM (model), or the whole Chat arena independently, from any page, with a confirmation. The launcher glows red while anything is paused. Generalizes the old tools-only kill switch.
Fixed a bug that could leave a streamed reply hanging after the answer finished (surfacing as a spurious 'connection dropped' and, in some cases, an app restart): the stream now always sends its terminating signal so the client closes cleanly.
The 'new version available' reload prompt now waits until a freshly deployed image has been running at least 60 seconds before it appears - so you're never invited to reload onto a server that is still warming up.
v2.34 - fast cold start (defer seeds + migration off the boot path)
The real cold-start fix: the ~38s of startup was the one-time config migration + first-init seed checks doing serialized table reads on the cold managed-identity token, all before the web server started listening. That whole block now runs in the background, so the app accepts requests within seconds of starting. This shrinks the brief unavailability window during a deploy/restart from ~1 minute to a few seconds. No functional change - seeding still happens, just off the critical path.
v2.33 - faster cold start (defer startup I/O)
Follow-up to v2.32: the slow cold start turned out to be blocking startup I/O (the cold managed-identity token + serialized table setup + auth-config load), not JIT. Those now run in the background so the web server starts accepting requests in seconds, further shrinking the brief unavailability window during a deploy/restart. No functional change.
v2.32 - faster cold start (ReadyToRun)
The app is now published with ReadyToRun (ahead-of-time compiled), so it no longer has to JIT-compile the whole app on a cold start. Measured startup was ~60s of pre-listen JIT on the single-core plan; R2R should cut that substantially, shrinking the brief unavailability window during each deploy/restart. No functional change.
Fixed 'Authorization state does not match the signed-in user' when connecting a per-user OAuth data source (e.g. Market Mover) from the in-chat Connect button: the sign-in is now bound to the same identity the callback checks, so approving in the provider returns cleanly. The Connect button also gives immediate 'Connecting...' feedback on click, and the assistant no longer says the button is 'below' (it's in the reply).
The kill switch now posts a matching 'tool calls re-enabled' notification (and clears the 'blocked' one) when you toggle it back on.
v2.30 - tool-call kill switch + no more repeated Connect prompts
New kill switch on Config -> Chat Arena (App Admin): 'Block all tool calls' instantly stops the assistant from making ANY tool/MCP call (chat still answers from the model). Use it to short-circuit a runaway or misbehaving tool loop; toggle off to restore. Audited + notified.
Fixed the chat showing a long stack of repeated 'Connect' prompts for an unconnected data source: the assistant now gets a firm stop after the first prompt, and the chat shows a single Connect button. No backend/MCP calls were being made during that loop (no rate-limit risk) - it was a display + retry issue.
v2.29 - completed replies no longer misread as dropped
Fixed a chat bug where a fully delivered reply could be replaced by 'Connection dropped mid-reply' if the connection closed uncleanly at the very end. The client now treats the server's completion signal as done, so a finished answer stays put (and is saved to history) instead of being discarded. Genuine mid-reply drops are still reported.
v2.28 - chat drop visibility
A chat reply that drops mid-stream is now recorded: the browser reports the drop, Hello writes an audit entry and raises a (deduped) admin notification, so dropped replies are visible instead of silent. A client that simply disconnects mid-stream is logged as an abort rather than a false 'assistant offline' alarm.
v2.27 - per-user sign-in for OAuth data sources (Market Mover, etc.)
Some data sources require each user to sign in individually (their own OAuth), not a shared connection. When the assistant needs such a source you haven't connected yet, the reply now shows a one-click Connect button that walks you through authorizing it; your authorization is stored securely on your behalf and refreshed automatically. Once connected, that source's tools become available to you in chat. No App-Admin needed - anyone allowed to use the source can connect themselves.
Hello also refreshes each connected source's tool list automatically every 6 hours, so newly added tools show up without an admin re-running discovery.
v2.26 - Chat Arena config layout refinements
Condensed-pane polish on Config -> Chat Arena: status shows as a one-word pill (online / offline / unverified) to the left of the model dropdown; the model and personal-data dropdowns are always selectable (the Activate/Save buttons still appear only for a Tier 3 App Admin); the one-off chat Send button sits to the right of a fixed-size box; and the one-off result is clamped to a single line so the pane stays compact.
v2.25 - condensed Chat Arena config + consistent withheld-response history
Config -> Chat Arena is now condensed: each section shows a title on the left and its critical control on the right (one-off chat's box, the model activator, the personal-data mode), with a 'details' toggle that reveals the full explanation. Your open/closed choice per section is remembered.
A response withheld or errored by the personal-data policy now reads the same in live chat and in restored history (previously history showed an internal placeholder).
v2.24 - output personal-data policy: redact / block / flag / off
Hello now scans every chat response for personal data (names, emails, phone numbers, IDs, addresses, and more) and acts on it before you see it, per a policy set at Config -> Chat Arena -> Conversation policy: REDACT (default) returns the answer with personal data masked (e.g. '[PERSON-1] called [PHONENUMBER-3]'); BLOCK withholds a response that contains personal data; FLAG returns it with a warning; OFF passes it through. Detection and redaction use Azure AI Language, which runs inside the Microsoft data boundary on the same resource as the chat model. Every outcome is audited.
Because responses are screened as a whole, a turn with an active policy shows the full answer after screening rather than streaming word-by-word (OFF still streams live). If a scan can't complete, redact and block withhold the answer (fail-safe) so unscreened text is never shown.
v2.22 - blocked model activation shows a modal, not a wiped pane
When a model is blocked from activation (a provider-processed model outside the Microsoft BAA boundary), the reason now appears as a dismissible modal message instead of replacing the whole Chat Arena config pane. The pane and the active-model selector stay intact. The block was already audited (both successful and blocked activations are recorded in the audit trail); this is purely the on-screen presentation.
Chat model activation is now HARD-BLOCKED to in-boundary models only: the reconciler reads each BRR-Codex deployment's provider (model.format) and classifies its data boundary - Azure OpenAI (Microsoft-hosted, Microsoft is the data processor) is in-boundary; provider-processed models (e.g. Anthropic Claude, where the vendor processes the data even Hosted-on-Azure) cannot be activated (no UI override). Auto-adopt also only picks an in-boundary model. Fail-closed: an unclassified deployment is treated as out-of-boundary. Keeps PHI chat inside the Microsoft BAA boundary.
Config -> Chat Arena layout: the one-off chat box moved directly under Foundry linkage; the Conversation policy section is filled in (ADR-008 logging / PHI-PII scanning / retention / OBO tool scoping); Available tools sits before the Assistant section.
v2.20 - per-model parameter profiles (switch models without breaking chat)
The chat arena now applies a PER-MODEL parameter profile: reasoning models (gpt-5.x / o-series / *-luna) send `max_completion_tokens` and skip `temperature`; Claude and classic models keep `max_tokens`. Switching the active model to a reasoning model no longer fails with a 400 (the 'assistant offline' you saw on gpt-5.6-luna). One BuildChat() helper drives every chat path (chat, stream, probe, suggestions, conversation scan) so they never drift.
Access Explorer: the partner claim edges ('presents' / 'superseded by directory') now originate from the Partner sign-in node instead of You directly, so the path reads You -> Partner -> claim -> group.
v2.19 - show claims a verified partner presented but the directory replaced
For a directory-verified partner, the IdP claims their token presented but the directory read-back superseded no longer float unconnected: they draw a dashed BLUE 'superseded by directory' edge from You to the claim. Which claims were presented is read from the sign-in token (not the post-read-back groups), so the picture is accurate. A claims-only partner keeps the solid green 'presents' edge (the claim actually conferred).
v2.18 - directory tool for verified partners + What-if parity
The 'directory' chat tool + the Access Explorer now treat a directory-verified partner like a real employee: the tool reads your (and colleagues') employee-directory profile via the app identity when there's no Entra token, and the What-if simulator resolves a verified partner's groups DIRECTLY (like Entra) instead of via IdP claims - so Effective reach / Node info no longer contradict the verified tier. Unverified sessions get an honest 'needs a verified session' message.
A directory-verified partner also carries their per-user self-override, so single-user grants apply to them too. Employee-directory PII is permitted for verified employees; patient/clinical PHI remains a separate, harder block (see the access decision record).
A non-Entra partner whose (IdP-locked) email is a real @broadriverrehab.com / @aegistherapies.com tenant user now has their REAL directory groups + active roles read back via the app - directory-authoritative, so their tier + PHI/PII access is VERIFIED against the tenant of record, not asserted. Non-tenant partners stay claims-only (chat + non-PHI); PHI stays out of reach for them.
Access Explorer: the partner now shows a 'presents' edge to each claim it satisfies (the claim path is complete), the tier label reads 'verified - directory' for a resolved employee, and the Effective-reach pane groups features/tools under the one grant that confers them instead of repeating the explanation per row.
Session assurance is now a per-feature LEVEL (open | trusted | verified | entra) instead of a single Entra-required flag: a trusted partner IdP (idp.trusted) clears `trusted` features (chat + public-doc MCPs) while PHI/PII MCPs and config stay Entra-only
A non-Entra partner from a trusted IdP can now use the chat arena and the non-protected tools at their tier; DocAudit/Tenant/hello-data tools require a real Entra (or, later, directory-verified) session for auditability
v2.15 - live grant tiers + tier-mapping self-check
Access Explorer now reads the tier of every grant from the LIVE grant table, not the compile-time seed - group grants added via config (e.g. AC-Hello-Tier2/3) no longer show 'no tier', and a session's tier is no longer mislabeled 'Standard user'
Linkage-issues panel self-reports tier-mapping gaps: a partner claim asserting a role (inert for brokered sessions) or a group with no tier grant (membership-only / standard baseline) is now called out instead of needing to be eyeballed
v2.14 - panes: removable, collapsible, auto-tidy
Every pane now has a collapse (▾) and a remove (×) button; removed panes return via '+ <name>' restore chips - panes are no longer only replaceable
Panes start expanded and collapse only when not pinned beside the graph; an unpinned flyout drawer auto-collapses when you click in the graph
v2.13 - target dropdown deselects on '(choose a target)'
Setting the Target-analysis dropdown back to '(choose a target)' now clears the highlighted route/selection on the graph
v2.12 - Node info tracks the simulation; more grants; targeted click
Node info now reflects the CURRENT what-if state (not a stale baseline), so it agrees with Effective reach - a surface reads 'page open, N of M features here reachable' instead of a bare 'you can reach this'
The what-if grant list now includes groups named in feature allow-lists (e.g. Executive), not just MCP-gate and grant-table groups
Clicking a node while 'click any node' targeting is on now also refreshes Node info for that node
v2.9 - What-if shows what a grant ADDS (violet), not just what it removes
In What-if, toggling a grant ON now highlights the newly-unlocked items in VIOLET (distinct from green = already had); toggling OFF still reds/dims what's lost - so one pane shows both directions of impact relative to the selected user
This is the first step of folding the separate 'blast radius' analysis into the What-if simulator
v1.84 - dockable panes + ancestry toggle
Every Access Explorer pane is now a card you can REORDER (◀ ▶) or DOCK as a drawer on the graph's left/right edge (⇤ ⇥) - pinned (takes space) or unpinned (slim tab that flies out over the graph); your layout persists
Default: Access path first, then Adjust grants, Impact, Effective reach, Show/hide, edge legend - with Node detail docked right
New 'highlight ancestry on click' toggle next to the target picker controls the amber/cyan path tracing; Show/hide groups are collapsible
v1.76 - access graph speaks the industry-standard language
Lanes renamed to the standards the model implements: Subject (identity & IdPs), Qualifiers (Privilege / Session context), Permissions, Surfaces - per NIST ABAC, RBAC, and OAuth vocabulary
The Qualifiers lane visually splits privilege tiers from session-context conditions - two different kinds of gate that were previously lumped together
Node details and the edge legend now teach the standard concept behind each element (with the NIST / IETF / OASIS sources cited)
v1.75 - access graph: hubs get their own row
Nodes connected within the same lane no longer share a row - their edges travel diagonally in clear space instead of running behind other nodes
High-connection nodes (like You) get a row to themselves automatically
Access graph gets a Layout selector: Auto re-optimizes as you show/hide nodes; Manual freezes everything; Re-layout now recomputes for what's visible
mcp.invoke is no longer orphaned - a new obtained-via edge shows the scope is minted from your Entra session (On-Behalf-Of)
Dashed edges + a 'How to read the edges' legend explain the by-design tier-ladder bypasses (group allow-lists, MCP gate groups)
Marking notifications read (or fixing the cause) now clears the amber admin banner immediately
v1.73 - access graph: aligned layout + the missing Entra link
Access-chain graph default layout now aligns nodes vertically with what they connect to, groups object types, and spaces by label width (no overlaps) - same result on every reload and Reset
New 'establishes' edge: your Entra sign-in connects to the Entra session qualifier (the link existed in the access math but was never drawn); partner sign-ins show the gap on purpose
v1.72 - Claude models actually work + honest health status
Claude models (claude-haiku-4-5) now answer chat - they are served over a different Foundry route than OpenAI models, and the app routes per model family
Chat Arena config now distinguishes 'model deployed' from 'chat verified working' - green only after a real successful call; a Test button verifies end-to-end
All chat failures show one generic offline notice; error specifics go only to admin notifications and the audit trail
v1.71 - the chat model is now a setting + admin notifications
The assistant's AI model is a live config item (Chat Arena config) - activating a deployed model takes effect on the next message, no redeploy
If the model becomes unavailable, chat shows a friendly offline notice and notifies an admin (no more raw errors)
New Notifications pane for admins - open/read/resolved lifecycle, deduped; an amber banner flags open items on every page
Help Desk (Tier 1) can view the Chat Arena config state; changing the model stays Tier 3
v1.69 - chat survives an update
A message sent while a new version is deploying now reconnects and completes, instead of vanishing
If you reload mid-outage, your unsent message is restored to the box
v1.68 - audit pagination
Audit log now paginates — choose 20 / 50 / 100 / 500 per page, with prev/next
v1.67 - internal: deterministic gating test hook
Adds a dev/test-only access-decision readback for reliable automated gating tests; no user-facing change
v1.66 - faster deploys (code, not container)
Ships as a .NET code deploy instead of a container image - quicker updates, no behavior change
v1.65 - dev test-mode + e2e foundation
Admins get a Test mode toggle (flags your activity as test/automation in the audit)
Automated end-to-end testing can now sign in as profile classes (dev/test only — never prod)
No change to normal sign-in or access
v1.64 - forensic access audit (foundation for Cases)
Every page load + chat turn + impersonation now records the full access decision
Captures tier, impersonation, groups, and the allow/deny reason per tool
Arena page now honors impersonation too (chips + gate match the chat)
Groundwork for 'Cases' — assembling events into an evidence record (roadmap)
Ask for signatures/docs by chain, SVP, region, area, or state; new 'list chains' too
Directory search now covers job title and department, not just name/email
The assistant infers intent more cleanly on the first try (e.g. 'executive group members')
v1.31 - MCP self-test + group fixes + server versions
New Config -> MCP self-test: invoke every tool with a probe (OK/EMPTY/ERROR) to catch broken/empty tools
Group search now matches anywhere (not just prefixes); large member lists show a count + sample
Tool-call audit now records which MCP server image version served the call
v1.30 - audit: app version on every record
Every audit entry now records the app version that produced it (so an event can be recreated/replayed)
Audit view shows the Ver + Detail (inputs, timing) columns
v1.29 - chat: rebuilt on the standard agent runtime
Chat now runs on Microsoft's Agent runtime (Microsoft.Extensions.AI) - same experience, sturdier engine
Tool calls + streaming are handled by the framework; each conversation carries an id for review/audit
v1.28 - chat: real DocAudit metrics + gap tracking
Chat can now answer signature/doc questions: counts by date, therapist, facility, and pass rate
Big lists now show a total + sample (ask for the full list when you need it)
Every tool call is logged with its inputs + timing (HIPAA access trail; no patient data)
When the assistant can't answer, it records the gap for admins under Config -> Tool gaps
v1.27 - chat: generic Agent name + multi-tool answers
Chat turns now show as 'Agent' and your own name - no model name revealed
Fixed: questions needing more than one tool now return a full answer (no more silent stop after a tool)
v1.26 - chat: streaming replies + telemetry
Replies now stream in word-by-word instead of appearing all at once
Tool calls still run mid-stream; the tool note shows, then the answer streams
More AI headroom (rate limits raised) and full request telemetry behind the scenes
v1.25 - chat: rate-limit + token-usage telemetry
Rate-limit events now logged to the audit trail with the exact ceiling hit (requests vs tokens) + retry-after
Each chat turn records token usage, so busy periods can be traced to the model's throughput limit
v1.24 - chat: graceful rate-limit handling
If the model is briefly rate-limited, chat now retries once, then shows a friendly 'busy, try again' note
No more raw error text in the chat when the AI endpoint is busy
v1.23 - chat: directory + DocAudit tools (gated)
Chat can now look people and groups up in the directory (for IT-Helpdesk members)
Chat can answer DocAudit facility questions - facilities, therapists, patient and therapy-minute counts (for BRR-DASs members)
Each tool appears only if you're in the group that's allowed to use it
v1.22 - chat: DeepWiki + memory + cleaner surface
Chat now remembers the conversation in your tab and uses it for context (New chat starts fresh)
Ask about a public GitHub repo's docs - the assistant can look it up via DeepWiki (content-filtered)
The chat page is cleaner - no model picker or model name (those stay on the config page)
v1.21 - chat polish + 'directory' tool
The impersonation bar now stays pinned under the top bar (no more sliding beneath it), and the Chat page fits without scrolling while impersonating
Ending impersonation now clears the 'as …' avatar in the top bar right away
New Chat ability: ask the assistant for your own directory info (name, title, department, office, contact) - it reads your Entra profile on your behalf
v1.20 - real Chat layout
The Chat page is now an actual chat window - a scrolling conversation with a message box docked at the bottom, and the site nav bar at the top
Your messages and gpt-4o's replies stack in a thread (kept in this browser tab for now); press Enter to send, Shift+Enter for a new line
The governance details moved to Configuration → Chat Arena, with a short 'About' link on the chat page
v1.19 - Chat tab + Executive roster
A 'Chat' tab now sits in the top menu between Dashboard and References - visible only to people who can use the Chat Arena
References → Directory now lists the full membership of the Executive group (the group with Chat Arena access)
Fixed: after a period of inactivity, a Microsoft (Entra) sign-in could quietly fall back to a partner sign-in - it now re-authenticates with Microsoft as expected
Fixed: your Microsoft profile photo now shows when signed in with Entra (it was falling back to the Gravatar icon)
Saving a configuration change now shows a brief confirmation toast with the new setting, and every change is recorded in the audit log
v1.17 - telemetry, access audit, and group access to features
Telemetry is live: the Feature Flags page now shows real usage - which features are opened, and by how many people
The audit trail now records feature access (who opened what), not just configuration changes
A feature can now be opened to specific groups directly - the Chat Arena is now available to the Executive group
The map now fills the screen with the controls below it, and the Chat Arena now appears as a feature you can trace access to
Choose how removed items look in a simulation - red outline, dimmed, or hidden - and show or hide any item by lane
Nodes now stay within their lane when you drag them, so the layout keeps its shape
v1.15 - access map: partner sign-in and claim rules
The access map now shows the partner sign-in path too: the claim rules that turn a partner's sign-in details into access
Preview any partner identity and toggle the claims it presents to see exactly what each one would unlock
Switching the previewed sign-in between your work account and a partner login shows what stays reachable and what does not
v1.14 - access map: see why, and what-if
The access map now shows the full picture end to end: your identity, the privilege tier each grant confers, the features and tools it unlocks, and where each one shows up in the app - laid out in clear lanes
A simulator lets you preview access three ways: what you have now, what you would lose if a grant were removed, and what any other kind of user could do
Maximize the map to fill the screen, and the busy intro text now tucks away until you want it
v1.13 - connect to third-party OAuth MCP servers
New 'OAuth' sign-in mode lets Hello connect to public MCP servers that use their own login (Linear, Atlassian, Sentry, and the like)
A Connect button on each OAuth server walks you through that server's sign-in once; Hello then remembers your connection
Your connection is stored encrypted and per person - it is never shared, never shown, and never written to a log
v1.12 - test any MCP server + public samples
Each configured MCP server now has a Test button - check it connects and see the tools it offers, right from the editor
The test uses that server's own sign-in method (your identity, an API key, or none) so it exercises the real path
Two public sample servers added to try it out: DeepWiki (no sign-in, works now) and Tally (needs an API key)
v1.11 - MCP config panel + per-server auth model
New MCP servers editor: add, edit, and remove servers and the tools they offer, all in one place
Each server records how Hello signs in to it - direct, on-behalf-of, an API key (Key Vault reference), or none
The access map now colors each node by its kind, with a green outline for what you can reach
v1.10 - access map: tidy columns by type
The access map now lines up by kind - you, groups/roles, MCPs, audience, app reg - in columns
Easier to scan left-to-right; your dragged arrangement and Reset still work
v1.9 - access explorer: what-if simulator
Toggle off any group or role and watch your access recolor live - green = you keep it, red = you lose it, grey = you never had it
See WHY you have each MCP today, and the exact impact of removing a grant (lose / keep / unaffected)
Each access is flagged fragile (one path) or redundant (more than one), so you know what is safe to remove
Preview only - an Apply changes button is staged for a later release; nothing is changed yet
v1.8 - the access map remembers your layout
Drag nodes / pan / zoom and your arrangement is remembered next time you open the graph
A Reset layout button re-runs the automatic layout whenever you want a clean slate
v1.7 - access explorer: it's about you
The access map now starts with YOU - your sign-in, your groups, your roles, and the MCPs you can invoke
Green = what you can reach, dimmed = what you cannot, with a click-for-detail panel that traces each grant
Cleaner left-to-right layout, plus jump-to links between the config tabs and the graph
v1.6 - roadmap + issues as matching cards
Roadmap now uses the same cards as Issues, grouped by status, sorted by release
Each card shows its category (left) and the release it shipped in (right), as colored pills
Matching release tags share a color across both panes so you can line them up
v1.5 - sign back in the way you signed in
A broken or expired session re-authenticates with the SAME method you used (Entra or partner)
No more landing on the generic chooser after a deploy; signing out still returns you there