Merge dev → main (#2)
* Add spacetime domain to README per Muse v2 doc (#1)
Co-authored-by: Gabriel Cardona <gabriel@tellurstori.com>
* Replace Maestro-coupled tests with new architecture test suite
Replace all legacy tests (which imported SQLAlchemy/maestro and could not collect) with 99 passing tests covering the new muse.core.* and muse.plugins.music.* architecture:
- tests/test_core_store.py — file-based commit/snapshot/tag CRUD - tests/test_core_snapshot.py — content-addressed hashing and diffing - tests/test_core_merge_engine.py — three-way merge and base-finding logic - tests/test_cli_workflow.py — end-to-end CLI: init, commit, log, status, branch, checkout, merge, diff, tag, stash - tests/test_music_plugin.py — MuseDomainPlugin reference impl
Also fixes two bugs discovered by tests: - branch listing now recurses into subdirs so feature/foo branches appear - music plugin merge no longer treats both-sides-deletion as a conflict
* Remove all Maestro legacy code; clean mypy across full muse/ package
Deleted: - muse/plugins/music/services/ (35 files — all SQLAlchemy/Pydantic/maestro.*) - muse/cli/commands/emotion_diff.py (Maestro-coupled stub) - muse/cli/commands/groove_check.py (Maestro-coupled stub) - muse/cli/export_engine.py (httpx dependency) - muse/cli/hub_client.py (httpx dependency) - muse/cli/artifact_resolver.py (orphaned async SQLAlchemy helper)
Updated: - muse/cli/app.py — removed lazy-import blocks for deleted stubs - pyproject.toml — mypy exclude list now empty; added strict overrides for test files - muse/cli/commands/* — cast _read_repo_id to str; typed stash generics; fixed show.py name collision; fixed cherry_pick.py None guard on parent commit
Result: mypy muse/ passes clean (32 files, 0 errors) in ~3 s.
---------
Co-authored-by: Gabriel Cardona <gabriel@tellurstori.com>