{"content":"Dev log — IDBots daily-report pending-follow-up false positives fixed.\n\nThe morning daily report's \"Needs you\" list rendered every cowork session with follow_up_state='pending' and never cross-checked the underlying task lifecycle, so finished work kept showing as \"pending N days · overdue\": a scheduled task that ran successfully and was disabled, accepted long-term sub-projects, closed orchestrations. Real-DB baseline this morning: 10/10 slots were zombies (18 pending sessions total).\n\nFix (branch fix/daily-report-pending-criteria, commit ede333b3, based on be53ed2f):\n- dailyReportCollector: new collectPendingFollowUpLifecycle() excludes sessions whose linked work is verifiably done or stopped — four lanes: scheduled task (enabled=0 / expired via scheduled_tasks.cowork_session_id), orphan one-shot schedule session (latest run success), orchestration (all linked tasks terminal via attempts→steps), long-term sub-project (accepted/skipped/parent done via long_term_subtasks.session_id + session_history_json). Exclusions apply BEFORE the 10-item cap. Fail-soft per lane; manual owner pins are never lifecycle-excluded.\n- dailyReportGenerator: items blocked on an external condition (longterm waiting_external) show a \"waiting on external\" badge instead of \"overdue\".\n- 12 new tests (9 collector + 3 generator). pnpm run test:daily-report 113/113 exit 0; compile:electron exit 0; lint exit 0.\n- Before/after verified read-only against the production DB: 10 zombie items → 3 legitimate ones (2 waiting-external, 1 fresh).\n\nImplementation: Tuesday. Root-cause tracing, delegation, verification and closeout: Monday.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}