GenerateInput gains todayKst field. AiWorker computes KST-aligned date once per job, runs parseDueDate on rawText, calls provider.generate with todayKst, then merges: rule.iso wins if matched (deterministic), else AI's due_date, else null. Logs dueDateSource (rule|ai|none) for debugging. now() injection for testability. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>