# Release Notes - Technical Details Internal companion to `RELEASE_NOTES.md`. Not for customers. - **Range:** `13aa73dddd386e098879b1c27d9fd49381da982e` → `ef679328ebcb228854e885ed6b026b36930ee853` - **Generated:** 2026-10-22 10:17 UTC - **Merge requests:** 67 - **Commits:** 156 (0 without a merge request) ## Merge requests ### !1177 feat: Added calendar feed - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/1177 - Author: Rein de Vries - Closes: [#213](https://gitlab.equinem.com/equinem/equiapp/-/work_items/213) Feature Request: sync EquineM agenda with external calendar (e.g. Google/outlook), [#896](https://gitlab.equinem.com/equinem/equiapp/-/work_items/896) Add function for users to signup to iCal (calendar) stream - Commits: - `0c7ff0b3` feat(planning): add calendar feeds settings tile - `8083b7ef` refactor(planning): load activity types on the planning settings page ### !1229 (daypart): use the correct error function to get the error - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/1229 - Author: Rein de Vries - Closes: [#999](https://gitlab.equinem.com/equinem/equiapp/-/work_items/999) Starttijd moet uniek zijn moet onder start tijd komen - Commits: - `35e73c02` fix(dayparts): show api errors at the related day part row ### !1701 (contact): Always allow editing contact initials and show profile initials in sidebar - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/1701 - Author: Rein de Vries - Commits: - `d60a755b` fix(contacts): always show initials field and use profile initials in sidebar avatar ### !2193 chore(order): use the last order as base for the repeat order - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2193 - Author: Rein de Vries - Labels: VDL - Commits: - `294654ee` chore(order): use the last order as base for the repeat order ### !2215 Refactor/use country select as filterinput - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2215 - Author: Rein de Vries - Commits: - `e7f03055` fix(signup): make the timezone select non-nullable again - `b6231a91` refactor(country): use the FilterSelectInput with flags for country selects ### !2331 fix(horses): show actual search sources in multiple-results message - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2331 - Author: Gerben Morsink - Labels: Bug, Enhancement - Commits: - `a82f5c67` fix(horses): make external search results modal title source-agnostic - `19b674f1` fix(horses): show actual search sources in multiple-results message ### !2333 chore(android): support R8 - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2333 - Author: Rein de Vries - Commits: - `b644e8f2` chore(android): support R8 ### !2417 Fix/security open redirect token leak - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2417 - Author: Michel - Commits: - `51f19c3d` fix(pdf): redact token from logs and escape query params in topdf edge function - `ca8852a2` fix(auth): block open redirect via ?redirect= param, bump react-router-dom ### !2437 fix(invoice): multiple fixes for finalized invoice - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2437 - Author: Rein de Vries - Closes: [#1074](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1074) Change in invoice item description not visible in invoice pdf after invoice is finalized - Commits: - `c4578186` fix(invoice): disable currency field when editing a finalized invoice - `9944b73f` fix(invoice): refresh historic\_customer when customer changes on a finalized invoice ### !2439 fix(invoice): poll send status and warn when sending is not confirmed - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2439 - Author: Rein de Vries - Closes: [#559](https://gitlab.equinem.com/equinem/equiapp/-/work_items/559) Invoices: Finalizing + sending an invoice takes over 30 seconds - Commits: - `d639e459` fix(invoice): poll send status and warn when sending is not confirmed ### !2457 fix(invoice): show a not found page for an unknown public invoice - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2457 - Author: Rein de Vries - Labels: Bug, Prio:High - Closes: [#666](https://gitlab.equinem.com/equinem/equiapp/-/work_items/666) Public invoice not found page - Commits: - `29795218` fix: correct the name Equinem to EquineM - `cac8c52c` fix(invoice): show a not found page for an unknown public invoice ### !2464 feat(contacts): enhanced contact/user list - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2464 - Author: Rein de Vries - Closes: [#760](https://gitlab.equinem.com/equinem/equiapp/-/work_items/760) Contact list overview should provide more information - Commits: - `e7292146` feat(contacts): show the duplicate count and put the primary action on the right - `8203a422` feat(contacts): show role badges under the name and combine contact details in the contact and user lists - `75e116cb` feat(contacts): add roles column and filter to the contact list - `f92ae4b1` fix(contacts): apply every list filter instead of only the first - `54cde894` refactor(roles): extract shared roleOptions helper ### !2478 fix(picklist): hide stock collected after the order shipping date - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2478 - Author: Rein de Vries - Closes: [#818](https://gitlab.equinem.com/equinem/equiapp/-/work_items/818) Do not show future semen stock in the picklist - Commits: - `1820b86c` fix(picklist): hide stock collected after the order shipping date ### !2489 feat: TransPas facility reservation frontend - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2489 - Author: Michel - Closes: [#1725](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1725) TransPas integration (Gelissen): facility reservation frontend - Commits: - `d4f8a0f5` fix(planning): count all day reservations when finding free boxes - `d32bf08a` fix(planning): hide same day gaps in the unassigned TransPas facility - `906f9f7d` feat(planning): only show the Gantt menu item for SSD organisations - `890c64cb` feat(planning): color TransPas reservations by leg number - `3e39380e` fix(planning): show the boxes as a grid when moving a TransPas reservation - `30e42514` feat(planning): name barn slots "Box" in the Gantt - `2415359d` fix(planning): fix type and lint errors after rebasing onto master - `e0fb869d` refactor(planning): move the TransPas Gantt to its own page - `6ce1d2fe` fix(planning): collapse the slots of a facility in the Gantt - `0c75580d` feat(horses): default the horse list to external horses for TransPas organisations - `ce708d8b` feat(planning): move TransPas reservations to another facility - `eb1b050a` feat(planning): add a change modal for TransPas reservations - `ac49830c` feat(planning): hide deleting and cancelling TransPas reservations - `0fc8e21b` feat(planning): hide creating facility reservations for TransPas organisations - `8fa4e3e7` feat(planning): show TransPas dossier details on facility reservations - `6094df13` feat(facilities): hide removing and slot capacity of the unassigned facility ### !2492 chore(ts): switch the tsconfig module from CommonJS to ESNext - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2492 - Author: Rein de Vries - Closes: [#1710](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1710) Remove commonJS and ES2022 (or higher) - Commits: - `335ba4bb` chore(ts): switch the tsconfig module from CommonJS to ESNext ### !2495 fix(planning): mobile full day column header and day header actions menu - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2495 - Author: Michel - Commits: - `d83a00f8` feat(planning): open day actions menu by clicking the day header - `41055658` fix(planning): hide empty column header in mobile full day view ### !2498 feat(breedingPlans): filter on plans without agent / insemination station - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2498 - Author: Michel - Commits: - `b23a7618` feat(breedingPlans): filter on plans without agent / insemination station ### !2500 fix(edge): don't throw on disallowed CORS origins and allow shop domains - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2500 - Author: Rein de Vries - Labels: Bug - Closes: [#1741](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1741) Edge functions return 500 on requests from disallowed CORS origins - Commits: - `f23661d3` fix(edge): don't throw on disallowed CORS origins and allow shop domains ### !2502 chore: shrinks app file size - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2502 - Author: Rein de Vries - Commits: - `e6c6e7ae` build: skip PWA startup images when generating store favicons - `f64a9567` build: strip PWA startup images from native builds - `941e48f7` ci(shops): list largest files and icons per apk/aab in android build - `c26dbbc6` ci(shops): list generated icons per ipa in ios build - `a75a5130` ci(shops): print shop artifact sizes in android build - `b7e12e31` ci(shops): avoid SIGPIPE failure when listing ipa contents - `efa1e91c` build: delete sourcemaps after uploading them to Bugsink - `cfc34443` ci(shops): list largest files per ipa in ios build - `5a5d5340` ci(shops): only collect the shop's apk/aab as android artifact ### !2503 perf(breeding): load horse summaries instead of all full horses - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2503 - Author: Gerben Morsink - Closes: [#1740](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1740) Load horse summaries instead of every full horse on breeding and horse screens - Commits: - `e58c95e1` refactor(breeding): name the horse summaries promise after its cache key - `d53747b0` perf(breeding): load horse summaries instead of all full horses ### !2504 chore(bugsink): ignore benign ResizeObserver loop errors - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2504 - Author: Rein de Vries - Commits: - `0bde50be` chore(sentry): ignore benign ResizeObserver loop errors ### !2505 Fix/ensure safe storage object - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2505 - Author: Rein de Vries - Commits: - `ec9a2104` fix: guard browser storage access against SecurityError - `c2fe0c5b` fix(auth): don't crash when browser storage is blocked ### !2506 Chore/update open api - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2506 - Author: Rein de Vries - Commits: - `d4a66eb7` chore: adapt to OpenApi changes - `560da1ec` chore: update OpenApi ### !2507 fix(android): lock phones to portrait, allow landscape on tablets - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2507 - Author: Rein de Vries - Closes: [#1735](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1735) mobile: landscape should be disabled for phone but not for tablets - Commits: - `cd6f9a86` fix(android): lock phones to portrait, allow landscape on tablets ### !2508 perf(breeding): load contact summaries instead of all full contacts - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2508 - Author: Gerben Morsink - Closes: [#1744](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1744) Load contact summaries instead of every full contact on breeding and horse screens - Commits: - `f671bee2` fix(breeding): leave hidden insemination stations without plans out of the requester filter - `5abb0d6f` test(breeding): leave hidden insemination stations without plans out of the requester filter - `6f071184` perf(breeding): load contact summaries in the mare cycle check modal - `ea924c75` revert(horses): keep full contacts in the create horse modal - `7864bd1f` refactor(breeding): name the contact summaries promise after its cache key - `67cb4bd2` perf(breeding): load contact summaries instead of all full contacts ### !2509 fix(invoice): log missing related horse as warning instead of error - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2509 - Author: Rein de Vries - Closes: [#1745](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1745) Missing related horse on invoice is reported as error in Sentry - Commits: - `43869058` fix(invoice): log missing related horse as warning instead of error ### !2510 Resolve "Network failure in min version check is reported as error in Bugsink" - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2510 - Author: Rein de Vries - Closes: [#1746](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1746) Network failure in min version check is reported as error in Sentry - Commits: - `1619fc24` docs: refer to error tracking as Bugsink - `4a9f5cc8` fix(app-update): don't report network errors from min version check ### !2511 fix(audio): don't report failed sound playback as error - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2511 - Author: Rein de Vries - Closes: [#1747](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1747) Failed check sound playback is reported as error in Bugsink - Commits: - `573c6291` fix(audio): don't report failed sound playback as error ### !2512 fix(image): fall back to original file when EXIF parsing fails - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2512 - Author: Rein de Vries - Closes: [#1748](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1748) Invalid image format when reading EXIF orientation is reported as error in Bugsink - Commits: - `ed82d69e` fix(image): fall back to original file when EXIF parsing fails ### !2513 fix(activities): show form validation errors instead of reporting them to Bugsink - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2513 - Author: Rein de Vries - Closes: [#1749](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1749) Activity form validation errors are reported as error in Bugsink - Commits: - `5d9d312b` fix(activities): show form validation errors instead of reporting them to Bugsink ### !2514 feat: boarders add their own horses and co-riders - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2514 - Author: Gerben Morsink - Closes: [#1751](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1751) Boarders add their own horses and co-riders - Commits: - `6d0b088f` fix(useFormError): don't repeat a field's API error above the form - `cb6d6de7` feat(horse): link a co-rider to their contact page #1751 - `1d1b52ff` fix(horse): require a name for a co-rider invite, show who is invited #1751 - `4f0cf66b` feat: boarders add their own horses and co-riders #1751 ### !2515 fix(profile): skip fetching stables when there are too many organisations - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2515 - Author: Rein de Vries - Labels: Prio:High - Closes: [#1752](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1752) Profile page fetches stables for every organisation in super admin mode - Commits: - `35154019` fix(profile): skip fetching stables when there are too many organisations ### !2516 fix(layout): keep sticky content below the impersonation banner - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2516 - Author: Rein de Vries - Closes: [#1753](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1753) Impersonation banner covers sticky page content when scrolled - Commits: - `61261715` fix(layout): keep sticky content below the impersonation banner ### !2517 Chore/update open api 1210 - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2517 - Author: Rein de Vries - Labels: Prio:High - Commits: - `13de12fb` chore: adapt to OpenApi changes - `a92b6d24` chore: update OpenApi ### !2518 fix(ApiCache): close connection on versionchange and time out stuck db open - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2518 - Author: Rein de Vries - Labels: Bug - Closes: [#1754](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1754) Page hangs on loading because the IndexedDB cache never opens - Commits: - `aa3146e8` fix(ApiCache): close connection on versionchange and time out stuck db open ### !2519 Resolve "Update Expenses menu" - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2519 - Author: Rein de Vries - Labels: Financial module - Closes: [#1647](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1647) Update Expenses menu, [#1731](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1731) Several horses or customers on a transaction item or manual entry - Commits: - `f299557d` feat(transaction): show a "not invoiced" badge that creates an invoice item - `e99067a7` fix(financial): rename expense detail page title to "View expense" - `7b457c12` feat(financial): filter and link billable items from expenses via has\_transaction - `73abcabb` refactor(financial): remove sorting of expense items - `aae12b24` feat(financial): redesign the expense items list - `54a9480c` feat(horses): mark expenses shared with other horses - `bc4efb71` feat(financial): create invoice items from expense items - `eb0e6d60` feat(ui): add ConfirmationMessage - `71b4562c` refactor(financial): remove horse activity selection from expense items - `77a520b2` feat(financial): allocate expense items to general costs, customers or horses - `c5746344` feat(financial): link customers and horses on manual entry detail - `85978c9d` feat(financial): allocate manual entries to several horses or customers ### !2521 fix(horses): add KMAR to the horse phase list - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2521 - Author: Gerben Morsink - Closes: [#1762](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1762) KMAR missing from the horse phase list - Commits: - `1aca7607` refactor(horses): use a Record for the phase labels - `2bdd4a06` fix(horses): add KMAR to the horse phase list ### !2522 feat(activities): translate recurrence descriptions - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2522 - Author: Gerben Morsink - Closes: [#390](https://gitlab.equinem.com/equinem/equiapp/-/work_items/390) Do i18n for RRule.toText - Commits: - `28871d96` feat(activities): translate recurrence descriptions ### !2523 fix(horse): parse box number as number in edit form - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2523 - Author: Gerben Morsink - Closes: [#1763](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1763) Editing box number on a horse fails with 'expected number, received string' - Commits: - `04440da3` fix(horse): parse box number as number in edit form ### !2524 feat(invitation): ask an invitee with an account to log in instead of signing up - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2524 - Author: Gerben Morsink - Labels: API changes - Closes: [#759](https://gitlab.equinem.com/equinem/equiapp/-/work_items/759) Being invited to use EquineM on an existing account leads to confusion - Commits: - `9fe4d294` feat(invitation): title and prefill the login when accepting an invitation - `f426ab4d` feat(invitation): ask an invitee with an account to log in instead of signing up ### !2525 fix(planning): keep the slots of a facility event saved without a horse - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2525 - Author: Gerben Morsink - Closes: [#1766](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1766) Saving a facility event without a horse deletes its slot - Commits: - `dc03ca02` fix(planning): keep the slots of a facility event saved without a horse ### !2529 feat(invoice): personalize WhatsApp invoice message in the invoice language - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2529 - Author: Rein de Vries - Closes: [#988](https://gitlab.equinem.com/equinem/equiapp/-/work_items/988) Personalize invoice message via whatsapp - Commits: - `4d2d5659` feat(invoice): personalize WhatsApp invoice message in the invoice language ### !2530 fix(manure): host RVO manure calculation brochure ourselves - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2530 - Author: Rein de Vries - Closes: [#1025](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1025) Link to manure calculation explanation is no longer active - Commits: - `3aef0a1c` fix(manure): host RVO manure calculation brochure ourselves ### !2531 fix(feed): show translated quantity measure in feed reports - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2531 - Author: Rein de Vries - Closes: [#1029](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1029) New feedtypes abbreviations are confusing - Commits: - `06f86344` fix(feed): show translated quantity measure in feed reports ### !2532 Resolve "Chore: update tsconfig target and module to ES2022 once we not using vercel" - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2532 - Author: Rein de Vries - Closes: [#1030](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1030) Chore: update tsconfig target and module to ES2022 once we not using vercel - Commits: - `98530c77` chore: remove leftover Vercel hosting flag - `94bcbd5d` chore(pdf): load pdf worker from pdfjs-dist instead of public assets - `105f3f86` chore: set tsconfig target to ES2022 ### !2533 chore: update OpenApi - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2533 - Author: Rein de Vries - Closes: [#1768](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1768) API changes in the GAT release of 2026-10-15 (295019055) - Commits: - `41e7a3b4` feat(financial): mention the deleted charge in the expense delete confirmation - `5156bb3f` fix(contacts): allow inviting a user without stables - `d5565e9d` chore: update OpenApi - `f5b0c22d` docs(claude): add update open API task ### !2534 fix(pwa): set manifest description to a string - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2534 - Author: Rein de Vries - Closes: [#1770](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1770) Manifest warning: 'description' ignored, type string expected - Commits: - `bd380d2b` fix(pwa): set manifest description to a string ### !2536 feat(horse-files): folders and a SharePoint style file browser - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2536 - Author: Michel - Closes: [#360](https://gitlab.equinem.com/equinem/equiapp/-/work_items/360) Add Youtube option for the Horse files in both the horse detail and the horse public share page, [#979](https://gitlab.equinem.com/equinem/equiapp/-/work_items/979) Add date to each document/image in the media overview of horse profile - Commits: - `6db066df` fix(horse-files): hide the preparing state when an upload fails - `d8b94464` fix(files): bypass the cache when fetching a file to download or share - `d152ad9f` fix(horse-files): address review comments - `9818dd46` feat(horse-files): drag and drop into folders, upload progress and preview fixes - `9ef6f82d` feat(horse-files): folders and a SharePoint style file browser - `4ee68eba` feat(files): edit the name and description of a file - `2a25bb85` feat(files): share the file itself via the share menu of the device - `dff1307f` feat(files): file preview with a details sidebar - `1d0fd369` feat(files): rich file type icons - `f79317e8` feat(files): recognise YouTube links - `f35727c6` feat(files): helpers for folders in file names ### !2537 feat(reports): show feed quantities, totals and xlsx export in monthly feed report - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2537 - Author: Rein de Vries - Labels: Enhancement - Closes: [#1034](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1034) Feeding history report to see what feed has been given in the past - Commits: - `fe95f3ca` feat(reports): show feed quantities, totals and xlsx export in monthly feed report ### !2538 feat(planning): allow assigning a task to a staff member - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2538 - Author: Rein de Vries - Labels: Prio:High - Closes: [#1111](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1111) Allow for a task to be assigned to a staff member - Commits: - `9de30aca` feat(planning): allow assigning a task to a staff member ### !2539 fix(horse): auto complete on button press instead of on every keystroke - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2539 - Author: Michel - Closes: [#1771](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1771) Don't do too many calls to horses/search\_horse when creating a horse - Commits: - `19c06a61` fix(horse): auto complete on button press instead of on every keystroke ### !2540 fix(planning): only show riders of the selected stable in the calendar filter - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2540 - Author: Rein de Vries - Closes: [#1543](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1543) Calendar: Filter rider filter options based on selected stable - Commits: - `be0568c8` fix(planning): only show riders of the selected stable in the calendar filter ### !2541 Horse list improvements for mobile - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2541 - Author: Rein de Vries - Closes: [#1761](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1761) Horselist improvements mobile - Commits: - `1cd282f6` feat(ui): pick and step through a period in the mobile date filter - `cfb2aa76` fix(ui): show the shadow of the selection bar when it is stuck - `a6f4167f` feat(ui): restore the scroll position when navigating back to a list - `79a8bc30` fix(horses): show the horse list from cache when navigating back - `3fca54ab` fix(ui): reduce top spacing of the selection bar on mobile - `b13c2fc3` fix(horses): only start selection via the select button on mobile - `c6fe06b6` fix(horses): avoid double tap on mobile horse list ### !2542 fix(integrations): require the accounting module to connect a bookkeeping integration - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2542 - Author: Rein de Vries - Closes: [#506](https://gitlab.equinem.com/equinem/equiapp/-/work_items/506) Integration of accounting systems needs to be connected with subscription - Commits: - `327bfd70` fix(subscription): require an accounting service contract, also for paid organizations - `61075e91` fix(integrations): require the accounting module to connect a bookkeeping integration ### !2544 fix(signup): show password mismatch error on the repeat field - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2544 - Author: Rein de Vries - Closes: [#1780](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1780) Signup: no error shown when the repeated password doesn't match - Commits: - `2a5f6ee5` fix(signup): show password mismatch error on the repeat field ### !2545 chore: update OpenApi - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2545 - Author: Rein de Vries - Closes: [#1772](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1772) API changes in the GAT release of 2026-10-15 (3caf2b75c) - Commits: - `0bd613f1` docs(claude): find unlabelled API changes issues and link everything in the summary - `556afa44` chore: update OpenApi - `964aa16e` chore(openapi): send the X-Schema-Key header when pulling the schema ### !2546 Resolve "Add invoice email to contact forms" - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2546 - Author: Rein de Vries - Labels: API changes - Closes: [#1114](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1114) Contacts need a separate (second) email address for invoices, [#1779](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1779) Add invoice email to contact forms - Commits: - `14061857` refactor(contacts): group the invoice fields behind the financial module - `8fc2b637` feat(contacts): add invoice email to the contact form ### !2547 feat(employment): add employment start date input - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2547 - Author: Rein de Vries - Labels: Bug - Closes: [#1238](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1238) There is no employment\_start\_date input field - Commits: - `de14330f` feat(employment): add employment start date input ### !2548 feat(financial): filter recurring services by customer #1073 - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2548 - Author: Rein de Vries - Closes: [#1073](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1073) Allow for filtering on contact in recurring services overview - Commits: - `5ff62183` feat(financial): filter recurring services by customer #1073 ### !2549 chore: update OpenApi - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2549 - Author: Rein de Vries - Closes: [#1783](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1783) API changes in the GAT release of 2026-10-19 (11536eed3) - Commits: - `c7110ac3` chore: update OpenApi ### !2552 feat(version): expose previous release commit hash in /api/version - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2552 - Author: Michel - Commits: - `c79ae65a` fix(ci): avoid YAML mapping in deploy echo line - `0c4a8645` feat(version): expose previous release commit hash in /api/version ### !2553 feat(release-notes): support multiple Ollama API keys with fallback - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2553 - Author: Michel - Commits: - `182d5d40` feat(release-notes): support multiple Ollama API keys with fallback ### !2555 fix: fail translate job on extraction errors and fix folder-file-count key - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2555 - Author: Michel - Commits: - `7ddcacf8` fix(files): add default translation for folder file count - `6261de00` fix(ci): fail translation extraction on parser errors ### !2557 Resolve "Client invoicing: Update UI of 'to invoice' on mobile" - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2557 - Author: Rein de Vries - Closes: [#1108](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1108) Client invoicing: Update UI of 'to invoice' on mobile - Commits: - `ab0fcd57` fix(client-invoicing): show more info in compact mobile row of to-invoice list - `21efdd61` fix(financial): align invoice and payment list headers with the md mobile breakpoint ### !2558 feat(breeding): allow destroying a custom amount of semen stock - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2558 - Author: Rein de Vries - Closes: [#1109](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1109) Allow for custom amount deletion of semen portions - Commits: - `092de176` feat(breeding): allow destroying a custom amount of semen stock ### !2560 feat(release-notes): release notes in English, German and Dutch - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2560 - Author: Michel - Commits: - `d6ccbd6d` feat(release-notes): link to the release notes in the user's language - `27c86518` feat(release-notes): generate release notes in English, German and Dutch ### !2564 fix(breeding): keep the fresh portions row visible when stock is 0 - Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2564 - Author: Rein de Vries - Closes: [#1794](https://gitlab.equinem.com/equinem/equiapp/-/work_items/1794) Stallion mount: fresh portions row hidden when stock is 0 - Commits: - `17e2fdff` fix(breeding): keep the fresh portions row visible when stock is 0 ## Left out of the customer release notes OpenAPI schema refreshes and other changes with no customer-visible effect. - !2506 Chore/update open api (https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2506) - !2517 Chore/update open api 1210 (https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2517) - !2533 chore: update OpenApi (https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2533) - !2545 chore: update OpenApi (https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2545) - !2549 chore: update OpenApi (https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2549)