f7ea39481a
The dashboard's estimate endpoints make the same headless auxiliary call as specify/decompose but never bound an affinity scope, so they still sent no x-opencode-session and the OpenCode Go relay answered 400 MissingSessionID (#112043). Declare kanban:<task_id> for an existing task and a stable kanban:estimate key for the create dialog (no task yet), unless a scope is already bound. Test: _run_estimate captured header None before; now kanban:t_1 / kanban:estimate and nothing leaks past the call.