chore(cli): 1.38.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,46 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 1.38.0 (2026-09-26) — messages reach the session they're meant for
|
||||||
|
|
||||||
|
Source: flexicar-orchestrator report (9 bugs on 1.37.0) + "peers spread
|
||||||
|
messages to the wrong peers". Spec:
|
||||||
|
`.artifacts/specs/2026-09-26-session-identity-and-routing.md`; E2E drill:
|
||||||
|
`.artifacts/test-runs/2026-09-26-session-routing-drill.md`. Includes 1.37.1.
|
||||||
|
|
||||||
|
### Wrong-peer noise (the root thread)
|
||||||
|
- Channel meta: `from_pubkey`/`from_id` are the sender's **session** key
|
||||||
|
(they carried the member key, so replies fanned out to every sibling
|
||||||
|
session); new `from_member_pubkey`. The skill now says reply to `from_pubkey`.
|
||||||
|
- One daemon resolver for every `/v1/send`: a member key maps to its only
|
||||||
|
live session, is refused with candidates when it has several, and needs
|
||||||
|
`--fanout` (expanded client-side to one DM per session). Duplicate names /
|
||||||
|
prefixes are ambiguous instead of first-match; control-plane rows are never
|
||||||
|
addressable.
|
||||||
|
- A session MCP without a resolved session no longer receives every sibling's
|
||||||
|
events; a broadcast now reaches each session exactly once.
|
||||||
|
- Broker logs member-key DMs from older clients (`member_target_dm`);
|
||||||
|
`CLAUDEMESH_MEMBER_DM_POLICY=reject` refuses them.
|
||||||
|
|
||||||
|
### Session identity (bug1, bug3)
|
||||||
|
- A resumed/restarted claude re-attaches itself (MCP startup, auto-heal in
|
||||||
|
`send`, new `claudemesh session reattach`) with its persisted key, anchored
|
||||||
|
on claude's pid. The token lives next to the keypair, not the launch tmpdir.
|
||||||
|
- `send` never goes out silently as the member from inside a session
|
||||||
|
(`--as-member` to do it on purpose); the daemon answers 401 `session_unknown`.
|
||||||
|
- Keys don't change behind a session's back: one id per launch, non-UUID ids
|
||||||
|
persisted, daemon reload is load-only, no 24 h registry TTL.
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
- bug2: undecryptable ciphertext is never injected into a session (dropped +
|
||||||
|
logged, or a placeholder for topic posts); drained pushes carry sender +
|
||||||
|
topic like live ones.
|
||||||
|
- bug4: outbox caps `session_ws_not_open` (from 1.37.1).
|
||||||
|
- bug5: `topic history` decrypts like `topic tail`.
|
||||||
|
- bug6: topic posts are labelled by the session that wrote them.
|
||||||
|
- bug7: a confirm-gated command without a TTY says why it stopped (`--yes`).
|
||||||
|
- bug8: the short id `send` prints resolves in `message status`.
|
||||||
|
- bug9: DMs to control-plane rows say so; `peer list --all` tags them.
|
||||||
|
|
||||||
## 1.37.1 (2026-09-08) — daemon restart no longer blacks out the mesh
|
## 1.37.1 (2026-09-08) — daemon restart no longer blacks out the mesh
|
||||||
|
|
||||||
Incident: after the local daemon restarted (launchd respawn), `peer list`
|
Incident: after the local daemon restarted (launchd respawn), `peer list`
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "claudemesh-cli",
|
"name": "claudemesh-cli",
|
||||||
"version": "1.37.1",
|
"version": "1.38.0",
|
||||||
"description": "Peer mesh for Claude Code sessions — CLI + MCP server.",
|
"description": "Peer mesh for Claude Code sessions — CLI + MCP server.",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"claude-code",
|
"claude-code",
|
||||||
|
|||||||
Reference in New Issue
Block a user