1
0
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:
2026-07-21 14:00:59 -05:00
parent d920f8821f
commit b3bc5272d5
35 changed files with 304 additions and 144 deletions
+10 -7
View File
@@ -186,13 +186,16 @@ fresh vaults on fresh machines for new users, so no ECHO back-compat: legacy
`_agent/echo-vault.md` markers are all ignored. Shims briefly existed and were
removed.)*
### Phase 2 — Identity plumbing (12 days)
`member` in config (+ `CHORUS_MEMBER`, baked-tier support, `config set --member`),
`MEMBER` global in `chorus.py`, `author:` stamping in `_build_note`, canonical
frontmatter + `KIND_REQUIRED_FM` + lint + sweep backfill, member-aware lock
owner and queue entries, `doctor` reports resolved member. Vault layout
untouched. **Deliverable:** every new write is attributed; single-user behavior
otherwise identical.
### Phase 2 — Identity plumbing (12 days) — DONE
`member` in config (+ `CHORUS_MEMBER`, baked-tier support, `config set --member`
with slug validation; `owner``group`; member REQUIRED for is_configured),
`MEMBER` global in `chorus.py`, `author:` stamping in `_build_note` + bootstrap
`{{MEMBER}}` anchor stamping + templates, canonical frontmatter docs + a
`missing-author` lint check (agent_written notes must carry `author:`; sweep
does NOT backfill — attribution can't be guessed), member-aware lock owner
(`<member>-<client>-<pid>`) and queue records, `doctor` reports member/group.
Vault layout untouched. **Deliverable:** every new write is attributed;
single-user behavior otherwise identical.
### Phase 3 — Per-member namespacing (35 days — the core)
Schema 5. New `LEAVES` + seeds (`members/<id>/…`, `group-profile.md`),