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
Copy file name to clipboardExpand all lines: ARCHITECTURE.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -70,7 +70,7 @@ The client is a standalone terminal user interface built with the Bubble Tea fra
70
70
- URL detection and external opening
71
71
- Tab completion for @mentions
72
72
- Connection status indicator
73
-
- Unread message count
73
+
- Unread count in the footer: increments only for other users' new `text`, `dm`, or `file` lines while the transcript viewport is scrolled up (not for typing, reactions, read receipts, edits, deletes, or your own echoed sends)
74
74
- Optional debounced `read_receipt` to the server when the viewport follows the newest messages; failures surface in the banner only
75
75
- Footer shows `E2E` when encryption is on, and `#channel` when the current room is not `general`; plaintext sessions omit an explicit `Unencrypted` label in the footer
76
76
- Automatic WebSocket reconnect with exponential backoff (capped); on each successful connect (`wsConnected`), the reference client clears the in-memory transcript and related UI state before processing server history replay, so a server restart or network drop does not duplicate messages that were already on screen
@@ -104,7 +104,7 @@ The server is a standalone HTTP/WebSocket server application that provides real-
104
104
- System metrics collection and health monitoring
105
105
- Web-based admin panel with CSRF protection
106
106
- Health check endpoints for monitoring systems
107
-
- WebSocket message rate limiting
107
+
- WebSocket per-connection message rate limiting; when the configured burst is exceeded the server sends one `System``text` notice to that client, then ignores inbound JSON until cooldown (see **PROTOCOL.md**)
108
108
-**Diagnostics**: `-doctor` and `-doctor-json` without binding ports (`internal/doctor`)
Copy file name to clipboardExpand all lines: PROTOCOL.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -198,7 +198,7 @@ Per WebSocket connection, the server enforces rate limiting on **all** incoming
198
198
-**Burst:** at most **20 messages** per **5 second** sliding window.
199
199
-**Cooldown:** if the limit is exceeded, further incoming messages from that connection are ignored until **10 seconds** have elapsed since the violation, then counting resumes.
200
200
201
-
Exceeded messages are dropped silently from the client’s perspective (the server logs the event). Alternative clients should pace high-frequency traffic accordingly.
201
+
When the burst threshold is crossed, the server sends one `System``text` notice to that connection, then ignores further incoming JSON until the cooldown elapses (the server still logs drops). Messages received during the cooldown window are dropped without an extra notice. Alternative clients should pace high-frequency traffic accordingly.
Copy file name to clipboardExpand all lines: README.md
+3-2Lines changed: 3 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -87,7 +87,7 @@ Screen recordings of a current build (GIF autoplay depends on the viewer).
87
87
-**Docker Support** - Containerized deployment with `docker-compose.yml` for local dev; optional **TLS reverse proxy** via Caddy ([guide](deploy/CADDY-REVERSE-PROXY.md))
88
88
-**Health Monitoring** - `/health` and `/health/simple` endpoints with system metrics
89
89
-**Structured Logging** - JSON logs with component separation and user tracking
90
-
-**UX Enhancements** - Stable status footer (connection, unread, optional E2E and channel), banner for command feedback, tab completion for @mentions, multi-line input, chat export
90
+
-**UX Enhancements** - Stable status footer (connection, unread for others' new chat lines when scrolled above the tail, optional E2E and channel), banner for command feedback, tab completion for @mentions, multi-line input, chat export
91
91
-**Cross-Platform** - Runs on Linux, macOS, Windows, and Android/Termux
92
92
-**Diagnostics** - `marchat-client -doctor` and `marchat-server -doctor` (or `-doctor-json`) summarize environment, resolved paths, and configuration health
93
93
@@ -766,7 +766,8 @@ The TUI client can spawn **optional** external programs on send/receive and pass
766
766
| SQL syntax error after backend switch | Ensure tables were created by the current server version and restart after changing `MARCHAT_DB_PATH`. |
767
767
| Message history looks incomplete | History depends on **channel**, **per-user message state**, and server filters. **Ban/unban** and related flows can reset stored state so scrollback differs from the raw DB. |
768
768
| Transcript resets after reconnect | On each successful WebSocket connect the reference client clears local messages and rebuilds from the server handshake replay (up to 50 recent lines). That avoids duplicates when the server comes back while the client stayed open. Lines older than that replay window are not shown again in that session unless you saved them with **`:export`** earlier. Third-party clients should replace or dedupe history on handshake; see **PROTOCOL.md** (Server Behavior). |
769
-
| Banner stuck on `[Sending...]` after a bogus `:` command | Use a current **client**: it clears the sending state after a successful server-command write. Use a current **server** if you want a `System` line for unknown admin commands (`Unknown command:` plus the token). Older servers sent nothing for that case for admins. |
769
+
| Banner stuck on `[Sending...]`| Current **client** clears sending after each successful WebSocket write for normal chat and for `admin_command`, so dropped or slow server work does not leave the banner stuck. Current **server** sends a `System` line for unknown admin `:` commands (`Unknown command:` plus the token) and one `System` line when per-connection message rate burst is exceeded (see **PROTOCOL.md** Rate Limiting). |
770
+
| Footer unread looks wrong | The reference client increments unread only for other users' new `text`, `dm`, or `file` while the transcript is not at the bottom. It does not increment for typing, reactions, read receipts, edits, deletes, or your own echoed sends. See **ARCHITECTURE.md** (client). |
770
771
| Ban history gaps not working | Set `MARCHAT_BAN_HISTORY_GAPS=true` (default off). The server creates the **`ban_history`** table when using a database backend that runs marchat migrations. |
771
772
| TLS certificate errors | For dev/self-signed certs, pass **`--skip-tls-verify`** on the client (or enable **Skip TLS verify** in the profile / interactive setup). |
772
773
| Plugin installation fails | Check registry URL (`MARCHAT_PLUGIN_REGISTRY_URL`), network access, and JSON validity; commercial plugins need a valid license for the **plugin name** (see **PLUGIN_ECOSYSTEM.md**). |
0 commit comments