nirc-rs/TODO.md

67 lines
4.6 KiB
Markdown
Executable File

# nirc-rs — TODO
Tracking open tasks for nirc-rs.
---
## Critical
_None at this time._
---
## High
- [ ] **Test Matrix protocol against a live server** — The Matrix implementation is complete (megolm E2EE, SQLite crypto store, room sync, member events, access token persistence) but has never been tested against matrix.org or any homeserver. This is the highest-priority untested protocol.
- [ ] **Test Discord protocol against a live server** — The Discord implementation uses Gateway WebSocket and REST API but has not been tested. Need to verify connection, event handling, and message send/receive.
- [ ] **Test remaining protocols** — Stout, Spacebar, Nerimity, and BitChat are all fully implemented but untested. Each needs a live server/peer to verify:
- [ ] Stout (Revolt-compatible fork)
- [ ] Spacebar (Revolt fork)
- [ ] Nerimity (custom platform)
- [ ] BitChat (P2P, libp2p, mDNS discovery)
---
## Medium
- [ ] **Transfer panel rendering in draw loop** — The transfer widget exists but is only visible when toggled via `/transfers`. Integrate it into the main draw loop so it can be shown as a persistent panel or split view alongside the chat view.
- [ ] **Console overlay key binding** — The Quake-style debug console overlay lost its key binding when F1 was reassigned to the dropdown menu. Assign a new key (e.g., `` Ctrl-` `` or F2) to toggle the console overlay.
- [ ] **ADC I4/U4 in BINF for incoming C-C** — When an incoming client-client (C-C) connection arrives in ADC, the BINF message needs to include the correct I4 (IPv4) and U4 (UDP4) fields. Currently may be incomplete for inbound connections.
- [ ] **IRC SASL EXTERNAL with client certificates** — Implement SASL EXTERNAL mechanism using TLS client certificates stored in the identity vault. This requires reading a PEM certificate and key from the vault and presenting them during the TLS handshake.
---
## Low
- [ ] **IRC monitor mode (+i invisible)** — Support for IRC's user mode `+i` (invisible) and potentially a monitor/watch list feature for tracking online status of specific users.
- [ ] **DCC file transfers for IRC** — Implement DCC SEND/ACCEPT for direct client-to-client file transfers over IRC. This is separate from the yamux-multiplexed transfer system used by ADC.
- [ ] **Plugin API documentation** — Write comprehensive documentation for the `Plugin` trait, including how to build a `.so` plugin, the message types it receives, and how to register hooks.
- [ ] **Config file hot-reload** — Watch `~/.nirc/config.toml` for changes (via SIGHUP or filesystem notification) and reload without restarting. Must handle errors gracefully and not drop active connections.
- [ ] **Terminal title set/update** — Set `XTITLE` / `TerminalTitle` escape sequences to show the current window name, network, and unread count in the terminal emulator's title bar.
- [ ] **Scrollback persistence to disk** — Currently scrollback is in-memory only (per-tab, up to `max_scrollback` messages). Persist to disk and reload on startup so history survives restarts.
---
## Completed
- [x] **IRC CTCP VERSION auto-response** — Automatically replies to CTCP VERSION requests with the nirc-rs version string.
- [x] **UTF-8 safe backspace** — Backspace correctly handles multi-byte UTF-8 characters (e.g., emoji, accented characters) without corrupting the input buffer.
- [x] **Debug log pollution fix** — Reduced default log level to `warn`; diagnostic output now only appears at `info`/`debug`/`trace` levels.
- [x] **F1 dropdown menu** — QBasic 4.5 / aptitude-style menu bar with arrow-key navigation and command dispatch.
- [x] **Ctrl-P / Ctrl-A / Ctrl-Z keybindings** — Previous buffer, next active buffer, highlight cycle.
- [x] **Transfer ticker footer** — Real-time transfer speed and ETA displayed in the status bar footer.
- [x] **`/nick` UI update** — Nickname changes now immediately update all tab titles and status bar displays.
- [x] **ADC handshake fix** — Corrected HSUP/HSID/INF handshake sequence for reliable hub connections.
- [x] **ADC CID generation** — Now spec-compliant: `Base32(SHA-256(SID)[..24])` → 39-character CID per ADC specification. The old `NIRC{SID}` placeholder is gone. Locked in by 4 unit tests (`cid_is_39_chars_and_base32`, `cid_is_deterministic`, `cid_differs_for_different_sids`, `base32_encode_no_padding`). BINF version string now sourced from `CARGO_PKG_VERSION` instead of being hardcoded.
- [x] **Local IP footer** — Status bar shows local network IP address.
- [x] **Window list protocol badges** — Winlist sidebar shows per-protocol badges (IRC/Mtx/ADC/P2P/Dsc) with color coding.