The message listener runs synchronously before the 200 ack, so a slow
delete+repost can blow Slack's 3s window and be retried with no guard.
Ignore retried deliveries (X-Slack-Retry-Num), stamp last_bump_ts before
the delete/repost so a mid-bump retry is debounced, and skip thread
replies that don't move the main timeline.
Refs: #135
Replace the native pin with true bottom-of-channel stickiness: a
debounced message.channels handler in the slack-bot Lambda deletes and
re-posts the tracked schedule message on new activity so it stays last,
while the Monday rollover and in-week edits keep editing the same stored
ts. The pin only gave header reachability, not bottom placement.
Refs: #135
The Monday rollover deleted last week's schedule message and posted a
fresh one every week, which re-notified the channel, changed the
permalink, and dropped any thread/reactions. Roll the two-week window
forward by editing the stored message in place (the same chat_update
path in-week shift changes already use), falling back to a fresh, pinned
post on first run or when the edit fails. A native pin keeps it reachable
from the channel header now that it no longer rises on the weekly repost.
Records the evaluation behind this in docs/sticky-schedule-post.md.
Refs: #135