gabriel / musehub public
feat patch mists task/issue-10-mist-crud-gaps #1 / 1
gabriel · 163 days ago · Apr 15, 2026 · Diff

feat(mists): issue #10 — update+forks+raw CLI, MCP list_forks+raw, REST raw endpoint, CLI test suite (57 tests)

sha256:4ab43e82df3ab283440f5156cbe6a5c4496a1ad914c944f48afaad7a93c4de9d sha
+102 ~3 symbols
sha256:f9df4c80184668eea40dc4566a6345ff558cd8c4a87e3b9e0181426ee78b41b2 snapshot
+102
symbols added
~3
symbols modified
0
dead code introduced
Semantic Changes 105 symbols
~ tests/test_mist_cli.py .py 97 symbols added
+ TestDbStateUpdate class class TestDbStateUpdate L294–348
+ test_update_content_updates_size_bytes method async_method test_update_content_updates_size_bytes L337–348
+ test_update_tags_replaced_atomically method async_method test_update_tags_replaced_atomically L322–334
+ test_update_title_persisted method async_method test_update_title_persisted L298–307
+ test_update_visibility_persisted method async_method test_update_visibility_persisted L310–319
+ TestDocstrings class class TestDocstrings L712–756
+ _assert_doc method method _assert_doc L715–718
+ test_content_type_helper_has_docstring method method test_content_type_helper_has_docstring L736–738
+ test_execute_list_mist_forks_has_docstring method method test_execute_list_mist_forks_has_docstring L740–741
+ test_execute_read_mist_raw_has_docstring method method test_execute_read_mist_raw_has_docstring L743–744
+ test_get_mist_raw_route_has_docstring method method test_get_mist_raw_route_has_docstring L732–734
+ test_muse_mist_list_forks_tool_has_description method method test_muse_mist_list_forks_tool_has_description L746–750
+ test_muse_mist_raw_tool_has_description method method test_muse_mist_raw_tool_has_description L752–756
+ test_run_forks_has_docstring method method test_run_forks_has_docstring L724–726
+ test_run_raw_has_docstring method method test_run_raw_has_docstring L728–730
+ test_run_update_has_docstring method method test_run_update_has_docstring L720–722
+ TestIntegrationForks class class TestIntegrationForks L453–481
+ test_forks_after_one_fork method async_method test_forks_after_one_fork L466–474
+ test_forks_empty_on_root method async_method test_forks_empty_on_root L457–463
+ test_forks_unknown_parent_returns_404 method async_method test_forks_unknown_parent_returns_404 L477–481
+ TestIntegrationRaw class class TestIntegrationRaw L484–502
+ test_raw_public_mist_returns_content method async_method test_raw_public_mist_returns_content L488–495
+ test_raw_unknown_mist_returns_404 method async_method test_raw_unknown_mist_returns_404 L498–502
+ TestIntegrationUpdate class class TestIntegrationUpdate L418–450
+ test_update_non_owner_returns_404 method async_method test_update_non_owner_returns_404 L442–450
+ test_update_title_roundtrip method async_method test_update_title_roundtrip L422–430
+ test_update_unknown_mist_returns_404 method async_method test_update_unknown_mist_returns_404 L433–439
+ TestPerformanceForkList class class TestPerformanceForkList L527–543
+ test_forks_10_under_500ms method async_method test_forks_10_under_500ms L531–543
+ TestPerformanceRaw class class TestPerformanceRaw L510–524
+ test_raw_1kb_under_200ms method async_method test_raw_1kb_under_200ms L514–524
+ TestSchemaForks class class TestSchemaForks L225–250
+ test_forks_entry_shape method async_method test_forks_entry_shape L239–250
+ test_forks_response_is_list method async_method test_forks_response_is_list L229–236
+ TestSchemaRaw class class TestSchemaRaw L253–286
+ test_raw_body_matches_stored_content method async_method test_raw_body_matches_stored_content L278–286
+ test_raw_content_disposition_contains_filename method async_method test_raw_content_disposition_contains_filename L257–265
+ test_raw_content_type_code_is_text_plain method async_method test_raw_content_type_code_is_text_plain L268–275
+ TestSchemaUpdate class class TestSchemaUpdate L166–222
+ test_update_content_increments_version method async_method test_update_content_increments_version L208–222
+ test_update_partial_body_only_changes_named_fields method async_method test_update_partial_body_only_changes_named_fields L185–205
+ test_update_response_contains_mist_id method async_method test_update_response_contains_mist_id L170–182
+ TestSecurityForks class class TestSecurityForks L605–626
+ test_forks_of_public_mist_visible_to_anonymous method async_method test_forks_of_public_mist_visible_to_anonymous L609–617
+ test_forks_of_secret_mist_non_owner_returns_403 method async_method test_forks_of_secret_mist_non_owner_returns_403 L620–626
+ TestSecurityMcpExecutors class class TestSecurityMcpExecutors L634–704
+ test_list_forks_missing_mist_id_returns_error method async_method test_list_forks_missing_mist_id_returns_error L638–643
+ test_list_forks_owner_can_list_secret_forks method async_method test_list_forks_owner_can_list_secret_forks L663–669
+ test_list_forks_secret_non_owner_returns_forbidden method async_method test_list_forks_secret_non_owner_returns_forbidden L654–660
+ test_list_forks_unknown_mist_returns_not_found method async_method test_list_forks_unknown_mist_returns_not_found L646–651
+ test_raw_missing_mist_id_returns_error method async_method test_raw_missing_mist_id_returns_error L672–677
+ test_raw_public_mist_anonymous_returns_content method async_method test_raw_public_mist_anonymous_returns_content L697–704
+ test_raw_secret_non_owner_returns_forbidden method async_method test_raw_secret_non_owner_returns_forbidden L688–694
+ test_raw_unknown_mist_returns_not_found method async_method test_raw_unknown_mist_returns_not_found L680–685
+ TestSecurityRaw class class TestSecurityRaw L575–602
+ test_raw_public_mist_no_auth_returns_200 method async_method test_raw_public_mist_no_auth_returns_200 L579–584
+ test_raw_secret_mist_non_owner_returns_403 method async_method test_raw_secret_mist_non_owner_returns_403 L587–593
+ test_raw_secret_mist_unauthenticated_returns_403 method async_method test_raw_secret_mist_unauthenticated_returns_403 L596–602
+ TestSecurityUpdate class class TestSecurityUpdate L551–572
+ test_update_non_owner_returns_404 method async_method test_update_non_owner_returns_404 L564–572
+ test_update_without_auth_returns_401 method async_method test_update_without_auth_returns_401 L555–561
+ TestStressForks class class TestStressForks L378–392
+ test_list_forks_15_children method async_method test_list_forks_15_children L382–392
+ TestStressRaw class class TestStressRaw L395–410
+ test_10_concurrent_raw_downloads method async_method test_10_concurrent_raw_downloads L399–410
+ TestStressUpdate class class TestStressUpdate L356–375
+ test_10_concurrent_updates_all_succeed method async_method test_10_concurrent_updates_all_succeed L360–375
+ TestUnitForks class class TestUnitForks L123–136
+ test_forks_limit_clamped_to_max_100 method method test_forks_limit_clamped_to_max_100 L126–130
+ test_forks_limit_clamped_to_min_1 method method test_forks_limit_clamped_to_min_1 L132–136
+ TestUnitRaw class class TestUnitRaw L139–158
+ test_raw_accepts_owner_slash_id_format method method test_raw_accepts_owner_slash_id_format L142–149
+ test_raw_plain_id_format_unchanged method method test_raw_plain_id_format_unchanged L151–158
+ TestUnitUpdate class class TestUnitUpdate L83–120
+ test_update_empty_tags_string_yields_empty_list method method test_update_empty_tags_string_yields_empty_list L92–96
+ test_update_payload_excludes_none_fields method method test_update_payload_excludes_none_fields L106–120
+ test_update_tags_splits_on_comma method method test_update_tags_splits_on_comma L86–90
+ test_update_valid_visibilities method method test_update_valid_visibilities L98–104
+ _OTHER variable variable _OTHER L42–42
+ _OWNER variable variable _OWNER L41–41
+ _create_mist function async_function _create_mist L54–68
+ _post_fork function async_function _post_fork L71–75
+ _unique_content function function _unique_content L49–51
+ AsyncClient import import AsyncClient L31–31
+ AsyncSession import import AsyncSession L32–32
+ JSONObject import import JSONObject L39–39
+ annotations import import annotations L21–21
+ asyncio import import asyncio L23–23
+ execute_create_mist import import execute_create_mist L34–34
+ execute_list_mist_forks import import execute_list_mist_forks L35–35
+ execute_read_mist_raw import import execute_read_mist_raw L35–35
+ inspect import import inspect L24–24
+ pathlib import import pathlib 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/api/routes/musehub/mists.py .py 3 symbols added
+ _ARTIFACT_CONTENT_TYPES variable variable _ARTIFACT_CONTENT_TYPES L521–529
+ _content_type_for_mist function function _content_type_for_mist L532–546
+ get_mist_raw function async_function get_mist_raw L555–623
~ musehub/mcp/dispatcher.py .py 1 symbol modified
+ execute_list_mist_forks function async_function execute_list_mist_forks L3684–3768
+ execute_read_mist_raw function async_function execute_read_mist_raw L3771–3843
← Older Oldest on task/issue-10-mist-crud-gaps
All commits
Newer → Latest on task/issue-10-mist-crud-gaps

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