ed25a40917
Slack task cards are tool progress rendered natively, but the card lane ignored the operator's tool_progress mode. Slack's built-in display tier sets tool_progress off, so the lane was decoupled on purpose (#29483) to keep cards on for unconfigured installs. The side effect: an operator who wrote `display.platforms.slack.tool_progress: off` to silence tool updates still got cards, and on relay-fronted Slack (where the connector always advertises task_card) there was no setting that could turn them off. Gate the card lane on operator intent, not the tier default: cards stay on when nothing is configured, and go off only when tool_progress was written as `off` (global, platform override, legacy overrides, or the env bridge). `new`/`all` keep cards. Tests assert the wire contract: no native card send, no stop, no fallback text for an explicit off; card lane engaged for `new` and for the unconfigured tier default (regression guard for #29483). The duplicate-tools fixture now mirrors production's _safe_callback null-guard.