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
0 comments
muse hub commit comment sha256:e64ee25d42e3cdf9d087cb7c2784d9b07e607d5a043056aa1894ca9daad9a1a1 --body "your comment"
No comments yet. Be the first to start the discussion.