c7c83890e4
Deploy to route.crispygoat.com / deploy (push) Has been cancelled
The /admin/time-tracking overview page crashed on render with `column "fw.display_name" does not exist`. Cycle 10 unified `time_tracking_workers` + `water_irrigators` into `field_workers`, which uses `name` and `pin_hash` (not the legacy `display_name` / `pin` from `admin_users`). This fix aligns the SQL, row type, and result mapper with the actual schema. End-to-end verified against water.tuxedocorn.com with worker PIN 2229: PIN auth, task picker, clock-in, and clock-out all succeed with no console errors and no failed HTTP requests. Includes a regression test that fails on the buggy SQL (4/8 fail) and passes after the fix (8/8 pass). Covers the column contract, row projection, empty-result + unauthenticated boundaries, and null aggregate coercion.