gabriel / musehub public
feat BREAKING task/identity-repo-phase4 #1 / 1
AI Agent gabriel · 48 days ago · May 1, 2026 · Diff

feat: Phase 4 — org creation, member_of relationships, hub routes

- Extend commit_files_to_repo() with delete_paths: reads HEAD manifest, removes the named paths, then merges the result with new files before committing. Used by remove_org_member to tombstone membership files.

- Add musehub/services/musehub_orgs.py: create_org() — creates org MusehubIdentity + identity repo (type='org', pubkey=None, quorum=N) add_org_member() — commits member_of RelationshipRecord to org repo remove_org_member() — commits deletion of membership file from org repo list_org_members() — reads member_of edges from identity repo HEAD

- Add musehub/api/routes/api/orgs.py: POST /api/orgs — create org (201) POST /api/orgs/{org}/members/{handle} — add member (201) GET /api/orgs/{org}/members — list members (200) DELETE /api/orgs/{org}/members/{handle} — remove member (204)

- Register api_orgs_router in main.py before the wildcard musehub router.

- Add tests/test_identity_repo_phase4.py: 20 TDD regression tests covering org creation (handle, type, repo, record, 409, 401), add member (201, relationship committed, record content, 404, 401), list members (empty, populated, 404), remove member (204, absent from list, absent from repo, 404 for nonexistent, 401). All 20 GREEN (47/47 across all four phases).

Closes #19 Phase 4

sha256:e64ee25d42e3cdf9d087cb7c2784d9b07e607d5a043056aa1894ca9daad9a1a1 sha
sha256:6a4062ea2c4b5016721488a8c5cea194f772d368590c76f5b45c1c0b2c1c4746 snapshot
← Older Oldest on task/identity-repo-phase4
All commits
Newer → Latest on task/identity-repo-phase4

0 comments

No comments yet. Be the first to start the discussion.

To add a comment, use the Muse CLI: muse hub commit comment sha256:e64ee25d42e3cdf9d087cb7c2784d9b07e607d5a043056aa1894ca9daad9a1a1 --body "your comment"