gabriel / muse public
test BREAKING harmony task/harmony-tdd-bug-fixes #1 / 1
AI Agent gabriel · 162 days ago · Apr 17, 2026 · Diff

test(harmony): comprehensive TDD suite — 154 tests, 4 bugs fixed

Bugs found and fixed:

Bug 1 (symbol-level paths): auto_apply and record_resolutions were silently skipping symbol-level conflict paths like 'config.py::MAX_CONNECTIONS' because manifest lookups used the full address instead of extracting the file portion. Fixed by splitting on '::' before manifest access.

Bug 2 (record_resolutions idempotency): calling record_resolutions twice with the same outcome_blob produced duplicate resolution files because compute_resolution_id uses _now_utc(). Fixed by checking existing resolutions for matching outcome_blob before writing.

Bug 3 (MERGE_STATE original_conflict_paths): checkout --ours/--theirs progressively empties conflict_paths, so by commit time record_resolutions received an empty list and learned nothing. Fixed by adding original_conflict_paths to MergeState and write_merge_state, preserved through all subsequent writes. commit.py now uses original_conflict_paths.

Bug 4 (path traversal guard): (root / '../evil.py').relative_to(root) did not raise ValueError because pathlib.relative_to does string-level part comparison without resolving '..'. Fixed by using .resolve() on both sides before the relative_to check, which normalises '../' traversals and symlinks.

Bug 5 (semantic fingerprint cross-content replay): compute_pattern_id always incorporated blob_fp alongside semantic_fp, making different blob pairs produce different pattern IDs even when the semantic fingerprint was identical. This made the HarmonyPlugin semantic matching feature impossible. Fixed: when semantic_fp != blob_fp, pattern_id is computed from semantic_fp alone, enabling two conflicts with different blob content but the same semantic shape to share a pattern and replay the same saved resolution.

Test suite (154 tests across 27 test classes): - blob_fingerprint: commutativity, stability, distinctness - compute_pattern_id: path/blob/semantic sensitivity, new semantic isolation - compute_semantic_fingerprint: plugin dispatch, fallback, commutativity - record_pattern/load_pattern: round-trip, idempotency, invalid IDs - list_patterns, forget_pattern, clear_all - save_resolution/load_resolution: round-trip, idempotency, orphan guard - list_resolutions: sort by (human_verified, confidence, applied_count) - best_resolution: ranking in all tiebreaker combinations - increment_applied_count: increment, repeated, missing - gc_stale: removes old unresolved, keeps resolved or recent - audit log: append, accumulate, limit, provenance, metadata - policy CRUD: save/load/list/remove, scope ordering - PolicyCondition matching: all predicate combinations, glob paths - match_policy: first-match wins, no-match, skip non-matching - escalation lifecycle: record, load, list, filter, resolve - record_resolutions: file paths, symbol paths, idempotency, multi-path - auto_apply: exact replay, commutativity, applied_count, disk write - auto_apply symbol paths: record, replay, partial resolution - path traversal guard: '../', symbol+'../', absolute paths - one-sided deletion: ours missing, theirs missing, both missing - semantic plugin: cross-content replay, distinct fingerprints no cross-replay - MergeState: original_conflict_paths through 1/2/3-step resolution - End-to-end integration flows: full lifecycle, gc, policy, escalation, clear - AgentProvenance: human/agent round-trip, missing fields

sha256:504d361df4841c9944cb69f89914fa3342ece1832c896d550a3bed8502a64c1c sha
+315 ~8 symbols
sha256:1a002a2d6faed9d0066b70edd683ec6b43dadf3134af0c1802fb6485f0c83a3c snapshot
+315
symbols added
~8
symbols modified
0
dead code introduced
Semantic Changes 323 symbols
~ tests/test_harmony_comprehensive.py .py 271 symbols added
+ TestAgentProvenance class class TestAgentProvenance L2216–2249
+ test_agent_provenance method method test_agent_provenance L2225–2229
+ test_agent_without_model method method test_agent_without_model L2243–2249
+ test_from_dict_missing_fields_defaults method method test_from_dict_missing_fields_defaults L2237–2241
+ test_human_provenance method method test_human_provenance L2217–2223
+ test_round_trip method method test_round_trip L2231–2235
+ TestAuditLog class class TestAuditLog L886–961
+ test_agent_provenance_in_audit method method test_agent_provenance_in_audit L926–932
+ test_append_and_list method method test_append_and_list L892–901
+ test_audit_is_append_only method method test_audit_is_append_only L918–924
+ test_different_event_types method method test_different_event_types L934–950
+ test_empty_store method method test_empty_store L889–890
+ test_limit_parameter method method test_limit_parameter L913–916
+ test_metadata_stored method method test_metadata_stored L952–961
+ test_multiple_entries_accumulate method method test_multiple_entries_accumulate L903–911
+ TestAutoApplyEmptyList class class TestAutoApplyEmptyList L1777–1785
+ test_empty_conflict_list method method test_empty_conflict_list L1778–1781
+ test_empty_list_no_patterns_recorded method method test_empty_list_no_patterns_recorded L1783–1785
+ TestAutoApplyExactReplay class class TestAutoApplyExactReplay L1435–1566
+ test_applied_count_incremented_on_replay method method test_applied_count_incremented_on_replay L1519–1533
+ test_commutative_replay method method test_commutative_replay L1475–1494
+ test_different_content_does_not_auto_resolve method method test_different_content_does_not_auto_resolve L1496–1517
+ test_multiple_replays_increment_count method method test_multiple_replays_increment_count L1535–1550
+ test_no_resolution_records_pattern_and_returns_remaining method method test_no_resolution_records_pattern_and_returns_remaining L1436–1450
+ test_resolves_file_to_disk method method test_resolves_file_to_disk L1552–1566
+ test_second_identical_conflict_auto_resolves method method test_second_identical_conflict_auto_resolves L1452–1473
+ TestAutoApplyOneWayDeletion class class TestAutoApplyOneWayDeletion L1747–1769
+ test_both_missing method method test_both_missing L1764–1769
+ test_ours_missing_from_manifest method method test_ours_missing_from_manifest L1748–1754
+ test_theirs_missing_from_manifest method method test_theirs_missing_from_manifest L1756–1762
+ TestAutoApplyPathTraversal class class TestAutoApplyPathTraversal L1684–1739
+ test_absolute_path_skipped method method test_absolute_path_skipped L1712–1723
+ test_legitimate_nested_path_not_skipped method method test_legitimate_nested_path_not_skipped L1725–1739
+ test_symbol_traversal_skipped method method test_symbol_traversal_skipped L1699–1710
+ test_traversal_path_skipped method method test_traversal_path_skipped L1685–1697
+ TestAutoApplySemanticPlugin class class TestAutoApplySemanticPlugin L1793–1861
+ test_different_semantic_fingerprints_no_cross_replay method method test_different_semantic_fingerprints_no_cross_replay L1839–1861
+ test_semantic_plugin_enables_cross_content_replay method method test_semantic_plugin_enables_cross_content_replay L1801–1837
+ TestAutoApplySymbolPaths class class TestAutoApplySymbolPaths L1574–1676
+ test_first_symbol_conflict_records_pattern method method test_first_symbol_conflict_records_pattern L1575–1591
+ test_multiple_symbols_in_one_auto_apply method method test_multiple_symbols_in_one_auto_apply L1637–1654
+ test_partial_resolution_some_symbols_remain method method test_partial_resolution_some_symbols_remain L1656–1676
+ test_symbol_and_file_path_produce_distinct_patterns method method test_symbol_and_file_path_produce_distinct_patterns L1616–1635
+ test_symbol_conflict_replayed method method test_symbol_conflict_replayed L1593–1614
+ TestBestResolution class class TestBestResolution L711–771
+ test_prefers_higher_applied_count_as_tiebreaker method method test_prefers_higher_applied_count_as_tiebreaker L758–771
+ test_prefers_higher_confidence method method test_prefers_higher_confidence L745–756
+ test_prefers_human_verified_over_high_confidence method method test_prefers_human_verified_over_high_confidence L726–743
+ test_returns_none_when_no_resolutions method method test_returns_none_when_no_resolutions L712–715
+ test_returns_only_resolution method method test_returns_only_resolution L717–724
+ TestBlobFingerprint class class TestBlobFingerprint L262–289
+ test_commutative method method test_commutative L270–273
+ test_different_pairs_produce_different_fingerprints method method test_different_pairs_produce_different_fingerprints L280–283
+ test_returns_hex64 method method test_returns_hex64 L263–268
+ test_same_id_both_sides method method test_same_id_both_sides L285–289
+ test_stable method method test_stable L275–278
+ TestClearAll class class TestClearAll L529–547
+ test_clears_all_patterns method method test_clears_all_patterns L533–538
+ test_clears_patterns_with_resolutions method method test_clears_patterns_with_resolutions L540–547
+ test_empty_store method method test_empty_store L530–531
+ TestComputePatternId class class TestComputePatternId L297–351
+ test_blob_fp_irrelevant_when_semantic_fp_differs method method test_blob_fp_irrelevant_when_semantic_fp_differs L321–336
+ test_blob_fp_sensitive_when_no_semantic_plugin method method test_blob_fp_sensitive_when_no_semantic_plugin L313–319
+ test_path_sensitive method method test_path_sensitive L308–311
+ test_returns_hex64 method method test_returns_hex64 L298–300
+ test_semantic_fp_sensitive method method test_semantic_fp_sensitive L338–343
+ test_stable method method test_stable L302–306
+ test_symbol_path_distinct_from_file_path method method test_symbol_path_distinct_from_file_path L345–351
+ TestComputeSemanticFingerprint class class TestComputeSemanticFingerprint L359–403
+ test_bad_length_plugin_falls_back_to_blob method method test_bad_length_plugin_falls_back_to_blob L389–395
+ test_commutative_no_plugin method method test_commutative_no_plugin L366–371
+ test_harmony_plugin_used_when_available method method test_harmony_plugin_used_when_available L373–379
+ test_no_plugin_returns_blob_fingerprint method method test_no_plugin_returns_blob_fingerprint L360–364
+ test_path_does_not_affect_blob_fallback method method test_path_does_not_affect_blob_fallback L397–403
+ test_throwing_plugin_falls_back_to_blob method method test_throwing_plugin_falls_back_to_blob L381–387
+ TestEndToEndIntegration class class TestEndToEndIntegration L2006–2208
+ test_clear_all_then_replay_learns_fresh method method test_clear_all_then_replay_learns_fresh L2162–2179
+ test_escalation_full_lifecycle method method test_escalation_full_lifecycle L2127–2160
+ test_full_exact_replay_cycle method method test_full_exact_replay_cycle L2009–2043
+ test_gc_clears_stale_unlearned_patterns method method test_gc_clears_stale_unlearned_patterns L2074–2093
+ test_multiple_resolutions_best_wins method method test_multiple_resolutions_best_wins L2181–2208
+ test_policy_takes_precedence_in_match method method test_policy_takes_precedence_in_match L2095–2125
+ test_symbol_path_full_cycle method method test_symbol_path_full_cycle L2045–2072
+ TestEscalationLifecycle class class TestEscalationLifecycle L1136–1229
+ _make_escalation method method _make_escalation L1137–1148
+ test_compute_escalation_id_deterministic method method test_compute_escalation_id_deterministic L1150–1153
+ test_compute_escalation_id_differs_on_different_inputs method method test_compute_escalation_id_differs_on_different_inputs L1155–1158
+ test_list_escalations_all method method test_list_escalations_all L1180–1184
+ test_list_escalations_empty method method test_list_escalations_empty L1177–1178
+ test_list_escalations_filter_by_status method method test_list_escalations_filter_by_status L1186–1205
+ test_load_missing_returns_none method method test_load_missing_returns_none L1174–1175
+ test_record_and_load method method test_record_and_load L1160–1167
+ test_record_idempotent method method test_record_idempotent L1169–1172
+ test_resolve_escalation method method test_resolve_escalation L1207–1223
+ test_resolve_missing_escalation_returns_false method method test_resolve_missing_escalation_returns_false L1225–1229
+ TestForgetPattern class class TestForgetPattern L502–521
+ test_forget_also_removes_resolutions method method test_forget_also_removes_resolutions L512–518
+ test_forget_existing method method test_forget_existing L503–507
+ test_forget_missing_returns_false method method test_forget_missing_returns_false L509–510
+ test_invalid_id_returns_false method method test_invalid_id_returns_false L520–521
+ TestGcStale class class TestGcStale L818–878
+ test_empty_store method method test_empty_store L819–820
+ test_keeps_pattern_with_resolution method method test_keeps_pattern_with_resolution L833–844
+ test_keeps_recent_pattern_without_resolution method method test_keeps_recent_pattern_without_resolution L846–852
+ test_removes_old_pattern_without_resolution method method test_removes_old_pattern_without_resolution L822–831
+ test_removes_only_old_stale_patterns method method test_removes_only_old_stale_patterns L854–878
+ TestIncrementAppliedCount class class TestIncrementAppliedCount L779–810
+ test_increments_from_zero method method test_increments_from_zero L780–791
+ test_increments_multiple_times method method test_increments_multiple_times L793–804
+ test_returns_false_for_missing_resolution method method test_returns_false_for_missing_resolution L806–810
+ TestListPatterns class class TestListPatterns L456–494
+ test_distinct_paths_produce_distinct_patterns method method test_distinct_paths_produce_distinct_patterns L473–494
+ test_empty_store method method test_empty_store L457–458
+ test_multiple_patterns method method test_multiple_patterns L467–471
+ test_one_pattern method method test_one_pattern L460–465
+ TestListResolutions class class TestListResolutions L648–703
+ test_empty method method test_empty L649–652
+ test_invalid_pattern_id_returns_empty method method test_invalid_pattern_id_returns_empty L702–703
+ test_single method method test_single L654–661
+ test_sorted_applied_count_descending_as_tiebreaker method method test_sorted_applied_count_descending_as_tiebreaker L688–700
+ test_sorted_confidence_descending method method test_sorted_confidence_descending L676–686
+ test_sorted_human_verified_first method method test_sorted_human_verified_first L663–674
+ TestMergeStateOriginalConflictPaths class class TestMergeStateOriginalConflictPaths L1869–1998
+ test_commit_pattern_uses_original_paths method method test_commit_pattern_uses_original_paths L1929–1959
+ test_original_paths_preserved_after_partial_resolution method method test_original_paths_preserved_after_partial_resolution L1885–1905
+ test_original_paths_preserved_when_all_resolved method method test_original_paths_preserved_when_all_resolved L1907–1927
+ test_three_path_stepwise_resolution method method test_three_path_stepwise_resolution L1961–1998
+ test_write_sets_original_conflict_paths method method test_write_sets_original_conflict_paths L1870–1883
+ TestPolicyCRUD class class TestPolicyCRUD L969–1022
+ test_list_empty method method test_list_empty L993–994
+ test_list_multiple method method test_list_multiple L996–999
+ test_list_sorted_by_scope_order method method test_list_sorted_by_scope_order L1009–1022
+ test_load_invalid_id_returns_none method method test_load_invalid_id_returns_none L981–982
+ test_load_missing_returns_none method method test_load_missing_returns_none L978–979
+ test_remove_existing method method test_remove_existing L1001–1004
+ test_remove_missing_returns_false method method test_remove_missing_returns_false L1006–1007
+ test_save_and_load method method test_save_and_load L970–976
+ test_save_overwrites_existing method method test_save_overwrites_existing L984–991
+ TestPolicyConditionMatching class class TestPolicyConditionMatching L1030–1128
+ _pattern method method _pattern L1033–1049
+ test_all_conditions_must_match method method test_all_conditions_must_match L1085–1092
+ test_all_none_matches_everything method method test_all_none_matches_everything L1051–1054
+ test_conflict_type_match method method test_conflict_type_match L1056–1058
+ test_conflict_type_no_match method method test_conflict_type_no_match L1060–1062
+ test_domain_match method method test_domain_match L1064–1066
+ test_domain_no_match method method test_domain_no_match L1068–1070
+ test_match_policy_returns_first_match method method test_match_policy_returns_first_match L1103–1110
+ test_match_policy_returns_none_when_no_match method method test_match_policy_returns_none_when_no_match L1112–1115
+ test_match_policy_returns_none_when_no_policies method method test_match_policy_returns_none_when_no_policies L1100–1101
+ test_match_policy_skips_non_matching method method test_match_policy_skips_non_matching L1117–1122
+ test_match_policy_symbol_path_glob method method test_match_policy_symbol_path_glob L1124–1128
+ test_min_confidence_not_checked_here method method test_min_confidence_not_checked_here L1094–1098
+ test_path_pattern_directory_glob method method test_path_pattern_directory_glob L1076–1079
+ test_path_pattern_exact_glob method method test_path_pattern_exact_glob L1072–1074
+ test_path_pattern_no_match method method test_path_pattern_no_match L1081–1083
+ TestRecordPatternAndLoad class class TestRecordPatternAndLoad L411–448
+ test_all_fields_round_trip method method test_all_fields_round_trip L441–448
+ test_load_invalid_id_returns_none method method test_load_invalid_id_returns_none L430–431
+ test_load_missing_returns_none method method test_load_missing_returns_none L427–428
+ test_record_idempotent method method test_record_idempotent L421–425
+ test_record_invalid_id_raises method method test_record_invalid_id_raises L433–439
+ test_record_then_load method method test_record_then_load L412–419
+ TestRecordResolutionsFilePaths class class TestRecordResolutionsFilePaths L1237–1340
+ test_idempotent_second_call method method test_idempotent_second_call L1290–1302
+ test_multiple_paths method method test_multiple_paths L1304–1323
+ test_records_pattern_and_resolution method method test_records_pattern_and_resolution L1238–1259
+ test_returns_only_saved_paths method method test_returns_only_saved_paths L1325–1340
+ test_skips_path_not_in_manifests method method test_skips_path_not_in_manifests L1261–1264
+ test_skips_when_ours_missing_from_manifest method method test_skips_when_ours_missing_from_manifest L1266–1272
+ test_skips_when_outcome_missing_from_new_manifest method method test_skips_when_outcome_missing_from_new_manifest L1282–1288
+ test_skips_when_theirs_missing_from_manifest method method test_skips_when_theirs_missing_from_manifest L1274–1280
+ TestRecordResolutionsSymbolPaths class class TestRecordResolutionsSymbolPaths L1348–1427
+ test_deeply_nested_symbol_path method method test_deeply_nested_symbol_path L1411–1427
+ test_multiple_symbols_same_file_produce_distinct_patterns method method test_multiple_symbols_same_file_produce_distinct_patterns L1369–1389
+ test_symbol_path_idempotent method method test_symbol_path_idempotent L1397–1409
+ test_symbol_path_missing_file_portion method method test_symbol_path_missing_file_portion L1391–1395
+ test_symbol_path_records_pattern method method test_symbol_path_records_pattern L1349–1367
+ TestSaveAndLoadResolution class class TestSaveAndLoadResolution L555–640
+ test_agent_provenance_round_trip method method test_agent_provenance_round_trip L611–640
+ test_load_missing_returns_none method method test_load_missing_returns_none L568–571
+ test_save_is_idempotent method method test_save_is_idempotent L573–586
+ test_save_requires_existing_pattern method method test_save_requires_existing_pattern L588–609
+ test_save_then_load method method test_save_then_load L556–566
+ _BadLengthPlugin class class _BadLengthPlugin L236–248
+ apply method method apply L244–244
+ conflict_fingerprint method method conflict_fingerprint L247–248
+ diff method method diff L242–242
+ drift method method drift L245–245
+ merge method method merge L243–243
+ schema method method schema L240–240
+ snapshot method method snapshot L241–241
+ _FakePlugin class class _FakePlugin L182–185
+ schema method method schema L185–185
+ _SemanticPlugin class class _SemanticPlugin L193–218
+ __init__ method method __init__ L201–202
+ apply method method apply L208–208
+ conflict_fingerprint method method conflict_fingerprint L211–218
+ diff method method diff L206–206
+ drift method method drift L209–209
+ merge method method merge L207–207
+ schema method method schema L204–204
+ snapshot method method snapshot L205–205
+ _ThrowingPlugin class class _ThrowingPlugin L221–233
+ apply method method apply L229–229
+ conflict_fingerprint method method conflict_fingerprint L232–233
+ diff method method diff L227–227
+ drift method method drift L230–230
+ merge method method merge L228–228
+ schema method method schema L225–225
+ snapshot method method snapshot L226–226
+ _hex64 function function _hex64 L82–84
+ _make_pattern function function _make_pattern L97–121
+ _make_policy function function _make_policy L154–179
+ _make_resolution function function _make_resolution L124–151
+ _noop function function _noop L188–190
+ _now function function _now L93–94
+ _sha256 function function _sha256 L78–79
+ _write_obj function function _write_obj L87–90
+ AgentProvenance import import AgentProvenance L24–24
+ AuditEventType import import AuditEventType L24–24
+ ConflictPattern import import ConflictPattern L24–24
+ ConflictType import import ConflictType L24–24
+ EscalationRecord import import EscalationRecord L24–24
+ EscalationStatus import import EscalationStatus L24–24
+ HarmonyPlugin import import HarmonyPlugin L70–70
+ Manifest import import Manifest L69–69
+ Policy import import Policy L24–24
+ PolicyAction import import PolicyAction L24–24
+ PolicyCondition import import PolicyCondition L24–24
+ PolicyScope import import PolicyScope L24–24
+ Resolution import import Resolution L24–24
+ ResolutionStrategy import import ResolutionStrategy L24–24
+ annotations import import annotations L15–15
+ append_audit import import append_audit L24–24
+ auto_apply import import auto_apply L24–24
+ best_resolution import import best_resolution L24–24
+ blob_fingerprint import import blob_fingerprint L24–24
+ clear_all import import clear_all L24–24
+ compute_escalation_id import import compute_escalation_id L24–24
+ compute_pattern_id import import compute_pattern_id L24–24
+ compute_resolution_id import import compute_resolution_id L24–24
+ compute_semantic_fingerprint import import compute_semantic_fingerprint L24–24
+ datetime import import datetime L17–17
+ forget_pattern import import forget_pattern L24–24
+ gc_stale import import gc_stale L24–24
+ h import import h L23–23
+ hashlib import import hashlib L18–18
+ increment_applied_count import import increment_applied_count L24–24
+ list_audit import import list_audit L24–24
+ list_escalations import import list_escalations L24–24
+ list_patterns import import list_patterns L24–24
+ list_policies import import list_policies L24–24
+ list_resolutions import import list_resolutions L24–24
+ load_escalation import import load_escalation L24–24
+ load_pattern import import load_pattern L24–24
+ load_policy import import load_policy L24–24
+ load_resolution import import load_resolution L24–24
+ match_policy import import match_policy L24–24
+ pathlib import import pathlib L19–19
+ pytest import import pytest L21–21
+ read_merge_state import import read_merge_state L67–67
+ record_escalation import import record_escalation L24–24
+ record_pattern import import record_pattern L24–24
+ record_resolutions import import record_resolutions L24–24
+ remove_policy import import remove_policy L24–24
+ resolve_escalation import import resolve_escalation L24–24
+ save_policy import import save_policy L24–24
+ save_resolution import import save_resolution L24–24
+ write_merge_state import import write_merge_state L67–67
+ write_object import import write_object L68–68
+ repo function function repo L252–254
~ tests/test_harmony_integration.py .py 44 symbols added
+ TestAutoApplyPathTraversal class class TestAutoApplyPathTraversal L386–411
+ test_symbol_traversal_skipped method method test_symbol_traversal_skipped L400–411
+ test_traversal_path_skipped method method test_traversal_path_skipped L387–398
+ TestAutoApplySymbolPaths class class TestAutoApplySymbolPaths L282–378
+ test_auto_apply_file_path_still_works method method test_auto_apply_file_path_still_works L355–378
+ test_auto_apply_replays_symbol_resolution method method test_auto_apply_replays_symbol_resolution L312–353
+ test_auto_apply_with_symbol_path_records_pattern method method test_auto_apply_with_symbol_path_records_pattern L285–310
+ TestComputeSemanticFingerprint class class TestComputeSemanticFingerprint L79–104
+ test_commutative method method test_commutative L87–93
+ test_different_paths_different_fingerprints method method test_different_paths_different_fingerprints L95–104
+ test_no_plugin_returns_blob_fingerprint method method test_no_plugin_returns_blob_fingerprint L80–85
+ TestMergeStateOriginalConflictPaths class class TestMergeStateOriginalConflictPaths L419–565
+ test_commit_uses_original_conflict_paths_for_harmony method method test_commit_uses_original_conflict_paths_for_harmony L515–565
+ test_original_conflict_paths_preserved_after_all_resolved method method test_original_conflict_paths_preserved_after_all_resolved L487–513
+ test_original_conflict_paths_preserved_after_partial_resolution method method test_original_conflict_paths_preserved_after_partial_resolution L456–485
+ test_write_merge_state_sets_original_conflict_paths method method test_write_merge_state_sets_original_conflict_paths L433–454
+ TestRecordResolutionsFilePaths class class TestRecordResolutionsFilePaths L112–179
+ test_idempotent_second_call method method test_idempotent_second_call L165–179
+ test_records_pattern_and_resolution method method test_records_pattern_and_resolution L115–149
+ test_skips_path_not_in_manifests method method test_skips_path_not_in_manifests L151–163
+ TestRecordResolutionsSymbolPaths class class TestRecordResolutionsSymbolPaths L187–274
+ test_multiple_symbol_paths_same_file method method test_multiple_symbol_paths_same_file L232–260
+ test_symbol_path_no_file_portion_in_manifest method method test_symbol_path_no_file_portion_in_manifest L262–274
+ test_symbol_path_records_pattern method method test_symbol_path_records_pattern L196–230
+ _FakePlugin class class _FakePlugin L61–64
+ schema method method schema L64–64
+ _fake_object_id function function _fake_object_id L49–51
+ _write_fake_object function function _write_fake_object L54–58
+ Manifest import import Manifest L41–41
+ annotations import import annotations L22–22
+ auto_apply import import auto_apply L31–31
+ blob_fingerprint import import blob_fingerprint L31–31
+ compute_pattern_id import import compute_pattern_id L31–31
+ compute_semantic_fingerprint import import compute_semantic_fingerprint L31–31
+ h import import h L30–30
+ hashlib import import hashlib L24–24
+ list_patterns import import list_patterns L31–31
+ list_resolutions import import list_resolutions L31–31
+ pathlib import import pathlib L25–25
+ pytest import import pytest L28–28
+ record_resolutions import import record_resolutions L31–31
+ tempfile import import tempfile L26–26
+ write_object import import write_object L40–40
+ repo function function repo L68–71
~ muse/cli/commands/commit.py .py 1 symbol modified
~ run
← Older Oldest on task/harmony-tdd-bug-fixes
All commits
Newer → Latest on task/harmony-tdd-bug-fixes

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:504d361df4841c9944cb69f89914fa3342ece1832c896d550a3bed8502a64c1c --body "your comment"