gabriel / muse public
chore BREAKING main #1 / 100

chore: ignore .hypothesis, .pytest_cache, .mypy_cache, .ruff_cache; add separation-of-concerns rules

- .museignore: add test/tool cache directories that should never be tracked - .cursorrules + AGENTS.md: enforce frontend separation of concerns (structure/behaviour/style)

G gabriel · 6h ago Mar 24, 2026 · e74bbfd6 · parent 390ce2eb
+253
symbols added
~153
symbols modified
−11
symbols removed
24
files changed
427
files in snapshot
0
dead code introduced
Semantic Changes code 417 symbols
+ .coverage .coverage
+ .cursorignore .cursorignore
+ .cursorrules .cursorrules
+ .gitignore .gitignore
+ .museattributes .museattributes
+ .museignore .museignore
~ muse/cli/commands/release.py .py 35 symbols added
+ _CHANNELS var variable _CHANNELS L71–71
+ _CHANNEL_MAP var variable _CHANNEL_MAP L72–77
+ _branch func function _branch L89–90
+ _format_release func function _format_release L103–126
+ _repo_id func function _repo_id L85–86
+ _resolve_remote_url func function _resolve_remote_url L93–100
+ ExitCode import import ExitCode L51–51
+ ReleaseChannel import import ReleaseChannel L53–53
+ ReleaseRecord import import ReleaseRecord L53–53
+ annotations import import annotations L42–42
+ argparse import import argparse L44–44
+ build_changelog import import build_changelog L53–53
+ delete_release import import delete_release L53–53
+ get_release_for_tag import import get_release_for_tag L53–53
+ json import import json L45–45
+ list_releases import import list_releases L53–53
+ logging import import logging L46–46
+ parse_semver import import parse_semver L53–53
+ pathlib import import pathlib L47–47
+ read_current_branch import import read_current_branch L53–53
+ require_repo import import require_repo L52–52
+ resolve_commit_ref import import resolve_commit_ref L53–53
+ sanitize_display import import sanitize_display L67–67
+ semver_channel import import semver_channel L53–53
+ semver_to_str import import semver_to_str L53–53
+ sys import import sys L48–48
+ uuid import import uuid L49–49
+ write_release import import write_release L53–53
+ logger var variable logger L69–69
+ register func function register L395–458
+ run_add func function run_add L134–217
+ run_delete func function run_delete L328–387
+ run_list func function run_list L220–269
+ run_push func function run_push L292–325
+ run_show func function run_show L272–289
~ muse/plugins/code/release_analysis.py .py 34 symbols added
+ _MAX_SEMANTIC_FILES var variable _MAX_SEMANTIC_FILES L47–47
+ _api_surface func function _api_surface L131–143
+ _build_api_changes func function _build_api_changes L146–184
+ _build_file_hotspots func function _build_file_hotspots L191–215
+ _build_language_stats func function _build_language_stats L91–115
+ _build_refactor_events func function _build_refactor_events L218–272
+ _build_symbol_kind_counts func function _build_symbol_kind_counts L118–128
+ _compute func function _compute L310–422
+ _empty_report func function _empty_report L55–74
+ _is_patch_op func function _is_patch_op L187–188
+ _is_public_symbol func function _is_public_symbol L77–88
+ compute_release_analysis func function compute_release_analysis L280–307
+ ApiChangeSummary import import ApiChangeSummary L22–22
+ ChangelogEntry import import ChangelogEntry L22–22
+ DomainOp import import DomainOp L34–34
+ FileHotspot import import FileHotspot L22–22
+ LanguageStat import import LanguageStat L22–22
+ RefactorEventSummary import import RefactorEventSummary L22–22
+ ReleaseRecord import import ReleaseRecord L22–22
+ SemanticReleaseReport import import SemanticReleaseReport L22–22
+ SymbolKindCount import import SymbolKindCount L22–22
+ SymbolRecord import import SymbolRecord L42–42
+ SymbolTree import import SymbolTree L42–42
+ annotations import import annotations L17–17
+ flat_symbol_ops import import flat_symbol_ops L35–35
+ is_semantic import import is_semantic L35–35
+ language_of import import language_of L35–35
+ logging import import logging L19–19
+ pathlib import import pathlib L20–20
+ read_snapshot import import read_snapshot L22–22
+ symbols_for_snapshot import import symbols_for_snapshot L35–35
+ touched_files import import touched_files L35–35
+ walk_commits_between import import walk_commits_between L22–22
+ logger var variable logger L44–44
~ tests/test_release.py .py 72 symbols added
+ TestBuildChangelog class class TestBuildChangelog L457–503
+ test_changelog_bounded_by_from_commit method method test_changelog_bounded_by_from_commit L473–484
+ test_changelog_from_commits method method test_changelog_from_commits L458–471
+ test_changelog_includes_agent_provenance method method test_changelog_includes_agent_provenance L494–503
+ test_empty_changelog_same_commit method method test_empty_changelog_same_commit L486–492
+ TestParseSemver class class TestParseSemver L106–165
+ test_alpha_pre_release method method test_alpha_pre_release L129–133
+ test_build_metadata method method test_build_metadata L135–140
+ test_invalid_raises method method test_invalid_raises L149–153
+ test_leading_zero_minor_valid method method test_leading_zero_minor_valid L161–165
+ test_missing_patch_raises method method test_missing_patch_raises L155–159
+ test_no_v_prefix method method test_no_v_prefix L117–121
+ test_pre_and_build method method test_pre_and_build L142–147
+ test_pre_release method method test_pre_release L123–127
+ test_stable_version method method test_stable_version L107–115
+ TestReleaseCLI class class TestReleaseCLI L582–736
+ test_release_add_basic method method test_release_add_basic L583–589
+ test_release_add_draft method method test_release_add_draft L607–613
+ test_release_add_duplicate_rejected method method test_release_add_duplicate_rejected L598–605
+ test_release_add_invalid_semver method method test_release_add_invalid_semver L591–596
+ test_release_add_json_output method method test_release_add_json_output L615–624
+ test_release_changelog_in_json_output method method test_release_changelog_in_json_output L727–736
+ test_release_channel_filter method method test_release_channel_filter L715–725
+ test_release_delete_draft method method test_release_delete_draft L667–674
+ test_release_delete_published_prompt_abort method method test_release_delete_published_prompt_abort L690–703
+ test_release_delete_published_prompt_confirm method method test_release_delete_published_prompt_confirm L705–713
+ test_release_delete_published_with_yes method method test_release_delete_published_with_yes L676–688
+ test_release_list method method test_release_list L626–633
+ test_release_list_empty method method test_release_list_empty L635–639
+ test_release_list_json method method test_release_list_json L641–650
+ test_release_show method method test_release_show L652–660
+ test_release_show_not_found method method test_release_show_not_found L662–665
+ TestReleaseRecordSerialisation class class TestReleaseRecordSerialisation L226–283
+ _make_release method method _make_release L227–241
+ test_draft_round_trip method method test_draft_round_trip L256–263
+ test_invalid_channel_defaults_to_stable method method test_invalid_channel_defaults_to_stable L265–283
+ test_round_trip method method test_round_trip L243–254
+ TestReleaseStore class class TestReleaseStore L291–449
+ test_delete_nonexistent_returns_false method method test_delete_nonexistent_returns_false L425–429
+ test_delete_release method method test_delete_release L403–423
+ test_filter_by_channel method method test_filter_by_channel L375–401
+ test_get_release_for_tag method method test_get_release_for_tag L431–449
+ test_list_excludes_drafts_by_default method method test_list_excludes_drafts_by_default L349–373
+ test_list_releases_newest_first method method test_list_releases_newest_first L319–347
+ test_read_missing_returns_none method method test_read_missing_returns_none L313–317
+ test_write_and_read method method test_write_and_read L292–311
+ TestSemverChannel class class TestSemverChannel L188–218
+ test_alpha_channel method method test_alpha_channel L201–205
+ test_beta_channel method method test_beta_channel L195–199
+ test_nightly_channel method method test_nightly_channel L207–211
+ test_rc_defaults_to_stable method method test_rc_defaults_to_stable L213–218
+ test_stable_channel_no_pre method method test_stable_channel_no_pre L189–193
+ TestSemverToStr class class TestSemverToStr L168–185
+ test_round_trip_prerelease method method test_round_trip_prerelease L175–179
+ test_round_trip_stable method method test_round_trip_stable L169–173
+ test_round_trip_with_build method method test_round_trip_with_build L181–185
+ TestWireTagInPack class class TestWireTagInPack L511–574
+ test_apply_pack_writes_tags method method test_apply_pack_writes_tags L550–574
+ test_build_pack_includes_tags method method test_build_pack_includes_tags L512–532
+ test_build_pack_no_tags_when_repo_id_omitted method method test_build_pack_no_tags_when_repo_id_omitted L534–548
+ _env func function _env L33–34
+ _init_repo func function _init_repo L37–52
+ _make_commit func function _make_commit L55–98
+ CliRunner import import CliRunner L21–21
+ ReleaseRecord import import ReleaseRecord L23–23
+ annotations import import annotations L13–13
+ datetime import import datetime L15–15
+ json import import json L16–16
+ pathlib import import pathlib L17–17
+ pytest import import pytest L20–20
+ uuid import import uuid L18–18
+ runner var variable runner L25–25
~ tests/test_release_analysis.py .py 25 symbols added
+ TestComputeReleaseAnalysis class class TestComputeReleaseAnalysis L115–183
+ test_agent_commit_counted method method test_agent_commit_counted L144–152
+ test_empty_manifest_yields_zero_symbols method method test_empty_manifest_yields_zero_symbols L130–135
+ test_exception_in_analysis_returns_empty_report method method test_exception_in_analysis_returns_empty_report L161–168
+ test_human_commit_counted method method test_human_commit_counted L137–142
+ test_missing_snapshot_returns_empty_report method method test_missing_snapshot_returns_empty_report L154–159
+ test_returns_semantic_report_shape method method test_returns_semantic_report_shape L116–128
+ test_semantic_report_roundtrips_through_release_record method method test_semantic_report_roundtrips_through_release_record L170–183
+ TestEmptyReport class class TestEmptyReport L105–112
+ test_empty_report_has_all_keys method method test_empty_report_has_all_keys L106–112
+ _make_release func function _make_release L39–97
+ ChangelogEntry import import ChangelogEntry L11–11
+ ReleaseRecord import import ReleaseRecord L11–11
+ SemVerTag import import SemVerTag L11–11
+ SemanticReleaseReport import import SemanticReleaseReport L11–11
+ _empty_report import import _empty_report L18–18
+ annotations import import annotations L3–3
+ compute_release_analysis import import compute_release_analysis L18–18
+ datetime import import datetime L7–7
+ pathlib import import pathlib L5–5
+ pytest import import pytest L9–9
+ timezone import import timezone L7–7
+ uuid import import uuid L6–6
+ write_release import import write_release L11–11
+ repo func function repo L27–36
~ AGENTS.md .md 20 symbols added, 9 symbols removed, 9 symbols modified
~ table@L177
~ table@L149
code@L38 var variable code@L38 L38–67
Branch Discipline — Absolute Rule section Branch Discipline — Absolute Rule L78–109
Enforcement protocol section Enforcement protocol L98–109
table@L100 section table@L100 L100–106
Full task lifecycle section Full task lifecycle L82–98
GitHub Interactions — MCP First section GitHub Interactions — MCP First L109–132
table@L113 section table@L113 L113–127
Enforcement chain section Enforcement chain L165–175
table@L167 section table@L167 L167–172
+ code@L39 var variable code@L39 L39–68
+ Frontend Separation of Concerns — Absolute Rule (MuseHub contributions) section Frontend Separation of Concerns — Absolute Rule (MuseHub contributions) L183–197
+ table@L187 section table@L187 L187–192
+ MuseHub Interactions section MuseHub Interactions L170–183
+ table@L174 section table@L174 L174–180
+ Version Control — Muse Only section Version Control — Muse Only L79–170
+ Before merging section Before merging L109–117
+ code@L111 var variable code@L111 L111–116
+ Branch discipline — absolute rule section Branch discipline — absolute rule L142–160
+ Enforcement protocol section Enforcement protocol L160–170
+ table@L162 section table@L162 L162–167
+ Merging section Merging L117–124
+ code@L119 var variable code@L119 L119–123
+ Releasing section Releasing L124–142
+ code@L126 var variable code@L126 L126–141
+ Starting work section Starting work L92–100
+ code@L94 var variable code@L94 L94–99
+ The mental model section The mental model L83–92
+ While working section While working L100–109
+ code@L102 var variable code@L102 L102–108
~ Muse — Agent Contract
~ Agent Role
~ Anti-Patterns (never do these)
~ Architecture
~ Testing Standards
~ Typing — Zero-Tolerance Rules
~ Verification Checklist
~ muse/cli/app.py .py 1 symbol added, 112 symbols modified
+ release_cmd import import release_cmd L110–110
~ agent_map
~ annotate
~ api_surface
~ archive
~ arpeggiate
~ attributes
~ auth
~ bisect
~ blame
~ branch
~ breakage
~ bundle
~ cadence
~ cat
~ check
~ checkout
~ checkout_symbol
~ cherry_pick
~ clean
~ clone
~ clones
~ code_check
~ code_query
~ code_stage
~ codemap
~ commit
~ compare
~ config_cmd
~ content_grep
~ contour
~ core_blame
~ coupling
~ coverage
~ dead
~ density
~ deps
~ describe
~ detect_refactor
~ diff
~ domains
~ fetch
~ find_phrase
~ find_symbol
~ forecast
~ gc
~ grep
~ harmony
~ hotspots
~ hub
~ humanize
~ impact
~ index_rebuild
~ init
~ instrumentation
~ intent
~ invariants
~ invert
~ languages
~ lineage
~ log
~ merge
~ midi_check
~ midi_compare
~ midi_query
~ midi_shard
~ mix
~ motif_detect
~ note_blame
~ note_hotspots
~ note_log
~ notes
~ patch
~ piano_roll
~ plan_merge
~ pull
~ push
~ quantize
~ query
~ query_history
~ rebase
~ reconcile
~ reflog
~ remote
~ rerere
~ reserve
~ reset
~ retrograde
~ revert
~ rhythm
~ scale_detect
~ semantic_cherry_pick
~ shard
~ shortlog
~ show
~ snapshot_cmd
~ stable
~ stash
~ status
~ symbol_log
~ symbols
~ tag
~ tempo
~ tension
~ transpose
~ velocity_normalize
~ velocity_profile
~ verify
~ voice_leading
~ whoami
~ workspace
~ worktree
~ main
~ muse/core/errors.py .py 1 symbol modified
~ ExitCode
~ muse/core/pack.py .py 7 symbols added, 11 symbols modified
+ WireTag class class WireTag L62–69
+ _tags_for_commits func function _tags_for_commits L152–169
+ TagDict import import TagDict L31–31
+ TagRecord import import TagRecord L31–31
+ get_all_tags import import get_all_tags L31–31
+ get_tags_for_commit import import get_tags_for_commit L31–31
+ write_tag import import write_tag L31–31
~ PackBundle
~ apply_pack
~ build_pack
~ CommitDict
~ CommitRecord
~ SnapshotDict
~ SnapshotRecord
~ read_commit
~ read_snapshot
~ write_commit
~ write_snapshot
~ muse/core/snapshot.py .py 7 symbols added, 2 symbols modified
+ _ALWAYS_PRUNE_DIRS var variable _ALWAYS_PRUNE_DIRS L60–78
+ _BUILTIN_SECRET_PATTERNS var variable _BUILTIN_SECRET_PATTERNS L83–93
+ _load_ignore_patterns func function _load_ignore_patterns L96–116
+ is_ignored import import is_ignored L53–53
+ json import import json L48–48
+ load_ignore_config import import load_ignore_config L53–53
+ resolve_patterns import import resolve_patterns L53–53
~ build_snapshot_manifest
~ walk_workdir
~ muse/core/store.py .py 28 symbols added
+ ApiChangeSummary class class ApiChangeSummary L138–144
+ ChangelogEntry class class ChangelogEntry L105–120
+ FileHotspot class class FileHotspot L147–152
+ LanguageStat class class LanguageStat L123–128
+ RefactorEventSummary class class RefactorEventSummary L155–161
+ ReleaseChannel var variable ReleaseChannel L80–80
+ ReleaseDict class class ReleaseDict L199–216
+ ReleaseRecord class class ReleaseRecord L631–710
+ from_dict method method from_dict L688–710
+ to_dict method method to_dict L667–685
+ SemVerTag class class SemVerTag L95–102
+ SemanticReleaseReport class class SemanticReleaseReport L164–196
+ SymbolKindCount class class SymbolKindCount L131–135
+ _CHANNEL_MAP var variable _CHANNEL_MAP L84–89
+ _RELEASES_DIR var variable _RELEASES_DIR L73–73
+ _SEMVER_PRE_RE var variable _SEMVER_PRE_RE L92–92
+ _SEMVER_RE var variable _SEMVER_RE L1165–1169
+ _VALID_CHANNELS var variable _VALID_CHANNELS L82–82
+ _releases_dir func function _releases_dir L734–737
+ build_changelog func function build_changelog L1308–1340
+ delete_release func function delete_release L1293–1305
+ get_release_for_tag func function get_release_for_tag L1247–1258
+ list_releases func function list_releases L1261–1290
+ parse_semver func function parse_semver L1172–1189
+ read_release func function read_release L1233–1244
+ semver_channel func function semver_channel L1202–1216
+ semver_to_str func function semver_to_str L1192–1199
+ write_release func function write_release L1224–1230
~ muse/core/transport.py .py 18 symbols added, 11 symbols modified
+ create_release method method create_release L807–822
+ delete_release_remote method method delete_release_remote L846–856
+ list_releases_remote method method list_releases_remote L824–844
+ push_tags method method push_tags L791–805
+ create_release method method create_release L1565–1580
+ delete_release_remote method method delete_release_remote L1606–1626
+ list_releases_remote method method list_releases_remote L1582–1604
+ push_tags method method push_tags L1539–1563
+ create_release method method create_release L487–505
+ delete_release_remote method method delete_release_remote L527–547
+ list_releases_remote method method list_releases_remote L507–525
+ push_tags method method push_tags L466–485
+ _coerce_sem_ver_bump func function _coerce_sem_ver_bump L985–993
+ _parse_releases_list func function _parse_releases_list L996–1059
+ ChangelogEntry import import ChangelogEntry L119–119
+ ReleaseDict import import ReleaseDict L119–119
+ SemVerTag import import SemVerTag L119–119
+ WireTag import import WireTag L110–110
~ HttpTransport
~ LocalFileTransport
~ MuseTransport
~ CommitDict
~ FetchRequest
~ ObjectPayload
~ ObjectsChunkResponse
~ PackBundle
~ PushResult
~ RemoteInfo
~ SnapshotDict
~ muse/plugins/code/plugin.py .py 1 symbol added, 5 symbols modified
+ _BUILTIN_SECRET_PATTERNS import import _BUILTIN_SECRET_PATTERNS L96–96
~ CodePlugin
~ snapshot
~ stage_status
~ workdir_snapshot
~ _ALWAYS_IGNORE_DIRS
~ tests/test_core_snapshot.py .py 3 symbols added, 1 symbol removed, 1 symbol modified
test_hidden_files_excluded method method test_hidden_files_excluded L59–64
+ test_dotfiles_tracked_when_not_ignored method method test_dotfiles_tracked_when_not_ignored L69–75
+ test_museignore_excludes_custom_pattern method method test_museignore_excludes_custom_pattern L77–84
+ test_secrets_excluded_by_builtin_blocklist method method test_secrets_excluded_by_builtin_blocklist L59–67
~ TestBuildSnapshotManifest
~ tests/test_core_stat_cache.py .py 2 symbols added, 1 symbol removed, 1 symbol modified
test_walk_excludes_hidden_paths_from_cache method method test_walk_excludes_hidden_paths_from_cache L376–385
+ test_walk_excludes_secrets_from_cache method method test_walk_excludes_secrets_from_cache L376–386
+ test_walk_tracks_non_secret_dotfiles method method test_walk_tracks_non_secret_dotfiles L388–398
~ TestWalkWorkdirCacheIntegration

0 comments

No comments yet. Be the first to start the discussion.