feat(verify): shallow graft + promisor remote architecture
- muse/core/shallow.py: new module — read/write/add/remove/is_shallow - muse/core/object_availability.py: PRESENT/PROMISED/MISSING object state model - muse/core/verify.py: BFS stops at shallow boundary; _collect_ancestor_snapshots prevents orphan sweep from flagging beyond-boundary objects; _check_object helper routes through ObjectState; strict=True treats PROMISED as failures - muse/cli/commands/verify.py: --strict flag, new JSON fields (shallow_commits, promised_objects, is_shallow, promisor_remotes), updated _print_text - muse/cli/config.py: RemoteEntry.promisor field; parse + serialize in TOML - tests: 30 + 19 + 35 new tests; 195 passing
sha256:e18f40828e720efbd23d4198b6d263c94e533411fefa37d0f8e474e9c86fb854
sha
+186
~13
−2
symbols
sha256:34f2c51e205c7844f0c1080761197b7bb548271c86de7c88c035f7a9f36da06d
snapshot
+186
symbols added
~13
symbols modified
−2
symbols removed
0
dead code introduced
Semantic Changes
201 symbols
+
test_is_shallow_true_in_json_when_shallow_file
method
method test_is_shallow_true_in_json_when_shallow_file L437–444
+
test_strict_fails_on_promised_via_cli
method
method test_strict_fails_on_promised_via_cli L422–435
+
test_orphan_snapshot_with_missing_object_and_promisor
method
method test_orphan_snapshot_with_missing_object_and_promisor L492–505
+
test_shallow_repo_with_promisor_all_ok
method
method test_shallow_repo_with_promisor_all_ok L469–490
+
test_missing_object_with_promisor_not_a_failure
method
method test_missing_object_with_promisor_not_a_failure L194–205
+
test_missing_object_without_promisor_is_failure
method
method test_missing_object_without_promisor_is_failure L207–214
+
test_present_objects_not_counted_as_promised
method
method test_present_objects_not_counted_as_promised L230–238
+
test_promised_objects_counted_correctly
method
method test_promised_objects_counted_correctly L216–228
+
test_promisor_false_opt_out_causes_failure
method
method test_promisor_false_opt_out_causes_failure L240–249
+
test_promisor_remotes_listed_in_result
method
method test_promisor_remotes_listed_in_result L251–260
+
test_graft_objects_themselves_are_checked
method
method test_graft_objects_themselves_are_checked L366–373
+
test_is_shallow_true_when_shallow_file_exists
method
method test_is_shallow_true_when_shallow_file_exists L328–335
+
test_parents_beyond_graft_not_checked
method
method test_parents_beyond_graft_not_checked L344–364
+
test_strict_does_not_change_result_for_present_objects
method
method test_strict_does_not_change_result_for_present_objects L289–298
+
test_strict_promised_objects_still_zero_in_strict
method
method test_strict_promised_objects_still_zero_in_strict L300–309
+
test_is_shallow_false_without_shallow_file
method
method test_is_shallow_false_without_shallow_file L178–181
+
test_promised_objects_zero_for_clean_repo
method
method test_promised_objects_zero_for_clean_repo L172–176
+
test_promisor_remotes_empty_without_config
method
method test_promisor_remotes_empty_without_config L183–186
+
test_all_remotes_are_promisors_by_default
method
method test_all_remotes_are_promisors_by_default L163–170
+
test_explicit_promisor_false_excluded
method
method test_explicit_promisor_false_excluded L178–182
+
test_present_takes_priority_over_promisor
method
method test_present_takes_priority_over_promisor L107–113
+
test_present_when_file_exists_no_remotes
method
method test_present_when_file_exists_no_remotes L92–97
+
test_present_when_file_exists_with_promisor
method
method test_present_when_file_exists_with_promisor L99–105
+
test_promised_when_absent_with_multiple_promisors
method
method test_promised_when_absent_with_multiple_promisors L126–129
+
test_promised_when_absent_with_one_promisor
method
method test_promised_when_absent_with_one_promisor L121–124
+
test_returns_empty_frozenset_for_empty_file
method
method test_returns_empty_frozenset_for_empty_file L74–77
+
test_returns_empty_frozenset_when_no_file
method
method test_returns_empty_frozenset_when_no_file L69–72
+
test_writes_empty_set_creates_empty_file
method
method test_writes_empty_set_creates_empty_file L121–126
−
test_zero_byte_object_flagged_without_check_objects
method
method test_zero_byte_object_flagged_without_check_objects L179–206
−
test_zero_byte_object_not_double_reported
method
method test_zero_byte_object_not_double_reported L208–233
+
test_genuinely_empty_file_passes_hash_check
method
method test_genuinely_empty_file_passes_hash_check L236–255
+
test_truncated_object_caught_by_hash_check
method
method test_truncated_object_caught_by_hash_check L180–208
+
test_truncated_object_passes_existence_check
method
method test_truncated_object_passes_existence_check L210–234
+
test_truncated_object_reported_exactly_once
method
method test_truncated_object_reported_exactly_once L257–282
0 comments
To add a comment, use the Muse CLI:
muse hub commit comment sha256:e18f40828e720efbd23d4198b6d263c94e533411fefa37d0f8e474e9c86fb854 --body "your comment"
No comments yet. Be the first to start the discussion.