gabriel / muse public
test dev-safety dev #1 / 100
AI Agent gabriel · 2 days ago · Sep 10, 2026 · Diff

test(dev-safety): Phase 2 of #185 — verify muse/muse-dev binary separation

Adds tests/test_binary_separation.py: verifies live machine state, not fixtures — Phase 2 is about fixing this developer's actual environment, so red means unfixed, green means fixed. Deliberately does not mutate ~/ecosystem/muse's source to prove "live-edit reflected" (that would touch the very canonical repo this ticket protects) — editable-install classification via which_muse.classify_muse_binary is sufficient proof.

Environment changes made alongside (not part of this repo, recorded here for provenance): - Removed /Users/gabriel/bin/muse (was an editable shim pointed at this checkout's own .venv — the exact ambiguity #185 Phase 1 found). - Removed /opt/homebrew/bin/muse (duplicate editable shim, same checkout, not brew-managed — confirmed via `brew list`). - Uninstalled the stale `muse` pip package from pyenv's global 3.14.4 site-packages (confirmed no Required-by, no .python-version pins anywhere depending on it) — its dangling shim self-removed on `pyenv rehash`. - Created ~/.local/share/muse-dev/venv (`pip install -e ~/ecosystem/muse`), symlinked to ~/.local/bin/muse-dev — the new explicit, editable entry point for live-source development. - Fixed ~/.zshrc PATH export ordering (~/.local/bin now wins over ~/bin — it was backwards, which is *why* the editable shim won by default).

Result: exactly two `muse`-named binaries reachable now, down from five. `muse` resolves to the installer-managed venv (stable, non-editable); `muse-dev` resolves to this live checkout (editable). All 7 new tests pass; all 8 Phase 1 tests still pass.

Known follow-up not addressed here: the installer-managed venv is on an older dev snapshot (0.2.0.dev1) than this checkout's current version (0.2.1) — refreshing it to the latest published release is a separate, optional concern from identity separation and left for a future pass.

sha256:aed089a7a47a05fb34e98fe7156e80cb34c92a9c63ee5f1b81e75aa989098fe5 sha
+16 symbols
1 changed · 1161 in snapshot files
sha256:79bcd81560f5178c3658663cca0ff1748fa63335b37764e54d64891f5c02fab4 snapshot
+16
symbols added
1
file changed
1161
files in snapshot
0
dead code introduced
Semantic Changes 16 symbols
~ tests/test_binary_separation.py .py 16 symbols added
+ HOME variable variable HOME L20–20
+ TestDevMuseResolution class class TestDevMuseResolution L62–74
+ test_muse_and_muse_dev_are_distinct_binaries method method test_muse_and_muse_dev_are_distinct_binaries L70–74
+ test_muse_dev_resolves_and_is_editable method method test_muse_dev_resolves_and_is_editable L63–68
+ TestRedundantResolutionsRemoved class class TestRedundantResolutionsRemoved L77–93
+ test_homebrew_muse_shim_is_gone method method test_homebrew_muse_shim_is_gone L78–83
+ test_pyenv_global_site_packages_no_longer_has_muse_installed method method test_pyenv_global_site_packages_no_longer_has_muse_installed L85–93
+ TestStableMuseResolution class class TestStableMuseResolution L38–59
+ test_muse_classifies_as_not_editable class method test_muse_classifies_as_not_editable L55–59
+ test_muse_never_resolves_under_the_live_source_checkout method method test_muse_never_resolves_under_the_live_source_checkout L47–53
+ test_muse_resolves_under_installer_managed_venv method method test_muse_resolves_under_installer_managed_venv L39–45
+ _resolve_in_login_shell function function _resolve_in_login_shell L23–35
+ Path import import Path L15–15
+ classify_muse_binary class import classify_muse_binary L18–18
+ subprocess import import subprocess L13–13
+ sys import import sys L14–14
Files Changed
+1
1161 in snapshot

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