Start here for the newest technical changes across both tracked branches.
ยถ Technical Updates
Readable technical update history for workflow, architecture, API, database, release, and generated update records.
Engineering changes merged into development before release.
Release and production-ready updates merged into main.
Latest updates from development and main, newest first.
Main: The display of overtime approval periods has been enhanced for both desktop and mobile. On desktop, 'Start OT' and 'End OT' are now combined into a clearer 'Work Period' column. Mobile approval cards now show more details, including work date, time range, hours, reference, and submitted time. Overtime dates are also formatted correctly, including periods spanning overnight.
Main: The HR Leave Allocation feature now accurately includes legacy and cascade-resolved Ordinary Leave usage, providing a more comprehensive view of leave balances.
Main: A new ID lookup API has been introduced within the Utopia Finance application, implemented as a Supabase function.
Main: We've enhanced the process for deleting attendance records, making it safer and more user-friendly. When deleting, you'll now receive clear information about any linked claims or corrections, ensuring data integrity and providing better control over the deletion process.
Main: Implemented a new backend API (`deleteHrAttendance`) and transactional RPC (`delete_hr_attendance_v1`) for HR attendance deletion. This ensures robust handling of foreign key constraints, proper cleanup of related corrections and audit trails, and improved error reporting for file deletions. Includes new database migrations.
Main: HR Generalists can now safely delete attendance records with improved user feedback. The system provides clear warnings for linked Post OT claims and corrections, and allows adding a deletion reason for auditability.
Main: Users can now select 'others' more reliably when setting times within the Shift Roster, improving flexibility for scheduling.
Main: Introduced new database migrations for `profiles_work_schedule` to support dynamic shift roster days and hours based on work schedules. Added 'Flexi' work schedule option and updated backend logic for public holidays across HRMS, Personal, and Work spaces.
Main: The Shift Roster feature now automatically populates days and hours based on your defined work schedule. A new 'Flexi' work schedule option has also been introduced, providing more flexibility in managing employee shifts.
Main: Implemented paying bank capture for SPR, General/Benefit Claim, and Backcharge bank submissions. This involved backend API modifications, new database fields via migration `20260828130000_capture_paying_bank.sql`, and frontend UI components for bank selection and display in AP workflows. Comprehensive backend and Playwright tests were added.
Engineering work merged into the development branch.
Resolved an issue where compiled supplier payments could incorrectly merge with newly added payments. This ensures that all supplier payments are processed accurately and independently, preventing data discrepancies and improving the reliability of payment processing.
Implemented fixes to enhance mobile responsiveness across key Finance UI components, including `Finance Launcher`, `BackchargeApplication`, and `SupplierPaymentApplication`.
Users will now experience improved mobile responsiveness when using the Finance Launcher, Backcharge Application, and Supplier Payment Request (SPR) Application, making them easier to use on mobile devices.
The Overtime Summary pages across various applications now display correctly and are fully responsive on mobile devices, providing a better viewing experience.
Resolved an issue that caused 'bad request' errors when tracking and processing supplier payments in the Work Space, improving reliability for financial operations.
Job log and outcome cards in Operation Efficiency now prominently display the order number at the top, making it easier to identify jobs. Customer name and service type are now shown as secondary context, and action buttons no longer duplicate the order number.
Updated `docs/database.md` to reflect changes and new structures related to Ordinary Leave allocation calculations and storage.
The system now accurately calculates annual totals for Ordinary Leave allocations, providing improved precision for HR Generalists managing leave.
Updated `docs/database.md` with relevant information, likely related to the Public Holiday leave deduction logic changes.
The system now correctly deducts Public Holiday usage from leave allocations, ensuring accurate leave balances for employees.
Removed the `isLocalLeaveCascadeHost` hostname gate, enabling the mobile-aligned Leave Application chooser in the `utopia-personal` application for all environments. This change involved modifying `cascade.ts` and `LeaveApplicationEntryPage.tsx` to ensure the new chooser path is correctly navigated. E2E tests were updated to cover the `?edit=` bypass.
The new mobile-aligned Leave Application chooser is now available to all users. When applying for leave, you will now see a step-by-step chooser interface instead of the legacy inline form. This improves the user experience for submitting leave requests.
The User Access editor has been improved to allow for more precise control over permissions. Revoking an app tile can now automatically cascade and revoke associated workspace grants, with a clear confirmation dialog before saving. This prevents stale workspace grants from remaining active after an app tile is removed.
The HR Generalist workspace now has independent access control from the general HR App tile. This allows for more granular permissions, ensuring users only get access to the HR Generalist features when explicitly granted, preventing unintended over-permissioning.
Updated changelog entries in `utopia-launcher` and `utopia-work` applications. This release promotes a fix for the Shift Roster edit button visibility.
The edit button for Shift Rosters in the Work Space now displays correctly, improving usability for managers and schedulers.
Operation Efficiency PWA push notifications now support deep linking. Tapping a notification will directly open the associated job screen, even on a cold start, by leveraging `web_url` in the push payload. The base URL is configured via `oe.notifications.ops-app-url`.
Resolved an issue where Shift Roster drafts were incorrectly displayed as published, ensuring accurate status visibility.
Dates in the Ops Efficiency space now use a shorter format, and order links are now displayed in the TechRow component for better visibility.
Significant enhancements to the Shift Roster feature have been released across Utopia Work, HRMS, and Personal applications.
The Work app now includes new features for Overtime Approvals, such as per-row and select-all checkboxes, an action bar for Approve/Reject/Clear, and a confirmation dialog with mandatory remarks for rejections. Updates are now guarded to prevent overwriting already actioned requests.
Released new versions for Utopia Work (2.5.0), HRMS (2.7.0), and Personal (2.5.0), incorporating recent feature work and changelog updates. The launcher manifest has also been regenerated.
Managers can now use a tick box to approve overtime requests, streamlining the approval process.
A new Shift Roster report is now available under Work โ Reports, enabling managers to view and manage employee shift schedules.
Resolved an issue where the Sales application failed to build on Vercel due to a missing `@types/node` dependency. This dependency is now explicitly declared, ensuring successful TypeScript validation during Vercel deployments.
Resolved a production build failure for the Sales application by adding a missing `@fontsource-variable/inter` dependency to its `package.json`.
This release cut includes version bumps for hrms (2.6.0), personal (2.4.0), work (2.4.0), finance (2.4.0), launcher (2.4.0), and root (2.0.6). Key fixes include: improved pagination for HRMS Leave Allocation/Summary to correctly display all employees; HRMS Leave Allocation now allows saving with blank leave types; and a fix for forms containing currency fields that previously prevented submission.
Resolved an issue where users could not submit applications due to problems with the currency input field.
HR Generalists can now allocate leave without encountering row limits. The system also correctly updates existing leave records, preventing duplicate entries and ensuring accurate leave entitlements.
The `docs/database.md` file has been updated to reflect recent changes in the database schema and related technical information.
Managers now benefit from a streamlined leave approval process, providing better tools for reviewing and acting on employee leave applications.
HR Generalists will find improvements in the leave acknowledgement process, making it easier to manage and track employee leave requests.
Employees can now utilize a new leave cascade feature for streamlined applications. The leave application flow has been updated to support gender-specific leave types and offers an improved display of leave history.
The parent-brand verifier has been extended, and new Chromium regression coverage has been added to ensure consistent brand identity across applications, including PDF rendering.
The protected Utopia Holiday Worry-Free Living offer-letter asset has been restored for use by HR recruiters.
Payslips and commission PDFs in your Personal Space now display the updated Brand CI v2 red-square/blue-triangle wordmark for improved consistency.
Introduced a new backend notification ingest endpoint and associated configuration properties, including support for OneSignal integration.
Enhanced the system to correctly process and display links for both LG and regular orders across Ops Efficiency features like Job Logs, Outcomes, and Susun Trip.
Currency input fields across all workspaces now feature an input mask, providing a more consistent and user-friendly experience when entering monetary values.
The Operation Efficiency space now includes a calendar feature, allowing users to easily monitor employee leaves.
Centralized the generation of Encik Beku order links within the Ops Efficiency space to ensure correct navigation and prevent links from pointing to localhost in production environments.
Updated the backend configuration for HTTP request header size in the Ops Efficiency space to correctly apply the 64KB limit, resolving potential issues with large headers.
Increased the maximum HTTP header size for the Operation Efficiency (OE) backend to resolve HTTP 400 errors encountered during authentication resolution, particularly for users with larger session data.
Implemented a new Hub SSO identity broker for the Operation Efficiency module, enabling Just-In-Time (JIT) provisioning and resolving Business Unit (BU) access. This update also includes a fix to replace `MultipartBodyBuilder` with `LinkedMultiValueMap` to prevent `NoClassDefFoundError`.
Resolved an issue where CI builds would fail due to an unauthorized Nx Cloud workspace. Nx is now configured to run locally in CI, preventing build failures.
Resolved a local development issue for the Encik Beku API where client-side calls failed due to incorrect cookie domains. The local Caddy configuration for Encik Beku API now mirrors production's parent/child host structure (`api.encikbeku.lvh.me`). This required updating `Caddyfile` and `tools/setup-https.js` to include `*.encikbeku.lvh.me` in the mkcert SAN list. Developers with existing local setups must regenerate their certificates by running `rm -rf certs/ && npm run setup:https`.
Implemented new Caddy hosts for Encik Beku's shared domain SSO, added Vercel deployment configuration for the Sales app, and clarified environment variables. Corrected a stale comment in `OeProxyController` regarding Supabase project usage.
Revised the SSO documentation to clarify the three different authentication mechanisms, including parent-domain cookie SSO for seamless integration.
Added new `sales.app.access` and `sales.encik-beku.view` grants to control access to the Sales application and the Encik Beku workspace. These grants are managed via the User Access editor.
Introduced the new Sales application, which includes a workspace picker to access the Encik Beku business unit. Access to the Sales app and Encik Beku workspace is controlled by UtopiaSpace grants.
The changelog has been updated to reflect the fix for the scrollable company dropdown in the HRMS calendar.
The company dropdown in the HR calendar can now be scrolled, resolving an issue where some options were inaccessible.
Implemented new mobile inbox and pairing controllers with DTOs and integrated OpenAPI/Swagger for API documentation. The unused `/oe/mobile` Spring facade was removed for cleanup.
The Susun Trip dispatch board now features a technician filter panel and an unassigned jobs count badge. A new 'Tech Updates' view has been added to display technicians' field outcome reasons. The Job Logs page has also received enhancements.
A new entry point has been added within the application, providing developers with direct access to relevant Wiki documentation.
Cut the 27th July 2026 release, incorporating 15 non-merge commits. This release includes version bumps for hrms (2.4.0 -> 2.5.0), personal (2.2.0 -> 2.3.0), finance (2.2.1 -> 2.3.0), work (2.2.1 -> 2.3.0), launcher (2.2.1 -> 2.3.0), and root (2.0.4 -> 2.0.5). All app changelogs were updated, and the launcher 'What's New' manifest was regenerated. Deploy notes include applying hrms and Resigned-status migrations, redeploying company-directory and get-payslip edge functions, and regenerating finance `spring-schema.d.ts`.
Resolved an issue that caused a 'bad request' error when approving supplier payments.
A new 'Resigned' user status has been added, allowing limited access to Utopia Personal. This status is manually set by HR and requires specific Supabase migrations for RLS policies.
Employees with 'Resigned' status can now sign in to Utopia Personal to view their profile and payslips. Access to all other applications remains blocked.
The Advanced Salary approval feature has been removed from the HR Generalist approvals grid. The dedicated route for Advanced Salary approvals is no longer accessible.
Leave and Overtime entries now display consistent, easy-to-read reference codes (e.g., LV-YYMMDD-XXXX, OT-YYMMDD-XXXX) across all Work app surfaces, replacing inconsistent UUIDs. The Manager Leave History page has been revamped for a better user experience, including improved mobile display and updated 'Pending' status.
Previously, approval pending-count badges in the Work app and Launcher home screen could over-count General Claims and Supplier Payment for approvers with submitter-role filters. This fix ensures that these badges now accurately reflect the number of pending approvals by correctly applying the submitter-role filter, aligning the badge counts with the actual approval list pages. This resolves discrepancies where badges showed pending items not visible in the lists.
The overtime verification and approval process for HR Generalists has been updated to streamline workflows and improve clarity.
Users can now compile receipts within the Accounts Payable section of the Finance space, streamlining payment processing.
Resolved two issues in the Team Payslips feature: 1. Decoupled team leader access from the employee's `personal.payslip.view` permission; leader access now depends solely on HR assignment. 2. Introduced a distinct `delivery_disabled` signal from the `get-payslip` edge function (HTTP 404) when an active employee's payslips are unavailable due to delivery being off, displaying a clear 'Payslip delivery is turned off' hint in the UI instead of a generic empty state.
PDF exports for AP Supplier Payments now feature improved layout, including selectable text for bank receipts and invoices, and correctly scaled image attachments. Approval Status and Activity Log are no longer included.
The details for Supplier Payment Request (SPR) approvals are now fully visible, making the approval process clearer and more efficient for users.
The 'First Name' field has been updated to 'Full Name', and the 'Last Name' field is now 'Short Name' in employee personal information sections within HRMS.
An additional employment category has been added to employment details, providing more options for HR Generalists.
The 'submit all SPR to bank' button has been fixed and is now fully functional. Detail pages for Supplier Payments (SPR) and Backcharges now display as a continuous scroll, removing the tabbed interface for a smoother viewing experience. Bank filters have been renamed to 'Status' for improved clarity. The 'View' button now allows you to switch between column and row views, offering more flexibility in how you display data.
This release wave includes version bumps for Personal (2.2.0), HRMS (2.4.0), Finance (2.2.1), Work (2.2.1), Launcher (2.2.1), and OE (2.1.2). Key technical updates involve setting `NEXT_PUBLIC_SUPPORT_WHATSAPP_UTOPIA` env var, applying Supabase migrations (`20260720120000_pay_document_visibility.sql`, `20260721120000_team_payslip_access.sql`), deploying `get-payslip` and `commission-slips` edge functions, and redeploying the finance backend for CORS changes.
The 'Contact support' dialog now displays an updated WhatsApp support number for easier access to assistance.
Improved the stability and reliability of the shared login experience within the Operation Efficiency app.
Improved the stability and reliability of the shared login experience within the Launcher app.
Resolved an issue with SPR tracker visibility and improved the shared login experience in the Work app.
The Finance app's Accounts Payable section has been refined with an improved toolbar, sorting options, batch loading, and claims processing.
HRMS users now have improved access to pay documents and team payslips, streamlining payroll and team management.
The Personal app now includes dedicated tabs for Payslips, Commission Slips, and Team Payslips, making it easier to access your payment information.
The login 'Contact support' dialog now correctly displays a dialable WhatsApp support number. Previously, it showed 'Unavailable'. This update involves setting the `NEXT_PUBLIC_SUPPORT_WHATSAPP_UTOPIA` environment variable and refactoring shared UI components for consistent display across all applications.
Introduced new `get-payslip` and `commission-slips` edge functions to securely retrieve pay document data from external payroll systems. These functions handle JWT verification and server-to-server communication using service secrets.
HR Generalists can now manage which employees have access to view their payslips and commission slips. Additionally, team leaders can be granted access to view payslips for their team members.
Users can now access dedicated tabs in My Profile within the Personal app to view their payslips and commission slips.
The Account Supplier Payment Verification table now loads all rows in batches, improving performance. You can now filter and search across all loaded data, and sorting and pagination behave more consistently. Sorting has been disabled for composite columns.
Fixed an issue that caused incorrect display or behavior in the Accounts Payable supplier payments table, ensuring accurate and reliable data presentation.
Fixed an issue where Accounts Payable Claims were not consistently displayed in the correct order.
Implemented updates to CORS configuration and enhanced error handling mechanisms within the Utopia Finance backend, improving API request control and system robustness.
Resolved an issue where saving profiles or changing a user's company in HRMS would fail due to orphaned database triggers. A new migration removes these unused `ops_profiles` triggers and related functions, ensuring profile edits now succeed.
The Accounts Payable Claims page now includes a 'Company' column, allowing users to view company information directly within the claims list.
Resolved an issue where the Supplier Payment Request (SPR) tracker was not consistently visible within the `ManagerSupplierPaymentHistory.tsx` page in the Work application's Manager Space.
Discover the latest updates across all applications in the new unified What's New Release Center, accessible from the Home header. This page features a timeline view, search, and per-app filtering.
The HR Employee List now includes a pending-count badge, a sortable 'Last Updated' column, and improved grouping of employees by status. Resigned employees are now correctly labeled.
Employees now have a Contract End Date field in their Employment Details, visible and editable on their detail page.
Implemented a system-wide rule to hide inactive and resigned users from people pickers, directories, and manager dashboard counts across Launcher, Work, Personal, Finance, and OE applications. This ensures users only interact with active personnel in selection interfaces, while preserving historical records and administrative visibility in HR tools.
Resolved an inconsistency where the Home app's approvals tile displayed an incorrect count compared to the Work app. Approval counting logic has been centralized into a new shared package (`@utopia/approvals`) to ensure accurate and consistent pending approval totals across both applications. This also involved removing several unused approval-related hooks.
The Live Attendance and Punch State Admin features have been removed from the HR Generalist attendance hub.
Optimized the loading speed for Supplier Payment Requests (SPR) within the Account Space and Finance Manager Space, resolving previous API performance issues.
The Supplier Payment Verification and Approved Supplier Payments tables have been updated with a new layout that utilizes the full desktop width. Approved Supplier Payments now also clearly mark receipt-uploaded payments as Completed.
The Supplier Payment Request (SPR) tracker in the Work application has received UI/UX enhancements. Users can now view bank receipts directly from the supplier payment history.
The Backcharge and Supplier Payment applications within Personal Space now offer improved mobile responsiveness, making them easier to use on various mobile devices.
Resolved a backend error by renaming the `work_locations` database table to `depot_name`.
HR Generalists can now enable or disable geofence mode for users, allowing for enhanced location tracking capabilities.
Fixed an issue with the `ops_profiles` sync trigger that was preventing profile edits by correcting column mapping and backfilling stale rows.
HR Generalists can now upload and remove employee profile pictures directly from the employee detail page. Additionally, the Company selector in the Work Information editor is now a searchable dropdown, improving usability for organizations with many companies.
Updated CORS settings for `admin-set-role` and `company-directory` edge functions to include additional production and staging hosts, resolving access issues for these environments.
The system now more broadly recognizes HR Generalists by including additional department, position, and team criteria, ensuring accurate role identification.
User membership handling has been improved to prevent creating duplicate entries when a user already has an active membership for a company.
HR Generalists can now successfully save changes when editing employee profiles. Previously, edits appeared to save but did not persist.
Users with access to the HR app can now directly edit employee information. The separate 'HR Generalist' permission toggle has been removed, simplifying HR role management as edit rights are now automatically included with HR app access.
The 'Operations Attendance' section has been renamed to 'Attendance Records' for clarity across various applications.
Managers can now use a 'My Team' filter when reviewing claims approvals, making it easier to manage requests from their direct reports.
The User Access editor in the Work app now prompts you to confirm before navigating away from unsaved changes, preventing accidental data loss.
The Work app now includes the User Access Roster and ReplyBox Dashboard/Contacts, centralizing developer tools within the Work environment.
The Developer, Work, and Admin sections are now exclusively available within the Work app. These sections have been removed from the Personal app's sidebar.
The agentic development workflow now includes a Playwright E2E verification loop across all active frontends (HRMS, Finance, Launcher, OE). This enables agents to build features and verify them in a real browser before shipping. A new `/verify-feature [app]` Claude Code command is available, and documentation for agentic development has been updated.
The redundant 'Business Units Assigned' field has been removed from profile forms. Internal dropdown components were standardized across profile sections. New Playwright end-to-end tests have been added for the registration and login flows.
Users with pending accounts are now securely confined to the `/pending` page until an administrator activates their account. The `/pending` page now instantly updates and grants access to the application once your account is activated.
The self-service registration form now allows you to provide your organization placement and an optional profile picture. All profile sections (Personal, Work, Financial) now use improved dropdowns for easier data entry.
HR Generalists can now manage and allocate leave for Official Leave (OL) and Public Holidays (PH) using an updated, more flexible logic.
The 'Total Hours' column in the Overtime Verification feature now displays accurate calculations.
The application now integrates with Replybox, allowing users to fetch and manage contacts and their associated tags. New dashboards for Replybox contacts are available in both Personal Space and the Launcher.
Resolved an issue where the total overtime hours were not always displayed correctly in the Overtime Approval and Details pages for managers.
New user access configurations have been introduced, enabling managers to auto-approve Supplier Payment Requests (SPR) and streamline financial workflows.
- Added PDF export for benefit claim verification details. - Fixed AP Claims amount column to show approved totals instead of submitted. - Corrected wording on Accounts Payable issued account amount cards. - Fixed display of benefit verification issued account amount cards.
The User Access editor now requires explicit confirmation to save changes. Edits are first drafted, and a sticky save bar appears, allowing you to review and confirm changes before they are applied. This prevents accidental immediate changes to user access.
Resolved an issue with the general claim button for account verification, ensuring smoother claim processing within your account space.
Resolved an issue that prevented manager auto-approval for supplier payment applications from working as expected, streamlining the approval process.
Added new documentation detailing database structure, migrations, and schema updates related to user data scopes and work attendance features.
Resolved a hydration crash affecting sidebar user menus across all applications and fixed duplicate import issues that prevented `director` and `launcher` builds.
Implemented new user access and data scoping capabilities, including company and department-level controls, to refine how data is viewed and managed across applications.
Introduced new attendance reporting features with company and department-level data scoping. Also fixed an issue that caused the attendance report page to become unresponsive.
The sign-in screens across all applications have been redesigned for a simpler, single-column layout. You'll now see 'Sign in with Google' as the primary option, with 'Sign in with email' available as a secondary link.
Replybox webhooks now utilize Remote Procedure Calls (RPC) for improved processing efficiency and reliability.
The option to apply for half-day leave has been removed from the leave application form.
Users can now select currencies when applying for backcharges, and backcharge details will display amounts with the chosen currency. Managers have an improved approval process to review individual backcharge items and recalculate request status.
Developers can now access a new dashboard to manage Replybox webhooks, streamlining the configuration and monitoring of integration events.
Users can now view their attendance records in the 'My History' section of their personal space.
HR Generalists can now manage petty cash with a new per-employee balance tracker. This update includes an employee picker for adding records, an editable transaction ledger with delete and supporting document features, pagination, and simplified list headers with hover tooltips.
The HRMS application has been updated to version 2.0.2. This release includes fixes for CORS issues and a nested sidebar button display. The updated version is now reflected in the application's sidebar and login screen.
Addressed a CORS issue that prevented role assignment in the HRMS app when running on local development hosts (`*.lvh.me`). Also resolved a nested button hydration warning in the HRMS sidebar user dropdown.
- Fixed the ordering of the employee list to show recent changes first.- Resolved an issue with the search bar in leave approval.- Updated Petty Cash: removed the category field and added 'Save' and 'Clear Filter' options.- HRMS now displays full names for employees and applicants.- Corrected the calendar format in employee details.
HR Generalists can now manage Overtime (OT) treatment within employment details.
HR Generalists can now delete leave applications directly from the HR Leave Acknowledgement page, enhancing flexibility in managing employee leave requests.
Implemented a multi-layered security enhancement to immediately sign out inactive or resigned users. This includes database changes to expose user status, real-time client-side session invalidation, backend JWT filter rejection, and reduced JWT expiry times for enhanced security. Also updated inactive account messages to 'contact HR'.
Cleaned up the wiki notification workflow by removing unused variables, improving maintainability.
Resolved an issue where the profile search functionality within the Manager Attendance Record was not working as expected.
The attendance module now includes a search bar, allowing users to easily filter and find specific user records.
Added the ability to view and manage resignation dates in employee profiles.
Resolved an issue where attendance records were not consistently displaying, ensuring accurate record-keeping.
Managers can now view attendance records more reliably and navigate through them with improved pagination in the Manager Space.
Users can now easily edit attendance records in the HR space using dedicated date and time pickers for clock-in and clock-out.
Users can now easily select clock-in and clock-out dates and times using a new date picker when managing attendance records.
Release updates merged into the main branch.
Release updates merged into the main branch.
The display of overtime approval periods has been enhanced for both desktop and mobile. On desktop, 'Start OT' and 'End OT' are now combined into a clearer 'Work Period' column. Mobile approval cards now show more details, including work date, time range, hours, reference, and submitted time. Overtime dates are also formatted correctly, including periods spanning overnight.
The HR Leave Allocation feature now accurately includes legacy and cascade-resolved Ordinary Leave usage, providing a more comprehensive view of leave balances.
A new ID lookup API has been introduced within the Utopia Finance application, implemented as a Supabase function.
We've enhanced the process for deleting attendance records, making it safer and more user-friendly. When deleting, you'll now receive clear information about any linked claims or corrections, ensuring data integrity and providing better control over the deletion process.
Implemented a new backend API (`deleteHrAttendance`) and transactional RPC (`delete_hr_attendance_v1`) for HR attendance deletion. This ensures robust handling of foreign key constraints, proper cleanup of related corrections and audit trails, and improved error reporting for file deletions. Includes new database migrations.
HR Generalists can now safely delete attendance records with improved user feedback. The system provides clear warnings for linked Post OT claims and corrections, and allows adding a deletion reason for auditability.
Users can now select 'others' more reliably when setting times within the Shift Roster, improving flexibility for scheduling.
Introduced new database migrations for `profiles_work_schedule` to support dynamic shift roster days and hours based on work schedules. Added 'Flexi' work schedule option and updated backend logic for public holidays across HRMS, Personal, and Work spaces.
The Shift Roster feature now automatically populates days and hours based on your defined work schedule. A new 'Flexi' work schedule option has also been introduced, providing more flexibility in managing employee shifts.
Implemented paying bank capture for SPR, General/Benefit Claim, and Backcharge bank submissions. This involved backend API modifications, new database fields via migration `20260828130000_capture_paying_bank.sql`, and frontend UI components for bank selection and display in AP workflows. Comprehensive backend and Playwright tests were added.
Account staff can now select or enter the paying bank when submitting SPR, General/Benefit Claim, and Backcharge payments. This bank information is captured, stored, and displayed in submission details, activities, and batch history. The system suggests the paying company's configured bank, but custom values are also allowed.
Implemented a new server-authoritative workflow for cancelling approved supplier payment types. This involved significant updates to the finance backend API, services, and repositories, new frontend components for cancellation dialogs, and the addition of database migration `20260828120000`. The feature includes comprehensive backend and E2E test coverage.
AP and Finance Managers can now cancel approved, unsubmitted supplier payment types. This feature requires a mandatory reason for cancellation, preserves approval and payment history, and ensures cancelled items are excluded from all active processing queues and calculations.
We've added new capabilities for Accounts Payable Supplier Payments. You can now return individual payments to 'Pending Bank Submission' to manage receipts (replace or delete) while keeping your existing approvals and payment history intact.
Implemented Hub-style AP Supplier Payment actions, enabling return to Pending Bank Submission, receipt replacement/deletion, and approval preservation. Includes audit logging, storage cleanup, confirmation dialogs, and refreshed OpenAPI types. Resolved generated-schema merge conflict without endpoint loss. Added backend workflow and roll-up tests, and mocked Playwright coverage.
You can now return individual AP Supplier Payments to 'Pending Bank Submission' status. This allows you to replace or delete associated receipts while preserving existing approvals and workflow history.
Finance users can now easily trace bulk payments for claims and supplier payments with the introduction of unique Bulk IDs. This enhancement provides better visibility and management of multiple payment submissions.
The incident report staff search for Managers and Directors in the Work application has been refactored. The previous Business Unit โ Department filtering was replaced with a Hub-style staff search, enabling discovery of active staff regardless of company, department, or role. Business unit authorization, hydration, and snapshot construction are now centralized in pure utilities. This update also includes a fix for responsive UI layout issues with long staff metadata.
Managers and Directors can now find active staff more easily when assigning reviewers in incident reports. The updated search allows you to discover staff regardless of their company, department, or role. The system also ensures that selected staff share at least one business unit with you, and the report's layout has been improved to better display long staff names.
Shared dialog components across all applications now implement a maximum height and vertical scrolling on mobile devices. This ensures that dialog content and action buttons remain fully visible and accessible, improving the user experience on smaller screens.
Implemented new features for Petty Cash including staff status calculation and a bad debt toggle. This involved adding new domain logic (`status-calculation.ts`), database migrations (`petty_cash_employee_status.sql`), and updates to `database.types.ts` across multiple applications.
HR Generalists can now view the status for each staff member in Petty Cash and manage bad debt using a new toggle button.
Users can now access a new Account Filing feature within the finance space. This allows you to view all account records and export them as PDFs, either individually or as a compiled document.
Managers can now benefit from improved filtering when reviewing attendance exceptions within the HRMS system, streamlining the management of employee attendance.
A new entry has been added to the production registry, documenting the merge SHA and successful production workflows for the attendance exception feature release.
Implemented a database migration to correctly filter the attendance exception queue for managers, ensuring only submitted or reviewed requests are displayed and excluding draft/cancelled entries. This addresses an edge case before genuine requests are entered in production.
Introduced a new manager-approved attendance exception workflow across Hub HRMS and Work Station, including new API endpoints, frontend pages, and database migrations ('20260825100000_attendance_exception_requests.sql'). This feature supports emergency partial-day and medical timeslip requests with evidence validation.
Employees can now submit attendance exception requests for emergency partial-day or medical timeslips, which are routed to their direct manager for approval. This new workflow ensures proper tracking and policy adherence for attendance adjustments.
New policies have been introduced for attendance exceptions: emergency partial day requires actual verified worked time, and medical timeslips allow paid approved missing scheduled windows with evidence.
Managers can now approve or deny attendance exception requests, such as emergency partial-day and medical timeslips, directly from their queue in Work Station.
HR Generalists can now manage manager-approved attendance exception requests, including emergency partial-day and medical timeslip requests, with new workflows in Hub HR.
The Post-OT fallback shipment, released via PR #359, has been officially recorded in the release history.
Implemented a manual fallback for Post OT Overtime Applications, including a database migration (`allow_post_ot_submission_fallback.sql`) to formalize existing RLS policies and check constraints. This change ensures data integrity by rejecting overlapping active requests and requiring manager approval. This release is a draft, pending further verification before full production rollout.
Post OT staff can now manually submit Overtime Applications if their automatic record is missing. The system will guide you to check your OT History first and prevent duplicate requests. This ensures all overtime is recorded accurately.
Resolved an issue where the selected currency type for supplier payments was not always correctly updated and stored in the database. This fix ensures that currency types are accurately reflected across the system, including the SPR tracker.
Seven new environment variables (`NEXT_PUBLIC_SCAFFOLDING_URL`, `NEXT_PUBLIC_IBNU_SINA_URL`, etc.) have been added to configure the URLs for the new business unit applications. These variables are crucial for linking the Sales workspace tiles to the correct application instances in different environments.
New `sales.<bu>.view` policies have been introduced for each of the 7 new business unit workspaces. Administrators can now grant or deny access to these individual business unit tiles via the Work โ `/user-access` โ Sales App interface.
Detailed guidance has been added for developers on how to integrate Single Sign-On (SSO) for new business unit applications. This includes patterns for Supabase-JS SPAs and apps with their own backend/HTTP-only cookies, leveraging the shared Supabase parent-domain cookie for seamless user experience.
The Sales workspace now includes 7 new business unit tiles: Scaffolding, Ibnu Sina, Sticker Lorry, Jom Vend, Kak Kenduri, RevMove, and Room Rental. Each tile provides direct access to its respective application, with seamless sign-in via shared cookies. Access to these tiles can be managed by administrators.
Users can now compile completed Supplier Payment Requests (SPR) with a new dedicated button. The copy button for SPRs has also been updated for improved usability within the Accounts Payable section.
Implemented multi-Business Unit (BU) support in the Operations Efficiency (OE) application. This feature introduces `BuAccessGuard` for backend access control and updates `OeAuthController`, `OeProxyController`, and various frontend components to manage BU context. A new `bu-oe-contract.md` document details the integration.
The Operations Efficiency application has been enhanced to support multiple Business Units (BUs). This update improves data segmentation and access control, ensuring users interact only with data relevant to their assigned Business Units.
The 'What's New' page within the Utopia Launcher now accurately reflects all recent updates, including the 'HR Generalist โ Attendance Correction' entry, by ensuring its changelog data is fully synchronized.
Resolved an issue where `git stash` conflict markers were accidentally committed to the root `CHANGELOG.md` file, causing them to render verbatim. The file now displays cleanly.
HR Generalists can now monitor missed clock-out corrections across the organization. A new read-only Attendance Correction queue and detail view allow auditing of all such corrections.
Managers can now review and approve or reject employee requests for missed clock out attendance resubmission directly within the Work space. This new approval flow streamlines the process for correcting attendance records.
A new 'Contra with Last Claim' workflow for petty cash has been implemented, integrating across `utopia-hrms` and `utopia-finance` applications. This includes new API endpoints, database schema migrations (`petty_cash_contra_general_claims`), and UI components for managing pending claims and contra audits in various user spaces (Personal, Manager, Account).
Users can now manage petty cash contra claims with a new workflow integrated across HRMS and Finance. This streamlines the process for handling last claims and improves visibility.
The "Contra with Last Claim" feature for petty cash, previously live in production, has been reverted. This rollback was performed as a new, independent implementation (PR #349) is being adopted. Consequently, claims previously marked as 'Contra' may now show negative balances, and the 'Revert Bank Submission' action has been removed. Manual reconciliation will be required for affected claims once the new implementation ships.
A fix for petty cash contra entries has been deployed.
We've introduced a new 'Contra with Last Claim' feature for petty cash management. This enhancement allows HR to easily settle outstanding claims by contra-ing them against returns, ensuring accurate balances. Finance users also gain a new 'Revert Bank Submission' action for better claim reconciliation.
Introduced a new `finance_status='Contra'` for petty cash claims, ensuring accurate balance calculations across all applications. Implemented a new HR workflow for 'Contra with Last Claim' and a 'Revert Bank Submission' action for Finance, improving end-to-end claim settlement and audit trails. No schema changes were required.
Finance users will now see petty cash claims settled by HR via 'Contra with Last Claim' clearly marked with a new 'Contra' status. Additionally, a new 'Revert Bank Submission' action is available to reverse bank-submitted claims that were not processed, making them eligible for contra and improving claim reconciliation.
HR Generalists can now use a new 'Contra with Last Claim' method for petty cash returns. This process allows you to select open claims, automatically pre-filling the return amount, and marks the claims as 'Contra' to ensure accurate balance tracking and prevent negative on-hand balances.
A significant update has been deployed to refine the petty cash balance calculation logic across all applications. This involved a comprehensive review and correction of 'bucket rules' in 8 Supabase-backed applications, updating the `utopia-finance` backend and frontend to ensure consistent `balanceAtHand` computation, and standardizing the calculation across 27 UI components. Key technical changes include filtering out zero-value phantom entries, precise handling of `accountPending` and `financePending` statuses, and ensuring manager and finance approval stages are provably disjoint. This update ensures data consistency and accuracy across all petty cash interfaces.
We've rolled out an important update to ensure your petty cash balances are always accurate across all applications, including your Personal, Manager, and Finance portals. This fix standardizes how 'balance at hand' is calculated, correctly accounting for pending claims and removing any phantom entries, so you always see the most reliable figures.
Petty cash deletions now correctly update your ledger and balances, ensuring accurate financial records. Previously, deleting a petty cash entry might not have reflected correctly in your balance or the ledger. Additionally, summary cards for petty cash now refresh instantly to show the most up-to-date figures.
Resolved issue #335 by adding 'UTOPIA ACCELERATOR SDN BHD' to the hardcoded company list in 'apps/utopia-personal/src/shared/ui/components/ClaimFormV2.tsx', enabling employees to submit claims under this company.
Employees can now select 'UTOPIA ACCELERATOR SDN BHD' from the company dropdown when submitting General or Benefit claims in the Personal app.
The manager's leave approval workflow in the Utopia Work app has been refactored to remove the HR approval step. This involved updating `ManagerLeaveApprovalDetailPage.tsx` and `ManagerLeaveApprovals.tsx` to remove HR-related UI elements (columns, badges, filters) and logic. Global search/filter logic was adjusted, and confirmation messages were updated. Obsolete cascade approval logic and variables were also removed for code simplification.
The leave approval workflow for managers in the Utopia Work app has been streamlined. HR approval is no longer required after a manager's decision, making the manager's approval final. The user interface and messages have been updated to reflect this simpler process.
Deployed the new Ibnu Sina workspace, which involved a new database migration (`sales_ibnu_sina_grant`) and updates to user access registries across personal and work spaces to configure feature availability.
Users can now access the new Ibnu Sina workspace directly from the sales application, providing dedicated tools and features.
The Shift Roster feature has been updated to improve how draft changes are saved, preventing errors. You will also notice improved visibility for departments, and refined handling of draft working times for better assignment and custom time input.
Introduced significant improvements to the Leave History and Leave Details features in the Utopia Personal app. This includes grouping leave applications by category (General, Medical, Special), simplifying the manager approval flow by removing HR approval stages, and correcting the display of applicant names. Frontend logic, E2E, and unit tests were updated to reflect these changes, along with the addition of `LeaveApplicationCategory` type and `getLeaveApplicationCategory` utility.
We've enhanced the Leave History and Leave Details pages in the Personal app. You'll now see your leave applications grouped by categories like General, Medical, or Special Leave. The leave approval process has been simplified to a manager-only timeline, and applicant names are now displayed more accurately.
The Leave History and Leave Details pages in the Personal app have been improved. You can now view your leave applications grouped by categories such as General, Medical, or Special Leave. The approval process for leave requests has been simplified to a manager-only timeline, and applicant names are now displayed more accurately.
Recorded the merge SHA and production verification evidence for the Personal Hub SOCSO/SKBBK payslip split release.
Users will now see a correct breakdown of SOCSO and SKBBK contributions in their Hub payslips within Personal Space, resolving an issue where SKBBK was incorrectly grouped under SOCSO.
A new database index has been implemented to enhance the efficiency and stability of U-Money's supplier payment credit card reconciliation, particularly as transaction history expands.
Page titles across various Finance features, including Accounts Payable, Backcharge Verification, Claims SGS, Advance Salary, and Analytics, have been updated for clarity. Additionally, a fluid layout has been applied to these components for an improved user experience.
The invoice summary now includes a detailed list of invoices for bulk payments, showing the total amount and associated request IDs. Descriptions are now integrated directly within each invoice section for better clarity.
Implemented new functionality for managing CC recipients on supplier payments. This includes database schema updates, new API endpoints, and corresponding frontend components across the Finance, Personal, and Work applications. A new child table `supplier_payment_cc_recipient` was added.
Users can now manage CC recipients for supplier payments, allowing for better communication and tracking of payment-related notifications within the Finance, Personal, and Work spaces.
The Shift Roster feature now utilizes a new grant-based access system, enhancing control over who can view and manage shifts.
Users can now see pending leave requests directly within the Shift Roster, providing a more complete view of team availability.
The `DataTableToolbar` component in HRMS now supports a `hideReset` prop for custom clear/reset controls. New end-to-end tests have been added to verify filter wrapping and action alignment on benefit claims and leave approval pages.
The HRMS app now features enhanced table filter toolbars, particularly for benefit claims approval and leave approval pages. Filters now wrap neatly, display clearer selection badges, and the 'Save Filter' and 'Clear Filter' actions are better aligned for improved usability.
The leave application approval workflow has been refactored across `utopia-hrms`, `utopia-personal`, and `utopia-work` applications. HR-specific approval views and functions have been removed, standardizing approvals to be manager-only. This includes a new SQL migration.
A new SQL migration (`20260812110000_standardize_leave_manager_only_approval.sql`) has been added to standardize the leave approval process, ensuring it is manager-only. The `docs/database.md` file was also updated.
The HR Generalist space no longer includes views or functions for approving leave applications. This responsibility has been shifted entirely to managers to streamline the process.
The leave application approval process has been updated. HR approval steps have been removed, and all leave applications will now be approved solely by managers, simplifying the workflow for employees and managers.
Users can now reliably filter attendance records within the Operations Efficiency space, resolving a previous issue.
Implemented manual phone entry for CC recipients in the Supplier Payment Request (SPR) dialog. This involved changes to `SupplierPaymentCcRecipient` for `profileId: string | null`, deduplication logic in `utopia-work` and `utopia-finance` submit paths, and `SupplierPaymentController.normalizeCcRecipients` to handle `profileId`-null entries. Manual entries are stored in `supplier_payment_master.cc_recipients` and handled by the WhatsApp sender.
Staff using the Utopia Finance application can now manually add phone numbers for CC recipients in the Supplier Payment Request (SPR) dialog, even if the person doesn't have a Hub profile.
A fix has been applied to update the leave cascade application and tracker with a new calculation logic. This involved changes to `src/domains/leave/cascade.ts` and related API and frontend components within the `utopia-personal` application.
The leave cascade application and tracker have been updated with a new, more accurate calculation logic. This ensures that leave applications are processed correctly within your personal space.
Implemented features to enhance draft editing functionality within the Shift Roster module and improved user access visibility, affecting `ShiftRoster.tsx` and `UserAccess.tsx`.
This release brings significant enhancements to the Shift Roster, including improved draft editing, and better visibility for user access controls.
User access visibility has been improved, providing clearer insights into who has access to what features and data.
Shift Roster now offers enhanced draft editing capabilities, making it easier to manage and refine your shift schedules before publishing.
Introduced a new feature allowing CC recipients for Supplier Payment Request (SPR) applications. This involved updates to `utopia-finance` backend and frontend, `utopia-work` frontend, and new database migrations for `supplier_payment_cc_recipients`.
You can now add Carbon Copy (CC) recipients to your Supplier Payment Request applications, ensuring additional stakeholders receive notifications.
We've streamlined how environment variables are managed for local development. Now, a single `.env` file handles all configurations, making setup easier and more secure, especially for new team members. Existing users will need to run a simple migration script.
The environment configuration has been refactored from a two-file (`.env` + `.env.dev.local`) model to a single `.env` file. Project-specific keys are now prefixed (`PROD__`, `DEV__`) and selected via the `APP_ENV` variable, processed by `tools/env-switch.js`. This change impacts all applications and requires a migration step for existing checkouts.
Two new scripts, `tools/env-switch.js` and `tools/migrate-env.sh`, have been introduced to manage the new single-file `.env` setup. `env-switch.js` handles environment selection, and `migrate-env.sh` assists in converting old `.env` configurations.
Environment variables are now managed through a single `.env` file, using `PROD__` and `DEV__` prefixes. The `APP_ENV` variable selects the active environment, simplifying setup and enhancing security by preventing accidental exposure of production secrets.
Resolved an issue where `utopia-manager`, `utopia-director`, `utopia-supervisor`, and `utopia-launcher` applications failed to load data tables due to missing `use-persisted-filters` modules, resulting in 500 errors. The necessary module has been added to these applications, ensuring data tables load correctly.
To enhance the stability of production deployments, a new build gate has been added for all pull requests targeting the `main` branch. This ensures that all code is successfully compiled and passes essential quality checks *before* it can be merged, significantly reducing the risk of deploying broken applications to production environments.
A new GitHub Actions workflow (`pr.yml`) has been implemented for pull requests targeting the `main` branch. This workflow now performs `nx affected` builds and quality checks (import casing, brand verification) *before* code is merged. This ensures that code compiles correctly and passes basic quality gates, preventing broken changes from reaching `main` and subsequently production deployments. The workflow intelligently resolves affected build targets to accurately reflect changes.
Addressed mobile responsiveness issues across various approval detail pages (e.g., ManagerClaimDetails, ManagerBackchargeDetails) and the shared ApprovalSteps component. Changes span multiple applications including utopia-admin, utopia-director, utopia-finance, utopia-personal, and utopia-work, ensuring better UI adaptation on mobile screens for approval workflows.
We've improved the mobile responsiveness of approval pages throughout the system. Whether you're reviewing claims, backcharges, or supplier payments, you'll now experience a smoother and more consistent layout on your mobile device.
Missing files for `usePersistedFilters` were added to the Utopia HRMS and Operation Efficiency (OE) applications. This ensures that data table filters can be properly persisted and recalled within these applications.
We've rolled out an update that significantly improves the mobile responsiveness of various applications within your Personal Space, including Backcharge, Leave, Overtime, SGS Claims, and Supplier Payment. This ensures a smoother and more consistent experience when accessing these features on mobile devices.
This release enhances Shift Roster draft visibility and management features across the HRMS, Personal, and Work applications. Key changes include improved code structure for readability and maintainability, and a cleanup of the shift roster draft edit workflow.
Users can now more easily view and manage their Shift Roster drafts across HR, Personal, and Work spaces, with improved visibility and streamlined workflows.
The Utopia OE backend deployment workflow has been updated to trigger from the `main` branch. This change aligns OE's deployment process with other production applications, which now all deploy from the `main` branch, following the retirement of the `development` branch.
The `main` branch has been designated as the sole production trunk for the repository, retiring the `development` branch. All production deployments, including Utopia OE, now trigger exclusively from `main`. This change streamlines the CI/CD pipeline and consolidates all production releases onto a single branch. Note: A temporary gap in release gating exists, to be addressed by PR #288.
The `main` branch is now the default branch for the repository, replacing `development`. All new pull requests should target `main`. This change simplifies our development workflow by consolidating all active development and production releases onto a single branch.
This production release includes critical fixes for mobile responsiveness in Overtime Summary tables across various applications and addresses several issues within the Finance module, specifically related to Supplier Payment Request (SPR) tracking, compilation, and mobile display for Finance Launcher, Backcharge, and SPR applications.
Addressed issues in the Finance module, including improved mobile responsiveness for the Finance Launcher, Backcharge Application, and Supplier Payment Application. Fixed a bug where compiled Supplier Payment Requests (SPR) could merge with newly added ones, and resolved a 'bad request' error in the SPR tracker.
The Overtime Summary tables across various applications now display correctly on mobile devices, enhancing usability for managers and employees.
Job log and outcome cards in the Ops Efficiency space now prominently display the order number, making it easier to identify and track items at a glance.
This release includes a fix for Ordinary Leave allocations, implementing annual totals and updating related calculations in utopia-hrms. It also incorporates an update to the docs/database.md file. See PR #277 for details.
The database documentation has been updated. Please review for the latest information.
Ordinary Leave allocations now include annual totals and updated related calculations, providing more accurate leave management for HR Generalists.
Implemented an update to the Public Holiday usage deduction logic within the HRMS leave allocation domain. This includes modifications to `allocationApi.ts` and the introduction of new `benefit-usage.ts` and `benefit-usage.test.ts` files to refine calculations.
Public holidays are now accurately deducted from leave usage within the HR Generalist space's leave allocation feature, ensuring correct leave balances for employees.
This release brings several enhancements and fixes across the platform, including improved job notifications in Operation Efficiency, better Shift Roster management, decoupled HR Generalist access, and a more reliable leave application process.
This release promotes recent features and fixes from the development branch to production, including updates to Operation Efficiency, HR Management, Work, and Personal applications.
The leave application chooser is now enabled on all hosts within the Personal space, ensuring consistent access for all users.
The HR Generalist role has been decoupled from the main HR app tile, providing more flexible access and management.
The Shift Roster now has improved visibility for draft entries and the edit button, making it easier to manage your work schedules.
You can now directly open a job from a push notification in the Operation Efficiency app, streamlining your workflow.
Completed the August 3rd, 2026 release, which includes version updates for Utopia HRMS, Utopia Launcher, Utopia Personal, and Utopia Work applications, along with corresponding changelog updates.
Addressed a build issue for the Utopia Sales app on Vercel where `tsconfig.json` validation failed due to an undeclared `@types/node` dependency. This ensures successful builds and typechecking.
Synchronized `package-lock.json` to reflect updated package versions across several applications (Finance, HRMS, Launcher, Personal, Work) that were previously out of sync.
Integrated a new notification ingest endpoint with configurable properties. A production release was performed, including version bumps and changelog updates across applications.
Removed `nxCloudId` and set `neverConnectToCloud` in `nx.json` to resolve an issue where CI builds (e.g., on Vercel) would fail due to an unauthorized Nx Cloud workspace. Nx tasks now run locally in CI, maintaining local caching without requiring Nx Cloud connection.
Added a new developer-only entry point for the Wiki. This release also includes updates to the Caddyfile and a new deployment workflow for the Sales application, alongside other infrastructure improvements.
A routine release cut was performed for the 27th July 2026 release, involving version bumps and changelog updates across applications.
A new production release has been deployed, including version bumps and changelog updates across various applications. This release incorporates new features for personal pay documents and HR access controls, along with UI fixes.
Updated Cross-Origin Resource Sharing (CORS) configuration and improved error handling across the API, enhancing security and system stability.
Resolved an issue with the `ops_profiles` sync-trigger for improved data consistency.
Version 2.1.0 has been released across all active frontends, including new features and bug fixes. This release also includes the rollout of Playwright end-to-end testing for all active frontends and updates to internal documentation and changelogs.
Replybox webhooks now leverage Remote Procedure Calls (RPC) for enhanced processing efficiency and reliability. This update includes a new database migration to support the RPC-based webhook insertion.
Resolved an issue preventing `hr.utopiagroup.com.my` origin from accessing HRMS edge functions due to CORS policy.
Implemented a new GitHub Actions workflow to automatically sync wiki documentation upon pull request closure. This release also includes various backend and infrastructure improvements, such as database migrations, CORS configuration updates for HRMS, and general dependency bumps.