Feat v0.5.2 chat surface
Chat surface package (packages/chat/) with conversation list, message thread, compose bar, participant sidebar, create conversation dialog, typing indicators, read receipts, message editing, and message deletion. Built on chat-core library with realtime event subscriptions. Fix stale token login deadlock: REST client auth endpoints excluded from 401 retry loop, 8s defensive boot timeout on auth.boot(). Fix bundled package permissions: auto-grant with NULL granted_by and set status active on install. Switch docker-compose to named volume for remote Docker host compat. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
20
ROADMAP.md
20
ROADMAP.md
@@ -358,19 +358,19 @@ participation is post-MVP.
|
||||
| Admin filter Dropdown | ✅ | Replaced button group with themed `Dropdown` primitive for type filter. Keyboard nav, consistent theming via CSS vars. |
|
||||
| Unicode security gate | ✅ | `ScanSource()` detects variation selectors, bidi overrides, zero-width chars, tag characters. `Verdict()` blocks GlassWorm payloads and Trojan Source (CVE-2021-42574). Two enforcement points: install (422) + Starlark exec. 23 new tests. |
|
||||
|
||||
### v0.5.2 — Chat Surface (planned)
|
||||
### v0.5.2 — Chat Surface
|
||||
|
||||
| Step | Status | Description |
|
||||
|------|--------|-------------|
|
||||
| Conversation list | | Sidebar: conversation list with last message preview, unread badge, timestamp. Create conversation button. |
|
||||
| Message thread | | Main pane: message history with participant avatars, timestamps, content. Virtual scroll for long threads. |
|
||||
| Compose bar | | Text input with Enter-to-send, Shift+Enter for newline. Markdown support via existing inline renderer. |
|
||||
| Participant sidebar | | Collapsible right panel: participant list with online status (via kernel presence hub). Add/remove participants using `sw.ui.Dialog`. |
|
||||
| 1:1 and group | | Direct messages (two participants) and group conversations. Type field on conversation. |
|
||||
| Typing indicators | | `realtime.publish("conversation:{id}", "typing", {participant_id})` on keypress with debounce. Surface shows "X is typing…" with auto-expire. |
|
||||
| Read receipts | | Mark-read on scroll/focus via `chat.mark_read()`. Unread count in conversation list. |
|
||||
| Message editing | | Edit own messages. `edited_at` timestamp displayed. Edit via `PUT /messages/:id`. |
|
||||
| Message deletion | | Soft-delete own messages. Replaced with "message deleted" placeholder. |
|
||||
| Conversation list | done | Sidebar: conversation list with last message preview, unread badge, timestamp. Create conversation button. |
|
||||
| Message thread | done | Main pane: message history with participant avatars, timestamps, content. Scroll-to-load-more for long threads. |
|
||||
| Compose bar | done | Text input with Enter-to-send, Shift+Enter for newline. Auto-resize textarea. |
|
||||
| Participant sidebar | done | Collapsible right panel: participant list with online status (via kernel presence hub). Add/remove participants using `sw.ui.Dialog`. |
|
||||
| 1:1 and group | done | Direct messages (two participants) and group conversations. Type field on conversation. |
|
||||
| Typing indicators | done | `realtime.publish("conversation:{id}", "typing", {participant_id})` on keypress with debounce. Surface shows "X is typing…" with auto-expire. |
|
||||
| Read receipts | done | Mark-read on scroll/focus via `chat.mark_read()`. Unread count in conversation list. |
|
||||
| Message editing | done | Edit own messages. `edited_at` timestamp displayed. Edit via `PUT /messages/:id`. |
|
||||
| Message deletion | done | Soft-delete own messages. Replaced with "message deleted" placeholder. |
|
||||
|
||||
### v0.5.3 — Chat Polish + Integration Testing (planned)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user