gabriel / muse public
feat patch task/verify-commit #1 / 1
gabriel · 167 days ago · Apr 14, 2026 · Diff

feat: add muse verify-commit — verify Ed25519 signatures on commits

Implements _verify_one, _fetch_key_status, register, and run. - Reconstructs canonical provenance payload and verifies via Ed25519 - --strict: exits nonzero on unsigned commits - --check-key-status: queries hub for key revocation (fails closed to 'unknown') - Batch: multiple commit IDs in one call, parallel via ThreadPoolExecutor - key_status_cache deduplicates hub calls within a batch invocation - 22 tests: unit, integration, security, stress — all green

sha256:2fb5d0ec7ab8875d6a0c4edd751c2680344746bff10fdf045c3df9fe5f800bc8 sha
+80 ~31 symbols
sha256:8d0381c0870499cda99f4686f57bee4507f6ac99573997faefa479eea01b946e snapshot
+80
symbols added
~31
symbols modified
0
dead code introduced
Semantic Changes 111 symbols
~ muse/cli/commands/verify_commit.py .py 26 symbols added
+ _KEY_STATUS_TIMEOUT variable variable _KEY_STATUS_TIMEOUT L73–73
+ _SAFE_REF_RE variable variable _SAFE_REF_RE L76–76
+ _fetch_key_status function function _fetch_key_status L111–127
+ _resolve_ref function function _resolve_ref L84–108
+ _verify_one function function _verify_one L130–219
+ Any import import Any L62–62
+ ExitCode import import ExitCode L64–64
+ ThreadPoolExecutor import import ThreadPoolExecutor L61–61
+ _json import import _json L57–57
+ annotations import import annotations L53–53
+ argparse import import argparse L55–55
+ as_completed import import as_completed L61–61
+ base64 import import base64 L56–56
+ get_head_commit_id import import get_head_commit_id L67–67
+ logging import import logging L58–58
+ provenance_payload import import provenance_payload L65–65
+ re import import re L59–59
+ read_commit import import read_commit L67–67
+ read_current_branch import import read_current_branch L67–67
+ require_repo import import require_repo L66–66
+ sanitize_display import import sanitize_display L68–68
+ sys import import sys L60–60
+ verify_commit_ed25519 import import verify_commit_ed25519 L65–65
+ logger variable variable logger L70–70
+ register function function register L227–260
+ run function function run L268–361
~ tests/test_cmd_verify_commit.py .py 53 symbols added
+ _REPO_ID variable variable _REPO_ID L39–39
+ _commit_files function function _commit_files L73–130
+ _counter variable variable _counter L40–40
+ _env function function _env L63–64
+ _force_write_commit function function _force_write_commit L138–142
+ _init_repo function function _init_repo L52–60
+ _invoke function function _invoke L133–135
+ _make_key function function _make_key L67–70
+ _sha function function _sha L48–49
+ CliRunner import import CliRunner L25–25
+ CommitRecord import import CommitRecord L34–34
+ Manifest import import Manifest L35–35
+ SnapshotRecord import import SnapshotRecord L34–34
+ annotations import import annotations L14–14
+ base64 import import base64 L16–16
+ compute_commit_id import import compute_commit_id L33–33
+ compute_snapshot_id import import compute_snapshot_id L33–33
+ datetime import import datetime L17–17
+ encode_public_key import import encode_public_key L27–27
+ hashlib import import hashlib L18–18
+ json import import json L19–19
+ patch import import patch L21–21
+ pathlib import import pathlib L20–20
+ provenance_payload import import provenance_payload L27–27
+ pytest import import pytest L23–23
+ sign_commit_record import import sign_commit_record L27–27
+ verify_commit_ed25519 import import verify_commit_ed25519 L27–27
+ write_commit import import write_commit L34–34
+ write_object import import write_object L26–26
+ write_snapshot import import write_snapshot L34–34
+ runner variable variable runner L37–37
+ test_verify_commit_100_signed_commits function function test_verify_commit_100_signed_commits L422–432
+ test_verify_commit_ansi_in_ref_rejected function function test_verify_commit_ansi_in_ref_rejected L387–391
+ test_verify_commit_batch_all_valid function function test_verify_commit_batch_all_valid L351–360
+ test_verify_commit_batch_one_invalid_exits_nonzero function function test_verify_commit_batch_one_invalid_exits_nonzero L363–369
+ test_verify_commit_canonical_message_tamper_detected function function test_verify_commit_canonical_message_tamper_detected L394–414
+ test_verify_commit_check_key_status_unknown_no_hub function function test_verify_commit_check_key_status_unknown_no_hub L372–379
+ test_verify_commit_head_shorthand function function test_verify_commit_head_shorthand L325–332
+ test_verify_commit_invalid_exits_nonzero function function test_verify_commit_invalid_exits_nonzero L286–305
+ test_verify_commit_json_output function function test_verify_commit_json_output L272–283
+ test_verify_commit_key_status_cache_deduplicates function function test_verify_commit_key_status_cache_deduplicates L435–454
+ test_verify_commit_nonexistent_ref_exits_nonzero function function test_verify_commit_nonexistent_ref_exits_nonzero L335–338
+ test_verify_commit_text_output_format function function test_verify_commit_text_output_format L341–348
+ test_verify_commit_unsigned_no_strict_exits_zero function function test_verify_commit_unsigned_no_strict_exits_zero L308–315
+ test_verify_commit_unsigned_strict_exits_nonzero function function test_verify_commit_unsigned_strict_exits_nonzero L318–322
+ test_verify_commit_valid_exits_zero function function test_verify_commit_valid_exits_zero L264–269
+ test_verify_one_bit_flip_in_signature function function test_verify_one_bit_flip_in_signature L205–232
+ test_verify_one_json_schema_keys function function test_verify_one_json_schema_keys L245–256
+ test_verify_one_key_status_unknown_without_hub function function test_verify_one_key_status_unknown_without_hub L235–242
+ test_verify_one_missing_public_key function function test_verify_one_missing_public_key L179–202
+ test_verify_one_tampered_commit_id function function test_verify_one_tampered_commit_id L170–176
+ test_verify_one_unsigned_commit function function test_verify_one_unsigned_commit L161–167
+ test_verify_one_valid_signature function function test_verify_one_valid_signature L150–158
← Older Oldest on task/verify-commit
All commits
Newer → Latest on task/verify-commit

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