- Shipped
- August 14, 2026 at 12:19 AM UTC
- Author
- Kamo
- Commit
- cd00f6e
Drives TimecardService's **************** which syncs every organization whose next sync is due. Cron lives here rather than in TimecardService because that deployment is RollingUpdate with maxSurge 1, so two pods overlap on every rollout and a @Scheduled method fires twice — which for a payroll sync means two pushes of the same hours. DaemonService is replicas 1, strategy Recreate. Scheduled at 03:00, forty minutes after the timecard sweeps: those close open shifts and detect exceptions, and sending hours to a payroll provider before they have run would transmit numbers that are about to change. Refuses to run on a blank mlos.internal-auth-secret rather than logging a false success — a payroll sync that quietly never runs looks exactly like one that found nothing to do, and the difference is a pay period of hours that never reached the provider.