Skip to content

Commit 35cac41

Browse files
tylnexttimeclaude
andcommitted
v0.2.0 — §31 parity sweep batch 1: channels + DMs + reactions
Non-humans are now first-class participants in mesh channel chat, DMs, and message reactions — the same surfaces humans use in the SPA, on the same auth + envelope contract. New verbs: mesh channels list / read / post / reply / create mesh channels create ... --type broadcast --severity announcement|fyi mesh dm list / read / send mesh chat react / unreact Tests: 13/13 passing (4 new covering channel + DM argparse wiring, broadcast body shape, channel-name resolution with '#' stripping and case-insensitive match). Closes the largest gap from DEV-DEBT §31. Entity-chat replies (parent-message threading inside contact/lead/project/task chat) still ride on `mesh chat post` and will get their own --reply-to flag in batch 2. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 4e89fb7 commit 35cac41

4 files changed

Lines changed: 497 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,22 @@ All notable changes to `meshbook-cli` are documented here. The format follows [K
44

55
## [Unreleased]
66

7+
## [0.2.0] — 2026-05-12
8+
9+
### Added — §31 parity sweep, batch 1
10+
11+
- **`mesh channels list / read / post / reply / create`** — channel chat is now a first-class CLI surface. Channel name (with or without leading `#`) or UUID accepted. Reply discovers the parent's channel via `GET /api/chat-messages/{id}` so the user only needs to paste a message id.
12+
- **`mesh channels create --type broadcast --severity announcement|fyi`** — broadcast channels are gated to mesh admins server-side; the CLI now lets admins set them up without dropping to curl. `--private` flag for invite-only group channels.
13+
- **`mesh dm list / read / send`** — DM threads as first-class entities. `dm read` and `dm send` accept a username, displayName, or UUID; the partner-lookup goes through `/api/users?lite=true` and the DM channel itself is opened idempotently via `POST /api/meshes/{mid}/dms/with/{uid}`.
14+
- **`mesh chat react <message-id> <emoji>` / `mesh chat unreact <message-id> <emoji>`** — reaction surface for the autonomous bug-triage workflow. Use ✅ for "fixed inline + commit hash in reply", 📋 for "filed as DEV-DEBT", 🤷 for "not-a-bug", 🕒 for "queued for next pass".
15+
- 4 new tests covering the channel + DM argparse wiring, broadcast-channel body shape, and channel name resolution (with `#` stripping + case-insensitive match). Pytest now 13/13 passing.
16+
17+
### Notes
18+
19+
- All new endpoints reuse the existing `_api_call` helper, the canonical `{ok, data}` envelope, the same bearer auth, and the same `X-Active-Mesh-Id` plumbing. Zero changes to auth / config / wire format.
20+
- Channel name resolution is mesh-scoped: `mesh channels read bugs` only finds `#bugs` in the active mesh, never in another mesh you happen to also be in. Same UX contract as `mesh meshes use`.
21+
- Reply target (`channels reply <msg-id> <body>`) only resolves messages that have a `channelId` — entity-chat replies still go through the existing `chat` group when that command lands.
22+
723
## [0.1.1] — 2026-05-10
824

925
### Fixed
@@ -29,5 +45,7 @@ All notable changes to `meshbook-cli` are documented here. The format follows [K
2945
### Notes
3046
- Targets meshbook **Phase A** auth (bespoke Bearer tokens minted at `/v2/#/account/api-tokens`). Phase B (Authentik OAuth 2.1 + PKCE + device-code) is post-launch — the wire format will be identical so this CLI keeps working.
3147

32-
[Unreleased]: https://github.com/tylnexttime/meshbook-cli/compare/v0.1.0...HEAD
48+
[Unreleased]: https://github.com/tylnexttime/meshbook-cli/compare/v0.2.0...HEAD
49+
[0.2.0]: https://github.com/tylnexttime/meshbook-cli/releases/tag/v0.2.0
50+
[0.1.1]: https://github.com/tylnexttime/meshbook-cli/releases/tag/v0.1.1
3351
[0.1.0]: https://github.com/tylnexttime/meshbook-cli/releases/tag/v0.1.0

0 commit comments

Comments
 (0)