chore(release): v0.6.0
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U6EixQo6hpoRCVtiAXdnFs
This commit is contained in:
parent
0b53d6c0d4
commit
95c24cd034
5 changed files with 56 additions and 5 deletions
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "repo-mailbox",
|
||||
"version": "0.5.0",
|
||||
"version": "0.6.0",
|
||||
"description": "Local mailbox for coordination between Claude Code sessions in different repositories. Directed messages and broadcasts as plain Markdown files on your own disk, injected as context at session start. Local, private, no network.",
|
||||
"author": {
|
||||
"name": "Kjell Tore Guttormsen"
|
||||
|
|
|
|||
51
CHANGELOG.md
51
CHANGELOG.md
|
|
@ -5,6 +5,57 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [0.6.0] - 2026-07-26
|
||||
|
||||
### Fixed
|
||||
|
||||
- **`_broadcast` is a reserved namespace, not a repo.** `coord-send` guarded
|
||||
retraction with a sender check, but that guard only covered the door it was
|
||||
nailed to: `coord-done --repo _broadcast <file>` archived a broadcast out of
|
||||
the queue — a full unauthenticated retract of an announcement for every repo
|
||||
that had not read it yet. The whole `_` prefix is now reserved, in every CLI,
|
||||
so a later `_seen` or `_config` cannot reopen the hole.
|
||||
- **Repo identity is derived, never invented.** The fallback to
|
||||
`basename(pwd)` is gone. It existed so the CLI would work anywhere, but
|
||||
"anywhere" includes every global surface: a session in `~/repos` is not a
|
||||
repo, and the fallback silently handed it the identity `repos` — under which
|
||||
real mail was delivered. git toplevel or an explicit `--from`/`--repo` are
|
||||
now the only sources. Write paths exit 2 and name the fix; the read path
|
||||
declines silently, because the hook runs at every session start and must
|
||||
never fail a session.
|
||||
- **Broadcast delivery is recorded only after the injection is written.**
|
||||
Marking inside the read loop left a window where the seen set said
|
||||
"delivered" while the operator saw nothing — and the hook runs under
|
||||
`timeout: 10`, so the window was reachable. A lost broadcast is
|
||||
unrecoverable by design (the seen set is delivery history, and retraction
|
||||
deliberately leaves it alone), so the failure mode is now redelivery.
|
||||
- **The hook no longer resolves identity at all.** It was a fourth independent
|
||||
copy of the identity rule and the only one that runs in production, so
|
||||
passing `--repo` bypassed the engine's guards exactly where they mattered —
|
||||
and suppressed the new collision check along with them.
|
||||
|
||||
### Added
|
||||
|
||||
- **Mailbox-collision warning.** Two checkouts with the same directory name
|
||||
share one mailbox. Re-keying identity would break every existing mailbox and
|
||||
the readable `--to <repo>` addressing, so the first git-derived read records
|
||||
the claiming path in `<repo>/.origin`, and a read from a different path is
|
||||
reported in the injection. A warning, not a refusal: the same repo moved or
|
||||
re-cloned is the ordinary case. It goes in the injection because the hook
|
||||
discards stderr, and a warning nobody can see is not a warning.
|
||||
|
||||
### Changed
|
||||
|
||||
- Selftest 93 → 116 checks; three Node tests now cover the hook behaviorally
|
||||
rather than by reading its source.
|
||||
|
||||
### Breaking
|
||||
|
||||
- `coord-send` and `coord-done` exit 2 outside a git repository instead of
|
||||
naming themselves after the working directory. Pass `--from`/`--repo` to
|
||||
choose an identity explicitly. Repo names beginning with `_` are refused
|
||||
everywhere.
|
||||
|
||||
## [0.5.0] - 2026-07-25
|
||||
|
||||
### Changed
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
*AI-generated: all code produced by Claude Code through dialog-driven development.*
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
|
@ -34,7 +34,7 @@ Mailbox layout (default `~/.claude/coord/`, override with `CLAUDE_COORD_DIR`):
|
|||
_broadcast/archive/ retracted broadcasts (kept, never deleted)
|
||||
_broadcast/seen/<repo> per-repo seen set: delivered broadcast filenames, one per line
|
||||
|
||||
Repo identity is the basename of the git toplevel, or an explicit `--from`/`--repo`. There is no third source: a directory that is not a git repo has no identity, so the write paths refuse and the read path stays silent. (The old fallback to the working-directory name was removed in 0.6.0 — on a global surface like `~/repos` it invented the identity `repo`-shaped names that belong to nobody, and signed real mail with them.) There is no registration — a repo joins the moment something is sent to it, or when it first reads a broadcast.
|
||||
Repo identity is the basename of the git toplevel, or an explicit `--from`/`--repo`. There is no third source: a directory that is not a git repo has no identity, so the write paths refuse and the read path stays silent. (The old fallback to the working-directory name was removed in 0.6.0: on a global surface like `~/repos` it silently invented the identity `repos` for a directory that is no repo at all, and signed real mail with it.) There is no registration — a repo joins the moment something is sent to it, or when it first reads a broadcast.
|
||||
|
||||
Because identity is a *basename*, two checkouts with the same directory name share one mailbox. The first git-derived read records the claiming path in `<repo>/.origin`, and a read from a different path is warned about in the injection. It is a warning rather than a refusal: the same repo moved or re-cloned is the ordinary case. Names beginning with `_` are reserved for engine internals (`_broadcast`) and are refused as repo identities everywhere.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "repo-mailbox",
|
||||
"version": "0.5.0",
|
||||
"version": "0.6.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"engines": {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ description: >-
|
|||
covers retiring a broadcast that has become wrong or obsolete: "retract that
|
||||
broadcast", "that announcement is outdated, pull it", "trekk tilbake kringkastingen",
|
||||
"den broadcasten er utdatert".
|
||||
version: "0.5.0"
|
||||
version: "0.6.0"
|
||||
---
|
||||
|
||||
# coord-send — natural-language front door for inter-repo messages
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue