gabriel / muse public
refactor BREAKING dev
AI Agent gabriel · 162 days ago · Apr 17, 2026 · Diff

refactor: replace all stored-entity UUIDs with content-addressed sha256 IDs

- task_id: compute_task_id({title, queue, payload, priority, created_by}) - reservation_id: compute_reservation_id({addresses, branch, operation, run_id}) - intent_id: compute_intent_id({addresses, branch, operation, reservation_id, run_id}) - repo_id fallback in init.py: {created_at, domain, path} - repo_id fallback in clone.py: {cloned_at, url} - run_id in test_runner.py: {started_at, targets(sorted), workers} - make_run_id() in test_history.py: {started_at_ns} nanosecond precision - Remove orphaned uuid imports from store.py

Security nonces (claim_nonce, nonce in task_queue.py) remain random UUID4. MIDI domain (entity_id, op_id) explicitly deferred. All validators updated from UUID4 regex to sha256: pattern. 921 tests passing.

sha256:fe0128f030b7c216425fb33b21d15aa8edfe07c16da312747e5bb6d40536d5a6 sha
+47 ~28 −15 symbols
sha256:77b891c51c5ac28998246952c8fd0a1a758bd09779a663bd3555adbe27996582 snapshot
+47
symbols added
~28
symbols modified
−15
symbols removed
0
dead code introduced
Semantic Changes 90 symbols
~ muse/cli/commands/clone.py .py 2 symbols added, 1 symbol removed, 2 symbols modified
− uuid import import uuid L60–60
+ hashlib import import hashlib L55–55
+ long_id import import long_id L67–67
~ run
~ muse/cli/commands/init.py .py 2 symbols added, 1 symbol removed, 1 symbol modified
− uuid import import uuid L68–68
+ hashlib import import hashlib L61–61
+ long_id import import long_id L71–71
~ run
~ muse/core/coordination.py .py 3 symbols added, 1 symbol removed, 2 symbols modified
− _uuid_mod import import _uuid_mod L106–106
+ compute_intent_id function function compute_intent_id L298–318
+ compute_reservation_id function function compute_reservation_id L277–295
+ long_id import import long_id L108–108
~ muse/core/store.py .py 1 symbol removed
− uuid import import uuid L70–70
~ muse/core/task_queue.py .py 4 symbols added, 1 symbol removed, 2 symbols modified
− _UUID_RE variable variable _UUID_RE L139–142
+ _TASK_ID_RE variable variable _TASK_ID_RE L142–142
+ compute_task_id function function compute_task_id L482–505
+ hashlib import import hashlib L96–96
+ long_id import import long_id L105–105
~ muse/core/test_history.py .py 3 symbols added, 1 symbol removed, 3 symbols modified
− uuid import import uuid L38–38
+ hashlib import import hashlib L34–34
+ json import import json L35–35
+ long_id import import long_id L45–45
~ muse/core/test_runner.py .py 3 symbols added, 1 symbol removed, 2 symbols modified
− uuid import import uuid L57–57
+ datetime import import datetime L50–50
+ hashlib import import hashlib L51–51
+ long_id import import long_id L62–62
~ tests/test_cmd_init.py .py 1 symbol added, 1 symbol removed, 5 symbols modified
~ tests/test_cmd_task_queue.py .py 14 symbols added, 6 symbols removed, 9 symbols modified
− test_task_id_is_uuid4 method method test_task_id_is_uuid4 L1428–1439
− test_unique_task_ids_across_calls method method test_unique_task_ids_across_calls L1441–1450
− test_accepts_uppercase method method test_accepts_uppercase L126–127
− test_rejects_non_uuid method method test_rejects_non_uuid L133–135
− test_rejects_uuid3 method method test_rejects_uuid3 L145–148
− test_rejects_uuid_with_slash method method test_rejects_uuid_with_slash L150–152
+ test_task_id_is_sha256 method method test_task_id_is_sha256 L1424–1431
+ test_unique_task_ids_across_different_titles method method test_unique_task_ids_across_different_titles L1433–1442
+ TestTaskIdContentAddressed class class TestTaskIdContentAddressed L4651–4717
+ test_create_task_id_matches_compute method method test_create_task_id_matches_compute L4699–4717
+ test_create_task_produces_sha256_id method method test_create_task_produces_sha256_id L4693–4697
+ test_task_id_deterministic method method test_task_id_deterministic L4675–4679
+ test_task_id_differs_by_queue method method test_task_id_differs_by_queue L4687–4691
+ test_task_id_differs_by_title method method test_task_id_differs_by_title L4681–4685
+ test_task_id_is_sha256_prefixed method method test_task_id_is_sha256_prefixed L4654–4664
+ test_task_id_not_uuid method method test_task_id_not_uuid L4666–4673
+ test_rejects_non_sha256 method method test_rejects_non_sha256 L130–132
+ test_rejects_sha256_with_slash method method test_rejects_sha256_with_slash L146–148
+ test_rejects_uuid method method test_rejects_uuid L142–144
+ long_id import import long_id L36–36
~ tests/test_coordination.py .py 14 symbols added
+ TestIntentIdContentAddressed class class TestIntentIdContentAddressed L389–419
+ test_intent_id_deterministic method method test_intent_id_deterministic L401–407
+ test_intent_id_differs_by_operation method method test_intent_id_differs_by_operation L409–413
+ test_intent_id_differs_by_reservation method method test_intent_id_differs_by_reservation L415–419
+ test_intent_id_is_sha256_prefixed method method test_intent_id_is_sha256_prefixed L390–394
+ test_intent_id_not_uuid method method test_intent_id_not_uuid L396–399
+ TestReservationIdContentAddressed class class TestReservationIdContentAddressed L355–386
+ test_reservation_id_deterministic method method test_reservation_id_deterministic L367–374
+ test_reservation_id_differs_by_addresses method method test_reservation_id_differs_by_addresses L382–386
+ test_reservation_id_differs_by_run_id method method test_reservation_id_differs_by_run_id L376–380
+ test_reservation_id_is_sha256_prefixed method method test_reservation_id_is_sha256_prefixed L356–360
+ test_reservation_id_not_uuid method method test_reservation_id_not_uuid L362–365
+ _UUID_RE variable variable _UUID_RE L352–352
+ _re import import _re L351–351
~ tests/test_core_test_history.py .py 1 symbol added, 1 symbol removed, 2 symbols modified
− test_make_run_id_is_uuid method method test_make_run_id_is_uuid L429–433
+ test_make_run_id_is_sha256 method method test_make_run_id_is_sha256 L429–433
← 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:fe0128f030b7c216425fb33b21d15aa8edfe07c16da312747e5bb6d40536d5a6 --body "your comment"