Data & More

Not available in Svenska

You are currently viewing the English version.

Release Note v26.8.x

13 min lÀsning29 okt. 2026

A new functional design for the notification report, and Purview Repair now writes sensitivity labels back into Microsoft 365. Covers v26.7.1 through v26.7.6 and v26.8.

Two things lead this release: a new functional design for the notification report, the page recipients open from a DLP notification, rebuilt as one workspace where filters, documents and the open document sit side by side, and Purview Repair, which turns the Purview dashboard from a measurement into a fix by writing sensitivity labels back into Microsoft 365.

TLDR

The notification report has a new design. Filters, the document list and the open document now sit side by side in one workspace. Same data, a lot less noise. You decide whether your organisation gets the new design, the classic one, or the choice, and anyone can switch back from their account menu.

Purview labelling is no longer only a report. Repair now writes the labels. You choose whether Data & More stamps the file or asks the Purview API to apply the label, you can limit a repair to a set of data owners, and every fix is written to a log you can read back.

Know when files disappear. Delete later now counts from a reference date you pick, and colours the remaining time so the urgent cases stand out.

Connect Microsoft 365 from your own tenant. A Global Admin can now build the app registration in their own tenant from a Configure link, with a certificate as the default credential.

Quieter, safer logs. A platform-wide logging standard keeps tokens, email addresses, document text and person data out of the logs, alongside a full security hardening pass.

Release date: October 2026 | Previous version: v26.7.6 (28 October 2026)

Scope: Changes since v26.7.0, including what shipped in the v26.7.1 to v26.7.6 patch releases. The headlines are the new notification report design and Purview Repair. This note also covers tenant-created app registrations, delete later, a large security hardening pass and a broad set of ingestion reliability fixes.

Action required after upgrade. Repairing labels through the Purview API requires an app registration Microsoft will bill: an unbilled app cannot be saved as the label writer, and the Repair panel links it to an Azure subscription for you. One backfill command is needed, at the end of this note.


A new functional design for the notification report

The report a recipient opens from a DLP notification has been rebuilt around the job it is actually used for: look at what was found, open a document, decide. Nothing is taken away, and nobody is moved without being asked.

  • A new report layout puts filters, the document list and the open document side by side in one workspace

  • An administrator can force the new design, force the classic design, or leave the choice to each user

  • Users who have the choice see it once per login, together with a short tour

  • The layout switcher sits in the classic report header, so switching back takes one click

  • The mobile report list was rebuilt: edge-to-edge panels, two-line rows showing file type, time before deletion, first class and date, and larger touch targets

  • Column sort now cycles through ascending, descending and none, with no default sort

  • Sensitivity labels with no documents are hidden from the report filter

  • Owner and custom owner can be used as fields in the query builder

Data & More for Purview: Repair

Purview 2.0 shipped in v26.7.0 as scope, business logic, measurement and analysis. This release adds the part that changes something.

  • Label writer. A repair rule either stamps the label into the file's metadata or asks the Purview API to apply it through Graph assignSensitivityLabel. Legacy Office formats, locked files and API refusals fall back to stamping, and email is always stamped

  • Billing. Label calls are counted per company and per month. An app registration that Microsoft answers 402 for cannot be saved as the label writer, and Repair links it to an Azure subscription in its own tenant to enable billing. The writer picker shows the cost estimate and a comparison of the two methods

  • Owner scope. A repair rule can be limited to named data owner users and AD groups, and the affected row counts recalculate for the owners you pick

  • Repair log. An append-only log records every fix, every stop and every label-writer change, with who did it, when, which class, which labels, which sources, the owner scope and the writer used. Available in the Repair card and at GET /api/purview/repair/log

  • Failure reasons. When a file cannot be relabelled, the reason is stored on the document and the rule, and the Repair panel opens the run log to show it

  • Set Business Logic saves every edit at once with an inline Saved hint, and classes with no hits stay in their category instead of collapsing into an Inactive section

  • Detailed Analysis bar segments show the label name on hover

  • The Measure shared-data chart leaves out classes hidden from business logic

  • The exfiltration index has been removed from Measure; the Purview protection score stays

New features

Delete later

  • A delete later rule counts from a reference date you choose: first notification, last notification, or last edit

  • When a document has no edit date, the creation date is used instead

  • Time before deletion is coloured by urgency: red under one day, yellow under seven days

  • Delete later and move later fields are hidden while enforcement is switched off

  • The policy history chart has a deleted data tab

Microsoft 365 app registration

  • A new Configure page lets a Global Admin build the app registration in their own tenant, instead of accepting an invitation link

  • A certificate is the default credential

  • Three scopes: Demo is read-only Exchange and OneDrive, while Production and Production + DLP match today's invitation links, except that SharePoint REST no longer also grants Sites.Read.All when Sites.FullControl.All is granted

  • Sign-in through a delegated app registration: a user outside the registration's Entra group is refused, and the user's own tokens are passed to the api so a mailbox scan can run as that user

Data subjects

  • Attributes and related people are suggested for a data subject from the values found near them in documents

DLP

  • A silent Log action records a violation without notifying anyone, and the audit filter is now called All violations

  • DLP policy and Log action counts appear in fleet status, and DLP tools are included in the dm-mcp installer

  • The Teams card shows which source the finding came from, using product names

Redaction

  • Search terms can be saved to a redaction dictionary and applied automatically when a file is processed, and files can be reprocessed against it

  • File lists are paged per group, with bulk file actions and a block on duplicate folder names

  • The policy report shows the burned-in redacted document, and the file that was sent can be opened directly in Redaction

  • Preview files are hidden and deleted after an hour if they are not opened

  • Documents with nothing selected for redaction are accepted

  • Image EXIF orientation is applied to the stored source so redaction boxes match the preview

Shared data dashboard

  • Mail rows keep the sender and the recipients

  • File rows carry the source, owners, custom owners and who can open them

  • Clicking a domain limits the account drill-down to that recipient domain

Changes

Security

A full security scan was run across the platform and the findings fixed.

  • Access control. Users can no longer grant themselves roles or permissions they do not hold. Managing another user's email addresses requires Edit User, and self-added addresses stay unverified. Repository routes are scoped to the caller's company and require Edit Organization. Configuration PUT endpoints are scoped to the caller's company. Report redaction previews and sends are limited to documents in the viewer's own report. Fileshare root paths containing .. are rejected and Add Source is required

  • Sessions and tokens. Sessions end on suspension, logout and password change. The SSO login state is signed, and the SSO JWT is passed in the URL fragment rather than the query string. Multi-tenant hop tokens are accepted only once and only for the matching deployment and workspace, and refresh and hop tokens are refused where a client token is expected. External invitation tokens are signed with an expiry; unsigned tokens are accepted until April 2027

  • Service to service. The internal secret is required on the iam admin, all_ids and user sync routes, and on the monthly report trigger. The llm-management service secret is compared in constant time and fails closed when it is not set

  • Boundaries. MCP aggregations that escape the company scope are rejected. Only Google service account keys are accepted for GCS repositories. Collector fileshare reads and writes stay under /mnt/data. Splunk logs are sent only to HTTPS URLs on public hosts with TLS verified, from a background task

  • Website sources. Only public HTTP and HTTPS URLs are crawled, every redirect hop is checked, file size is capped, and Chrome runs sandboxed as an unprivileged user instead of as root

  • HTML reports. Templates and the user-editable executive summary are autoescaped, and WeasyPrint resource fetching is restricted

Logging and privacy

  • A common logging standard was adopted across iam, api, analytics, client, dlp, ocr, redaction, ai-profiler, llm-management, known-persons-service, ews, imap, google, box, fileshare-service and website-source

  • Tokens, email addresses, request bodies, document text, LLM output and person data are kept out of logs

  • PROFILER_LOG_LEVEL is replaced by LOG_LEVEL in the profiler

Reports and dashboards

  • Document search priorities were reworked, and the free-text query is now searched the same way as the query array terms

  • Totals come from the search itself instead of separate count requests, in reports, sources, Azure users, groups and sites, logs and monitored data

  • Email source counts on the Data Owners page are consistent

  • Report tabs are capitalised, hidden column labels no longer stretch the header row, and the empty state is worded for filtered results rather than only for a search

  • The toolbar more menu is hidden when it has no actions

  • Fixes: API error when searching by path in detailed view, a duplicate request in detailed view, runaway height on the history source and Risk tab charts, doughnut chart label overlap, two-line labels in the risk per department and class chart, rounded corners on Risk chart bars and sankey nodes, a flash during initial load, the Czech flag, the Lithuanian label and the missing Turkish note field

  • Near search no longer crashes when a term is added, and empty rows are skipped

  • A report no longer ignores extra clauses on an edited data subject policy

  • Form, confirmation and delete dialogs were reworked onto one shared modal interface

Sources and ingestion

  • SharePoint: validation no longer deletes files that still exist, blocked sites are not retried, unresolvable sites no longer fail every cycle, and the company ownership preload and reingestion scan no longer re-run for every site

  • OneDrive: "this user has no OneDrive" is recognised and no longer re-probed every cycle, and a drive whose delta token Graph has expired is resynced instead of kept

  • Graph: an expired app registration secret is recognised and the hourly sweeps stop retrying it, a message keeps its stored entry id when Graph refuses to translate it, broker redeliveries are bounded so an acknowledgement timeout cannot re-ingest for ever, and a bad app registration document can no longer kill the ingestion cycle

  • Exchange: enforcement is paged by cursor and stuck task ids are released, mailbox access is verified before deleting on not found, attachments with no policies are guarded on delete, and the scroll position no longer jumps when deleting documents under a policy

  • Gmail: a delta run resumes from the saved history cursor

  • Fileshare: a file that vanishes mid-walk is treated as its own case, retries are bounded for a file that cannot be processed, and the system error branch is bounded

  • Retention holds: a hold that refuses a delete is recorded instead of retried for ever, and enforcement_blocked_by_hold is declared on the data index

  • Box: a daily roster pass, externally owned items on record, and a size cap applied before the hash check

  • Deleting a source removes its data from the index

  • Disk usage is now measured and reported once per threshold crossing, with a free-space floor, instead of a hardcoded "(70%)" every five minutes

  • The front-end static pages are served by nginx instead of the Node pushstate server

Classification and profiling

  • A rejected LLM classification is distinguishable from one where the LLM was unavailable

  • The LLM classifier's decision markers are kept out of the nightly tag garbage collection

  • An algorithm regex that makes the profiler recurse per character is refused, and a stack-overflowing regex no longer makes the profiler abandon the document

  • Spreadsheets that could not be read are not profiled, and failed OCR documents get a terminal state with the cause logged

  • Known person text values are matched as phrases, and tagging is logged per person

  • The ai-profiler reports rejected bulk updates and writes the terminal status synchronously, so a document cannot be retried every 60 seconds for ever

  • Azure users whose directory id no longer matches are re-bound

OCR

  • Image size is capped, workers are recycled and images are read at 3000 px to stop memory blow-ups

  • An unreadable PDF is no longer committed as a fully OCR'd document with no text

  • A tunable that is empty or unparseable falls back to its declared default

  • The signature detector no longer prints a block per inference

Monitoring

  • The slow-ingestion check now distinguishes a stalled backfill from a stale delta run and from a probe it could not perform, derives the staleness window from the source's own delta cadence, and says in the alert which of the three it was

  • The fatal log signature check alerts when it cannot run

  • The tag_update_issue alert is stored rather than raised

  • Paginated Elasticsearch helpers return every page

  • Two ingestion outages found by monitoring were fixed at the source: an Elasticsearch blip that killed every OCR worker at start-up and became a permanent respawn storm, and a RabbitMQ channel exhaustion that put graph ingestion into a consumer restart loop

Platform

  • llm-management is served by gunicorn with a 600 second timeout for blocking completions, instead of the Flask development server

  • The java profiler sends the internal secret when loading company ids from iam, and the profiling trace is off the default log level

  • "Nothing to enforce" is distinguishable from a failed source lookup

  • The app registration support email is sent through the task worker, so an unreachable mail server cannot break demo setup


Deployment

Backfill the company id on notified users:

docker exec -it api flask --app=manage backfill_notified_users_company_id

The purview_repair_log index and its mapping are created on startup, like the other Purview indices. No action needed.

Was this article helpful?