All releases
June 2026 Published June 2026

June 2026 Updates

Aegis invoices, autodial time improvements, search by updated email, and more.

Newsletter status: In progress. See README.md for conversion guide.


v2606.24.0 — June 24, 2026

MRs: !2147, !2145, !2144, !2143, !2142, !2141, !2140, !2139

Highlights

AegisDoc invoices — engine-agnostic document generation for invoices (!2139, closes #6384) Invoices can now be generated using the in-house AegisDoc engine alongside PandaDoc, with zones able to switch between engines. Aegis invoices support creation, regeneration, and signing, with safeguards against overwriting signed documents. The new ymm-invoice.tsx template matches the legacy invoice layout.

Autodial time improvements — minimum call intervals and formatted times (!2140, closes #6429) Autodial now enforces a minimum call interval between outbound calls with attempted contact and the next scheduled call. Callback times display in local human-readable format for agents and ISO format for AI, and precalculated time slot formats are standardized across the scheduling pipeline.

Features

  • Aegis invoices: engine-agnostic create, regenerate, send, and get-links operations (!2139)
  • Aegis invoice signing via existing Phase 13 signing loop (!2139)
  • “View As” (Employee/Customer) now available for Aegis-generated documents (!2143)
  • Frontend test suite added to CI/CD with Karma configuration (!2147)

Fixes

  • Fixed jobs not being searchable by customer email after the email is updated on the job page (!2145, closes #6445)
  • Fixed runtime errors when inventory room or item is undefined or not an array (!2144, closes #6417)
  • Guarded against null artifact when opening documents, preventing “View As” errors (!2143)
  • Patched node-fetch@2.7.0 for Node v24 premature close error
  • Narrowed BaseUser fragment — removed salary & shiftAvailability, added requirement comments
  • Removed additionalContacts from BaseUser fragment for backwards compatibility

Other

  • Extracted Aegis document context sections into dedicated setter functions (!2139)
  • Centralized invoice artifact lookup and optimized user queries (!2139)
  • Triggered mirror-aegis pipeline (!2142)
  • Triggered deploy-functions pipeline (!2141)
  • Added 24 historical changelogs and updatedDate frontmatter

v2606.22.0 — June 22, 2026

MRs: !2137, !2135, !2134, !2133, !2132, !2131, !2130, !2129, !2128, !2127, !2120

Highlights

End-to-end electronic signatures for Aegis documents (!2127) Aegis documents can now be signed electronically by customers and crew directly in the browser. The sign page validates tokens against the backend, renders signature blocks per role, and supports drawing and photo-based signature methods. Signed documents are verified server-side with cryptographic audit trails.

Additional contacts — multiple emails and phones per customer (!2120) Customers can now have multiple email addresses and phone numbers, each with a relationship label and name. The new contacts appear in job account info, are searchable in omnisearch, and receive notifications (emails are CC’d, SMS goes to all phones). Creating a job from an opportunity pre-fills all known contacts.

Tiered job sources with drag-and-drop editor (!2120) Job sources (“how did you hear about us”) now support tiered options — parent categories with reorderable children. A new tree editor lets admins add, rename, reorder, and drag-and-drop source tiers. The dashboard filters job sources by tier for reporting.

Node 24 upgrade and build performance improvements (!2129) The backend now runs on Node 24 LTS. TypeScript was upgraded from 4 to 5, the Aegis dependency was consolidated, and the emitDecoratorMetadata flag was removed in favor of explicit DI registration — reducing build times and eliminating a runtime reflection dependency.

Features

  • Aegis e-sign: multi-role signature blocks with drawing and photo methods, server-side verification (!2127)
  • Aegis sign page with Datadog RUM, first-paint skeleton, and deferred auto-scroll (!2127)
  • Optimistic concurrency guard for Aegis document updates (!2127)
  • In-app signing link generation for Aegis documents (!2127)
  • Multi-page flow pagination for Aegis documents (!2127)
  • Additional contacts: multiple emails/phones per user with relationship labels (!2120)
  • Tiered job sources with drag-and-drop tree editor and dashboard filtering (!2120)
  • Autodial hours: calculate desirable contact times for overnight leads (!2130)
  • Parse CallRail caller name after job creation and update customer name (!2131)
  • Dev/staging Aegis sign link support via ?env=dev query param
  • Delete History nodes CLI script for Neo4j → Elasticsearch migration cleanup

Fixes

  • Fixed watchers not being notified when a customer replies to an email with a document attached (!2137)
  • Fixed new opportunity location wizard not persisting unsaved changes (!2135)
  • Added warning tooltip when continue button is disabled in inventory step (!2134)
  • Fixed shell variable quoting and added --backup-file flag to backup scripts (!2133)
  • Fixed floor options and prompt for Storage Unit building type (!2132)
  • Fixed comment not being added when an invoice is sent
  • Fixed DI registration errors for Neo4jDriver and AJV after reflect-metadata removal
  • Fixed missing Context import in Aegis sendDocument after merge

Other

  • Removed emitDecoratorMetadata, migrated to explicit DI registration (!2129)
  • Upgraded TypeScript 4→5, consolidated Aegis lib, removed stale @types (!2129)
  • Upgraded backend to Node 24 LTS, audit-fix deps (!2129)
  • Broke circular dependency: extracted watcherEvents module for esbuild compat

v2606.16.0 — June 16, 2026

MRs: !2126, !2125, !2124, !2123, !2122, !2119, !2118, !2116

Highlights

Two-phase heartbeat with prefix caching and SIA dashboard improvements (!2126) Heartbeat now runs in two phases — Phase 1 decides whether action is needed, and Phase 2 generates the summary only when required, sharing a cacheable message prefix to reduce AI costs. The Self-Improving AI dashboard adds page tree navigation, unified diff view, changelog memory, CSV export, and forced tool-call outputs for more reliable analysis.

Availability timezone can now be corrected via GraphQL (!2125, closes #6314) The timezone field on AvailabilityConfig is now editable through updateAvailabilityConfiguration, unblocking manual correction of misconfigured zones. A KC migration fixes assets that were stamped with America/Phoenix instead of America/Chicago, causing 1–2 hour scheduling offsets during DST transitions.

Features

  • Two-phase heartbeat: Phase 1 (decide) + Phase 2 (summarize) with prefix caching and summary cadence (!2126)
  • SIA dashboard page tree navigation, unified diff view, changelog memory, CSV export, and forced tool-call outputs (!2126)
  • Turpin calculator updated adding charges logic (!2116)

Fixes

  • Fixed availability timezone misconfiguration in KC zone — timezone field now editable via GraphQL, migration corrects existing data (!2125, closes #6314)
  • Fixed shared-out revenue losing period grouping in dynamic reports (!2124)
  • Removed “Balance due” display from standard receipt template (!2123)
  • Fixed FP profit slider showing constant ~10.55% for 3rd-party OTR jobs instead of actual profit percentage (!2122, closes #6279)
  • Fixed sign page mobile layout (!2119)
  • Fixed duplicate documents appearing until page reload (!2118)

Other

  • Refactored SIA page loading and tree building from path hierarchy (!2126)
  • Precomputed diff lines to avoid per-cycle recomputation in change detection (!2126)
  • Added trailing newlines and formatting fixes for SIA files (!2126)

v2606.10.0 — June 10, 2026

MRs: !2117, !2115, !2114, !2113, !2112, !2111, !1878, !1859

Highlights

AegisDoc — in-house document generation and e-signature engine (!1878) AegisDoc is now integrated into the monorepo, replacing PandaDoc for receipt generation. Receipts are generated server-side using sandboxed QuickJS templates, rendered to PDF via Cloudflare Workers, and delivered through the existing documents modal. The system supports workflow-based signing, payment steps, and template-driven naming — all without third-party dependencies for document creation.

Heartbeat — AI-driven job monitoring (!1859) The new Heartbeat system runs scheduled AI analysis on jobs, producing read-only summaries visible below the admin summary on the job activity page. It includes cost breakdowns, a self-improving AI dashboard for reviewing suggestions, and configurable zone-level enable/disable. An update_summary AI function lets admins request fresh AI-generated summaries on demand.

Dialpad voicemail, missed calls, abandoned calls, and recording handling (!2114, !2117, closes #6269) All major Dialpad call event types are now handled: voicemail transcription, missed calls, abandoned calls, and call recordings. A new queued event handler stamps dialpadMainCallID correctly so subsequent webhook events (hangup, recording, etc.) reliably find the parent comment thread. Call center names appear in comments and reporting metadata.

Cyclical period buckets for dynamic reports (!2115) Dynamic reports now support period-based grouping (weekly, monthly, quarterly) with cyclical bucketing. This lets you break report data into time-based columns and compare periods side by side.

Features

  • Self Improving AI dashboard with job analysis, page diff application, and focus area suggestions (!1859)
  • Period bucket grouping option for dynamic reports (!2115)
  • Handle Dialpad voicemail, missed, abandoned, and recording events with rule triggers (!2114, closes #6269)
  • Fix dialpadMainCallID stamping on datadip and add queued event handler (!2117)
  • Pre-check “send receipt” when customer has email or phone (!1878)

Fixes

  • Fixed dialpadMainCallID not being stamped on datadip comment threads, causing subsequent webhook events to silently fail (!2117)
  • Updated OTR calculator Total Flat Rate formula per stakeholder review (!2113, closes #6329)
  • Improved GraphQL error handling for network parse errors — treats them as transient retryable failures (!2112, closes #6316)
  • Added explicit email and phone validation in the new opportunity customer step to prevent malformed data (!2111, closes #6332)

Other

  • Integrated Aegis module into monorepo Docker builds and CI pipeline (!1878)
  • Switched monorepo to default Aegis registry consumption (!203b59c)
  • Regenerated GraphQL types after app merge (!03bf7b)

v2606.08.0 — June 8, 2026

MRs: !2110, !2109, !2108, !2107, !2106, !2099, !2095, !2094, !2093, !2092, !2091, !2090, !2089, !2088, !2087, !2086, !2085, !2084, !2083, !2082, !2080

Highlights

Crew pay calculator — determine amount to pay crew from job events (!2099, closes #6181, #6246) The OTR calculator now includes a crew pay section that lists crew from a job’s events, lets operators select which parts of the job each crew member participated in, add tips, and track total owed vs. paid per crew member. A new eventCrewMember group-by option has been added to dynamic reports for tracking event-level crew data.

Vancouver calculator v1 (!2080, closes #6107) A new Vancouver-specific moving estimate calculator supports weight sourcing (manual, inventory, storage profile, historical), automatic crew sizing, pricing resolution against the product catalog, and a “Create Estimate” workflow that attaches charges to the job.

Ops Readiness dashboard — billed columns, collapsible details, charge dedup (!2090, !2084) The Ops Readiness dashboard now shows calculated vs. billed crew, labor, drive, and totals with inline diff lines. Collapsible detail columns reduce clutter, and a shared-events toggle lets franchises filter appropriately. Backend fan-out dedup prevents inflated row counts.

NSC calculator — elevator type and floor efficiency modifiers (!2082) The NSC calculator now differentiates elevator types (bookable, freight, not-bookable) with granular per-type-per-floor efficiency modifiers, replacing the flat elevator discount.

Performance

  • Added database index for CalendarEvent.status_booked property (!2088, closes #6254)
  • Optimized job filtering for last scheduled event period (!2085)
  • Removed dynamic reports fan-out trap — 300+ lines of duplicated column logic consolidated (!2093)

Features

  • Show job timeline or creation date with tooltip in job header (!2109, closes #6177)
  • Persist calculator state when creating a new job from an opportunity (!2108, closes #6328)
  • Disable “Create Estimate Charges” button on closed jobs (!2110, closes #6313)
  • Add pay button to booking modal (!2089, closes #6184)
  • Dispatch date remarks — zone admins and Karve admins can set remarks on calendar dates, visible in schedule views (!2086)
  • Calculate possible contact times (call times) for AI (!2095, closes #6023)

Fixes

  • Fixed broken layout when Street View is unavailable (!2107, closes #6293, #2697)
  • Fixed charges displayed without name in work orders after product deactivation (!2106, closes #6300)
  • Fixed crew member unable to be added from dispatch (!2101, closes #6303)
  • Fixed revenue dashboard discountedSubTotal excluding shared-in charges (!2092)
  • Fixed booking modal not retrieving events (!2094)
  • Fixed white screen after clicking job code in email (!2096, closes #6138)
  • Fixed PandaDoc document.completed handling (!2091)
  • Removed embedded URL from franchise (!2087, closes #6243)
  • Fixed unrecoverable service worker state on iOS 16, preventing stuck loading screens (!2083)

Other

  • NSC calculator v2605.18.0 with elevator type + floor efficiency modifiers (!2082)

v2606.01.0 — June 1, 2026

MRs: !2105, !2104, !2103, !2102, !2101, !2100, !2098, !2097

Highlights

Storage locations excluded from dispatch displays and routing (!2103) Storage locations no longer appear on the dispatch page or in route optimization. Dispatchers now see only operational locations, reducing clutter and preventing storage stops from skewing route calculations.

Optimized Street View map loading with deferrable views (!2097) The Street View component is now lazily loaded using Angular deferrable views, reducing initial page weight and speeding up the dispatch experience on slower connections.

Performance

  • Lazy-loaded Street View map component using Angular deferrable views (!2097)

Features

  • Exclude storage locations from dispatch displays and route optimization (!2103)
  • Add crew size input to NSC calculator (!2104)

Fixes

  • Fixed FullCalendar modules causing prebundling errors (!2105)
  • Fixed errors when opening a dynamic report from a URL path (!2102)
  • Fixed inability to add crew members from the dispatch page (!2101)
  • Fixed duplicate calendar events being created during job updates (!2100, closes #6144)
  • Fixed NSC calculator not opening from the latest version link (!2098)