Withheld approval state renders as not-tracked, not clear

Fixkamo-internal
Shipped
August 12, 2026 at 8:15 PM UTC
Author
kamo
Commit
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.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing