# Release notes - 18 September 2026

Version 1.40.0, released 2026-09-18. Source: https://vektortms.com/releases/release-2026-09-18

> This release adds control over how split manifests are numbered and traced, along with improvements to batch invoices, document review and settlements.

![Release notes - 18 September 2026](https://storage.googleapis.com/vektor-public-storage/changelog/cover/9038788fd68ecbe3c7b4846b.jpg)

## At a glance

- A new Split page under Settings > Dispatch sets how split manifests are numbered, with a live preview
- Every split manifest shows the chain it belongs to, and a lineage page and the map follow the whole trip
- Batch invoices show one readiness panel, report what validation found and let you resolve findings in place
- The documents review page has a dedicated review mode with keyboard shortcuts
- Charge extra, credit back and collect the rest from the settlement, with money columns laid out as a ledger

## New features

### Split manifests: choose how every leg is numbered

A new Split page under Settings > Dispatch decides how the manifests a split creates are numbered: a letter suffix (50350-A, 50350-B), a number suffix (50350-1, 50350-2) or the next available number, with a live preview of the result. Every split manifest also shows the chain it belongs to, and a lineage page follows the whole trip.

- Read more: https://vektortms.com/releases/manifest-split-numbering.md

## Improvements

### Charge extra, credit back, and collect the rest, from the settlement

- Why we changed it: Adjusting a settlement meant creating transactions elsewhere and coming back, with nothing tying them to the settlement in front of you.
- How it helps: Deductions, credits and the remaining balance are handled where you are already looking at the driver's pay.
- How to use it: Open a settlement and use the charge, credit and collect actions on it.

### Payout batch and payout editing controls appear only for users with the matching payout permissions

- Why we changed it: The controls were shown to everyone, so users without permission could click actions that would fail.
- How it helps: The screen shows only the payout actions the signed-in user can actually carry out.
- How to use it: Assign the payout batch edit, create and payout edit permissions to the roles that need them.

### Recurring transactions can be set up as a balance, with its limit used as the target

- Why we changed it: Recurring transactions only covered fixed amounts, so balance-style arrangements had to be tracked outside the system.
- How it helps: Balance arrangements are set up once and the limit is treated as the target to reach, with no side bookkeeping.
- How to use it: Create a recurring transaction and pick the balance kind.

### Recurring transactions show their name, number and kind in the dashboard

- Why we changed it: Recurring transactions were listed without the fields needed to tell one from another.
- How it helps: Accounting staff can identify a recurring transaction at a glance instead of opening each one.
- How to use it: Open recurring transactions in the dashboard.

### Settlement dialogs load on demand again instead of being pulled in up front

- Why we changed it: The dialogs had been bundled into the main load, which made the app heavier for everyone including people who never open settlements.
- How it helps: Pages load faster, and settlement dialogs still open when needed.
- How to use it: Nothing to switch on.

### Settlement money columns read as a ledger, with debits and credits laid out consistently

- Why we changed it: The amount columns mixed signs and formats, so checking a settlement meant working out which figure was a charge and which a payment.
- How it helps: Payroll and settlement staff can scan a settlement and reconcile totals without recalculating each line.
- How to use it: Open a settlement; the columns are already laid out this way.

### Switching tabs in the settlement dialog is faster, and Sync is disabled on read-only settlements

- Why we changed it: The settlement dialog reloaded more than it needed when moving between tabs, and Sync stayed clickable on settlements that cannot be changed.
- How it helps: Payroll staff move through settlement tabs quicker and cannot trigger a sync that would not apply.
- How to use it: Open a settlement and switch tabs; Sync appears greyed out on read-only settlements.

### The recurring transaction dialog explains what a preset does and shows the amount it will post

- Why we changed it: Presets were named but not described, and the dialog did not show the money involved, so you had to save and check.
- How it helps: You can tell which preset you want and confirm the amount before the transaction is created.
- How to use it: Create or edit a recurring transaction; the description and amount appear in the dialog.

### An assistant connection request survives sign-in and the consent screen spells out what is being granted

- Why we changed it: If you were not signed in when the assistant asked to connect, the request was lost, and the consent prompt did not make clear what access it covered.
- How it helps: You can sign in mid-request and finish the connection, and decide with the permissions in front of you.
- How to use it: Start the connection from the assistant; sign in if prompted and review the consent screen.

### The assistant suggests the areas to narrow a selection to, so you can start from its suggestion

- Why we changed it: Narrowing a selection meant picking areas yourself with no guidance from the assistant.
- How it helps: You start from a suggested set of areas and adjust from there, which is faster than building the selection from scratch.
- How to use it: Start a narrowed selection in the assistant and pick from the suggested areas.

### A factoring submission that stops progressing is reported instead of sitting silently

- Why we changed it: If a batch submission to factoring stalled, nothing on screen said so and the batch appeared to still be in flight.
- How it helps: Billing staff find out that a submission is stuck and can act on it rather than waiting on payment that is not coming.
- How to use it: Submit an invoice batch to factoring; a stalled submission is flagged in the batch.

### Batch invoice sending shows what its own validation found before the send goes out

- Why we changed it: When a batch send rejected invoices, the reasons were not surfaced, leaving staff to guess which invoice was at fault.
- How it helps: Billing staff see exactly which invoices failed validation and why, and can fix them before resending.
- How to use it: Start a batch invoice send; validation results appear in the dialog.

### Batch invoices show one readiness panel instead of two stacked warnings

- Why we changed it: Readiness problems were reported in two separate warning blocks, which pushed the invoice content down and made it unclear what actually had to be resolved.
- How it helps: You see everything blocking a batch in one place and can work through it without reading two overlapping warnings.
- How to use it: Open a batch invoice that is not ready to send.

### Batch invoices show when a factoring submission has stalled

- Why we changed it: A factoring attempt that stopped progressing looked the same as one still in flight, so nobody knew to act on it.
- How it helps: Billing staff can spot stuck submissions and resubmit instead of waiting.
- How to use it: Open the batch invoices list and check the status on the submission.

### Choose which columns the orders table shows when building batch invoices, and see readiness findings ordered by cost

- Why we changed it: The orders table showed a fixed set of columns and readiness findings arrived in no useful order, so the costly problems were buried.
- How it helps: You see the fields your billing work needs and deal with the findings that hold up the most money first.
- How to use it: Open a batch invoice, use the column chooser above the orders table; findings are sorted for you.

### Each invoice submission in a batch now shows its own activity log, with the most serious lines first

- Why we changed it: Batch invoice submissions shared one undifferentiated log, so finding which invoice failed and why meant reading through everything.
- How it helps: Billing staff can see per-submission history and spot errors and warnings immediately instead of scanning the whole batch.
- How to use it: Open a batch invoice and expand a submission to see its activity list.

### Invoice date filtering applies on its own, regardless of what is selected in the list

- Why we changed it: The date filter took the current row selection into account, so results changed depending on what happened to be selected.
- How it helps: Filtering invoices by date returns the same, predictable set every time.
- How to use it: Filter invoices by date as usual.

### Sending a single settlement now copies the company CC recipients by default

- Why we changed it: The company CC list was applied to batch sends but had to be added by hand when sending one settlement.
- How it helps: The same people are kept in the loop whether a settlement goes out alone or in a batch, with no manual re-typing.
- How to use it: Send a settlement individually; the company CC addresses are prefilled and can still be removed before sending.

### The invoice items table and its download button each follow their own permission

- Why we changed it: Both were shown or hidden together, so granting one meant granting the other.
- How it helps: Administrators can let staff read invoice lines without also letting them download the document, or the other way round.
- How to use it: Review the invoice permissions for your roles in settings.

### The invoice payment balance stays visible with an explanation when you lack permission to see the figures

- Why we changed it: Users without the payment permission saw the balance area disappear with no indication why.
- How it helps: Staff know the balance exists and who to ask for access instead of assuming the invoice is incomplete.
- How to use it: Open an invoice without the payment permission; the balance area explains itself.

### The recurring charge preset dialog lists one line per charge and shows the totals

- Why we changed it: The preset dialog crowded charges together and never said what the run would add up to, so staff had to total it themselves.
- How it helps: Billing staff can read each charge on its own line and check the total before saving a recurring preset.
- How to use it: Open a recurring invoice preset in Billing; the charges and totals are laid out there.

### The recurring preset dialog puts the charge direction next to the amount and the actions inside the card

- Why we changed it: The dialog's heading took up room and it was not obvious whether a line was a charge or a credit.
- How it helps: The direction of each amount is readable at a glance and the save and cancel actions sit where the work is.
- How to use it: Open a recurring preset in Billing.

### Unassign every order named by a batch invoice finding in one step

- Why we changed it: Clearing a finding meant removing each order from the batch by hand, one at a time.
- How it helps: A finding that names a dozen orders is resolved with a single action.
- How to use it: Open the finding on a batch invoice and choose to unassign the orders it lists.

### Validating a batch of invoices reports what it found

- Why we changed it: Validation ran without telling you what it had checked or which invoices had problems.
- How it helps: Billing staff see the issues before sending a batch, instead of discovering them after submission.
- How to use it: Run validation on an invoice batch and read the reported results.

### Verify the paperwork a batch invoice finding names without leaving the finding

- Why we changed it: A finding about missing or unverified documents sent you off to find each order and check its paperwork elsewhere.
- How it helps: You clear document findings in place, which shortens the path from a blocked batch to an invoice.
- How to use it: Open the finding on a batch invoice and verify the documents it lists.

### A manifest shows how each of its orders came to be on it

- Why we changed it: Once orders were on a manifest there was no way to tell which were added directly and which arrived another way.
- How it helps: Dispatchers can see the origin of every order on a manifest before changing it.
- How to use it: Open a manifest and look at the orders list.

### A manifest shows the split chain it belongs to

- Why we changed it: After a manifest was split or merged there was no way to see which manifests it came from or led to.
- How it helps: Dispatchers can follow how a load was divided or recombined without piecing it together from history.
- How to use it: Open a manifest that has been split or merged; the related manifests are listed on it.

### A split manifest has its own lineage page showing the full chain

- Why we changed it: The relationship between an original manifest and the legs it was split into was only visible piece by piece.
- How it helps: One page shows how a load was split and what each leg carries, so the history of a load is easy to explain.
- How to use it: Open a manifest that was split and follow the link to its lineage.

### An order's notes feed opens on the most recent note

- Why we changed it: The notes panel opened at the top of the thread, so on busy orders you had to scroll to reach the latest entry.
- How it helps: The newest note is the first thing you see when you open an order's notes.
- How to use it: Open any order and its notes panel.

### Each leg of a split manifest now carries its own stops into the dashboard

- Why we changed it: Leg records reached the dashboard without their stops, so a split chain could not be read leg by leg.
- How it helps: Stops appear under the leg they belong to, which makes the split chain readable where the work is planned.
- How to use it: Open a split manifest and look at any leg.

### Fields are open by default and empty states read more clearly

- Why we changed it: Sections started collapsed, so people clicked through them to see what was there, and blank sections gave no hint about what belonged in them.
- How it helps: The form shows its content straight away and says what is missing where nothing has been entered yet.
- How to use it: Nothing to switch on. Open the form.

### Fields start collapsed and documents are attached from a searchable picker

- Why we changed it: The form opened fully expanded, and attaching a document meant finding it without search.
- How it helps: The form is shorter to scan and the right document is found by typing part of its name.
- How to use it: Open the form, expand the section you need and use the document picker.

### Manifest split chains are available in the dashboard

- Why we changed it: The dashboard could not see how a manifest had been split, so the chain of resulting manifests was not visible.
- How it helps: Dispatchers can follow a split manifest through its chain instead of piecing the relationship together by hand.
- How to use it: Open a manifest that has been split; the chain is shown with it.

### Notes now carry their attachment and hidden flag through to the dashboard

- Why we changed it: Notes reached the client without the key to their attachment or the flag marking them hidden, so files could not be opened and internal notes looked like any other note.
- How it helps: You can open the file attached to a note and tell at a glance which notes are internal only.
- How to use it: Open any record with notes; the attachment and the hidden marker show on the note.

### Order list counts and filters load faster because the statistics are calculated in parallel

- Why we changed it: The counts shown beside order filters were computed one after another, which delayed the list on large order volumes.
- How it helps: Dispatchers see order counts and filtered lists sooner, especially on busy boards.
- How to use it: Nothing to switch on; visible on the orders list.

### Split manifests are numbered with a letter suffix by default

- Why we changed it: There was no shared default for how the pieces of a split manifest were numbered, so numbering varied.
- How it helps: The legs of a split load carry predictable numbers that match what staff say on the phone.
- How to use it: Split a manifest and check the numbers on the resulting legs; the default can be changed in company settings.

### Split settings move under Dispatch, default to a letter suffix, and show a live preview of the label

- Why we changed it: Split configuration sat away from the work it affects and gave no indication of what the resulting label would look like.
- How it helps: Settings are where dispatchers expect them, new splits are labelled with letters by default, and the preview shows the naming before you save.
- How to use it: Open Settings under Dispatch and adjust the split options.

### The manifest list can be filtered to split legs and to unmerged manifests

- Why we changed it: Split legs and manifests still waiting to be merged were mixed into the full list with no way to single them out.
- How it helps: Dispatchers can find the loads that still need attention after a split without scanning the whole list.
- How to use it: Open the manifest list and use the new filters.

### The orders table scrolls natively, so long lists move smoothly

- Why we changed it: The orders table scrolled through a custom scrollbar layer, which made scrolling through large order lists feel heavy.
- How it helps: Scrolling long order lists is faster and behaves the way scrolling does everywhere else, including with a trackpad or touch screen.
- How to use it: Open the orders list and scroll; nothing to switch on.

### When order extraction cannot identify the broker, order create suggests a likely match to pick from

- Why we changed it: If automatic extraction failed to match the broker, the field was simply left empty and had to be searched by hand.
- How it helps: Dispatchers confirm a suggestion instead of looking the broker up, so orders get created faster and with fewer mismatches.
- How to use it: Create an order from a document; if the broker could not be matched, choose from the offered suggestion.

### You can add a new broker without leaving order building

- Why we changed it: The broker field only offered existing records, so a new broker meant leaving the order, creating the record, and starting over.
- How it helps: Dispatchers build orders for new brokers in one pass.
- How to use it: In order building, open the broker field and choose the option to add a new broker.

### You can switch between legs inside the manifest dialog, with clearer map pins on the lineage page

- Why we changed it: Reaching another leg of a split chain meant leaving the dialog, and the pins on the chain map were hard to tell apart.
- How it helps: The whole split chain can be reviewed without losing your place, and the map pins say which leg they belong to.
- How to use it: Open a split manifest and use the leg switcher in the dialog, or open the lineage page directly by its link.

### Driver profiles have a phone note field

- Why we changed it: There was nowhere to record context about a driver's phone number, such as whose phone it is or when to call.
- How it helps: Dispatchers see the note next to the number instead of keeping it elsewhere.
- How to use it: Open a driver profile and fill in the phone note field.

### Drivers with disabled app access are flagged in the driver list and access can be restored from there

- Why we changed it: There was no clear indication that a driver had lost access to the phone app, and restoring it was not obvious.
- How it helps: Dispatchers can see at a glance who cannot log in to the driver app and give access back without leaving the list.
- How to use it: Open Fleet, go to Drivers, and look for the disabled-access alert on a driver row to restore access.

### Fleet data on screen updates itself as it changes, available behind a switch

- Why we changed it: Fleet lists only showed what was loaded when the page opened, so dispatchers reloaded to see current data.
- How it helps: Truck and driver information stays current on screen without a manual refresh.
- How to use it: Ask to have the fleet live sync switch turned on for your company.

### The driver list stays responsive while live fleet updates stream in

- Why we changed it: Every incoming fleet update rebuilt all rows in the driver list, which made the page stutter on larger fleets.
- How it helps: Scrolling and clicking in the driver list stay smooth while positions and statuses keep updating.
- How to use it: Nothing to switch on; open the driver list.

### The truck list stays responsive while live fleet updates stream in

- Why we changed it: Every incoming fleet update redrew all rows in the list, which made scrolling and clicking stutter on larger fleets.
- How it helps: Dispatchers working a long truck list keep smooth scrolling and selection while positions and statuses update.
- How to use it: Nothing to switch on; open the truck list and it applies.

### The truck page has separate Fuels and Tolls tabs

- Why we changed it: Fuel and toll charges for a truck were shown together, which made it slow to review either one.
- How it helps: Fleet staff can review fuel spend and toll spend for a truck separately without filtering.
- How to use it: Open a truck and use the new Fuels and Tolls tabs.

### Trailer rows keep their place and selection when unrelated fleet data changes

- Why we changed it: Rows were rebuilt whenever anything in the fleet changed, so selections and scroll position could jump.
- How it helps: Staff working through the trailer list do not lose their place or their selection while data updates in the background.
- How to use it: Nothing to switch on; open the trailer list and it applies.

### Trailer type changes appear straight away in every open tab

- Why we changed it: Adding or renaming a trailer type only showed up after a reload, so lists could disagree between tabs and users.
- How it helps: Everyone works from the same trailer types without reloading the dashboard.
- How to use it: Nothing to switch on.

### Trailer types stay current everywhere without a page reload

- Why we changed it: Trailer types were not part of the live data feed, so newly added or changed types showed up late.
- How it helps: Trailer type lists match what is configured, wherever they are used.
- How to use it: Nothing to switch on.

### You can create a facility directly from the location row you started from

- Why we changed it: Adding a facility meant leaving the location list and re-entering details that were already on screen.
- How it helps: Fewer steps and no retyping when turning a known location into a facility.
- How to use it: Use the create-facility action on the location row.

### A document refreshes on screen as soon as its AI read finishes

- Why we changed it: After the automatic read completed, the page kept showing the old state until it was reloaded by hand.
- How it helps: Extracted fields appear as soon as they are ready, so there is no guessing about whether processing is done.
- How to use it: Nothing to switch on; leave the document open and it updates itself.

### Saving a draft no longer redraws the whole message form

- Why we changed it: Every draft save re-rendered the entire composer, interrupting typing and moving the cursor.
- How it helps: Drafts save quietly in the background while you keep writing.
- How to use it: Nothing to switch on; write a message and let it save.

### The document view in edit dialogs uses the full width of the page

- Why we changed it: The embedded document view was cramped, so scans had to be zoomed and panned to be read.
- How it helps: Documents are legible while editing, with less zooming.
- How to use it: Open an edit dialog that shows a document.

### The document viewer jumps to the part of the page a field was read from and moves on once you decide

- Why we changed it: The viewer stayed where it was while you checked a field, so you had to hunt for the matching spot on the scan yourself, and nothing advanced after a decision.
- How it helps: Each field points at its evidence, values are compared against a fresh read, and the queue advances on its own once you accept or reject.
- How to use it: Open a document in review; selecting a field scrolls the viewer to its source.

### The documents review page has a dedicated review mode with keyboard shortcuts

- Why we changed it: Reviewing incoming documents meant clicking through every field and control with the mouse, which was slow for anyone working a large queue.
- How it helps: Reviewers can move through documents and act on them from the keyboard, so a stack of documents takes fewer steps to clear.
- How to use it: Open the documents review page and switch to review mode; the available shortcuts are shown on the page.

### The review list shows how far along each document's fields are

- Why we changed it: From the list there was no way to tell which documents were partly reviewed and which had not been touched.
- How it helps: You can pick up where you left off and see at a glance what is left to review.
- How to use it: Open the documents review list; progress is shown on each row.

### The review shows which values the automatic run accepted on its own

- Why we changed it: There was no way to tell which fields a person confirmed and which the system filled in and accepted without review.
- How it helps: Reviewers can focus on what still needs a human eye and audit what was decided automatically.
- How to use it: Open a reviewed document; automatically accepted values are marked.

### Typing in the message composer no longer lags as the rest of the form keeps up

- Why we changed it: Each keystroke in the composer re-rendered surrounding fields, so text appeared behind what was typed.
- How it helps: Messages can be written at full speed without dropped or delayed characters.
- How to use it: Nothing to switch on; open a conversation and write.

### Live positions start loading as the app opens rather than after the session and stream are ready

- Why we changed it: Live data was only read once the session and the stream had settled, adding a delay before anything appeared.
- How it helps: Vehicles show up on screen sooner after opening the dashboard.
- How to use it: Nothing to switch on.

### The map shows the whole split chain of a manifest behind Show details

- Why we changed it: When a manifest had been split, the map only showed the leg in front of you, with no way to see the rest of the chain.
- How it helps: Dispatchers can follow a split load end to end on one map instead of opening each leg separately.
- How to use it: Open a manifest on the map and choose Show details.

### The money codes table scrolls smoothly on large lists

- Why we changed it: Every row was rendered at once, so long lists were slow to open and scroll.
- How it helps: Carriers with many money codes can work through the table without waiting.
- How to use it: Open the money codes list.

### A company can give a document type its own fields

- Why we changed it: Document types carried a fixed set of details, so anything a carrier tracked beyond that had to live in notes or outside the system.
- How it helps: Each document type can capture exactly the data the company needs, and those fields can then be filled in and searched.
- How to use it: Open the document type in settings and add the fields you want it to hold.

### A document shows its own fields

- Why we changed it: Documents were displayed with a generic set of details, so information specific to a document type was not visible.
- How it helps: You can see the details that belong to the document you opened without going elsewhere.
- How to use it: Open a document from any record that carries one.

### A forced update now says an update is required and counts down to the reload

- Why we changed it: When a new version had to be loaded, the app reloaded with little explanation of what was happening.
- How it helps: You know why the page is about to reload and how long you have to finish what you are doing.
- How to use it: Nothing to switch on; the message appears when a required update is released.

### A guided tour can be opened straight from a link with a tour id in the URL

- Why we changed it: Tours could only be started from inside the app, so there was no way to point someone at a specific one.
- How it helps: Support and colleagues can share a link that opens the exact walkthrough someone needs.
- How to use it: Append ?tourId= and the tour's id to a dashboard URL.

### A workspace list that is cut off at the first hundred entries now says so

- Why we changed it: Long workspace lists were silently truncated, so people assumed a missing workspace did not exist.
- How it helps: People with many workspaces know the list is partial and can search for the one they need.
- How to use it: Open the workspace list with more than a hundred workspaces; the notice appears above it.

### Activity notes group field changes together when several were edited at once

- Why we changed it: When one action changed several fields, the activity feed listed each change as its own separate note, which made the history hard to scan.
- How it helps: Related field changes from the same action now read as one grouped entry, so it is quicker to see what happened and who did it.
- How to use it: Open the notes or activity panel on any record; grouping happens automatically.

### An integration left half set up is shown as unfinished and its credentials can be tested from there

- Why we changed it: A provider setup that was started but never completed looked the same as a working one, with no way to check it.
- How it helps: You can spot the integrations that still need attention and verify the credentials before relying on them.
- How to use it: Open integration settings; unfinished setups are marked and offer a credential test.

### Background tabs stop refreshing data until you switch back to them

- Why we changed it: A number of screens kept polling for updates even when their tab was hidden, using bandwidth and slowing the tab you were actually working in.
- How it helps: Machines with several dashboard tabs open stay quicker, and data still refreshes the moment you come back to a tab.
- How to use it: Nothing to switch on.

### Companies can set a default language for everyone working in the account

- Why we changed it: The language was only a personal choice, so every new colleague had to find the setting themselves and shared screens showed whatever each person had picked.
- How it helps: An admin sets the company language once and it becomes the starting point for people in the account, while anyone can still switch their own.
- How to use it: Open company settings and choose the language.

### Company lists load faster by fetching each company's primary identity in a single query

- Why we changed it: The service looked up the primary identity separately for every company, so pages listing many companies slowed down as the list grew.
- How it helps: Screens that list companies come back quicker, and the slowdown no longer grows with the number of companies.
- How to use it: Nothing to switch on; open any screen that lists companies.

### Document images open in a real viewer with zoom and page navigation

- Why we changed it: Scanned documents opened as plain images with no way to zoom or move between pages, so reading paperwork meant downloading it.
- How it helps: You can read a bill of lading or a signed receipt on screen without downloading the file.
- How to use it: Click a document image anywhere it appears; the viewer opens over the page.

### Document preview opens at a sensible default size and can be zoomed

- Why we changed it: Previews opened at a fixed size with no way to enlarge them, so small scans and dense paperwork were hard to read.
- How it helps: Staff can read documents in place instead of downloading them to check a number.
- How to use it: Open any document preview and use the zoom control.

### Document status counts are calculated in one pass, so the totals on the documents list stay accurate

- Why we changed it: The counts next to each document status were assembled from the loaded page rather than the full set, so they could disagree with what the list actually contained.
- How it helps: Staff can trust the number beside each status when deciding what still needs handling.
- How to use it: Open the documents list; counts update on their own.

### Documents show whether they can be read with AI

- Why we changed it: Nothing indicated which documents the AI could read, so users guessed before trying.
- How it helps: It is clear up front which files can be processed, which saves attempts that were never going to work.
- How to use it: Nothing to switch on. Open a record's documents.

### Dropdown lists open immediately when you click them

- Why we changed it: Opening a select menu did its work in the same frame as the click, so large lists felt sluggish to open.
- How it helps: Pickers with many options, such as trucks, drivers or customers, respond right away.
- How to use it: Nothing to switch on.

### Dropdown menus open in the same frame as the click instead of lagging behind the pointer

- Why we changed it: Menus opened a frame or more after the press, which made them feel sluggish on click-heavy screens.
- How it helps: Menus feel immediate, and fast repeated clicks no longer land before the menu appears.
- How to use it: Nothing to switch on; it applies to menus across the dashboard.

### Empty tables show a reachable action and a single lighter illustration

- Why we changed it: Empty states shipped a large set of artwork and their call to action could be out of reach, so an empty list was heavy and offered no clear next step.
- How it helps: When a list has nothing in it you get a clear action you can click, and the page loads lighter.
- How to use it: Open any list with no records; nothing to switch on.

### Equipment and truck type lists load from the live store instead of being polled repeatedly

- Why we changed it: These lookups were refetched on a timer, which added needless load and could still show stale values between polls.
- How it helps: Dropdowns for equipment and truck types open faster and reflect changes immediately.
- How to use it: Nothing to switch on.

### Filter lists stay responsive when toggling options, with no pause on long option lists

- Why we changed it: Changing one filter re-rendered every option row, which made large filter panels stutter.
- How it helps: Selecting filters on big lists is immediate, even with many options.
- How to use it: Nothing to switch on.

### Initial data load after sign-in fetches its entity types together and finishes sooner

- Why we changed it: The bootstrap loaded each entity type one after another, which made the first screen after sign-in slow.
- How it helps: Less waiting before the dashboard is usable.
- How to use it: Nothing to switch on.

### Integration settings show whether a provider is connected and let you test its credentials

- Why we changed it: There was no way to tell from the dashboard whether a provider connection was live or its credentials still valid until something failed.
- How it helps: You can confirm an integration works when you set it up, rather than finding out from a failed transfer.
- How to use it: Open integration settings, pick a provider and run the credential test.

### Notes feed moves with the arrow keys and stays fast past the first page of entries

- Why we changed it: The notes feed had no keyboard navigation and slowed down once a record had accumulated many entries.
- How it helps: Staff can move through notes without reaching for the mouse, and long histories stay responsive.
- How to use it: Open the notes feed on any record and use the arrow keys to move between entries.

### Notes render their formatting correctly and mark values that are hidden from you

- Why we changed it: Note markup was rendered wrong in places, and there was no sign when a note held a value you were not allowed to see.
- How it helps: Notes read the way they were written, and it is clear when content is withheld rather than missing. Invoice downloads from a note now follow the same permission check.
- How to use it: Open any note; nothing to switch on.

### Open screens refresh when related records they depend on change

- Why we changed it: Live updates only covered the record on screen, so a change to a linked record such as a truck or customer left the page showing old details.
- How it helps: Names, statuses and other referenced details stay current without a manual reload.
- How to use it: Nothing to switch on.

### Roles and equipment types update live, without a page reload

- Why we changed it: Changes to roles and equipment types only appeared after a manual refresh, so lists and pickers could show stale options.
- How it helps: Dispatchers and admins see new or edited roles and equipment types right away across open screens.
- How to use it: Nothing to switch on; the values refresh as they change.

### Row action menus open faster because they no longer load every dialog behind them

- Why we changed it: Opening a menu on a table row pulled in all the dialogs that menu could reach, even the ones you never opened.
- How it helps: Menus in long lists appear without the pause, especially on slower connections.
- How to use it: Nothing to switch on.

### Sign-in loads faster by fetching only what the sign-in screen needs

- Why we changed it: The sign-in page pulled settings and steps for the whole app and its preloads competed with routing, which slowed the first screen.
- How it helps: Getting into the dashboard takes less time, particularly on slow connections.
- How to use it: Nothing to switch on; visible at sign-in.

### Tables load faster because empty-state artwork is fetched only when a table is actually empty

- Why we changed it: Every table pulled its empty-state illustration up front, even when it had rows to show.
- How it helps: Lists and tables across the dashboard open with less to download and appear sooner.
- How to use it: Nothing to switch on.

### Tables load only the images the table on screen needs, so large lists appear faster

- Why we changed it: Opening a table pulled in artwork for every table in the app, adding load time before anything was usable.
- How it helps: Lists and grids render sooner, especially on slower connections.
- How to use it: Nothing to switch on.

### Tables stay responsive while you type in search instead of redrawing the whole list

- Why we changed it: Every keystroke in a table search rebuilt the column headers and remounted the rows, so large lists stuttered and scroll position jumped.
- How it helps: Searching long lists of orders, trucks or invoices now filters smoothly, with less waiting between keystrokes.
- How to use it: Nothing to switch on; open any table and use its search box.

### The country picker opens and scrolls without lag across its full list

- Why we changed it: All 242 countries were rendered at once, which made the dropdown slow to open and stutter while scrolling.
- How it helps: Choosing a country in addresses and settings is quick.
- How to use it: Open any country dropdown.

### The dashboard responds faster on pages with timers and animations

- Why we changed it: Error monitoring was wrapping every timer and animation frame in the app, which added overhead to anything that updated on screen.
- How it helps: Screens that refresh on a timer or animate feel lighter, especially on slower machines.
- How to use it: Nothing to switch on.

### The document review list can be searched and filtered by a document's fields

- Why we changed it: The review list could only be scrolled, so finding one document in a long queue meant paging through it.
- How it helps: Staff working through documents can go straight to the ones they need instead of reading the whole list.
- How to use it: Open the document review list and use the search box and field filters above it.

### The main image on the integrations page loads faster in modern formats

- Why we changed it: The page's hero image was served in a heavy format and without loading priority, so it arrived late.
- How it helps: The page looks finished sooner and uses less bandwidth.
- How to use it: Nothing to switch on.

### The notes feed adds filters, sticky day headers and a clear status for each stage of an activity

- Why we changed it: Long feeds were hard to scan: there was no way to narrow them down, the date scrolled out of view and the stage of an activity was not shown.
- How it helps: Staff can filter to what they care about, always see which day they are reading, and tell at a glance where an activity stands.
- How to use it: Open the notes feed and use the filters at the top; the day headers and status labels appear on their own.

### The notes feed groups entries by activity so related updates read as one item

- Why we changed it: Every change landed as its own line, so a single activity was scattered across the feed and hard to follow.
- How it helps: Staff can follow what happened to an order or a truck without piecing together separate entries.
- How to use it: Open the notes feed on any record; the grouping is applied automatically.

### The notes feed shows comments and activity in one list instead of behind a filter row

- Why we changed it: The All / Comments / Activity switch split the history and hid part of it by default.
- How it helps: The full history of a record reads in one place, in order.
- How to use it: Open the notes feed on any record.

### The onboarding plan banner appears immediately while the checklist is still loading

- Why we changed it: New accounts saw an empty onboarding screen until the whole checklist had loaded.
- How it helps: Onboarding feels quicker and shows your plan straight away.
- How to use it: Nothing to switch on; visible on the onboarding screen.

### The sign-in page loads faster

- Why we changed it: The page pulled in more code than it needed and fired a burst of prefetch requests before anyone signed in.
- How it helps: Signing in starts sooner, especially on slow connections.
- How to use it: Nothing to switch on; visit the sign-in page.

### The sign-in screen shows the latest release notes immediately instead of waiting on a request

- Why we changed it: The changelog on the sign-in page was fetched each time, so it appeared late or not at all on a slow connection.
- How it helps: You see what changed as soon as the sign-in page paints, and the page itself loads faster.
- How to use it: Open the sign-in page.

### The signed-in workspace loads without the marketing tag manager script

- Why we changed it: An analytics tag manager was being loaded inside the working area of the product, where it served no purpose and cost load time on every page.
- How it helps: Pages inside the workspace start quicker and carry less third-party script.
- How to use it: Nothing to switch on.

### The workspace picker opens without delay

- Why we changed it: The release notes were being loaded while the workspace picker opened, which held up the menu.
- How it helps: Switching between workspaces is immediate.
- How to use it: Open the workspace picker from the top of the dashboard.

### You can test a saved integration connection from its settings page

- Why we changed it: After saving integration credentials there was no way to confirm they worked without waiting for the next sync to fail.
- How it helps: You can confirm credentials and reachability right away and fix a bad connection before it affects work.
- How to use it: Go to the integration's settings page and use the test action next to the saved connection.

### Fuel and toll exports can be scoped to specific trucks

- Why we changed it: Exports covered the whole fleet, so anyone checking a few trucks had to filter the file afterwards.
- How it helps: You pull only the fuel and toll records for the trucks you care about, which makes reconciliation and dispute checks faster.
- How to use it: Pick the trucks when starting a fuel or toll export.

## Fixes

### A failed settlement load offers Retry instead of claiming there are no cycles

- Why we changed it: When the settlement cycles failed to load, the page showed an empty state saying there were no cycles, with no way to try again.
- How it helps: You can tell a loading failure from an empty list and retry without reloading the page.
- How to use it: If settlement cycles fail to load, use Retry on the message.

### Downloading a payout batch and editing payouts now require payout permissions

- Why we changed it: The payout batch download and payout write endpoints did not check payout permissions, so users without them could reach payout data.
- How it helps: Payout information is limited to the people your roles allow.
- How to use it: Check that the staff who need payouts have the payout permissions on their role.

### Invoices synced to the accounting integration carry their order reference again

- Why we changed it: A number of synced invoices lost the order reference, making them hard to match back to the load.
- How it helps: Accounting can tie each synced invoice to the order it came from.
- How to use it: Nothing to switch on.

### Pay setup screens show the settlement figures as they are actually configured

- Why we changed it: Pay setup displayed values that did not always match what the settlement run would use.
- How it helps: Payroll staff can trust the pay setup screen when checking how a driver or carrier will be paid.
- How to use it: Open pay setup on a driver or carrier.

### Settlement email settings are readable, show loading and error states, and the send dialog blocks incomplete sends

- Why we changed it: The email settings screen gave no feedback while loading or failing, and the send dialog let sends go out without the details it needed.
- How it helps: Payroll staff can see what is happening and cannot send a settlement email that is missing something.
- How to use it: Open settlement email settings and the send dialog.

### The settlement period list closes right away when you pick a period

- Why we changed it: Closing the list was delayed along with opening it, so the dropdown lingered on screen after a selection.
- How it helps: Choosing a settlement period feels immediate instead of sticky.
- How to use it: Nothing to switch on.

### Opening a BI link goes straight to the BI app instead of stalling on a cached shell

- Why we changed it: The offline cache intercepted navigations to the BI section and served the wrong app shell.
- How it helps: BI links and bookmarks load the reporting app the first time, with no reload needed.
- How to use it: Open any BI link or bookmark; reload once if an old cache is still active.

### A delivered order can be invoiced even when no truck is assigned to it

- Why we changed it: The invoice option only appeared for delivered orders that had a truck on them, so orders without one could not be billed.
- How it helps: Billing staff can invoice every delivered order without first attaching a truck to it.
- How to use it: Open a delivered order with no truck assigned and create the invoice as usual.

### Accounting sync processes every invoice in a batch instead of stopping at 30

- Why we changed it: Batches sent to the connected accounting system stopped after 30 invoices, leaving the rest unsynced without a clear sign.
- How it helps: Large invoice batches reach the accounting system in full, so billing staff stop re-running syncs and hunting for missing invoices.
- How to use it: Nothing to switch on; run a sync as usual.

### An order that has not been invoiced no longer shows as paid in full

- Why we changed it: Orders with no invoice were displaying a fully paid status, which misrepresented what was still owed.
- How it helps: Billing staff can trust the payment status on an order and chase what is genuinely outstanding.
- How to use it: Open an order that has not been invoiced yet and check its payment status.

### Batch invoice tabs and factoring panels line up correctly again

- Why we changed it: The tab underline sat flush against the labels and the factoring surfaces were visually inconsistent.
- How it helps: The batch invoicing screens are easier to read and scan when working through a batch.
- How to use it: Nothing to switch on. Open batch invoices.

### Four billing defects reported through usage tracking are fixed

- Why we changed it: Usage measurements surfaced four defects in billing screens that blocked or misreported work.
- How it helps: Billing staff can complete the affected flows without workarounds.
- How to use it: Nothing to switch on; open Billing as usual.

### Invoice statistics on batch invoices wrap onto another line instead of hiding fields

- Why we changed it: When the totals row ran out of width, some figures were cut off rather than moved onto a second line.
- How it helps: Billing staff see every figure in the batch invoice summary at any window width.
- How to use it: Open batch invoices and look at the statistics row.

### Invoice status labels are no longer clipped and empty statistics line up properly on the batch invoice screen

- Why we changed it: Longer status labels were cut off and statistic tiles with no value sat out of alignment.
- How it helps: Invoice status can be read at a glance without guessing at truncated text.
- How to use it: Nothing to switch on. Open batch invoices.

### Review orders opens with exactly the orders it lists selected

- Why we changed it: When starting a batch invoice review, the selection did not always match the orders named on the screen.
- How it helps: You invoice the orders you meant to invoice, without re-checking the selection by hand.
- How to use it: Select orders and choose Review orders in batch invoicing.

### Settlement letterheads show the company phone, fax and email again

- Why we changed it: Those contact details were saved in settings but not returned, so they were missing from the settlement letterhead.
- How it helps: Settlements go out with complete contact details, so drivers and carriers know where to reply with questions.
- How to use it: Check the letterhead details in settings; they now appear on generated settlements.

### The batch settlement dialog can turn off the company CC list

- Why we changed it: Once the company CC recipients were applied, the dialog gave no way to remove them, so settlements went out to people who should not receive them.
- How it helps: Staff sending settlements control exactly who is copied on each batch.
- How to use it: Open the batch settlement dialog and clear the company CC option before sending.

### The fix action in the batch invoice readiness column is no longer clipped

- Why we changed it: The readiness cell cut off its action, so the control to resolve the problem could not be reached.
- How it helps: Billing staff can act on an invoice that is not ready from the list itself.
- How to use it: Open batch invoices and look at the readiness column.

### The invoice attempt header wraps instead of squeezing the amount out of view

- Why we changed it: On narrow screens the header crushed the amount so it was cut off or unreadable.
- How it helps: The attempt amount stays readable at any window width.
- How to use it: Nothing to switch on.

### The invoice list says when it failed to load instead of reporting that there are no invoices

- Why we changed it: A failed request showed the empty state, so it looked like the system held no invoices at all.
- How it helps: Billing staff can tell a loading problem from an genuinely empty list and retry instead of doubting their data.
- How to use it: Nothing to switch on; the message appears if the invoice list cannot load.

### The readiness action on batch invoices stays visible instead of being cut off

- Why we changed it: On the batch invoice screen the readiness action was clipped by its container, so it could not be reached.
- How it helps: You can act on invoice readiness directly from the batch screen without resizing or scrolling around the panel.
- How to use it: Open a batch invoice; the readiness action sits in the panel.

### The submission logs section in batch invoices shows its heading instead of a blank label

- Why we changed it: The heading pointed at a label that did not exist, so the section came up without a title.
- How it helps: The submission history in a batch invoice is labelled and easier to find.
- How to use it: Open a batch invoice and look at the submission logs section.

### Clicking the already selected day in the appointment picker applies that appointment

- Why we changed it: Re-clicking the selected day did nothing, so the appointment was not set and dispatchers had to pick another day and come back.
- How it helps: Setting an appointment takes one click, whatever day was highlighted first.
- How to use it: Open an order, set an appointment and click the highlighted day.

### Dispatching a draft sends the whole truck roster, not just the primary driver

- Why we changed it: When a truck had more than one driver assigned, dispatching from a draft only passed the primary driver along.
- How it helps: Co-drivers and team assignments carry through on dispatch, so the load shows the right people without manual correction.
- How to use it: Dispatch a draft for a truck with more than one driver.

### Editing manifest miles now requires the Override Distance permission, on the page and on save

- Why we changed it: The miles field on manifest expenses could be edited by users without the Override Distance permission, and the server accepted the change.
- How it helps: Distance-based pay and billing stay under the control of the people allowed to change them.
- How to use it: Grant Override Distance to the roles that should edit manifest miles; others see the field locked.

### Leaving a new order no longer triggers an unsaved-changes prompt from a screen you already closed

- Why we changed it: A leave guard from a closed order view stayed active and could block or interrupt navigation afterwards.
- How it helps: Navigation after creating or abandoning an order behaves as expected, without stray prompts.
- How to use it: Nothing to switch on.

### Looking up a location returns the facility it is linked to

- Why we changed it: The location lookup left out the facility link, so callers and screens relying on it saw nothing.
- How it helps: Locations show their facility wherever they are used.
- How to use it: Nothing to switch on.

### Manifests and tracking pages keep your place in the list when you page through results

- Why we changed it: The paging keys were being dropped on the manifests and tracking pages, so moving between pages reset the view instead of continuing where you were.
- How it helps: You can work through long manifest and tracking lists page by page without losing your position or seeing repeated results.
- How to use it: Open the manifests or tracking page and page through the list as usual.

### Notes delivered over the live feed arrive intact for everyone watching the same order

- Why we changed it: A relayed note event was being altered while it was shared across open streams, so some viewers saw a changed or incomplete note.
- How it helps: Everyone with the order open sees the same note text as it was written.
- How to use it: Nothing to switch on; applies to notes as they arrive.

### One facility can be shared by several customers instead of being tied to a single one

- Why we changed it: A facility could only be attached to one customer, so the same physical location had to be entered again for each customer using it.
- How it helps: Shared warehouses and docks are entered once and picked by any customer that ships through them, keeping addresses consistent.
- How to use it: Open a facility and assign the customers that use it.

### Order and invoice lists say when loading failed instead of showing an empty board

- Why we changed it: When a list failed to load it rendered as empty, which looked the same as having no orders or invoices at all.
- How it helps: You can tell a real empty list from a failure and retry instead of assuming work has disappeared.
- How to use it: Nothing to switch on; the error message appears when a list fails to load.

### Order create now asks for a date on stops marked "Need to Set" instead of letting them through empty

- Why we changed it: A stop flagged as needing a date could be saved without one, leaving the order incomplete downstream.
- How it helps: Dispatchers catch missing stop dates at creation rather than when planning or the driver hits the stop.
- How to use it: Create an order with a stop marked "Need to Set"; the date is requested before you can continue.

### Order flags show the time they were raised in the company's time zone

- Why we changed it: Flag timestamps were rendered in a different zone, so dispatchers read the wrong hour.
- How it helps: The time on a flag matches the clock everyone on the team is working to.
- How to use it: Open an order with a flag and read its raised-at time.

### The appointment popover on order creation waits for a date before applying the appointment

- Why we changed it: The popover could apply an appointment before a date was entered, leaving orders with incomplete appointment information.
- How it helps: Appointments saved on new orders always carry the date the dispatcher meant.
- How to use it: Create an order and open the appointment popover on a stop.

### Unmerge offers only the orders that a merge actually brought onto the manifest

- Why we changed it: The unmerge picker listed orders that were never merged in, so it was possible to pull the wrong order off.
- How it helps: Dispatchers can undo a merge without picking through orders that do not belong in the list.
- How to use it: Open a merged manifest and choose unmerge.

### A deleted vendor still shows in the record that references it instead of leaving the field blank

- Why we changed it: Once a vendor was deleted, fields holding it went empty, so records lost the history of who the vendor was.
- How it helps: You can still see which vendor a record was tied to after that vendor is removed.
- How to use it: Nothing to switch on; open a record that references a deleted vendor.

### A truck's details refresh right away when it is added to or removed from a team

- Why we changed it: Team membership changes left stale truck data cached, so the truck still showed its old team until a reload.
- How it helps: Team assignments are reflected immediately wherever the truck appears.
- How to use it: Nothing to switch on; add or remove a truck from a team and the change shows at once.

### Deleting a vendor unlinks the fleet assigned to it

- Why we changed it: Trucks and equipment stayed attached to vendors that no longer existed, leaving stale links on fleet records.
- How it helps: Fleet records stay clean after a vendor is removed, so vendor assignments reflect the vendors you actually work with.
- How to use it: Delete a vendor; linked fleet is released automatically.

### Driver, truck and trailer lists say when loading failed instead of spinning forever

- Why we changed it: If the list request failed, the page kept showing a loading state with no indication that anything had gone wrong.
- How it helps: You know to retry instead of waiting on a screen that will never finish.
- How to use it: Nothing to switch on.

### Fleet data syncs use the signed-in user's own dashboard access

- Why we changed it: The fleet read did not pass the caller's dashboard credential, so syncs could fail or return data that did not match the user's access.
- How it helps: Fleet lists and synced fleet data now reflect what the signed-in user is allowed to see, without unexplained sync failures.
- How to use it: Nothing to switch on.

### Fleet reference data keeps updating live instead of going stale until a reload

- Why we changed it: Live updates for a fleet reference type depended on a logged row rather than on the type being declared, so updates could stop arriving.
- How it helps: Truck and driver reference lists reflect changes as they happen without a manual refresh.
- How to use it: Nothing to switch on.

### Quantity on fuel transaction forms accepts decimals without the leading zero getting in the way

- Why we changed it: The field was pre-filled with a default of 0, which stuck to whatever was typed and mangled decimal amounts like 12.5.
- How it helps: Fuel quantities are entered once and recorded as typed.
- How to use it: Enter the quantity on a fuel transaction as normal.

### Reloading a fleet table brings back its rows instead of an empty table

- Why we changed it: Refreshing the page on a trucks or drivers table could restore the saved view with no rows in it.
- How it helps: A reload returns the list you were looking at, so nothing looks like it disappeared.
- How to use it: Nothing to switch on.

### Searching fleet notes matches the words you see, not the formatting behind them

- Why we changed it: Note search indexed the raw markup, so formatting characters interfered with matches and some notes could not be found.
- How it helps: Searching a note's text finds it, regardless of how the note was formatted.
- How to use it: Search notes on a truck or driver as usual.

### The tooltip explaining why a driver's app access is off points at the control again

- Why we changed it: The tooltip on the app-disabled indicator lost its arrow, so it floated free of the control it described.
- How it helps: It is clear which driver row and which control the explanation belongs to.
- How to use it: Hover the app-disabled marker on a driver in the drivers list.

### The summary composer opens on the letter that is actually sent

- Why we changed it: The composer could open on a different draft than the one going out, so edits landed on the wrong text.
- How it helps: What you see and edit in the composer is the message the recipient gets.
- How to use it: Open the summary composer as usual.

### Live positions clear on logout and the map never shows data that has stopped refreshing

- Why we changed it: Live data stayed in memory after logout and could be drawn on screen even when nothing was updating it, so stale positions looked current.
- How it helps: What you see moving on the map is actually live, and the next person to sign in on the same machine starts clean.
- How to use it: Nothing to switch on.

### Live truck locations come from the fleet service that owns them

- Why we changed it: Locations were read from a second source that could lag behind or disagree with fleet records.
- How it helps: Positions on the map match what fleet holds, with fewer stale or conflicting pins.
- How to use it: Nothing to switch on.

### The start location field in planning responds to a single click

- Why we changed it: The start location field ignored the first click and only opened on the second.
- How it helps: Planning a trip takes fewer clicks and feels predictable.
- How to use it: Nothing to switch on.

### A change notice refreshes a lookup right away instead of waiting out the caching window

- Why we changed it: Lookups were held for a minute after being read, so an edit made elsewhere could take up to a minute to appear.
- How it helps: Newly added or edited reference data shows up in lists as soon as it is saved.
- How to use it: Nothing to switch on.

### A company shows its real identifier instead of falling back to an MC number when one exists

- Why we changed it: Companies that had a proper primary identifier were sometimes displayed with their MC number instead.
- How it helps: Company records read consistently, so staff match a company to the right paperwork without second-guessing the number on screen.
- How to use it: Nothing to switch on; open any company record.

### A failed field load on documents shows an error instead of an empty result

- Why we changed it: When fields could not be loaded the screen claimed there were none, which looked like missing data.
- How it helps: Users can tell a loading problem from an empty set and retry.
- How to use it: Nothing to switch on; the error appears when the load fails.

### A page tab keeps the underline style the page asks for

- Why we changed it: The tab component overrode the underline requested by the page, so some tab strips looked inconsistent.
- How it helps: Tab strips look the same across the product and the active tab is easier to spot.
- How to use it: Nothing to switch on.

### A required app update waits until your unsaved work is finished before reloading the page

- Why we changed it: The forced reload for a new app version could fire while a form was still open, discarding what had been typed.
- How it helps: You keep what you were working on; the reload happens once the editor or form releases it.
- How to use it: Nothing to switch on; it applies the next time a required update arrives.

### Accordion sections no longer cut off content that grows after the section is opened

- Why we changed it: An open accordion kept the height it had at opening time, so content loaded or added afterwards was clipped.
- How it helps: Expanded panels show everything inside them, including content that arrives late.
- How to use it: Nothing to switch on.

### Activity notes no longer show a dash and arrow when a field had no previous value

- Why we changed it: A newly filled field was rendered as if something had been replaced, showing an empty old value with an arrow.
- How it helps: The history reads correctly for values that were set for the first time.
- How to use it: Nothing to switch on.

### Browsers now pick up a new app version instead of holding on to a stale one

- Why we changed it: The file used to detect a new release was served in a form browsers cached too aggressively, so sessions could stay on an old build.
- How it helps: You get the current version without clearing the cache or hard-reloading.
- How to use it: Nothing to switch on; the reload prompt appears when a new version ships.

### Company screens show the identifier the backend resolved instead of an outdated stored value

- Why we changed it: The screen read a legacy column, so it could display an identifier that no longer matched what the system actually used.
- How it helps: The identifier you see matches the one the rest of the product works with, so it is safe to quote and search on.
- How to use it: Nothing to switch on; the company screens read the resolved value.

### Count badges are back to their square corners and tighter fit

- Why we changed it: Count badges had picked up rounded corners and extra padding, making them larger and inconsistent with the rest of the interface.
- How it helps: Counts in navigation and lists read at a glance and line up with surrounding elements again.
- How to use it: Nothing to switch on.

### Document range filters accept typed values and the field row buttons respond properly

- Why we changed it: Range filters could only be set by picking, and nested buttons in the field row made the controls unreliable to click.
- How it helps: Filtering documents by a range is quicker and the row controls behave as expected.
- How to use it: Open documents, type directly into a range filter.

### Documents are no longer rejected for a missing PDF header when they are not PDFs

- Why we changed it: The upload check looked for a PDF header on files that were never meant to carry one, so valid documents were refused.
- How it helps: Attachments and scans upload on the first try instead of failing validation.
- How to use it: Upload the document as usual.

### Dropdown lists open right away when you use the keyboard or start typing

- Why we changed it: Opening a selection list was delayed for all input methods, which made keyboard use feel unresponsive.
- How it helps: Keyboard-driven work in pickers and search fields reacts immediately, while mouse opens stay smooth.
- How to use it: Nothing to switch on; tab into any dropdown and type.

### Dropdowns that open and close on click work again, including the edit-order dialog

- Why we changed it: A change to how dropdown popups load broke toggle-on-click triggers, so some selectors would not close or would not open the dialog behind them.
- How it helps: Selecting values behaves as expected across forms, and the edit-order dialog opens from its selector.
- How to use it: Nothing to switch on; use any dropdown that toggles on click.

### Links inside navigation groups no longer appear underlined

- Why we changed it: Expanding a navigation group showed its links with an underline that did not match the rest of the menu.
- How it helps: The sidebar reads consistently.
- How to use it: Expand any group in the left navigation.

### Lists say the request failed instead of showing an empty state when data cannot load

- Why we changed it: On 17 more lists a failed load looked identical to having no records, so people assumed data was missing.
- How it helps: Users can tell a connection problem from a genuinely empty list and retry instead of doubting their data.
- How to use it: Nothing to switch on; the message appears when a list fails to load.

### Live note updates carry only identifiers, so note text is never pushed to people who should not read it

- Why we changed it: The live event stream included the body of a note, which meant note text travelled to clients regardless of who could see the record.
- How it helps: Note contents stay behind the permission check that loads them.
- How to use it: Nothing to switch on.

### Live updates retry after a failed catch-up instead of staying stale for the rest of the session

- Why we changed it: If the catch-up request that reloads missed updates failed once, the tab stopped trying and the screen quietly went stale until it was reloaded.
- How it helps: Screens recover on their own after a brief network problem, so you are less likely to act on out-of-date data.
- How to use it: Nothing to switch on.

### Lookup lists refresh as soon as they change instead of showing stale entries

- Why we changed it: The client trusted its local store for types the change log did not feed, so edits to reference data could sit unseen until a reload.
- How it helps: Dropdowns and reference lists show current values without refreshing the page.
- How to use it: Nothing to switch on.

### Losing access during sign-in moves you off the page instead of leaving you on it, and long document labels no longer overflow their chip

- Why we changed it: A permission denial that arrived while the app was still starting left the user sitting on a page they could not use, and a hidden-document chip stretched past its pill when the label was long.
- How it helps: Access changes now land you somewhere you can work, and document chips stay readable.
- How to use it: Nothing to switch on.

### Note bodies load in full instead of relying on what the live stream delivered

- Why we changed it: Note text taken from the update stream could arrive truncated or missing, so a note looked empty or incomplete.
- How it helps: Notes show their complete text every time they appear.
- How to use it: Nothing to switch on.

### Note previews render consistently everywhere, with mentions and formatting no longer showing as stray markup

- Why we changed it: Some preview spots still stripped note text with a crude text replacement, which could leave broken markup or drop mentions.
- How it helps: Note previews read the same wherever they appear, so staff can scan them without opening each note.
- How to use it: Nothing to switch on; previews render the new way.

### Pages no longer discard resources the app is about to need, removing occasional blank or slow screens

- Why we changed it: An idle cleanup pass was removing preload links the framework still owned, so some views had to re-fetch code before rendering.
- How it helps: Navigation is steadier and avoids re-downloading chunks that were already on the way.
- How to use it: Nothing to switch on.

### Pages no longer flicker or fail to load resources when the browser preloads them

- Why we changed it: The app was interfering with preload links that the framework already manages, which could cause duplicated or broken resource loading.
- How it helps: Page loads are more reliable and assets arrive once.
- How to use it: Nothing to switch on.

### Permissions stay denied until the permission map has loaded, so restricted actions no longer flash on screen

- Why we changed it: Right after sign-in the app treated a not-yet-loaded permission map as permissive, briefly showing buttons and screens a user is not allowed to use.
- How it helps: Users only see the actions they actually have, and no longer click something that then fails.
- How to use it: Nothing to switch on; it applies from sign-in.

### Secondary text and count badges show their intended colours again

- Why we changed it: A rewrite of the older dropdown component dropped the secondary text colour and the tinted count badge, leaving those elements flat and hard to read.
- How it helps: Lists and dropdowns read the way they used to, with counts and supporting text visually distinct.
- How to use it: Nothing to switch on.

### Signing in without a workspace yet keeps you on the page you opened instead of dropping you elsewhere

- Why we changed it: A visitor who opened a deep link before belonging to a workspace was redirected away, losing the page they came for.
- How it helps: Shared links still work for people who are being set up, and they land where they were sent once access is in place.
- How to use it: Nothing to switch on. Open any link as a user without a workspace and the destination is kept.

### Status chips have their square corners back

- Why we changed it: A styling change rounded the status chips, so they no longer matched the rest of the interface.
- How it helps: Statuses look consistent again across lists and detail screens.
- How to use it: Nothing to switch on.

### Status chips show a visible focus ring again when moved through with the keyboard

- Why we changed it: The focus outline had been lost, so keyboard users could not tell which status chip was selected.
- How it helps: People working without a mouse can see where they are before pressing enter.
- How to use it: Tab to any status chip; the ring appears.

### Tab labels use their original weight again, so the active tab stands out

- Why we changed it: After the tab component was rebuilt, label weight was lost and the selected tab was hard to pick out.
- How it helps: You can tell at a glance which tab you are on.
- How to use it: Nothing to switch on.

### Tabs keep their active underline and hover shading in dark mode

- Why we changed it: In dark mode the active tab underline and the hover background were washed out, so it was hard to tell which tab you were on.
- How it helps: The selected tab is readable at a glance for anyone working with the dark theme.
- How to use it: Switch to the dark theme and open any screen with tabs; nothing to turn on.

### Tabs no longer darken to near-black on hover, and the active underline sits where the screen places it

- Why we changed it: Hovering a tab turned it almost black, and the underline ignored the position the screen asked for.
- How it helps: Tab bars across the dashboard read consistently and the selected tab is easier to see.
- How to use it: Nothing to switch on; visible on any screen with tabs.

### The chevron on a navigation group turns again when you expand or collapse it

- Why we changed it: The arrow next to a navigation group stopped rotating, so there was no sign whether the group was open or closed.
- How it helps: The sidebar shows at a glance which groups are expanded.
- How to use it: Click any group in the left navigation.

### The document field filter reports a failed load and fits on a narrow screen

- Why we changed it: When the list of fields failed to load the filter looked empty, and on small screens the control was cut off.
- How it helps: Users know to retry instead of assuming there are no fields, and the filter is usable on a laptop or tablet.
- How to use it: Open the documents list and use the field filter; nothing to switch on.

### The header shows the same company identity as the company list

- Why we changed it: The header resolved the account's company differently from the list, so the two could disagree about which company you were in.
- How it helps: You can trust the company shown in the header to be the one you are working in.
- How to use it: Nothing to switch on; the header updates itself.

### The notes feed stays pinned to the newest entry when a note grows past the bottom of the panel

- Why we changed it: When a note's content made the feed taller than the panel, the view drifted away from the newest entry and had to be scrolled back by hand.
- How it helps: The latest note stays in sight while the feed fills up, so nothing is missed while reading or writing.
- How to use it: Nothing to switch on. Open the notes panel on any record.

### The sign-in button stays clickable and tells you what is wrong when you submit

- Why we changed it: The button was disabled until the form judged the input valid, so you could not submit and got no explanation.
- How it helps: You can always press Sign In and see which field needs attention.
- How to use it: Go to the sign-in page and submit; errors appear per field.

### The two sign-in controls that did nothing when clicked now work

- Why we changed it: Two controls on the sign-in screen looked clickable but had no effect.
- How it helps: People signing in get the action they expect instead of a dead control.
- How to use it: Go to the sign-in screen.

### The workspace list can be reached with the keyboard and no longer shifts when the scrollbar appears

- Why we changed it: Listed workspaces could not be tabbed to, and the list jumped sideways once it became long enough to scroll.
- How it helps: Keyboard users can switch workspaces without a mouse, and the list stays still as it grows.
- How to use it: Open the workspace switcher and tab through the list.

### The workspace list is a single tab stop, with arrow keys to move between workspaces inside it

- Why we changed it: Every workspace in the list took its own tab stop, so keyboard users had to tab through the whole list to reach anything after it.
- How it helps: Keyboard navigation through the header and settings is much shorter, and the list behaves the way other grouped controls do.
- How to use it: Tab to the workspace list and use the arrow keys to move within it. Nothing to switch on.

### The workspace picker on sign-in can be navigated and selected with the keyboard

- Why we changed it: The list of workspaces shown at sign-in could only be reached with a mouse, so keyboard and screen-reader users could not get past it.
- How it helps: Anyone signing in can tab through the workspaces and choose one without touching the mouse.
- How to use it: Sign in to an account with more than one workspace and use Tab and Enter on the picker.

### Tinted tags and icon buttons stay readable in dark mode

- Why we changed it: Tags and icon buttons that use the accent colour lost contrast against dark backgrounds.
- How it helps: Status tags and icon actions can be read at a glance in dark mode.
- How to use it: Nothing to switch on; use the product in dark mode.

### Tooltips have a visible edge in dark mode

- Why we changed it: In dark mode a tooltip blended into the background behind it, making its boundary hard to see.
- How it helps: Tooltips stay readable for people working in dark mode.
- How to use it: Nothing to switch on; use the product in dark mode.
