# Release Notes ## Summary In this update we added several new features, refined existing workflows, and squashed a range of bugs. Highlights include manual expense support, module selection during sign‑up based on stable type, and expanded PDF invoice downloads. The UI also benefits from persistent filters, enhanced mare cycle checks, and a more reliable horse search input. ## Highlights - Add manual expense entries for flexible cost tracking - Choose modules during sign‑up based on stable type - Download invoices as PDF, with bulk download and concept‑state support - Mare cycle check page now sorted by horse name and includes copy buttons - Filters now persist across sessions, keeping your selections after closing the app - Horse search input no longer loses keystrokes during URL synchronization ## Features - **Force delete hidden horses** You can now permanently delete horses that have been hidden, allowing you to clean up records that are no longer needed. - **Select modules during sign‑up based on stable type** During sign‑up, users can choose their stable type and receive suggested modules, making it easier to pick the right features for their operation. - **Add support for manual expense entries** The invoicing interface now lets you create manual expense items directly, giving you more flexibility in tracking costs. - **Add date sorting, type filter and mobile‑friendly status dropdown to client invoicing** You can now sort invoices by date, filter by billable item type, and on small screens the status buttons are collapsed into the filter dropdown for a cleaner interface. - **Add release notes button when notes are available** A release notes button now appears in the refresh dialog and on the profile page footer, giving you quick access to the latest updates. - **Download invoices as PDF, including bulk download and concept‑state support** You can now download individual invoices (even in concept state) from the details page and use a bulk download button to retrieve several PDFs at once. ## Improvements - **Enhanced mare cycle check page with sorting, copy buttons and new fields** The mare cycle check list now sorts entries by horse name, displays the check type and full customer name, and includes copy buttons for notes and cysts, while removing unused calendar dependencies. ## Fixes - **Resolve multiple bugs after migrating to the latest OpenAPI parser** This update fixes planning activity final‑report handling, prevents horse detail errors, ensures proper session token handling for PDF generation, and improves pagination logic, resulting in a more stable experience. - **Show field‑specific error messages for invoice items** Validation errors on invoice items now appear next to the affected row and field instead of a generic banner, making it easier to correct mistakes. - **Preserve required invoice fields when only manual items remain** Deleting all billable items no longer clears essential fields like the customer ID, preventing errors when saving invoices that contain only manual items. - **Prevent horse selector from disappearing after modifying invoice items** The invoice form now retains the horse selection field when items are added or removed, ensuring a smoother invoicing workflow. - **Fix lost keystrokes in horse search input during URL sync** The horse search box now retains characters typed while the application synchronises the search term to the URL, preventing dropped input. - **Show correct billing name after editing contact** After updating the primary billing contact, the subscription detail view now displays the updated billing name and includes a back link for easy navigation. - **Use updated horse search endpoint for detailed information** The app now retrieves full horse details via the newer search_horse endpoint, removing reliance on the deprecated get_horsetelex_detail API. - **Persist list filter selections across sessions** Filters now default to localStorage, so your list filter choices remain saved even after closing the app. - **Show incomplete order warning only for existing orders** The incomplete message now appears only on saved orders, preventing unnecessary alerts when creating new orders. - **Correct activity comparison order in planning** Planning now compares the last used activity against the sorted list, ensuring accurate activity suggestions. - **Display mare cycle checks table when filters are active** Applying any filter now shows the mare cycle checks table instead of an empty state, making filtered results visible. - **Fix illegal DOM nesting in insemination route page** The insemination route page now follows proper DOM structure, preventing rendering issues. - **Correct module handling in signup to use array format** The signup form now properly interprets the modules field as a list of strings, ensuring module selection works as intended. - **Keep invoice preview language consistent in admin views** Invoice previews in admin screens now use the UI language instead of defaulting to English, preserving expected translations. - **Apply table header styling to <thead> element** Table header styles now target the <thead> tag, fixing inconsistent table appearance. - **Show error when deleting a VAT percentage fails** If removing a VAT percentage encounters an error, the app now displays a clear error message, helping you understand the issue. ## Other - **Increase error‑logging depth for clearer diagnostics** The error‑logging utility now captures deeper nested error contexts, helping developers troubleshoot issues more effectively. - **Add Claude AI project instruction file** An instruction file for the Claude AI project has been added for internal reference. - **Ignore benign cache directory removal errors in Sentry** Sentry now silently skips non‑existent cache‑dir removal errors, reducing unnecessary error reporting. - **Extract reusable MetaItem component for invoice metadata** A helper component was added to simplify repeated dt/dd markup in invoice meta sections, improving code maintainability. - **Remove redundant ESLint Vite plugin** The duplicate vite-plugin-eslint has been removed, simplifying the build setup. - **Remove manual JWT injection for authentication** Authentication now relies on the standard specs, eliminating custom JWT injection. - **Fix markdown formatting for release notes** Release notes now render correctly without markdown errors.