feat(threads): a long reply gets somewhere of its own #380
No reviewers
Labels
No labels
move-to-repo
coilyco-bridge-deploy
move-to-repo
coilyco-flight-deck-agent-compose
move-to-repo
coilyco-gaming-eco-app
move-to-repo
coilysiren-inbox
move-to-repo
unknown
🔒⚠️📦⚠️🔒 SANDBOXED 🔒⚠️📦⚠️🔒
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-gaming/sirens-echo!380
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/a-long-reply-gets-a-thread"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
closes #379
Slice of #239, delivering the trigger Kai specified on #354. Nothing in this repository created a thread before.
When
Two conditions, both required: the turn posted a progress line, and it ran past
turnLongReplyAfter(the wait plus two beats — Kai's3 + 6 + 6).The second alone is not enough. A turn that never posted a line has nothing in the channel pointing at a thread, and a member would be left with a question and no visible answer.
I raised carry-or-announce as a blocking decision, and it was not one
I asked Kai whether a thread should carry the reply or announce it. The answer was already in code that predates the question: a long turn already posts a progress line in the channel, and that line is the announcement. The reply lands in the thread; the channel keeps the line.
That also makes the guild's hide-after-an-hour setting cheap — an auto-hidden thread takes nothing with it that the channel did not already have.
The name is derived, not authored
Discord requires a name and a name is member-facing. Letters, digits and spaces survive from the member's own message, everything else is dropped, truncated to Discord's 100-rune cap, with a fallback for a message that is all mention and punctuation.
Dropped rather than summarised. Summarising would be writing a member a title.
The property that matters more than the feature
A thread that cannot be made must never cost a member their reply. No permission, a channel type that cannot hold threads, an API failure, a turn already inside a thread — every path returns "no thread" rather than an error, and the reply goes to the channel exactly as today.
That is why the decision returns a channel id and a boolean and has no error to propagate: no failure here is worth failing a turn over. A feature that eats answers is worse than no feature.
Notes
turnLongReplyAfterhad no consumer when it landed in #358. This is it.BindJobToThreadstays unwired.Live verification is Ops'. I cannot confirm the bot actually holds the create-public-threads permission in the guild; if it does not, this is inert and every reply behaves exactly as it does today, which is the fallback working rather than a failure.
ward exec gategreen: build, policy-check, vet, test, test-skips, pre-commit.