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:
+10
-7
@@ -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 (1–2 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 (1–2 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 (3–5 days — the core)
|
||||
Schema 5. New `LEAVES` + seeds (`members/<id>/…`, `group-profile.md`),
|
||||
|
||||
Reference in New Issue
Block a user