feat: implement muse verify-tag with Ed25519 signature verification
- Add message, signature, signer_public_key, signer_key_id fields to TagRecord and TagDict (backward-compatible defaults) - Add get_tag_by_name() helper to store.py for tag lookup by label - Implement muse/cli/commands/verify_tag.py: tag_payload(), _verify_tag_one(), _fetch_key_status(), register(), run() - Register verify-tag in app.py - 25 tests covering unit (payload determinism, tamper detection), integration (CLI valid/invalid/batch/strict/json/text), security (ANSI rejection, bit-flip), and stress (50 tags, cache deduplication)
sha256:a620c05b021bf0adad01d38991be9b8d17799265a5336f04e0df51c66a9c3c68
sha
+87
~37
symbols
sha256:1cbd284f8e3801a1c22d3aab3282205c872ca6b48d747079331ac73c0d9860f1
snapshot
+87
symbols added
~37
symbols modified
0
dead code introduced
Semantic Changes
124 symbols
+
test_tag_payload_changes_with_commit_id
function
function test_tag_payload_changes_with_commit_id L179–183
+
test_tag_payload_changes_with_key_id
function
function test_tag_payload_changes_with_key_id L193–197
+
test_tag_payload_changes_with_message
function
function test_tag_payload_changes_with_message L186–190
+
test_tag_payload_changes_with_tag_name
function
function test_tag_payload_changes_with_tag_name L172–176
+
test_verify_tag_ansi_in_name_rejected
function
function test_verify_tag_ansi_in_name_rejected L432–435
+
test_verify_tag_batch_one_invalid_exits_nonzero
function
function test_verify_tag_batch_one_invalid_exits_nonzero L405–413
+
test_verify_tag_check_key_status_unknown_no_hub
function
function test_verify_tag_check_key_status_unknown_no_hub L416–424
+
test_verify_tag_invalid_exits_nonzero
function
function test_verify_tag_invalid_exits_nonzero L340–359
+
test_verify_tag_key_status_cache_deduplicates
function
function test_verify_tag_key_status_cache_deduplicates L454–475
+
test_verify_tag_nonexistent_exits_nonzero
function
function test_verify_tag_nonexistent_exits_nonzero L380–383
+
test_verify_tag_one_missing_public_key
function
function test_verify_tag_one_missing_public_key L279–295
+
test_verify_tag_one_nonexistent_returns_error
function
function test_verify_tag_one_nonexistent_returns_error L227–232
+
test_verify_tag_one_tampered_message
function
function test_verify_tag_one_tampered_message L235–253
+
test_verify_tag_text_output_contains_tag_name
function
function test_verify_tag_text_output_contains_tag_name L386–392
+
test_verify_tag_unsigned_no_strict_exits_zero
function
function test_verify_tag_unsigned_no_strict_exits_zero L362–369
+
test_verify_tag_unsigned_strict_exits_nonzero
function
function test_verify_tag_unsigned_strict_exits_nonzero L372–377
0 comments
To add a comment, use the Muse CLI:
muse hub commit comment sha256:a620c05b021bf0adad01d38991be9b8d17799265a5336f04e0df51c66a9c3c68 --body "your comment"
No comments yet. Be the first to start the discussion.