forked from jason/echo
Phase 2: identity plumbing — group/member config, author: attribution
Config schema {owner,endpoint,key} -> {group, member, endpoint, key}:
- member (kebab-case slug, validated) is REQUIRED — who this machine
writes as; group is the descriptive team name. CHORUS_GROUP/
CHORUS_MEMBER env, config set --group/--member, doctor + config show
both with sources, NOT-CONFIGURED (78) without a valid member.
- capture stamps author: <member> on every note (_build_note); bootstrap
gains {{MEMBER}} substitution and stamps the seeded anchors; all 8
scaffold templates + canonical frontmatter docs gain author:.
- New missing-author lint check: agent_written notes must carry author:
(bootstrap marker exempt — plugin-owned).
- Lock owner is now <member>-<client>-<pid> (auto_owner); offline-queue
records carry a member field for audit.
- build.py --bake-key bakes group/member/endpoint/key (--group/--member;
member required + slug-validated) for per-member artifacts.
- Manifest -> 2.0.0-alpha.2; rebuilt chorus-memory.plugin.
Verified: 25/25 unit (+config/member checks), scaffold suite (+6 new
member/config assertions), routing-sync, 4 mock e2e (+capture-stamps-
author), run_eval metrics unchanged, +8 phase-2 smoke checks green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,35 @@
|
||||
# Changelog
|
||||
|
||||
## 2.0.0-alpha.2 — Phase 2 (identity plumbing)
|
||||
|
||||
Every write is now attributed to a member. Vault layout unchanged (that's Phase 3).
|
||||
|
||||
### Added
|
||||
- **Config schema is now `{group, member, endpoint, key}`** (was `{owner, endpoint,
|
||||
key}`). `member` is REQUIRED — a kebab-case slug (`^[a-z0-9][a-z0-9-]{0,31}$`)
|
||||
identifying who this machine writes as; `group` is the descriptive display name for
|
||||
the team sharing the vault. Env: `CHORUS_GROUP` / `CHORUS_MEMBER`. `config set`
|
||||
gains `--group`/`--member` (with slug validation); `config`/`doctor` report both
|
||||
with sources; an unconfigured member fails loud (`NOT CONFIGURED`, exit 78).
|
||||
- **`author:` frontmatter on every agent write.** `capture` (`_build_note`) stamps
|
||||
the configured member; bootstrap stamps seeded anchors via a new `{{MEMBER}}`
|
||||
substitution; all 8 scaffold templates gain an `author:` line; the canonical
|
||||
frontmatter block (vault-layout.md, SKILL.md) documents it.
|
||||
- **`missing-author` lint check** — `/chorus-health` flags any `agent_written: true`
|
||||
note without an `author:` (the plugin-owned bootstrap marker is exempt).
|
||||
- **Member-attributed concurrency**: the advisory-lock owner id is now
|
||||
`<member>-<client>-<pid>` (`auto_owner`), and offline-queue outbox records carry
|
||||
a `member` field for audit.
|
||||
- **Per-member baked builds**: `build.py --bake-key` now bakes group/member/endpoint/
|
||||
key (`--group`/`--member` flags; member required + slug-validated), so each
|
||||
delivered artifact knows who it writes as.
|
||||
|
||||
### Verified
|
||||
- All suites green (25/25 unit incl. new config/member-validation checks, scaffold,
|
||||
routing-sync, 4 mock e2e incl. a capture-stamps-author assertion, run_eval metrics
|
||||
unchanged) plus 8 end-to-end smoke checks (bootstrap stamping, lint flagging,
|
||||
doctor reporting, NOT-CONFIGURED without member, slug rejection).
|
||||
|
||||
## 2.0.0-alpha.1 — CHORUS fork, Phase 1 (mechanical rename)
|
||||
|
||||
CHORUS is a group-based fork of ECHO (`jason/echo`, v1.5.1, schema 4 — preserved at the
|
||||
|
||||
Reference in New Issue
Block a user