Breeze RMM v0.125.0 — agreements your clients sign without a quote, ticket merge with business-hours SLAs and routing rules, and update rings that decide Windows feature updates. Also in this release: install scripts and built-in Control D / NextDNS packages, YARA detection rules with fleet-wide IOC sweeps, AI conversations that move between the side panel and the full-page chat, and a more dependable Breeze Assist.
⚠️ Behaviour change: the agent no longer hides Windows feature releases on its own. The agent's local patch_exclude_feature_updates now defaults to false (was true). Each update ring decides instead, and every ring starts on Block, the previous behaviour. Nothing is offered until you set a ring to Allow or Pin (#10203). Details under Behaviour changes and feature flags.
⚠️ Behaviour change: DNS Security history older than 90 days is deleted on the first nightly run. A new retention job prunes DNS Security events and aggregations past each integration's retention window, 90 days by default. Before this release, integrations with no retention setting kept everything. Set a longer window per integration before upgrading if you need the history (#10042).
Summary
- Send agreements for signature without a quote (#10127, #10162, #10167, #10202, #10191, #10233, #10235, #10226).
- Send for signature is on Agreements → Signed agreements, on an organization's Billing tab and on a contract header. You pick the template, recipients and expiry, and preview exactly what the client sees.
- Clients sign on a public page with no account and no price shown, or in the customer portal's new Agreements page. A typed-name signature or a decline with a reason is recorded.
- The signer and every recipient get the signed copy by email. Downloads default to a certified copy with a signature-certificate page (who, when, from where, how, SHA-256 of the original). Original file still downloads the stored bytes.
- Remind, automatic expiry, and partner defaults for link expiry and automatic reminders (off by default) under Settings → Billing → Agreements.
- Signed agreements are write-protected in the database.
- A new
agreements:sendpermission covers sending, copying links, voiding and Record signed agreement. The upgrade grants it to every role that hasagreements:write, so nobody loses access.
- Ticketing: merge, business-hours SLAs and routing rules (#9901, #9997, #9897, #9811, #10001, #9846).
- Merge into… moves comments, time, parts, checklists and links to the surviving ticket. The merged ticket stays as a read-only record, and inbound mail follows the merge.
- Business-hours calendars with holidays under Ticketing → Priorities & SLAs: a partner default with an organization override. Each ticket keeps the calendar revision it was created under. Nothing changes until a partner marks a calendar as default.
- Routing rules under Settings → Ticketing → Routing: set the category, priority, status or assignee on new tickets, for one organization or partner-wide, first match wins. Only fields the creator did not set are filled.
- Update rings decide Windows feature updates (#10203). Each ring can Block Windows feature releases (the default), Allow the newest release, or Pin to one, such as Windows 11 25H2. A pin also writes the Windows Update for Business target-release policy on each device, and switching back removes only the values Breeze wrote. A blocked release shows as Excluded by policy on the device's Patches tab. Needs agent 0.125.0.
- Install scripts, zip packages and built-in DNS filtering packages (#9745, #9882, #9983, #10035, #10022).
- Software versions can carry pre- and post-install scripts that run as SYSTEM or root, and can use the new zip package type.
- Partner admins can add Breeze-pinned Control D and NextDNS CLI packages for Windows from Software → Catalog → Built-in packages.
- Software policies can require a service to be running: a stopped service is a violation, and an armed policy restarts it.
- Needs agent 0.125.0. Older agents fail the device with
agent_update_required, and nothing is sent to them.
- YARA detection rules and fleet-wide IOC sweeps (#9759, #9888, #10028, #10048, #10055, #9474).
- A new Detection Rules page under Security: rule sets with inline compile errors, an IOC paste importer and a test-a-file panel.
- A rule-set picker on the configuration policy Security tab, and a Rule panel on each threat.
- Sweep now runs published rule sets across many devices at once, from a preview you approve. Sweeps detect only and never start a Defender scan.
- The AI assistant gets an
ioc_hunttool. Sweeps and imports need approval, and a sweep over 25 devices needs a second approver.
- One Breeze AI, and conversations that move (#9852, #9996, #10029, #10044, #10056, #10153, #10155, #10157, #10165, #10171, #10148).
- A conversation moves between the side panel and the full-page chat (Open in AI Assistant / Continue in side panel) with its history, device, model and unsent text. A reply that is still streaming keeps streaming.
- Both surfaces share one history list, with organization and device chips.
- The chat is called Breeze AI everywhere. The full-page chat moves to
/ai/chat, and old links redirect. - Approvals say Approve / Deny, AI spend shows in dollars, and the four guardrail tiers have plain names.
- The AI sidebar section is shorter, and AI settings are gathered on a new Settings → AI page.
- Dashboard numbers you can click, and Sites in Fleet Management (#9808, #9887, #9982, #9995, #9998, #10052).
- Dashboard device, alert, vulnerability, security and patch figures open the filtered list they count.
- Sites is back under Fleet Management as a list across organizations.
- Move to site works on many devices at once.
- Patch compliance now shows the percentage of fully patched devices everywhere, so the dashboard number may change after the upgrade.
- A more dependable Breeze Assist (#10228, #10230, #10239, #10208).
- On Windows the agent no longer starts Breeze Assist on a WebView2 Runtime too old for it. The device reports Assist unavailable with the reason instead of crash-looping silently.
- The agent removes only an Assist it installed itself. A copy installed by Intune or by hand is left alone.
- The device page gets a Breeze Assist row.
- The native remote-support consent dialog now defaults to Deny.
- Needs agent 0.125.0.
Added
- Agreements (#9075):
- lifecycle API under
/api/v1/contracts/agreement-requests: create, preview, send, link, remind, void (#10127, #10191); - unauthenticated signing routes under
/api/v1/agreements/public/:token, rate limited to 60 a minute per IP plus a per-link limit (#10162); - portal routes
GET /api/v1/portal/agreementsand/signed-agreements(#10202); - the
agreementRequestExpiryReaper(every 15 minutes) andagreementRequestAutoReminder(hourly) jobs; agreement.*lifecycle events on a newagreement-eventsqueue, with nothing consuming it yet;- a partner-editable Agreement request email template (#10162).
- lifecycle API under
- Ticketing: the
list_business_calendars,list_ticket_routing_rules,test_ticket_routing_ruleandmanage_ticket_routing_rulesAI tools, and a portal banner on a merged ticket (#9897, #10001, #9997). - Force reboot now on the device Power menu. You type the hostname and pass an MFA step-up, and it runs
shutdown /r /f /t 0on Windows. It is a new command type, so an older agent refuses it visibly (#9380, #10173). - Restart agent from the device page, carried out by the watchdog. It needs the new
devices:recover_agentpermission, which the upgrade grants to the built-in roles that holddevices:execute(#9413). - Business reports: Client profitability, Quote win rate, and MRR & renewals (#9899, #9898, #9885).
- AI tools in chat and agents (#6754):
- PSA and billing writes (#9767);
- backup, DR and virtualization (#10117);
- security, incident and device operations (#10130);
- PSA configuration and ticket operations (#10160);
- alert correlation and signal triage (#10169);
- network topology (#10204);
- SNMP and network monitoring (#10241);
- AI-agent reads (#10273);
- security policies (#10286).
- Every action carries a guardrail tier.
manage_catalogis renamedmanage_billing_catalog, and the old name still dispatches over MCP for one release (#9767).
- Physical placement card (room, rack, rack unit, height) on device and discovered-asset pages (#10247, #9333), and a WAN role and circuits API for topology interfaces (#8774).
- Security Agents tab: Control D and NextDNS are listed as Coming soon, and the tab explains what arming them needs. They cannot be switched on in this release (#10124).
- Backup: selective restore accepts folders, which are expanded to the files indexed beneath them, with a confirm above 1,000 files (#9884).
- Patches: Windows updates with no MSRC rating get a severity derived from their classification and title, labelled Derived rating (#9425, #9399).
- Diagnostics: the TURN preflight warns when the relay accepts an unauthenticated Allocate (#9506).
- Behind a flag, off by default (details under Behaviour changes):
- Flows in the Tool Catalog: flow documents, runner, triggers including webhooks, approval pause and resume, a runs timeline,
notify/http_request/aisteps, and flows exposed as AI tools (#9411, #9432, #10168, #10175, #10270, #10284, #10285, #10283); - MCP modernization: stateless protocol
2026-07-28, Client ID Metadata Documents for OAuth, Tier-3 MCP calls routed to an approval instead of refused, URL-mode elicitation, an MCP Apps fleet-health view and the MCP Tasks extension (#9409, #9437, #9752, #9756, #9984, #10023); - AI task recipes for identity offboarding and onboarding (#9754, #9974, #9993, #10058, #10118, #10128).
- Flows in the Tool Catalog: flow documents, runner, triggers including webhooks, approval pause and resume, a runs timeline,
- Breeze Cloud only: Wisp, a continuous triage companion with its own home, threads, memory, nudges and specialists (#9924, #9971, #10000, #10007–#10013, #10033, #10045, #10063, #10066, #10070, #10238, #10240, #10243). On a self-hosted server Wisp shows a lock, and you have nothing to set.
- Groundwork, not yet usable:
- reattaching a reinstalled machine to its device record (#9385, #9896, #10116);
- UniFi Wi-Fi monitoring collection (#9293, #10166);
- Helper runtime branding (#9271);
- a partner billing on/off switch and a skipped-periods ledger (#10172);
- the on-device prompt contract, which is dormant (#10274, #10277, #10278, #10279, #10280).
Improved
- One document renderer for quotes and invoices. Preview, detail, portal and PDF draw from the same composition, and staff get a Customer view of the portal (#9434, #9438, #9479, #9448, #9518, #9446, #9490, #9536, #9527, #9732, #9733).
- Partner settings: one header Save for every tab, with a status line naming unsaved or failed sections. The rail is regrouped, and Caller verification and Known guests get their own tabs (#9805, #9990, #9821).
- Agent connections after an API restart. After a stable connection drops, agents redial after a random 1–30 s (was 1–5 s). A
503/429withRetry-Afteron a periodic upload defers that upload. Startup uploads are spread out (#9444). - Admission control rises only under sustained pressure, with higher level-1 thresholds and a shorter level-1 hold (#9512).
- Backup destinations with a Path Prefix write new snapshots under
<prefix>/snapshots/. The destination form validates the prefix as you type (#9443). - PAM:
- an agent that cannot act on an elevation reports it, and the request closes as expired instead of waiting (#9559, #9813);
- on-demand helper mode keeps a SYSTEM helper per session for UAC interception (#9514);
- the user-role helper writes a readable log (#9516);
- the intercepted UAC prompt is dismissed once an approved elevation launches (#9515);
- approvals deliver immediately (#8677).
- Agent efficiency on Windows: link speed and security probes are read in process, with no per-adapter PowerShell spawn (#9477).
- Integrations page leads with health, with per-entry status and scope labels (#9442).
- Reliability score factors link to the event log for the scoring window (#10052).
- Default device group is a real static group that is applied at enrollment. Two settings that did nothing (default alert threshold, send welcome notification) are removed (#9738).
- Enrollment keys: Create Key honours partner and org enrollment defaults (#9876).
- Sentry: repeat-error storms are throttled per signature, and topology workers back off a failing site (#9870).
- AI billing: compute and unreserved token debits are keyed and durably retried, and platform admins can re-drive failed debits (#9491).
- Demo-QA papercuts across security, CIS hardening, encryption, alerts, analytics, audit, peripherals, backup, devices, webhooks, discovery, approvals and settings (#9875, #9877, #9878, #9880, #9881, #9883, #9873, #9809, #9810, #9807, #9743, #9766, #9771, #9825, #9871, #9872, and others).
Fixed
- Patching:
- an explicit decline is final, so ring auto-approval no longer re-approves a declined patch (#9475);
- manual installs honour a ring-level decline (#9505);
- overlapping patch policies use the closest level (#9690);
- partner-wide approvals count in ring views (#9769);
- decommissioned devices are left out of compliance (#9702).
- Breeze AI:
- Agents:
- rollback keeps executable file modes (#10061);
- cancelling a command that is just starting kills its whole process tree (#9824);
cancel_rebootwith nothing scheduled succeeds, and restart-prompt replies are no longer dropped (#10209);- an unapplied CIS remediation is recorded as failed (#9701);
- YARA scans start under a Windows service (#9474), which was a known gap in v0.124.0;
- GDM's Xorg is found on Linux (#9598);
- CylancePROTECT / Aurora is recognised as antivirus (#9389, #9504).
- AI:
- a call that is always blocked no longer asks a human first (#9892);
- a
file_operationsdelete reports a move to trash honestly, and permanent delete is an explicit, approved option (#9893); - out of credits returns 402 with a Buy credits offer (#9486);
- a sidebar session follows the header-selected organization (#9541);
- approval cards use human labels (#9717).
- Alerts: reboot-pending alerts resolve once the device restarts (#9599). Alert page copy, refresh and ticket links are corrected (#9880, #9704, #9685).
- Billing and contracts:
- Deliverables and contracts: move, bulk reschedule, signed-agreement evidence, and pause on draft contracts (#9359, #9355, #9363, #9362, and others).
- M365: sign-in event sync no longer uses a beta-only filter (#9398), and consent and enablement errors say what is wrong (#9335, #9354).
- DNS Security:
- Webhooks:
- Events:
device.enrolledis published when enrollment completes (#9748). - Auth: MFA factor state stays in sync after TOTP enrolment or removal, and a passkey can be deleted when TOTP is off (#10237). SSO audit rows carry the partner (#9502, #9478).
- Install script (
install.sh): it creates the Linux data directory and group, and refuses an agent older than 0.118.0 with a clear message (#9571). - Agreements: the uploaded PDF shows on the public signing page and in a public quote's contract block (#10226).
- From the pre-release sweeps (#9967, #10109, #10201, #10296):
- the Wisp morning brief shows spend in dollars;
- the ring feature-update badge names the Windows version ("Windows 10 22H2");
- the portal dashboard counts agreements waiting to be signed;
- the flow runs tab says "No runs match this filter";
- the Breeze Assist Deploy toggle is a named switch that reports its state.
- Smaller fixes: i18n gaps closed across locales (#9554), event log messages show in full (#9551), and help tooltips stay on screen (#9552).
Security
This release includes security hardening across:
- response headers: per-request
connect-srcwith no plaintextws:in production,Cache-Control: no-storeon HTML, plusPermissions-Policy,Cross-Origin-Resource-Policy: same-siteand de-duplicated HSTS and nosniff indocker/Caddyfile.prod(#9235); - the Office add-ins. Assistant Markdown could load remote images and other resources automatically, which could carry document or mail content out. Images are now click-through links, and resource-loading markup is stripped (#10060);
- system-tools file upload, copy and move, which now also need
scripts:execute, the same permission as running a script. The AIfile_operationswrite and rename follow the same rule (#10059); - PAM UAC approvals, which now need
devices:executeas well aspam:approve, with the same MFA gate on the inbox and mobile paths (#8673); - the force-reboot step-up grant, now bound to the canonical device id (#10173);
- AI Operator effects that carry secrets, which now appear in the AI risk audit feed (#10150);
- stale-caller hardening for reinstalled devices, with an audited cross-tenant probe (#9896, #10116);
- Helper branding text, which rejects invisible Unicode (#9407);
- the read ceiling on flow webhook delivery bodies (#10283);
- dependency advisories: zod GHSA-mrhx-c7xc-m3w5 (#9925), tokio RUSTSEC-2026-0386 (#9970), ctutils RUSTSEC-2026-0385 (#9890), rustls-webpki RUSTSEC-2026-0381/0382 (#9430), the October 2026 Node.js security release (#9851), Go 1.26.10 for a
crypto/x509fix (#9471), dompurify (#9694), follow-redirects, markdown-it and vite (#9424), certifi and pillow in the AI workspace image (#9498), and 16 moderate or low Dependabot alerts (#9986).
Self-hosters are encouraged to upgrade.
Self-Hosting / Upgrade Notes
Upgrade command. Check how your install pins its images: grep '^BREEZE_API_IMAGE_REF=' .env.
- Digest-pinned (the value ends in
@sha256:…; everyguided-setup.shinstall from v0.112.0): fetch the currentguided-setup.shfrommain, then runbash guided-setup.sh --upgrade 0.125.0. It verifies the signed image inventory and updatesBREEZE_VERSIONand all four image digests together. Then it pulls and restarts. - Tag-form (the value ends in
:${BREEZE_VERSION}): bumpBREEZE_VERSION=0.125.0, then rundocker compose pull api web portal && docker compose up -d(andpnpm installif you build from source). If you run the optionalworkercontainer, pull and restart it too. - Do not edit only
BREEZE_VERSIONon a digest-pinned install. That re-pulls the images you already run. - Replace every API and worker instance in the same deploy. Do not run an instance older than v0.124.0 next to this release. Once this release writes a prefixed backup snapshot, an older instance cannot read it, so rollback below v0.124.0 is off the table (#9443).
--upgradedoes not change yourdocker-compose.yml. To set any of this release's new optional variables, add their lines to the right service'senvironment:block, or take the v0.125.0docker-compose.yml/deploy/docker-compose.prod.yml, which already map most of them. A value only in.envdoes not reach the container.- Maintaining your own
docker/Caddyfile.prod? Carry over the newPermissions-PolicyandCross-Origin-Resource-Policydefaults and the>replace on HSTS and nosniff (#9235). - See the Upgrade Guide.
No breaking changes for an install on default settings. Check these stricter rules before you upgrade a customised install:
AGENT_ENROLL_RATE_WINDOW_SECONDSabove 230 now refuses to boot. The default is 60. The limit keeps every agent-facingRetry-Afterunder the agent's 300-second ceiling (#9480).- File upload, copy and move need
scripts:execute(#10059). UAC approvals needdevices:execute(#8673). Custom roles that relied ondevices:executeorpam:approvealone get a 403. - Backup destinations with an invalid stored Path Prefix stop backing up. That means an empty segment,
.or.., characters outsideA–Z a–z 0–9 ! _ . * ' ( ) -, asnapshotssegment, or more than 256 characters. Those backups fail withinvalid_destination_prefix, and Test connection now fails too. Fix the prefix in the destination form (#9443). - MCP clients calling
manage_catalogshould switch tomanage_billing_catalog. The old name works for this release only (#9767).
Database.
-
64 migrations. They are idempotent and apply automatically on boot via
autoMigrateunlessAUTO_MIGRATE=false. Expect[auto-migrate] Applied 64 migration(s)from v0.124.0. No shipped migration was modified, renamed or removed. Two files (2026-12-18-110000-*,2026-12-18-120000-*) sort before v0.124.0's newest migration. autoMigrate applies them anyway, because pending files are applied whatever their position. They only addpartnerscolumns. -
No table rewrite, and no table or column is dropped. Every new
NOT NULLcolumn carries a constant default (metadata only). That includesdevices.install_incarnation(#9385) andpartners.billing_enabledafter its backfill (#10172). The hot tables use the safe patterns:devices: NOT VALID then VALIDATE, with a 5 s lock timeout;device_commandsandscript_executions: concurrent index builds;tickets: no-transaction files with concurrent indexes;- the DNS Security tables: foreign keys swapped NOT VALID, with a lock timeout.
-
Brief table scans under an exclusive lock. Each of these files holds an exclusive lock on the named table while one scan or index build runs. Reads and writes of that table wait for it. On a small install this takes well under a second. On a large one, check sizes first, for example
SELECT pg_size_pretty(pg_relation_size('device_patches')), and plan a quiet window if any is large for your storage.device_patches: a new CHECK onreported_severity_sourceis validated in the same statement (2027-01-02-160000-device-patch-reported-severity-source.sql, #9425).elevation_requests: a new CHECK on thedevice_unable_*columns is validated in the same statement (2027-01-02-180000-elevation-device-unable.sql, #9559). It covers every UAC request, technician JIT grant and governed AI action.ai_invocationsandaction_intents: a new column, then non-concurrent index builds and CHECK re-validation (2027-01-06-130000-flow-runs.sql,2027-01-07-140000-flow-webhooks-tools-budgets.sql, #10168, #10270). This applies even though Flows is off.security_scans: three nullable columns plus a partial index built withoutCONCURRENTLY(2027-01-04-140000-security-scan-sweeps.sql, #10028).ai_agent_runs,ai_operator_tasksandai_sessions: validated CHECKs, foreign keys and indexes in the Wisp schema files (2027-01-04-100100,-110200,-110300,-110350,2027-01-05-100400). They run on every install, with or without Wisp.
-
Backfills over existing rows (each elects system scope first):
- Ticket SLA deadlines (
2027-01-02-190200-ticket-sla-deadlines-backfill.sql, #9811). It writes the stored due and warn times for every ticket with an SLA target or pause history. It runs in batches of 5,000 with a commit per batch, so it does not hold theticketstable. The values reproduce today's wall-clock rule exactly. Partner API tickets-feed consumers receive each backfilled ticket once more, now carrying the four new deadline fields. - Business-hours calendars are imported from the existing partner business-hours settings (
2027-01-03-160000, #9897). No ticket uses a calendar until a partner marks one as default. - Contract notes (#9364,
2027-01-02-100900,2027-01-02-100300). Notes are now internal only, and invoices print only the Invoice note. The migration copies each contract's notes into its invoice terms and clears the auto-generated ones. An old API or worker instance left running prints them twice until it is replaced. partners.billing_enabledis set per partner from live billing activity, then madeNOT NULL DEFAULT true(2027-01-05-120000, #10172). Nothing reads it yet.- Permissions:
agreements:sendgoes to every role, built-in or custom, that holdsagreements:write,*:writeor*:*. The same file re-runs the idempotent signed-agreement evidence back-fill from v0.124.0 (2027-01-05-110000-agreements-send-permission.sql, #10127).devices:recover_agentgoes to built-in roles that holddevices:execute(#9413). - Smaller ones: the existing webhook
alert.createdsubscriptions move toalert.triggered(#9691); one-time deliverable template items become not visible in the portal (#9357);user_notificationsrows are copied into the new Wisp thread timeline (2027-01-06-140000-wisp-thread-posts.sql, two scans ofuser_notifications).
- Ticket SLA deadlines (
-
Forced row-level security on
software_compliance_status(2027-01-04-120500, #10022), on databases created from the baseline. A direct-SQL report that reads it without a tenant context now sees no rows. -
One-way enum additions:
elevation_audit_event_type+device_unable;security_provider+cylance;report_type+mrr_renewals,quote_win_rate,client_profitability;ai_initiator_kind+flow;deliverable_evidence_kind+contract_document.
-
Privileged DDL. There is no
CREATE ROLE,OWNER TO,CREATE EXTENSIONor schema-level grant.- Eight
SECURITY DEFINERfunctions (command incarnation stamping, Wisp and flow guards). 2027-01-06-170000-contract-documents-append-only.sqlrevokesUPDATE/DELETE/TRUNCATEoncontract_documentsfrombreeze_app, grants back a column-levelUPDATE, and routes erasure throughbreeze_audit_admin. This follows the shipped pattern of earlier audit-role migrations.- All 34 new tables enable and force row-level security in the file that creates them.
- Eight
-
Rollback. Take a backup, or note a PITR point, before you upgrade. A rollback to v0.124.0 keeps the new schema:
- the enum values above stay;
contract_documentsstays write-protected, because the revoke is not undone by an older image;- prefixed backup snapshots written by this release cannot be read by v0.124.0.
Going below v0.124.0 needs a database restore.
Environment variables.
- Required: none. No new required environment variables.
- New, optional (api service). Each is mapped in both shipped Compose files unless noted.
AI_TOOL_INDEX(lazy).fullrestores the previous AI system prompt that lists every tool. A conversation picks up a change when its AI session next starts (#10087).PROMPT_HOST_ENABLED_KINDS(unset = the code default, which is empty in this release; an explicit empty value is the kill switch). It lists the on-device prompt kinds the server enables. Nothing uses it yet (#10280).BREEZE_ADMISSION_RISE_TICKS(3) andBREEZE_ADMISSION_LEVEL1_HOLD_MS(5000) (#9512).DNS_SECURITY_RETENTION_DAYS_DEFAULT(90, 1–365),DNS_SECURITY_RETENTION_BATCH_SIZE(5000) andDNS_SECURITY_RETENTION_MAX_BATCHES(400) (#10042).- Flows (all inert while
FLOWS_ENABLED=false):FLOWS_ENABLED(false),FLOW_APPROVAL_TTL_HOURS(24),FLOW_MAX_RUNNING_PER_OWNER(20),FLOW_RUN_RETENTION_DAYS(90),FLOW_WEBHOOK_RATE_PER_MINUTE(120),FLOW_WEBHOOK_DELIVERY_RETENTION_DAYS(30) andFLOW_FOREACH_MAX_PARALLEL(5) (#9411, #10168, #10270). - MCP (all off or inert by default; a non-boolean value refuses boot):
MCP_STATELESS_ENABLED(false) andMCP_HEADER_MISMATCH_ALERT_THRESHOLD(50) (#9409);MCP_TIER3_INTENTS_ENABLED(false),MCP_INTENT_MAX_LIVE_PER_PRINCIPAL(20),MCP_INTENT_CREATES_PER_HOUR(60) andMCP_INTENT_CREATES_PER_USER_PER_HOUR(60) (#9752);MCP_APPROVAL_WAIT_MS(20000) andMCP_APPROVAL_WAITS_PER_PRINCIPAL(2) (#9756);MCP_APPS_ENABLED(false) (#9984);MCP_TASKS_ENABLED(false; it also needsMCP_STATELESS_ENABLED),MCP_TASK_PENDING_POLL_INTERVAL_MS(30000),MCP_TASK_POLL_INTERVAL_MS(5000) andMCP_TASK_TTL_GRACE_MS(3600000) (#10023).
OAUTH_CIMD_ENABLED(false) andOAUTH_CIMD_ALLOWED_HOSTS(empty = any host that passes the SSRF checks) (#9437).AI_OPERATOR_RECIPE_IDENTITY_OFFBOARDING_ENABLEDandAI_OPERATOR_RECIPE_IDENTITY_ONBOARDING_ENABLED(bothfalse). Each also needsAI_OPERATOR_TASKS_ENABLED(#9974, #10118).BREEZE_WISP_ENABLED(false). Breeze Cloud only. A production API refuses to boot with it on unlessIS_HOSTED=trueandENABLE_2FAis on. Self-hosters leave it unset.BREEZE_WISP_CONNECTOR_ENABLED(false) is an alias ofBREEZE_WORKSPACE_ENABLED, the file and email knowledge connector (needs pgvector). It is not the Wisp engine flag (#10063).- IOC sweeps (not in Compose; add them to
apiyourself if you need to change one):SECURITY_SWEEP_MAX_DEVICES(10000),SECURITY_SWEEP_MAX_ACTIVE_PER_ORG(5),SECURITY_SWEEP_PUMP_INTERVAL_MS(30000),SECURITY_SWEEP_PUMP_BATCH(100),SECURITY_SWEEP_PARTNER_RUNNING_CAP(200),SECURITY_SWEEP_TTL_HOURS_DEFAULT(24),SECURITY_SWEEP_MFA_DEVICE_THRESHOLD(50),SECURITY_SWEEP_RUNNING_GRACE_MINUTES(65) andIOC_HUNT_FOUR_EYES_DEVICE_THRESHOLD(25) (#10028, #10048). - Compose now also maps
PAM_OWNERSHIP_EPOCH_TRANSFERandBREEZE_YARA_BUILTIN_PACK_DISABLED, both from v0.124.0.
- New, optional (agent
agent.yaml):ws_first_reconnect_window_seconds(default 30, 0–300; 0–5 restores the old 1–5 s spread) andloop_retry_after(defaulttrue) (#9444). .env.examplenow documents the Microsoft 365 Graph-read, Graph-actions and comms variables in one place, and the comms signing key is shown asM365_COMMS_EXECUTOR_SIGNING_PRIVATE_JWK_SOURCE_FILE(a host path mounted into the container). Existing values keep working.
Behaviour changes and feature flags.
- Windows feature updates are decided by the update ring (#10203).
- What changed: the agent's
patch_exclude_feature_updatesnow defaults tofalseand acts only as a kill switch. The ring's Windows feature updates setting decides, and it defaults to Block, so nothing changes until a ring is set to Allow or Pin. - Pin writes
TargetReleaseVersion,TargetReleaseVersionInfoandProductVersionunderHKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate, with a Breeze ownership marker. A target-release policy that another GPO already set is left as found. - Unless the patch policy's exclusive-Windows-Update setting is on, Windows may install a pinned release on its own schedule.
- Installed feature releases now appear in the installed inventory.
- Older agents keep excluding feature releases locally.
- Agent log lines:
applied Windows feature-update policy,ignoring feature_update_settings.
- What changed: the agent's
- DNS Security retention (#10042).
- A nightly job (22:18 UTC) deletes events and aggregations older than each integration's window. That is
retentionDayson the integration (now editable from the integrations tab, orPATCH /dns-security/integrations/:id), elseDNS_SECURITY_RETENTION_DAYS_DEFAULT(90). - Integrations that previously kept everything lose history past that window on the first run.
DELETE /dns-security/integrations/:idnow returns 202 and deletes in the background. The row shows Deleting… until the delete finishes.
- A nightly job (22:18 UTC) deletes events and aggregations older than each integration's window. That is
- Agent reconnect pacing (#9444).
- After an API restart, a device can show offline up to about 30 s longer.
- The first dial after an agent starts waits 0–10 s. The startup inventory, hardware and patch uploads each wait 0–120 s.
- A
503/429withRetry-Afterdefers that periodic upload for up to 300 s. Heartbeats and command results are never deferred. - Agents honour a
drainframe, which the API does not send yet. - New agent log lines:
initial connect delayed,drain hint received,route deferred by server Retry-After,command result held for reconnect; persisting to the outbox,startup task delayed,monitoring first run delayed.
- Admission thresholds (#9512). Level 1 now needs lag of 200 ms or DB wait of 150 ms (was 100 / 75) for three consecutive ticks, and holds for 5 s (was 15 s). The commented defaults in
.env.examplechanged to match. The emergency threshold is unchanged and immediate. - Breeze Assist (#10228, #10239, #10208).
- New Breeze Assist policy links start with Deploy Breeze Assist to devices on. An API request that creates the helper feature link without
enablednow storesenabled: true. Existing policies, and devices with no Assist policy, are unchanged. - The agent removes only an Assist it installed. It records its own installs in
assist-ownership.json, and a copy installed by other means is reported asunmanaged_install. With deploy on, the first heartbeat after the upgrade adopts an Assist it finds. - Below the WebView2 Runtime version Assist needs (92.0.902.49 for current builds, shipped as
assist-requirements.json), the agent does not start Assist, logs one warning and reportswebview2_outdated. - After six failed starts the agent reports
crash_loopand retries after 6 hours. See the known issue #10302. - The native remote-support consent dialog now defaults to Deny. Pressing Enter, or letting the dialog time out, declines the session.
- Older servers show the new issue codes as an unknown reason.
- New Breeze Assist policy links start with Deploy Breeze Assist to devices on. An API request that creates the helper feature link without
- Patch compliance percentage on the dashboard is now the share of fully patched devices, matching the Patches page. It was the share of individual patches installed, so the number may change (#9982).
GET /patches/complianceaddsdevicePercent,failedDevices,deviceCounts,outstandingTotalsand a paginateddeviceslist, and changes no existing field. - AI chat system prompt lists tools by domain (about 4.4 KB smaller), and every tool stays available. If tool choice gets worse for you, set
AI_TOOL_INDEX=full(#10087). - AI chat addresses: the full-page chat is at
/ai/chat./workspaceand/wisp/chatredirect permanently, and#session=<id>links still open their tab.GET /api/v1/ai/sessionsand/searchreturn only chat conversations and addorgId,typeanddeviceId. The mobile app's history no longer lists script-authoring and MCP sessions (#9852, #10044, #10171). - Agreements (#10127, #10235, #10233).
- The
agreements:sendpermission is granted by migration to every role withagreements:write. Remove it afterwards from roles that should edit templates but not send. - Automatic reminders are off by default, and the default link expiry is 30 days.
- Customer mail uses the partner's sending identity.
- Signed agreements can no longer be changed in the database, except their contract link and, during an organization merge, their organization.
- The
devices:recover_agentis granted by migration to the built-in roles that holddevices:execute(Org Admin, Org Technician, Partner Technician). Custom roles need it added to use Restart agent (#9413).- IOC scans gain the states
cancelledandexpired, so API consumers filteringGET /security/scans/:deviceIdby status will see them (#10028). - Flows (
FLOWS_ENABLED, defaultfalse). With it off, every flow route answers 404. With it on:- flows get webhook triggers (
POST /api/v1/webhooks/flows/:flowId, signed or token mode, JSON bodies up to 256 KB) and monthly run caps (10,000 per flow, 100,000 per owner); - built-in steps include
http_request, which refuses private and metadata addresses unlessTOOL_SOURCES_ALLOW_PRIVATE_EGRESSis set; - enabled manual flows appear to the AI as
flow__<slug>tools. - Tier-3 flows are never listed over MCP.
- flows get webhook triggers (
- MCP (#6154). Everything is off by default, and with the flags off MCP behaves as in v0.124.0. The one exception is that
tools/listgainsget_action_statusandcancel_action. WithMCP_TIER3_INTENTS_ENABLED=true, a Tier-3tools/callreturnspending_approvalwith anactionIdinstead of anMCP_APPROVAL_REQUIREDerror, so callers must pollget_action_status. The legacy HTTP+SSE transport now sendsDeprecationandSunsetheaders. - AI task recipes for identity offboarding and onboarding stay off unless both
AI_OPERATOR_TASKS_ENABLEDand the recipe flag aretrue. - Wisp is Breeze Cloud only (
BREEZE_WISP_ENABLED, defaultfalse, plus a per-partner entitlement). On a self-hosted server,/wispshows a locked page and no Wisp route, job or UI is active. - Security Agents: Control D and NextDNS stay Coming soon in this release, with no switch (#10124).
- Endpoint messaging and live chat stay dark. Their agent version gates are still at the
999.0.0placeholder. - Install scripts on software versions (#10035). Scripts stored on a software version before this release stay inactive until the version is re-created, and the version manager shows a notice. Creating a version with a script needs
devices.execute. - New boot task: the API moves provisioned built-in DNS packages to the version pinned in code. Log line:
[startup] pinned built-in package refresh: refreshed N, failed M(#9983). - PAM: devices report elevations they cannot act on (#9559). New agent route
POST /api/v1/agents/:id/pam/elevation-unable. The API publisheselevation.expiredwithcause: device_unable. Older agents keep the previous behaviour. - Organization defaults: the default device group is applied to newly enrolled devices. The partner-level device group, alert threshold and welcome-notification defaults are ignored (#9738).
Agents. Agents, Breeze Assist and Breeze Viewer update to 0.125.0 through your normal update channel.
Agent-side changes in 0.125.0:
- feature-update policy and the Windows Update for Business pin (#10203);
- reconnect jitter,
drainand loop-levelRetry-After(#9444); - zip packages, install scripts and
service_runningdetection (#9882); - Breeze Assist WebView2 gate, crash-loop reporting and install ownership (#10228);
- native consent defaults to Deny (#10208);
- the
force_rebootcommand (#9380); cancel_rebootand restart-prompt reply fixes (#10209);- derived Windows update severity (#9425);
- in-process link speed and batched security probes (#9477);
- YARA under a Windows service (#9474);
- PAM on-demand hold, helper log, unable report and UAC dismiss (#9514, #9516, #9559, #9813, #9515);
- rollback keeps executable modes (#10061);
- process-tree cancel (#9824);
- CIS remediation failure recording (#9701);
- GDM Xorg discovery (#9598);
- Cylance / Aurora detection (#9504);
- UniFi Wi-Fi collection (#10166);
- the dormant prompt host (#10277, #10279).
Known gaps in this release
- macOS lab legs are deferred to the next release.
- The Remote Desktop stuck-modifier fix (#9687) is not in this release.
- Control D on macOS (DNS lab leg L2) was not run. macOS Control D is not offered.
- Upgrade-in-place on macOS was not re-verified for this release.
- Windows feature releases under Allow or Pin (#10203). The lab confirmed Block, Allow and Pin on the device (policy applied, registry pinned and reverted, admin GPO left as found) and the server's Excluded by policy badge. It did not observe Windows Update offering a feature release under Allow or Pin, because the only lab VM runs a Windows 11 build that is out of servicing. Report on #10203 if a supported build does not pick up an allowed or pinned release.
- Dismissing the UAC prompt after an approved elevation (#9515) has no clean lab pass. It was blocked by #10178: a technician's approval does not close the user's Elevation Request dialog, which then times out and is logged as a deny.
- Not run on real hardware (no rig):
Known issues
- Breeze Assist crash-loop detection does not fire (#10302). A crash-looping Assist keeps restarting and is not reported as
crash_loop. - PAM UAC interception can stay disabled when the server does not know a device's PAM history, for example after a hard device delete and reinstall (#10303). The agent logs
refusing to enable UAC interception before PAM reconciliation is verified. - Portal agreement detail page shows a blank PDF (#10290). Use the Signed copy / Original downloads.
What's Changed
- fix(web): refresh contract in the background so autosave doesn't blank the page (#9305) by @ToddHebebrand in #9326
- fix(web): guard bare-key shortcuts against typed text (#9316) by @ToddHebebrand in #9327
- fix(integrations): name the target organization on Integrations and the M365 panel (#9318) by @ToddHebebrand in #9329
- fix(portal): hide draft and cancelled contracts from the service view (#9307) by @ToddHebebrand in #9328
- fix(web): legacy M365 card states its AI-only scope + GUID tenant ID (#9320) by @ToddHebebrand in #9331
- docs(m365): document read-tools/comms env vars, consent screen, Entra app-list lag (#9321) by @ToddHebebrand in #9334
- fix(web,api): show site-level primary contact in org header (#9317) by @ToddHebebrand in #9337
- fix(mcp): page list_deliverables and accept documentId in link_evidence (#9313) by @ToddHebebrand in #9332
- fix(m365): record why consent verification failed instead of a bare executor_unavailable (#9322) by @ToddHebebrand in #9335
- fix(api): MCP instructions say Tier 3 is refused, not Approve/Deny (#9306) by @ToddHebebrand in #9336
- fix(web): link library documents as occurrence evidence; drop Late pill on missed (#9311) by @ToddHebebrand in #9340
- fix(contracts): name the org's other contracts and confirm activate on overlap (#9303) by @ToddHebebrand in #9342
- fix(deliverables): one-time items plan from their lead window and report a next due date (#9308) by @ToddHebebrand in #9338
- fix(billing): stop printing quote provenance on contract invoices (#9304) by @ToddHebebrand in #9330
- fix(web): M365 consent error shows once, no Retest wording when nothing to retest (#9323) by @ToddHebebrand in #9349
- ci(release): remove the retired Azure Windows-signing lane by @ToddHebebrand in #9356
- fix(deliverables): move deliverables between contracts, singly or in bulk (#9302) by @ToddHebebrand in #9359
- fix(m365): name which enablement switch is off in not-enabled errors (#9319) by @ToddHebebrand in #9354
- fix(portal): hide dashboard backup row when Backups is off (#9351) by @ToddHebebrand in #9360
- fix(web): add per-user character-key shortcuts preference (#9348) by @ToddHebebrand in #9358
- fix(admin): probe M365 executor reachability from System → Connections (#9324) by @ToddHebebrand in #9361
- fix(deliverables): pause deliverables on draft contracts and re-base them on the real start (#9309) by @ToddHebebrand in #9362
- fix(contracts): contract notes are internal-only; invoices print only the Invoice note (#9347) by @ToddHebebrand in #9364
- fix(deliverables): template items decide portal visibility; one-time defaults off (#9315) by @ToddHebebrand in #9357
- docs(spec): reattach a reinstalled machine to its existing device record (#8318) by @lennonflima in #8529
- feat(deliverables): link a signed agreement as deliverable evidence (#9312) by @ToddHebebrand in #9363
- feat(api): Helper runtime branding Phase 2, Wave 1 (server contract) by @fabicarvano in #9271
- feat(patches): show how many devices still need each patch on the approval list by @Bbomby in #9298
- docs(i18n): specify pt-BR translation gap closure by @fabicarvano in #9339
- chore(deps): bump @fastify/busboy from 3.2.2 to 3.2.3 by @dependabot[bot] in #9291
- chore(deps): bump jose from 6.2.3 to 6.2.12 by @dependabot[bot] in #9289
- chore(deps): bump postcss from 8.5.29 to 8.5.30 in the tailwind group by @dependabot[bot] in #9283
- chore(deps): bump @types/office-js from 1.0.611 to 1.0.612 in the typescript-tooling group by @dependabot[bot] in #9281
- chore(deps): bump @testing-library/user-event from 14.6.7 to 14.6.8 in the testing group by @dependabot[bot] in #9285
- chore(deps): bump @react-navigation/bottom-tabs from 7.18.16 to 7.21.0 by @dependabot[bot] in #9288
- chore(deps): bump @axe-core/playwright from 4.13.0 to 4.14.0 in /e2e-tests by @dependabot[bot] in #9278
- chore(deps): bump playwright from 1.64.0 to 1.64.1 in /e2e-tests by @dependabot[bot] in #9276
- chore(deps): bump vitest from 5.0.4 to 5.0.5 in /e2e-tests by @dependabot[bot] in #9275
- chore(deps): bump dotenv from 18.0.7 to 18.0.8 in /e2e-tests by @dependabot[bot] in #9274
- feat(api): add WAN role and circuits backend (W1-B) by @fabicarvano in #8774
- feat(unifi): Wi-Fi monitoring W1 — topology v2 contract and current-state materializer (#7690) by @fabicarvano in #9293
- fix(deliverables): tell technicians a resolved ticket still needs evidence (#9310) by @ToddHebebrand in #9341
- feat(deliverables): bulk reschedule occurrences; ticket due date follows (#9314) by @ToddHebebrand in #9355
- feat(contracts): fold a hand-built draft into the quote-created contract (#9346) by @ToddHebebrand in #9366
- docs: list the local-dev .env values that differ from the production template by @Bbomby in #9381
- docs(plan): MCP modernization B-W04 — Tier-3 via action intents + URL elicitation (#6154) by @ToddHebebrand in #9403
- docs(spec): one document renderer for quotes and invoices (#9402) by @ToddHebebrand in #9405
- docs(plan): one document renderer for quotes and invoices (#9402) by @ToddHebebrand in #9410
- fix(deps): raise override floors for follow-redirects, markdown-it and vite (Security Audit) (#9412) by @ToddHebebrand in #9424
- fix(deps): bump rustls-webpki + webpki-roots (RUSTSEC-2026-0381/0382) and clear Trivy image findings by @ToddHebebrand in #9430
- feat(flows): W03 flow document, validator, flows table, AI tools, read routes (#5215) by @ToddHebebrand in #9411
- chore(deps): bump the go-minor-patch group in /agent with 3 updates by @dependabot[bot] in #9378
- fix(warranty): preserve agent-owned warranty rows, derive provider, accept entitlements (HP CMSL W01 code half) (#5511) by @ToddHebebrand in #9404
- chore(deps): bump @playwright/test from 1.64.0 to 1.64.1 in /e2e-tests by @dependabot[bot] in #9277
- feat(mcp): B-W03 stateless 2026-07-28 dual-stack (#6154) by @ToddHebebrand in #9409
- fix(billing): invoice line descriptions keep their line breaks on every surface; PDF description column matches the quote PDF (#9401) by @ToddHebebrand in #9406
- docs(plan): scaling W09 amendment — rebase on reconnect_backoff.go (#9145), retry.go (#9146), stop-after-dial (#9245) (#8139) by @ToddHebebrand in #9440
- feat(billing): one customer-document assembler for invoices and a staff customer-view route (#9414 W1b) by @ToddHebebrand in #9438
- chore(deps): bump the react group across 1 directory with 2 updates by @dependabot[bot] in #9282
- feat(api): reattach wave 1a — the install incarnation boundary (#8318) by @lennonflima in #9385
- fix(web): M365 Customer Graph Read card no longer hides the tenant when the sync summary has a domain it does not know (#9392) by @ToddHebebrand in #9395
- refactor(patches): #9298 review follow-ups (org_id predicate, shared status labels, parked-device test) by @Bbomby in #9388
- chore(gh-queue): hostile-intent screen for external PRs, Tier 2 hostile reading, trust tiers by @ToddHebebrand in #9397
- fix(agent,api): recognise CylancePROTECT / Aurora Endpoint Defense as an AV provider (#9178) by @ToddHebebrand in #9389
- fix(helper): endpoint-message sender stays the partner name; branding text rejects all invisible Unicode (#9396) by @ToddHebebrand in #9407
- feat(flows): W03 Flows read UI (#5215) by @ToddHebebrand in #9432
- fix(agent): deflake TestSessionManager_AddRemoteICECandidateAfterAnswer (#9367) by @ToddHebebrand in #9453
- feat(oauth): B-W03 CIMD client metadata documents + iss (#6154) by @ToddHebebrand in #9437
- feat(billing): shared PDF line-table module; invoice PDF renders from the customer document model (#9414 W3a) by @ToddHebebrand in #9446
- feat(document-ui): package scaffold, document.css and CI job (#9414 W1a) by @ToddHebebrand in #9434
- docs(plan): Tool Catalog W04 — flow runner, triggers, approval pause/resume, runs UI (#5215) by @ToddHebebrand in #9456
- fix(api): unit runs never read the root .env by @Bbomby in #9383
- chore(deps): bump @hono/node-server from 2.1.4 to 2.1.5 in the hono group across 1 directory by @dependabot[bot] in #9284
- feat(billing): one customer-document assembler for quotes and a staff customer-view route (#9414 W2a) by @ToddHebebrand in #9448
- docs(plan): AI chat retry-on-error (#9428) + browser notifications (#9429) by @ToddHebebrand in #9465
- docs(spec): AI chat — move conversations between side panel and AI Assistant (#9427) by @ToddHebebrand in #9466
- fix(m365): sign-in events sync drops the beta-only signInEventTypes filter and reports rejected Graph reads honestly (#9393) by @ToddHebebrand in #9398
- test(api): order topology-graph-scope snapshot reads so before/after compare is deterministic (#9325) by @ToddHebebrand in #9467
- fix(web): device Topology tab queries with the device's own orgId (#9258) by @ToddHebebrand in #9468
- fix(portal): hide "Pay deposit" after quote accept when online payment is unavailable (#9264) by @ToddHebebrand in #9472
- fix(web): dynamic-group preview sends the group's orgId; group-filter summaries resolve names for scalar values (#9262) by @ToddHebebrand in #9473
- fix(patching): an explicit decline is a terminal deny — ring auto-approval no longer re-approves rejected patches (#9369) by @ToddHebebrand in #9475
- fix(web): default date inputs to the local calendar day (#9263) by @ToddHebebrand in #9481
- test(api): pin agent-route Retry-After ≤ 230 s for the W09 agent ceiling; exempt mTLS renew (#9457) by @ToddHebebrand in #9480
- fix(api): SSO callback audit events carry partner_id for partner-level providers (#9377) by @ToddHebebrand in #9478
- feat(billing): invoice Preview and portal pages render the shared document composition (#9414 W1c) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9479
- fix(web): device detail Back stays in-app (#9259) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9484
- fix(web): /billing/autopay explicit not-enabled empty state (#9261) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9488
- fix(web): remove Max devices from Add organization dialog (#9260) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9489
- fix(web): ReportBuilder stops writing device-builder keys into curated template configs (#9265) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9487
- test(e2e): worker storage state waits for the dashboard mount refresh before snapshotting (#9252) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9482
- fix(agent): start the YARA-X wasm engine under a Windows service — no console stderr handle (#9253) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9474
- fix(portal): trust embed card follows the frozen page locale (#9257) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9492
- feat(devices): "Restart agent" via the watchdog from the device page, with its own permission and audit event (#9234 step 1) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9413
- fix(agent): log TCC remoteDesktop as a value, not a pointer (#8391) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9493
- feat(patches): derive a severity for Windows updates that carry no MSRC rating, shown as derived (#9387 gap 2) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9425
- fix(api): platform-only patch_test rows no longer count as model feature defaults (#9455) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9495
- fix(ai-workspace): bump certifi 2026.10.19 + pillow 13.0.0 — Trivy critical/high (#9469) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9498
- fix(web): topology writes honour the pinned device org (#9470) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9500
- fix(api): YARA rule create locks the set before counting toward the cap (#9176) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9497
- fix(agent): macOS security status attributes CylancePROTECT / Aurora Endpoint Defense (#9390) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9504
- fix(patching): manual install and remediation honour a ring-level decline (#9485) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9505
- feat(diagnostics): TURN preflight warns when the relay accepts an unauthenticated Allocate (#9372) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9506
- fix(billing): auto-renew extends the term before the final invoice can expire the contract (#9243) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9503
- fix(api): SLA compliance endpoint honors the definition's targets and exclusion flags (#9371) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9494
- fix(api): SSO user.login audit rows carry partner_id (#9483) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9502
- fix(api): syncBuiltinYaraPack logs an ERROR with the expected paths when the hosted binaries volume has no pack (#9166) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9513
- fix(api): admission level needs sustained pressure to rise — consecutive-tick gate, higher level-1 thresholds, shorter level-1 hold (#9353) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9512
- chore(events): drop the never-published device.decommissioned event type (#9121) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9510
- fix(agent): PAM interception keeps a SYSTEM helper per interactive session in on-demand lifecycle mode (#8996) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9514
- fix(agent): user-role helper writes a readable log, notify_result is handled, helper built windowless (#9266) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9516
- fix(patching): deleting or disabling an update ring warns about linked policies and records the count (#8909) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9501
- fix(web): say when a link or invoice was created but not emailed — expose emailConfigured to the web (#9256) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9499
- feat(billing): quote PDF draws its line tables, totals and pagination through the shared module (#9414 W3b) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9490
- fix(patches): catalog list resolves severity from device-reported values when the trusted source has none (#9387 gap 1) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9399
- chore(go): bump toolchain to 1.26.10 (GO-2026-6809 crypto/x509 fix) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9471
- fix(agent): read Windows link speed in-process and batch security probes — no per-adapter PowerShell spawns (#9267) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9477
- feat(billing): quote Preview and portal pages render the shared document composition (#9414 W2b) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9518
- fix(agent): dismiss the intercepted UAC prompt once a server-approved elevation has launched (#8995) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9515
- refactor(billing): Detail description cells render the shared DocumentLineDescription (#9414 W5) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9527
- feat(billing): one cover geometry on screen, in the editor and in the PDF; full document screenshot matrix (#9414 W4) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9536
- feat(devices): confirmed "Force reboot now" (force_reboot command, step-up route, console action) by @Bbomby in https://github.com/LanternOps/breeze/pull/9380
- docs(specs): ticket import attachments, modules and the Zammad module (#8313, steps 2–3) by @lennonflima in https://github.com/LanternOps/breeze/pull/9295
- feat(portal): add enablePhysicalPlacement visibility flag by @fabicarvano in https://github.com/LanternOps/breeze/pull/9333
- fix(topology): carry WAN role and circuit termination on interface coalesce by @fabicarvano in https://github.com/LanternOps/breeze/pull/9379
- docs(plan): PAM approval end-user experience (#8928) by @Jay-Starlux in https://github.com/LanternOps/breeze/pull/9439
- docs(billing): partner billingEnabled toggle spec (#8807) by @fabicarvano in https://github.com/LanternOps/breeze/pull/8916
- docs(specs): ticket import — drop decision 24, owners stay display-only (#9295 follow-up) by @lennonflima in https://github.com/LanternOps/breeze/pull/9556
- docs(unifi): reconcile W2 local-controller gate and v2 writer ownership (#7690) by @fabicarvano in https://github.com/LanternOps/breeze/pull/9555
- test(portal): anchor the clock in the expiring-card autopay test by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9577
- fix(pam): deliver approvals immediately and restore live updates by @PJF16 in https://github.com/LanternOps/breeze/pull/8677
- fix(devices): show full event log messages when expanded by @PJF16 in https://github.com/LanternOps/breeze/pull/9551
- fix(i18n): close translation gaps across non-English locales by @fabicarvano in https://github.com/LanternOps/breeze/pull/9554
- fix(config-policies): effective-config and policy-list papercuts from demo QA (#9565) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9575
- fix(ai): chat sidebar papercuts from demo-video QA (#9534) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9572
- fix(scripts): show each script's last run; queued copy follows device status (#9563) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9570
- fix(reports): first scheduled run waits for its occurrence; date-range presets bound report data (#9562) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9569
- fix(tickets): queue row click opens the ticket; resolving keeps it in the workbench (#9564) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9568
- feat(ai): name the affected software in vulnerability tool results (#9532) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9539
- fix(web): cp -R fallback for monaco asset copy on colima/virtiofs (#9535) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9567
- fix(ai): report the worker's result on an approval hand-off and close its ledger row (#9530) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9538
- fix(web): partner-wide approve-patch confirm wording (#9531) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9537
- fix(web): alert drawer — stack suggestion actions, wrap footer buttons by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9343
- chore(dev): bind local test stack ports to loopback by default by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9368
- fix(ai): out-of-credits returns 402 with a code and offers Buy credits (#9450) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9486
- fix(backup): send the Cove visa as a top-level JSON-RPC field by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9365
- fix(api): unparseable contract blocks render as unavailable on customer quote routes (#9452) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9580
- fix(security): close RoboShadow/ZAP header findings (SOC 2 hardening) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9235
- fix(web): keep the SSO re-auth grant across a profile-page remount (#8862) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9581
- fix(api): invoice PDF reads online-payment availability on the caller's connection (#9454) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9584
- fix(billing): one shared labour-amount helper; show hours × rate (#9561) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9573
- fix(agent-install): data dir/group + version floor in install.sh, onboarding docs drift (#9566) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9571
- fix(dev): wt-stack mounts packages/document-ui into the portal container (#9519) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9582
- fix(deps): bump dompurify to 3.4.17 (unblocks Security Audit) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9694
- fix(pam): normalize denials and authorize UAC approvals by @PJF16 in https://github.com/LanternOps/breeze/pull/8673
- chore(deps): bump libc from 0.2.190 to 0.2.191 in /apps/helper/src-tauri by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/9590
- chore(deps): bump sha2 from 0.11.0 to 0.11.1 in /apps/helper/src-tauri in the rustcrypto group by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/9588
- fix(agent): find GDM's Xorg by its listening socket when argv has no :N (#9592) by @bdunncompany in https://github.com/LanternOps/breeze/pull/9598
- feat(pam): agent reports an elevation it cannot act on; server closes it (#9517) by @bdunncompany in https://github.com/LanternOps/breeze/pull/9559
- fix(ai): human labels and impact text on approval cards (#9657) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9717
- docs(plan): W09 D-G1 — G1 api-kill criterion counts attempts that reach a live API by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9724
- docs(specs): record Gate A approvals of 2026-10-22 by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9725
- fix(api): device import links use the chosen source system (#9678) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9715
- fix(web): analytics charts draw an empty plot (#9647) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9686
- fix(web): alert detail page Resolve sends a JSON body (#9622) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9685
- fix(api-keys): send a real ISO timestamp for dated key expiry (#9654) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9688
- fix(discovery): profile last-run and object OS fingerprint (#9644, #9645) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9689
- fix(patching): scheduler and ring count honour closest-level-wins for overlapping patch policies (#9632) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9690
- fix(webhooks): "Alert Created" subscribes to alert.triggered; remove the unsaved payload template UI (#9651, #9653) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9691
- fix(web): stop PSA connections UI promising ticket sync (#9655) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9712
- fix(web): keep help tooltips visible at viewport edges by @PJF16 in https://github.com/LanternOps/breeze/pull/9552
- fix(api): honour the selected organization on Security Score/Trends and Sensitive Data (#9639, #9681) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9696
- fix(peripherals): editing a policy keeps its site/group/device targeting (#9620) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9699
- fix(agent): record an unapplied CIS remediation as failed, not completed (#9604) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9701
- fix(web): alert drawer notifications + ticket flow (#9623, #9624) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9704
- fix(analytics): honour the selected org and the custom range (#9648, #9649) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9705
- fix(audit): custom date range uses the local day; user filter matches by id (#9670, #9671) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9708
- fix(web): Azure AD SSO preset key + invite org picker re-open (#9601, #9602) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9710
- fix(api): execute_containment follows the real command outcome (#9662) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9716
- fix(web): software Create Policy prefill + per-status deployment label (#9636, #9637) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9703
- fix(peripherals): a Peripheral Control feature link resolves through config-policy assignment and reconciles on link changes (#9619) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9722
- fix(billing): invoices fall back to partner branding like quotes do (#9676) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9727
- fix(web): security sidebar entry reads "Security Incidents" (#9550) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9734
- docs(migration): lead with Organizations › Bulk import for the tenancy tree (#9680) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9741
- ci(rust-check): cache Tauri apt packages to avoid mirror stalls (#9753) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9755
- fix(ci): merge-queue janitor sweeps on every merge group, fail-safe + tested (#9800) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9803
- fix(web): translate Catalog/Deliverable Templates labels and add missing test ids (#9665) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9737
- fix(web): dropdown choice Value tracks the Label until edited; device list shows dropdown labels (#9677) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9736
- fix(web): audit log names backup restores and queued agent commands (#9630) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9740
- fix(billing): resumeContract never lands next_billing_at on an already-claimed period (#9509) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9731
- fix(web): User Risk page refreshes in place, names risk drivers, drops the model id from the subtitle (#9684) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9735
- fix(agent): cancel in the Start->pgid-attach window kills the whole tree (#9815) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9824
- fix(agent): tolerate PowerShell cold start in Windows VPN service test (#9814) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9819
- chore(deps): bump tauri-build from 2.7.2 to 2.7.3 in /apps/helper/src-tauri in the tauri group by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/9589
- fix(web): enrollment-key row installer download asks for the device count (#9615) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9695
- fix(api): bulk command cancels run the per-command-type cancellation hooks (#9719) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9739
- fix(incidents): human actor labels, no empty enricher timeline entry, docs match the feed (#9663) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9742
- fix(devices): device details papercuts — alert titles, disk used %, KEV/CVSS/CVE labels, OS build parity, tab test ids (#9610) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9743
- test: fix flaky agentsim scheduler, storage rate-limit, invoice accent tests (#9816 #9817 #9818) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9826
- fix(billing): "Generate now" reports skipped outcomes instead of "Invoice generated" (#9508) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9746
- fix(events): publish device.enrolled when enrollment completes (#9511) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9748
- fix(ai): Ctrl/Cmd+Shift+A shortcut and AI Usage All-organizations totals (#9613, #9667) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9706
- fix(security): reopen completed recommendations when problem returns; per-org status (#9641) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9713
- fix(api): patch compliance excludes decommissioned devices; Cmd+K search honors the selected org (#9611, #9612) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9702
- fix(web): patch catalog Details opens a read-only patch drawer (#9544) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9721
- fix(alerts): resolve reboot-pending alerts once the device restarts by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9599
- fix(backup): device-scoped Restore Wizard step 1; Storage Used counts stored bytes (#9627, #9631) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9720
- fix(connection-health): token-reuse revocations explain themselves, stop pointing at a dead Fix link, and retire once the user reconnects (#9594) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9730
- feat(portal): staff Customer view renders the portal read models through a shared gate table (#9350) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9732
- fix(web): maintenance-window and ring-approval copy matches behaviour; literal reboot toggle test id (#9634) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9747
- docs(plan): dashboard click-through + sites visibility (#6721) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9761
- fix(web): approve/reject pending CIS remediations from the Remediations tab (#9605) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9711
- docs(plan): partner settings — one save model and inheritance visibility (#9170) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9764
- feat(mcp)!: B-W04 Tier-3 over MCP via action intents (#6154) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9752
- feat(shared): service_running detection clause + install-spec validator (#6958 PR A) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9745
- docs(plan): ticketing — merge, business-hours SLA calendars, routing (#8883) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9765
- docs(deploy): AI_TOOL_SEARCH=on never works on an OpenAI-compatible connection by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9772
- fix(webhooks): save bearer-token auth as an encrypted Authorization header (#9652) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9698
- fix(web): network/discovery papercuts — translated asset types, plural counts, honest SNMP empty state (#9646) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9766
- fix(approvals): show the deny reason in Recent approvals and the denial notification; one toast per Approve (#9658) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9771
- fix(billing): name quote-created contracts from quote title and client (#9778) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9802
- fix(portal): offer CSV only for report runs that have tabular rows (#9774) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9801
- fix(portal): Equipment lists only your checkouts; label every device status (#9773, #9776) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9804
- Preserve launch purchase selection and paid enrollment allowance by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9760
- feat(web): partner settings structure — panel headings, regrouped rail, Caller verification and Known guests tabs (#9787) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9805
- fix(security): Sensitive Data scan Findings count and Remediated (24h) use the right fields (#9682) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9806
- fix(security): overview Vulnerabilities card counts CVE findings; security pages fetch with the selected org on cold load (#9640, #9642) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9729
- feat(security): YARA W04a — IOC import, rule test upload, threat details view (#6267) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9759
- fix(peripherals): local-time exception expiry, labelled inputs, partner-wide rows in the org list, names in the activity log, per-device effective policies (#9621) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9807
- fix(security): encryption method/TPM as reported; BitLocker enum names (#9607, #9608) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9707
- fix(patching): ring patch view, summary and compliance honour partner-wide approvals via latest-wins (#9633) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9769
- fix(analytics): papercuts — honest range labels, sessions follow the range, capacity metric/axis, SLA card scope, query-builder coverage note, empty gauge state (#9650) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9809
- fix(audit): Audit Trail papercuts — real filter codes, coloured badges, honest change counts, user info, export row in the client's trail, forwarding copy (#9672) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9810
- fix(agent): debug-log unreadable X server socket candidates (#9598 follow-up) by @bdunncompany in https://github.com/LanternOps/breeze/pull/9812
- fix(pam): cancel the unable report as agent shutdown begins; approved/actuating and lock-order tests (#9559 follow-up) by @bdunncompany in https://github.com/LanternOps/breeze/pull/9813
- docs(plan): business reports phase 2 — profitability, MRR/renewals, win rate (#6830) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9820
- docs(plan): AI chat — move conversations between side panel and workspace (#9427) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9822
- docs(plan): installer bootstrap from an unblockable artifact source (#8874) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9823
- feat(web): staff Customer view panel + Documents portal hint (#9350, web half) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9733
- fix(webhooks): the edit form keeps events it has no checkbox for (#9693) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9768
- feat(web): dashboard numbers link to the filtered lists they count — devices and site detail (#9791 A-1) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9808
- fix(settings): Create Role shows inherited checks; Users toasts auto-dismiss; Clone Role gets a neutral description (#9603) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9825
- feat(tickets): stored SLA deadlines + business-time calculator (#8973) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9811
- feat(ai): attach to a running chat turn — contract, SessionEventBus, shared open/attach/hand-off modules (#9840 W1) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9852
- feat(mcp): B-W04 URL-mode elicitation for Tier-3 approvals (#6154) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9756
- fix(web): command palette copy matches what search returns; shortcuts card lists every chord (#9614) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9871
- fix(web): AI Usage breakdown title follows the grouping; stat-card labels translated (#9668) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9872
- fix(settings): default device group is a real group applied at enrollment; drop the two no-op default controls (#9617) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9738
- fix(integrations): real signature header names, webhook last-delivery and counts, API keys background refresh (#9656) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9874
- fix(ai-billing): keyed, durably-retried compute + unreserved credit debits; operator re-drive (#9451, #7717) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9491
- fix(web): software drawer/violations use interpolated strings and plurals; deployment list drops the raw id (#9638) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9827
- fix(vulns,patching): one "is there a patch?" answer + demo-QA papercuts (#9533) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9576
- fix(security): encryption tiles share one device set; rotate picks the volume; readable recent access; audit labels; test ids (#9609) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9878
- fix(web): custom-field import wizard shows hostnames, pre-maps columns, keeps camelCase words and incumbent types; clearer button label (#9679) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9879
- fix(alerts): human copy on the alert page, background refresh after actions, correct setup pointers, ticket link opens the alert, delivery papercuts (#9625) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9880
- fix(enrollment): Create Key honours partner/org enrollment defaults and says what blank means (#9616) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9876
- feat(backup): selective restore accepts folders, expanded server-side to indexed files (#9628) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9884
- feat(reports): MRR & renewals business report (mrr_renewals) (#9828) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9885
- fix(security): CIS Hardening papercuts — one score helper, consistent name, remediation evidence, display names, org-scoped scans, test ids (#9606) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9877
- docs(plan): MCP modernization B-W05 Apps pilot + B-W06 Tasks (#6154) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9891
- fix(security): Sensitive Data access state, device picker, data-type labels, quick-action feedback, cron timezone hint, schedule state (#9697, #9683) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9881
- fix(ai): file_operations delete says it moved the file to trash; explicit permanent delete behind approval and the cleanupGuard gate (#9853) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9893
- fix(ai): validate tool input before creating an approval intent so always-blocked calls never ask a human (#9854) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9892
- fix(backup): snapshot table formatting, integrity badges, restore-job details, health copy, and an up-front second-factor hint for unverified restores (#9626, #9629) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9873
- fix(security): overview papercuts — device-weighted trend, honest Refresh, BitLocker counts encrypted only, spaced labels, plural steps, test ids (#9643) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9883
- fix(security): recommendation actions carry the row's org in the All-organizations view (#9714) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9875
- feat(agent): service_running detection, zip archives and pre/post-install scripts (#6958 PR B) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9882
- fix(helper): bump ctutils to 0.4.4 for RUSTSEC-2026-0385 (#9889) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9890
- fix(api): ticket-child writers lock the ticket row first (#9779 W0) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9846
- feat(reports): quote win rate business report (quote_win_rate) (#9828) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9898
- fix(security): honest scan/threat status labels; SLA monitor skips contained incidents (#9659, #9660, #9661) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9709
- docs: vulnerability catalog coverage + per-user inventory specs and plans by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9718
- fix(wt-stack): pin PUBLIC_PORTAL_URL and sibling public URLs to caddy base URL (#9777) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9799
- feat(recipes): operator recipe library W06 R1a-0 — E4 generalization for contact-targeted, facts-dependent recipes (#6171) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9754
- docs: v0.124.0 docs sync (upgrade notes, env vars, feature pages, mappings) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9345
- feat(reports): client profitability business report (client_profitability) (#9828) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9899
- fix(ai): bind a non-device sidebar session to the header-selected org (#9529) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9541
- chore(node): Oct 2026 security release — images to 24.22.1, toolchain to 22.23.4 by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9851
- docs(specs,plans): Wisp orchestrator agent — approved spec, wave map, W01–W08 plans by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9905
- docs(plans,skill): Wisp execution split — parallel API/web/mobile sub-issues, in-wave fan-out, Sonnet routing by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9923
- fix(deps): zod 4.6.7 for GHSA-mrhx-c7xc-m3w5 (#9915) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9925
- feat(security): YARA W04b — Detection rules UI, IOC importer, test upload, rule-set picker (#6267) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9888
- fix(deps): bump tokio to 1.51.6 for RUSTSEC-2026-0386 (#9966) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9970
- feat(tickets): business-hours SLA calendars (#8973) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9897
- feat(web): dashboard alert, vulnerability and security numbers link to their filtered lists (#9791 A-2) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9887
- feat(api): partner settings inheritance read API (#9786 W3) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9821
- fix(ci): Tauri apt cache keyed by distro, single-attempt fallback (#9847) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9904
- feat(recipes): operator recipe library W06 R1a — identity_offboarding recipe, discovery, readiness and admission (#6171) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9974
- fix(shared): UTF-16 length pin for app-rule schema under zod 4.6 + jitless/length guard tests by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9969
- qa: v0.124.0→main pre-release sweep — 44 fixes + tracking doc (140 UI rows, 6 FAILs fixed, 40 issues filed) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9967
- feat(entitlements): Wisp W01 — partner entitlements mechanism + wisp key (#9907) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9924
- feat(patches): patch compliance is the device percentage everywhere; dashboard patch numbers link to the filtered list (#9791 C) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9982
- feat(tickets): merge tickets — tombstone, re-point, guards, portal read access (#8972) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9901
- docs(plans): tracking_issue → feature parents for six Gate-B plans by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9988
- feat(wisp): W02 grants and the delegation ceiling (#9908) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9971
- feat(software): install-script dispatch, agent gates and built-in catalog key (#6958 PR C) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9983
- feat(mcp): B-W05 MCP Apps pilot — fleet-health view with text fallback (#6154) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9984
- chore(security): trivyignore zod 3 under @expo/cli + pypdf 6.21.2 in the AI workspace image (unblocks every PR's Trivy rollup) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9994
- chore(mobile): gesture-handler 2.33.1, screens 4.30.0, svg 15.16.0; ignore react-native in dependabot (replaces #9280) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9999
- fix(sentry): bound repeat-error storms that exhaust the error quota by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9870
- chore(deps): clear 16 moderate/low Dependabot alerts (fast-uri, sanitize-html, @vitest/mocker, brace-expansion, js-yaml, nodemailer) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9986
- fix(web): AI model drawers layout; partner settings full width + rail fits viewport by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9400
- feat(web): integrations page — health-first nav, per-entry status, scope labels by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9442
- fix(web): ticket subject is a heading at rest, editable via pencil by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9299
- chore(deps): bump @tiptap/pm from 3.31.3 to 3.32.0 by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/8814
- chore(deps): bump the tauri group across 1 directory with 7 updates by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/9591
- chore(deps): bump the docker-base-images group across 2 directories with 1 update by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/9903
- feat(wisp): W03 memory — ai_memory_blocks, grant-aware broker, remember/recall/confirm/retract, memory page (#9909) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10000
- feat(web/wisp): W04b chat surface — Wisp toggle, step-up grant, thread header, attachments, sidebar Wisp mode (#9916) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10007
- feat(wisp): W04a threads API — wisp_threads, session seed, per-tool ceiling gate, thread routes + attachments (#9910) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10008
- feat(wisp): W05a concerns, watches, budget, routes, chat tools, web concern list (#9911) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10009
- feat(wisp): W05b assessment engine — profile, outcome tools, wake coordinator, reaper, clustering, readiness (#9917) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10010
- docs(plan): YARA IOC scanning W05 — fleet sweep, AI security_scan actions, audit, docs (#6263) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9992
- test(web): await the selection count in the PatchComplianceView select-all test (flake) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9991
- chore(deps): bump tokio from 1.51.6 to 1.53.3 in /apps/viewer/src-tauri by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10002
- chore(deps): bump tauri from 2.12.2 to 2.12.4 in /apps/helper/src-tauri in the tauri group by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10004
- chore(deps): bump tokio from 1.51.6 to 1.53.3 in /apps/helper/src-tauri by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10005
- chore(deps): bump the go-minor-patch group in /agent with 3 updates by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10006
- chore(deps): bump werift from 0.25.0 to 0.25.1 in /e2e-tests by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10003
- chore(deps): bump the github-actions group across 1 directory with 4 updates by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/9985
- feat(web): partner settings one header Save — save units, draft store, status region, adapters (#9788) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9990
- feat(web): side panel attaches to a running turn — restore, switch, turn_in_progress composer restore, release/adopt (#9840 W2) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9996
- feat(web): Sites in Fleet Management — revive /settings/sites as a fleet-wide sites list (#9791 B) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9995
- feat(web,portal): merge ticket UI (#9779 W2) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9997
- feat(software): service_running compliance bridge and derived service watches (#6958 PR E) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10022
- feat(web/wisp): W06b nudges web — thread page, bell routing, activity + live line, spend meter, pause/resume, feedback (#9918) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10012
- feat(api,web): ticket routing rules (#9779 W5) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10001
- feat(wisp): W06a nudges API — notifyUser, digest + morning brief, activity, feedback, nudge preferences (#9912) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10013
- feat(devices): move devices to a site in bulk — POST /devices/bulk/site with MFA, per-device outcomes (#9791 D) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9998
- feat(web): workspace opens sessions, restores by attaching, #session= deep link, both move controls, chips, logout (#9840 W3) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10029
- feat(mobile/wisp): W06c nudges mobile — wisp_nudge routing, Wisp thread screen, concern sheet, nudge preferences (#9919) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10011
- feat(mcp): B-W06 Tasks extension over action intents (#6154) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10023
- feat(security): IOC sweep record, pump and routes (#6263 W05 PR A) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10028
- feat(software): install-script UI, zip packages, service compliance copy and docs (#6958 PR D) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10035
- feat(agents): reattach wave 1b-1 — stale-caller hardening before rebind-confirm (#8318) by @lennonflima in https://github.com/LanternOps/breeze/pull/9896
- test(e2e): dashboard click-through and Sites reachability (#9791 W06) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10039
- feat(recipes): operator recipe library W06 R1b — Recipe Library web surface (#6171) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9993
- fix(dns-security): Umbrella sync records a partial status and keeps advancing when the request budget runs out (#10018) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10041
- fix(dns-security): background integration delete with FK cascade, and a batched retention job for events and aggregations (#10019, #10020) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10042
- feat(web): one conversation list on two surfaces — side-panel History, workspace "Open a past conversation" picker, org/device chips, open-elsewhere rows (#9840 W4) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10044
- feat(ai): ioc_hunt tool — hunt, sweep (tier 3) and import_iocs (#6263 W05 PR B) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10048
- feat(api): ticket import W0 — writer follow-ups (#8313) by @lennonflima in https://github.com/LanternOps/breeze/pull/10034
- feat(api): ticket import W3 — HTML to text for imports (#8313) by @lennonflima in https://github.com/LanternOps/breeze/pull/10046
- feat(web): reliability score factors link to the event log with the scoring window (#9791 W07) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10052
- feat(wisp): W07a specialists API — coordinator, launch_specialist, approval carrier, bulk_ticket_reply, metrics, gap-finder (#9913) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10045
- feat(web,docs): IOC sweeps UI, rule version on threats, docs (#6263 W05 PR C) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10055
- feat(recipes): operator recipe library W06 R1c — identity_offboarding deterministic release gate (#6171) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10058
- feat(web): AI chat move conversations W5 — E2E, running-turn harness, docs (#9840 W5) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10056
- feat(ai-tools): W02 — PSA and billing write tools in chat and agents (#6754) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9767
- feat(web/wisp): W07b — "Wisp for " provenance, /admin/wisp overview, docs + rollout (#9920) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10033
- feat(backup): W03 mint records the per-snapshot key root, BMR token-mode guard, prefix UI/docs (#8730) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9443
- docs(plan): recipe library W07 — reconcile R2 with as-built E4/R1 (#6165) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10067
- feat(wisp): W08a home API — wisp_thread_links, entity resolver, link tools, partner switch, GET /wisp/home (#9914) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10066
- feat(mobile/wisp): W08c mobile home sections + connector relabel "Wisp", flag alias (#9922) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10063
- docs(plan): network isolation containment — Gate A fold-in + implementation plan (#4618) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10069
- feat(web/wisp): W08b Wisp home — /wisp route move, home page, needs you, links + entity picker, Link-to-Wisp, partner switch card, docs (#9921) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10070
- feat(ai): per-domain lazy chat tool index (#6754 W19) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10087
- feat(ai-tools): W03 — backup, DR and virtualization tools in chat and agents (#6754) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10117
- feat(recipes): operator recipe library W07 R2a — identity_onboarding recipe, two-stage plan approval, sealed credential handover (#6172) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10118
- feat(security-agents): W05 — Control D / NextDNS vendors, tenant-variable readiness and service_running presence (#8739) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10124
- feat(recipes): operator recipe library W07 R2b — identity_onboarding web surface (#6172) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10128
- docs(ai): AI surface cohesion — assessment and 8-wave plan (#10131) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10140
- feat(agreements): agreements:send permission, agreement-request lifecycle API, accept token and accept/decline service (#9075 W2a) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10127
- docs(ai): W07 public docs IA — one AI group, ai-tasks + breeze-ai pages (#10138) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10147
- feat(ai-tools): W04 — security, incident and device-operation tools in chat and agents (#6754) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10130
- feat(knowledge): relabel indexer extension, Helper string and AI-models note to Knowledge (#10137) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10148
- fix(ai-operator): operator-minted secret-bearing intents appear in the /ai-risk reveal feed (#10129) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10150
- fix(wisp): session attach, launch_specialist ceiling, picker device search — Wisp full E2E (#9906) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10146
- fix(wisp): refuse doomed launch_specialist calls before the approval card; org name on the card (#10144) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10158
- feat(web): AI decisions, spend and tiers — Approve/Deny, dollars, four tier names (#10134) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10157
- feat(web): Operator work is an AI task (#10133) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10155
- feat(web,mobile): chat door is Breeze AI everywhere, vocabulary guard (#10132) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10153
- feat(ai-tools): W06 — PSA configuration and ticket-ops tools in chat and agents (#6754) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10160
- feat(agreements): public signing page, agreement-request emails and outcome notify (#9075 W2b) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10162
- test(recipes): operator recipe library W07 R2c — identity_onboarding deterministic release gate (#6172) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10164
- feat(web): AI section collapse, Settings → AI hub, Wisp lock, palette gates (#10135) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10165
- fix(office): prevent automatic resource loads in assistant markdown by @strix-security[bot] in https://github.com/LanternOps/breeze/pull/10060
- fix(agent): preserve executable modes during rollback by @strix-security[bot] in https://github.com/LanternOps/breeze/pull/10061
- release skill: record hosted deploy per region by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10110
- feat(web): one chat door — grant-driven voice, /wisp locks, full-page chat at /ai/chat (#10136) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10171
- feat(agreements): signature certificate, Send for signature dialog, status chips (#9075 W2c) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10167
- feat(ai-tools): W07 — alert correlation and signal-triage tools in chat and agents (#6754) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10169
- feat(unifi): W2 agent collection for Wi-Fi monitoring (#7690) by @fabicarvano in https://github.com/LanternOps/breeze/pull/10166
- fix(api): bind the force-reboot step-up to the canonical device id; pin .strict() by @Bbomby in https://github.com/LanternOps/breeze/pull/10173
- feat(billing): add partners.billing_enabled and skipped-periods ledger (PR 1) by @fabicarvano in https://github.com/LanternOps/breeze/pull/10172
- feat(ai): Tool Catalog W04 PR A — flow runner, triggers, approval pause/resume (#5219) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10168
- feat(agreements): remind, expiry reaper, agreement.* events, docs (#9075 W3b) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10191
- chore(mobile): bump store version to 1.0.2; release skill bumps it every cut by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10121
- docs(plan): monitor Deploy to… device-group and device targets (#9408) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10014
- fix(api): file upload, copy and move require scripts:execute by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10059
- fix(web): organization settings full width, matching Partner Settings by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10071
- qa: UI QA sweep main 1b45002→bc6f957fa4 (2026-10-24) — 3 fixes + tracking doc by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10109
- fix(wisp): persist preferences via remember; readiness hint when no agent (#10143) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10154
- fix(web): topology map fits the screen and stops fighting page scroll by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10163
- feat(web): Tool Catalog W04 PR B — enable, run, runs tab and run timeline (#5219) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10175
- docs(plan): on-device dialogs (#10190) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10206
- docs: Wisp companion spec + plans (feature #10210) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10214
- feat(ai-tools): W08 — network topology tools in chat and agents (#6754) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10204
- qa: UI sweep bc6f957→b113a52d3f (Wisp + AI cohesion) — partner-wide Wisp grant fix + log by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10201
- feat(portal): agreements list/detail/sign + signed-agreements read model (#9075 W3a) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10202
- fix(agent): native remote-support consent dialogs default to Deny (#10187) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10208
- feat(agent): jittered reconnect, drain handling, loop-level Retry-After (W09, #8148) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9444
- fix(agent): cancel_reboot no-op succeeds; restart-prompt replies no longer dropped (#10186, #10182) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10209
- fix(wisp): pause-state copy vs grant state, partner-disabled header, sidebar + viewer gates (#10145) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10156
- feat: update rings decide Windows feature updates (block / allow / pin) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10203
- fix(billing): contract invoice lines carry a Name; NULL manual quantity is unresolved, not 0; AI-usage counts are locale-formatted (#9664, #9669) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/9744
- feat(api): Wisp thread posts and timeline — wisp_thread_posts, notifyUser posts, GET /wisp/thread/:id/timeline (W02a #10212) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10238
- test(web): disk used-% test mocks hardware-health as absent, not an empty object by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10242
- feat(web): Wisp home as a companion surface — chat kit restyle, column + rail layout (W01 #10211) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10240
- feat(web): Wisp thread renders the full timeline with posts and Load earlier (W02b #10213) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10243
- docs(plan): tool catalog W5 — webhook trigger, flows as tools, budgets (#5215) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10234
- docs: end-user consent and restart-prompt behaviour (#10188, #10189) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10205
- fix(api): let the portal frame the two inline public PDF routes (#10192) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10226
- feat(agent): Breeze Assist reliability — WebView2 gate, crash-loop diagnostics, install ownership (#10183, #10185) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10228
- feat(api): reattach wave 1b-2 — the bounded rebind, server side (#8318) by @lennonflima in https://github.com/LanternOps/breeze/pull/10116
- feat(assist): ship the WebView2 minimum as a requirements sidecar (#10183) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10230
- feat(agreements): contract_documents append-only — evidence frozen, erasure via audit role (#9075 W4b) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10233
- feat(ai-tools): W09 — SNMP and network monitoring tools in chat and agents (#6754) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10241
- fix(wisp): platform-admin overview API behind /admin/wisp + honest error state (#10141) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10151
- fix(web/wisp): /wisp/chat tabs start under the active Wisp grant; home New conversation; refresh-grant hint (#10142) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10152
- feat(web): show Breeze Assist availability and default new helper policies to deploy (#10183, #10185) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10239
- feat(agreements): partner default expiry + automatic reminders (#9084) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10235
- feat(flows): W5 PR A — webhook trigger, flow budgets, for-each concurrency (#5215) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10270
- fix(auth): synchronize MFA factor state (#10207, #10229) by @JonathanPitre in https://github.com/LanternOps/breeze/pull/10237
- feat(ai-tools): W10 — AI-agent read tools in chat and agents (#6754) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10273
- feat(shared): prompt host contract schema and golden fixtures (#10190) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10274
- chore(deps): bump dotenv from 18.0.8 to 18.0.9 in /e2e-tests by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10251
- chore(deps): bump @vitejs/plugin-react from 6.0.2 to 6.1.2 by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10267
- chore(deps): bump @googleapis/gmail from 21.0.0 to 22.0.2 by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10261
- chore(deps): bump @googleapis/admin from 37.0.1 to 37.0.2 by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10262
- chore(deps): bump the typescript-tooling group with 3 updates by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10254
- chore(deps): bump tldts from 7.4.13 to 7.4.19 by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10263
- chore(deps): bump postcss from 8.5.30 to 8.5.31 in the tailwind group by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10257
- fix(ci): M365 executor jobs read Node from .node-version, not an undefined env by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10281
- feat(assist): prompt host renderer, notification list and tray entry (dormant) (#10190) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10278
- fix(flows): apply the run-body read ceiling to webhook deliveries (#5220) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10283
- feat(flows): W5 PR B — built-ins: notify, http_request, ai (#5215) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10284
- chore(deps): bump react-i18next from 17.0.18 to 17.1.4 by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10266
- chore(deps): bump eslint from 10.12.0 to 10.13.0 in the linting group by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10258
- feat(web): add physical placement card to device and network asset detail (W1-D1) by @fabicarvano in https://github.com/LanternOps/breeze/pull/10247
- feat(agent): prompt IPC types, per-kind scopes and the prompt host core (dormant) (#10190) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10277
- feat(ai-tools): W11 — security policy tools in chat and agents (#6754) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10286
- feat(flows): W5 PR C — flows as tools on chat, MCP and agents (#5215) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10285
- chore(deps): bump @radix-ui/react-context-menu from 2.3.7 to 2.4.1 by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10265
- feat(agent): owner-bound inbox, native prompt renderer and the enabledKinds switch (dormant) (#10190) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10279
- feat(api): prompt host kill switch and live renderer observation (#10190) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10280
- chore(deps): bump @tanstack/react-query from 5.104.3 to 5.104.5 in the tanstack group by @dependabot[bot] in https://github.com/LanternOps/breeze/pull/10256
- test(wisp): deflake morning-brief sweep skip test (#10297) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10298
- feat(shared): prompt catalog in eight locales with Go embed parity (#10190) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10309
- qa: UI sweep b113a52→0bb2bd4ea1 (2026-10-26) — 5 fixes + tracking doc by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10296
- fix(web): moving a first-turn chat mid-turn keeps its reply and approval card (#9840) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10312
- feat(agent): cache the MSP identity offline and negotiate the session locale (#10190) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10311
- docs(testing): #9840 real-key lab checklist results (2026-10-26) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10321
- fix(web): sign-out resets the AI side panel by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10320
- feat(web): What's New entry for 0.125.0 by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/10322
New Contributors
- @strix-security[bot] made their first contribution in https://github.com/LanternOps/breeze/pull/10060
- @JonathanPitre made their first contribution in https://github.com/LanternOps/breeze/pull/10237
Full Changelog: v0.124.0...v0.125.0