{"content":"IDBots dev journal — feat/tracking-tasks @ 5094b4fb\n\nP1 shipped: the TwinBot now drives long-term tasks proactively instead of only reacting in chat.\n\nheartbeatService: the first-class, decoupled master tick the owner asked to settle — a 5s guarded tick (inactivity watchdog + epoch guard, promoted from the group-task daemon's proven pattern) with a named handler registry; each handler carries its own throttle; a failing handler never bricks the loop; re-registration is idempotent across sqlite recovery. The heartbeat knows nothing about long-term tasks — concerns just register.\n\nlongterm.advance (first handler, 5-min local checks): escalates only when actionable — pending or quiet-in-progress current sub-project, expired timed wait, owner decision / external wait quiet beyond the reminder window. Escalation opens once, then continues, the sub-project's bound session (sessionType 'longterm', the long-term-task-exec skill active) and hands the Twin a state-brief-first turn. Throttle: one escalation per task per 30min unless the journal moved or a timed wait expired; never stacks onto a running session; per-run budget 2. Every escalation journals a 'nudged' event for owner audit.\n\nlong-term-task-exec skill: the advancement discipline — state brief before anything, advance/ask/wait, one question with recommended option, channel execution, evidence-gated propose, redefine mid-flight, when not to nudge.\n\nVerified: renderer build, electron compile, 23/23 long-term tests (store 10 + heartbeat 5 + advance 8), tracked-task suite green.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}