d13e8f7510
- Guard the thread-id-as-chat_id normalization to Discord only; Slack and Telegram adapters use parent_channel as chat_id for thread messages, so the unconditional version broke their handoff keys. - Apply the same Discord-specific guard to _seed_cron_thread_session in cron/scheduler.py (sibling site with the same bug, docstring said 'Mirrors _process_handoff'). - Replace the change-detector test with contract tests that verify the actual invariant: Discord handoff key == organic thread key, Slack handoff key still uses parent channel (non-regression).