[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. 🫖 Status page with uptime monitoring & API monitoring as code 🫖 openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor

slack: use assistant.threads.setStatus instead of a "Thinking..." message master

The agent posted a real ":hourglass_flowing_sand: Thinking..." message and mutated it via chat.update into the answer, the confirmation card, or an error. That placeholder notifies, shows up in thread history (and had to be filtered back out before feeding the model), and leaves a stale "Thinking..." artifact when a run dies mid-flight. Slack's assistant.threads.setStatus renders an ephemeral loading indicator instead. Since the March 2026 scope change it accepts chat:write, which the app already has, so it works in channels with no manifest or scope change. Dropping the placeholder means the reply is a fresh post rather than an update, so: - postThreadReply centralizes the cannot_reply_to_message top-level fallback, now shared by the answer, confirmation and error paths. - setStatus is best-effort — failures are logged and the run continues, since a cosmetic indicator must never silence the bot. A 60s refresh keeps it alive past Slack's ~2 minute drop, and it is cleared before the reply lands. - A second destructive draft in a thread now strips the old card's buttons and marks it superseded, rather than leaving two identical live cards sharing one action id. - store() takes a caller-supplied id so the card's blocks can be built before the message exists; replace() also updates the stored messageTs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018vZGKg3npYcKypYaYEDkJr