Created: December 17, 2025

Labor Costs Export, PM Agent Optimization, and Critical Fixes

This release focuses on critical bug fixes for reporting and notification systems, restoring Excel export functionality, fixing employee filtering with historical data, and implementing parallel processing for 2-3x faster PM Agent task delivery.

Release dates: 12/08/2025, 12/09/2025, 12/15/2025

Fixes, improvements, and refinements

Reporting and data export

  • Fixed active employee filtering in Global Worklogs with historical data. The logic for processing "active: None → True" entries in employee change history has been updated. The system now ignores this entry and considers the employee active from the moment of creation. This allows users to be displayed correctly in Global Worklogs, even if their worklogs are dated to a period before their account creation date in the system (for example, a user created on 05/25/2025 who has worklogs for the period 01/01/2025–04/30/2025).

    Impact: Clients now have correct active employee filter functionality when importing historical data.
  • Restored Excel export for Labor Costs report. A critical error blocking data export to Excel from the simple Labor Costs report on the project page has been fixed. Export functionality has been restored for both modes (Task-based billing and standard Labor Cost); files are now generated and downloaded correctly.

    Impact: Managers have regained the ability to export labor cost data for further analysis. This critically important Excel export function, used for budgeting, client billing, and financial reporting, is working again. A blocking issue has been eliminated for users who work primarily with exported Excel data for calculations and executive presentations.
  • Fixed employee profile links in Labor Costs export. Critical formatting errors in the Members column during report export have been eliminated: navigation now works correctly for a single employee; for multiple employees, the incorrect array has been replaced with separate working URLs for each; and automatic navigation to the Comments tab has been removed (now opens the default profile view).

    Impact: Users now have working links in exported Labor Costs Excel reports. Clicking an employee name in the downloaded file correctly leads to their profile in the system instead of a 404 error or incorrect tab. This is critical for quick navigation when analyzing financial reports with large numbers of employees, especially for financial analysts who work primarily with exported data.

PM Agent and notifications

  • Fixed email delivery from PM Agent Tasks for global access users. Resolved a notification service bug that failed to handle empty project lists for global access users not tied to specific projects. The private_deliveries field now generates correctly instead of returning null, eliminating the "No valid delivery targets found in NATS message" error. Global access users now receive email notifications from PM Agent periodic tasks again, restoring this critical automated reporting function for senior managers.
  • PM Agent now considers only active projects in "all projects" mode. Fixed the project selection logic in PM Agent's "all projects" mode. The agent now works exclusively with active projects, ignoring deactivated ones regardless of their open/closed status. This aligns with Global Access menu behavior, where deactivated projects aren't displayed.
  • Restored the Enji-branded header and footer to all email notifications
    Implemented consistent Enji-branded headers and footers across all email templates, including PM Agent periodic tasks, alerts, and system notifications. Fixed styling for proper rendering across email clients, ensuring visual consistency for all outgoing messages.

Performance improvements

  • Implemented parallel processing of periodic tasks with batch processing
    Optimized PM Agent's consumer.py for parallel task processing. Increased batch size to 2-3 messages per fetch (from 1), implemented asynchronous processing with a semaphore limiting concurrent tasks to 3, and ensured first-in-first-out processing with dynamic slot refilling. Periodic task users now experience 2-3x faster report delivery through simultaneous processing of up to 3 tasks instead of sequential queuing.