fix(api+cli): topic post messageId is the durable historyId (v1.9.2)
Some checks failed
CI / Lint (push) Has been cancelled
CI / Typecheck (push) Has been cancelled
CI / Broker tests (Postgres) (push) Has been cancelled
CI / Docker build (linux/amd64) (push) Has been cancelled

Previously POST /v1/messages returned the message_queue row id as
`messageId`. Topic posts ARE durable (in topic_message); the queue
entry drains on delivery. Pasting that id into `--reply-to` failed
because the broker validates parents against topic_message, not the
queue. Now `messageId` aliases `historyId` for topic posts; both
`historyId` and `queueId` remain available as explicit fields.

Roadmap and CLI README updated with v0.3.1 reply-to + v0.3.2
multi-session entries.
This commit is contained in:
Alejandro Gutiérrez
2026-05-02 22:10:13 +01:00
parent 716e674473
commit 8697c1c032
4 changed files with 33 additions and 3 deletions

View File

@@ -223,6 +223,28 @@ level, or wire claudemesh to messaging surfaces beyond Claude Code.
web chat encrypt-on-send / decrypt-on-render. Web stays on v1
plaintext until this lands; the existing CLI re-seal loop will pick
up web members the moment they have a real pubkey.
- **v0.3.1 — topic message threading (reply-to)** — `topic_message`
gains a self-FK `reply_to_id` column (migration 0027); REST `POST
/v1/messages` and the WS `send` envelope accept `replyToId`; broker
validates same-topic membership. CLI: `topic post --reply-to <id>`
(full id or 8+ char prefix), `topic tail` renders `↳ in reply to
<name>: "<snippet>"` above replies and emits `#xxxxxxxx` short ids
per row for copy-paste. WS push envelope + MCP `<channel>` channel
attributes now carry `senderMemberId`, `senderName`, `topic`,
`message_id`, `reply_to_id` so the recipient has everything needed
to thread a reply without a follow-up query. *Shipped 2026-05-02 in
CLI v1.9.0.*
- **v0.3.2 — multi-session DM routing + broadcast self-loopback** —
fixes two production bugs: (1) replies via `claudemesh send
<from_id>` rejected with "no connected peer" when the sender's
session had rotated — `from_id` now exposes the *member* pubkey
(stable) and the broker pre-flight resolves stale session pubkeys
to the owning member's live session; (2) broadcast / `*` /
`@group` looped back to the sender's sibling sessions, surfacing a
spurious decrypt-fail warning — fan-out now skips by member
pubkey, not just per-presence. Push envelope adds
`senderMemberPubkey` alongside `senderPubkey`. *Shipped 2026-05-02
in CLI v1.9.1.*
- **Self-hosted broker packaging** — one-command Docker compose,
Postgres included. The new migration runner (v1.6.x) makes this
practical.