gabriel / musehub public
feat BREAKING feat/fork-repo #1 / 1
gabriel · 70 days ago · Apr 12, 2026 · Diff

feat: add fork-a-repo feature with full MCP tooling and test coverage

- MusehubFork ORM model (musehub_forks table) with unique(source_repo_id, forked_by) constraint - ForkRepoRequest Pydantic model for fork creation request body - fork_repo() service: validates public-only, no self-fork, no duplicate; creates fork repo + fork record - list_repo_forks_flat() service: flat UserForksResponse for GET /repos/{id}/forks - list_repo_forks() service: ForkNetworkResponse tree for GET /repos/{id}/fork-network - get_user_forks() service: all repos forked by a given identity handle - POST /api/repos/{repo_id}/fork — 201 on success, 403/404/409 on error, requires repo:write scope - GET /api/repos/{repo_id}/forks — public, returns flat fork list - GET /api/repos/{repo_id}/fork-network — public, returns fork tree - GET /api/users/{username}/forks — public, returns user's forked repos - 4 MCP tools: musehub_fork_repo, musehub_list_repo_forks, musehub_get_fork_network, musehub_get_user_forks - MCP dispatcher wiring for all 4 tools - 3 MCP executor functions (list_repo_forks, get_fork_network, get_user_forks) - 24 tests: happy paths, 5 error cases, empty states, public access, shape validation, multi-fork - type-contracts.md regenerated (301 types, 43 ORM models)

sha256:fcbd65cac80cb90481487b9e2e10aa002e210d6626fa649a9ba04c57e6ca05aa sha
sha256:f30c4142fb33315686d586917735be87e2cc5eaa34f5a5300c6b287b3b95e7b2 snapshot
← Older Oldest on feat/fork-repo
All commits
Newer → Latest on feat/fork-repo

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:fcbd65cac80cb90481487b9e2e10aa002e210d6626fa649a9ba04c57e6ca05aa --body "your comment"