gabriel / musehub public
feat patch task/crud-gap-fill-mcp-executor #1 / 1
gabriel · 163 days ago · Apr 15, 2026 · Diff

feat: CRUD gap-fill — MCP executor + dispatcher + tools

- musehub_mcp_executor.py: 9 new executor functions (execute_list_issue_comments, execute_update_release, execute_list_release_assets, execute_read_user_profile, execute_update_user_profile, execute_list_topics, execute_set_repo_topics, execute_list_webhook_deliveries, execute_redeliver_webhook) - dispatcher.py: route all 9 new tools - musehub.py: add 9 new MCP tool definitions - tests/test_mcp_new_executor_tools.py: 8-tier test suite (70+ tests)

sha256:5f8bb9292dc6471c374802fb71b07eb84e8c71237c0ecd1f2cb41c73b20ef427 sha
+89 ~2 symbols
sha256:e7ecbbaa7dd33c6e029f5ba4e2209e515f8c7456a8d80af14f677cd464e4978d snapshot
+89
symbols added
~2
symbols modified
0
dead code introduced
Semantic Changes 91 symbols
~ tests/test_mcp_new_executor_tools.py .py 80 symbols added
+ TestDataIntegrity class class TestDataIntegrity L578–655
+ test_list_issue_comments_pagination_cursor method async_method test_list_issue_comments_pagination_cursor L631–655
+ test_set_repo_topics_persists method async_method test_set_repo_topics_persists L616–629
+ test_update_release_persists method async_method test_update_release_persists L581–599
+ test_update_user_profile_persists method async_method test_update_user_profile_persists L601–614
+ TestDocstrings class class TestDocstrings L778–806
+ test_docstring_mentions_args method method test_docstring_mentions_args L801–806
+ test_has_docstring method method test_has_docstring L794–798
+ TestE2E class class TestE2E L488–529
+ test_list_issue_comments_returns_ok_shape method async_method test_list_issue_comments_returns_ok_shape L491–503
+ test_list_topics_returns_ok_shape method async_method test_list_topics_returns_ok_shape L521–529
+ test_read_user_profile_returns_ok_shape method async_method test_read_user_profile_returns_ok_shape L505–519
+ TestIntegration class class TestIntegration L253–481
+ test_list_issue_comments_empty method async_method test_list_issue_comments_empty L288–299
+ test_list_issue_comments_happy method async_method test_list_issue_comments_happy L256–275
+ test_list_issue_comments_issue_not_found method async_method test_list_issue_comments_issue_not_found L277–286
+ test_list_release_assets_empty method async_method test_list_release_assets_empty L326–337
+ test_list_release_assets_not_found method async_method test_list_release_assets_not_found L339–348
+ test_list_topics_aggregates method async_method test_list_topics_aggregates L404–423
+ test_list_topics_empty method async_method test_list_topics_empty L397–402
+ test_list_topics_with_query_filter method async_method test_list_topics_with_query_filter L425–436
+ test_list_webhook_deliveries_happy method async_method test_list_webhook_deliveries_happy L458–472
+ test_list_webhook_deliveries_repo_not_found method async_method test_list_webhook_deliveries_repo_not_found L474–481
+ test_read_user_profile_happy method async_method test_read_user_profile_happy L350–361
+ test_read_user_profile_not_found method async_method test_read_user_profile_not_found L363–370
+ test_set_repo_topics_happy method async_method test_set_repo_topics_happy L438–447
+ test_set_repo_topics_not_found method async_method test_set_repo_topics_not_found L449–456
+ test_update_release_happy method async_method test_update_release_happy L301–313
+ test_update_release_not_found method async_method test_update_release_not_found L315–324
+ test_update_user_profile_happy method async_method test_update_user_profile_happy L372–384
+ test_update_user_profile_not_found method async_method test_update_user_profile_not_found L386–395
+ TestPerformance class class TestPerformance L720–772
+ test_list_issue_comments_under_300ms method async_method test_list_issue_comments_under_300ms L723–743
+ test_list_topics_under_300ms method async_method test_list_topics_under_300ms L745–758
+ test_read_user_profile_under_200ms method async_method test_read_user_profile_under_200ms L760–772
+ TestSecurity class class TestSecurity L662–713
+ test_list_issue_comments_wrong_repo method async_method test_list_issue_comments_wrong_repo L692–704
+ test_set_repo_topics_unknown_repo_rejected method async_method test_set_repo_topics_unknown_repo_rejected L706–713
+ test_update_user_profile_actor_mismatch method async_method test_update_user_profile_actor_mismatch L665–676
+ test_update_user_profile_empty_actor_allowed method async_method test_update_user_profile_empty_actor_allowed L678–690
+ TestStress class class TestStress L536–571
+ test_list_issue_comments_50_comments method async_method test_list_issue_comments_50_comments L539–557
+ test_list_topics_20_repos method async_method test_list_topics_20_repos L559–571
+ TestUnit class class TestUnit L197–246
+ test_execute_list_issue_comments_is_async method method test_execute_list_issue_comments_is_async L200–202
+ test_execute_list_release_assets_is_async method method test_execute_list_release_assets_is_async L207–208
+ test_execute_list_topics_is_async method method test_execute_list_topics_is_async L216–217
+ test_execute_list_webhook_deliveries_is_async method method test_execute_list_webhook_deliveries_is_async L222–223
+ test_execute_read_user_profile_is_async method method test_execute_read_user_profile_is_async L210–211
+ test_execute_redeliver_webhook_is_async method method test_execute_redeliver_webhook_is_async L225–226
+ test_execute_set_repo_topics_is_async method method test_execute_set_repo_topics_is_async L219–220
+ test_execute_update_release_is_async method method test_execute_update_release_is_async L204–205
+ test_execute_update_user_profile_is_async method method test_execute_update_user_profile_is_async L213–214
+ test_update_user_profile_forbidden_when_actor_mismatch method method test_update_user_profile_forbidden_when_actor_mismatch L228–246
+ _make_delivery function async_function _make_delivery L170–191
+ _make_identity function async_function _make_identity L85–103
+ _make_issue function async_function _make_issue L106–125
+ _make_release function async_function _make_release L128–148
+ _make_repo function async_function _make_repo L63–82
+ _make_webhook function async_function _make_webhook L151–167
+ _slug function function _slug L59–60
+ _uid function function _uid L55–56
+ anyio_backend function function anyio_backend L51–52
+ AsyncSession import import AsyncSession L31–31
+ annotations import import annotations L23–23
+ db import import db L33–33
+ execute_list_issue_comments import import execute_list_issue_comments L34–34
+ execute_list_release_assets import import execute_list_release_assets L34–34
+ execute_list_topics import import execute_list_topics L34–34
+ execute_list_webhook_deliveries import import execute_list_webhook_deliveries L34–34
+ execute_read_user_profile import import execute_read_user_profile L34–34
+ execute_redeliver_webhook import import execute_redeliver_webhook L34–34
+ execute_set_repo_topics import import execute_set_repo_topics L34–34
+ execute_update_release import import execute_update_release L34–34
+ execute_update_user_profile import import execute_update_user_profile L34–34
+ inspect import import inspect L25–25
+ pytest import import pytest L29–29
+ pytest_asyncio import import pytest_asyncio L30–30
+ time import import time L26–26
+ uuid import import uuid L27–27
~ musehub/mcp/dispatcher.py .py 1 symbol modified
+ execute_list_issue_comments function async_function execute_list_issue_comments L2931–2991
+ execute_list_release_assets function async_function execute_list_release_assets L3071–3130
+ execute_list_topics function async_function execute_list_topics L3244–3290
+ execute_list_webhook_deliveries function async_function execute_list_webhook_deliveries L3337–3390
+ execute_read_user_profile function async_function execute_read_user_profile L3136–3172
+ execute_redeliver_webhook function async_function execute_redeliver_webhook L3393–3450
+ execute_set_repo_topics function async_function execute_set_repo_topics L3293–3331
+ execute_update_release function async_function execute_update_release L2997–3068
+ execute_update_user_profile function async_function execute_update_user_profile L3175–3238
← Older Oldest on task/crud-gap-fill-mcp-executor
All commits
Newer → Latest on task/crud-gap-fill-mcp-executor

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