storkit: create 438_story_slash_command_autocomplete_in_web_ui_text_input

This commit is contained in:
dave
2026-03-28 16:24:44 +00:00
parent 2650b1a42e
commit 209e01bc06
2 changed files with 23 additions and 26 deletions
@@ -1,26 +0,0 @@
---
name: "strip_prefix_ci panics on multi-byte UTF-8 input"
---
# Bug 437: strip_prefix_ci panics on multi-byte UTF-8 input
## Description
The `strip_prefix_ci` function in `server/src/chat/transport/matrix/assign.rs` slices the input string at `prefix.len()` bytes without checking that the offset is a valid UTF-8 char boundary. When the input message starts with multi-byte characters (e.g. `⏺` which is 3 bytes), the slice can land mid-character, causing a panic.
## How to Reproduce
Send a Matrix message to the bot that starts with a multi-byte UTF-8 character (e.g. `⏺ storkit - wizard_confirm`) where the bot name byte length falls inside a multi-byte character.
## Actual Result
Thread panics: `byte index 6 is not a char boundary; it is inside '⏺' (bytes 4..7)`
## Expected Result
The function should return `None` (no match) without panicking, since an ASCII bot name cannot match a slice containing multi-byte characters.
## Acceptance Criteria
- [ ] strip_prefix_ci checks is_char_boundary before slicing
- [ ] No panic when input contains multi-byte UTF-8 characters at the prefix boundary
@@ -0,0 +1,23 @@
---
name: "Slash command autocomplete in web UI text input"
---
# Story 438: Slash command autocomplete in web UI text input
## User Story
As a user, I want to type `/` at the start of the text box and see a filtered list of available slash commands, so that I can discover and quickly invoke commands without memorizing them.
## Acceptance Criteria
- [ ] Typing `/` at position 0 in the ChatInput textarea shows a command picker overlay above the input
- [ ] The overlay lists all slash commands with name and description
- [ ] Typing further characters after `/` fuzzy-filters the list
- [ ] Arrow keys navigate the list, Tab/Enter selects, Escape dismisses
- [ ] Selecting a command inserts `/<command> ` into the input (with trailing space)
- [ ] Command list is a single shared source of truth used by both the picker and HelpOverlay
- [ ] The overlay follows the same visual style as the existing file picker (@-mention overlay)
## Out of Scope
- TBD