# Release Notes ## Summary This release introduces several new capabilities and a wave of reliability improvements. Users can now record manual expenses, select modules tailored to their stable type during signup, and download multiple invoices as PDFs. The UI has been refined across various pages, including mare cycle checks and persistent list filters, while numerous bugs affecting invoicing, planning, and horse search have been resolved. ## Highlights - Manual expense entry added - Stable‑type driven module selection during signup - Bulk download of invoices as PDFs - Mare cycle check page now includes copy buttons and better sorting - List filters now persist across sessions - Release notes link renamed to “What’s new” ## Features - **Force delete hidden horses** Users can permanently delete a horse record even when it is hidden, ensuring hidden entries can be cleaned up without issues. - **Module selection based on stable type during signup** During signup, users can choose their stable type and receive module suggestions tailored to that type, with the ability to adjust the suggested modules later. - **Manual expense entry** A new manual expense screen lets users record expenses directly, complete with VAT handling and clear subject display. - **Client invoicing improvements: date sorting, type filter, and mobile UI** Added date sorting and a billable item type filter, and moved status buttons into the filter dropdown on small screens for a smoother mobile experience. - **Release notes button added to UI** A release notes button now appears in the refresh dialog and profile page footer, giving users quick access to the latest updates. - **Bulk download and preview invoices as PDFs** Users can download invoices in concept state directly and use a new bulk download button to export multiple invoices at once. - **Automatically add financial note to invoices when needed** Invoices now include a financial note automatically when applicable, ensuring compliance with financial documentation requirements. ## Improvements - **Mare cycle check page UI enhancements** The mare cycle check page no longer depends on the calendar, lists are sorted by horse name, includes cycle type and full customer name, and adds copy buttons for notes and cysts. - **Introduce reusable MetaItem component for invoice metadata** A MetaItem helper component was added to reduce repeated markup in invoice metadata sections. - **Rename release notes link to "What's new"** The release notes link in the update modal and profile page now reads “What’s new” and correctly ties to the current deployment. ## Fixes - **Various bug fixes and OpenAPI generator update** Fixed planning list errors, horse detail rendering issue, session token handling for PDF generation, and other UI bugs; also refreshed the OpenAPI generator. - **Field-specific error display on invoice items** Validation errors now appear next to the affected invoice row fields instead of a generic banner, making it easier to locate and fix issues. - **Retain required invoice fields when only manual items remain** When an invoice contains only manual items, essential fields such as customer ID are preserved, preventing save errors. - **Maintain horse selector after adding or removing invoice items** Fixed a bug where the horse selector vanished after invoice item changes, ensuring consistent horse selection. - **Prevent loss of keystrokes in horse search input** The search box now correctly retains characters typed while the query syncs to the URL, avoiding dropped input. - **Show correct billing name after saving contact** Saving a primary invoicing contact now refreshes the organization data so the correct billing name appears. - **Replace deprecated horse detail endpoint with updated search** The app now uses the newer search_horse endpoint to fetch full horse details, eliminating reliance on the deprecated service. - **Persist list filters across sessions** List filters now default to localStorage, so they remain applied after closing and reopening the app; free‑text inputs still reset per session. - **Hide incomplete order message for new orders** The incomplete order warning is now shown only for existing orders, avoiding unnecessary alerts when creating a new order. - **Correct activity comparison in planning view** Planning now compares the last used activity against the sorted activity list, ensuring accurate activity suggestions. - **Show mare cycle checks table when filters are active** When any filter is applied, the mare cycle checks page displays the filtered table instead of an empty state. - **Fix illegal DOM nesting on insemination route page** Corrected DOM structure to prevent rendering errors on the insemination route screen. - **Ignore benign cache directory removal errors in Sentry** Sentry now filters out non‑critical rmdir errors when a cache folder is already absent, reducing false alarms. - **Treat 'modules' as an array in signup schema** The signup process now correctly handles the 'modules' field as an array of strings, fixing module selection handling. - **Keep invoice preview language consistent in admin view** Invoice previews in admin screens now use the UI language, avoiding unintended language changes. - **Apply table header styling to correct element** The 'tableThead' class is now attached to the <thead> element, ensuring proper table header styling. - **Show error message when deleting a VAT percentage fails** Users receive a clear error notification if a VAT percentage cannot be removed. - **Classify breeding order items using product type** Breeding order items now carry a product_type field, removing the need for extra product lookups during classification. - **Set correct file name when printing PDFs** The PDF generated via the print hook now uses the intended name, preventing generic filenames. - **Increase timeout limits for large PDF generation** Timeout settings for PDF creation have been raised, preventing errors when generating large order or shipping PDFs. - **Persist invoice item description changes to billable items** Updated invoice items now correctly save description edits back to their linked billable items. - **Preserve custom invoice line order** The system no longer re-sorts invoice lines by type, allowing the user-defined order set via the edit modal to be retained. ## Docs - **Fix markdown formatting for release notes** Corrected markdown syntax issues in the release notes to ensure proper rendering. ## Other - **Increase error logging depth in bugsink** The error normalizer now preserves deeper nested error context for more detailed logs. - **Add Claude project instruction file** Included a project instruction file for Claude, used for AI assistance. - **Format Claude Markdown file** Adjusted formatting of the Claude project Markdown document. - **Remove redundant ESLint plugin from Vite configuration** Simplified Vite setup by dropping the duplicate eslint plugin. - **Remove manual JWT injection now that specs are fixed** Cleaned up authentication code by eliminating unnecessary manual JWT handling. - **Upgrade Vite to version 8 with Rolldown bundler** Updated the build system to Vite 8 and Rolldown, improving build performance.