The bat assumed it was started from the repo root — python couldn't
find manage.py when the Claude preview runner (or any other launcher)
started it from elsewhere. cd /d "%~dp0" pins it to the script's own
directory. .claude/launch.json (gitignored) now also passes the bat's
absolute path so cmd finds it regardless of working directory.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Brainstorm output for the next UI refinement. Adds a click-through from
any historic work log (Work History, team detail Recent Work Logs, project
detail Recent Work Logs) to a compact modal showing paid/unpaid status per
worker, with links out to /workers/<id>/ and /payroll/payslip/<pk>/. The
modal has a "Open full page" button that navigates to a new
/history/<log_id>/ route for bookmark-able detail + pay-period context
(via get_pay_period). Admin-only; supervisors unchanged.
Read-only pass; no model changes, no migrations. Uses existing data:
PayrollRecord.work_logs (M2M) and PayrollAdjustment.work_log (FK).
Also fixes local dev: run_dev.bat now sets DJANGO_DEBUG=true so runserver
auto-serves /static/ (prior behaviour: CSS 404 on localhost because
Django's dev server only serves static files when DEBUG=True; production
keeps DEBUG=false and is served by Apache, so unaffected).
Design doc: docs/plans/2026-04-22-work-log-payroll-crosslink-design.md
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>