Frappe and ERPNext changes, 19 Oct to 25 Oct 2026
836 changes merged: 149 new features, 25 speed-ups, 526 fixes, 136 refactors.
This week brought 836 changes across 11 Frappe products, and none of them are breaking changes.
In Frappe, a Link field now has an arrow that opens the linked record, reports print from a full-page live preview, and Quick Entry forms can show inline fields.
ERPNext adds an Items tab on Customer and Supplier, an Item filter on all seven trends reports, and a BOM steps section that you can collapse after submit.
HR adds an Overview tab on Employee with pay, attendance and leave figures, and a simpler New Employee dialog.
Helpdesk can group the ticket list by a field with counts and totals, and CRM users can set an availability status that assignment rules respect.
Insights closes a permission gap in grouped native SQL joins, so update it soon if you use native SQL.
Highlights
Draw the error a host passes to a field control
frappe · feat
A Link field opens the record it names
frappe · feat
Print from a full-page preview
frappe · feat
Inline fields in Quick Entry and New Record rows, and Contact's insert mapping
frappe · feat
The full-page new record at //new
frappe · feat
Create a record from a Link field's dropdown
frappe · feat
- feat Draw the error a host passes to a field control Every field control draws the error its host passes in, under the input.
- feat A Link field opens the record it names Link and Dynamic Link fields get an arrow that opens the linked record, and read-only links show a clickable title.
- feat Print from a full-page preview Printing a report opens a full-page live preview with print format, letter head, orientation, and column options.
- feat Inline fields in Quick Entry and New Record rows, and Contact's insert mapping Quick Entry and New Record layouts can define inline fields, so a Contact made from the list gets its email and phone.
- feat The full-page new record at //new `//new` now opens a full-page new record, where it previously opened nothing.
See all 194 changes
- feat Create a record from a Link field's dropdown Link and Dynamic Link dropdowns end with a Create row when the user may create the linked doctype.
- feat Create in the list's header row, with no spinner while its dialog is open The list's Create button moves to the header row beside the crumbs.
- feat Desk draws its charts with frappe-ui charts New sites draw Desk charts and number cards with frappe-ui; existing sites stay on the classic charts through a setting.
- fix Int field commits a whole number An Int field drops the fraction on commit, matching the server, so `7.6` shows as `7`.
- fix Show each fieldtype's value correctly in the side panel Side panel rows show each fieldtype the way the form control does, such as an Image summary or a Code first line.
- fix Commit a Check as 1 or 0, as the server stores it A Check saves as 1 or 0, so toggling it twice leaves the record clean.
- fix Grid columns scroll, text cells keep one line, cells and rows carry data attributes Grid columns keep a 128px minimum and scroll sideways, Text cells show one line, and grid rows and cells gain data attributes.
- fix Table MultiSelect chips show their link titles Table MultiSelect chips show each record's title, not its name, so they match the side panel.
- fix Code-family editors start five lines tall Code, JSON, Markdown and HTML editors start five lines tall instead of a 32px strip, and still grow to their cap.
- fix Draw the Attach Image thumbnail and its hover preview Restores the Attach Image thumbnail and its larger hover preview in the form, grid cell, and row dialog.
- fix Code-family editors start five lines tall on the record page Cherry-pick of #45095 onto desk-v2, with a Playwright spec.
- fix Drop Fold and Attachment Gallery through the shared set Fold and Attachment Gallery no longer render as empty text inputs on the record page.
- fix Long Int uses the number control; drop Fold and Attachment Gallery from the form Long Int uses the number control and shows a plain integer. Fold and Attachment Gallery are dropped from the form and grid columns.
- fix Ctrl/Cmd+S saves the Create dialog, never the page under a dialog In a Create dialog, Ctrl/Cmd+S now saves the new record. On a record page it no longer triggers the browser's Save Page As.
- fix Open the Create dialog with focus in its first field The dialog opens with focus on its first writable field, so Ctrl/Cmd+Enter works straight away.
- fix Return focus to the Link field after a Ctrl/Cmd+Enter save After saving in a Link field's Create dialog, focus now returns to the field instead of the page body.
- fix Keep @framework/ui out of the dev pre-bundle With the desk running from source under Vite, Link and Dynamic Link fields lost their "Create" option.
- fix Name the record by its title in the list's Create toast The toast shows the record's title instead of its hash or series name.
- fix Keep side-by-side buttons aligned while one shows its spinner Buttons are vertically centred, so a neighbour no longer shifts 3px when one shows its spinner.
- feat Name the fields a save refused in the v2 error entry The v2 save error lists each field that refused the save, so the record page can mark it.
- feat Draw the error a host passes to a field control (desk-v2) Cherry-pick of #45108 onto desk-v2, with grid cells and the row dialog showing their errors.
- feat Create a record from a Table MultiSelect field The Table MultiSelect dropdown gets a Create button for the child table's Link doctype.
- feat Retry failed deliveries from the webhook request log Adds a Retry button to failed webhook logs, resending the stored request through the same job as scheduled retries.
- feat Support PgBouncer in session mode Postgres sites can run behind PgBouncer in session mode, with rollbacks on close and a forced database drop.
- feat Merge flow into frappe Merges the Flow AI agent into frappe. Users chat with it at `/flow`, and it acts with their permissions.
- feat New form link field like combobox Replaces the Awesomplete dropdown on Link, Autocomplete and MultiSelect fields with a combobox. It is off by default behind a System Settings beta toggle.
- feat New filter panel, and a filter sheet on phones The list Filter button opens a panel of rows with a searchable field picker and a value box that suits each field type. Phones get a filter sheet.
- feat Backport v2 discovery API and MCP server Adds the v2 discovery API and an MCP server at /api/v2/mcp for reading and writing documents and calling methods.
- feat Merge studio into frappe Adds Studio, a visual Vue app builder, as a beta module.
- feat Show the page stepper at the top of multi-step forms Shows a compact stepper at the top of multi-step Web Forms, replacing the footer progress dots.
- feat Server side of Create — mandatory-only Quick Entry default and a New Record layout Quick Entry shows mandatory fields by default, and desk v2 gets a full-page New Record layout.
- feat Feat(notification)!: Migrate Slack Webhook URL to generic Notification Webhook URL Replaces the Slack-only webhook field with a generic Notification Webhook URL that also supports Google Chat, Mattermost, Rocket.Chat, Discord, Ntfy, Raven, Matrix via Hookshot, and Microsoft Teams. Existing Slack URLs migrate through patches.
- feat Bound and filter the linked documents lookup The linked documents lookup accepts optional filters, a limit and an order, so callers can fetch only the newest or non-cancelled records.
- feat Add plutoprint as a light pdf generator Adds PlutoPrint as a PDF engine that runs inside the Python worker, so most PDFs no longer start a browser. Pages that need JavaScript or barcodes still use Chromium.
- feat Run web, realtime and jobs in one process (backport #41867) Adds an opt-in single-process runner for small or trial sites, serving the web app, realtime and background jobs from one uvicorn process.
- feat Set up OTP App on the login screen The first OTP App login shows the QR code on the login screen instead of sending the user to a separate page and back.
- feat Optional Python realtime server Backport of the Python Socket.IO server for v16. Node stays the default.
- feat Allow make attachment public in customize form Adds "Make Attachment Public (by default)" to Customize Form for Attach fields on standard doctypes.
- feat Optional sections component Adds a component for optional form sections that users add with a button and remove again.
- feat Search and notifications on the dock Adds search and notifications to the dock on the version-16 hotfix branch, backported from #44436.
- perf A header or footer adds seconds to long pdfs Moves each page's content by wrapping it, not by rewriting every drawing command. An 810-page PDF's step drops from 9.8s to 0.93s.
- perf Show 50 linked documents per doctype with load more The linked-with dialog loads 50 documents per doctype; on a 155-user role the response drops from 22.8KB to 10.5KB.
- perf Avoid loading sqlglot by default sqlglot loads only when it is needed.
- perf Lazy load openpyxl openpyxl loads only when a data import needs it.
- perf Stop waiting for network idle on header and footer pages PDFs with a header or footer render about a second faster, with the same output.
- perf Stop downloading css imports while reading print styles Backport of #44746 to v15-hotfix.
- perf Stop downloading css imports while reading print styles Print styles are read without downloading the stylesheets they import. Builder formats render faster.
- perf Skip optimizing large pdfs that have no images Large PDFs are optimized only when they contain images, which cuts a 1,177-page text report's `get_pdf` time from about 16.9s.
- fix Keep an integer past 2^53 exact when a reply is parsed Stops a Long Int above 2^53 from being rounded on load, so saving another field no longer writes the rounded value back to the database.
- fix Preserve TLS for Redis client cache Makes `rediss://` URLs use a TLS connection for the Redis cache client, where they were silently downgraded to plain TCP.
- fix Run releases and translation syncs with Frappe Release Bot app Moves release, release-notes, and translation workflows from a personal access token to a one-hour token from a GitHub App with only the scopes each job needs.
- fix Run releases and translation syncs with Frappe Release Bot app (backport #44927) Backport of #44927 to version-16-hotfix. It also removes `backport.yml`.
- fix Run releases and translation syncs with Frappe Release Bot app (backport #44927) Backport of #44927 to version-15-hotfix.
- fix Only one of several PDFs generated at once succeeds Gives each PDF render its own tab for request capture, so concurrent renders no longer time out because one render took every request.
- fix Filtering on the comments column says field not found Restores the permission error for `_comments` filters, since the new field check was hiding that column from the lookup. Fixes a failing test on develop.
- fix Open the default app after login Login now opens the user's Default App, after any Default Workspace or role home page.
- fix Links click in the wrong place with a header or footer Moves each page's links along with its content when a header or footer is added, so clicking link text works.
- fix Match and page translated doctypes like other doctypes Link search on translated doctypes such as Country and Role matches, pages, and escapes `%` the same way as other doctypes.
- fix Distinguish nonexistent field from permission error in queries A filter on a field that does not exist now says the field is missing, instead of showing a permission error.
- fix Load cached Inter fonts through the plutoprint fetcher Loads cached Inter fonts through the PlutoPrint fetcher, so PDF test processes no longer segfault at exit.
- fix Print format editor images only print for the uploader Saves images uploaded in the print format editor as public files, so they print for every user.
- fix Typst pdfs of builder print formats differ from chrome Makes Typst output match Chrome for builder print formats in eight places, including zero margins, numbered text, and mismatched image extensions.
- fix Open the floating dock from the right edge in RTL In right-to-left languages the dock opens from the right edge, where it sits.
- fix Translate the DocType description in the title tooltip Translates the DocType description shown in the list title tooltip.
- fix Keep the chosen layout when the list is reopened Reopening a list keeps the layout the user picked, unless a shared link's filters match a different layout.
- fix Share doctype rooms between views and restore them after reconnect Lets several views share a doctype's realtime room, so leaving one view no longer cuts off the others. Rooms are restored after a reconnect.
- fix Grid columns scroll, text cells keep one line, cells and rows carry data attributes (desk-v2) Cherry-pick of #45099 onto desk-v2.
- fix Hide the workspace shortcut badge when the count is 0 A workspace shortcut with no matching records shows only its arrow, not a gray 0 badge.
- fix Save attachments when a non-admin user pulls emails Non-admin users pulling emails with attachments no longer fail, because attachments are saved as they are for outgoing mail.
- fix Back exits the panel's full screen; replies suggested more often Back leaves full screen in the Flow panel, and the assistant offers suggested replies after more answers.
- fix Fit view to screen, scroll both ways and keep Today working The Gantt view fits the screen, scrolls both ways, opens on the tasks, and keeps the Today button working.
- fix UI tweaks for the panel, pages and suggested replies Long suggested replies end in an ellipsis, and the Flow panel's bar, phone header, and form text are adjusted.
- fix Spell out .29, .57 and .58 correctly in money_in_words Money in words no longer drops a cent for amounts ending in .29, .57, or .58, because cents are computed with Decimal.
- fix Stop querying the missing `published` column on every website request Since Studio was merged, every website page returned a 500 on Postgres. The website route matcher queried a column Studio Apps no longer have, and the controller now stops asking for it.
- fix Use the connection IP on the dev server On `bench start`, the client IP comes from the connection instead of forwarded headers.
- fix Evaluate component inputs once and validate studio paths Component inputs that contain `{{ }}` now render as text instead of running as expressions. Studio page titles and component ids are scrubbed so exports stay inside the app's studio folder.
- fix Render Map View by declaring leaflet in required_libs Map View rendered a blank box on every doctype after the refactor. Leaflet is now declared through `required_libs`.
- fix Keep field sidebar on screen with many tabs On DocTypes with many tabs the form builder canvas grew wider than the screen, pushing the field sidebar off-screen.
- fix Pdf links fail for documents with & or + in the name Print links were HTML-escaped instead of URL-encoded, so `&` split the parameters and `+` became a space.
- fix Multi-doctype bulk pdf stops at the first failing document One failing document used to stop a multi-doctype bulk PDF job silently. The failure notice is now sent correctly, and progress counts from 1/N.
- fix Bulk pdf with a password fails for typst print formats Removes a check that rejected password-protected bulk PDFs for Typst print formats, because the merged PDF is encrypted once at the end.
- fix Menu text cut off, menu tooltip stuck and shortcut badge empty Menu text no longer clips at the bottom of letters, the menu tooltip no longer sticks after a pick, and a shortcut with a count of 0 shows 0.
- fix Auto margins in print format css break pdf generation A print format with `margin-left: auto` in its CSS could not be downloaded as PDF. Margin values that are not lengths are now skipped.
- fix Delete all rows of a table in a dialog "Delete all rows" on a table field with more than one page of rows in a dialog threw an error and deleted nothing. It now clears the rows.
- fix Hidden fields don't open the Create dialog A DocType whose only always-shown Create fields are hidden now opens the full-page new record instead of an empty dialog.
- fix Rebuild the module map after clearing the cache On the first migrate after a pull adds a module, the new module's doctypes were not synced, so a patch failed with `TableMissingError`.
- fix Improve experience of bench browse command The URL respects `host_name` and SSL, `--user` lands on the page the login form redirects to, and the browser is not opened over SSH.
- fix Print attachment fails on non-submittable documents With draft printing off, notifications that attach a print no longer fail for doctypes that cannot be submitted, such as ToDo.
- fix Show only one alert banner at a time on the login page Success and error banners no longer appear together on the login page's forms.
- fix Print attachment ignores the document language Auto Repeat emails now print in the document's language instead of the system language.
- fix Count login attempts atomically Keeps the failed-login count in one Redis key incremented with INCR, so concurrent failures are all counted.
- fix Restrict viewer user info lookup to desk users Website users now get a permission error from the viewer user info lookup, and desk users see the same results as before.
- fix Keep develop sites unchanged until desk v2 is turned on Makes desk v2 opt-in per site, so develop sites that have not enabled it behave as before.
- fix Restore CSS variables dropped by the Espresso migration Restores the old border-radius and invert-neutral variables as aliases to the new tokens, so existing Desk styles render again.
- fix Clear uploader errors when a file is removed Removing a file also clears its "already in the list" error.
- fix Composer attachment chips: paperclip icon, enter/leave animation, pasted URLs stay links Attachment chips share one paperclip icon and animate in and out, and pasted URLs stay as links.
- fix Chromium download fails on newer or non-debian arm64 linux Uses a single linux-arm64 Chromium download for every arm64 Linux host.
- fix Add each file once when zipping A file that is already in the zip archive is not read and written again.
- fix Don't validate Print Settings when backfilling bulk export limits The backfill patch no longer validates Print Settings.
- fix Clear the cached webhook list when one is deleted Deleting a webhook clears the cached list, so later saves stop queueing the deleted webhook.
- fix Incorrect title for second link field pointing to same doctype in list view (Listed above under the backport author; no separate summary needed.)
- fix Clear the cached webhook list when one is deleted Same fix for version-16; TestWebhook also clears the cache, which had been failing the MCP tests that run after it.
- fix Apply commit-analyzer options fix(release): apply commit-analyzer options
- fix Check system manager permission for take backup APIs Adds a System Manager check to the take_backup APIs, which any authenticated user could previously call.
- fix Require write permission to remove another user's assignment Removing someone else's assignment now requires write permission on the document, matching what the UI offers. The server previously checked only read access.
- fix Revert "fix(assign_to): require write permission to remove another user's assignment" Reverts #44820. The author says the read-only removal behaviour is intended.
- fix Do not change documents when the classic board loads Opening a classic Kanban board no longer resets the column of cards edited elsewhere and re-saves them under the viewing user. Moving cards on the board still updates them.
- fix Keep a layer's own additions in Manage Dock Dock entries that a layer added are listed in Manage Dock, so saving no longer deletes them.
- fix Use Inter in print format editor pdfs Print format editor PDFs use Frappe's bundled Inter font, so servers without Inter no longer fall back to DejaVu. A "Default" font also prints in Inter.
- fix Show core pdf generators on sites with an options override Sites where an app had overridden the PDF Generator options now get PlutoPrint and Typst in the list after migrate, so picking them no longer silently saves Chrome.
- fix Run GET-only methods as GET Methods whitelisted only for GET can now be called over MCP, which previously refused them. Other methods still run as POST.
- fix Keep the picked PDF renderer when saving a print format Saving a print format no longer overwrites the chosen PDF renderer with Chromium when the format has no stored value.
- fix Rename test_runner.py files so CI discovers them fix(tests): rename test_runner.py files so CI discovers them
- fix Accept zero-valued HOTP tokens Already in v15 as part of #44795.
- fix Reject multiple statements in one query On Postgres, `frappe.db.sql` ran every `;`-separated statement, which let read-only checks be bypassed. Queries with a `;` outside literals or comments now raise `ProgrammingError`.
- fix Site cache keys and failed attempt tracking in 2FA login Same change as #44795, on a separate backport branch.
- fix Mask secret-looking keys in captured request body Request JSON and form data sent to Sentry now go through the same key masking used for logged form dicts.
- fix Rate limiter counter is created atomically Creates the counter with SET NX plus TTL in one call, so simultaneous requests at the start of a window can't reset it.
- fix Limit routes accepted per request Keeps only the latest 100 routes per batch, skips routes longer than 140 characters, and ignores the client-sent creation time.
- fix Update dependencies with security fixes Bumps 37 Python packages to recent releases, including security fixes for nh3 (SVG and MathML XSS), GitPython and pypdf. No code changes were needed.
- fix Open the active item's group after switching shells Same change as #44798, on develop.
- fix Rounds the Desktop search bar Restores the rounded corners on the Desktop search bar in v16 by using the theme's radius token.
- fix Compare saved timestamps as datetimes A document saved at a whole second can now be saved or submitted again. Previously it failed with TimestampMismatchError.
- fix Apply an update sent while an island mounts Fixes number cards that stayed in the loading state because an update arrived while the island's stylesheet was loading.
- fix Customize form edits to saved states, links and actions are kept Changes to existing states, links and actions no longer revert after Update. The form and grid now edit the same row object.
- fix Show every line of a failed report's error message The report view and notification show the full error, including Postgres DETAIL and HINT lines. Only the query and caret lines are dropped.
- fix Resolve conflicts for backport of #43534 Resolves merge conflicts for the v16 backport of #43534 and keeps the status check on the Download Report button.
- fix Postgres CI failures in storage GC, prepared report and sync jobs Fixes storage GC aborting its transaction, empty errors on failed prepared reports, and a sync job that left `frappe.job` set and broke delete_bulk tests.
- fix Submit after import works on update imports Same change as #44734, on develop.
- fix Report view ID column opens the form again With split view on, clicking a record ID opens the form instead of the side panel. Other link columns still open the side panel.
- fix Related settings in the doctype settings dialog are translated Same change as #44732, on develop.
- fix Print attachment uses the document language by default Same change as #44790, on develop.
- fix Prints use the default font when none is picked Same change as #44789, on develop.
- fix Network print failures show the real error Same change as #44791, on develop.
- fix Header script on a report letter head runs The header is saved after its script is added, the same order the footer already uses.
- fix Chromium download works on newer or non-Debian arm64 Linux Backport of #44788. The Chromium download no longer fails on newer or non-Debian arm64 systems.
- fix Keep the search_link log message on one line Removes interpolated request values from the missing-link-field log message.
- fix Print B and C series paper sizes in portrait B and C series sizes were stored landscape-wise. B5 now prints 176mm wide and 250mm tall.
- fix Permission checks no longer load every child table of single doctypes Same change as #44730, on develop.
- fix Parenthesise permission hook conditions in linked JOIN Wraps hook and Server Script conditions in parentheses in linked-document JOINs, so an OR in a permission hook can no longer change how the join matches rows.
- fix Users created with a password never get a forced reset Users created with a password through the API or data import fall back to the account's creation date for the reset date, so the forced reset applies to them.
- fix CSV-to-PO translation migration The bench migrate-csv-to-po command keeps translations of strings containing %, merges CSV files of one locale into one PO file, and keeps existing translations.
- fix Let Vite pick its minifier Island builds on Vite 8 no longer fail, because the minifier is left to Vite's default instead of being named as esbuild.
- fix Revised priority icons Replaces the priority and signal icons in the framework and the kanban board.
- fix User still has to reset password after bench set-password `bench set-password` now records today as the last password reset date, so users with expired passwords are not asked to reset again.
- fix Keep the sidebar toggle working when the window is resized The small-screen sidebar closes when the window gets wide, and Toggle Sidebar opens it even if it was hidden before.
- fix Export keeps the sort order after filtering a column Column filters no longer reset the visible row order, so export matches the sorted report on screen.
- fix Added columns overwrite same-named columns in export Added report columns with the same name as an existing column no longer put their value in both.
- fix Portal links break for documents with # or ? in their name Web form and portal links encode the document name, so names with # or ? no longer open "Page not found".
- fix Desk links break for documents with # or ? in their name Desk form links escape # and ? in the document name, so they open the right document.
- fix New announcement stays hidden for users who closed the previous one A changed announcement clears the old dismissed flag before the navbar is drawn, so it shows on the first reload.
- fix Failed chromium start adds a misleading error log Cleanup disconnects the browser session only when one was opened, so the misleading AttributeError log is gone.
- fix Preload logger before forking worker pool `bench worker-pool` no longer hangs when a job starts while a worker's scheduler is first importing the logger.
- fix Chrome pdf and print view bugs from open issues Chrome no longer keeps running when `chromium_path` is a wrapper script, `@page size` sets the PDF size, and Report Builder print gets the Include filters option.
- fix Compare saved timestamps as datetimes (backport) A document inserted at a whole second can be saved and submitted again, instead of raising TimestampMismatchError.
- refactor Tidy the page headers and list filters Aligns Flow page headers and list filters, and adjusts sizes and capitalisation on phones.
- refactor Update develop status as soon as a develop run finishes Updates Develop status on open PRs as soon as a develop run ends, rather than at the next hourly run.
- refactor Close stale backports after 6 days instead of 7 Stale Mergify backport PRs close one day sooner.
- refactor Seed a DocType with every fieldtype for the field-control walk Adds a seed script that creates a Field Coverage DocType with one field of each fieldtype, for manual UI checks.
- refactor ARCHITECTURE.md rows and flow for Create Updates `frontend/ARCHITECTURE.md` to describe the Create flow as built.
- refactor Bump Pillow to 13.0.0 Bumps Pillow to 13.0.0, after checking its release notes against Frappe's image usage.
- refactor Centralise the password length check The password length check moves into `update_password` and the login flow, so every password write goes through it.
- refactor Ask for tests only on features and non-trivial fixes docs: ask for tests only on features and non-trivial fixes
- refactor Keep the bundle size check on develop PRs ci: keep the bundle size check on develop PRs
- refactor Run tests on develop instead of on develop PRs, add a CI guide ci: run tests on develop instead of on develop PRs, add a CI guide
- refactor Run full suites on develop every hour and block merges while it fails ci: run full suites on develop every hour and block merges while it fails
- refactor Skip the full suites on version-15-hotfix PRs ci: skip the full suites on version-15-hotfix PRs
- refactor Skip the full suites on version-16-hotfix PRs ci: skip the full suites on version-16-hotfix PRs
- refactor Mark settings beta, merge schema tools, drop translations, move settings Marks MCP Settings as beta, merges the schema tools, and removes translation calls from MCP messages.
- refactor Fix return type hint and tidy generated stubs Corrects a return type hint and the docstring, and tidies the stub files Web Form generates.
- refactor Raise the frappe-ui floor to 1.0.2 chore(ui): raise the frappe-ui floor to 1.0.2
- refactor Pin frappe-ui to 1.0.2 chore(desk): pin frappe-ui to 1.0.2
- refactor Fix the tests the seventh sync broke test(desk-v2): fix the tests the seventh sync broke
- refactor Cancel unfinished runs when a pull request is closed ci: cancel unfinished runs when a pull request is closed
- refactor Fix the three UI tests that fail on every first attempt test: fix the three UI tests that fail on every first attempt
- refactor Release v16 chore: release v16
- refactor Fix flaky tests Removes a flaky throughput test and skips the user creation throttle in tests.
- refactor Link preview test fails when the whole control link spec runs Removes property setters after each test so the spec no longer depends on order.
- refactor Check every core doctype in the permitted fields test Speeds up slow and leaky server tests, including a `.invalid` host for the wrong-credentials test.
- refactor Bump socket.io and socket.io-client to 4.8.4 Updates socket.io, engine.io and ws in the realtime server and the desk client.
- refactor Merge BaseDocument into Document Moves base_document.py into document.py with the old names kept as aliases, so existing imports still work.
- refactor Bump WeasyPrint to 70.0 Bumps WeasyPrint 69.0 to 70.0 on version-15-hotfix; the render call used is unchanged.
- refactor Bump frappe-charts to 2.0.0-rc31 Bumps frappe-charts to 2.0.0-rc31.
- refactor Bump WeasyPrint to 70.0 Bumps WeasyPrint 68.0 to 70.0 on version-16-hotfix; the render call used is unchanged.
- refactor Update POT file update POT file
- refactor Update POT file update POT file
- refactor Fix flaky pulse boot config test late in the UTC day Patches `site_age` so the test checks boot_config pass-through, not date math.
- refactor Fix flaky server tests on version-15-hotfix Checks every core doctype for permitted fields and mocks `site_age` in the boot config test.
- refactor Fix flaky get_datetime test around daylight saving changes Compares wall time and UTC offset instead of the two datetimes.
- feat Items tab on customer and supplier Adds an Items tab to Customer and Supplier forms, listing frequently ordered items and the party's item restriction rules, which can be added or removed there.
- feat Make BOM steps section collapsible after submit and fix its bottom border The Steps summary of a BOM with Produce an Item at Each Operation can be collapsed after submit.
- feat Make BOM steps section collapsible after submit and fix its bottom border Backport of #61693.
- refactor Overview, sales funnel and bisect charts draw with frappe.ui.chart Customer, Supplier, Sales Funnel and Bisect charts use frappe.ui.chart, dropping the frappe-charts overrides.
- feat Add item filter to trends reports Adds an Item multi-select filter to all seven trends reports, so the total row reflects the filter.
See all 300 changes
- feat Clearer setup for Produce an Item at Each Operation Backport of #61409. Renames "Track Semi Finished Goods", adds a Steps list and one message that lists every step problem.
- feat Clearer setup for Produce an Item at Each Operation Same change, on develop.
- feat Step guide and clearer messages for Produce an Item at Each Operation Same change, on develop.
- feat Clearer labels for Produce an Item at Each Operation Backport of #61410. Work Order uses the same labels as the BOM.
- feat Step guide and clearer messages for Produce an Item at Each Operation Backport of #61411. Job Card gets a step guide, a stock check before moving materials, and Submit only once the job is done.
- feat Clearer labels for Produce an Item at Each Operation Same change, on develop.
- feat Group the item variant details under templates, filter by warehouse Same change, on develop.
- perf Remove misc random cruft (backport #47899) Looks up cost center allocation, inventory dimensions, and selling stock qty once per request instead of per GL row, so large submissions run far fewer queries.
- perf Return valuation for FIFO, LIFO, Standard Cost and batch items Adds tests for how returns are valued under each valuation method. No product code changes.
- perf Return valuation for FIFO, LIFO and batch items (backport #62151) test: return valuation for FIFO, LIFO and batch items (backport #62151)
- perf Make tax category test addresses deterministic Marks the billing and shipping test addresses so that the default-address lookup is stable.
- perf Backport 7 performance fixes from develop Batches BOM item default lookups and reads batch-size flags once per Work Order operation. Results are unchanged; only query and write counts drop.
- perf Keep the request cache on get_purchase_expense_account Restores the request cache that stopped Item Defaults being read again for every row.
- perf Index the material request item of production plan rows Adds an index that speeds up pending Material Request lookups on Production Plan rows.
- perf Read item alternative pairs in one query Replaces up to two queries per substituted row with one read for the whole entry.
- fix Validate bank clearance updates and correct currency amounts Bank Clearance checks each voucher's status, account, and access instead of trusting client rows, rejects dates before posting, and shows invoice amounts in the invoice currency.
- fix Allow recalculate valuation rate only for purchase receipts, update stock invoices and non-transfer stock entries Limits Repost Item Valuation's Recalculate Valuation Rate to purchase receipts, update-stock purchase invoices, and stock entries without transfer rows, so material transfers keep the correct source rate.
- fix Allow recalculate valuation rate only for purchase receipts, update stock invoices and non-transfer stock entries (backport #62287) Backport of #62287 to version-16-hotfix.
- fix Allow recalculate valuation rate only for purchase receipts, update stock invoices and non-transfer stock entries (backport #62287) Backport of #62287 to a second hotfix branch.
- fix Skip returns when recalculating item last purchase rate The shared last-purchase lookup ignores return receipts and invoices, so cancelling a later purchase and Get Last Purchase Rate no longer pick up a return's rate.
- fix Update flag for row-wise tax rounding settings Sets the flag the tax calculation actually reads, so the client rounds tax row by row like the server and submitted totals stop differing.
- fix Honor party field's "Ignore User Permissions" in Payment Entry An Employee party no longer fails with "No permission" when its field opts out of user permissions.
- fix Stock Balance and Stock Ledger after Stock Reconciliation, with tests (backport #61918) Makes Stock Balance match the stock ledger after a reconciliation and adds tests that check both reports against it.
- fix Respect account payable checkbox in cheque printing The account-payee message and its border print only when the template's Is Account Payable box is ticked.
- fix Job card stuck on hold after all quantity is done (backport #62199) Backport of #62199 to version-16-hotfix.
- fix Job card stuck on hold after all quantity is done Clears the On Hold flag when the quantity is recorded after pausing, so the Job Card can be submitted.
- fix Count Shop Floor OEE run time once per crew Counts a Job Card's run time once when several operators log the same interval, so workstation OEE is not inflated.
- fix Backport financial statement report bug fixes from develop Brings fixes to Financial Ratios, Consolidated Financial Statements, and related reports from develop into version-16-hotfix.
- fix Proforma Invoice bug fixes Fixes the Proforma Invoice PDF so a partial proforma does not inherit the whole order's fixed discount and charges, plus two more calculation bugs.
- fix Use operation output qty for semi-finished goods job cards Sizes Job Cards for each operation by its BOM Output Qty, so the raw materials match the quantity produced.
- fix Semi finished goods costs, create bom, scheduling and precision in operation units Reads Job Card, completed quantity, and process loss in the operation's output item units for BOMs that produce an item at each operation.
- fix Clear source warehouse on non-transfer material requests Clears the row Source Warehouse when a Material Request's purpose is not Material Transfer, so it no longer blocks saving.
- fix Recalculate stock entry row amounts when qty changes (backport #60751) Restores the qty handler so a Serial/Batch dialog's quantity updates transfer qty and amounts, avoiding a ZeroDivisionError.
- fix Clear source warehouse on non-transfer material requests (backport #62256) Backport of #62256.
- fix Keep pricing rule discount percentage in unsaved form (backport #60522) Stops setting the discount amount from a Discount Percentage pricing rule from resetting the percentage.
- fix Split orders as per the schedules in the reference table (backport #52285) Splits Get Outstanding Orders by payment terms, the same way invoices are already split.
- fix Include work order in reserved stock for pick list Counts stock reserved for the linked Work Order as available to a Pick List, so raw materials can be allocated and the Pick List can be submitted.
- fix Prevent mixed payment sources in payment orders Stops a Payment Order from importing Payment Requests and Payment Entries together, by removing the correct import button for the other source.
- fix Accounting dimension shows in connections tab on stock entry, asset repair (backport #59658) Renames the column breaks in the Accounting Dimensions sections so new dimensions stay on the form, not in the Connections tab.
- fix List every week, month and age bucket whatever the ledger size Builds the week, month, and age-bucket rows from fixed lists, so charts show every period even when the ledger has fewer rows.
- fix Remove orphan stock entry services module Deletes a leftover module whose imports don't exist on version-16-hotfix, which blocks app install and update checks.
- fix Remove orphan stock entry services module Deletes the same leftover module on version-15-hotfix.
- fix Skip non-applicable taxes during migration Upgrading from v15 failed when submitted documents had Item Tax Template accounts marked Not Applicable. The migration now skips those rows instead of crashing on the stored "N/A" value.
- fix Make Delivery Schedule Item read-only for users Sales Users could create, edit or delete Delivery Schedule Items directly, bypassing the Sales Order service. The doctype is now read-only, and the role permissions no longer include create, write or delete.
- fix Make Delivery Schedule Item read-only for users (v16) fix: make Delivery Schedule Item read-only for users (v16)
- fix Minor fixes in manufacturing, stock and buying Escapes node values in the BOM Configurator tree. Validates the POS Profile, Item and Purchase Order that the whitelisted methods receive.
- fix Minor fixes in manufacturing, stock and buying Same fixes as #62094 for version-15, plus the BOM `update_cost` change.
- fix Minor fixes in manufacturing, stock and buying Same as #62094 for version-16, plus validation in Workstation `get_job_cards`.
- fix Ignore cancelled ledger entries when changing item stock uom Changing an item's default UOM was blocked by cancelled stock ledger entries, so the mistake could not be fixed. Only active entries are checked now.
- fix Apply company default terms only on draft transactions Company default terms are applied only to drafts. Submitted documents keep their terms, so Update After Submit no longer fails.
- fix Validate company abbreviation before naming Naming an Account or Cost Center crashed with a TypeError when the company had no abbreviation. It now raises a clear validation error.
- fix Ignore cancelled entries when changing default valuation method Stock Settings blocked a change of the default valuation method because of cancelled ledger entries. Only active entries are checked now.
- fix Keep Delivery Schedule Items in sync with their Sales Order Updating items on a submitted order now rescales its delivery schedules, and deleting a draft order clears them.
- fix Preserve cached bisect statement summaries Revisiting a calculated node in Bisect Accounting Statements swapped the P&L and Balance Sheet summaries.
- fix Keep Delivery Schedule Items in sync with their Sales Order (v16) fix: keep Delivery Schedule Items in sync with their Sales Order (v16)
- fix Stock Balance and Stock Ledger after Stock Reconciliation, with tests Stock Balance showed a wrong quantity after a Stock Reconciliation on v15. Four bugs found by new tests are fixed.
- fix Validate formulas by reading them instead of running them Formula validation ran the formula with a fake value of 1.0 for every line reference, which rejected valid formulas. Formulas are now read instead, so no fake values are needed.
- fix Let portal users change only the issues they raised Customer portal users can edit only the issues they raised; viewing is unchanged.
- fix Limit which call logs employees can read Employees see a call with no receiving agent only when they are its linked user.
- fix Respect disabled contact form and match customers only for signed-in senders Skips Lead and Opportunity creation when the Contact Us form is disabled, and links a message to a customer only when the sender is signed in.
- fix Check warehouse user permission in get_valuation_rate A user who cannot access a warehouse can no longer read the item's valuation rate there.
- fix Preserve company and bank ownership in payment orders Journal Entries from Payment Orders keep the order's company, and bank accounts are limited to ones the user owns.
- fix Check warehouse user permission in stock read methods Stock read methods skip default warehouses the user cannot access and refuse a warehouse the caller passes.
- fix Task gantt popup xss Task and Project links in the Gantt popup are built with get_form_link, which closes an XSS hole.
- fix Price Moving Average purchase returns at the moving average on repost Reverts a repost change that let a back-dated Moving Average purchase return take out more value than the warehouse held, leaving positive qty at a negative stock value.
- fix Always convert to presentation currency at the closing rate Financial statements convert foreign-currency balances at the closing rate, so an account's value no longer depends on unrelated accounts.
- fix Stop reports when an exchange rate is missing Reports now fail when no exchange rate is found, instead of silently using 1 and showing wrong amounts.
- fix Translate income and expenses at the transaction rate Income and expenses are translated at the transaction rate, as the Consolidated Trial Balance already does.
- fix Report other balance sheet accounts so net change matches cash Adds a catch-all operations row so Net Change in Cash matches the cash balance.
- fix Accept date objects in payment terms Fixes a regression where creating a Purchase Invoice from a Purchase Receipt failed when a Payment Terms Template was applied.
- fix Add the finished good row for items without serial or batch Manufacture entries for items with no serial or batch get their finished good row again, so saving no longer fails.
- fix Include payment entries in order advance payment status Advance Payment Status on Sales and Purchase Orders counts payment entries, so a fully paid order no longer shows Not Requested.
- fix Filter bundle components by purchase supplier Purchase Orders created for several suppliers include only each supplier's bundle components.
- fix Keep pending work orders open on shop floor A Work Order with pending quantity stays on the Open tab after a partial job card submission.
- fix Multiple Selling Settings bugs (DN-required service rows, rate cache, monthly sales, section toggles, POS tax id) Fixes several Selling Settings bugs, including service rows that cannot be invoiced when a Delivery Note is required, and a stale maintain-same-rate cache.
- fix Party specific item rule gaps Re-validates items on update after submit, applies group-level rules down the subtree, and allows an existing rule to be saved again.
- fix Read internal transfer rate settings from the correct cache key A changed setting now applies immediately instead of after the cache TTL.
- fix Validate installation note against delivery note (v15) fix: validate installation note against delivery note (v15)
- fix Leave cancelled entries out of the item heatmap The item heatmap ignores cancelled Stock Ledger Entries; stock quantities and values are unchanged.
- fix Count only submitted documents in the sales person heatmap The heatmap ignores draft and cancelled documents, matching the allocated amounts.
- fix Keep custom fields visible in primary address and contact section Hides the primary address and contact fields one by one instead of the whole section, so custom fields still show.
- fix Run snapshot reports on live data for users with permission restrictions Snapshot mode runs General Ledger, Balance Sheet, Profit and Loss and Trial Balance on live data for users with User Permissions.
- fix Correct value rendering on task info page Fixes a filter precedence error so values with special characters display correctly.
- fix Apply commit-analyzer options (Release config fix; listed under Chores as well.)
- fix Correct delivery note credit exposure A submitted Delivery Note is no longer counted twice against the customer's credit limit when Bypass credit limit check at Sales Order is enabled.
- fix Round unallocated repair cost to field precision Rounds the remaining repair cost to the field's precision so an exact-remainder allocation no longer fails with a false "exceeds available amount" error (closes #60234).
- fix Reset foreign currency payment request status on cancellation Cancelling payments on a foreign-currency Payment Request now resets its status correctly instead of setting it to Partially Paid, by comparing amounts in the same currency.
- fix Skip serial nos earlier disassemblies already used A later partial disassembly skips serial numbers already used by earlier disassemblies of the same source, so it no longer fails with "already present in the warehouse".
- fix Show error for unmatched scan in barcode scan dialog Scanning a value that is not a matching barcode, batch or serial in the scan dialog now plays the fail sound and shows an error, as the duplicate scan already did.
- fix Toggle commission sections across selling forms The Enable tracking sales commissions setting now also shows or hides the commission and sales team sections on Sales Order, Delivery Note and POS Invoice, not only Sales Invoice.
- fix Account for process loss in plan progress The Production Plan Visualizer subtracts process loss from pending quantities and completion percentages, so completed production no longer shows as pending.
- fix SMS Center recipient and receiver-list bugs (v16) Fixes a crash when selecting All Lead (Open), splits receiver numbers on the last " - " so hyphenated names reach the right number, and de-duplicates All Contact recipients.
- fix Restore v15 behaviour for party specific item A party with Party Specific Item rules sees only the matching items again, Customer and Supplier Group rules apply to their members, and save blocks items outside the list.
- fix SMS Center recipient and receiver-list bugs Fixes a crash in the Lead (Open) recipient list, sends SMS to the correct number when a name or number contains a hyphen, and stops duplicate or missing contacts for All Contact.
- fix SMS Center recipient and receiver-list bugs (v15) Manual backport of #61679 to v15 with the same SMS Center fixes.
- fix Match payment entry to visible number format POS payment input uses the invoice currency's number format for precision, so whole-unit currencies accept whole amounts.
- fix Round debit credit diff before comparing in make_round_off_gle Rounds the debit and credit difference before comparing it, so float error no longer drops a round-off entry and leaves a 0.01 imbalance.
- fix Backport 25 selling, buying and setup fixes from develop (v15) Cherry-picks 25 fixes already merged to develop into the v15 hotfix branch, covering stock, selling, buying, accounts and setup.
- fix Show Territory-wise Sales amounts with the right totals and permissions Counts each order or invoice once, uses base opportunity amount, and applies Customer and Company user permissions. Before, it leaked other parties' and companies' totals.
- fix Reject zero-quantity validation bypass A stale has_unit_price_items flag let Sales Orders with zero quantities pass validation after Allow Zero Quantity was disabled.
- fix Keep Work Order target warehouse from BOM, then company, then item The target warehouse now falls back in order: BOM default, company finished goods, item default, item group default. It is filled when BOM items are fetched, so the form shows it before save.
- fix Preserve picked reservations when updating items Updating Sales Order items no longer cancels reservations that have been picked, so the remaining stock is reserved again.
- fix Correct delivery progress and reservation limits Closing a row no longer counts Skip Delivery service rows in delivery progress. Stock reservation checks now count existing reservations across all warehouses.
- fix Exempt delivery returns from sales order requirement Returns against Delivery Notes made without a Sales Order are no longer blocked when the Sales Order requirement is turned on.
- fix Keep Asset Capitalization consumed asset value at disposal-date book value Consumed Manual-depreciation assets use their book value on the capitalization date instead of the salvage value, so the new asset's cost is no longer understated.
- fix Accept operator filters in BOM item query Same change as #61625, on develop.
- fix Don't divide by zero when no finished good is received Same change, on develop.
- fix Reserve job card materials from their source warehouse A Subcontracting Order reserves from the Job Card's source warehouse by default, not the finished-good warehouse.
- fix Validate consumed batches on the serial and batch bundle The Incorrect Batch Consumed check also reads batches from the bundle, and one empty row no longer stops checks for the rows after it.
- fix Keep job card transfers on their operation's rows A Job Card transfer is credited only to the rows of its own operation, not to other operations' rows.
- fix Correct workstation status and refresh floor view Material transfers no longer leave a Workstation showing red on the Plant Floor, and Job Card status changes now notify open floor views.
- fix Hand subcontracted operation inputs over to the subcontracting order A Work Order no longer double-counts inputs that a Subcontracting Order has taken over.
- fix Hand subcontracted operation inputs over to the subcontracting order Backport of #61519 for v16-hotfix.
- fix Add sub-assembly operating cost in company currency Operating cost from sub-assemblies is converted to company currency instead of being added in the BOM currency.
- fix Keep over-receipt qty whole for whole number UOMs Over-receipt allowances on whole-number UOMs no longer produce fractional quantities, such as 4.5 Nos, that break Purchase Receipt saves.
- fix Round purchase stock qty and ordered qty for whole number stock UOM Stops fractional leftovers such as 99.9999999 Nos on Purchase Order stock qty and the Bin's Ordered Qty.
- fix Post order billing provisional reversals from the posted provision An invoice made after a cancelled invoice now reverses the correct provision.
- fix Round purchase stock qty and ordered qty for whole number stock UOM Backport of #61566 to v16-hotfix.
- fix Round purchase stock qty and ordered qty for whole number stock UOM Backport of #61566 to v15-hotfix.
- fix Receipt, pick list, reservation and quality inspection fixes Backports a batch of bug-review fixes for Quality Inspection, Warehouse, Pick List, Stock Reservation Entry and Purchase Receipt.
- fix Stock Entry and Work Order fixes Backports bug-review fixes for Item Alternative, Stock Entry Type, Stock Entry, Manufacturing Settings and Work Order.
- fix Keep transferred materials in stock UOM for returns and backflush Return Components and backflush use stock UOM when a component was transferred in several units.
- fix Match each repeated operation to its own BOM row in create BOM Repeated operations on a BOM each take their own fixed-time and batch-size settings, instead of the first matching row's.
- fix Count deleted rows in the update items blanket order check Rows removed in the same Update Items action are included in the blanket order quantity check.
- fix Apply dated supply to each demand merged into an MRP row Supply that arrives in time for each merged demand is counted, not just the first.
- fix BOM, Job Card, Workstation and other manufacturing fixes Backports bug-review fixes for Plant Floor, Routing, Workstation, BOM Update Log, BOM, BOM Creator, Downtime Entry and Job Card.
- fix Production Plan, Material Request and planning fixes Backports bug-review fixes for Sales Forecast, Production Plan, MRP report, Blanket Order, Material Request and Master Production Schedule.
- fix Validate brand defaults Shares company-default validation across Item, Item Group and Brand. Rejects duplicate company rows, company mismatches and inventory account conflicts.
- fix Clear customer incoterms from purchase orders A Sales Order's customer delivery terms are no longer copied into the supplier Purchase Order.
- fix Reject duplicate holiday dates across value types Server-side scripts that append a Python date can no longer save a date already in the Holiday List.
- fix Preserve POS rounding and hide missing in-words fields Saving Global Defaults no longer overwrites a POS Profile's rounding setting.
- fix Resolve current active call recipients Call popups use current Active Employee records, not copied Employee Group user IDs. Duplicate group members are rejected.
- fix Exclude previous fiscal years from P&L account opening in GL Income and expense accounts open at zero each fiscal year in the General Ledger, instead of carrying the previous years' totals.
- fix Check is_group before filtering tree accounting dimensions Accounting Dimension Filters on trees without an is_group field, such as Employee, no longer raise PermissionError.
- fix Keep the outstanding unchanged by Show Future Payments The Show Future Payments option no longer changes the outstanding shown as of the report date.
- fix Match call log phone numbers on their normalised digits Call log numbers match Contact, Lead and Employee numbers even when they contain spaces, dashes or brackets.
- fix Working-time holds and failing overdue agreements in SLA Paused time is added in working time, and an agreement fails once its deadline passes.
- fix Match Lost Opportunity period on the date it was lost A later edit no longer moves a lost opportunity out of its report period.
- fix Show input and output VAT of a reverse-charge invoice Reverse-charge invoices no longer net to zero in the VAT Audit Report.
- fix Find ratio groups without typed group accounts Financial Ratios no longer show 0 when no shipped chart type covers the group accounts.
- fix Let asset capitalization and repair roles use their forms Accounts and manufacturing roles can open Asset Capitalization and Asset Repair forms.
- fix Exclude closed rows from drop ship delivery progress Closed rows are ignored when recalculating the linked Sales Order's delivery percentage.
- fix Prevent dropship deliveries against closed order items Closed Purchase Order items no longer appear in the Deliver (Dropship) dialog.
- fix Advance validation uses company currency precision An advance of KWD 3.071 against a USD invoice is no longer rejected because the total was rounded to invoice-currency precision.
- fix Territory-wise Sales report amount and permission bugs Manual backport of #61524, fixing the report's amount and permission handling.
- fix Territory-wise Sales report amount and permission bugs Same change as #61530, for another branch.
- fix Apply party permissions to contracts User Permissions on Customer, Supplier and Employee now limit contract access, since Party Name is a Dynamic Link.
- fix Limit prospects report to permitted records Prospects Engaged But Not Converted lists only the Leads, Opportunities, Quotations and Issues the user can read.
- fix Remove the Stock Delivered But Not Billed account from the US chart On version-16-hotfix only, removes account 11430 from the US chart, so creating a company with that chart works again.
- fix Limit prospects report to permitted records Same change as #61044.
- fix Do not reserve semi-finished goods the work order makes itself Work Orders stop reserving semi-finished goods that an earlier operation of the same order makes; rework items stay reserved.
- fix Limit prospects report to permitted records Same change as #61044.
- fix Do not fetch serial nos for batch items when using serial/batch fields With Use Serial / Batch fields on, picking a batch for a serial-and-batch item no longer fills the Serial No field, and three related row fixes are included.
- fix Do not count produced rows as consumed An empty source warehouse on a produced row is treated like a missing one, so a semi-finished good is no longer counted as consumed when made.
- fix Do not fetch serial nos for batch items when using serial/batch fields (backport #61449) Backport of #61449 to version-15-hotfix.
- fix Net adjustment entries in the Stock Balance snapshot Stock Balance's In and Out columns net an Adjustment Entry into one change, instead of showing all stock going out and back in.
- fix POS serial check and cross-table serial picks for auto picked serial and batch rows Follow-up to #61449: fixes the POS serial check and serial picks on auto-picked serial and batch rows, where the Serial No field stayed empty.
- fix Do not fetch serial nos for batch items when using serial/batch fields (backport #61449) Backport of #61449 to version-16-hotfix.
- fix Net adjustment entries on Serial and Batch Wise Stock Balance batch rows Applies the same netting to batch rows of the Serial and Batch Wise Stock Balance report, so they match the item row.
- fix Packing, shipment, delivery note and delivery trip fixes (backport) Backports bug-review fixes for Packing Slip, Shipment, Delivery Note and Delivery Trip to version-16-hotfix.
- fix Share revaluation adjustments with split assets Revaluation adjustments move with the new assets when an asset is split, so disposal credits the right amount.
- fix Keep sale and return entries of an asset stable on repost Reposting ledger entries no longer changes an asset's sale and return entries.
- fix Delivery Note credit note review follow-up Fixes credit notes for returns in another unit, which came out smaller than they should, plus one more credit note bug.
- fix Keep an entered depreciation rate on reschedule With Written Down Value and a salvage value, an entered depreciation rate is no longer replaced on every reschedule.
- fix Require finance book on value adjustment for assets with named books An Asset Value Adjustment on an asset with named finance books must name one, so its journal entry and asset row update the same book.
- fix Allow deleting draft assets and log all repair events Draft assets can be deleted, and repair events are all logged.
- fix Reverse returns at the lower deduction certificate rate A debit note reverses TDS at the lower certificate rate, not the category rate, once the certificate is used up or expired.
- fix Warn when the serial no is not delivered to the claim customer A Warranty Claim warns when its Serial No was not delivered to the claim's customer.
- fix Show delivery worked out from order or invoice The Delivery Note column shows the value derived from the Sales Order or update-stock invoice.
- fix Record resolution metrics and opening time without an SLA Resolution date, resolution time and hold time are recorded for Issues that have no SLA.
- fix Include subsidiaries of a selected group company Selecting a group company includes its subsidiaries' ledgers, as the Consolidated Financial Statement does.
- fix Item merge review follow-up Merging items keeps the source item's open orders, which were lost when its stock balance rows were deleted.
- fix Subcontracting Receipt batch review follow-up A disabled batch can no longer be consumed as a supplied raw material on a Subcontracting Receipt.
- fix Item master, variant, pricing, settings and batch fixes (backport) Backports bug-review fixes for nine item-master, pricing, settings and batch doctypes to version-16-hotfix.
- fix Review follow-ups of the bug-review backports (backport) Backports review follow-ups for traceability, BOM stock analysis, production plan, landed cost, stock closing and more to version-16-hotfix.
- fix Stock ledger, reposting and closing fixes (backport) Backports bug-review fixes for stock ledger, reposting, bin and closing doctypes to version-16-hotfix.
- fix Landed Cost Voucher review follow-up A Landed Cost Voucher with both a purchase and a return row can be submitted.
- fix Stock Closing Entry review follow-up The final check before publishing a closing balance also looks for changed ledger entries and pending revaluations, so no posting is missed.
- fix Incorrect Stock Value Report review follow-up Item rows show only warehouses of the selected stock account.
- fix Available Serial No report review follow-up Opening serial numbers include entries that have no Serial and Batch Bundle.
- fix Production Planning Report review follow-up Raw material returned from a Work Order is no longer treated as already issued.
- fix Production Plan Summary report review follow-up Pending qty is correct when a second Work Order replaces lost units.
- fix Serial No and Batch Traceability report review follow-up The backward trace follows an intermediate batch to the entry that made it.
- fix BOM Stock Analysis report review follow-up Maximum Producible Items keeps a unit for a recurring quantity per unit.
- fix Reset company values without saving the company (backport #55021) Transaction Deletion resets the company's cached fields directly, so a validation hook on Company can no longer stop a deletion.
- fix Order transaction deletion batches by name Transaction deletion fetches batches in name order, avoiding a temp-file failure on large tables.
- fix Return correct batch qty when ignore_sre is not passed Batch availability no longer returns zero, because a `[None]` filter was excluding matching stock entries.
- fix Reject template items in production plans Production Plan rows for template items are rejected, since they cannot become Work Orders; variants still work.
- fix Normalize Item opening stock before comparison Opening stock given as a string such as "0" no longer raises a TypeError on Item insert.
- fix Group sales person filter and amount total in Sales Person Commission Summary Manual backport of #61178.
- fix Group sales person filter and amount total in Sales Person Commission Summary Selecting a sales person group includes its members, and the amount total counts each document once.
- fix Account for return entries by default in Sales Partner Transaction Summary Return entries are netted by default, matching Sales Partner Commission Summary; untick the filter to see only outward lines.
- fix Closed-document amount and total double-counting in Sales Person-wise Transaction Summary Manual backport of #61280.
- fix Closed-document amount and total double-counting in Sales Person-wise Transaction Summary Closed documents in a non-stock UOM use the transaction-UOM qty, and totals count each item line once.
- fix Update YouTube statistics by time since the last update The hourly job updates YouTube statistics based on time since the last update, so frequencies such as "6 hrs" run as set.
- fix Apply warehouse permissions to Stock Ledger opening row Checks the Warehouses filter against the user's warehouse User Permissions, and fixes seven other Stock Ledger report bugs.
- fix Keep balances within the requested finance books Account balances no longer add entries from every finance book when no book is selected, so they match General Ledger and Trial Balance.
- fix Production Analytics report bug fix Work Order counts in the report now respect User Permissions.
- fix Correct payment cancellation and reject negative amounts Cancelling a payment restores the payment schedule's company-currency balance instead of subtracting it again. Internal Transfers no longer accept negative amounts or exchange rates.
- fix Job Card bug fixes Fixes 19 Job Card bugs, including sub-operations with two operators halving the completed quantity.
- fix Stock Reservation Entry bug fixes Fixes 14 bugs in Stock Reservation Entry and sets the company on the Serial and Batch Bundle built for reserved deliveries.
- fix Work Order bug fixes Fixes 15 Work Order bugs from the bug review, including Closed and Stopped orders reverting to In Process when a Job Card is cancelled.
- fix Purchase Receipt bug fixes Fixes 11 Purchase Receipt bugs, including rejected quantity being subtracted from returns when the setting is off.
- fix Item bug fixes Fixes 12 Item bugs, starting with merging items dropping the target's reservations.
- fix Blanket Order bug fixes Fixes 9 Blanket Order bugs, starting with Update Items raising a submitted order past the Blanket Order quantity.
- fix Material Request bug fixes Fixes 11 Material Request bugs, including non-Purchase requests from a Sales Order not updating the requested quantity.
- fix Master Production Schedule bug fixes Fixes 5 bugs, starting with To Date being overwritten on every save.
- fix BOM Creator bug fixes Fixes 13 BOM Creator bugs, starting with a sub-assembly used in two branches being costed with both sets of raw materials.
- fix Material Requirements Planning Report bug fixes Fixes 10 report bugs, starting with raw material quantity ignoring the BOM quantity.
- fix Production Plan bug fixes Fixes 13 Production Plan bugs, starting with consolidating two orders giving two rows with the combined quantity.
- fix Stock Analytics report bug fixes Fixes 4 bugs, starting with periods before the first movement showing 0 instead of the opening balance.
- fix Incorrect Serial and Batch Bundle report bug fixes Stops listing bundles of unconsolidated POS Invoices as incorrect.
- fix COGS By Item Group report bug fix Counts a stock movement as COGS only when it posts to the COGS account, not every movement in a voucher that touches COGS.
- fix Repost Item Valuation review follow-up A resumed repost no longer skips reposts queued while it was running.
- fix Manufacture and Repack outputs carry exactly the consumed value Finished goods are valued to the exact value consumed, so the 0.01 difference no longer goes to Stock Adjustment.
- fix Manufacture and Repack outputs carry exactly the consumed value (backport) Backport of #60393.
- fix Manufacture and Repack outputs carry exactly the consumed value (backport) Backport of #60393.
- fix Project material cost counted once (backport) Backport of #60720.
- fix Project material cost counted once Stock bought or manufactured for a project is no longer counted twice in gross margin, and Delivery Note stock is now counted.
- fix Project material cost counted once (backport) Backport of #60720.
- fix Subcontracting Order and Subcontracting BOM bug review fixes (backport) Backports the Subcontracting bug review fixes, including refusing draft BOMs on subcontracting rows and requiring an active, submitted Finished Good BOM.
- fix Combining documents keeps each source's discount Each row carries its source's additional discount, so combining documents no longer applies the last source's discount to every row.
- fix Serial and batch fixes for subcontracting inward returns (backport) Picks only the pending batch qty when returning customer material and matches consumed serial and batch entries by serial number.
- fix Pick List review follow-up Submitting a changed Pick List now recalculates its stock quantity and conversion factor.
- fix Delivery Note review follow-ups Fixes the creditable quantity for credit notes after a reduced-rate invoice.
- fix Downtime Entry bug fixes Overlapping downtime entries for the same workstation are now rejected.
- fix Itemwise Recommended Reorder Level report bug fixes Components delivered through Product Bundles are now counted in consumption.
- fix Work Orders in Progress report bug fix Completed Work Orders with process loss no longer stay listed as in progress.
- fix Work Order Consumed Materials report bug fixes Returned Qty is now converted to the stock unit of measure, like the other quantity columns.
- fix Work Order Stock Report bug fixes Multi-level Work Orders are checked against their exploded raw materials, not the BOM's own lines.
- fix Work Order Summary report bug fixes Work Orders planned to start later are now listed.
- fix Quality Inspection Summary report bug fixes Fixes a KeyError that made the report fail when an inspection has status Cancelled.
- fix Production Plan Summary report bug fix Process loss on a completed Work Order no longer shows as pending.
- fix Production Planning Report bug fixes Required Qty is now in the stock unit of measure, matching stock and open Purchase Order quantities.
- fix Exponential Smoothing Forecasting report bug fixes Stops the forecast from shrinking toward zero in future periods.
- fix Cost of Poor Quality Report bug fixes Job Cards are costed only for the periods they fall in, not their full cost in every period they touch.
- fix BOM Stock Analysis report bug fixes A material used directly and inside a phantom BOM is no longer checked twice against the same stock.
- fix BOM Variance Report bug fixes Shows real variances, not only extra output, for Work Orders that consumed more material than planned.
- fix BOM Operations Time report bug fix Fixes the sub-assembly BOM count, which counted draft and cancelled parents and repeated rows.
- fix Sales Partner Transaction Summary: account for return entries by default Return entries are included by default in the report.
- fix Sales Partner Transaction Summary: account for return entries by default (backport) Same change as #61119 on another branch.
- fix Sales Person Commission Summary: group sales person filter and amount total Fixes the sales person filter grouping and the amount total.
- fix Sales Person-wise Transaction Summary: closed-document double-counting Closed documents no longer double-count amount and total.
- fix Convert receipts, returns and debit notes to purchase order UOM (backport) Backport of #60571, converting received, returned and billed qty. Receipts now count by stock when only the conversion factor changes.
- fix Convert receipts, returns and debit notes to purchase order UOM Receipts, returns and debit notes are converted to the Purchase Order's UOM, so received, returned and billed quantities match the order.
- fix Convert receipts, returns and debit notes to purchase order UOM (backport) Backport of #60571, the same change as #61285 on another branch.
- fix Leave order-neutral debit notes out of billed qty when making a Purchase Invoice Make Purchase Invoice no longer subtracts debit notes that do not update the Purchase Order.
- fix Convert returns and credit notes to delivery note UOM when invoicing Returns and credit notes are converted to the Delivery Note's UOM, so Create Sales Invoice offers the correct remaining quantity.
- fix Leave order-neutral debit notes out of billed qty (backport) Backport of #61336, also including the invoice return fix from #60571.
- fix Leave order-neutral debit notes out of billed qty (backport) Backport of #61336, also including the invoice return fix from #60571.
- fix Convert returns and credit notes to delivery note UOM when invoicing (backport) Backport of #60570.
- fix Convert returns and credit notes to delivery note UOM when invoicing (backport) Backport of #60570.
- fix Convert returns to sales order UOM in order progress (backport) Backport of #60569.
- fix Convert returns to sales order UOM in order progress Returns are converted to the Sales Order's UOM, so delivered, returned and billed quantities on the order are correct.
- fix Convert returns to sales order UOM in order progress (backport) Backport of #60569.
- fix Skip the source discount when no rows are added When an order adds no rows to a receipt, its header discount is cleared, so it no longer applies to the receipt's existing rows.
- fix Skip the source discount when no rows are added (backport) Backport of #61296.
- fix Show rates in the item price's currency in Item Price Stock report Buying and Selling Rate columns use each Item Price's own currency instead of the default currency.
- fix Show rates in the item price's currency (backport) Backport of #61314.
- fix Show rates in the item price's currency (backport) Backport of #61314.
- fix Validate payment mode accounts and enabled status Mode of Payment default accounts must be cash or bank, not group, income, payable or disabled, and disabled modes are rejected on transactions.
- fix Correct the dunning letter example The Dunning Type letter example uses fields that no longer exist, so copied placeholders now resolve to invoice details.
- fix Carry reserved serial and batch to delivery note row fields A Delivery Note made from reserved serial or batch stock now fills the row fields, so submit no longer fails with "Serial and Batch Bundle None not found".
- refactor Stop release notes job when note generation fails The release notes step fails when note generation errors, so a release keeps its generated notes instead of a null body.
- refactor Stop release notes job when note generation fails Same CI fix on a third branch.
- refactor Stop release notes job when note generation fails Same CI fix on a second branch.
- refactor Run translation syncs with Frappe Release Bot app ci: run translation syncs with Frappe Release Bot app
- refactor Cancel unfinished runs of every closed pull request ci: cancel unfinished runs of every closed pull request
- refactor Skip wkhtmltopdf and erpnext assets in patch test ci: skip wkhtmltopdf and erpnext assets in patch test
- refactor Run patch test on self-hosted runners ci: run patch test on self-hosted runners
- refactor Run MariaDB server tests on MariaDB 11.8 ci: run MariaDB server tests on MariaDB 11.8
- refactor Run small PR checks on self-hosted runners ci: run small PR checks on self-hosted runners
- refactor Use `init_from_dict` in virtual doctypes Uses `init_from_dict` instead of calling the base constructor directly in Payment Reconciliation and Bulk Transaction Log.
- refactor Retry git fetches between versions Retries the three git fetches in the patch test, so a network blip no longer fails a merge-queue run.
- refactor Fix Delivery Trip notify test isolation (v16) Randomises the notify Email Account's email so parallel test runs don't collide.
- refactor Release v15 chore: release v15
- refactor Release v16 chore: release v16
- refactor Merge version-15 into version-15-hotfix Merges version-15 into the hotfix branch, keeping the hotfix side on the one conflict.
- refactor Merge version-16 into version-16-hotfix chore: merge version-16 into version-16-hotfix
- refactor Merge version-16 into version-16-hotfix chore: merge version-16 into version-16-hotfix
- refactor Add daily dependency vulnerability audit Runs pip-audit daily on the three main branches and opens or comments on an issue when it finds vulnerabilities.
- refactor Drop needs-tests label rule Removes the labeler rule that added `needs-tests` to every Python-only PR.
- refactor Post receipt returns after their fixed-time receipts Fixes two Purchase Receipt tests that failed when CI ran between midnight and 08:00 site time.
- refactor Remove unused production capacity field (backport #61513) Backport of #61513.
- refactor Remove unused production capacity field Removes the Item production_capacity field, which no code read; Workstation's field is unchanged.
- refactor Move translations from CSV to gettext Moves v15 translations from CSV files to PO/POT gettext files, matching develop and version-16.
- refactor Reduce mergify batch max wait time to 10 minutes Cuts the default merge queue batch wait from 15 to 10 minutes so queued PRs merge sooner.
- refactor Build BOM test records for the report tests Report tests declare the BOM test dependency so they no longer rely on test order within a CI shard.
- refactor Compare traceability raw batches in sorted order Sorts the expected rows so the test doesn't depend on random batch names.
- refactor Compare traced raw batches without relying on name order Sorts the expected batch rows, which had been failing in merge queue runs.
- refactor Restore checks that #61087 left without cover Restores 11 tests that no other test replaces.
- refactor Restore business logic tests dropped as redundant Restores 79 business-rule tests that #61087 deleted as redundant.
- refactor Drop tests proven redundant by mutation Removes 9 tests whose covering test also fails when the code is broken.
- refactor Post opening stock at midnight so the test passes before 10:30 Posts the opening stock reconciliation at 00:00 so backdated entries don't fail before 10:30 IST.
- refactor Log lowered allowance job card time in the past Stops a test from overlapping scheduled Job Card slots when CI runs before working hours.
- feat Employee Overview dashboard and simpler New Employee dialog Adds an Overview tab to Employee with pay, attendance, leave and pending-items figures, and a simpler New Employee dialog.
- fix Skip assignment masters the user can't read Opening an Employee showed an Insufficient Permission error for users who could not read an assignment master. Those masters are now skipped.
- fix Apply company filter in goal tree The goal tree showed goals from every company the user could access. It now applies the selected company filter.
- fix Update pwa layout direction for rtl languages The PWA sets `dir` on `` for right-to-left languages, and its left/right styles are now start/end.
- fix Add confirmation before cancelling request in pwa Cancelling a submitted request in the PWA now asks for confirmation first.
See all 10 changes
- fix Keep salary slips that fail to submit in draft A salary slip that fails partway through payroll entry submission goes back to draft, instead of staying submitted with no accrual, loan repayment or email.
- fix Restore add button for users without a linked employee Users with create permission but no linked Employee get the Add button back on Employee Checkin.
- fix Validate goal start and end dates Passes the field names to the date validator, so goals with an end date before the start date are rejected.
- refactor Move to gettext chore: move to gettext
- refactor Release v15 chore: release v15
- feat User availability status Users set Active, Away, Unavailable or custom status, shown on avatars, and assignment rules favour available users.
- fix Keep the availability dot inside the avatar so list cells don't clip it Moves the availability dot onto the avatar's corner so list cells no longer cut off its bottom edge.
- feat Filter tree Link fields by descendants (inclusive) Adds a "Descendants of (inclusive)" filter, so filtering Territory by a parent includes its child territories.
- feat Ship CRM guidance as an assistant skill Replaces the MCP agent instructions in MCP Settings with a CRM skill that ships with the app.
- feat Guide MCP agents through CRM workflows Adds CRM instructions to MCP Settings, such as converting leads instead of creating deals by hand.
See all 28 changes
- feat Call any deal contact from its options menu Adds Make a Call to each contact's menu on the deal side panel.
- fix Keep lead owner as deal owner when converting with co-assignees When a lead had several assignees, converting it set the deal owner to the last co-assignee. It now stays the lead owner.
- fix Skip setup wizard unless an installed app adds wizard steps fix: skip setup wizard unless an installed app adds wizard steps
- fix Keep setup choices and availability dots right Setup choices are kept when saving fails. Renaming an availability status refreshes open tabs.
- fix Keep data import working on Frappe v15 Falls back to the older DataImport component on Frappe v15, since the new wizard exists only on v16.
- fix Doc and deal perm checks Improves the permission checks in a few doc and deal API methods.
- fix WhatsApp errors when the app is not installed and template empty states Stops the "App whatsapp is not installed" toast on lead and deal pages, skips the WhatsApp recipient check when the app is absent, and adds empty states for templates.
- fix Update lead and deal modified time on WhatsApp messages Sending or receiving a WhatsApp message updates the lead or deal's modified time, following the "Update timestamp on new communication" setting.
- fix Split phone number lookup for server side linking Separates the server-side phone lookup used by call and WhatsApp linking from the one the UI uses.
- fix Only list outgoing email accounts in From dropdown The From dropdown lists only accounts with outgoing enabled, so the chosen address is the one that sends.
- refactor Skip asset builds in server and migration tests ci: skip asset builds in server and migration tests
- refactor Patch Release chore: Patch Release
- refactor Wait for the frappe asset build before running server tests ci: wait for the frappe asset build before running server tests
- refactor Cut CI minutes and harden workflows ci: cut CI minutes and harden workflows
- refactor Cache apt packages ci: cache apt packages
- refactor Seed main-hotfix server test caches on push ci: seed main-hotfix server test caches on push
- refactor Cache node_modules ci: cache node_modules
- refactor Skip frontend install and asset builds in server tests ci: skip frontend install and asset builds in server tests
- refactor Cancel unfinished runs when a pull request is closed ci: cancel unfinished runs when a pull request is closed
- refactor Build arm64 images on native arm runners revert: build arm64 images on native arm runners
- refactor Weekly Release chore: Weekly Release
- refactor Test main-hotfix against released frappe ci: test main-hotfix against released frappe
- refactor Skip guided setup in e2e Skips the guided setup step in end-to-end tests.
- fix Course outline fields, Getting started for moderators and the first-course flow The course outline no longer returns every lesson's video link, quiz id and question to anyone who can view the course, including guests.
- refactor Cached bench, subset runs and fewer jobs on main-hotfix, plus the enrolment and sign-up fixes (backport #2964, #3117) ci: cached bench, subset runs and fewer jobs on main-hotfix, plus the enrolment and sign-up fixes (backport #2964, #3117)
- feat Redesign evaluator availability as a weekly hours table Availability becomes a weekly hours table. Slots and Schedule tabs show only for Batch Evaluators.
- feat Add the frappe-learning agent skill, and let frappectl reach Learning methods (backport #3079) Backport of #3079.
- feat Add the frappe-learning agent skill, and let frappectl reach Learning methods Adds an agent skill for managing a Learning site, and lets frappectl call Learning methods.
See all 28 changes
- feat Paging, missing inputs and fixes for scripts that use the API (backport #3062) Home page lists take start and limit_page_length, so scripts can read past the first page.
- fix Verify Razorpay orders and charge GST by billing address Before a payment is marked paid, the callback checks with Razorpay that the order matches the checkout's receipt and amount. GST is decided from the billing address's country.
- fix Scope mentions, lesson embeds and SCORM files A discussion reply notifies a mentioned user only if they take part in that discussion, and at most 10 users are notified per reply.
- fix Scope batch announcements and records filed by learners Batch announcements show only mail sent by the batch's own staff. Quiz submissions lock the member's row before counting attempts, so parallel submits cannot exceed `max_attempts`.
- fix Record exercise results only from the grading endpoint A learner could write their own status and test results through the document API. The controller now rejects writes that do not come from the grading endpoint.
- fix Program member access on customised sites, plus faster CI Staff keep read and write on program member fields on sites that customised LMS Program permissions.
- fix Scope access on assessments, certificates, programs, discussions and mentions Open-ended quiz answers are saved with zero marks so learners cannot grade their own work, and only the author can delete a programming exercise.
- fix Use the rebuilt import wizard, which frappe version-16 now ships Points the import page at the renamed wizard so the main-hotfix frontend build passes again.
- fix Batch progress, activity heatmap, POST-only actions and evaluation bookings Batch student progress is now limited to site administrators, Moderators, and the batch's tagged instructors or evaluators. Holding the Batch Evaluator role alone no longer exposes other batches' students.
- fix Send the quiz unload beacon's CSRF token in the body The quiz auto-submit beacon sends its CSRF token in the request body instead of the URL, so the token no longer lands in proxy access logs.
- fix Disambiguate option correctness and explanation labels in LMS Question Gives each option's "Is Correct" and "Explanation" field a unique label, which matters because bulk import matches on labels.
- fix Preserve stored file bytes on frappe version-16 Stops File.get_content() from decoding binary files as windows-1250, which corrupted resumes, inline images, course ZIPs and attached files on v16 sites.
- fix Fix quiz submit on page unload when CSRF is enforced Auto-submit beacons now include the CSRF token, so sites that enforce CSRF no longer reject them.
- fix Pass create_lms_certificate's target to get_mapped_doc as a doc Create Certificate from an evaluation no longer raises AttributeError on v16 sites.
- fix Store course reviews as plain text and print them as text Reviews are stored as plain text with tags stripped, and the Multiple Testimonials block prints them escaped, so review markup no longer reaches the public page.
- fix Store course reviews as plain text and print them as text (backport #3069) Reviews are stored as plain text with tags stripped, and the Multiple Testimonials block prints them escaped, so review markup no longer reaches the public page.
- fix Open the newest question, show lesson tabs on first load, and publish releases to the marketplace The Community tab opens the newest question, and lesson tabs show on a direct first load.
- fix Fit the new course form, allow beautifulsoup4 4.15, and let Mergify open conflicting backports The new course form fits a laptop-sized window, so the description editor is no longer cut off.
- refactor Pin setuptools<82 for the v2.0.0 seed bench ci(patch): pin setuptools<82 for the v2.0.0 seed bench
- refactor Use GITHUB_TOKEN for release notes workflow ci: use GITHUB_TOKEN for release notes workflow
- refactor The lms frappe-ui upgrade Upgrades frappe-ui to 1.0.0-rc.1 and adopts its components, dark-mode fixes, and CI pins for v16 on main-hotfix.
- refactor Merge 'main-hotfix' into 'main' chore: merge 'main-hotfix' into 'main'
- refactor Vouches Nagaraj-62 Adds the author of #3074 to the vouch list so they can open pull requests.
- feat Show Edit for properties that have a control in More Styles The More Styles picker shows "Edit" for properties that have their own control, which scrolls to and focuses that control.
- fix Connect remote fetches only to public addresses and require page write to convert images Blocks remote fetches to internal addresses, including public URLs that redirect to one, and requires page write permission to convert images.
- fix Fix(sitemap, token, number prop)… Backports the sitemap changes to list only indexable pages, moves standard tokens into developer mode, fixes number props overwriting the max value, and makes Builder installable again.
- fix Run Bob with the user's own permissions Confirmed AI actions run with the signed-in user's permissions. `run_python` runs in a restricted namespace, and DocTypes Bob creates no longer get Guest read.
- fix Install on frappe develop, plus editor type, lint and test fixes Unblocks install on frappe develop, where Web Page View is now virtual, and fixes editor types, lint and tests.
See all 7 changes
- feat Group the ticket list by fields with counts and totals Adds Group By to the agent ticket list, with counts, averages and totals, saved with the view. Grouped exports match the list.
- fix Ticket page, settings and timezone fixes; old saved views; ticket origin Saved views from the old customer portal no longer crash the ticket list. The ticket form layout and timezone handling are fixed, and tickets record their origin.
- feat Public knowledge base on the studio portal The knowledge base moves to the Studio portal at `/help`, with public, customers-only and private articles.
- feat Studio-built customer portal Customers get a new portal at `/help`, built as a Frappe Studio app. It needs frappe `develop` (v17).
- fix Let the studio portal's calls through block_endpoints On sites with `block_endpoints`, signed-out visitors to `/help` were sent to login and ticket pages returned a 404. The portal's calls now pass through, and each new method checks permission itself.
- feat Pick a year, fiscal year, quarter or month in a date filter Date filters list years, fiscal years, quarters, and months that appear in the data.
- feat Add frappe-insights skill for the assistant, MCP and frappectl Adds a skill whose steps name document reads, writes or whitelisted methods, so one skill works across Flow, MCP and frappectl. The old workbook CLI skill is marked deprecated.
- feat Progress bar on number cards Number cards can show a progress bar toward their target, or out of 100% for percent measures.
- fix Group digits by Frappe's number format, not the country Charts group digits by the currency's or System Settings number format, so an AED dashboard no longer shows lakh and crore grouping.
- fix Bind every table of a grouped join in native SQL A grouped join in native SQL skipped the permission check on its first table, so a user without a grant could read it.
See all 13 changes
- fix Fix Insights schema-qualified tables Backport of #1520. Native SQL can read schema-qualified PostgreSQL tables.
- fix Fix Insights schema-qualified tables Backport of #1520, on a second branch.
- fix Read schema-qualified tables in native SQL The SQL editor accepts schema.table and resolves names the way PostgreSQL does.
- fix Pin a fiscal-year axis' ticks to its years Fiscal-year axis ticks sit on the fiscal years, so labels no longer repeat or go missing.
- refactor Pin frappe-ui at its merge of frappe/frappe-ui#1307 Fixes a version collision where Insights and Frappe's island toolchain installed different frappe-ui commits.
- refactor Assert a donut share that no rounding tie can move Test fix for a donut chart share that changed by rounding tie-breaks.
- refactor Migrate to vite 8 Moves the frontend build to Vite 8 and frappe-ui main.
- refactor Clean frappe-ui from the yarn cache before bench build Clears cached frappe-ui builds before the bench build, so the older pin is not reused.
- fix Use ? for redirect_message when url has no query string A failed charge with no redirect_to builds a valid payment-failed URL instead of one with & in place of ?.
- refactor Update version-15 chore: update version-15
- refactor Check dependencies with pip-audit Adds a pip-audit job to the linter workflow, matching the Frappe app boilerplate.
- refactor Fix linter issues Fixes lint issues.
- refactor Bump setuptools from 80.9.0 to 83.0.0 Bumps setuptools to 83.0.0.
- feat Add binlog_legacy_event_pos mariadb variable Staff can set `binlog_legacy_event_pos` on a Database Server, applied without a restart.
- feat Ban SSH brute force with Fail2Ban on every server Fail2Ban gets an SSH jail on every server kind and is installed on new servers. Scanner logins were filling sshd's connection slots and blocking Press's own Ansible runs.
- feat Let a team scrape its own server metrics Adds a second basic-auth user to the metrics file, so a team can scrape its own servers without changing Central's monitoring.
- feat Mark support tickets raised via fc in url Support links in the Frappe Cloud dashboard add `?utm_source=frappe-cloud` so support can see where tickets came from. It is for reporting only.
- feat Record a daily backup audit doctype instead of Raven Records a daily backup audit doctype in place of the Raven digest, with agent job success rates and failing sites.
See all 24 changes
- feat Notify the team when a job fails on a full disk Sends an actionable notification when an agent job fails with "No space left on device", instead of the generic failure notice.
- feat Rotate a site's database password from desk Backport to master of #7777.
- feat Rotate a site's database password from desk Adds a staff-only action on the Site form that generates a new database password and applies it on the bench's database server.
- fix Block schema fetches while one from the last 30 min runs Extends the duplicate-job window for Fetch Database Table Schema from 5 to 30 minutes, so repeated calls cannot pile up large pending jobs that stall a server's agent queue.
- fix List sites without a successful backup in the daily audit The daily audit now lists sites with 3 or more failed backups in 24 hours, plus sites with no successful backup in a day or in 3 days. A site that recovered no longer stays on the list.
- fix Mask traceback for errs in release pipeline ui Release pipeline errors show a message instead of the raw traceback.
- fix Require certifi 2026.10.19 or later Raises the minimum certifi version to 2026.10.19.
- fix Hand out hybrid standby sites only on rule match Stops a signup from a country with no rule getting another country's hybrid site from the shared standby queue.
- fix Weekly installs query and protected names Passes the app name to the marketplace weekly installs query as a parameter instead of an f-string, and limits `@protected` to a single str or int document name.
- fix Refactor(telegram)!: Webhook token refactor(telegram)!: Webhook token
- fix Exempt system managers from the employee checks Same change as #7807, opened on the main branch.
- fix Report public database server metrics Raises the database server disk alert threshold to 91% and the OOM kill alert threshold to 30 kills.
- fix Require team consent for employee access to customer sites Same change as #7800, on a separate backport branch.
- fix List every role in the invite user dialog Team admins see every Press role in the invite dialog, not just the first 20.
- fix Stop invoice dialog request loop on snapshot lines Invoices with two or more snapshot lines no longer send requests forever, so the item table shows.
- refactor Check dependencies with pip-audit ci: check dependencies with pip-audit
- refactor Replace raw SQL outside patches with frappe.qb Moves about 40 raw SQL queries to frappe.qb, so Press can run on Postgres, and removes SQL built from f-strings.
- refactor Verify the Mailgun signature on mail events Checks the Mailgun signature on every event using a new Webhook Signing Key in Press Settings, forwards events only to the subscribed site with a timeout, and stores the Mailgun API key as an encrypted Password field. The signing key must be entered after deploy or every event is rejected.
- refactor Verify Mailgun event signatures (backport #7815) Backport of #7815 to the release branch, with the same post-deploy signing key step.
- feat Guided setup, per-company config, exemptions, and UX overhaul Adds a guided setup wizard, per-company configuration, exemptions and a UX overhaul, migrated to Frappe v16.
- feat Calendar heatmap, percentage bar, and what desk needs to drop frappe-charts Adds the calendar heatmap and percentage bar charts that Desk needs in order to drop frappe-charts.
- fix Draw a disabled input-mode value in the muted ink A disabled Combobox's value is drawn in the muted colour, so it no longer looks editable.
- fix Tag-size chips, no empty suggestion list Recipient chips use the tag size, and the suggestion list opens only when it has something to show.
- feat Manage gateway webhook endpoints and events from desk Central reads and updates each payment gateway's webhook endpoint and events when keys change, and records more Stripe states.
See all 220 changes
- feat Send operator alerts to a Raven channel Billing operator alerts go to a Raven channel by default, with email only to a named list.
- feat Let a site ask which providers are turned on A site can ask Central which mail providers have one-click sign-in enabled, so it only shows those buttons.
- feat Suspend and unsuspend a team from desk Staff can suspend a team with a reason, which stops its servers and keys, and unsuspend it later.
- feat Archive teams and impersonate a team owner Owners can archive a team once six checks pass, and staff can restore it or open the console as its owner.
- feat Support portal integration The console gets Help links to a support ticket and feedback URL, set per site.
- feat Snap image, video and embed resizing to useful widths Resizing an image, video, or embed snaps to useful widths with a guide line. Holding Alt resizes freely.
- feat Charts in and out of .xlsx; import into a new file replaces its blank Sheet1 Sheets exports and imports charts in .xlsx, and importing into a new file no longer leaves an empty Sheet1.
- feat Backport email suggestions rebuild (#1063, #1064) feat(mail): backport email suggestions rebuild (#1063, #1064)
- feat Rebuild email suggestions around who you write to Recipient suggestions rank people you write to first, and include enabled Suite users and shared mailboxes.
- feat Collab glue between IronCalc, the side stores and the Y.Doc Connects each tab's workbook to the collab Y.Doc in both directions. Nothing changes for users yet.
- feat Collab undo, only your own changes Each tab undoes only its own changes, using a Yjs `UndoManager`. It is not wired into the editor yet.
- feat Sign in on the chosen subdomain before the rename A new trial site signs in on its chosen subdomain as soon as that name answers, rather than waiting for the rename.
- feat Set the frappe version of a product trial Each product trial can use a chosen Frappe version, such as `version-16`, instead of always `develop`.
- feat Show one included transfer for every server Every server includes one monthly transfer allowance, set in Central Settings, instead of a different amount per plan.
- feat Rebalance sleepy hosts under memory pressure Sleepy VMs are drained from hosts at 85% memory, with four parallel migrations and up to three retries.
- feat Drain selected VMs Metal Server Drain can be limited to selected VMs. Full-host drains still work.
- feat Stream site backups With object storage configured, site backups stream straight to S3 without touching the server's disk.
- feat Add Get started onboarding dialog feat: Add Get started onboarding dialog
- feat Publish Studio apps and framework islands in prebuilt assets Prebuilt assets now include Studio apps, so server builds of such apps no longer fail.
- feat Serve the site on every name in the zone The site is aliased to `*.`, so a customer's chosen name serves as soon as Central routes it.
- feat Grow the root file system when a running guest's disk grows A udev rule runs `resize2fs` when the kernel reports a larger `/dev/vda`, so live disk resizes take effect.
- feat Snapshot metadata dir and allow restoration cluster wide and single node Adds point-in-time snapshots of the metadata directory, with cluster-wide and single-node restore.
- feat Show marketplace panel in cloud settings Adds a Marketplace panel to the Cloud Settings dialog and moves to `@frappe/cloud-sdk` 0.4.1.
- feat Unique constraint on workspace members Enforces one member row per user per workspace. A pre-sync patch removes duplicates first.
- feat Advertise d5e0b557 feat(raven): advertise d5e0b557
- feat Advertise c51661b1 feat(lms): advertise c51661b1
- feat Free product trials with locked server access Product signups get one 7-day trial site with no server access; direct signups add a card and get full access.
- feat One-click Email oauth mail sign-in for V2 sites Sites connect a mailbox in one click through a provider app that Frappe Cloud owns; Central keeps the app secret and gives each site only its own mailbox tokens.
- feat Set default disk and network limits for new servers New servers get default disk and network limits, so one server cannot use all of a host's capacity.
- feat Add bare metal yield report and dashboard Adds a report and Insights dashboard comparing potential rate-card revenue with cash revenue.
- feat Sign in to the same account automatically on reconnect Reconnecting passes a login hint, so the provider skips its account picker.
- feat Send signup attribution with trial_requested The trial_requested event carries UTM and referrer attribution from the Team.
- feat Smoother server creation and operator links Opens the new server's page once it is ready, puts network options behind feature flags, and adds Open in Desk and Atlas links.
- feat Settings tab for turning prompt logging on/off feat(ai): settings tab for turning prompt logging on/off
- feat Show the trial and step through payment in billing Shows trial days left above the plan and walks owners through billing details and payment.
- feat Name kernels and download them from Desk Kernel records get titles and can be downloaded from their Desk form.
- feat Rank balanced hosts by memory band, storage, then CPU Placement ranks hosts by memory band, then storage pressure, then CPU pressure, and no longer prefers hosts with fewer VMs from the same tenant.
- feat Add VM sleep states Reports sleeping, deep-sleeping and comatose VM states in Metal and Atlas.
- feat Suite Cloud Agent for Stalwart nodes Adds a stdlib Go agent for Stalwart nodes that tails logs, samples the machine, scrapes Prometheus metrics and pushes batches to the telemetry API.
- feat Unify Suite user and storage administration Replaces the Mail dashboard with an admin-only Suite dashboard for users, storage, mail and settings.
- feat Automatic disk expansion / node addition of OSC feat: Automatic disk expansion / node addition of OSC
- feat Provision script dbus Lets the frappe user run systemctl on its own services.
- feat Add OAuth client credentials token Lets Shopify Dev Dashboard apps connect with client credentials and renews tokens automatically.
- feat Guard and monitor what the audit found Adds checks at the lowest level that can hold each problem a production billing audit found, such as unexplained wallet balances, over-cap trial spend, wrong-currency billing and unsynced billing profiles, plus daily monitoring to catch them.
- feat Termination protection on cloud boxes Cloud machines can enable AWS termination protection from a button, with Sync reading the state back. Terminate and Archive refuse to release the Elastic IP while protection is on.
- feat Keep the masked prefix on the key feat(keys): keep the masked prefix on the key
- feat Return termination protection in the get VM response Adds an is_termination_protected field to the get VM response, so clients can check deletion protection without a list call.
- feat Collect node logs and metrics into Insights Stores logs, traces and metrics from Stalwart mail nodes via a new telemetry API, loads them into Insights' DuckDB, and ships two dashboards.
- feat Check challans on TRACES and support correction returns Adds a Check on TRACES button that looks up a challan by BSR code, serial number and deposit date through Sandbox, and supports correction returns.
- feat Add termination protections feat: Add termination protections
- feat Add passkeys to the registry Lists the passkeys app for v15 and v16, which adds passkey sign-in and a `@passkey_protected` decorator for approving sensitive actions.
- feat Advertise v3.2.0 Publishes the Frappe Assistant Core 3.2.0 entry on the stable channel.
- feat Install is offered once, quietly, then from Profile Offers app install once on a phone, with a slim strip above the bottom bar, and then from Profile. A dismissal sticks per device and per app.
- feat Mail on a phone as an app of its own Gives Mail its own phone bottom bar and title row, with folder, search and profile tabs.
- feat Calendar on a phone as an app of its own Gives Calendar its own phone bottom bar, with the current view as the first tab and a sheet for switching views and calendars.
- feat Mail and Calendar install as apps of their own Gives Mail and Calendar their own manifests and install identities, while the rest of the Suite keeps its existing app.
- feat Block editing standard apps outside developer mode Blocks edits to standard apps outside developer mode, on the server and in the UI, and makes Vue components follow the same rule as pages.
- feat Feat(default site backups) New sites and sites with no backup policy get a default daily backup through the hourly bench job. Sites with a custom schedule keep it.
- feat Advertise 47ddeca8 feat(lms): advertise 47ddeca8
- feat A resolved Stuck Usage row lists the records it landed as Resolved rows list the usage records they produced, and the list is removed with the row.
- feat Central sets a team's prompt logging Central's console can show and change whether the gateways store a team's prompts and outputs.
- feat Answer each key's month spend, drop the usage peek Adds a spend endpoint for keys and removes the never-deployed usage peek.
- feat Even better onboarding UX Signup moves from the code to the site name without a page reload, and the waiting page shows the chosen address and real progress.
- feat Polls inside comments A Poll button in the comment editor lets users write text before and after a poll in the same comment.
- feat Configure garage gateway & storage to send logs via vector Sends gateway and storage logs through vector, redacts signatures, and drops sync and health-ping noise.
- feat Robust telemetry and failure points Adds telemetry and failure-point metrics for the garage work.
- feat Y.Doc schema for collab, with row/col id lists and a size benchmark Defines the shared Sheets document layout and a size benchmark; nothing is wired to the editor yet.
- feat Allow datum updates from desk Lets Datum updates run from Desk.
- feat Ask Suite Cloud for Suite's emails by type (backport #1029 to #881) Backport of #1029 onto the Drive layer branch.
- feat Ask Suite Cloud for Suite's emails by type Suite's emails are requested from Suite Cloud by type, so the site no longer needs its own sender.
- feat Unsubscribe from a list beside the sender, held for Undo Shows an Unsubscribe action beside the sender of mail with a List-Unsubscribe header, with Undo available.
- feat Send Suite's emails from Suite Cloud templates Adds a Suite Cloud endpoint that renders and sends Suite's fixed catalog of emails from its own templates.
- feat Bookmark comments, and open the bookmarked post from Bookmarks Any comment can be bookmarked, and the Bookmarks list opens the saved post.
- feat Progress bar on NumberCard Adds an optional progress bar to NumberCard, drawn from a caller-supplied percentage.
- feat Add x markers, line options and donut onClick Adds vertical x markers, per-dataset line options including dashed and gap handling, and a donut click handler.
- feat Explain drain failures and start a drain from the Metal Server form Shows why a drain migration failed and starts a drain from the Metal Server form.
- feat Drain a Metal Server Adds a tracked drain operation that moves every VM off a Metal Server with limited, parallel migrations.
- feat Add a toggle to turn off PDF download Adds an Allow PDF Download switch in space access settings; when off, the Download action is hidden and the endpoint returns 403.
- feat Keys carry their geography and cap Team AI keys carry a geography and a spend cap, with an overview of balance, unallocated amount and this month's usage.
- feat Central Team and policy-bearing API keys Introduces Central Team as the ledger, and API keys that carry geography, groups, allow/deny lists, rate limits and a spend cap that keeps the team's balance covered.
- feat Tune MemoryHigh, MemoryMax & Innodb Snapshot Isolation Lets MariaDB memory limits be updated, raising them up to 90% of projected total RAM.
- perf Run host metrics and uptime pings in one service Host metrics and uptime pings run in one long-running service instead of two timers, cutting CPU use on small VMs.
- perf Drop tests that restate config or Frappe, add the web test runner Removes tests that only check configuration or Frappe behaviour, and adds a Web test workflow.
- perf Open a space with one bootstrap call Loads the space, its capabilities and the user's draft in one request, instead of four.
- perf Make each save one request A save sends one request, instead of three, by returning the change summary from the save call.
- perf Keep grove peek design Refactors the peek design and adds race-condition tests.
- perf Lazy-load pdf.js for PDF blocks Loads pdf.js only when a PDF block renders, reducing the editor chunk from 3.4 MB to 902 kB.
- perf Seed the editor once instead of through a content ref Sets editor content once on creation, so typing no longer converts the whole page to markdown on every key press.
- perf Clear the tree cache per space A write clears only the sidebar tree cache of the spaces it touches, and read-only users' tree is cached too.
- perf The key record carries its policy Moves each key's policy (team, groups, geography, limits, budget) into the key record, and removes the separate user record.
- fix Keep the formula bar on the selected cell after undo/redo After undo or redo the formula bar and format toolbar stay on the selected cell, not jump to A1.
- fix A deleted named range no longer stops the others from moving Named ranges keep following row and column edits after another named range is deleted, so formulas stop reading the wrong rows.
- fix Rename message, colour pickers, charts under dialogs, ECharts notice Shows a plain rename message for a taken title, makes colour pickers work in conditional formatting, and cleans up console noise.
- fix Start an edit from text typed without a keydown (IME, symbol picker) Text from IME input, the emoji picker, or phone keyboards starts a cell edit instead of being dropped.
- fix Keep the gap above posts that follow an activity On phones, a comment or poll that follows an activity line gets its top spacing back.
- fix Open the server through Central's open_bench redirect The Open server link goes straight to the bench instead of loading the Central dashboard first.
- fix Open the bench from a site without loading the dashboard Adds a route that redirects straight to the bench login, with the same access checks as the dashboard link.
- fix Ensure we wait for all assets & mariadb before executing build workflows Build workflows wait for release assets and MariaDB before running site operations.
- fix Shorten the Details field Shortens the advisory Details field to one or two sentences, since the other fields cover the rest.
- fix Fix disk overcommit, migration rollback and host recovery gaps Placement could give the same free disk space to many VMs, and a full pool then broke every guest. Metal now reports pool size less every provisioned disk, and migration rollback and host recovery are fixed.
- fix Fix disk overcommit, migration rollback and host recovery gaps (backport #460) fix(atlas): Fix disk overcommit, migration rollback and host recovery gaps (backport #460)
- fix Keep styling, sizes, freeze, merges and conditional formats through xlsx A round trip through Excel or Google Sheets no longer loses bold, colours, column widths, freeze panes, merges or conditional formats.
- fix Rebuild address indexes when the account owner is disabled The address index rebuild failed for accounts whose owner was disabled. It now runs for those accounts.
- fix Shrink ranges when their first or last rows are deleted Deleting the first or last row of a range shrinks the range, as Excel and Google Sheets do, instead of producing `#REF!`.
- fix Convert loan application tenure to instalments for non-monthly frequency Tenure is in months, but it was read as an instalment count. A Loan Application gets a Repayment Frequency, so a 12-month Bi-Weekly loan now gets 26 instalments.
- fix Bugs testers hit first (xlsx dates, import renames, focus, paste, chart, name box) Fixes one-day date shifts in xlsx import and export, plus import, focus, paste, chart and name-box bugs found in a user-level round trip.
- fix Write the most specific hostname alias first The `admin-vm-*` alias now takes precedence over the `*.` wildcard in nginx.
- fix Redirect the Central VM hostname to a renamed site's new primary name After a rename, the `site-*` VM hostname now redirects to the customer's new primary name.
- fix Name and open the chosen site address The upgrade page and site emails show and open the customer's chosen address once it is active, not the automatic `site-*` name.
- fix Warn that disk size cannot be decreased The resize dialog warns that a larger disk is permanent, and the plan list leaves out plans that would shrink the disk.
- fix Lock snapshots and termination protection on trial servers Trial servers refuse snapshots and termination protection, and an expired protected trial no longer keeps its server running.
- fix Retry the trial sign-in while a small server is busy A 0.25 vCPU trial server often stalled at sign-in while busy. Central now retries it while the server answers 429, 5xx or times out.
- fix Select due sleep offloads on uuid columns No VM went to deep sleep or coma because the due-work query failed on MariaDB `uuid` columns. It now checks `active_migration IS NULL`.
- fix Show full setup alerts and a support email The slow-setup and failure alerts on the setup page now show full text, and the failure alert includes a support email.
- fix Let drain history allow VM deletion A VM moved by a Metal Server Drain could not be deleted because drain history rows blocked it. Deletion now ignores those links.
- fix Warm start a VM whose disk is larger than the warm image A VM with a larger disk than its warm image always cold booted. The warm match now accepts a disk at least as large as the warm disk.
- fix Frappe cloud marks the app incompatible with nightly benches Frappe Cloud rejected the `-dev` upper bound, so the app was never marked compatible with nightly. The bound is now `<18.0.0`.
- fix Format document preview currency fields in their own currency fix: format document preview currency fields in their own currency
- fix Install translations on every boot path The production web app showed English for every language because translations were never installed from the boot data.
- fix Remove reference to unicommerce patch missing on version-16 A stale `patches.txt` entry made `bench migrate` fail with `ModuleNotFoundError` on v16 sites.
- fix Do not follow redirects when sending the client secret to the token URL Stops the token request from following 307 and 308 redirects, so the client secret is never re-sent to a new address.
- fix Share kernels and keep them while VMs use them Each kernel is stored once, and archiving an image no longer deletes a kernel that running VMs need, so a stopped VM can boot again.
- fix Copy a missing kernel from the migration source A migrated VM copies its kernel from the source host, so its next cold boot does not depend on an expired kernel URL.
- fix Certifi 2026.10.19 bump Updates the certifi CA bundle to 2026.10.19.
- fix Keep custom lines in the generated configs Pilot's managed Redis block keeps lines outside it, so operators can load modules such as RediSearch.
- fix Remove unused failing storage calc fix: Remove unused failing storage calc
- fix Restart the admin in a new process after an update The admin restart runs in a new process, so it loads only the new code instead of failing with an ImportError.
- fix Keep deferred repayment start date on pre payment and advance payment A pre-payment or advance payment no longer moves the first EMI earlier than the agreed deferred start date.
- fix Send CORS headers for the app on Frappe 15 Sets the CORS headers the mobile app needs on Frappe 15, which had blocked the boot request after sign-in.
- fix Minor UI fixes fix: minor UI fixes
- fix Fix (native): Workspace name in notification fix (native): Workspace name in notification
- fix Keep migrate off the telemetry DuckDB file Migrate no longer opens the DuckDB file, so a read lock held by a dashboard query cannot fail it.
- fix Remove the user guide link from the README fix: remove the user guide link from the README
- fix Rework the firewall rule editor Gives the firewall editor fixed table columns, removable address chips and undo.
- fix Keep the new idle timeout after a resize Keeps the requested idle timeout after an in-place VM resize, and builds Metal with Go 1.26.10 to fix a failing security scan.
- fix Do not fetch files separately in timeline button fix: do not fetch files separately in timeline button
- fix Use loan repayment frequency in loan disbursement A disbursement takes the loan's repayment frequency instead of defaulting to Monthly, and the field fills in when the loan is picked.
- fix Use loan repayment start date in loan disbursement A disbursement made from the form uses the loan's repayment start date when its own date is empty, so the first repayment no longer lands on the product's cycle date.
- fix Allow full pending principal in normal repayment Normal Repayment accepts the overdue amount plus the principal not yet due, so a borrower can pay off the loan and close it. Paying more is still blocked.
- fix A gray folder no longer empties the account Accounts with a Gray folder no longer show an empty Inbox, because the API contract now accepts the Gray colour.
- fix Phone loose ends Keeps a folder's title row visible when the folder is empty, and limits Mail's and Calendar's Profile to their own settings.
- fix Remove notification_title and notification_message Removes two fields that were unused after the matching change in frappe/frappe#42472.
- fix Fix(central)… Removes an unused ptype argument from a permission check that never reached the socket server.
- fix Declare the insights version range Declares the insights version range that Pilot's dependency checks require.
- fix Block saves after a version conflict until reload After a conflict, saves are blocked until Reload latest, so a second tab can no longer silently overwrite another tab's edit.
- fix Free the subdomain of a terminated server A subdomain on a terminated server no longer shows "That name is taken" forever. The check also treats Site Domain routes as holding a name until their removal succeeds.
- fix Visible bugs around typed formats, dates, percent formulas and row refit Fixes sheet values typed as $1.50, 15%, 1,000 or dates, which were stored as bare numbers and broke sorting, charts, pivots and export.
- fix Lock the space row before moving main_revision Locks the space row before any merge or edit moves main_revision and re-reads data after the wait, so two merges into one space no longer drop one of the changes.
- fix Use stored documents for controller actions Controller actions reload the document from the database and check read access first, instead of trusting a copy sent by the browser.
- fix Apply row and field permissions in list endpoints Gameplan's own list endpoints apply Frappe's row and field permission checks, so each user sees the same rows and fields as the standard API.
- fix Tighten invitation lifecycle Invitation links work once, opening one never signs in an existing account, onboarding runs only on a new site, and admins manage invitation records.
- fix Scope guest access, activity, search feedback, follows and tags to the people they concern Limits who can read or delete these records to the people each one concerns, and lets only the server change the records it writes.
- fix Save child rows through their parents and check space communities on every save Child rows such as poll votes and members can be saved only with their parent, and a new space starts with its creator as the only member.
- fix Tighten search filters, comment reindex on move and draft commit targets Search accepts only the filters the search page offers, comment search entries follow their discussion to a new space, and drafts can be committed only to the document they were written for.
- fix Only the owner can edit a profile, admins included Only a profile's own user can edit it; Gameplan admins can still create, delete and manage roles from Settings.
- fix Restrict revision doctypes to managers Wiki User and Approver roles lose direct REST access to revision tables, and the change request code writes them itself.
- fix Add missing permission checks to wiki endpoints Adds read checks to change request diffs, listings, breadcrumbs and the space route list, requires Approved status to retry a merge, and limits external links to http, https and mailto.
- fix Import BaseDocument from base_document Fixes bench migrate failing with an ImportError when Jinja hooks load after Frappe moved BaseDocument.
- fix Allow frappe v15 and above Relaxes the frappe pin to `>=15.0.0`, so main deploys on v15 benches pass the dependency check.
- fix Set the tab title once when the page mounts Sets the tab title once on mount, which closes studio #318.
- fix Round a fractional disk up for resize Resize config rounds a fractional disk up to whole GB, so a resize no longer fails on a 12.5 GB disk.
- fix Some ui aberrations No description; UI fixes for the LLM console.
- fix A key's own limit rows replace the tier's per metric, not wholesale A key that pins only some limits keeps the tier's other limits, such as total tokens.
- fix Send the Datum branch as branch in the telemetry config Telemetry sends the Datum branch under the name Cargo now uses; Cargo's change must merge first.
- fix Update fluent-bit to cap pushes and refused request log Caps fluent-bit pushes and the refused-request log, referencing datum #19.
- fix Accept bare log array as well Datum accepts a bare log array, not only an object wrapping one.
- fix Do not show administrator and blur issue on Safari Fixes the Administrator label and blur issue on Safari.
- fix Undo and failures put back all they took, unsubscribing stays done, and filtered lists keep to their filter Undo and failed actions restore everything they took, unsubscribes stay done, and filtered lists keep their filter.
- fix The sender card lists, and View all finds, what the sender has sent The sender card lists mail from that sender, and View all searches for the same.
- fix Mail read in the Unread filter stays on the list until the list changes A conversation read in the Unread filter stays on the list until the folder, filter or tab changes.
- fix Show the recipient in a Suite email's To header Suite emails sent straight from Suite Cloud show the recipient in the To header, not a placeholder.
- fix Toasts say so on the click, and the sidebar rings what has focus Mail action toasts appear on click, and a refused write removes its toast and says why.
- fix Autosave while typing Autosaves 2 s after typing stops, with a 10 s maximum wait, so nonstop typing also saves.
- fix Remove --chmod from COPY instructions for podman compatibility Moves group permission changes into the builder RUN step, so Podman and Buildah images build.
- fix Hide AI page actions in non-public spaces Hides Open in ChatGPT and Open in Claude on spaces guests cannot read, since those services cannot fetch the page.
- fix Move only the affected subtree on reorder Moving a page updates only its subtree and rejects moves under its own child, instead of rebuilding every page on the site.
- fix A click reads again only what it changed, and opening a thread waits on nothing Opening a thread no longer waits on user and mailbox reloads, and a write re-reads only what it changed.
- fix Let onboarding tests run on Frappe v16 Lets the onboarding tests mock a function that exists only on develop, so they run on v16.
- fix Sheets Wrapped rows refit to their text on paste, fill, clear and AI writes, and typed numbers like 1,000 are stored as numbers and right-aligned.
- fix Free-row merge patch runs again, without the billed column Fixes a data patch so the free-row merge runs once and without the billed column.
- fix Stepper classes and docs Stepper's classes are scanned for Tailwind, and its docs build from `frappe-ui/experimental`, unblocking main.
- fix Insert the File before patching generate_file_name Inserts the File before the patch, so the mock doesn't bind for the rest of the run and fail six server tests.
- refactor ... Automated release of gameplan at a specific commit.
- refactor Give collab undo tests a 20 s timeout Raises the per-test timeout for the collab undo tests, which run slowly on CI.
- refactor Allow nightly release images Pilot images can be built for compatible releases.
- refactor Easy-install fix and deps bump chore: easy-install fix and deps bump
- refactor Bump `GitPython`, `setuptools` and `uv` chore(deps): bump `GitPython`, `setuptools` and `uv`
- refactor Upgrade Firecracker to v1.17.0 New hosts install Firecracker v1.17.0 instead of v1.16.1. Existing hosts are not upgraded.
- refactor Backport #422, #438, #456, #457, #458 and #462 to master chore(atlas): Backport #422, #438, #456, #457, #458 and #462 to master
- refactor Add support-ticket skill Adds a skill for triaging Frappe and ERPNext support tickets, with a System Console reference.
- refactor Make the server and E2E suites pass test(ci): make the server and E2E suites pass
- refactor Respect the 24-hour minimum schedule interval Changes the Dependabot schedules to once a day, because the six-hour interval was rejected.
- refactor Accelerate and group dependency updates Sets Dependabot checks and cooldown exclusions and adds a Python tooling group.
- refactor Check dependencies with pip-audit ci: check dependencies with pip-audit
- refactor Publish the package to npm on a version bump ci(cloud-sdk): publish the package to npm on a version bump
- refactor Merge develop into main chore: merge develop into main
- refactor Redesign llm page Redesigns the LLM page in the Central UI.
- refactor Moving object storage telemetry to vector Moves object storage telemetry to Vector, so metrics are still collected if cargo goes down.
- refactor Release v16 chore: release v16
- refactor Minor release v1.2.0 chore: minor release v1.2.0
- refactor Get rid of vouching for PRs Removes the PR vouching step from CI.
- refactor Misc Misc
- refactor Advertise b8121f5b Automated release of the gameplan app.
- refactor Upgrade to IronCalc 0.9.0 Moves Sheets to IronCalc 0.9.0. Sheet bytes saved by 0.8.4 can't be read by 0.9.0, so this needs a migration path.
- refactor Drop lifetime spent from key and spend figures Drops the unused lifetime spent figure; only this month's spend is shown.
- refactor Drop lifetime spent from keys and teams Drops the stored lifetime spent total and computes the month's spend from usage records.
- refactor Drop the legacy per-RPC sync path Removes dead sync branches and their store wrappers; the backend endpoints stay.
- refactor Remove the unused Hocuspocus collab server Removes the Hocuspocus server and what only it used; presence and cursors stay on the realtime relay.
- refactor Vouch for bvnaik05 Adds bvnaik05 to the vouched contributors list so their pull requests stay open.
- refactor Rewrite ARCHITECTURE.md for change requests Rewrites the architecture doc for change requests, revisions and merge.
- refactor Cut PR job count and speed up bench setup Cuts PR jobs by merging linters and running version-15 UI tests only on develop pushes.
- refactor Allow google-api-python-client 2.x, which frappe v15, v16 and develop require Loosens the google-api-python-client pin to 2.x so frappe's dependencies resolve.
- refactor Declare the frappe versions offsite_backups supports Declares the supported frappe versions so `bench update` can resolve the app.
- refactor Merging develop into main Merges develop into main.
- refactor Misc Misc