From de54265c3593afda2412417f2ce0195a81c4674a Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 26 Mar 2026 20:05:40 +0000 Subject: [PATCH] storkit: create 404_bug_whatsapp_and_slack_missing_assign_command_handler --- ...g_whatsapp_and_slack_missing_assign_command_handler.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.storkit/work/1_backlog/404_bug_whatsapp_and_slack_missing_assign_command_handler.md b/.storkit/work/1_backlog/404_bug_whatsapp_and_slack_missing_assign_command_handler.md index 5f029a35..d4f65d41 100644 --- a/.storkit/work/1_backlog/404_bug_whatsapp_and_slack_missing_assign_command_handler.md +++ b/.storkit/work/1_backlog/404_bug_whatsapp_and_slack_missing_assign_command_handler.md @@ -10,7 +10,13 @@ The assign command has a fallback handler in chat/commands/mod.rs that returns N ## Implementation Note -The fix must be in the shared command dispatch layer (chat/commands/mod.rs), NOT by adding transport-specific handlers. Study how commands like "rebuild" and "status" already work through the shared dispatch — the assign handler should return a concrete result from try_handle_command so all transports get it for free. We do not want separate mechanisms per transport per command. +Follow the **rebuild pattern** established in story 402. + +- `extract_assign_command` and `handle_assign` already exist in `server/src/chat/transport/matrix/assign.rs` +- Add an async intercept in `server/src/chat/transport/whatsapp.rs` (see rebuild intercept ~line 1107) and `server/src/chat/transport/slack.rs` (see rebuild intercept ~line 845) +- Call `crate::chat::transport::matrix::assign::extract_assign_command` to detect the command, then `crate::chat::transport::matrix::assign::handle_assign` to execute it +- The fallback handler in `chat/commands/mod.rs` (`handle_assign_fallback` — note: the registry entry for `assign` currently calls `assign::handle_assign` synchronously; verify this doesn't conflict) stays as-is for `help` listing +- The fallback in `chat/commands/assign.rs` may need to return `None` instead of a real response once the async path handles it ## How to Reproduce