gabriel / muse public
fix BREAKING dev
AI Agent gabriel · 151 days ago · Apr 24, 2026 · Diff

fix: object_state uses _object_path_with_fallback, consistent with has_object

object_state() was calling object_path() directly, missing the 4→2 char shard fallback that has_object() uses. Also corrects iter_stored_objects() docstring which falsely claimed legacy layout support.

sha256:a0e6c070bd86980b201d95df43aa0ba93e852b31ffed76035827ea52f197504b sha
+84 ~2 −1 symbols
sha256:5c244935313a2dcafcc4bbcbe185cea8d3d4471a0b9eb3e88baa80c626863ecd snapshot
+84
symbols added
~2
symbols modified
−1
symbol removed
0
dead code introduced
Semantic Changes 87 symbols
+ TestCommitWritePath class class TestCommitWritePath L614–657
+ test_all_manifest_objects_survive_full_gc method method test_all_manifest_objects_survive_full_gc L641–657
+ test_snapshot_manifest_objects_at_canonical_path method method test_snapshot_manifest_objects_at_canonical_path L622–639
+ TestConsistencyInvariants class class TestConsistencyInvariants L223–295
+ test_c1_has_object_true_after_write method method test_c1_has_object_true_after_write L226–229
+ test_c2_object_state_present_after_write method method test_c2_object_state_present_after_write L231–235
+ test_c3_iter_stored_objects_finds_written method method test_c3_iter_stored_objects_finds_written L237–243
+ test_c4_has_object_and_object_state_agree_absent method method test_c4_has_object_and_object_state_agree_absent L253–259
+ test_c4_has_object_and_object_state_agree_present method method test_c4_has_object_and_object_state_agree_present L245–251
+ test_c5_object_path_canonical_location method method test_c5_object_path_canonical_location L261–270
+ test_c6_object_state_missing_when_absent_no_promisors method method test_c6_object_state_missing_when_absent_no_promisors L272–278
+ test_c7_object_state_present_beats_promisor method method test_c7_object_state_present_beats_promisor L288–295
+ test_c7_object_state_promised_when_absent_with_promisor method method test_c7_object_state_promised_when_absent_with_promisor L280–286
+ TestGcFull class class TestGcFull L353–382
+ test_full_gc_dry_run_does_not_delete method method test_full_gc_dry_run_does_not_delete L377–382
+ test_orphan_collected_by_full_gc method method test_orphan_collected_by_full_gc L365–375
+ test_reachable_object_survives_full_gc method method test_reachable_object_survives_full_gc L356–363
+ TestGcFullMultiBranch class class TestGcFullMultiBranch L390–436
+ test_object_on_secondary_branch_survives_full_gc method method test_object_on_secondary_branch_survives_full_gc L393–408
+ test_object_on_three_branches_all_survive method method test_object_on_three_branches_all_survive L410–423
+ test_shared_object_referenced_by_two_branches_survives method method test_shared_object_referenced_by_two_branches_survives L425–436
+ TestGcFullObjectNormalisation class class TestGcFullObjectNormalisation L444–531
+ test_full_gc_does_not_delete_prefixed_manifest_objects method method test_full_gc_does_not_delete_prefixed_manifest_objects L497–516
+ test_full_gc_retains_large_manifest method method test_full_gc_retains_large_manifest L518–531
+ test_iter_stored_objects_uses_prefixed_ids method method test_iter_stored_objects_uses_prefixed_ids L467–476
+ test_reachable_set_matches_stored_set_for_live_objects method method test_reachable_set_matches_stored_set_for_live_objects L478–495
+ test_reachable_set_uses_prefixed_ids method method test_reachable_set_uses_prefixed_ids L453–465
+ TestGcNonFull class class TestGcNonFull L303–345
+ test_grace_period_protects_recent_objects method method test_grace_period_protects_recent_objects L338–345
+ test_multiple_orphans_all_collected method method test_multiple_orphans_all_collected L330–336
+ test_orphan_collected method method test_orphan_collected L306–310
+ test_reachable_on_non_default_branch_survives method method test_reachable_on_non_default_branch_survives L320–328
+ test_reachable_via_snapshot_survives method method test_reachable_via_snapshot_survives L312–318
+ TestMaintenanceGcUsesFull class class TestMaintenanceGcUsesFull L562–606
+ test_maintenance_gc_retains_all_reachable_objects method method test_maintenance_gc_retains_all_reachable_objects L586–606
+ test_maintenance_gc_task_calls_run_gc_with_full_true method method test_maintenance_gc_task_calls_run_gc_with_full_true L565–584
+ TestPruneSafety class class TestPruneSafety L539–554
+ test_prune_does_not_remove_committed_object method method test_prune_does_not_remove_committed_object L542–554
+ TestShelfWritePath class class TestShelfWritePath L665–696
+ test_shelved_objects_survive_full_gc method method test_shelved_objects_survive_full_gc L684–696
+ test_shelved_objects_survive_non_full_gc method method test_shelved_objects_survive_non_full_gc L668–682
+ TestWriteObject class class TestWriteObject L122–177
+ test_content_verifiable_after_write method method test_content_verifiable_after_write L159–164
+ test_filename_is_remaining_62_hex_chars method method test_filename_is_remaining_62_hex_chars L142–149
+ test_idempotent_returns_false_on_second_write method method test_idempotent_returns_false_on_second_write L151–157
+ test_lands_under_sha256_dir method method test_lands_under_sha256_dir L125–131
+ test_rejects_bare_hex_object_id method method test_rejects_bare_hex_object_id L172–177
+ test_rejects_wrong_content method method test_rejects_wrong_content L166–170
+ test_shard_prefix_is_first_two_hex_chars method method test_shard_prefix_is_first_two_hex_chars L133–140
+ TestWriteObjectFromPath class class TestWriteObjectFromPath L185–215
+ test_content_readable_after_write method method test_content_readable_after_write L208–215
+ test_oid_matches_blob_id method method test_oid_matches_blob_id L199–206
+ test_writes_to_sha256_dir method method test_writes_to_sha256_dir L188–197
+ _repo function function _repo L67–74
+ _write_blob function function _write_blob L77–80
+ _write_commit_on_branch function function _write_commit_on_branch L89–114
+ _write_snap function function _write_snap L83–86
+ CommitRecord import import CommitRecord L59–59
+ ObjectState import import ObjectState L49–49
+ SnapshotRecord import import SnapshotRecord L59–59
+ _collect_reachable_commits import import _collect_reachable_commits L48–48
+ _collect_reachable_snapshots import import _collect_reachable_snapshots L48–48
+ annotations import import annotations L38–38
+ blob_id import import blob_id L47–47
+ compute_commit_id import import compute_commit_id L58–58
+ compute_snapshot_id import import compute_snapshot_id L58–58
+ datetime import import datetime L40–40
+ has_object import import has_object L50–50
+ iter_stored_objects import import iter_stored_objects L50–50
+ json import import json L41–41
+ load_promisor_remotes import import load_promisor_remotes L49–49
+ long_id import import long_id L47–47
+ object_path import import object_path L50–50
+ object_state import import object_state L49–49
+ pathlib import import pathlib L42–42
+ pytest import import pytest L45–45
+ read_object import import read_object L50–50
+ run_gc import import run_gc L48–48
+ tempfile import import tempfile L43–43
+ write_commit import import write_commit L59–59
+ write_object import import write_object L50–50
+ write_object_from_path import import write_object_from_path L50–50
+ write_snapshot import import write_snapshot L59–59
~ muse/core/object_availability.py .py 1 symbol added, 1 symbol removed, 1 symbol modified
object_path import import object_path L54–54
+ _object_path_with_fallback import import _object_path_with_fallback L54–54
← 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:a0e6c070bd86980b201d95df43aa0ba93e852b31ffed76035827ea52f197504b --body "your comment"