Newsletter status: In progress. See
README.mdfor conversion guide.
v2609.02.0 — September 2, 2026
MRs: !2313, !2304, !2318, !2317, !2312, !2314, !2316, !2315, !2308, !2243
Highlights
Dispatch Overhaul — table layout, autosave, and per-event crew (!2313) The dispatch board has been redesigned as a table layout with route rows, crew drop zones, and mini event cards. Crew can now be dragged between routes and assigned to individual events. A push-model save/discard flow with localStorage persistence replaces the old immediate-save pattern, plus an autosave toggle that debounces 5 seconds after the last edit with a visible countdown timer. Dispatch-only events (ops, reserve, admin) are now first-class events instead of comments, and special blocks can be created, edited, and time-adjusted inline.
New Home page with reorderable cards (!2304) A personalized home page replaces the old landing experience. Cards for Quick Links, Dashboards, Help & Support, Recent Jobs, and Latest Releases can be dragged to reorder, toggled on/off via a gear menu, and persist to localStorage. The dashboards directory and business page have also been reworked with a searchable, categorized icon grid and breadcrumb picker.
Dashboards and Take Payment now gated by permissions (!2318, !2317)
Dashboards are now visible based on role permission and zone type — five new permission keys (dashboard.revenue, dashboard.engine, dashboard.salesLeaderboard, dashboard.opsReadiness, dashboard.systemRevenue) control access. The Take Payment button on the job financials tab is now shown only when the zone has a payment processor enabled and the user holds the payment permission.
Features
- Infeasible worker assignments now return a human-readable reason instead of a bare “no solution” — the optimizer surfaces why a crew cannot be assigned (!2243)
Fixes
- Customer billing address and profile edits are now saved correctly when a lead is created — the “Use end location as billing address” checkbox no longer silently drops the address, and subsequent edits to an existing customer are preserved (!2312)
- Interstate jobs that are shared with a user’s zone now resolve the correct context zone instead of falling back to the first zone in the user’s list, fixing “Cannot find job” errors for users with multiple area roles (!2314, closes #6797)
- Sales leaderboard now shows agents with only future/scheduled events in the selected period, instead of excluding them for having zero completed events (!2316)
- MCP reports can now read the 6 Ops Readiness checklist fields (Inventory OK, Ops OK, Truck OK, Crew OK, Labor OK, Welcome OK) via
dataColumnsinstead of always reporting “Ops Readiness Not Complete” (!2315) - Aegis documents now notify the creator (and zone watchers) by email when a document is fully signed, restoring the PandaDoc behaviour that was lost in the migration (!2308)
- Abandoned and answered inbound calls no longer create stray leads in the wrong zone — calls are now routed by their target ID (!6411 routing fix, closes #6411)
Other
- Large backend/frontend cleanup branch merged: removed deprecated scripts (pandadoc-screenshots, es-jobs-load, es-search-test), the
calendarEvents.updateNavigatorservice,Scriptnode model, and dead config defaults (~106k lines removed)
v2609.01.0 — September 1, 2026
MRs: !2303, !2305, !2306, !2307, !2309, !2310, !2311
Highlights
BlueSage terminal payments — Phase A + B (!2303) You Move Me franchises can now take card payments through BlueSage terminals. The full flow is live: a terminal picker and push panel, keyed-in card fields, cards on file, payment and refund dialogs, authorization release, dual-pricing rate display, an event replay sweep for reconciliation, and refund handling with amounts, reasons, and authorisation tracking. The job financials panel re-reads itself while BlueSage settles, so the job always reflects the money that actually moved.
PandaDoc document creation gated behind opt-in config (!2307, hotfix)
PandaDoc’s prepaid $0.12/document plan was not renewed, so creating a document now consumes a $2 API credit the plan grants zero of. Document creation is now blocked by default via a per-zone pandadoc.documentCreationEnabled config (default false); zones that still need PandaDoc for a docType without an Aegis template can toggle it on temporarily. A latent bug that would have turned a receipt-generation failure into a payment-endpoint error was also fixed.
Aegis tables now split to fill the page (!2310) A customer’s Calgary estimate printed the job details on page 1 and left the rest blank because the charges table missed fitting by ~1.6px. Tables now measure the room left on the page and split when they would overflow, so content fills each sheet instead of jumping to the next.
Job summary edits now recorded in history (!2311, closes #6494) Editing a job’s customer, admin, or crew summary left no trace. Summary edits are now diffed server-side against the loaded job state and written as history items, so every summary change is auditable.
Fixes
- Global search no longer shows stale results when a second query’s response arrives out of order — the shared watchQuery/refetch pattern is replaced with a switchMap that drops in-flight requests on new input (!2305)
- AI no longer stops when it calls a non-existent function, and Yembo inventory item names are now visible to AI for complete summaries (!2309, closes #6792)
- NSC calculator now uses max labour hours instead of min for labour charges (!2306, closes #6678)
Other
- PandaDoc receipt generation in
transactions.create/transactions.updateis now guarded so a receipt failure cannot fail the payment itself (!2307)