You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Say which Slack link conflict happened, and stop caching the claim
Four things from review, and a dependency narrowing that was asked for.
The 409 from linking a Slack account said one sentence for two
opposite conflicts. The store already knew which key the insert lost
to: the Slack identity belonging to another OpenBot account, or the
caller's own account already linked to a different Slack user in the
same workspace. It threw the same string for both, so somebody
re-linking under a new Slack id was told their identity belonged to
another account -- a false claim about their own account, with no
action attached. The conflict now travels as a code, and the
confirmation page says the true one.
GET and POST on the link route did not send `Cache-Control: no-store`,
which every sibling route in the file does. The request URL carries the
token and the response is the identity claim decoded from it, so an
intermediary keying on that URL would hold a decoded claim beside the
credential that produced it.
The read-only Slack transcript had no rejection handler: a failed
`/messages` left the view on its restoring skeleton for as long as
somebody left it open, and rejected with nobody listening. The
`unreadable` counter it should have fed was unreachable -- the read is
all-or-nothing -- so it is a fact about the read now, and says the
conversation could not be read.
A Slack turn established its private execution context twice, and
protecting copied every time, so a turn had two executions: the run
wrote `agentId` to one and a computer tool reading the other would have
found none and refused. It only worked because someone else's agent
loop happens to invoke tool handlers after the run returns. Protecting
an already-protected execution now returns it unchanged, which holds
the invariant here rather than in a dependency, and there is a test for
it. The stable-threadId property the append-only binding rests on is
named at the binding site, because it is a property of managed delivery
rather than of Channels.
`@copilotkit/channels` was the umbrella package, so the Discord,
Telegram, Teams and WhatsApp adapters came with it to be used by
nothing. Narrowed to `channels-core` and `channels-ui`, with
`channels-slack` a devDependency for the one test that asserts rendered
Block Kit.
`waitForAssistance` was replaced by `waitForExactAssistance` and called
by nothing while keeping ninety lines of tests, and `pinnedFirst` was
superseded by `conversationRoster`. Both removed, and what their tests
uniquely covered -- the bounded wait expiring after the link is posted,
a turn cancelled mid-wait, and a title never moving a row -- is now
asserted on the paths that ship.
0 commit comments