Breeze RMM v0.114.0 — network devices get truthful health/reachability data, compliance evidence reporting expands to four new report types, and the AI agent execution plane, patch agent, and sweeps act-mode waves land as connected infrastructure.
⚠️ Breaking change: catalog_items.unit_price is dropped from the schema (#6095). Prices have lived in catalog_item_prices since the multi-currency wave; anything still reading the old column directly (custom SQL, BI exports) will break. See Self-Hosting below — take a database backup before upgrading, since this is not a clean rollback to v0.113.0 once applied.
Summary
The network device page now reflects real collection state end to end — sourced reachability, per-OID SNMP outcomes, bounded table walks, template-suggested vendor/model identity, and a dedicated Monitoring tab (#5988 W01–W05). Compliance/evidence reporting grows four new report types (identity & access, vulnerability management, endpoint management, threat detection) on top of last release's service-deliverables foundation. The AI side ships three connected waves as infrastructure: an execution plane for artifact-backed tool runs, an AI patch agent that chases and retries failed patch work, and AI sweeps act-mode with a graduated autonomy gate — plus Fleet Design apply/rollback, a BYO MCP tool-catalog (flagged off), and Organizations/Hardware-Lifecycle/Agreements portal and admin surfaces. A broad fix sweep (SNMP polling correctness, remote-desktop MFA lease evaluation, RLS/lock-order hardening) rounds out the release.
Added
- Network device page truth, W01–W05 (#5988 — PRs #6002, #6017, #6016, #6015, #6035): sourced reachability header, probe/SNMP collection health, per-OID outcomes with bounded table walks, sysObjectID template suggestion (including a Xerox template), one asset-settings modal with a single writer, and a Monitoring tab with an OID table and charts.
- Evidence report types, four new end-to-end reports over the service-plan evidence framework (#5812/#5784 — PRs #5842, #6006, #6007, #6027, #6034): threat detection review, endpoint management review (M365 Intune sync tables), vulnerability management, and identity & access review.
- AI Agent Execution Plane, W01–W05 (#5711 — PRs #5738, #5736, #5771, #5902, #5919): artifact store with large-result capture, a sandbox adapter with compute pricing, an
export_datasettool with run-progress events, workspace tools and admission/compute settlement, and chat integration with observability and rollout. - AI patch agent, W01–W04 (#5747/#5750 — PRs #5792, #5888, #5903, #5920): the patch lane end to end, actionable installs with a shared eligibility resolver and device-scoped Tier-3 install cards, chase/retry/escalate with deterministic failure classes, and reactive routing with reboot planning.
- AI sweeps act mode, W02–W05 (#5753/#5755/#5756 — PRs #5889, #5913, #5937) plus provenance (#5751 — #5780) and the measured impact band (#5761 — PRs #5807, #5885): verification for schedule-triggered intents, an act gate, fan-out/budget/graduation/visibility, and exposure-time cohort metrics on
/ai-agents/impact. - Fleet Design apply/rollback, W03–W05 (#5650 — PRs #5698, #5706, #5726): applied-items ledger, legacy intent inventory with bundle-import tags, and scheduled drift with a delivered-designs counter.
- BYO MCP tool catalog, W01 (#5216 — PRs #5964, #5974, #5983): tool-source tables, discovery, and resolver, chat + MCP bridge, external Tier-3 tools via action intents, and a Tool Sources UI. Ships off by default behind
TOOL_SOURCES_ENABLED. - Desired-state install arming, W02–W06 (#5505/#5506/#5508 — PRs #5917, #5931, #5934, #5968, #6039, plus #5933): compliance-worker install-remediation branch, policy-owned install deployments, AI guardrails that keep the AI from ever arming installs itself, an install-preview dry-run endpoint, and remediation status projected on
GET /software-policies/violations. - Ticket checklists, W01–W03 (#5808 — PRs #5833, #5916, #5921): the checklist primitive, a partner-wide template library, and sweep-seeded instructions wired onto deliverables.
- Hardware Lifecycle portal page, W02–W03 (#5728/#5701 — PRs #5701, #5763, #5785, #5791): a replacement-plan report sourced from warranty ship dates, a portal page (status bar, schedule, plan tables, Reports card), and a timeline with hover/device links.
- Organizations account board, W01–W03 (#5721 — PRs #5734, #5737, #5766) plus a page refinement (#5708):
GET /orgs/account-readiness,/organizationsreplacing the split view, and integrations/contracts/backup surfaces. - Agreements area, W01–W03 (#5822 — PRs #5834, #5835, #5887): vocabulary, permission, and an IA split for the agreements module.
- M365 tenant-sync, W04–W05 (#5327/#5329/#5331/#5332 — PRs #5695, #5702, #5985): executor core with claim ticker, enrichment/continuation/Secure Score rollup, and a
signin_eventssync domain with forced RLS and retention. - Ticket AI assistance: attribution at the source for AI-dispatched device work (#5758 — #5788), an AI ticket proposal posted on the ticket detail as the technician (#5790), per-event helpdesk admissions with an ordered loop guard (#4212 — #5800), a hardened autonomous ticket private-note lane (#5742 — #5805), and a Tier-2 time-entry proposal from AI-assisted ticket work (#5743 — #5872).
- Monitors: episodes and recurrence escalation (#5290 W03 — #5769), coverage kinds with a script monitor and
network_checkadapter (#5287 W04 — #5770), an editable HTTP check target and certificate block on the monitor drawer (#5966 — #6060), and built-in CPU/memory/disk monitors with Network as the hub root (#5710). - AI device scorecard, W02 device-page surfaces (#5022 — #5802).
- HP warranty opt-in, W02 (#5511 — #5700): server-stamped consent, execute+MFA gate, heartbeat delivery.
- Portal Devices page gains a per-org visibility toggle, default off (#4933 — #6065); default_time_entry_minutes exposed in the ticket category editor (#5954 — #6055).
Improved
- Additive API error codes with client-side translation, and Zod validation errors now translate through a
VALIDATION_FAILEDenvelope (Task 3/Step 4 of #3859 — #5692, #5886). - RLS-context bound backend detection: the request DB context's RLS GUC prologue is now bounded, and wedged
ClientReadbackends are detected and reclaimed automatically (#6048 — #6056) — see new optional env vars below. - Artifact blob uploads stream through multipart
Uploadinstead of buffering (#5868 — #5869). sitesandportal_usersgain anorg_idindex (#5732 — #5979).- Org AI budget editor moved to an Org Settings → AI tab (#6004 — #6014); Variables "All organizations" view now lists partner-wide variables only, with rows carrying the owning org (#5353 — #6064).
Fixed
- Remote desktop: v0.113.0 operators saw "Launching viewer…" silently revert for a Partner Admin with no MFA factor — the revocation lease now evaluates MFA through the login policy instead of failing closed (#6107 — #6121).
- SNMP: a device configured for
snmp_version=v1is now polled as v1 with GETNEXT walks instead of SNMPv2c GetRequest/GetBulk (#6019 — #6077); one over-long instance string no longer discards an entire poll's metrics (#6108 — #6109); failedsnmp_pollresults now persist and surface on the network device page (#6021 — #6066). - Fleet Designer apply steps now run on the savepoint transaction instead of the ambient DB connection (#5707 — #6068).
- Partner-wide event-log forwarding destinations are now delivered to child orgs (#5424 — #6059).
- Device cards abort in-flight metrics fetches on unmount and cap concurrent sparkline requests (#6044 — #6061).
- Deliverable sweep now closes retired deliverables' occurrences, and pinned-ticket asserts carry an org predicate (#5609 — #6057).
- Portal dashboard Support tile counts only the logged-in user's own tickets (#5965 — #6054).
- Organizations board now works for a system-scope platform admin (#6029 — #6045); several sweep paper cuts fixed (branding save outcome, Built-in provenance, monitor owner badge, escalation picker) (#6030 — #6041).
- An approved intent's terminal outcome now reads back into chat, and terminal intents surface in
/approvals(#6022 — #6047). - Org-owned tool sources were unreachable under a partner session; tool-source enqueue now audits before enqueue and returns 202 on enqueue failure (#6023/#6025 — #6043, #6042).
offlineDetectornow matcheslast_seen_atat millisecond precision and skips a bad UUID device row instead of failing the whole sweep (#6024, #5867 — #6040, #5944).- Windows installer one-liner now downloads the agent into a temp dir instead of the shell's working directory (#5900); hosted first install stages the watchdog from the control plane with a checksum check (#5899 — #5901).
- A repeat proxy Connect through a tunnel no longer 500s — the allowlist insert is now savepointed (#5907).
- System-scope tokens now correctly resolve platform-admin permissions (#5733 — #5978).
resolveMonitorsForDevicecan now distinguish a vanished device from "no monitors apply" (#5677 — #5973); partner-wide read visibility restored for compiled network checks (#5866 — #5972).- Backup: verification timeouts are now handled and surfaced (#6038); stale
metadata.erroris cleared on recovery-media rebuild (#5411 — #5977); killed backup helper processes are reaped instead of leaking zombies (#5420 — #5975);transferredSizenow finalizes from the terminal result as bytes actually uploaded (#5410 — #5782). - Recovery console PID is held alive after poweroff instead of vanishing mid-recovery (#5890 — #5897).
- OAuth DCR clients now age out once-used, and
last_used_atstamping is non-fatal (#5610 — #5976). - macOS user-session helpers get a per-user log directory (#5877 — #5970).
- Patches can be unapproved after being approved (#5585 — #5914).
- Automation runs triggered by an event now bind to the triggering device (#5240 — #5910).
- Warranty lookup failures are now distinguished from confirmed no-warranty in reports (#5764 — #5947); measured impact band renders censored p50/p90 instead of a misleading 90-day omission label (#5879 — #5885); merged saved-report cards are now keyed by their own id (#5765 — #5943);
device_inventoryexport filters by device id instead of hostname (#5776 — #5950). - Monitoring "Test connection" now performs a real provider check instead of a stub (#5427 — #5778).
- AI metrics adapter paginates within a device instead of hard-capping results (#5775 — #5949).
- Portal:
customCssgets a write path and is now injected into the portal UI (#5952, #5940 — #5982, #5945); lifecycle device rows stop linking to Devices when self-service is off (#5880 — #5884);DeviceListrelative-time cells are stable across hydration (#5881 — #5883).
Security
- SEC-023, SEC-046, SEC-084, SEC-110 (#5545): site scope is now enforced consistently on software deployments, software name search, monitoring names, and manual-asset mutations for site-restricted accounts.
- AI workspaces hardening (#6086 — #6096): pre-ship enforcement pass across ~60 AI tools — scoped-agent enforcement, sandbox lifecycle, and artifact preview handling.
- SEC-038 W05/W06 (#5536, #5537 — PRs #5915, #5922): a durable desktop-start fence with helper IPC generation/resync, plus a capability gate and cutover flag for the fence — laying groundwork for
REMOTE_DESKTOP_FENCE_REQUIRED(still off this release). alert_correlationsRLS now checks both alert orgs instead of one (#5607 — #5673).- AI guardrails added so the AI may never arm software installation itself, even when a policy expresses it (#5505 W05 — #5934).
- Dependency hardening: rustls updated to clear RUSTSEC-2026-0285 in the desktop helper and viewer (#5850, plus a follow-up Cargo Audit fix — #5956, #6084).
Self-Hosting / Upgrade Notes
Upgrade: bump BREEZE_VERSION in .env, then docker compose pull api web portal && docker compose up -d (or pnpm install when running from source).
⚠️ Breaking change: 2026-10-17-130000-drop-catalog-items-unit-price.sql drops catalog_items.unit_price (#6095). Prices have lived in catalog_item_prices since the multi-currency migration; anything reading the old column directly (custom SQL, BI exports) will break once this migration applies. Because a column is dropped, rolling back to v0.113.0 after upgrading is not a clean revert — take a database backup before upgrading.
Migrations: 54 new migration files land in this range, on top of a v0.113.0 install. All are idempotent and auto-apply on boot via autoMigrate (unless AUTO_MIGRATE=false). One is a backfill worth calling out: 2026-10-16-181300-monitor-coverage-kinds.sql backfills org_id on network_monitor_results in a single UPDATE at boot. This runs in a few seconds on a few hundred thousand rows; an instance with many millions of network monitor results should expect a slower first boot on this release.
Schema note: snmp_metrics.instance is widened from VARCHAR(64) to VARCHAR(200) (#6109) — a plain length increase, no table rewrite.
No new required environment variables. New optional env vars, all defaulted, for the wedged-backend detector (#6056): DB_ACCESS_CONTEXT_PROLOGUE_TIMEOUT_MS, DB_WEDGED_BACKEND_SCAN_DISABLED, DB_WEDGED_BACKEND_SCAN_INTERVAL_MS, DB_WEDGED_BACKEND_MIN_AGE_MS, DB_WEDGED_BACKEND_RECLAIM_DISABLED, DB_WEDGED_BACKEND_RECLAIM_MIN_INTERVAL_MS, DB_WEDGED_BACKEND_RECLAIM_MAX_PER_PASS, DB_WEDGED_BACKEND_RECLAIM_TIMEOUT_MS, DB_WEDGED_BACKEND_CONFIRM_DELAY_MS. New log lines: [db-wedged-backend] Detector started … at boot, and a reclaim line when a backend stuck in ClientRead is terminated.
Compose mappings added (#6031): TOOL_SOURCES_ENABLED, TOOL_SOURCES_ALLOW_PRIVATE_EGRESS, WEBAUTHN_RP_ID, WEBAUTHN_ORIGIN, WEBAUTHN_RP_NAME, BREEZE_AI_AGENTS_SWEEP_ACT_ENABLED. Self-hosters with a hand-edited docker-compose.yml must copy these into the api service's environment: block — a value in .env alone does not reach the container. Passkeys on a non-default host need WEBAUTHN_RP_ID set.
Feature flags: nothing new to enable this release. TOOL_SOURCES_ENABLED stays off by default (the BYO MCP tool catalog above is inert until it's turned on). REMOTE_DESKTOP_FENCE_REQUIRED stays off this release.
Behavior changes operators will notice:
- Navigation: the Fleet Management entry Monitoring is now Network Monitor (network assets, checks and templates only). Device monitors moved to Alerts → Monitors; the old
/monitoring/monitorsURLs redirect (#5710). - Portal Devices page is now a per-org visibility toggle, default off — re-enable under Org settings → Portal.
- The org AI budget editor moved to Org settings → AI.
- Variables "All organizations" view now lists partner-wide variables only, with each row carrying its owning org.
- Four new evidence report types are available (identity & access, vulnerability management, endpoint management, threat detection).
No other breaking changes.
Full Changelog: v0.113.0...v0.114.0
What's Changed
- feat(m365): tenant sync core — executor helper, budget, claim ticker, sync-domain job (W04 #5331) by @ToddHebebrand in #5695
- test(web): de-flake DeviceDetailPage.recents (#5696) by @ToddHebebrand in #5697
- docs: sync for v0.113.0 + clear next-release draft by @ToddHebebrand in #5699
- feat(warranty): HP CMSL opt-in surface — server-stamped consent, execute+MFA gate, heartbeat delivery, agent seam (W02 #5511) by @ToddHebebrand in #5700
- chore(deploy): map BREEZE_AI_SCRIPT_AUTHORING_ENABLED in prod compose template by @ToddHebebrand in #5703
- feat(m365): tenant sync W05 — enrichment, continuation, Secure Score, rollup, cadence, links, lifecycle, on-demand, card (#5332) by @ToddHebebrand in #5702
- feat(ai): Fleet Design apply and rollback — rationale columns, applied-items ledger, apply steps 1-3+5, groups per function, Fleet Design page (W03 #5650) by @ToddHebebrand in #5698
- feat(ai): Fleet Design legacy intent inventory — bundle-import tags, legacy evidence + prompt, apply step 4 creates approved scripts (W04 #5650) by @ToddHebebrand in #5706
- feat(web): refine the Organizations page (keyboard, header actions, workspace scope, facts strip, list controls) by @ToddHebebrand in #5708
- test(m365): tenant sync end-to-end suite, benchmark harness, docs and card last-synced line by @ToddHebebrand in #5709
- fix(monitoring): W02 auth gate + partner-token create, built-in CPU/memory/disk monitors, Network as hub root by @ToddHebebrand in #5710
- docs(ai): AI Agent Execution Plane — spike, design spec, and W01–W05 plans (feature #5711) by @ToddHebebrand in #5717
- docs: portal Hardware Lifecycle page spec + wave plans (#5719) by @ToddHebebrand in #5727
- feat(api): GET /orgs/account-readiness — Organizations account board W01 (#5721) by @ToddHebebrand in #5734
- feat(ai): Fleet Design scheduled drift, fleetDesignsDelivered counter, org documents hand-off (W05 #5650) by @ToddHebebrand in #5726
- feat(ai): sandbox adapter, ai_run_workspaces and compute pricing (execution plane W02, #5713) by @ToddHebebrand in #5736
- feat(web): Organizations account board — /organizations replaces the split view (W02) by @ToddHebebrand in #5737
- docs: feature-pipeline 2026-09-13 — patch agent, sweeps, scorecard specs; helpdesk + monitors W03/W04 plans by @ToddHebebrand in #5745
- docs(web-ui): Organizations account board design spec and W01–W03 plans (#5721) by @ToddHebebrand in #5725
- docs: feature-pipeline 2026-09-13 (b) — patch agent, sweeps act-mode, scorecard implementation plans by @ToddHebebrand in #5762
- feat(ai): execution plane W01 — artifact store and large-result capture by @ToddHebebrand in #5738
- feat(reports): Hardware Lifecycle report — device replacement plan with purchase dates from warranty ship records by @ToddHebebrand in #5701
- feat(portal): enableLifecycle flag, hardware_lifecycle portal report, and GET /reports/lifecycle/latest by @ToddHebebrand in #5763
- feat: Organizations account board W03 — integrations, contracts, backup (#5724) by @ToddHebebrand in #5766
- fix(api): check both alert orgs in alert_correlations RLS (#5607) by @ToddHebebrand in #5673
- fix(web): show "Unsupported" instead of "Not Joined" when join detection is stubbed (#5626) by @ToddHebebrand in #5674
- fix(api): include manual-asset tags in GET /tags and /tags/devices (#5425) by @ToddHebebrand in #5672
- fix(api): return cancelState from the script execution read endpoints (#5040) by @ToddHebebrand in #5670
- fix(api): seed scripts through a version cut so they are not headless (#5622) by @ToddHebebrand in #5669
- fix(api): include agent.source.ip.changed in the security-events report (#5426) by @ToddHebebrand in #5668
- fix(api): org-scoped Org Admin can manage their own audit retention policy (#5423) by @ToddHebebrand in #5667
- fix(api): run the patch-compliance inline fallback outside the request DB context (#5566) by @ToddHebebrand in #5666
- docs(spec): Linux distribution support expansion — Arch/pacman + Omarchy design by @ToddHebebrand in #5478
- fix(inventory): enforce site scope on software deployments, software name search, monitoring names and asset mutations (SEC-023, SEC-046, SEC-084, SEC-110) by @ToddHebebrand in #5545
- feat(monitors): coverage kinds, script monitor, network_check adapter and monitor-sourced watch delivery (#5287 W04) by @ToddHebebrand in #5770
- fix(ai-agents): surface the disabled subsystem and make run skips visible (#5380, #5381) by @ToddHebebrand in #5681
- feat(portal): Hardware Lifecycle page — W02 (status bar, schedule, plan tables, Reports card) by @ToddHebebrand in #5785
- feat(monitors): episodes and recurrence escalation (W03, #5290) by @ToddHebebrand in #5769
- feat(tickets): AI ticket proposal on the ticket detail, posted as the technician by @ToddHebebrand in #5790
- feat(ai): W01 — attribution at the source for AI-dispatched device work (#5758) by @ToddHebebrand in #5788
- test(api): poll for the async ai.script.executed audit row by @ToddHebebrand in #5801
- docs(migration): Datto RMM component → Breeze script migration guide (#5355) by @ToddHebebrand in #5779
- docs(m365): runbook manifest section rewritten for v3 / thirteen roles (#5718) by @ToddHebebrand in #5772
- docs(claude-md): register ticket/device org-move rewrite lists as a cascade-registration row by @ToddHebebrand in #5804
- docs(service-plan-evidence-reports): spec + wave plans for feature #5812 by @ToddHebebrand in #5820
- docs(ticket-checklists): spec + wave plans for feature #5808 by @ToddHebebrand in #5819
- test(e2e): port intent-self-approve.spec.ts onto the grant-gated enrolment helper (#5273) by @ToddHebebrand in #5781
- fix(backup): finalize transferredSize from the terminal result as bytes actually uploaded (#5410) by @ToddHebebrand in #5782
- ci: raise Integration Tests shard timeout to 40 min by @ToddHebebrand in #5799
- fix(shared): typecheck packages/shared in CI and fix 4 strict-mode test errors (#5552) by @ToddHebebrand in #5773
- feat(portal): Hardware Lifecycle timeline hover, device links, e2e — W03 (#5731) by @ToddHebebrand in #5791
- feat(ai-agents): per-event helpdesk admissions with an ordered loop guard (#4212) by @ToddHebebrand in #5800
- feat(devices): AI scorecard W02 — device page surfaces (#5022) by @ToddHebebrand in #5802
- feat(ai-agents): harden the autonomous ticket private-note lane (W03, #5742) by @ToddHebebrand in #5805
- feat: additive API error codes with client-side translation (Task 3 of #3859) by @fabicarvano in #5692
- feat(reports): narrative email delivery — authority gate, claim-before-send, reconciliation (W03, #5760) by @ToddHebebrand in #5806
- feat(billing): agreements vocabulary — copy pass (W01) by @ToddHebebrand in #5834
- feat(tickets): checklist primitive — ticket_checklist_items + registrations + REST + ticket card (#5808 W01) by @ToddHebebrand in #5833
- test(agent): deflake Windows TestExecutePythonScript and TestInstallFileConcurrentReplacement (#5631, #5705) by @ToddHebebrand in #5853
- ci: apply the docs-only classifier under merge_group (#5863) by @ToddHebebrand in #5864
- test(api): sortBy name alongside namePrefix in the workspace nightly leak check by @ToddHebebrand in #5865
- feat(artifacts): stream artifact blob puts through multipart Upload (#5868) by @ToddHebebrand in #5869
- feat(ai): measured impact band — exposure-time cohorts on /ai-agents/impact (W04, #5761) by @ToddHebebrand in #5807
- feat(ai): remediation trigger provenance on intents, script executions and automation results (W01 #5751) by @ToddHebebrand in #5780
- ci(workspace-nightly): sortBy name alongside namePrefix in the sweep step by @ToddHebebrand in #5873
- feat(ai): AI patch agent W01 — the patch lane end to end (#5747) by @ToddHebebrand in #5792
- feat(billing): agreements permission (W02) by @ToddHebebrand in #5835
- feat(tickets): Tier-2 time-entry proposal from AI-assisted ticket work (#5743) by @ToddHebebrand in #5872
- fix(portal): stabilize DeviceList relative-time cells across hydration (#5881) by @ToddHebebrand in #5883
- fix(portal): stop linking lifecycle device rows to Devices when self-service is off (#5880) by @ToddHebebrand in #5884
- fix(ai-agents): measured impact band renders censored p50/p90, fixes 90-day omission mislabel (#5879) by @ToddHebebrand in #5885
- qa: pre-release sweep v0.113.0 → main — Fleet Design auth/allowlist, device purchaseDate, monitor deploy/save feedback, ticket stats orgId by @ToddHebebrand in #5871
- feat(ai): execution plane W03 — export_dataset tool and run progress events by @ToddHebebrand in #5771
- qa: follow-up sweep 6dddaad → main — narrative delivery summary, QuoteDetail blocks, ContractEditor refetch loop, agreement copy miss by @ToddHebebrand in #5882
- feat(ai): AI patch agent W02 — actionable installs: shared eligibility resolver, device-scoped Tier-3 install cards, episode suppression, release re-intersection (#5748) by @ToddHebebrand in #5888
- fix(ci): cache golangci-lint binary and retry transient network pulls (#5892) by @ToddHebebrand in #5894
- feat(ai): sweep-condition fix watches — verification for schedule-triggered intents with no alert (W02 #5753) by @ToddHebebrand in #5889
- fix(recovery-media): hold the recovery console PID alive after poweroff (#5890) by @ToddHebebrand in #5897
- test(agent): drive helper lease watchdog on a virtual clock (#5891) by @ToddHebebrand in #5896
- fix(web): OrganizationsBoardPage.integrations chip test race (#5862) by @ToddHebebrand in #5895
- feat(ai): execution plane W04 — workspace tools, analysis profile, admission and compute settlement (#5715) by @ToddHebebrand in #5902
- feat(ai): AI patch agent W03 — chase, retry, escalate: failed-work evidence, deterministic failure classes, bounded retries (#5749) by @ToddHebebrand in #5903
- fix(integrations): monitoring Test connection performs a real provider check (#5427) by @ToddHebebrand in #5778
- feat(billing): agreements area — IA split (W03) by @ToddHebebrand in #5887
- feat(ai): expiring_certs sweep kind — typed TLS observation on network_monitors (W03 #5754) by @ToddHebebrand in #5904
- fix(automations): bind event-triggered runs to the triggering device (#5240) by @ToddHebebrand in #5910
- feat(tickets): ticket checklist template library, partner-wide ownership and apply-to-ticket (W02 #5810) by @ToddHebebrand in #5916
- test(migrations): guard set-based writes on partner-export material tables (#5360) by @ToddHebebrand in #5911
- fix(patches): allow unapproving a patch after it's been approved (#5585) by @ToddHebebrand in #5914
- feat(software): compliance worker install-remediation branch, per-pass cap, give-up counter (W02 #5507) by @ToddHebebrand in #5917
- feat(agent): durable desktop start fence + helper IPC generation + resync (SEC-038 W05, #5536) by @ToddHebebrand in #5915
- feat(ai): AI sweeps act mode W04 — the act gate (#5755) by @ToddHebebrand in #5913
- feat(ai): AI patch agent W04 — reactive routing and reboot planning: patch alert sources, exclusive patch-work routing, next-window projector, reboot_plan items (#5750) by @ToddHebebrand in #5920
- feat(ai): execution plane W05 — chat integration, artifact surfaces, observability, rollout (#5716) by @ToddHebebrand in #5919
- feat(deliverables): ticket-checklist wiring on deliverables — sweep seeding, instructions, portal no-leak proof (W03 #5811) by @ToddHebebrand in #5921
- feat(software): project install_remediation_* on GET /software-policies/violations (#5918) by @ToddHebebrand in #5933
- test(migrations): extend the partner-export lock guard to the configuration-material trigger family (#5912) by @ToddHebebrand in #5932
- feat(ai): AI guardrails for autoInstall — the AI may never arm software installation (#5505 W05) by @ToddHebebrand in #5934
- feat(software): policy-owned install deployments — desired-state install W03 (#5508) by @ToddHebebrand in #5931
- fix(scripts): pass origin='system' on systemScriptLibrary insert (#5671) by @ToddHebebrand in #5946
- fix(reports): device_inventory export filters by device id, not hostname (#5776) by @ToddHebebrand in #5950
- fix(reports): key merged saved-report cards by their own id (#5765) by @ToddHebebrand in #5943
- fix(ai): metrics adapter paginates within a device instead of hard-capping (#5775) by @ToddHebebrand in #5949
- fix(jobs): offlineDetector skips a bad UUID device row instead of failing the whole sweep (#5867) by @ToddHebebrand in #5944
- feat(remote): desktop fence capability gate, cutover flag and pending-teardown UI (SEC-038 W06, #5537) by @ToddHebebrand in #5922
- feat(ai): AI sweeps act mode W05 — fan-out, budget, graduation, visibility (#5756) by @ToddHebebrand in #5937
- fix(reports): distinguish failed warranty lookups from confirmed no-warranty (#5764) by @ToddHebebrand in #5947
- fix(helper): bump rustls to clear RUSTSEC-2026-0285 (#5850) by @ToddHebebrand in #5956
- fix(web): search/filter and org-switch refetch on the Variables page (#5354) by @ToddHebebrand in #5957
- fix(web): extract shared alert device-info block, add monitor link to AlertDetailPage (#5678) by @ToddHebebrand in #5958
- fix(agent): give macOS user-session helpers a per-user log directory (#5877) by @ToddHebebrand in #5970
- fix(web/discovery): wire NetworkBaselinesPanel into the Discovery page (#5433) by @ToddHebebrand in #5971
- feat(software): install-preview endpoint for the pre-arm dry run (#5505 W06) by @ToddHebebrand in #5968
- fix(agent): ship desktop-session WebRTC diagnostics regardless of log_shipping_level (#5929) by @ToddHebebrand in #5959
- feat(ai): tool catalog W01 PR A — BYO MCP tool sources (tables, discovery, resolver, chat + MCP bridge) (#5216) by @ToddHebebrand in #5964
- fix(monitors): partner-wide read visibility for compiled network checks (#5866) by @ToddHebebrand in #5972
- fix(portal): inject saved customCss into the portal UI (#5940) by @ToddHebebrand in #5945
- fix(monitors): resolveMonitorsForDevice cannot distinguish device vanished from no monitors apply (#5677) by @ToddHebebrand in #5973
- fix(agent): reap killed backup helper processes instead of leaking zombies (#5420) by @ToddHebebrand in #5975
- fix(oauth): age out once-used DCR clients and make last_used_at stamp non-fatal (#5610) by @ToddHebebrand in #5976
- fix(db): add org_id index to sites and portal_users (#5732) by @ToddHebebrand in #5979
- fix(backup): clear stale metadata.error on recovery-media rebuild (#5411) by @ToddHebebrand in #5977
- fix(monitoring): validate escalation-policy owner compatibility on monitor_definitions (#5676) by @ToddHebebrand in #5981
- fix(portal): add write path for portal customCss (#5952) by @ToddHebebrand in #5982
- feat(deliverables): managed auto-evidence foundation — registry, system execution path, template report type, period baseline, publish-on-delivery (#5812 W01) by @ToddHebebrand in #5842
- fix(auth): system-scope tokens resolve platform-admin permissions (#5733) by @ToddHebebrand in #5978
- feat(ai): tool catalog W01 PR B — external Tier 3 tools via action intents (#5216) by @ToddHebebrand in #5974
- feat(web): arm/disarm autoInstall with dry-run count, catalog authoring warning, policy-owned deployments (#5505 W04) by @ToddHebebrand in #5986
- docs(monitoring): network device page truth — design spec and W01–W05 plans (feature #5988) by @ToddHebebrand in #5994
- feat(m365): signin_events sync domain, m365_signin_events table with forced RLS, retention (#5817 W05) by @ToddHebebrand in #5985
- feat(web): tool catalog W01 PR C — Tool Sources UI (#5216) by @ToddHebebrand in #5983
- docs(ai): AI budget settings consolidation design spec by @ToddHebebrand in #6003
- feat(monitoring): network device page truth W01 — sourced reachability, probe, SNMP collection health, metrics history (#5989) by @ToddHebebrand in #6002
- fix(agent): hosted first install stages the watchdog from its control plane (#5899) by @ToddHebebrand in #5901
- fix(tunnels): savepoint the allowlist insert so a repeat proxy Connect no longer 500s by @ToddHebebrand in #5907
- fix(installer): download the Windows one-liner agent into a temp dir, not the shell cwd by @ToddHebebrand in #5900
- qa: sweep eee2218 → main c07c0a3 — patch-plan auth, deliverable checklist XOR, sweep-act compose flag, 4 web paper cuts by @ToddHebebrand in #5967
- feat(web): move the org AI budget editor to an org settings AI tab (#6004) by @ToddHebebrand in #6014
- feat(reports): threat_detection_review evidence report type, end to end (#5814 W02) by @ToddHebebrand in #6006
- feat(monitoring): network device page truth W03 — sysObjectID template suggestion, Xerox template, vendor/model identity (#5991) by @ToddHebebrand in #6016
- feat(agent,monitoring): network device page truth W02 — oidSpecs, bounded table walks, per-OID outcomes (#5990) by @ToddHebebrand in #6017
- feat(web/network-device): network device page truth W04 — one asset settings modal, single writer, launchers (#5992) by @ToddHebebrand in #6015
- feat(reports): endpoint_management_review evidence report over the M365 Intune sync tables (#5812 W03) by @ToddHebebrand in #6007
- feat(reports): vulnerability_management evidence report (#5816) (#5784 W04) by @ToddHebebrand in #6027
- feat(web/network-device): network device page truth W05 — reachability header, Health and Reachability cards, Monitoring tab with OID table and charts (#5993) by @ToddHebebrand in #6035
- feat(reports): identity_access_review evidence report type, end to end (#5818 W06) by @ToddHebebrand in #6034
- fix(web): armed auto-install badge, dry-run 0-device hint, queued-check toast (#6026) by @ToddHebebrand in #6039
- fix(api): offlineDetector matches last_seen_at at millisecond precision (#6024) by @ToddHebebrand in #6040
- fix(api): tool-source audit-before-enqueue, 202 on enqueue failure, http endpoints under private egress (#6025) by @ToddHebebrand in #6042
- fix(api/tool-sources): org-owned tool source unreachable under a partner session (#6023) by @ToddHebebrand in #6043
- fix(ai,approvals): read an approved intent's terminal outcome back into chat, and surface terminal intents in /approvals (#6022) by @ToddHebebrand in #6047
- fix(web): sweep paper cuts — branding save outcome, Built-in provenance, monitor owner badge, escalation picker (#6030) by @ToddHebebrand in #6041
- fix(web,api): Organizations board works for a system-scope platform admin (#6029) by @ToddHebebrand in #6045
- docs(user-risk): site scoping is enforced since #5541; drop the stale warning (#5428) by @ToddHebebrand in #6058
- fix(portal): drop threat_detection_review from GENERATING_COPY (TS2353) (#6036) by @ToddHebebrand in #6052
- fix(web): AI run patch item shows the linked intent's live status (#5961) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6053
- fix(api): portal dashboard Support tile counts only the login's own tickets (#5965) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6054
- feat(tickets): expose default_time_entry_minutes in the API and category editor (#5954) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6055
- fix(api): deliverable sweep closes retired deliverables' occurrences; pinned-ticket asserts get an org predicate (#5609) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6057
- feat(monitoring): editable HTTP check target and certificate block on the monitor drawer (#5966) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6060
- fix(web): device cards abort metrics fetches on unmount and cap in-flight sparkline requests (#6044) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6061
- test(api): contract test — every router mounted in index.ts answers 401 when mounted bare (#5963) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6063
- fix(variables): All Organizations view lists only partner-wide variables; rows carry the owning org (#5353) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6064
- fix(api): persist and surface failed snmp_poll results (#6021) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6066
- fix(api): partner-wide event-log forwarding destination is delivered to child orgs (#5424) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6059
- fix(api): Fleet Designer apply steps run on the savepoint tx, not the ambient db (#5707) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6068
- feat(portal): Devices page is a visibility toggle; Enable all visibility includes it (#4933) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6065
- fix(db): bound the RLS GUC prologue and detect/reclaim wedged ClientRead backends (#6048) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6056
- qa: pre-release sweep c07c0a3 → 3ef2275 — tool-source discovery jobId, delete toast, Generate-now feedback, compose flag mappings by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6031
- fix(viewer): update rustls to clear Cargo Audit by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6084
- ci(agent): vet Windows-tagged Go files via cross-compile (#3046) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6090
- fix(api-test): a comment can no longer evict a route from the site-scope scanner (#4019) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6091
- fix(auth): four deferred #4018 / PR #4041 cleanups (#4050) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6092
- fix(api): correct offsetless-timestamp reads in report/discovery schedulers (#4059) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6093
- chore(catalog): drop the deprecated catalog_items.unit_price mirror (#3812) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6095
- fix(ai/workspaces): pre-ship hardening — scoped-agent enforcement, sandbox lifecycle, artifact previews, runtime shipping (#6086) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6096
- feat(web): translate zod validation errors — VALIDATION_FAILED envelope (Step 4 of #3859) by @fabicarvano in https://github.com/LanternOps/breeze/pull/5886
- fix(viewer): mount update indicator in idle standby window by @mvthul in https://github.com/LanternOps/breeze/pull/6033
- fix(backup): handle verification timeouts and surface failures by @fabicarvano in https://github.com/LanternOps/breeze/pull/6038
- fix(snmp): one over-long instance no longer discards the entire poll (#6108) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6109
- fix(agent): SNMP v1 is polled as v1; walks use GETNEXT for v1 devices (#6019) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6077
- fix(remote): revocation lease evaluates MFA through the login policy (#6107) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6121
- qa: pre-release sweep 3ef2275 → main — template suggestion, identity report empty paths, row menu clipping by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6104
- chore(web): What's New entry for 0.114.0 by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6131
- docs(release): pre-cut to-do for 0.114.0 — gating PRs merged, remaining gates listed by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6138
- docs(release): pre-cut gates cleared for 0.114.0 — #5901 hosted half PASS, prod backfill sized by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6142
New Contributors
- @mvthul made their first contribution in https://github.com/LanternOps/breeze/pull/6033
Full Changelog: v0.113.0...v0.114.0
What's Changed
- feat(m365): tenant sync core — executor helper, budget, claim ticker, sync-domain job (W04 #5331) by @ToddHebebrand in #5695
- test(web): de-flake DeviceDetailPage.recents (#5696) by @ToddHebebrand in #5697
- docs: sync for v0.113.0 + clear next-release draft by @ToddHebebrand in #5699
- feat(warranty): HP CMSL opt-in surface — server-stamped consent, execute+MFA gate, heartbeat delivery, agent seam (W02 #5511) by @ToddHebebrand in #5700
- chore(deploy): map BREEZE_AI_SCRIPT_AUTHORING_ENABLED in prod compose template by @ToddHebebrand in #5703
- feat(m365): tenant sync W05 — enrichment, continuation, Secure Score, rollup, cadence, links, lifecycle, on-demand, card (#5332) by @ToddHebebrand in #5702
- feat(ai): Fleet Design apply and rollback — rationale columns, applied-items ledger, apply steps 1-3+5, groups per function, Fleet Design page (W03 #5650) by @ToddHebebrand in #5698
- feat(ai): Fleet Design legacy intent inventory — bundle-import tags, legacy evidence + prompt, apply step 4 creates approved scripts (W04 #5650) by @ToddHebebrand in #5706
- feat(web): refine the Organizations page (keyboard, header actions, workspace scope, facts strip, list controls) by @ToddHebebrand in #5708
- test(m365): tenant sync end-to-end suite, benchmark harness, docs and card last-synced line by @ToddHebebrand in #5709
- fix(monitoring): W02 auth gate + partner-token create, built-in CPU/memory/disk monitors, Network as hub root by @ToddHebebrand in #5710
- docs(ai): AI Agent Execution Plane — spike, design spec, and W01–W05 plans (feature #5711) by @ToddHebebrand in #5717
- docs: portal Hardware Lifecycle page spec + wave plans (#5719) by @ToddHebebrand in #5727
- feat(api): GET /orgs/account-readiness — Organizations account board W01 (#5721) by @ToddHebebrand in #5734
- feat(ai): Fleet Design scheduled drift, fleetDesignsDelivered counter, org documents hand-off (W05 #5650) by @ToddHebebrand in #5726
- feat(ai): sandbox adapter, ai_run_workspaces and compute pricing (execution plane W02, #5713) by @ToddHebebrand in #5736
- feat(web): Organizations account board — /organizations replaces the split view (W02) by @ToddHebebrand in #5737
- docs: feature-pipeline 2026-09-13 — patch agent, sweeps, scorecard specs; helpdesk + monitors W03/W04 plans by @ToddHebebrand in #5745
- docs(web-ui): Organizations account board design spec and W01–W03 plans (#5721) by @ToddHebebrand in #5725
- docs: feature-pipeline 2026-09-13 (b) — patch agent, sweeps act-mode, scorecard implementation plans by @ToddHebebrand in #5762
- feat(ai): execution plane W01 — artifact store and large-result capture by @ToddHebebrand in #5738
- feat(reports): Hardware Lifecycle report — device replacement plan with purchase dates from warranty ship records by @ToddHebebrand in #5701
- feat(portal): enableLifecycle flag, hardware_lifecycle portal report, and GET /reports/lifecycle/latest by @ToddHebebrand in #5763
- feat: Organizations account board W03 — integrations, contracts, backup (#5724) by @ToddHebebrand in #5766
- fix(api): check both alert orgs in alert_correlations RLS (#5607) by @ToddHebebrand in #5673
- fix(web): show "Unsupported" instead of "Not Joined" when join detection is stubbed (#5626) by @ToddHebebrand in #5674
- fix(api): include manual-asset tags in GET /tags and /tags/devices (#5425) by @ToddHebebrand in #5672
- fix(api): return cancelState from the script execution read endpoints (#5040) by @ToddHebebrand in #5670
- fix(api): seed scripts through a version cut so they are not headless (#5622) by @ToddHebebrand in #5669
- fix(api): include agent.source.ip.changed in the security-events report (#5426) by @ToddHebebrand in #5668
- fix(api): org-scoped Org Admin can manage their own audit retention policy (#5423) by @ToddHebebrand in #5667
- fix(api): run the patch-compliance inline fallback outside the request DB context (#5566) by @ToddHebebrand in #5666
- docs(spec): Linux distribution support expansion — Arch/pacman + Omarchy design by @ToddHebebrand in #5478
- fix(inventory): enforce site scope on software deployments, software name search, monitoring names and asset mutations (SEC-023, SEC-046, SEC-084, SEC-110) by @ToddHebebrand in #5545
- feat(monitors): coverage kinds, script monitor, network_check adapter and monitor-sourced watch delivery (#5287 W04) by @ToddHebebrand in #5770
- fix(ai-agents): surface the disabled subsystem and make run skips visible (#5380, #5381) by @ToddHebebrand in #5681
- feat(portal): Hardware Lifecycle page — W02 (status bar, schedule, plan tables, Reports card) by @ToddHebebrand in #5785
- feat(monitors): episodes and recurrence escalation (W03, #5290) by @ToddHebebrand in #5769
- feat(tickets): AI ticket proposal on the ticket detail, posted as the technician by @ToddHebebrand in #5790
- feat(ai): W01 — attribution at the source for AI-dispatched device work (#5758) by @ToddHebebrand in #5788
- test(api): poll for the async ai.script.executed audit row by @ToddHebebrand in #5801
- docs(migration): Datto RMM component → Breeze script migration guide (#5355) by @ToddHebebrand in #5779
- docs(m365): runbook manifest section rewritten for v3 / thirteen roles (#5718) by @ToddHebebrand in #5772
- docs(claude-md): register ticket/device org-move rewrite lists as a cascade-registration row by @ToddHebebrand in #5804
- docs(service-plan-evidence-reports): spec + wave plans for feature #5812 by @ToddHebebrand in #5820
- docs(ticket-checklists): spec + wave plans for feature #5808 by @ToddHebebrand in #5819
- test(e2e): port intent-self-approve.spec.ts onto the grant-gated enrolment helper (#5273) by @ToddHebebrand in #5781
- fix(backup): finalize transferredSize from the terminal result as bytes actually uploaded (#5410) by @ToddHebebrand in #5782
- ci: raise Integration Tests shard timeout to 40 min by @ToddHebebrand in #5799
- fix(shared): typecheck packages/shared in CI and fix 4 strict-mode test errors (#5552) by @ToddHebebrand in #5773
- feat(portal): Hardware Lifecycle timeline hover, device links, e2e — W03 (#5731) by @ToddHebebrand in #5791
- feat(ai-agents): per-event helpdesk admissions with an ordered loop guard (#4212) by @ToddHebebrand in #5800
- feat(devices): AI scorecard W02 — device page surfaces (#5022) by @ToddHebebrand in #5802
- feat(ai-agents): harden the autonomous ticket private-note lane (W03, #5742) by @ToddHebebrand in #5805
- feat: additive API error codes with client-side translation (Task 3 of #3859) by @fabicarvano in #5692
- feat(reports): narrative email delivery — authority gate, claim-before-send, reconciliation (W03, #5760) by @ToddHebebrand in #5806
- feat(billing): agreements vocabulary — copy pass (W01) by @ToddHebebrand in #5834
- feat(tickets): checklist primitive — ticket_checklist_items + registrations + REST + ticket card (#5808 W01) by @ToddHebebrand in #5833
- test(agent): deflake Windows TestExecutePythonScript and TestInstallFileConcurrentReplacement (#5631, #5705) by @ToddHebebrand in #5853
- ci: apply the docs-only classifier under merge_group (#5863) by @ToddHebebrand in #5864
- test(api): sortBy name alongside namePrefix in the workspace nightly leak check by @ToddHebebrand in #5865
- feat(artifacts): stream artifact blob puts through multipart Upload (#5868) by @ToddHebebrand in #5869
- feat(ai): measured impact band — exposure-time cohorts on /ai-agents/impact (W04, #5761) by @ToddHebebrand in #5807
- feat(ai): remediation trigger provenance on intents, script executions and automation results (W01 #5751) by @ToddHebebrand in #5780
- ci(workspace-nightly): sortBy name alongside namePrefix in the sweep step by @ToddHebebrand in #5873
- feat(ai): AI patch agent W01 — the patch lane end to end (#5747) by @ToddHebebrand in #5792
- feat(billing): agreements permission (W02) by @ToddHebebrand in #5835
- feat(tickets): Tier-2 time-entry proposal from AI-assisted ticket work (#5743) by @ToddHebebrand in #5872
- fix(portal): stabilize DeviceList relative-time cells across hydration (#5881) by @ToddHebebrand in #5883
- fix(portal): stop linking lifecycle device rows to Devices when self-service is off (#5880) by @ToddHebebrand in #5884
- fix(ai-agents): measured impact band renders censored p50/p90, fixes 90-day omission mislabel (#5879) by @ToddHebebrand in #5885
- qa: pre-release sweep v0.113.0 → main — Fleet Design auth/allowlist, device purchaseDate, monitor deploy/save feedback, ticket stats orgId by @ToddHebebrand in #5871
- feat(ai): execution plane W03 — export_dataset tool and run progress events by @ToddHebebrand in #5771
- qa: follow-up sweep 6dddaad → main — narrative delivery summary, QuoteDetail blocks, ContractEditor refetch loop, agreement copy miss by @ToddHebebrand in #5882
- feat(ai): AI patch agent W02 — actionable installs: shared eligibility resolver, device-scoped Tier-3 install cards, episode suppression, release re-intersection (#5748) by @ToddHebebrand in #5888
- fix(ci): cache golangci-lint binary and retry transient network pulls (#5892) by @ToddHebebrand in #5894
- feat(ai): sweep-condition fix watches — verification for schedule-triggered intents with no alert (W02 #5753) by @ToddHebebrand in #5889
- fix(recovery-media): hold the recovery console PID alive after poweroff (#5890) by @ToddHebebrand in #5897
- test(agent): drive helper lease watchdog on a virtual clock (#5891) by @ToddHebebrand in #5896
- fix(web): OrganizationsBoardPage.integrations chip test race (#5862) by @ToddHebebrand in #5895
- feat(ai): execution plane W04 — workspace tools, analysis profile, admission and compute settlement (#5715) by @ToddHebebrand in #5902
- feat(ai): AI patch agent W03 — chase, retry, escalate: failed-work evidence, deterministic failure classes, bounded retries (#5749) by @ToddHebebrand in #5903
- fix(integrations): monitoring Test connection performs a real provider check (#5427) by @ToddHebebrand in #5778
- feat(billing): agreements area — IA split (W03) by @ToddHebebrand in #5887
- feat(ai): expiring_certs sweep kind — typed TLS observation on network_monitors (W03 #5754) by @ToddHebebrand in #5904
- fix(automations): bind event-triggered runs to the triggering device (#5240) by @ToddHebebrand in #5910
- feat(tickets): ticket checklist template library, partner-wide ownership and apply-to-ticket (W02 #5810) by @ToddHebebrand in #5916
- test(migrations): guard set-based writes on partner-export material tables (#5360) by @ToddHebebrand in #5911
- fix(patches): allow unapproving a patch after it's been approved (#5585) by @ToddHebebrand in #5914
- feat(software): compliance worker install-remediation branch, per-pass cap, give-up counter (W02 #5507) by @ToddHebebrand in #5917
- feat(agent): durable desktop start fence + helper IPC generation + resync (SEC-038 W05, #5536) by @ToddHebebrand in #5915
- feat(ai): AI sweeps act mode W04 — the act gate (#5755) by @ToddHebebrand in #5913
- feat(ai): AI patch agent W04 — reactive routing and reboot planning: patch alert sources, exclusive patch-work routing, next-window projector, reboot_plan items (#5750) by @ToddHebebrand in #5920
- feat(ai): execution plane W05 — chat integration, artifact surfaces, observability, rollout (#5716) by @ToddHebebrand in #5919
- feat(deliverables): ticket-checklist wiring on deliverables — sweep seeding, instructions, portal no-leak proof (W03 #5811) by @ToddHebebrand in #5921
- feat(software): project install_remediation_* on GET /software-policies/violations (#5918) by @ToddHebebrand in #5933
- test(migrations): extend the partner-export lock guard to the configuration-material trigger family (#5912) by @ToddHebebrand in #5932
- feat(ai): AI guardrails for autoInstall — the AI may never arm software installation (#5505 W05) by @ToddHebebrand in #5934
- feat(software): policy-owned install deployments — desired-state install W03 (#5508) by @ToddHebebrand in #5931
- fix(scripts): pass origin='system' on systemScriptLibrary insert (#5671) by @ToddHebebrand in #5946
- fix(reports): device_inventory export filters by device id, not hostname (#5776) by @ToddHebebrand in #5950
- fix(reports): key merged saved-report cards by their own id (#5765) by @ToddHebebrand in #5943
- fix(ai): metrics adapter paginates within a device instead of hard-capping (#5775) by @ToddHebebrand in #5949
- fix(jobs): offlineDetector skips a bad UUID device row instead of failing the whole sweep (#5867) by @ToddHebebrand in #5944
- feat(remote): desktop fence capability gate, cutover flag and pending-teardown UI (SEC-038 W06, #5537) by @ToddHebebrand in #5922
- feat(ai): AI sweeps act mode W05 — fan-out, budget, graduation, visibility (#5756) by @ToddHebebrand in #5937
- fix(reports): distinguish failed warranty lookups from confirmed no-warranty (#5764) by @ToddHebebrand in #5947
- fix(helper): bump rustls to clear RUSTSEC-2026-0285 (#5850) by @ToddHebebrand in #5956
- fix(web): search/filter and org-switch refetch on the Variables page (#5354) by @ToddHebebrand in #5957
- fix(web): extract shared alert device-info block, add monitor link to AlertDetailPage (#5678) by @ToddHebebrand in #5958
- fix(agent): give macOS user-session helpers a per-user log directory (#5877) by @ToddHebebrand in #5970
- fix(web/discovery): wire NetworkBaselinesPanel into the Discovery page (#5433) by @ToddHebebrand in #5971
- feat(software): install-preview endpoint for the pre-arm dry run (#5505 W06) by @ToddHebebrand in #5968
- fix(agent): ship desktop-session WebRTC diagnostics regardless of log_shipping_level (#5929) by @ToddHebebrand in #5959
- feat(ai): tool catalog W01 PR A — BYO MCP tool sources (tables, discovery, resolver, chat + MCP bridge) (#5216) by @ToddHebebrand in #5964
- fix(monitors): partner-wide read visibility for compiled network checks (#5866) by @ToddHebebrand in #5972
- fix(portal): inject saved customCss into the portal UI (#5940) by @ToddHebebrand in #5945
- fix(monitors): resolveMonitorsForDevice cannot distinguish device vanished from no monitors apply (#5677) by @ToddHebebrand in #5973
- fix(agent): reap killed backup helper processes instead of leaking zombies (#5420) by @ToddHebebrand in #5975
- fix(oauth): age out once-used DCR clients and make last_used_at stamp non-fatal (#5610) by @ToddHebebrand in #5976
- fix(db): add org_id index to sites and portal_users (#5732) by @ToddHebebrand in #5979
- fix(backup): clear stale metadata.error on recovery-media rebuild (#5411) by @ToddHebebrand in #5977
- fix(monitoring): validate escalation-policy owner compatibility on monitor_definitions (#5676) by @ToddHebebrand in #5981
- fix(portal): add write path for portal customCss (#5952) by @ToddHebebrand in #5982
- feat(deliverables): managed auto-evidence foundation — registry, system execution path, template report type, period baseline, publish-on-delivery (#5812 W01) by @ToddHebebrand in #5842
- fix(auth): system-scope tokens resolve platform-admin permissions (#5733) by @ToddHebebrand in #5978
- feat(ai): tool catalog W01 PR B — external Tier 3 tools via action intents (#5216) by @ToddHebebrand in #5974
- feat(web): arm/disarm autoInstall with dry-run count, catalog authoring warning, policy-owned deployments (#5505 W04) by @ToddHebebrand in #5986
- docs(monitoring): network device page truth — design spec and W01–W05 plans (feature #5988) by @ToddHebebrand in #5994
- feat(m365): signin_events sync domain, m365_signin_events table with forced RLS, retention (#5817 W05) by @ToddHebebrand in #5985
- feat(web): tool catalog W01 PR C — Tool Sources UI (#5216) by @ToddHebebrand in #5983
- docs(ai): AI budget settings consolidation design spec by @ToddHebebrand in #6003
- feat(monitoring): network device page truth W01 — sourced reachability, probe, SNMP collection health, metrics history (#5989) by @ToddHebebrand in #6002
- fix(agent): hosted first install stages the watchdog from its control plane (#5899) by @ToddHebebrand in #5901
- fix(tunnels): savepoint the allowlist insert so a repeat proxy Connect no longer 500s by @ToddHebebrand in #5907
- fix(installer): download the Windows one-liner agent into a temp dir, not the shell cwd by @ToddHebebrand in #5900
- qa: sweep eee2218 → main c07c0a3 — patch-plan auth, deliverable checklist XOR, sweep-act compose flag, 4 web paper cuts by @ToddHebebrand in #5967
- feat(web): move the org AI budget editor to an org settings AI tab (#6004) by @ToddHebebrand in #6014
- feat(reports): threat_detection_review evidence report type, end to end (#5814 W02) by @ToddHebebrand in #6006
- feat(monitoring): network device page truth W03 — sysObjectID template suggestion, Xerox template, vendor/model identity (#5991) by @ToddHebebrand in #6016
- feat(agent,monitoring): network device page truth W02 — oidSpecs, bounded table walks, per-OID outcomes (#5990) by @ToddHebebrand in #6017
- feat(web/network-device): network device page truth W04 — one asset settings modal, single writer, launchers (#5992) by @ToddHebebrand in #6015
- feat(reports): endpoint_management_review evidence report over the M365 Intune sync tables (#5812 W03) by @ToddHebebrand in #6007
- feat(reports): vulnerability_management evidence report (#5816) (#5784 W04) by @ToddHebebrand in #6027
- feat(web/network-device): network device page truth W05 — reachability header, Health and Reachability cards, Monitoring tab with OID table and charts (#5993) by @ToddHebebrand in #6035
- feat(reports): identity_access_review evidence report type, end to end (#5818 W06) by @ToddHebebrand in #6034
- fix(web): armed auto-install badge, dry-run 0-device hint, queued-check toast (#6026) by @ToddHebebrand in #6039
- fix(api): offlineDetector matches last_seen_at at millisecond precision (#6024) by @ToddHebebrand in #6040
- fix(api): tool-source audit-before-enqueue, 202 on enqueue failure, http endpoints under private egress (#6025) by @ToddHebebrand in #6042
- fix(api/tool-sources): org-owned tool source unreachable under a partner session (#6023) by @ToddHebebrand in #6043
- fix(ai,approvals): read an approved intent's terminal outcome back into chat, and surface terminal intents in /approvals (#6022) by @ToddHebebrand in #6047
- fix(web): sweep paper cuts — branding save outcome, Built-in provenance, monitor owner badge, escalation picker (#6030) by @ToddHebebrand in #6041
- fix(web,api): Organizations board works for a system-scope platform admin (#6029) by @ToddHebebrand in #6045
- docs(user-risk): site scoping is enforced since #5541; drop the stale warning (#5428) by @ToddHebebrand in #6058
- fix(portal): drop threat_detection_review from GENERATING_COPY (TS2353) (#6036) by @ToddHebebrand in #6052
- fix(web): AI run patch item shows the linked intent's live status (#5961) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6053
- fix(api): portal dashboard Support tile counts only the login's own tickets (#5965) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6054
- feat(tickets): expose default_time_entry_minutes in the API and category editor (#5954) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6055
- fix(api): deliverable sweep closes retired deliverables' occurrences; pinned-ticket asserts get an org predicate (#5609) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6057
- feat(monitoring): editable HTTP check target and certificate block on the monitor drawer (#5966) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6060
- fix(web): device cards abort metrics fetches on unmount and cap in-flight sparkline requests (#6044) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6061
- test(api): contract test — every router mounted in index.ts answers 401 when mounted bare (#5963) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6063
- fix(variables): All Organizations view lists only partner-wide variables; rows carry the owning org (#5353) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6064
- fix(api): persist and surface failed snmp_poll results (#6021) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6066
- fix(api): partner-wide event-log forwarding destination is delivered to child orgs (#5424) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6059
- fix(api): Fleet Designer apply steps run on the savepoint tx, not the ambient db (#5707) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6068
- feat(portal): Devices page is a visibility toggle; Enable all visibility includes it (#4933) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6065
- fix(db): bound the RLS GUC prologue and detect/reclaim wedged ClientRead backends (#6048) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6056
- qa: pre-release sweep c07c0a3 → 3ef2275 — tool-source discovery jobId, delete toast, Generate-now feedback, compose flag mappings by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6031
- fix(viewer): update rustls to clear Cargo Audit by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6084
- ci(agent): vet Windows-tagged Go files via cross-compile (#3046) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6090
- fix(api-test): a comment can no longer evict a route from the site-scope scanner (#4019) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6091
- fix(auth): four deferred #4018 / PR #4041 cleanups (#4050) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6092
- fix(api): correct offsetless-timestamp reads in report/discovery schedulers (#4059) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6093
- chore(catalog): drop the deprecated catalog_items.unit_price mirror (#3812) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6095
- fix(ai/workspaces): pre-ship hardening — scoped-agent enforcement, sandbox lifecycle, artifact previews, runtime shipping (#6086) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6096
- feat(web): translate zod validation errors — VALIDATION_FAILED envelope (Step 4 of #3859) by @fabicarvano in https://github.com/LanternOps/breeze/pull/5886
- fix(viewer): mount update indicator in idle standby window by @mvthul in https://github.com/LanternOps/breeze/pull/6033
- fix(backup): handle verification timeouts and surface failures by @fabicarvano in https://github.com/LanternOps/breeze/pull/6038
- fix(snmp): one over-long instance no longer discards the entire poll (#6108) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6109
- fix(agent): SNMP v1 is polled as v1; walks use GETNEXT for v1 devices (#6019) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6077
- fix(remote): revocation lease evaluates MFA through the login policy (#6107) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6121
- qa: pre-release sweep 3ef2275 → main — template suggestion, identity report empty paths, row menu clipping by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6104
- chore(web): What's New entry for 0.114.0 by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6131
- docs(release): pre-cut to-do for 0.114.0 — gating PRs merged, remaining gates listed by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6138
- docs(release): pre-cut gates cleared for 0.114.0 — #5901 hosted half PASS, prod backfill sized by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6142
New Contributors
- @mvthul made their first contribution in https://github.com/LanternOps/breeze/pull/6033
Full Changelog: v0.113.0...v0.114.0
What's Changed
- feat(m365): tenant sync core — executor helper, budget, claim ticker, sync-domain job (W04 #5331) by @ToddHebebrand in #5695
- test(web): de-flake DeviceDetailPage.recents (#5696) by @ToddHebebrand in #5697
- docs: sync for v0.113.0 + clear next-release draft by @ToddHebebrand in #5699
- feat(warranty): HP CMSL opt-in surface — server-stamped consent, execute+MFA gate, heartbeat delivery, agent seam (W02 #5511) by @ToddHebebrand in #5700
- chore(deploy): map BREEZE_AI_SCRIPT_AUTHORING_ENABLED in prod compose template by @ToddHebebrand in #5703
- feat(m365): tenant sync W05 — enrichment, continuation, Secure Score, rollup, cadence, links, lifecycle, on-demand, card (#5332) by @ToddHebebrand in #5702
- feat(ai): Fleet Design apply and rollback — rationale columns, applied-items ledger, apply steps 1-3+5, groups per function, Fleet Design page (W03 #5650) by @ToddHebebrand in #5698
- feat(ai): Fleet Design legacy intent inventory — bundle-import tags, legacy evidence + prompt, apply step 4 creates approved scripts (W04 #5650) by @ToddHebebrand in #5706
- feat(web): refine the Organizations page (keyboard, header actions, workspace scope, facts strip, list controls) by @ToddHebebrand in #5708
- test(m365): tenant sync end-to-end suite, benchmark harness, docs and card last-synced line by @ToddHebebrand in #5709
- fix(monitoring): W02 auth gate + partner-token create, built-in CPU/memory/disk monitors, Network as hub root by @ToddHebebrand in #5710
- docs(ai): AI Agent Execution Plane — spike, design spec, and W01–W05 plans (feature #5711) by @ToddHebebrand in #5717
- docs: portal Hardware Lifecycle page spec + wave plans (#5719) by @ToddHebebrand in #5727
- feat(api): GET /orgs/account-readiness — Organizations account board W01 (#5721) by @ToddHebebrand in #5734
- feat(ai): Fleet Design scheduled drift, fleetDesignsDelivered counter, org documents hand-off (W05 #5650) by @ToddHebebrand in #5726
- feat(ai): sandbox adapter, ai_run_workspaces and compute pricing (execution plane W02, #5713) by @ToddHebebrand in #5736
- feat(web): Organizations account board — /organizations replaces the split view (W02) by @ToddHebebrand in #5737
- docs: feature-pipeline 2026-09-13 — patch agent, sweeps, scorecard specs; helpdesk + monitors W03/W04 plans by @ToddHebebrand in #5745
- docs(web-ui): Organizations account board design spec and W01–W03 plans (#5721) by @ToddHebebrand in #5725
- docs: feature-pipeline 2026-09-13 (b) — patch agent, sweeps act-mode, scorecard implementation plans by @ToddHebebrand in #5762
- feat(ai): execution plane W01 — artifact store and large-result capture by @ToddHebebrand in #5738
- feat(reports): Hardware Lifecycle report — device replacement plan with purchase dates from warranty ship records by @ToddHebebrand in #5701
- feat(portal): enableLifecycle flag, hardware_lifecycle portal report, and GET /reports/lifecycle/latest by @ToddHebebrand in #5763
- feat: Organizations account board W03 — integrations, contracts, backup (#5724) by @ToddHebebrand in #5766
- fix(api): check both alert orgs in alert_correlations RLS (#5607) by @ToddHebebrand in #5673
- fix(web): show "Unsupported" instead of "Not Joined" when join detection is stubbed (#5626) by @ToddHebebrand in #5674
- fix(api): include manual-asset tags in GET /tags and /tags/devices (#5425) by @ToddHebebrand in #5672
- fix(api): return cancelState from the script execution read endpoints (#5040) by @ToddHebebrand in #5670
- fix(api): seed scripts through a version cut so they are not headless (#5622) by @ToddHebebrand in #5669
- fix(api): include agent.source.ip.changed in the security-events report (#5426) by @ToddHebebrand in #5668
- fix(api): org-scoped Org Admin can manage their own audit retention policy (#5423) by @ToddHebebrand in #5667
- fix(api): run the patch-compliance inline fallback outside the request DB context (#5566) by @ToddHebebrand in #5666
- docs(spec): Linux distribution support expansion — Arch/pacman + Omarchy design by @ToddHebebrand in #5478
- fix(inventory): enforce site scope on software deployments, software name search, monitoring names and asset mutations (SEC-023, SEC-046, SEC-084, SEC-110) by @ToddHebebrand in #5545
- feat(monitors): coverage kinds, script monitor, network_check adapter and monitor-sourced watch delivery (#5287 W04) by @ToddHebebrand in #5770
- fix(ai-agents): surface the disabled subsystem and make run skips visible (#5380, #5381) by @ToddHebebrand in #5681
- feat(portal): Hardware Lifecycle page — W02 (status bar, schedule, plan tables, Reports card) by @ToddHebebrand in #5785
- feat(monitors): episodes and recurrence escalation (W03, #5290) by @ToddHebebrand in #5769
- feat(tickets): AI ticket proposal on the ticket detail, posted as the technician by @ToddHebebrand in #5790
- feat(ai): W01 — attribution at the source for AI-dispatched device work (#5758) by @ToddHebebrand in #5788
- test(api): poll for the async ai.script.executed audit row by @ToddHebebrand in #5801
- docs(migration): Datto RMM component → Breeze script migration guide (#5355) by @ToddHebebrand in #5779
- docs(m365): runbook manifest section rewritten for v3 / thirteen roles (#5718) by @ToddHebebrand in #5772
- docs(claude-md): register ticket/device org-move rewrite lists as a cascade-registration row by @ToddHebebrand in #5804
- docs(service-plan-evidence-reports): spec + wave plans for feature #5812 by @ToddHebebrand in #5820
- docs(ticket-checklists): spec + wave plans for feature #5808 by @ToddHebebrand in #5819
- test(e2e): port intent-self-approve.spec.ts onto the grant-gated enrolment helper (#5273) by @ToddHebebrand in #5781
- fix(backup): finalize transferredSize from the terminal result as bytes actually uploaded (#5410) by @ToddHebebrand in #5782
- ci: raise Integration Tests shard timeout to 40 min by @ToddHebebrand in #5799
- fix(shared): typecheck packages/shared in CI and fix 4 strict-mode test errors (#5552) by @ToddHebebrand in #5773
- feat(portal): Hardware Lifecycle timeline hover, device links, e2e — W03 (#5731) by @ToddHebebrand in #5791
- feat(ai-agents): per-event helpdesk admissions with an ordered loop guard (#4212) by @ToddHebebrand in #5800
- feat(devices): AI scorecard W02 — device page surfaces (#5022) by @ToddHebebrand in #5802
- feat(ai-agents): harden the autonomous ticket private-note lane (W03, #5742) by @ToddHebebrand in #5805
- feat: additive API error codes with client-side translation (Task 3 of #3859) by @fabicarvano in #5692
- feat(reports): narrative email delivery — authority gate, claim-before-send, reconciliation (W03, #5760) by @ToddHebebrand in #5806
- feat(billing): agreements vocabulary — copy pass (W01) by @ToddHebebrand in #5834
- feat(tickets): checklist primitive — ticket_checklist_items + registrations + REST + ticket card (#5808 W01) by @ToddHebebrand in #5833
- test(agent): deflake Windows TestExecutePythonScript and TestInstallFileConcurrentReplacement (#5631, #5705) by @ToddHebebrand in #5853
- ci: apply the docs-only classifier under merge_group (#5863) by @ToddHebebrand in #5864
- test(api): sortBy name alongside namePrefix in the workspace nightly leak check by @ToddHebebrand in #5865
- feat(artifacts): stream artifact blob puts through multipart Upload (#5868) by @ToddHebebrand in #5869
- feat(ai): measured impact band — exposure-time cohorts on /ai-agents/impact (W04, #5761) by @ToddHebebrand in #5807
- feat(ai): remediation trigger provenance on intents, script executions and automation results (W01 #5751) by @ToddHebebrand in #5780
- ci(workspace-nightly): sortBy name alongside namePrefix in the sweep step by @ToddHebebrand in #5873
- feat(ai): AI patch agent W01 — the patch lane end to end (#5747) by @ToddHebebrand in #5792
- feat(billing): agreements permission (W02) by @ToddHebebrand in #5835
- feat(tickets): Tier-2 time-entry proposal from AI-assisted ticket work (#5743) by @ToddHebebrand in #5872
- fix(portal): stabilize DeviceList relative-time cells across hydration (#5881) by @ToddHebebrand in #5883
- fix(portal): stop linking lifecycle device rows to Devices when self-service is off (#5880) by @ToddHebebrand in #5884
- fix(ai-agents): measured impact band renders censored p50/p90, fixes 90-day omission mislabel (#5879) by @ToddHebebrand in #5885
- qa: pre-release sweep v0.113.0 → main — Fleet Design auth/allowlist, device purchaseDate, monitor deploy/save feedback, ticket stats orgId by @ToddHebebrand in #5871
- feat(ai): execution plane W03 — export_dataset tool and run progress events by @ToddHebebrand in #5771
- qa: follow-up sweep 6dddaad → main — narrative delivery summary, QuoteDetail blocks, ContractEditor refetch loop, agreement copy miss by @ToddHebebrand in #5882
- feat(ai): AI patch agent W02 — actionable installs: shared eligibility resolver, device-scoped Tier-3 install cards, episode suppression, release re-intersection (#5748) by @ToddHebebrand in #5888
- fix(ci): cache golangci-lint binary and retry transient network pulls (#5892) by @ToddHebebrand in #5894
- feat(ai): sweep-condition fix watches — verification for schedule-triggered intents with no alert (W02 #5753) by @ToddHebebrand in #5889
- fix(recovery-media): hold the recovery console PID alive after poweroff (#5890) by @ToddHebebrand in #5897
- test(agent): drive helper lease watchdog on a virtual clock (#5891) by @ToddHebebrand in #5896
- fix(web): OrganizationsBoardPage.integrations chip test race (#5862) by @ToddHebebrand in #5895
- feat(ai): execution plane W04 — workspace tools, analysis profile, admission and compute settlement (#5715) by @ToddHebebrand in #5902
- feat(ai): AI patch agent W03 — chase, retry, escalate: failed-work evidence, deterministic failure classes, bounded retries (#5749) by @ToddHebebrand in #5903
- fix(integrations): monitoring Test connection performs a real provider check (#5427) by @ToddHebebrand in #5778
- feat(billing): agreements area — IA split (W03) by @ToddHebebrand in #5887
- feat(ai): expiring_certs sweep kind — typed TLS observation on network_monitors (W03 #5754) by @ToddHebebrand in #5904
- fix(automations): bind event-triggered runs to the triggering device (#5240) by @ToddHebebrand in #5910
- feat(tickets): ticket checklist template library, partner-wide ownership and apply-to-ticket (W02 #5810) by @ToddHebebrand in #5916
- test(migrations): guard set-based writes on partner-export material tables (#5360) by @ToddHebebrand in #5911
- fix(patches): allow unapproving a patch after it's been approved (#5585) by @ToddHebebrand in #5914
- feat(software): compliance worker install-remediation branch, per-pass cap, give-up counter (W02 #5507) by @ToddHebebrand in #5917
- feat(agent): durable desktop start fence + helper IPC generation + resync (SEC-038 W05, #5536) by @ToddHebebrand in #5915
- feat(ai): AI sweeps act mode W04 — the act gate (#5755) by @ToddHebebrand in #5913
- feat(ai): AI patch agent W04 — reactive routing and reboot planning: patch alert sources, exclusive patch-work routing, next-window projector, reboot_plan items (#5750) by @ToddHebebrand in #5920
- feat(ai): execution plane W05 — chat integration, artifact surfaces, observability, rollout (#5716) by @ToddHebebrand in #5919
- feat(deliverables): ticket-checklist wiring on deliverables — sweep seeding, instructions, portal no-leak proof (W03 #5811) by @ToddHebebrand in #5921
- feat(software): project install_remediation_* on GET /software-policies/violations (#5918) by @ToddHebebrand in #5933
- test(migrations): extend the partner-export lock guard to the configuration-material trigger family (#5912) by @ToddHebebrand in #5932
- feat(ai): AI guardrails for autoInstall — the AI may never arm software installation (#5505 W05) by @ToddHebebrand in #5934
- feat(software): policy-owned install deployments — desired-state install W03 (#5508) by @ToddHebebrand in #5931
- fix(scripts): pass origin='system' on systemScriptLibrary insert (#5671) by @ToddHebebrand in #5946
- fix(reports): device_inventory export filters by device id, not hostname (#5776) by @ToddHebebrand in #5950
- fix(reports): key merged saved-report cards by their own id (#5765) by @ToddHebebrand in #5943
- fix(ai): metrics adapter paginates within a device instead of hard-capping (#5775) by @ToddHebebrand in #5949
- fix(jobs): offlineDetector skips a bad UUID device row instead of failing the whole sweep (#5867) by @ToddHebebrand in #5944
- feat(remote): desktop fence capability gate, cutover flag and pending-teardown UI (SEC-038 W06, #5537) by @ToddHebebrand in #5922
- feat(ai): AI sweeps act mode W05 — fan-out, budget, graduation, visibility (#5756) by @ToddHebebrand in #5937
- fix(reports): distinguish failed warranty lookups from confirmed no-warranty (#5764) by @ToddHebebrand in #5947
- fix(helper): bump rustls to clear RUSTSEC-2026-0285 (#5850) by @ToddHebebrand in #5956
- fix(web): search/filter and org-switch refetch on the Variables page (#5354) by @ToddHebebrand in #5957
- fix(web): extract shared alert device-info block, add monitor link to AlertDetailPage (#5678) by @ToddHebebrand in #5958
- fix(agent): give macOS user-session helpers a per-user log directory (#5877) by @ToddHebebrand in #5970
- fix(web/discovery): wire NetworkBaselinesPanel into the Discovery page (#5433) by @ToddHebebrand in #5971
- feat(software): install-preview endpoint for the pre-arm dry run (#5505 W06) by @ToddHebebrand in #5968
- fix(agent): ship desktop-session WebRTC diagnostics regardless of log_shipping_level (#5929) by @ToddHebebrand in #5959
- feat(ai): tool catalog W01 PR A — BYO MCP tool sources (tables, discovery, resolver, chat + MCP bridge) (#5216) by @ToddHebebrand in #5964
- fix(monitors): partner-wide read visibility for compiled network checks (#5866) by @ToddHebebrand in #5972
- fix(portal): inject saved customCss into the portal UI (#5940) by @ToddHebebrand in #5945
- fix(monitors): resolveMonitorsForDevice cannot distinguish device vanished from no monitors apply (#5677) by @ToddHebebrand in #5973
- fix(agent): reap killed backup helper processes instead of leaking zombies (#5420) by @ToddHebebrand in #5975
- fix(oauth): age out once-used DCR clients and make last_used_at stamp non-fatal (#5610) by @ToddHebebrand in #5976
- fix(db): add org_id index to sites and portal_users (#5732) by @ToddHebebrand in #5979
- fix(backup): clear stale metadata.error on recovery-media rebuild (#5411) by @ToddHebebrand in #5977
- fix(monitoring): validate escalation-policy owner compatibility on monitor_definitions (#5676) by @ToddHebebrand in #5981
- fix(portal): add write path for portal customCss (#5952) by @ToddHebebrand in #5982
- feat(deliverables): managed auto-evidence foundation — registry, system execution path, template report type, period baseline, publish-on-delivery (#5812 W01) by @ToddHebebrand in #5842
- fix(auth): system-scope tokens resolve platform-admin permissions (#5733) by @ToddHebebrand in #5978
- feat(ai): tool catalog W01 PR B — external Tier 3 tools via action intents (#5216) by @ToddHebebrand in #5974
- feat(web): arm/disarm autoInstall with dry-run count, catalog authoring warning, policy-owned deployments (#5505 W04) by @ToddHebebrand in #5986
- docs(monitoring): network device page truth — design spec and W01–W05 plans (feature #5988) by @ToddHebebrand in #5994
- feat(m365): signin_events sync domain, m365_signin_events table with forced RLS, retention (#5817 W05) by @ToddHebebrand in #5985
- feat(web): tool catalog W01 PR C — Tool Sources UI (#5216) by @ToddHebebrand in #5983
- docs(ai): AI budget settings consolidation design spec by @ToddHebebrand in #6003
- feat(monitoring): network device page truth W01 — sourced reachability, probe, SNMP collection health, metrics history (#5989) by @ToddHebebrand in #6002
- fix(agent): hosted first install stages the watchdog from its control plane (#5899) by @ToddHebebrand in #5901
- fix(tunnels): savepoint the allowlist insert so a repeat proxy Connect no longer 500s by @ToddHebebrand in #5907
- fix(installer): download the Windows one-liner agent into a temp dir, not the shell cwd by @ToddHebebrand in #5900
- qa: sweep eee2218 → main c07c0a3 — patch-plan auth, deliverable checklist XOR, sweep-act compose flag, 4 web paper cuts by @ToddHebebrand in #5967
- feat(web): move the org AI budget editor to an org settings AI tab (#6004) by @ToddHebebrand in #6014
- feat(reports): threat_detection_review evidence report type, end to end (#5814 W02) by @ToddHebebrand in #6006
- feat(monitoring): network device page truth W03 — sysObjectID template suggestion, Xerox template, vendor/model identity (#5991) by @ToddHebebrand in #6016
- feat(agent,monitoring): network device page truth W02 — oidSpecs, bounded table walks, per-OID outcomes (#5990) by @ToddHebebrand in #6017
- feat(web/network-device): network device page truth W04 — one asset settings modal, single writer, launchers (#5992) by @ToddHebebrand in #6015
- feat(reports): endpoint_management_review evidence report over the M365 Intune sync tables (#5812 W03) by @ToddHebebrand in #6007
- feat(reports): vulnerability_management evidence report (#5816) (#5784 W04) by @ToddHebebrand in #6027
- feat(web/network-device): network device page truth W05 — reachability header, Health and Reachability cards, Monitoring tab with OID table and charts (#5993) by @ToddHebebrand in #6035
- feat(reports): identity_access_review evidence report type, end to end (#5818 W06) by @ToddHebebrand in #6034
- fix(web): armed auto-install badge, dry-run 0-device hint, queued-check toast (#6026) by @ToddHebebrand in #6039
- fix(api): offlineDetector matches last_seen_at at millisecond precision (#6024) by @ToddHebebrand in #6040
- fix(api): tool-source audit-before-enqueue, 202 on enqueue failure, http endpoints under private egress (#6025) by @ToddHebebrand in #6042
- fix(api/tool-sources): org-owned tool source unreachable under a partner session (#6023) by @ToddHebebrand in #6043
- fix(ai,approvals): read an approved intent's terminal outcome back into chat, and surface terminal intents in /approvals (#6022) by @ToddHebebrand in #6047
- fix(web): sweep paper cuts — branding save outcome, Built-in provenance, monitor owner badge, escalation picker (#6030) by @ToddHebebrand in #6041
- fix(web,api): Organizations board works for a system-scope platform admin (#6029) by @ToddHebebrand in #6045
- docs(user-risk): site scoping is enforced since #5541; drop the stale warning (#5428) by @ToddHebebrand in #6058
- fix(portal): drop threat_detection_review from GENERATING_COPY (TS2353) (#6036) by @ToddHebebrand in #6052
- fix(web): AI run patch item shows the linked intent's live status (#5961) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6053
- fix(api): portal dashboard Support tile counts only the login's own tickets (#5965) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6054
- feat(tickets): expose default_time_entry_minutes in the API and category editor (#5954) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6055
- fix(api): deliverable sweep closes retired deliverables' occurrences; pinned-ticket asserts get an org predicate (#5609) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6057
- feat(monitoring): editable HTTP check target and certificate block on the monitor drawer (#5966) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6060
- fix(web): device cards abort metrics fetches on unmount and cap in-flight sparkline requests (#6044) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6061
- test(api): contract test — every router mounted in index.ts answers 401 when mounted bare (#5963) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6063
- fix(variables): All Organizations view lists only partner-wide variables; rows carry the owning org (#5353) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6064
- fix(api): persist and surface failed snmp_poll results (#6021) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6066
- fix(api): partner-wide event-log forwarding destination is delivered to child orgs (#5424) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6059
- fix(api): Fleet Designer apply steps run on the savepoint tx, not the ambient db (#5707) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6068
- feat(portal): Devices page is a visibility toggle; Enable all visibility includes it (#4933) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6065
- fix(db): bound the RLS GUC prologue and detect/reclaim wedged ClientRead backends (#6048) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6056
- qa: pre-release sweep c07c0a3 → 3ef2275 — tool-source discovery jobId, delete toast, Generate-now feedback, compose flag mappings by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6031
- fix(viewer): update rustls to clear Cargo Audit by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6084
- ci(agent): vet Windows-tagged Go files via cross-compile (#3046) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6090
- fix(api-test): a comment can no longer evict a route from the site-scope scanner (#4019) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6091
- fix(auth): four deferred #4018 / PR #4041 cleanups (#4050) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6092
- fix(api): correct offsetless-timestamp reads in report/discovery schedulers (#4059) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6093
- chore(catalog): drop the deprecated catalog_items.unit_price mirror (#3812) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6095
- fix(ai/workspaces): pre-ship hardening — scoped-agent enforcement, sandbox lifecycle, artifact previews, runtime shipping (#6086) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6096
- feat(web): translate zod validation errors — VALIDATION_FAILED envelope (Step 4 of #3859) by @fabicarvano in https://github.com/LanternOps/breeze/pull/5886
- fix(viewer): mount update indicator in idle standby window by @mvthul in https://github.com/LanternOps/breeze/pull/6033
- fix(backup): handle verification timeouts and surface failures by @fabicarvano in https://github.com/LanternOps/breeze/pull/6038
- fix(snmp): one over-long instance no longer discards the entire poll (#6108) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6109
- fix(agent): SNMP v1 is polled as v1; walks use GETNEXT for v1 devices (#6019) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6077
- fix(remote): revocation lease evaluates MFA through the login policy (#6107) by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6121
- qa: pre-release sweep 3ef2275 → main — template suggestion, identity report empty paths, row menu clipping by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6104
- chore(web): What's New entry for 0.114.0 by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6131
- docs(release): pre-cut to-do for 0.114.0 — gating PRs merged, remaining gates listed by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6138
- docs(release): pre-cut gates cleared for 0.114.0 — #5901 hosted half PASS, prod backfill sized by @ToddHebebrand in https://github.com/LanternOps/breeze/pull/6142
New Contributors
- @mvthul made their first contribution in https://github.com/LanternOps/breeze/pull/6033
Full Changelog: v0.113.0...v0.114.0