gabriel / muse public
fix BREAKING dev
gabriel · 164 days ago · Apr 16, 2026 · Diff

fix: CLI AX audit — rev-parse text default + sha256: prefix enforcement in show

- rev-parse: change default format from json to text; --json now meaningful - rev-parse: reject bare hex IDs with clear error; require sha256: prefix form - rev-parse: handle sha256:<partial-hex> prefix lookups correctly - show: fix traceback on canonical sha256: refs; route through content-address resolution before branch-name lookup - show: handle sha256:<partial-hex> prefix via find_commits_by_prefix - tests: 7 new rev-parse tests (default format, sha256: prefix requirement); all 331 AX audit tests green - wire: add test_wire_localhost.py + push.py / transport.py idempotent push work

sha256:362ac00ca85c2888b42e715b67117e2d983a8d4a1b42a802a6f97f5d62b16221 sha
+82 ~32 symbols
sha256:026bab2570a89c3c33ea71358295eb3bb1e9814843fed9a21a911f11586b7836 snapshot
+82
symbols added
~32
symbols modified
0
dead code introduced
Semantic Changes 114 symbols
~ tests/test_wire_localhost.py .py 64 symbols added
+ HUB variable variable HUB L52–52
+ OWNER variable variable OWNER L53–53
+ TestT10IdempotentPush class class TestT10IdempotentPush L677–731
+ test_idempotent_push_zero_new_objects method method test_idempotent_push_zero_new_objects L680–698
+ test_nuke_and_repush method method test_nuke_and_repush L700–731
+ TestT1Auth class class TestT1Auth L256–268
+ test_healthz method method test_healthz L259–263
+ test_whoami method method test_whoami L265–268
+ TestT2RepoLifecycle class class TestT2RepoLifecycle L275–307
+ test_create_and_list method method test_create_and_list L278–284
+ test_delete_returns_no_content method method test_delete_returns_no_content L292–307
+ test_repo_id_is_sha256 method method test_repo_id_is_sha256 L286–290
+ TestT3ColdPush class class TestT3ColdPush L315–354
+ test_initial_push_succeeds method method test_initial_push_succeeds L318–328
+ test_push_empty_repo_succeeds method method test_push_empty_repo_succeeds L344–354
+ test_push_reports_commit_count method method test_push_reports_commit_count L330–342
+ TestT4Clone class class TestT4Clone L361–412
+ test_clone_restores_file_objects method method test_clone_restores_file_objects L393–412
+ test_clone_restores_snapshot method method test_clone_restores_snapshot L364–391
+ TestT5IncrementalPush class class TestT5IncrementalPush L419–464
+ test_incremental_push_head_advances method method test_incremental_push_head_advances L443–464
+ test_incremental_push_succeeds method method test_incremental_push_succeeds L422–441
+ TestT6Pull class class TestT6Pull L471–501
+ test_pull_updates_local_head method method test_pull_updates_local_head L474–501
+ TestT7Fetch class class TestT7Fetch L508–541
+ test_fetch_does_not_move_head method method test_fetch_does_not_move_head L511–541
+ TestT8ForcePush class class TestT8ForcePush L548–587
+ test_force_push_accepted method method test_force_push_accepted L570–587
+ test_non_fast_forward_rejected method method test_non_fast_forward_rejected L551–568
+ TestT9CrossRepo class class TestT9CrossRepo L594–670
+ test_multi_commit_pull_from_cross_repo method method test_multi_commit_pull_from_cross_repo L638–670
+ test_multi_file_repo_round_trip method method test_multi_file_repo_round_trip L597–636
+ _add_commit function function _add_commit L221–249
+ _hub_reachable function function _hub_reachable L62–67
+ _hub_request function function _hub_request L88–108
+ _init_local_repo function function _init_local_repo L138–218
+ _signing function function _signing L80–85
+ hub_repo function function hub_repo L116–131
+ CliRunner import import CliRunner L46–46
+ CommitRecord import import CommitRecord L37–37
+ SnapshotRecord import import SnapshotRecord L37–37
+ __version__ import import __version__ L32–32
+ annotations import import annotations L19–19
+ build_msign_header import import build_msign_header L34–34
+ compute_commit_id import import compute_commit_id L36–36
+ compute_snapshot_id import import compute_snapshot_id L36–36
+ datetime import import datetime L21–21
+ get_head_commit_id import import get_head_commit_id L37–37
+ get_signing_identity import import get_signing_identity L33–33
+ hashlib import import hashlib L22–22
+ json import import json L23–23
+ pathlib import import pathlib L24–24
+ pytest import import pytest L30–30
+ read_commit import import read_commit L37–37
+ read_snapshot import import read_snapshot L37–37
+ time import import time L25–25
+ error import import urllib.error L26–26
+ request import import urllib.request L27–27
+ uuid import import uuid L28–28
+ write_commit import import write_commit L37–37
+ write_object import import write_object L35–35
+ write_snapshot import import write_snapshot L37–37
+ pytestmark variable variable pytestmark L70–73
+ runner variable variable runner L55–55
~ muse/cli/commands/push.py .py 1 symbol modified
~ muse/cli/commands/rev_parse.py .py 4 symbols added, 2 symbols modified
+ _BARE_HEX_RE variable variable _BARE_HEX_RE L62–62
+ _SHA256_FULL_RE variable variable _SHA256_FULL_RE L60–60
+ _SHA256_PREFIX_RE variable variable _SHA256_PREFIX_RE L61–61
+ re import import re L44–44
~ run
~ muse/cli/commands/show.py .py 4 symbols added, 7 symbols modified
+ _SHA256_FULL_RE variable variable _SHA256_FULL_RE L63–63
+ _SHA256_PREFIX_RE variable variable _SHA256_PREFIX_RE L64–64
+ find_commits_by_prefix import import find_commits_by_prefix L52–52
+ re import import re L46–46
~ run
~ tests/test_cmd_rev_parse.py .py 10 symbols added, 18 symbols modified
+ TestDefaultFormat class class TestDefaultFormat L111–134
+ test_default_output_is_plain_text method method test_default_output_is_plain_text L112–119
+ test_format_text_explicit method method test_format_text_explicit L130–134
+ test_json_flag_gives_dict_output method method test_json_flag_gives_dict_output L121–128
+ TestSha256PrefixRequired class class TestSha256PrefixRequired L142–172
+ test_bare_full_hex_rejected method method test_bare_full_hex_rejected L143–149
+ test_bare_short_hex_rejected method method test_bare_short_hex_rejected L151–157
+ test_canonical_full_id_resolves method method test_canonical_full_id_resolves L159–164
+ test_canonical_prefix_resolves method method test_canonical_prefix_resolves L166–172
+ pytest import import pytest L16–16
← Older Oldest on dev
All commits
Newer → Latest on dev

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