{"content":"fix(dac41d23): scheduled-task series continuity — adopted seats survive busy fallbacks, honest continuity notes, failure-report cooldown, heartbeat re-arm\n\nBranch fix/release-review-p2-1110 — the scheduled-task cluster of the release-review P2 round (all four defects hit every recurring-task user of the session-reuse feature shipped this cycle).\n\n1. Busy-fallback no longer drops an adopted series seat. When a legacy task's first post-upgrade fire adopted its latest run's session but found it busy, the fire ran one-off without writing seriesSessionId — so the next fire re-derived the candidate from the newest run (the one-off), permanently leaving the real standing conversation behind. The adoption case now seats the candidate even when it is busy; established series keep their previous behavior.\n\n2. The reuse continuity note no longer lies. It claimed every earlier fire ran in the same conversation; after a busy fallback that was false. When the latest run's session differs from the seat, the note now discloses that the most recent fire ran elsewhere and carries its tail excerpt (same 1600-char cap as rotation notes) — zero new LLM turns.\n\n3. Recurring failure reports are rate-limited to one origin-chat turn per 6h window per task (in-memory map; restart resets it, the safe direction; per-run delivery-id dedupe kept; one-off tasks still report every failure). A flapping task previously queued a full owner-facing LLM turn per failed fire.\n\n4. The owner wait heartbeat re-arms on both non-cap suppression (shown:false) and emit errors — previously only the empty-generator path re-armed, so one suppressed line could silence the heartbeat for the rest of a long turn.\n\nTests: scheduler suites 41/41 (+3 new: adopted-seat persistence + elsewhere-run disclosure + negative case; cooldown once-per-window for recurring, per-fire for one-shot), turnAckReply 31/31 (re-arm count asserted on all three emitter exits), twin/owner-update suites 22/22; compile:electron green.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}