- Ya
- 12 Agosti 2026, 20:15 UTC
- Mwandishi
- kamo
- Ahadi ya
- d13eb1b
attendanceState() marked every member 'clear' whenever blockingExceptions was 0 and timecardState wasn't 'SUBMITTED' — true for every member under a caller lacking FINALIZE_PAY_PERIODS, since the server sends timecardState: null for all of them. A withheld caller's compliance matrix was asserting "Clear" org-wide about a fact they were never told, and feeding score: 0 into the worst-first sort. joinMemberRows now takes an explicit approvalsWithheld signal (derived from attendance.awaitingApproval === null, same as AttentionLedger already reads) rather than inferring it from timecardState alone, so a genuinely untracked member stays distinguishable from one whose state was withheld. A real blocking exception still surfaces as 'overdue' under withholding — that data is unaffected by the payroll gate. Also widened AttentionLedger's withheld check from `=== null` to `null || undefined` to match OverviewPillars, closing the gap against a future upstream @JsonInclude(NON_NULL) silently reintroducing the same bug.