Weekly report
Frappe and ERPNext changes, 12 Oct to 18 Oct 2026
705 changes merged: 119 new features, 16 speed-ups, 462 fixes, 108 refactors.
Highlights
Link the docs from every Automation & Rules settings page
crm · feat
Say when a search or filter matched nothing
lms · feat
Group leads and deals into a summary with counts and totals
crm · feat
Shorter, consistent settings page descriptions and titles
crm · feat
Supplier Overview Dashboard
erpnext · feat
Create a deal from a contact or organization page
crm · feat
- fix Close the empty help panel once onboarding status loads Closes the Getting started panel once the saved onboarding status loads, if the user has already finished onboarding.
- refactor Darker dialog backdrop in dark mode The dialog backdrop is darker in dark mode, so dialogs stand apart from the form behind them.
- feat Storage v2: content-addressed blobs, pluggable storage backends, and signed file URLs Alpha, behind a `storage_v2` site setting: each upload is stored once as a File Blob, regardless of attachment count. Apps outside Suite should not build on it yet.
- feat Page background, paper size and orientation in the print format editor Adds a page background image with opacity, and saved paper size and orientation, to print formats.
- feat Page background, paper size and orientation in the print format editor feat(print): page background, paper size and orientation in the print format editor
See all 118 changes
- feat Add line numbers for strings from JSON files POT entries from DocType, Report and Workspace JSON now point to their exact line.
- feat Serve on the socket systemd passes, across restarts Runners keep their listening socket open across restarts, so requests queue instead of getting 502s.
- feat Add a built-in MCP server Adds a /api/v2/mcp endpoint with 15 tools for reading and changing documents and calling whitelisted methods. It reuses Frappe's permissions, and MCP Settings control it per site.
- feat Mobile shell On phones the desk shows a bottom tab bar and a navigation sheet from the page title, instead of the sidebar drawer.
- feat Data Import wizard matches Desk *(Listed under Refactors.)*
- feat Notify a user when someone else changes their password Adds a bell notification for password changes made by someone else.
- feat Rename the builder to Print Format Editor Rename the builder to Print Format Editor
- feat Add SQLite-backed virtual DocTypes for log storage Adds the log database connection and makes Error Log, Activity Log, Access Log, Route History and Web Page View virtual DocTypes backed by SQLite.
- feat Add automation canvas to framework ui Moves the CRM workflow builder's flow canvas into the framework so any app can draw automation flows.
- feat Add hover reveal cells Cells marked for hover reveal show only on the hovered or focused row, and always show on touch screens.
- feat Style picker for the standard print format The Standard print format gets a style picker and a font choice, and paper size and orientation can be set. Email attaches the PDF with the same settings.
- feat Add system fields to card and preview pickers Created By, Created On, Last Updated By and Last Updated On can be shown on Kanban cards and previews.
- feat Composer allowedFileTypes and attachments slot, align trailing labels Adds an allowedFileTypes prop to the composer that filters picked files, and an attachments slot so hosts can render their own attachment chips.
- perf Run chrome gpu and network service in the browser process Chrome runs as 2 processes instead of 4 during PDF generation, cutting peak memory for a Sales Invoice PDF from about 252 MB to 194 MB.
- perf Load reports, pages and workspaces in one query The Role form loads Reports, Pages and Workspaces in one query each instead of two, with the same rows as before.
- perf Read the chrome pdf stream in large chunks Reads the Chrome PDF in 1 MB chunks and joins them once. An 18 MB PDF went from 14.8s to 5.0s with identical output size.
- perf Read the chrome pdf stream in large chunks Backport of #44258. A 20.3 MB PDF went from 9.2s to 3.6s with the same output.
- fix Send session in Cookie header instead of query string The realtime server sends the session in a Cookie header rather than the URL, matching v16 and develop.
- fix Multiselect fields still suggest values already picked The dropdown skips values already picked, in both pills and the comma-separated multiselect.
- fix Second message in a dialog hides the first message's action button A message without an action no longer hides a button set by a message still on screen.
- fix RQ Job list fails to load after a queued function is renamed Jobs whose function no longer imports are skipped during matching, and the RQ Job list shows them so they can be deleted.
- fix Cached hook lists keep growing on every route cache miss Route cache rebuilds stop appending to the cached `website_generators` and `website_route_rules` lists.
- fix Drop saved group by fields that cannot be queried Reopening a Report view saved with "Group By: Comments" no longer fails and stays empty.
- fix Stray closing tag when announcement can't be dismissed Moves the close button's closing tag inside the same `{% if %}` as its opening tag.
- fix Setup wizard fails on servers without deprecated timezone names Picking India no longer preselects `Asia/Calcutta`, which newer Debian and Ubuntu releases don't ship.
- fix Translated template headers stop matching their fields Column header maps are cached per request, so templates in another language import correctly.
- fix Logging out shows the session expired dialog Logout no longer shows a Session Expired dialog before the login page.
- fix Count connections per link field when a doctype is linked twice Connection counts follow each link field, so a record isn't dropped or double-counted.
- fix Query string redirects stop working after a visit without one Requests skip the "no redirect" cache so query-string redirect rules keep matching.
- fix Add roles does nothing for a user created outside the form The Add Roles button opens the user's form on the roles tab, from the list and from the form.
- fix Password changed in desk still forces a reset at login A password changed in desk now counts as a reset, so the expiry is cleared.
- fix Answer client acknowledgements with the handler result Acknowledgements from the Python realtime server now return the handler's result, as the Node server does.
- fix Find sites from inside the sites folder The standalone realtime server finds sites when started from inside the sites folder.
- fix Read notification shows as unread again after a reload The notification list is fetched fresh, not from the browser cache.
- fix Bulk delete failure lists names without a reason The bulk delete dialog gives the reason for each document that could not be deleted.
- fix Don't delete frappe.local.sites_path in realtime config test Fixes a test that broke every later server test module on CI.
- fix Only ignore user permissions through a field the user can type in Link search ignores User Permissions only when the searched field is one the user can edit. This closes a path that listed every record of a DocType.
- fix Sanitize and bound web_search inputs fix(global_search): sanitize and bound web_search inputs
- fix Canonicalize and confine print image thumbnail paths Print image thumbnail paths are resolved and must stay inside the allowed folder.
- fix Only ignore user permissions through a field the user can type in fix(search): only ignore user permissions through a field the user can type in
- fix Add fallback perm. check in absence of doc & name fix(email): add fallback perm. check in absence of doc & name
- fix Bind social-login state to the initiating browser A short-lived HttpOnly cookie ties each social login state to the browser that started the login.
- fix Rename param retry to rq_retry in frappe.enqueue The retry value was passed to RQ instead of the queued method, so resetting a user's OTP secret failed before the email was queued.
- fix Go back past a new document after it is saved Back after saving or renaming a new document goes to the previous page, not the same document.
- fix Allow localhost redirect URIs for dynamic clients MCP clients such as Claude Code can register http localhost redirect URIs on sites outside developer mode.
- fix Compare saved timestamps as datetimes (backport) A document inserted at a whole second can be saved and submitted again.
- fix Move the page-island toolchain out of ui/ Moves the toolchain beside ui/, so copying sites/assets with symlinks no longer fails on a cyclic link.
- fix Preserve child-table rows in report view export Preserve child-table rows in report view export
- fix Use values passed to dialog primary actions Dialog actions use the values the dialog passes in, so "Missing Values Required" no longer appears when all fields are filled.
- fix Don't count unsubscribed emails as newsletter recipients Newsletters no longer stay on "Sending" forever when group members have unsubscribed.
- fix Queue every bulk email before sending Queue every bulk email before sending
- fix Queue every bulk email before sending Queue every bulk email before sending
- fix Keep doctype sort order for empty link search Link dropdowns with an empty search use the DocType's sort field and order instead of alphabetical order.
- fix Fall back to document name when title field is empty Fall back to document name when title field is empty
- fix Short circuit websocket if in Frappe Cloud Short circuit websocket if in Frappe Cloud
- fix Short circuit websocket if in Frappe Cloud Realtime no longer calls the web server back through the CDN for auth and room checks, which the CDN blocked.
- fix Don't send password alert on second save of a new user Social login no longer emails a "password changed" alert to every new user on the second save.
- fix Read domains added with an SSL certificate in report PDF Fixes a TypeError when exporting a Script Report to PDF on a site with an SSL domain.
- fix Leave the owner column out of report view exports The Created By column that permission checks added to exports is removed from the file.
- fix Make password reset keys single use Locks the user row and clears the reset key on first use, so two parallel password updates with the same key cannot both succeed.
- fix Stop exposing _comments through list queries (backport #42927) v15 backport. Filtering on _comments is rejected explicitly because v15 does not check filter fields against field permissions.
- fix Keep a converted sidebar off the dock of an app the site no longer has Skips the sidebar conversion for apps the site no longer has, so `bench migrate` no longer stops at convert_custom_sidebars.
- fix Keep a converted sidebar off the dock of an app the site no longer has (backport #44274) Lets `bench migrate` finish when a custom module's app was removed. The converted sidebar is left off every dock.
- fix Let a title match its own module in another case `bench migrate` no longer fails with "VAT Compliance is another module's name" when the sidebar title differs from the module name only in case.
- fix Open non-desk apps like CRM on their own page Non-desk apps open in the same tab. Desk apps and full URLs work as before.
- fix Keep a new private page in the module it was made in A new private page opens in the sidebar it was created from, and creating, renaming or deleting a workspace refreshes the list the router reads.
- fix Postion the anchor on right side for rtl Positions the anchor on the right side in RTL layouts, so the datepicker opens in the right place.
- fix Let a failed uninstall be finished by running it again Re-running `bench uninstall-app` after a failure now finds the remaining modules and tables, so leftover tables are no longer orphaned.
- fix Give a new user a username when their first name is taken A new user whose first name matches an existing username gets the next free name, such as krishna_kumar-1, instead of an empty Username.
- fix Email format and page count on the print page Emails from the print page use the format and letter head picked there. The page count counts HTML formats that wrap each page in .page-break.
- fix Email style with another format and font override check Emailing with a different format uses that format's style and page settings. A non-text print font override is ignored instead of failing the print.
- fix Select all columns after unticking a shown column In the column picker, Select All now ticks a column that was shown and then unticked.
- fix Letter head dropdown cut off in the print sidebar The print sidebar fills the window height, so Link dropdowns such as Letter Head show in full.
- fix Keep distinct results when counting comments Distinct queries count comments only when they select the document's own name or *. Other distinct queries skip comment counting, so duplicate-looking rows no longer appear.
- fix Pink, cyan and light blue indicators show as purple and blue Pink and cyan states get their own colours, and light blue gets a lighter background than blue, so states can be told apart in lists.
- fix Bulk delete skips selected rows on other pages Bulk delete removes every selected row across pages, not only the rows on the current page.
- fix Keep distinct results when counting comments (backport #44391) v15 backport of the distinct comment count fix.
- fix Prevent --dry-run from executing uninstall hooks `uninstall-app --dry-run` no longer runs the app's before and after uninstall hooks, which could commit or change files.
- fix Permission checks in workspace update_page and onboarding step update Public workspaces can no longer be unpublished by users without roles, and the onboarding step update ignores fields other than skip and complete. Both now have tests.
- fix Awesombar should pick the correct shell Opening a doctype from the awesomebar switches to the sidebar it belongs to, instead of staying on the current one.
- fix Open shell URLs for users who cannot see the shell A desk link naming a module the user cannot see opens the document in a visible shell, instead of showing "No permission for Page."
- fix Allow retrying failed app installations A failed app install no longer blocks retries. The install is committed only after its hooks and patches run.
- fix Show include filters when a report print format is selected The Include filters checkbox shows when a report print format is selected.
- fix A sidebar v16 generated from an app workspace is the app's Sidebars that v16 generated for app workspaces are now the app's own, so frappe.io no longer gets duplicate custom modules.
- fix Leave report scripts out of the pdf header and footer Report PDF headers, footers and bodies drop scripts and inline event handlers before the pages are built; page numbers still work.
- fix Show the help center when onboarding completes after the help modal mounts The help modal could stay on "Getting started" and show an empty panel if onboarding completed after it mounted. It now switches to the Help center.
- fix Build web-process URL from server config The realtime server builds the web-process URL from webserver_host, or 127.0.0.1:webserver_port, instead of the incoming connection. Tenant routing still uses the site-name header.
- fix Use shared request session Webhook requests use the shared session, and scheduled retries are preserved.
- fix Use the print format's @page margin in chrome pdfs Chrome PDFs use the @page margin from the print format's CSS. Values that cannot be converted fall back to 15mm.
- fix Default margins for classic formats converted at print time Classic formats with all margins at 0 now print with the default margins instead of flush against the paper edge.
- fix Convert inch lengths in convert_uom Restores PDF downloads for print formats with inch @page margins, which had broken since #44255.
- fix Centre activity timeline loading and empty states, stop load-more flash Centres the loading and empty states in the activity timeline and stops the "Show previous activity" control flashing over cached rows.
- fix Settings dialog layout on mobile On small screens the settings tabs become a scrollable row above full-width content.
- fix Bar_list hover tooltip and layout polish Adds a hover tooltip with name and tooltip_format options, lets the chart fill its host's height, and thickens the bars.
- refactor Drop verbose flag from bench init in POT workflow ci: drop verbose flag from bench init in POT workflow
- refactor Skip tests when only main.pot changes Pull requests that change only `main.pot` skip the server and UI suites.
- refactor Bump babel to 2.18.0 Babel 2.18 keeps the context of multi-line `_()` calls in the POT file.
- refactor Frappe-pr-bot commands and how to ask it for a review docs: frappe-pr-bot commands and how to ask it for a review
- refactor Never drop a queued post and skip repeated discussion comments ci(post-review): never drop a queued post and skip repeated discussion comments
- refactor Vouch jacob-salvi chore: vouch jacob-salvi
- refactor Skip server tests when only JS dependencies change Skip server tests when only JS dependencies change
- refactor Release v16 chore: release v16
- refactor Backport @framework/ui to v15 Brings the ui/ directory on v15 level with v16 hotfix, so the framework UI matches across lines.
- refactor Release v15 chore: release v15
- refactor Drop the review bot's eyes reaction once it reacts with the result Removes the review bot's eyes reaction once it reacts with the result.
- refactor Let post-review react to a comment as frappe-pr-bot Lets the review workflow add a reaction to a PR comment as the bot.
- refactor Read every page of reactions before dropping eyes Reads every page of reactions before removing the eyes reaction, so it is removed even on comments with more than 30 reactions.
- refactor Regroup the settings and customization tabs Web Form settings are regrouped, with list options moved into List Settings.
- refactor Add OSS Scanner build and security contact Adds the OSS Scanner build file and security contact to the repository.
- refactor Bump frappe-charts to 2.0.0-rc28 Bumps frappe-charts to the published rc28 release.
- refactor Backport pending @framework/ui PRs Backports the pending @framework/ui changes from develop to version-16-hotfix.
- refactor Bump werkzeug to 3.1.9 Fixes the failing dependency check. Sites with an underscore in the name load without the X-Frappe-Site-Name header, and their links keep the https scheme.
- refactor Say wkhtmltopdf is removed in version 17 The wkhtmltopdf notices on Print Format and Print Settings now say it will be removed in version 17.
- feat Supplier Overview Dashboard Adds an Overview tab to Supplier with KPIs, purchase and payment charts, payables ageing and recent transactions.
- perf Write only the missing or changed rounded total and in words property setters Global Defaults saves write only the Property Setters that actually change, rather than 54 on every save.
- perf Fetch serial no incoming rates in batches with a single query Speeds up reposting for serial-numbered items on version 15.
- perf Index serial_no on Serial and Batch Entry Adds an index that speeds up serial number lookups.
- perf Fetch serial no incoming rate with a single indexed query Speeds up reposting for serialized items by using the indexed lookup.
See all 259 changes
- perf Compress the bench staging tar with zstd Same zstd staging change on the develop line.
- fix Check read permission in whitelisted helpers Adds read permission checks to serial and batch lookups, the subscription plan rate, the opening invoice company lookup, and the opening invoice summary.
- fix Check asset read permission when fetching a depreciation schedule Backport of #59883 to version-16.
- fix Store imported supplier invoice XML as private file The XML extracted during Supplier Invoice import was attached as a public file; it is now private.
- fix Check asset read permission when fetching a depreciation schedule Backport of #59883 to version-15.
- fix Total Stock Summary report bug fix Group By Company totals no longer add in warehouses the user cannot read.
- fix Warehouse wise Item Balance Age and Value report bug fixes Warehouse columns and totals are limited to warehouses the user can read.
- fix Item Price Stock report bug fixes Users without Item Price read access no longer see buying and selling prices.
- fix Sales Order Analysis permissions, closed orders, credit notes and warehouse filter fix: Sales Order Analysis permissions, closed orders, credit notes and warehouse filter
- fix Pending qty, request matching and user scope in Pending SO Items for Purchase Request report fix: pending qty, request matching and user scope in Pending SO Items for Purchase Request report
- fix Pending qty, request matching and user scope in Pending SO Items for Purchase Request report Restricted users only see their own permitted Sales Orders, and delivered quantities are subtracted from pending.
- fix Correct permissions, closed orders, credit notes and warehouse filter in Sales Order Analysis Stops restricted users seeing other customers' orders through the chart and Group by Item, and fixes pending figures for Closed orders.
- fix Permissions, credit notes, Closed orders and modernization in Inactive Customers report fix: permissions, credit notes, Closed orders and modernization in Inactive Customers report
- fix Pending qty, request matching and user scope in Pending SO Items for Purchase Request report fix: pending qty, request matching and user scope in Pending SO Items for Purchase Request report
- fix Rate limit appointment slot lookups on the booking page Rate limits `get_appointment_slots` on `/book_appointment`.
- fix Validate POS profile write-off settings Write-off accounts and cost centres must be ledgers of the same company.
- fix Preserve pricing discounts on quantity changes Changing quantity keeps the pricing rule discount instead of resetting to the Price List Rate.
- fix Combine balances of groups sharing an account type Groups with the same Account Type are summed rather than the last one overwriting the rest.
- fix Keep the visitor session and site host on appointment verification Appointment verification keeps the visitor's session and builds links from the site host.
- fix Ignore cancelled gl entries when comparing voucher entries during repost fix(accounts): ignore cancelled gl entries when comparing voucher entries during repost
- fix Validate... / fix(accounts): Accounting dimension fieldname conflicts The fieldname conflict warning appears only when the dimension's fieldname changes, not on every re-save.
- fix Warn about fieldname conflicts only when the dimension fieldname changes fix(accounts): warn about fieldname conflicts only when the dimension fieldname changes
- fix Stock Balance report bug fix Warehouse Type is no longer ignored when a warehouse is also selected.
- fix Issued Items Against Work Order report bug fixes Material returned to the store is no longer listed as another issue.
- fix Warehouse Wise Stock Balance report bug fix Stock in disabled warehouses is now included in parent totals.
- fix Stock Ageing report bug fixes fix(stock): Stock Ageing report bug fixes
- fix Stock Projected Qty report bug fixes Shortage Qty now accounts for quantity reserved for unconsolidated POS sales.
- fix Stock Qty vs Serial No Count report bug fixes fix(stock): Stock Qty vs Serial No Count report bug fixes
- fix Stock Ledger Variance report bug fix fix(stock): Stock Ledger Variance report bug fix
- fix Items To Be Requested report bug fix Disabled items are no longer listed.
- fix Stock Ledger Invariant Check report bug fix Show Incorrect Entries now catches wrong valuation rates.
- fix Serial No Warranty Expiry report bug fixes The report shows Warranty Expiry Date instead of AMC Expiry Date.
- fix Stock and Account Value Comparison report bug fix The report no longer comes back empty when As On Date is cleared.
- fix Serial No and Batch Traceability report bug fixes fix(stock): Serial No and Batch Traceability report bug fixes
- fix Serial and Batch Summary report bug fixes Group warehouses now return their child warehouses' bundles.
- fix Requested Items To Be Transferred report bug fix fix(stock): Requested Items To Be Transferred report bug fix
- fix Reserved Stock report bug fixes Available Qty to Reserve is computed live rather than from the snapshot at reservation time.
- fix Product Bundle Balance report bug fixes The Date filter is now applied.
- fix Material Requests without Supplier Quotations report bug fixes Cancelled or draft Supplier Quotations no longer hide a request.
- fix Landed Cost Report bug fixes Filtered by a receipt, the cost shown is that receipt's share, not the whole voucher's total.
- fix Item Variant Details report bug fixes Open Sales Orders excludes delivered and closed orders.
- fix Item-wise Consumption report bug fixes Material Transfers for Manufacture no longer count as consumption.
- fix Item Prices report bug fixes Last Purchase Rate is per stock unit of measure, not per purchase unit.
- fix Item Shortage Report bug fixes fix(stock): Item Shortage Report bug fixes
- fix Incorrect Balance Qty After Transaction report bug fixes Differences below 0.5 are now reported.
- fix Incorrect Stock Value Report bug fixes fix(stock): Incorrect Stock Value Report bug fixes
- fix FIFO Queue vs Qty After Transaction Comparison bug fixes fix(stock): FIFO Queue vs Qty After Transaction Comparison bug fixes
- fix Delayed Order Report bug fixes An order delivered in parts is judged by its last delivery.
- fix Delayed Item Report bug fixes Sales returns are no longer listed as late deliveries.
- fix Batch Item Expiry Status report bug fixes Batches are filtered by expiry date, not the creation date of the Batch record.
- fix Available Serial No report bug fixes fix(stock): Available Serial No report bug fixes
- fix BOM bug fixes Ten BOM fixes, including Update Cost no longer saving unsaved form changes.
- fix Available Batch Report bug fixes fix(stock): Available Batch Report bug fixes
- fix Manufacturing Settings bug fixes Time Between Operations of 0 is no longer read as 10 minutes.
- fix Inventory Dimension review follow-up A backdated issue is no longer refused because of a later transfer within the dimension.
- fix Workstation Type bug fixes Type-only operations skip disabled workstations.
- fix Protect immutable ledgers and correct settings access … Deleting a cancelled transaction no longer removes immutable ledger entries, and Accounts User can read the settings that Chart of Accounts and deferred accounting need.
- fix Return only displayed fields in portal transaction list Portal quotation, order and invoice lists fetch only the fields each row shows, not whole documents.
- fix Resolve portal customers from portal users Issue and Timesheet portal lists use the Customer's Portal Users, like the document view. Portal document checks apply only to Customer and Supplier users.
- fix Restrict reference doctype, print format and resend email Restricts the reference DocType and print format of a Payment Request. The resend payment email uses the saved values.
- fix Correct achievement, permissions and sales team scope in item-group target variance reports Overall targets now count the holder's sales. Achieved figures respect the user's company, customer and territory permissions. The Sales Team join is limited to its parent doctype.
- fix Validate permission and company of reference document Checks read permission and company of the reference document when a Payment Request is saved.
- fix Correct achievement, permissions and sales team scope in item-group target variance reports fix: correct achievement, permissions and sales team scope in item-group target variance reports
- fix Correct achievement, permissions and sales team scope in item-group target variance reports fix: correct achievement, permissions and sales team scope in item-group target variance reports
- fix Sales Order Analysis permissions, closed orders, credit notes and warehouse filter fix: Sales Order Analysis permissions, closed orders, credit notes and warehouse filter
- fix Permissions, duplicate reasons and value split in Lost Quotations report Figures are limited to quotations the user can see. A value counts once per reason and is split evenly across reasons, so Lost Value % sums to 100%.
- fix Permissions, duplicate reasons and value split in Lost Quotations report fix: permissions, duplicate reasons and value split in Lost Quotations report
- fix Restrict sales partner summary reports to permitted companies The Sales Partner Commission and Transaction Summary reports now include only companies the user may access.
- fix Permissions, duplicate reasons and value split in Lost Quotations report fix: permissions, duplicate reasons and value split in Lost Quotations report
- fix Restrict sales partner summary reports to permitted companies fix: restrict sales partner summary reports to permitted companies
- fix Respect stock summary permissions and warehouse groups Stock Summary honours Item User Permissions. Selecting a group warehouse shows stock from its child warehouses.
- fix Restrict sales partner summary reports to permitted companies fix: restrict sales partner summary reports to permitted companies
- fix Apply read permissions in Item Where Used report Lists only BOMs, Product Bundles and other documents the user can read, and checks read permission on the selected Item.
- fix Correct warehouse capacity sorting and permissions Sorting covers all rules instead of one page, Putaway Rule and Item permissions apply, and a nonexistent parent warehouse no longer raises a TypeError.
- fix Check document access in SLA reset and payment reference count Resetting an SLA requires write access to the document, and the payment reference count requires read access to the voucher.
- fix Check sales order read in get_work_order_items fix(selling): check sales order read in get_work_order_items
- fix Open the banking page only for desk users fix(accounts): open the banking page only for desk users
- fix Permissions, credit notes, Closed orders and modernization in Inactive Customers report fix: permissions, credit notes, Closed orders and modernization in Inactive Customers report
- fix Permissions, credit notes, Closed orders and modernization in Inactive Customers report Enforces territory and customer group permissions, ignores credit notes when judging orders, and prorates partly delivered Closed orders.
- fix Apply user permissions in payment ledger report fix: apply user permissions in payment ledger report
- fix Validate inclusive referenced tax rows Inclusive On Previous Row Total taxes now check the referenced row, so item rates match net amount plus included taxes.
- fix Block disabling payment methods used by POS profiles Disabling a Mode of Payment is blocked when a POS Profile uses it. The check previously looked in the wrong table.
- fix Reset sales order advance paid on unreconcile Unreconciling an advance resets the Sales Order's Advance Paid amount.
- fix Filter BOM search status and retain direct sub-assembly matches Draft and cancelled BOMs and Product Bundles are excluded. Direct sub-assembly matches stay in the results.
- fix Filter batch expiry by report date Available Batch Report excludes batches that expired before the selected date, not only when the date is today.
- fix Use opening history in Incorrect Serial No Valuation Serials received before the period count toward the opening, so they are no longer flagged as incorrect.
- fix Correct serial number status report columns Serial No Status shows a Status column, so Delivered and Consumed serials can be told apart.
- fix Preserve forward trace direction Forward traces keep their direction, instead of marking positive finished goods as Backward.
- fix Include sales invoice qty in recommended reorder level Delivered quantity now includes Delivery Notes and Sales Invoices with Update Stock, so the reorder level is not understated.
- fix Validate bank ledgers and exclude disabled defaults A Company Bank Account must link to a Bank ledger of its own company, and a disabled account cannot stay as the default.
- fix Preserve opening invoice balances Opening invoices convert the entered company-currency amount into the party's currency, instead of posting the raw amount.
- fix Respect As on Date, fix returns and list asset receipts Uses the As on Date for billing and returns, and lists asset receipts.
- fix Respect as on date, debit notes and service rows Uses the As on Date for receipt and billing, and handles debit notes and service rows.
- fix Require a positive default factor and allow editing the default Shift-based schedules need a positive default factor, and the default can now be edited.
- fix Restore schedule on cancel and keep booked entries Cancelling an allocation restores the previous depreciation schedule and keeps entries already booked.
- fix Match special-character filters, update codes on re-import, report rows Import filters containing & or apostrophes now match, re-imports update existing codes, and row results are reported.
- fix Average calendar time and add a company filter Averages calendar time only, instead of mixing it with SLA working time, and adds a company filter.
- fix Refresh exchange rate on auto-repeated documents Auto Repeat fetches the exchange rate for the new posting date. If no rate is found, it stops the schedule and notifies the owner.
- fix Bound link option results in ar, ap and gl report filters The Party filter loads a bounded set of options, so the browser no longer freezes on large customer lists.
- fix Fetch buying exchange rate in supplier quotation (backport) fix: fetch buying exchange rate in supplier quotation (backport)
- fix Fetch buying exchange rate in supplier quotation Supplier Quotation uses the buying rate and POS Invoice uses the selling rate, instead of the latest rate of either type.
- fix Item dashboard add dialog rate The Rate field in the Add dialog is prefilled, and an empty rate no longer fails Create Stock Entry.
- fix Fetch buying exchange rate in supplier quotation (backport) fix: fetch buying exchange rate in supplier quotation (backport)
- fix Item dashboard add dialog rate (backport) fix: item dashboard add dialog rate (backport)
- fix Item dashboard add dialog rate (backport) fix: item dashboard add dialog rate (backport)
- fix Save edited notes through the document Edited CRM notes are saved through the document, the same way adding and deleting notes works.
- fix Remove demo account from Philippines chart Removes the "Raw Materials - Demo" account, so new companies no longer get it in their production chart.
- fix Clean file name and escape values in code list import The file name of an imported Genericode file is cleaned before it is saved.
- fix Fetch only displayed columns in portal project list The portal project list fetches only the columns it shows.
- fix Embed only quotation fields on the RFQ portal page The supplier RFQ portal page embeds only the fields the quotation form uses.
- fix Item-wise Sales History respects user permissions Limits rows and the chart to Sales Orders the user may see, since the chart had leaked other customers' totals.
- fix Item-wise Sales History respects user permissions Item-wise Sales History respects user permissions
- fix Item-wise Sales History respects user permissions Item-wise Sales History respects user permissions
- fix Make the Set as Lost primary action use dialog values Fixes a false "Lost Reasons missing" error on slow connections for Opportunity and Quotation.
- fix Use values passed to dialog primary actions Removes redundant second get_values() calls in dialog handlers that caused false "Missing Values Required" errors.
- fix Purchase Invoice Trends falls back to posting date Invoices with no bill date now appear in the Billing Date view using their posting date.
- fix Item-wise Purchase Register fixes Includes other charges in the total, fixes child item groups, PO receipts and the percent-of-total column.
- fix Asset Maintenance next due date, status, ToDos and deletion Fixes an end date that blanked the next due date, plus In Maintenance status and ToDo handling.
- fix Telephony Call Type search and submitted-only types Fixes Call Type search in the incoming call popup and accepts only submitted Call Types.
- fix Accounts Payable Summary fixes Adds the not-yet-due column to the party total and fixes GL balance and advance in summaries.
- fix Calculated Discount Mismatch fixes Lets accounts roles run the report and returns numeric amounts.
- fix Deferred Revenue and Expense forecast past last fiscal year Fixes a report failure when a service period runs past the last created fiscal year.
- fix BOM Update Log bug fixes Update Cost now completes when there is no leaf BOM, and fixes four other log bugs.
- fix Bank Clearance Summary matches bank amounts Matches bank amounts for taxed payments, POS and foreign invoices.
- fix Production Plan Schedule bug fixes Editing a draft plan now replaces its old schedule instead of keeping stale workstation bookings.
- fix Workstation bug fixes Fixes six Workstation bugs, including Manufacture entry and split-shift scheduling order.
- fix Stock Entry bug fixes Fixes eleven Stock Entry bugs, including Repack, Material Issue and Disassemble cases.
- fix Sales Forecast bug fixes Generated periods now start on From Date, so the first week or month is no longer skipped.
- fix Putaway Rule bug fixes Keeps the rejected quantity on rows rebuilt by Apply Putaway Rule.
- fix Keep each source's discount when combining documents Each row keeps its source's additional discount, so combining documents no longer applies the last discount to every row.
- fix Count all payments, use company currency and fix POS view Payments from different sources with equal amounts are now all counted, instead of being merged by UNION. Amounts are shown in company currency.
- fix Value, date and cancel consumed stock with the repair, keep asset status in sync Consumed stock is valued from the Stock Entry's outgoing value, so the asset value matches the GL. Cancelling a repair also reverses its consumed stock.
- fix Add permission checks from the bug reviews (backport #59935) Applies permission checks to the Project Summary, Delayed Tasks Summary, Item-wise Purchase History and Purchase Order Analysis reports.
- fix Check task read permission before listing its child tasks (backport #60152) Checks read permission on the task before listing its child tasks.
- fix Check task read permission before listing its child tasks (backport #60152) v15 backport of the child task permission check.
- fix Request for Quotation and Supplier Quotation bug review fixes (backport #59855) Same supplier portal fixes on the v15 line.
- fix Add permission checks from the bug reviews (backport #59935) Same permission checks on the v16 line.
- fix Request for Quotation and Supplier Quotation bug review fixes (backport #59855) Keeps draft and cancelled RFQs off the supplier portal, and builds portal quotations from the RFQ's own rows.
- fix Hide fully returned delivery notes in Get Items From Fully returned delivery notes no longer appear in Get Items From, which stopped batch invoicing with "already invoiced/returned".
- fix Hide fully returned delivery notes in Get Items From (backport #60602) v16 hotfix backport of the returned delivery note fix.
- fix Support favorite articles page views Web Page View queries no longer join across databases, so favourite article page views work with SQLite log storage.
- fix Filter Delivery Note list indicators on status Clicking a Delivery Note indicator filters by status, not per_billed, so "To Bill" no longer also matches "Return Issued" notes.
- fix Accept supplier invoice date objects Accepts a date object for the supplier invoice date, so Purchase Invoices created from Purchase Receipts with a custom date field no longer fail.
- fix Export linked contacts and addresses with records Customer and Supplier exports include their linked Contacts and Addresses, so the file can be edited and imported back.
- fix Task bug review fixes (backport #59870) Reschedules dependent tasks, allows timesheets outside expected dates, clears Overdue when dates move, and allows deleting subtasks.
- fix Fix YouTube batch update and read video ids from all URL forms The batch YouTube statistics update now writes to the Video it matches, and video ids are read from every URL form.
- fix Projects masters and settings bug review fixes (backport #59864) v15 backport of the projects masters fixes.
- fix Projects masters and settings bug review fixes (backport #59864) Checks activity cost uniqueness per employee, refuses disabled activity types and templates, and validates project template tasks.
- fix Projects reports bug review fixes (backport #59863) Groups issued items by project, counts update-stock invoices as delivered, and leaves cancelled and template tasks out of delayed tasks.
- fix Timesheet bug review fixes (backport #59867) Bills the right time logs, uses the timesheet currency and exchange rate, and computes amounts when no activity rate is found.
- fix Follow-up fixes for the bug review PRs (backport #60280) v16 hotfix backport of the follow-up fixes.
- fix Follow-up fixes for the bug review PRs (backport #60280) Counts packed qty on Delivery Note returns, treats empty project fields as unset on time logs, and checks BOM required qty per raw material.
- fix Purchase Order bug review fixes (backport #59832) Resets the Sales Order delivery on drop-ship cancel, refuses UOM changes on received rows, and links inter-company orders.
- fix Procurement Tracker and subcontracting reports bug review fixes (backport #59868) Lists every Purchase Order line, adds up every invoice in actual cost, and keeps unordered request rows.
- fix Purchase Order bug review fixes (backport #59832) v16 hotfix backport of the Purchase Order fixes.
- fix Purchase reports bug review fixes (backport #59865) Includes child item groups in the purchase history filter, runs without dates, and counts analytics quantities in stock UOM.
- fix Procurement Tracker and subcontracting reports bug review fixes (backport #59868) v16 hotfix backport of the Procurement Tracker fixes.
- fix Keep Procurement Tracker actual cost in company currency (backport #59911) Keeps Procurement Tracker actual cost in company currency.
- fix Purchase reports bug review fixes (backport #59865) v16 hotfix backport of the purchase reports fixes.
- fix Supplier Scorecard bug review fixes (backport #59869) Validates scorecard formulas with zero variables and manual periods, and counts only submitted orders in late days.
- fix Buying Settings and Supplier bug review fixes (backport #59871) v16 hotfix backport of the Buying Settings fixes.
- fix Supplier Scorecard bug review fixes (backport #59869) v16 hotfix backport of the Supplier Scorecard fixes.
- fix Buying Settings and Supplier bug review fixes (backport #59871) Applies blanket order allowance, skips receipt checks on returns and stock-updating invoices, and honours disabled suppliers.
- fix Skip schedule date reset when the doctype has no such field Changing a Supplier Quotation's date no longer fails with "Field schedule_date not found" on v15.
- fix Fixes for review findings on the projects backports Set Project Status closes tasks without moving the planned dates of their dependents.
- fix Fixes for review findings on the maintenance and projects backports A schedule where every day is a holiday is refused with a message, instead of putting visits on a holiday.
- fix Translate document type labels in Sales Analytics "All" view Document type names in the Sales Analytics "All" view are translated into the user's language.
- fix Keep Include Closed Orders out of the other trends reports The Include Closed Orders option applies only to its own report.
- fix Translate document type labels in Sales Analytics "All" view (backport #60575) v15 backport of the translation fix.
- fix Keep Include Closed Orders out of the other trends reports (backport #59912) v16 hotfix backport of the trends report fix.
- fix Quality Management bug review fixes (backport #59872) Keeps scheduled quality reviews open until reviewed, creates one review per goal and day, and reviews quarterly goals on their date.
- fix Quality Management bug review fixes (backport #59872) v16 hotfix backport of the Quality Management fixes.
- fix Take back additional costs on Subcontracting Receipt returns (backport #59913) Takes back additional costs on Subcontracting Receipt returns, so they are not spread over rejected rows again.
- fix Sync only the selected account and skip failing transactions Later pages of a sync kept the account filter, so syncing one account no longer imports other accounts' transactions.
- fix User permissions, credit notes and company and date filters Invoice totals are read with the user's permissions, so only invoices the user can read are counted.
- fix Respect permissions in downtime analysis The Downtime Analysis chart no longer shows workstation names and totals the user cannot access.
- fix Company permission and balance sheet openings at the closing rate The report checks read permission on every selected company before running.
- fix List only payments against invoices and apply user permissions The report lists only payments and applies user permissions.
- fix Label the company currency total column correctly The report keeps only rows whose Customer or Supplier the user can read.
- fix Add finance book filters to exclude other books' entries Parties are read with the user's permissions, and the report filters by finance book.
- fix Filter by finance book, skip closing entries The report reads dimension values and GL entries with the user's permissions.
- fix Split metrics, receiving inbox, list status validation, sent-mail issues and assignments Portal users can no longer set an issue's customer or status. Those values come from the saved issue.
- fix Correct serial ledger filters and row details Serial Ledger includes child warehouses for a group, applies warehouse permissions to every row, and returns rows when As On Date is cleared.
- fix Filter serial service contract expiry report The Serial No service contract expiry report no longer shows consumed or delivered serials without a contract.
- fix Delivery Trip bug fixes Nine Delivery Trip bugs are fixed. A removed stop no longer leaves its Delivery Note linked to the trip.
- fix Stock Reconciliation bug fixes Eight Stock Reconciliation bugs are fixed, each with its own regression test.
- fix Subcontracting receipt bug review fixes Eleven Subcontracting Receipt bugs are fixed, including rejected-only rows consuming raw material.
- fix Subcontracting Order and Subcontracting BOM bug review fixes Subcontracting Order and Subcontracting BOM bugs from the bug review are fixed, one commit and test each.
- fix Recalculate totals on disable rounded total toggle Toggling Disable Rounded Total updates Rounded Total and Rounding Adjustment immediately.
- fix Update requested quantities for subcontracting Submitting a subcontracting Material Request updates the Sales Order Item's requested quantity, so later requests don't double-count it.
- fix Flag allocations to cancelled invoices and deleted vouchers Payment ledger rows still pointing at cancelled invoices are reported.
- fix Allocate POS change once per invoice (v15 backport) POS change is allocated once per invoice.
- fix Count every issue in exactly one time slot Issues created after 11 PM are counted in a slot.
- fix Correct assignee averages, SLA counts and Assigned To filter Assignee averages no longer count missing values as zero.
- fix Periods, quarters, user permissions and assigned to filter Periods beyond 52 are no longer cut off, and the report applies user permissions.
- fix Count other operating and investment income in the ratios template The Financial Ratios Analysis template includes other operating and investment income in profit.
- fix Require API key and frequency to enable YouTube tracking YouTube tracking can't be enabled without an API key and frequency.
- fix Show parent company as text Permissions on a parent company no longer hide a subsidiary's rows.
- fix Drop the ageing chart when companies use different currencies The ageing chart is dropped when companies use different currencies, instead of mixing them.
- fix Return no rows for a shareholder that does not exist A saved report for a deleted shareholder returns no rows, instead of raising an error.
- fix Keep amounts at different rates in separate rows Amounts at different withholding rates are no longer merged into one row.
- fix Call summaries, transferred agent and linking customers and past calls The agent who took a call can save its summary.
- fix Resolved by, closed claims, cancel with active visits and warranty status date Five Warranty Claim bugs are fixed, including a Sales Person written into Resolved By.
- fix Fix deposit sign and paid purchase invoices Deposits no longer show as withdrawals.
- fix Children of every selected group and refunds of earlier credit notes Children of every selected cost center group are included.
- fix Follow-up fixes for the bug review PRs Follow-up fixes from a second review of the bug review PRs, including supplier hold, each with a test.
- fix Task status in embedded list Task status shows correctly in the embedded list.
- fix Invalid depends_on expression in stock entry report view Opening a Stock Entry preview from Report View in a fresh tab no longer fails with an invalid depends_on expression.
- fix Correct work order dashboard values and translations Duplicated Work Orders no longer show "NaN items produced", and operation statuses are translated.
- fix Run negative batch report in the background The Negative Batch Report runs in the background, so large sites don't hit the web-request timeout.
- fix Pick List bug fixes Fixes 15 Pick List bugs, including Delivery Note and Sales Invoice overwriting each other's delivered qty. Each fix has a regression test.
- fix Repost Item Valuation bug fixes Fixes 6 bugs, including a backdated entry submitted during a running repost losing its own repost.
- fix Delivery Note bug fixes Fixes 8 Delivery Note bugs from the bug review, each with a regression test.
- fix Serial and Batch Bundle bug fixes Fixes 4 bugs, including a standalone bundle changing batch valuation without a Stock Ledger Entry.
- fix Inventory Dimension bug fixes Fixes 5 bugs, including a mandatory dimension being created as optional because the document field's dict was mutated.
- fix Use the quality inspection's own template for job card criteria Job Card inspections judge readings against the quality inspection's own template, not the Item's.
- fix Require company The Company filter is now mandatory, so the report always runs for one company.
- refactor Compare stock ageing slots regardless of order test(stock): compare stock ageing slots regardless of order
- refactor Compare stock ageing slots regardless of order (v16) test(stock): compare stock ageing slots regardless of order (v16)
- refactor Drop redundant tests test: drop redundant tests
- refactor Restore checks that #61087 dropped test: restore checks that #61087 dropped
- refactor Build slow test fixtures once test: build slow test fixtures once
- refactor Speed up the slowest stock ledger tests test(stock): speed up the slowest stock ledger tests
- refactor Build subcontracting fixtures once test: build subcontracting fixtures once
- refactor Speed up the slowest accounts tests test(accounts): speed up the slowest accounts tests
- refactor Speed up the slowest stock and misc tests test(stock): speed up the slowest stock and misc tests
- refactor Allow barredterra and vorasmit to queue PRs chore: allow barredterra and vorasmit to queue PRs
- refactor Check one merge queue batch at a time ci: check one merge queue batch at a time
- refactor Check two merge queue batches at a time ci: check two merge queue batches at a time
- refactor Stop retrying failed merge queue batches ci: stop retrying failed merge queue batches
- refactor Drop the nightly MariaDB run ci: drop the nightly MariaDB run
- refactor Enable mergify queue comment ci: enable mergify queue comment
- refactor Start batches after 15 minutes instead of 30 ci: start batches after 15 minutes instead of 30
- refactor Merge merge-alone PRs without an approval ci: merge merge-alone PRs without an approval
- refactor Add post-review workflow for frappe-pr-bot reviews ci: add post-review workflow for frappe-pr-bot reviews
- refactor Cancel test runs when Mergify closes a batch PR (version-15-hotfix) ci: cancel test runs when Mergify closes a batch PR (version-15-hotfix)
- refactor Cancel test runs when Mergify closes a batch PR (version-16-hotfix) ci: cancel test runs when Mergify closes a batch PR (version-16-hotfix)
- refactor Stop other labels restarting label-triggered tests (version-15-hotfix) ci: stop other labels restarting label-triggered tests (version-15-hotfix)
- refactor Cancel test runs when Mergify closes a batch PR (develop) ci: cancel test runs when Mergify closes a batch PR (develop)
- refactor Stop other labels restarting label-triggered tests (develop) ci: stop other labels restarting label-triggered tests (develop)
- refactor Stop other labels restarting label-triggered tests (version-16-hotfix) ci: stop other labels restarting label-triggered tests (version-16-hotfix)
- refactor Keep staged benches for 24h so failed-only reruns work ci(mariadb): keep staged benches for 24h so failed-only reruns work
- refactor Queue hotfix PRs through Mergify and test release PRs fully ci: queue hotfix PRs through Mergify and test release PRs fully
- refactor Test version-16-hotfix merges in Mergify batches ci: test version-16-hotfix merges in Mergify batches
- refactor Test version-15-hotfix merges in Mergify batches ci: test version-15-hotfix merges in Mergify batches
- refactor Queue PRs without an approval ci: queue PRs without an approval
- refactor Test develop merges in Mergify batches ci: test develop merges in Mergify batches
- refactor Create payment ledger test users without welcome email test: create payment ledger test users without welcome email
- refactor Frappe-pr-bot commands and how to ask it for a review docs: frappe-pr-bot commands and how to ask it for a review
- refactor Assert permitted company still visible in sales partner summary test: assert permitted company still visible in sales partner summary
- refactor Add accounts-code-review agent skill Add accounts-code-review agent skill
- refactor Limit delivery note query to notes created in test Limits the delivery note test query to notes created in the test.
- refactor Add OSS Scanner build and security contact Keeps the OSS Scanner build and threat model in the ERPNext repository.
- refactor Test coverage Adds a regression test for Bank Statement Import through the shared importer.
- feat Show Holiday List Assignment in Holiday List connections The Holiday List connections tab shows which employees and companies use the list.
- perf Batch feedback counts in appraisal overview Appraisal Overview fetches feedback counts in one grouped query instead of one per appraisal.
- fix Perm errors for employees on holidays, approvers and HRA declaration fix(hrms): perm errors for employees on holidays, approvers and HRA declaration
- fix Validate records in attendance, leave expiry and roster methods (v15) Adds record-level validation to the attendance, leave expiry and roster methods.
- fix Expense claims: allow roles with write access to create claims for other employees Expense claims: allow roles with write access to create claims for other employees
See all 9 changes
- fix Select employee before advance account Select employee before advance account
- fix Update telemetry milestone claim to hide duplicate name message Saving a second document no longer shows a red duplicate-name dialog for a telemetry milestone that already exists.
- refactor Drop verbose flag from bench init in POT workflow ci: drop verbose flag from bench init in POT workflow
- refactor Leave test for leave allocation error logs Reads error logs from the log database so CI passes on develop.
- feat Link the docs from every Automation & Rules settings page Adds a "View documentation" icon to Assignment Rules, SLA Policies and Forms, as Workflow Automations already has.
- feat Group leads and deals into a summary with counts and totals Adds a Group button to Leads and Deals list views with counts and aggregates, saved on the view.
- feat Shorter, consistent settings page descriptions and titles Shorter, consistent settings page descriptions and titles
- feat Create a deal from a contact or organization page Adds a New Deal button to the Contact page and the Organization page's Deals tab, with the contact and organization pre-filled.
- feat Notes refresh – view, linked record, copy link, mentions and pinning Adds a read-only note view, shows the linked lead or deal on note cards, adds Copy link, and mentions and pinning for notes.
See all 24 changes
- feat Let each user set the default email subject for leads and deals Each user can set a default email subject for leads and deals in Email Settings, using fields such as organization. It can still be changed before sending.
- fix Keep the default view when a standard view is edited Saving a standard view no longer resets its default setting, so a default view such as Group By keeps opening on load.
- fix Use the tasks icon on the empty Tasks list The empty Tasks list shows the tasks icon from the sidebar instead of an envelope.
- feat Warn and block send when an email recipient has unsubscribed feat: warn and block send when an email recipient has unsubscribed
- feat Make kanban activity counts clickable in Leads and Deals Clicking a count on a Kanban card opens the record on that tab.
- feat Migrate to frappe-ui 1.0.0-rc.2 *(Listed under Refactors.)*
- feat Enrich button states, undo and enriched-field icons Disables Enrich without a website, shows progress, and asks before re-enriching a record.
- feat Data enrichment for Lead, Deal and Organization Backports the data enrichment feature with its sitemap, settings and button changes.
- feat Tidy up enrichment settings layout Tidy up enrichment settings layout
- feat Data import page built on the new framework components *(Listed under Refactors.)*
- fix Tighten access checks on enrichment runs Tighten access checks on enrichment runs
- fix Keep lead notes visible in deal activity groups Keep lead notes visible in deal activity groups
- fix Enrichment edge cases Enrichment edge cases
- fix Replace removed surface-modal tokens Swaps removed tokens for surface-elevation-2 so grid rows and workflow error nodes are no longer transparent.
- fix Show users in email multiselect The users list was always empty because a Pinia store value was destructured without storeToRefs.
- fix Use EmailMultiSelect from develop for email and user inputs Replaces the old recipient inputs with the develop component, whose dropdown had a transparent background.
- fix Skip desk setup wizard for Frappe Cloud signups Frappe Cloud signups skip the desk setup wizard, since their details were already saved.
- refactor Minor release v1.88.0 Minor release v1.88.0
- refactor Clear old Exotel error logs through the document API Clear old Exotel error logs through the document API
- feat Say when a search or filter matched nothing An empty search result says "Nothing matches" and offers a Clear filters button, on Courses, Batches, Jobs and Programs.
- fix Evaluator save and currency picker access The evaluator on a member's open certificate request can now save it. Moderators keep their access.
- fix Translate assessment type labels The Quiz, Assignment and Programming Exercise labels in Add Assessment are now translated.
- fix Check required fields before creating a record New Course, New Batch and New Assignment check required fields first and name the missing one, instead of sending an empty form.
- fix Fetch batch courses once the batch name is known Batch courses are requested once the batch name is known, so moving between batches no longer keeps the old batch's courses.
See all 59 changes
- fix Mark required sign-up fields Full Name and Email on sign-up show a required marker, so users can see what the disabled button is waiting for.
- fix Course page progress and certificate PDFs without letter head The course card shows the learner's progress, and certificate PDFs render when the site's default Letter Head would fail.
- fix Show a neutral note for unknown content blocks Unknown lesson blocks show "This content is not available" instead of EditorJS's internal type name.
- fix Let quizzes without questions count as passed fix: let quizzes without questions count as passed
- fix Hide lesson progress for guests and explain locked lessons fix: hide lesson progress for guests and explain locked lessons
- fix Job logo fallback and relative times in the site timezone fix: job logo fallback and relative times in the site timezone
- fix Keep the settings dialog content within its width fix: keep the settings dialog content within its width
- fix Mark the invoicing consent checkbox as required fix: mark the invoicing consent checkbox as required
- fix Batch page not-found state and Published badge for managers only A batch the viewer can't see shows a Not Found page instead of a blank one, and the Published badge is shown only to managers.
- fix Batch enroll button, reason when closed, and login redirect Batches without a seat count show Register or Enroll, and the overlay explains why enrolment is unavailable. Guest login returns to the same page.
- feat Paging, missing inputs and fixes for scripts that use the API Home page lists take start and limit_page_length, My batches can include past batches, and live classes return their batch and time.
- feat Make course and batch creation easier to find Adds New Course and New Batch buttons beside their Import menus.
- feat Send each step a site takes to Pulse Sends each setup step a site takes, such as publishing a course or enrolling a learner, to Pulse, with a flag for the site's first step. Names and titles are never sent.
- feat Polish save tooltip, preview badge and lesson title focus ring The save tooltip is plain text, the preview badge uses theme colors, and the lesson title has a focus ring.
- fix Course ZIP import and lesson file types Course ZIP import opens only the ZIP the importer uploaded. Private lesson files keep their stored type.
- fix Course ZIP re-upload, chart ranges and guest access for statistics and jobs A course ZIP can be re-imported when the same bytes were already uploaded by someone else. Chart ranges and guest access for statistics and jobs are also fixed.
- fix Compare batch dates with getdate Batch date checks compare dates on both sides, which fixes a TypeError on partial REST updates.
- fix Return no results when the search index is missing Ctrl+K search returns no results while the index is missing, instead of showing "Could not search just now" on every keystroke.
- fix Count only course lessons and cap progress at 100 Progress counts only lessons still in the course, so it can no longer exceed 100%.
- fix Floor quiz submission score at zero With negative marking, a score can no longer go below 0.
- fix Award badges to owner and skip manual ones on save fix: award badges to owner and skip manual ones on save
- fix Live classes use only the batch's or your own conferencing account, and only instructors schedule Stops anyone from using another member's Zoom or Meet account, and removes scheduling rights from batch evaluators.
- fix Nine small bugs surfaced by the test cleanup Nine small bugs surfaced by the test cleanup
- fix Let enrolled students open unpublished courses Course detail no longer redirects enrolled students away from a course that was unpublished.
- fix Scope evaluation edits and show saved assignment work to graders Checks the course and batch assignment on every evaluation save, not just create, so an evaluator cannot move a Pass onto a course or member they do not evaluate.
- fix Scope evaluation edits and show saved assignment work to graders (backport #2954) v16 hotfix backport of the evaluation scope fix.
- fix Keep child rows and unsaved state on program save Saving a program keeps course rows past the 20th and keeps the unsaved badge when a save fails.
- fix Scope evaluation edits and show saved assignment work to graders (backport #2954) v15 backport of the evaluation scope fix.
- fix Limit restricted-batch self-enrollment to that batch's staff Only that batch's tagged instructors and evaluators, Moderators and site admins can self-enroll in a batch closed to self-enrollment.
- fix Send no caller another user's email LMS endpoints no longer return another user's login email in name, owner, evaluator, member or sender fields, staff included. Callers still get their own.
- fix Escape the invite code on the sign-up page Escapes the invite_code query parameter on the sign-up page, which blocks markup injection from a crafted link.
- fix Export only course files the exporter may read Course export includes only assets the exporter can read. This closes a path traversal through lesson upload URLs and a leak of other users' private files.
- fix Keep closed jobs and unpublished drafts out of guest reads Closed jobs and unpublished courses and batches stay hidden from guests in lists, details and meta tags.
- fix Keep learners' emails private on invites, and retry invites Google fails Invites go out on a private Google event with the guest list hidden. Learners whose invite failed are retried.
- fix Limit enrolments and lesson notes to the people they belong to Enrolments are visible only to the learner, the course authors and the batch instructors. Lesson notes are visible only to the learner who wrote them.
- fix Limit onboarding lookups to managers and whitelist the batch one Restricts the first-course and first-batch lookups to System Managers and Moderators, and whitelists the batch lookup so its step stops returning 403.
- fix Persist reordered courses Keeps the course order from the drag and drop and saves the new order with the next Program save.
- fix Enrol program learners through the program's member table Self-enrollment writes program member rows under a row lock, and a patch repairs rows saved under the wrong parentfield.
- fix Retry invites while the calendar does not push Inviting fails while Google push is off, so the class stays in Retrying and the learners are invited once push is back on.
- fix Quiz rejects repeated questions A quiz submission holds exactly one result row per question, so a total can no longer exceed score_out_of.
- fix Refuse a first name of only spaces The Edit Profile form rejects a first name made of only spaces before it sends the save.
- fix Inverted discount calculation for fixed amount coupons Fixed-amount coupons were charging the coupon value instead of the price minus the discount. A ₹1,000 course with a ₹200 coupon now charges ₹800.
- fix Assessment placement scope and settings review findings Placing another author's assessment in your lesson no longer makes it editable. Write, delete and share stay with its authors.
- refactor Update POT file chore: update POT file
- refactor Update POT file chore: update POT file
- refactor Read error logs through get_all, not frappe.db.count Reads the newest alert row through get_all, since error log tables moved to the log database.
- refactor Merge version-15-hotfix into version-15 Merges the v15 hotfix branch into v15.
- refactor Merge develop into version-15-hotfix Brings ten develop PRs onto the v15 hotfix line.
- refactor Merge develop into version-16-hotfix Brings ten develop PRs onto the v16 hotfix line.
- refactor Merge version-16-hotfix into version-16 Merges the v16 hotfix branch into v16.
- refactor Merge develop into version-15-hotfix Brings develop onto the v15 line, replaying 44 PRs and leaving out the frappe-ui rc.1 upgrade.
- refactor Merge develop into version-16-hotfix Brings develop onto the v16 line, replaying 48 PRs and leaving out the frappe-ui rc.1 upgrade.
- refactor Revert "chore: update POT file (backport #2913)" Reverts the POT backport that conflicted on almost every entry.
- refactor Merge 'main-hotfix' into 'main' Automated weekly release merge.
b
Builder
5 new features · 1 speed-ups · 1 fixes
- feat Bob / commands for models, providers and credits AI settings move from the Settings dialog into Bob's composer as slash commands, such as /model, with a single menu.
- feat Let extensions edit the page and add more surfaces Extensions get methods to edit documents, blocks, state and windows, plus a context menu, property sections, a left panel tab and a settings page.
- feat Let an extension create and change its own doctypes Extensions can create, read, update and delete their own custom doctypes, with a permission check and a confirmation dialog.
- feat Install extensions from Builder Hub and manage them in the editor Extensions install from Builder Hub in a queued job, and an Extensions panel is added to the editor.
- feat Add the extension protocol, frame host and toolbar surface Adds the editor-to-extension protocol, the frames that run extensions, a dev loader, and toolbar buttons as the first extension surface.
See all 7 changes
- perf Resolve the @ alias with import.meta.dirname Removes the Vite config warning about __dirname, so the alias resolves with import.meta.dirname.
- fix Require the frappe release that ships @framework/ui telemetry Builder declares the minimum Frappe release that ships the telemetry module, so an older bench no longer fails the asset build.
- feat Filter the panel by read state and category Adds All/Unread and category filters to the notifications panel, applied on the server with Load more paging through the filtered feed.
- fix Customer manager portal permissions Customer Manager invitees get both the HD Customer and HD Customer Manager roles, and doctype permissions are added so they can open tickets instead of seeing "Ticket not found".
- fix Opening a ticket doesn't clear its notification count Tickets are marked seen on every switch and on mobile, and the sidebar count refreshes. Needs frappe/frappe#43658.
- fix Validate json_value and keep the string null Validate json_value and keep the string null
- fix Match ERPNext dashboard templates to ERPNext reports Aligns AR/AP, cash flow and other dashboard templates with the ERPNext reports users compare them against.
- fix Validate json_value and keep the string null Validate json_value and keep the string null
- fix Cap every DuckDB connection, never above DuckDB's default Sets a memory limit on every DuckDB connection from the site config or 4 GB, whichever is lower. This stops a large compaction copy from being OOM-killed on insights.frappe.io.
- fix Pass the marketplace semgrep check Clears 34 blocking semgrep findings for the version-3 release. Endpoints that committed writes by hand now take POST, and an import job scrubs table names during validation.
See all 13 changes
- fix Pass the marketplace semgrep check Clears 9 blocking semgrep findings for the develop release, using the same changes as the version-3 fix.
- fix Cap Frappe version range to supported versions Limits the version-3 branch to Frappe 15 and 16, so it is not offered to Frappe 17.
- fix Cap Frappe version range to supported versions Limits the develop branch to Frappe 17 dev, so it no longer installs on Frappe 15 or 16 benches where the asset build fails.
- fix Copy every row at a cursor value an import stops on Table Import no longer skips rows that share the cursor value where it stopped, either within a run or in later runs. Second-precision and date cursors were the usual cases.
- refactor Upgrade frappe-ui to 1.0.2 chore(deps): upgrade frappe-ui to 1.0.2
- refactor Merge 'version-3-hotfix' into 'version-3' Merge 'version-3-hotfix' into 'version-3'
- refactor Merge version-3 into version-3-hotfix Merge version-3 into version-3-hotfix
- refactor Publish prebuilt assets for Pilot Publishes prebuilt assets for the version-3 release so Pilot benches can install them.
p
Payments
1 fixes · 1 refactors
p
Press
3 new features · 9 fixes
- feat Record when each build step ended Adds an End Time field to Deploy Candidate Build Step, set the first time the step's DONE line is seen.
- feat Turn the asset store back on for public groups Same asset store change on the press line.
- feat Add Skip Migrate option for the restore on destination Adds a Skip Migrate check to Site Migration, so a site can move even when migrate would fail on the destination.
- fix Apply Press Roles to notifications, incidents and benches Restricted team members no longer see notifications, incidents or benches outside their Press Role.
- fix Harden SSH, encryption key check, team 2FA and version log Sets SSH MaxAuthTries to 4, runs the encryption key check that never ran, and records changes to access-related doctypes in the version log.
See all 12 changes
- fix Open deploys, dependencies and jobs to support agents Support Access grants now cover the pipelines, builds and jobs under a release group or site, so agents can debug failed deploys.
- fix Keep asset store access out of the build Keep asset store access out of the build
- fix Correct OCI firewall attachment and detachment Correct OCI firewall attachment and detachment
- fix Mint the OAuth state on click and allow 30 minutes Mint the OAuth state on click and allow 30 minutes
- fix Don't chown Docker's data dir recursively Don't chown Docker's data dir recursively
- fix Send the storage limit notice to sites at 100% or more Send the storage limit notice to sites at 100% or more
- fix Draw uptime bars as flat, evenly spaced blocks Uptime bars are flat blocks with a fixed gap, and the date labels get their background, which bg-opacity could not apply to CSS variable colours.
o
Other
74 new features · 5 speed-ups · 89 fixes · 31 refactors
- feat Frappe-ui style axis, bars, legend and tooltip Axis charts get rounded bars, a nicer Y-axis step, a dotted grid, a new legend, and a tooltip beside the hovered column.
- fix Separate visiting sites from admin login Open site now goes to the regular site URL. Admin login is a separate action, so visiting no longer replaces the existing site session.
- fix Scroll menus that are taller than the screen Dropdowns and context menus stop at the screen edge and scroll, so items at the end can be reached.
- fix Hide site skeletons during cached refreshes Sites page shows skeletons only when nothing is cached. During a refresh the cached list stays visible.
- fix Restore usage card backgrounds Restores the card background on server and storage usage meters so each resource stands apart.
See all 199 changes
- fix Use logical start/end instead of left/right for prefix/suffix slots Prefix and suffix slots follow the page's text direction, so they work under dir="rtl".
- feat Pre-authorize... / fix(signups): close the gaps between free trials and billing Closes six gaps: restarting trials after a left trial, teams with unpaid invoices opening free servers, and trial servers not sleeping in production.
- feat App-declared processes and restarts without 502s Apps can declare background processes in `pyproject.toml` that the bench runs alongside their site.
- feat Host Suite sites on Frappe Cloud through Central and Pilot Adds a Hosting module that provisions servers and sites in Central, with a pool of ready sites per region.
- feat Choose SSH or TTY for the web console Members pick SSH or the serial console; Central no longer switches between them on its own.
- feat Answer the custom-domain pre-authorize check with the zone Lets Central check that custom domains point at the region, including domains behind a CDN.
- feat Add Metal Server Console to run a script on many hosts Runs one shell script as root across many Metal Servers at once, with live output per server.
- feat Onboarding feat: onboarding
- feat Compress memory and disk migration transfers Memory snapshots are zstd-compressed and disk blocks are sent as ZFS stores them, cutting VM downtime during migration.
- feat Advertise 04ccdb91 feat(gameplan): advertise 04ccdb91
- feat Advertise ec8679ad feat(gameplan): advertise ec8679ad
- feat Advertise b0d5d5c1 feat(insights): advertise b0d5d5c1
- feat Mobile app Packages the PWA as a native app with Capacitor.
- feat Support dynamic tab title for pages feat: support dynamic tab title for pages
- feat Raise the x86 CPU baseline to x86-64-v3 and add a host setting to boot VMs without a CPU template Guests on x86 hosts get the x86-64-v3 instruction set. An operator can boot a Metal Server's VMs without a CPU template.
- feat Pin the framework app to a commit on its branch pilot init --commit checks out the framework app at a commit and keeps it on its branch.
- feat Change the site plan from the billing tab Change plan opens an inline plan list in the billing tab. During a trial it shows when the welcome credit ends.
- feat Let Pilots read private repositories through a GitHub App Adds a GitHub tab in Central Settings. Pilots get a read-only token for one chosen repository, valid for about an hour.
- feat Connect GitHub through Frappe Cloud A Pilot managed by Frappe Cloud reads private repositories through the Frappe Cloud GitHub App, with no stored personal access token.
- feat Trial to paid upgrade and plan change progress page Trial users can upgrade from the console, and a public progress page follows a plan change until the site answers.
- feat Build Pilot images for a 1 GB VM with swap and lean memory settings Lets a Pilot bench with one site run on a 1 GB VM, by disabling unused services and adding a memory setup service at boot.
- feat Telemetry ping, garage node monitoring & clickhouse versioning feat: Telemetry ping, garage node monitoring & clickhouse versioning
- feat Integrate machine actions in cargo feat: Integrate machine actions in cargo
- feat Allow force app builds given the image feat: Allow force app builds given the image
- feat Search lists conversations, each opened on its newest match Search lists one row per conversation, the way a folder does, and opening it lands on the newest matching message.
- feat Settings-only configuration, tenant owners with the Suite Tenant role, optional tenant cluster Reads all configuration from Suite Cloud Settings, adds a TLS check for the Stalwart API, and lets tenant owners use the Suite Tenant role.
- feat One set of rules for Archive, Move, Junk and Trash Archive, Move, Junk and Trash follow one set of server-side rules, so every view files a conversation the same way.
- feat All Inboxes files by the same rules, with Unarchive All Inboxes files mail by the same rules as a single account, with one Undo that restores every account's moves.
- feat Add kamra to the registry Adds Kamra PMS, a property management system built on Frappe v16, to the app registry.
- feat Skip the backup and migrate when no app change needs a migrate Code- or asset-only updates skip the site backup and migrate, and only apps that need a migrate trigger one.
- feat Add an In Maintenance flag to Metal Server Hosts marked In Maintenance get no new VMs while their existing VMs keep running.
- feat Show the discussion sort dropdown in spaces too Spaces share one saved sort preference with the community feed.
- feat Show the Vector install of Configure Telemetry as an SSH Task The Vector install now runs as a visible SSH Task, and the button asks for confirmation first.
- feat Add a Re-install Firewall action to Metal Server Re-applies the host firewall without restarting metald.
- feat Move migration traffic from WireGuard to the private network Migration traffic uses the private IPv4 address by default, with a setting to move it back to WireGuard.
- feat Push Atlas and Metal telemetry to Datum Sends host, VM, migration and error metrics to the regional Datum, and installs Vector on each host.
- feat Monitor host hardware through the BMC Reads BMC health, sensors and event logs over Redfish every 5 minutes and sends them to Datum.
- feat Backport observability and BMC telemetry Backport observability and BMC telemetry
- feat Faster migrations Adds an optional memory snapshot migration so running VMs resume their state; disk-only remains the default.
- feat Tighter thread view, list and sidebar Tighter thread view, list and sidebar
- feat Authenticate to Suite Cloud as a tenant Replaces Suite Site with Suite Tenant, authenticated by id and secret.
- feat Authenticate to Suite Cloud as a tenant Suite Settings holds a tenant id and secret, and the client uses the Tenant authorization header.
- feat Create India-specific payroll configurations in job offer compensation Adds EFP and ESI fields to the job offer compensation section.
- feat Add Datum token push and Cargo telemetry setup Pushes a Datum token to Cargo so it can report its metrics, and rotates it.
- feat Let agents configure site access The agent guide now covers the auth commands, and agents log in with --oauth.
- feat Cargo telemetry setup Cargo telemetry setup
- feat Add Stepper component Adds a Stepper for ordered flows and jobs, with vertical, clickable and state options.
- feat Category tabs over the Inbox Splits the Inbox into Primary, Updates, Forums and Promotions tabs, with unread counts on each.
- feat Open cloud settings from the rail Adds a Cloud Settings button to the desktop rail for Pilot-managed sites, opening Billing, Domains and Advanced.
- feat Choose the Inbox's categories, and clear a list in one go Lets each person choose which categories split their Inbox, and adds a View menu for the split.
- feat List every recipient of a site in one paged call Adds a site endpoint that lists every mailing list recipient in one paged call, so the index no longer uses one call per list.
- feat Choose app and test suites for UI runs Adds an app picker and test suite picker to the Run page, and marks suites whose app is not installed on the site.
- feat Pick which UI suites run; purchase cycle browser test Each Cypress spec declares its app, `run.js` runs only the chosen specs, and a new purchase cycle browser test is added.
- feat Add a skill that takes a finished branch to a merge-ready PR Adds a /ship-it skill that runs review, tests, docs, lint and PR steps in order, asking the developer only for decisions that are theirs.
- feat Enforce prebuilt assets for all marketplace apps Requires prebuilt assets for every marketplace app.
- feat Stamp each build step's DONE line with when it ended Appends the UTC time to each build step's DONE line, so Press can record when each step ended.
- feat Add an enabled option to useMessages Adds an enabled option to useMessages, default true, that stops fetching messages and joining realtime rooms when false.
- feat Roll out metald builds with Metald Update Adds a Metald Update rollout that upgrades Metal servers in batches, with a health check after each batch and state that survives format changes.
- feat Add v16 Desk sidebar and dock for Education Adds a v16 Desk sidebar and dock for Education.
- feat Add hostels, room booking, and buildings and floors for rooms Adds hostel management with term-based billing, room booking, and a Building and Floor structure. Room becomes the single room master, and a patch merges Class Room into it.
- feat IronCalc as the only engine; remove the old engine IronCalc is the only spreadsheet engine in Sheets, and the old JS engine files are removed.
- feat Setup Raven Cloud via Frappe Cloud Raven turns on push notifications through Frappe Cloud, with no sign-up or key pasting.
- feat Select threads in All accounts Threads can be selected across all accounts, with bulk actions that run per account.
- feat Schedule posts Discussion drafts can be scheduled to publish later, and stay editable until then.
- feat Find the bench for an app linked into apps/ An app symlinked into a bench's apps folder builds and runs in Vite dev.
- feat Show the free trial end in the billing panel The billing panel shows when a free trial ends, and the data deletion date for stopped trial sites.
- feat Allow data from central site Cargo can take data from the central site.
- feat Upload download delete S3 actions S3 upload, download and delete actions are added.
- feat Edit the firewall of a server Adds a server:network capability and a Networking tab to view, edit and copy a server's firewall. Changes are sent to Atlas.
- feat Edit ssh keys and termination protection on a server Adds SSH key editing through the Atlas tenant API and a lock button to turn termination protection on or off.
- feat Attach and detach public addresses with IPv4 billing Teams can attach or detach public IPv4 (billed monthly) and IPv6 (free) addresses from the Networking tab.
- feat Finish product trials Signup sites are free for a set number of days, then stop and are later deleted. Adding a payment method converts them to paid sites and grants the welcome credit.
- feat Allow skipping migrate in New Site from Backup The restore endpoint accepts an optional skip_migrate flag, so migrate can be run later.
- feat Sync docs-site repos without Markdown changes Git-synced spaces can take docs-site repos as they are: root-relative links resolve, sidebar URLs keep their intended slugs, and the sidebar and page titles are handled without edits.
- perf Ship Frappe's own page islands in its prebuilt archive Benches with no other Frappe UI app use the prebuilt page islands and skip the memory-heavy island build.
- perf Fit MariaDB on small VMs and keep it out of swap Uses a smaller MariaDB buffer pool and connection limit on hosts under 800 MB so one bench fits on a small VM.
- perf Back off the retry of a failing VM A failing VM waits longer between reconcile retries, up to 1 minute, instead of logging on every pass.
- perf Move to the frappe-ui 1.0.2 release and its 1.0 APIs Updates to frappe-ui 1.0.2 and makes optimistic saves roll back and show an error when the server rejects them.
- perf Remove resource fully Remove resource fully
- fix Prevent editing other users profiles Adds ownership validation to GP User Profile so members can no longer edit another member's profile or bio through the REST API or `set_value`.
- fix Pass the marketplace security scan Clears the 11 Critical and Major findings that blocked the marketplace release.
- fix Keep the database enabled, build frappe's assets in init, and keep the web socket open on restart Database units stay enabled after a retried init, and restarts keep the websocket open.
- fix Allow database settings without bench management Database settings such as restart and buffer pool no longer require bench management; process kill and binlog purge stay gated.
- fix Fetch an update target without its history in a shallow clone Shallow clones fetch only the target commit, so the update check stops timing out on large repos.
- fix Feat(metal) / fix(atlas): Recover VM migrations from memory and temporary failures Migrations survive short failures, fall back to a disk-only move when memory can't move, and can't get stuck with the VM stopped.
- fix Make sorting work in both directions Sorting runs on the client, column headers sort on click, and a second click reverses the order.
- fix Leave checked rows unfilled, report the highlight, name the list fix(frappe-ui multiselect): leave checked rows unfilled, report the highlight, name the list
- fix Add the Bluebird team to its private spaces fix(demo): add the Bluebird team to its private spaces
- fix Restart metald after configure-wireguard restarts wg0 Mesh traffic dropped after WireGuard config changes until metald was restarted. The script now restarts metald after wg0, so the mesh programs attach to the new interface.
- fix Restore a WireGuard address that NetworkManager removed The apply script now checks that each address is still on the link and restores it if NetworkManager removed it, instead of exiting on an unchanged file.
- fix Keep PCLMULQDQ in the x86 CPU templates ClickHouse crashed with SIGILL on guests without PCLMULQDQ, so the x86 templates now pass it through and require it on the host.
- fix Let many people react to a post at once Each reaction is its own row instead of a child row inside the post. Two people reacting at once no longer hit a TimestampMismatchError.
- fix Keep external content syncs out of undo history Content set from outside no longer counts as an undo step, so Cmd+Z can't restore an empty document over a saved draft.
- fix Make the code languages plugin work with Vite 8's dev server Dependency pre-bundling no longer fails on Vite 8, so apps don't have to turn the plugin off.
- fix Apple Mail quotes fold away, and only the sender opens their card Apple Mail and Thunderbird quoted trails fold away again, and the empty space after the sender's address no longer opens their card.
- fix Quoted text can be edited, and forwards and inline answers aren't trimmed fix(mail): quoted text can be edited, and forwards and inline answers aren't trimmed
- fix Quoted text can be edited, and forwards and inline answers aren't trimmed The quote can be edited in place, forwards stay visible, and answers typed between quoted lines are no longer hidden.
- fix Initialise frappe at its commit with pilot init --commit Image builds check out Frappe at the commit that has published prebuilt assets, so the VM no longer rebuilds them and runs out of memory.
- fix Call Pilot over loopback from the site Sites call Pilot on their own host, so Cloud Settings works on a new signup instead of failing with a name resolution error.
- fix Download prebuilt assets for a commit pinned behind its branch tip A clean commit pinned behind its branch tip now downloads its prebuilt archive instead of building on the server.
- fix Read follow_branch from bench.toml when loading apps The follow_branch setting in bench.toml is now honoured, so updates move the app to the branch tip.
- fix Show commit labels when an update targets the branch tip The update dialog shows commit hashes when the target is the branch tip, instead of registry versions that can look unchanged.
- fix Bump litellm to 1.95.0 for python 3.14 support Benches on Python 3.14 can install the litellm pin, which previously had no matching package.
- fix Check out shell scripts with LF line endings Shell scripts are checked out with LF endings, so Windows checkouts no longer produce containers that fail with "no such file or directory" on the entrypoint.
- fix Polish the payment method and top up flows Asks for the billing country first and adds a payment method where it is needed. Gateway failures show a message the customer can act on.
- fix Save before reload or tab close Starts a save on beforeunload when there are unsaved sheet edits, so the last couple of seconds of edits survive a reload or closed tab.
- fix Recover VM migrations after host failures Recovers committed memory migrations after the destination host is lost by recreating networking and cold-booting the current disk, and keeps failure causes and cancellation accurate.
- fix Student records access and SQL injection hardening Stops students from reading other students' records and replaces SQL built with string formatting.
- fix Accept the self-signed certificate of a BMC The Redfish client stops verifying BMC TLS certificates so requests succeed; password authentication stays, but TLS is no longer verified.
- fix Say "left" when the only admin removes themselves The admin-handover system message now says the member left, not that they were removed by themselves.
- fix Fix TLS, database sizing, realtime and task recovery bugs Fixes a version-16 bench install failure, a lost site after a failed certificate, and several realtime and task recovery bugs found on a test VM.
- fix Don't count unsubscribed emails as newsletter recipients Don't count unsubscribed emails as newsletter recipients
- fix Don't count unsubscribed emails as newsletter recipients Don't count unsubscribed emails as newsletter recipients
- fix Undo brings back a draft's last edits and takes folder ticks back in All Inboxes Undo brings back a draft's last edits and takes folder ticks back in All Inboxes
- fix Reload screen when the IronCalc worker crashes Shows a reload screen instead of freezing when the spreadsheet worker dies, since reloading restores the last saved copy.
- fix Release the VM lock of a migration that ended without settle A VM locked by a migration that was hand-edited to a finished state is unlocked by the migration worker.
- fix Do not fail a kill when systemd only fails the auxiliary signal A kill that systemd partly fails is treated as done, so stuck migrations in cutting_over can finish.
- fix Announce a public address when a host claims it Sends a gratuitous announcement so the provider router updates to the new host when a static public IP moves.
- fix Repair BMC power control and guard the VM migration network change Supports BMCs that list reset types in ActionInfo and avoids a blocking BMC call on every Metal Server form load.
- fix Cold boot a VM whose saved state no longer fits Firecracker A saved state that differs only in Firecracker build or CPU template is treated as no saved state, so the VM cold boots after a metald upgrade.
- fix Do not count warm image units when a metald upgrade checks its VMs Stops a metald upgrade from restoring the old build on healthy hosts because a warm image build unit looked like a lost VM.
- fix Open the matching Central page from each cloud settings link Change plan, server logs and billing links now point to the right Central pages.
- fix Ensure webhook secrets are stored Ensure webhook secrets are stored
- fix Install split for datum installation Install split for datum installation
- fix Pass marketplace semgrep checks Clears 8 blocking semgrep findings for Raven 3.0.0. Dynamic agent instructions now render through Frappe's sandboxed template engine.
- fix Validate webhook request signatures Checks the X-Twilio-Signature header on the guest Twilio webhooks and rejects requests when the auth token is missing.
- fix Include retaining allowance in pf wages Counts Retaining Allowance as a PF wage component, so the employee EPF deduction and the ECR export include it, as EPF Act s.6 requires.
- fix Make editor menus clickable inside a Dialog and rank @mentions @mention menus inside a Dialog can be clicked, and mention results are ranked so an exact match such as @sar shows the closest name first.
- fix List the best search matches first Combobox and MultiSelect rank matches inside each group, so an exact or starts-with match shows above looser matches.
- fix Give an installed iOS 26 app its full-screen viewport In an installed iOS 26 app, the mobile shell fills the screen, and the tab bar's bottom padding clears the home indicator.
- fix Serve version-3 to Frappe 15 and 16 benches Serves the version-3 Insights release to Frappe 15 and 16 benches, and the develop release to Frappe 17 dev.
- fix Keep a sheet open when it opens as another closes On Android Firefox, the poll sheet no longer closes straight after it opens from the actions sheet.
- fix Show push settings from boot without asking older sites Push settings come from boot data, so older sites do not need an extra request to show them.
- fix Ensure validation failures are also pruned Prunes the build context even when a validation error occurs.
- fix Default the memory snapshot disk to the rootfs size A memory snapshot without a requested disk size uses the larger of the VM disk and the rootfs size, so the snapshot validates.
- fix Size image volumes to the image Image volumes are the image size rounded up to a whole MiB, without the extra 64 MiB, so VMs whose disk equals their image size can be snapshotted.
- fix Build the mailing list index in two Suite Cloud calls The mailing list index reads all lists and recipients in two calls and keeps the last good index when a refresh fails.
- fix Build the mailing list index in two Suite Cloud calls (backport to forge/drive-layer) Same index fix on the forge/drive-layer line.
- fix Explain Frappe commands, preserve piped input, warn when development serves one site Explains the `pilot frappe` command syntax, keeps piped input when `pilot start` runs, and warns when development serves only one site.
- fix Harden CSI download against Sandbox's documented responses The TDS CSI download now follows Sandbox's documented responses, so a failure shows at the download step instead of as a later filing error.
- fix Improve team switching and usability Team switching keeps the current section, adds a searchable team dropdown, moves Theme into the profile menu, and simplifies invitations.
- fix Close the gaps in the product trial lifecycle The trial starts when Central records the site, readiness is recorded by a background probe, and failing steps are retried. This stops free servers from running with no end date and paying customers' servers from being stopped after a failed conversion.
- fix Set allmulticast on the mesh uplink in host setup Hosts with Broadcom bnxt_en NICs use allmulticast instead of promiscuous mode, because firmware 214 blocks receive traffic in all-multicast mode. Mumbai hosts now run firmware 230, which fixes the stall.
- fix Await draft commit before closing edit mode Saving a comment edit waits for the draft commit before closing edit mode, so the draft row is not left behind.
- fix Refetch the open channel after background when its window is deep or was jumped to An open channel reloads after the app returns from background, even if its window was deep or jumped to.
- fix Hide spaces the user cannot open from the space switcher The space switcher lists only published spaces the user can read.
- fix Resize dialog crash The resize dialog no longer crashes.
- fix Ignore aborted requests when loading resize options An aborted catalog request no longer shows "Couldn't load resize options" over valid data.
- fix Install app JS dependencies with the package manager the lockfile names Pilot installs app JS packages with Yarn or pnpm, based on the lockfile, with a frozen install.
- fix Reach the bottom edge in an iOS 26 installed PWA The mobile shell fills the screen to the bottom edge in an installed iOS 26 PWA, and the tab bar clears the home indicator.
- fix Show what matched in recipient suggestions Recipient suggestions show the matched text in bold and read the address at the row's own size.
- fix Restore beta releases with npm trusted publishing The beta publish workflow uses GitHub Actions OIDC instead of the expired npm token.
- fix Keep bnxt_en uplinks in promiscuous mode Sets promiscuous mode on Broadcom bnxt_en uplinks before each metald start and blacklists bnxt_re, so hosts with that NIC stop going offline once they run more than about 16 VMs.
- fix Leave the uplink receive mode to host setup WG Mesh no longer sets allmulticast on the private uplink, which stalls bnxt_en NICs; host setup now chooses the receive mode.
- fix Re-emit doctype_subscribe on socket (re)connect Realtime list and document resources keep receiving updates after a reconnect. Subscriptions are tracked per socket.
- fix Correct the checked hover state Checked and indeterminate checkboxes lighten on hover and press, and the non-padded control stays flat.
- fix Stop media plugin sizing images and videos on document open Width and height are added to media only after the person's own edit. Opening a document no longer changes it.
- fix Keep native drag payload in read-only editors Links in read-only editors can be dragged into other fields again.
- fix Stop echarts cutting an already shortened category label Shortened axis labels such as "Referral…Network" display as shortened, without ECharts cutting them a second time.
- fix Discard stale suggestion popup positions Late popup position results from overlapping runs are discarded, and a ResizeObserver repositions the popup when its height changes.
- fix Paint no fill behind an image Subtle rail items with an image have no background fill. Items without an image keep theirs.
- fix Simplify firewall edits and correct resize selection Resize cards, the summary and the submitted target agree on storage, and firewall entries are edited inline with explicit pending changes.
- fix Expose an accessible name on the progressbar The progressbar gets an aria-label from the label prop, or the name "Progress" when no label is given.
- refactor Release every merge to develop ci: release every merge to develop
- refactor Link Pilot's setup guide instead of Gameplan's workflow docs(assets): link Pilot's setup guide instead of Gameplan's workflow
- refactor Move Stepper to frappe-ui/experimental Moves Stepper to the experimental export, so its API can change before it is frozen.
- refactor Build images on the VM swap file Image builds use the VM's swap file instead of adding a second one.
- refactor Require a Public API section in PRs that change the public API docs(agents): require a Public API section in PRs that change the public API
- refactor Remove the React Native mobile app Remove the React Native mobile app
- refactor Merging develop into main Merging develop into main
- refactor Link the CPU template folder on GitHub Link the CPU template folder on GitHub
- refactor Image builder Builds site and app images from pilot base images and rebuilds signup apps on a schedule, with the signup apps configured in settings instead of hardcoded.
- refactor Bump raven to 3.0.0 and point at frappe/raven Moves Raven's registry entry to the 3.0.0 release line on both branches.
- refactor Add v16-polished coverage for 16.37.0 features not yet tested Adds browser specs for 16.37.0 features not covered by the existing suite, such as user settings.
- refactor Pin python in release to 3.14 Pins Python to 3.14 in the release workflow.
- refactor Explain how to access a local Frappe site through a public URL Explains how to reach a local site through a public URL, check its login redirects, and remove the setup.
- refactor Document custom Vue components in the studio app building skill Documents how to build custom Vue components in the Studio app skill.
- refactor Bump frappe-ui to 1.0.1 Bumps frappe-ui from 1.0.0-rc.1 to the first stable 1.0.1 and regenerates prop types.
- refactor Create the base coverage folder before unzip Creates the base coverage folder before unzip extracts into it, so the stats job no longer fails.
- refactor Comment change stats on pull requests and trim area labels A bot comment shows changed lines per module and test coverage, and the area labels are removed.
- refactor Close pull requests open for more than a month Mergify closes pull requests open for more than 30 days, unless they have the keep-open label.
- refactor Comment change stats on pull requests and trim area labels (backport #380) Same bot comment change on the stable branch.
- refactor Release master with an automatic version Adds a manual Release workflow that tags master with an automatic version.
- refactor Keep pull requests up to date with Mergify Mergify merges the base branch into open pull requests that are behind it.
- refactor Backport pull requests to master with Mergify Mergify backports develop pull requests to master and closes direct pull requests to master.
- refactor Sync Mergify, tests and branch docs to master Copies the develop Mergify rules, tests workflow and branch docs to master.
- refactor Label pull requests by area, domain, kind and risk Mergify labels pull requests by changed files and title, using area, domain, kind and risk families.
- refactor Remove the region domain label Removes the domain: region label rule.
- refactor Keep editor components out of exported app bundles & other perf fixes Exported apps no longer include the full editor component list, so per-app imports take effect.
- refactor Record the NIC firmware upgrade as the incident fix The NIC incident report names the firmware upgrade as the fix and drops the promiscuous-mode workaround.
- refactor Improve billing overview page refactor(ui): Improve billing overview page
- refactor One changelog page per major version, simpler entries, GitHub releases Each major version gets one changelog page built from the root CHANGELOG.md, and releases use the same changeset text.
- refactor Release with changesets Adds a changeset check to PRs that change shipped files, and a release PR that updates on each merge to main.
- refactor Expect the minimal flag when publishing Ubuntu images Updates the build command test to expect the minimal argument. Test-only change.