gabriel / muse public
fix BREAKING main #5 / 57
AI Agent gabriel · 20 days ago · Jun 28, 2026 · Diff

fix: complete merge — include all dev files missing from merge commit

The merge commit missed 21 new files and 16 modified files from dev because muse resolve + commit only applied the conflict-resolved file (pyproject.toml) without staging the rest of the working tree changes. This commit adds the missing files to bring main into parity with dev.

sha256:fe3a3f7ad220f1dd8d13a946e7bc9c84988ad5908b011c98edc688ded4c8bbc4 sha
+813 ~189 −1 symbols
sha256:96e7e180a05dd6b0740f3837335bba9c5fbbba8899f2467f2bb5e3d9042095a0 snapshot
+813
symbols added
~189
symbols modified
−1
symbol removed
0
dead code introduced
Semantic Changes 1003 symbols
~ docs/issues/branch-reflog-parity.md .md 17 symbols added
+ muse branch -c / -m — reflog parity with git for copy and rename section muse branch -c / -m — reflog parity with git for copy and rename L1–165
+ Acceptance Criteria section Acceptance Criteria L151–159
+ Background section Background L3–29
+ Clarification: -c does not check out section Clarification: -c does not check out L25–29
+ What git branch -c does that muse does not section What git branch -c does that muse does not L7–16
+ What git branch -m does that muse does not section What git branch -m does that muse does not L16–25
+ Goal section Goal L29–39
+ Out of Scope section Out of Scope L159–165
+ Phases section Phases L39–151
+ Phase 1 — muse branch -c/-C: copy the reflog section Phase 1 — muse branch -c/-C: copy the reflog L41–78
+ code variable variable code L47–61
+ Phase 2 — muse branch -m/-M: move the reflog section Phase 2 — muse branch -m/-M: move the reflog L78–119
+ code@L84 variable variable code@L84 L84–94
+ code@L97 variable variable code@L97 L97–101
+ Phase 3 — muse branch operation entry standardisation section Phase 3 — muse branch operation entry standardisation L119–151
+ table@L125 section table@L125 L125–132
+ table@L135 section table@L135 L135–140
~ docs/issues/code-test-deep-dive.md .md 14 symbols added
+ muse code test — Implementation Audit, Cache Behavior, and Documentation section muse code test — Implementation Audit, Cache Behavior, and Documentation L1–130
+ Acceptance Criteria section Acceptance Criteria L118–125
+ Background section Background L3–15
+ Goal section Goal L25–34
+ Out of Scope section Out of Scope L125–130
+ Phases section Phases L34–118
+ Phase 1 — Audit and document the cache invalidation rules section Phase 1 — Audit and document the cache invalidation rules L36–47
+ Phase 2 — Fix the cold-path UX (progress feedback) section Phase 2 — Fix the cold-path UX (progress feedback) L47–59
+ Phase 3 — Fill invalidation test gaps section Phase 3 — Fill invalidation test gaps L59–73
+ Phase 4 — muse code test --cache-status flag section Phase 4 — muse code test --cache-status flag L73–107
+ code variable variable code L79–82
+ code[json] variable variable code[json] L85–97
+ Phase 5 — User-facing documentation section Phase 5 — User-facing documentation L107–118
+ Problem Statement section Problem Statement L15–25
+ muse mist read: owner/ID form sends request to wrong API path section muse mist read: owner/ID form sends request to wrong API path L1–129
+ Acceptance criteria section Acceptance criteria L115–123
+ Background section Background L3–29
+ code variable variable code L21–24
+ code[python] variable variable code[python] L12–16
+ Goal section Goal L47–52
+ Out of scope section Out of scope L123–129
+ Phases section Phases L52–115
+ Phase 1 — Fix run_read section Phase 1 — Fix run_read L54–72
+ Deliverable section Deliverable L58–72
+ Phase 2 — Fix the misleading 404 error message section Phase 2 — Fix the misleading 404 error message L72–87
+ Deliverable section Deliverable L78–87
+ Phase 3 — Tests section Phase 3 — Tests L87–108
+ Deliverables section Deliverables L92–108
+ Phase 4 — Staging smoke section Phase 4 — Staging smoke L108–115
+ Root cause section Root cause L29–47
+ table section table L35–43
~ docs/issues/push-refspec-syntax.md .md 20 symbols added
+ push: refspec syntax local:remote for cross-branch pushes section push: refspec syntax local:remote for cross-branch pushes L1–153
+ Acceptance criteria section Acceptance criteria L137–147
+ Background section Background L3–15
+ Goal section Goal L15–36
+ code[bash]@L17 variable variable code[bash]@L17 L17–28
+ code[bash]@L32 variable variable code[bash]@L32 L32–35
+ How git does it section How git does it L36–51
+ Implementation section Implementation L51–86
+ JSON output section JSON output L80–86
+ Push command wiring section Push command wiring L72–80
+ Refspec parsing section Refspec parsing L53–72
+ table section table L59–68
+ Out of scope section Out of scope L147–153
+ Phases section Phases L86–137
+ Phase 1 — Refspec parser + unit tests section Phase 1 — Refspec parser + unit tests L88–104
+ Deliverables section Deliverables L93–104
+ Phase 2 — Wire into push command + integration tests section Phase 2 — Wire into push command + integration tests L104–125
+ Deliverables section Deliverables L109–125
+ Phase 3 — Docs section Phase 3 — Docs L125–137
+ Deliverables section Deliverables L130–137
~ docs/issues/reflog-complete.md .md 20 symbols added
+ muse reflog — Complete Coverage, Lifecycle Management, and @{N} Resolution section muse reflog — Complete Coverage, Lifecycle Management, and @{N} Resolution L1–227
+ Acceptance Criteria section Acceptance Criteria L209–220
+ Background section Background L3–15
+ Goal section Goal L15–24
+ Out of Scope section Out of Scope L220–227
+ Phases section Phases L24–209
+ Phase 1 — Close coverage gaps (pull and shelf) section Phase 1 — Close coverage gaps (pull and shelf) L26–42
+ Phase 2 — muse reflog expire subcommand section Phase 2 — muse reflog expire subcommand L42–86
+ code variable variable code L55–58
+ code[json] variable variable code[json] L61–71
+ Phase 3 — muse reflog delete subcommand section Phase 3 — muse reflog delete subcommand L86–121
+ code variable variable code L92–96
+ code[json] variable variable code[json] L99–108
+ Phase 4 — GC integration section Phase 4 — GC integration L121–135
+ Phase 5 — @{N} ref resolution section Phase 5 — @{N} ref resolution L135–175
+ table@L141 section table@L141 L141–146
+ table@L153 section table@L153 L153–160
+ Phase 6 — muse reflog exists subcommand section Phase 6 — muse reflog exists subcommand L175–209
+ code variable variable code L181–184
+ code[json] variable variable code[json] L189–198
~ docs/issues/reflog-long-ids.md .md 8 symbols added
+ muse reflog — use long IDs in human text output section muse reflog — use long IDs in human text output L1–70
+ Deliverables section Deliverables L53–66
+ Fix section Fix L37–53
+ code variable variable code L49–52
+ Out of scope section Out of scope L66–70
+ Problem section Problem L3–37
+ code variable variable code L20–23
+ code[python] variable variable code[python] L8–17
+ muse shelf: resolve created_by from user identity instead of hardcoding "human" section muse shelf: resolve created_by from user identity instead of hardcoding "human" L1–85
+ Acceptance criteria section Acceptance criteria L69–80
+ Background section Background L3–21
+ Goal section Goal L21–33
+ Out of scope section Out of scope L80–85
+ Phases section Phases L33–69
+ Phase 1 — Extract a helper section Phase 1 — Extract a helper L35–48
+ Phase 2 — Wire into run_save section Phase 2 — Wire into run_save L48–61
+ Phase 3 — Wire into autoshelf call sites section Phase 3 — Wire into autoshelf call sites L61–69
+ muse shelf read — UX fixes and files list bug section muse shelf read — UX fixes and files list bug L1–76
+ Acceptance criteria section Acceptance criteria L63–71
+ Background section Background L3–20
+ Goal section Goal L20–29
+ Out of scope section Out of scope L71–76
+ Phases section Phases L29–63
+ Phase 1 — Fix files list bug section Phase 1 — Fix files list bug L31–44
+ Phase 2 — Pretty-print help JSON schemas section Phase 2 — Pretty-print help JSON schemas L44–54
+ Phase 3 — Document bare muse shelf and custom names section Phase 3 — Document bare muse shelf and custom names L54–63
~ docs/issues/symlog.md .md 27 symbols added
+ muse symlog — Live Per-Symbol Journal section muse symlog — Live Per-Symbol Journal L1–479
+ Acceptance criteria section Acceptance criteria L453–469
+ Background section Background L3–28
+ Why git genuinely cannot do this section Why git genuinely cannot do this L19–28
+ Entry format section Entry format L62–89
+ code@L64 variable variable code@L64 L64–67
+ code@L75 variable variable code@L75 L75–88
+ Goal section Goal L28–44
+ Out of scope section Out of scope L469–479
+ Phases section Phases L89–453
+ py) section Phase 1 — Core storage layer (muse/core/symlog.py) L93–147
+ code[python] variable variable code[python] L100–111
+ Phase 2 — Commit integration section Phase 2 — Commit integration L147–211
+ code variable variable code L155–171
+ Phase 3 — muse symlog read CLI section Phase 3 — muse symlog read CLI L211–299
+ code variable variable code L246–260
+ code[json] variable variable code[json] L218–241
+ Phase 4 — Lifecycle management section Phase 4 — Lifecycle management L299–369
+ code variable variable code L307–316
+ code[json]@L319 variable variable code[json]@L319 L319–329
+ code[json]@L332 variable variable code[json]@L332 L332–341
+ Phase 5 — @{N} ref resolution for symbols section Phase 5 — @{N} ref resolution for symbols L369–453
+ code[bash] variable variable code[bash] L386–399
+ code[json] variable variable code[json] L402–414
+ table section table L378–383
+ Storage layout section Storage layout L44–62
+ code variable variable code L46–57
~ muse/cli/commands/symlog.py .py 43 symbols added
+ _ExistsJson class class _ExistsJson L130–133
+ _NULL_NEW_LABEL variable variable _NULL_NEW_LABEL L140–140
+ _NULL_OLD_LABEL variable variable _NULL_OLD_LABEL L141–141
+ _SymlogAllJson class class _SymlogAllJson L125–127
+ _SymlogEntryJson class class _SymlogEntryJson L98–108
+ _SymlogFileJson class class _SymlogFileJson L119–122
+ _SymlogResultJson class class _SymlogResultJson L111–116
+ _apply_filters function function _apply_filters L300–325
+ _compute_diff function function _compute_diff L211–297
+ _entries_to_json function function _entries_to_json L328–356
+ _fmt_cid function function _fmt_cid L144–148
+ _fmt_entry_text function function _fmt_entry_text L151–162
+ _parse_date function function _parse_date L165–176
+ _read_with_follow function function _read_with_follow L359–400
+ _validate_symbol_addr function function _validate_symbol_addr L179–208
+ EnvelopeJson import import EnvelopeJson L75–75
+ ExitCode import import ExitCode L76–76
+ NULL_CONTENT_ID import import NULL_CONTENT_ID L78–78
+ SymlogEntry import import SymlogEntry L78–78
+ TypedDict import import TypedDict L73–73
+ annotations import import annotations L65–65
+ argparse import import argparse L67–67
+ clamp_int import import clamp_int L89–89
+ datetime import import datetime L68–68
+ difflib import import difflib L69–69
+ is_null_content_id import import is_null_content_id L78–78
+ json import import json L70–70
+ list_symlog_symbols import import list_symlog_symbols L78–78
+ list_symlog_symbols_for_file import import list_symlog_symbols_for_file L78–78
+ logging import import logging L71–71
+ long_id import import long_id L88–88
+ make_envelope import import make_envelope L75–75
+ read_symlog import import read_symlog L78–78
+ require_repo import import require_repo L77–77
+ sanitize_display import import sanitize_display L89–89
+ short_id import import short_id L88–88
+ start_timer import import start_timer L87–87
+ symlog_path import import symlog_path L78–78
+ sys import import sys L72–72
+ logger variable variable logger L91–91
+ register function function register L408–466
+ run function function run L523–691
+ run_exists function function run_exists L474–515
~ muse/core/symlog.py .py 40 symbols added
+ NULL_CONTENT_ID variable variable NULL_CONTENT_ID L98–98
+ SymbolDiff class class SymbolDiff L596–608
+ SymlogEntry class class SymlogEntry L154–173
+ __post_init__ method method __post_init__ L171–173
+ _BORN_FROM_RE variable variable _BORN_FROM_RE L108–108
+ _MAX_SYMLOG_BYTES variable variable _MAX_SYMLOG_BYTES L102–102
+ _SAFE_CHARS variable variable _SAFE_CHARS L105–105
+ _addr_from_path function function _addr_from_path L228–235
+ _decode_symbol_name function function _decode_symbol_name L125–127
+ _encode_symbol_name function function _encode_symbol_name L120–122
+ _extract_body_hashes function function _extract_body_hashes L714–742
+ _make_entry function function _make_entry L176–192
+ _parse_line function function _parse_line L286–319
+ _reject_traversal function function _reject_traversal L130–136
+ _sanitize_author function function _sanitize_author L139–141
+ _sanitize_operation function function _sanitize_operation L144–146
+ _write_symlogs function function _write_symlogs L745–864
+ append_symlog function function append_symlog L242–279
+ compute_symbol_diff function function compute_symbol_diff L611–672
+ delete_symlog_entry function function delete_symlog_entry L521–588
+ expire_symlog function function expire_symlog L438–514
+ extract_symbols function function extract_symbols L675–711
+ DEFAULT_HASH_ALGO import import DEFAULT_HASH_ALGO L88–88
+ _field import import _field L85–85
+ _symlogs_dir import import _symlogs_dir L87–87
+ annotations import import annotations L76–76
+ dataclass class import dataclass L85–85
+ datetime import import datetime L78–78
+ logging import import logging L79–79
+ os import import os L80–80
+ pathlib import import pathlib L81–81
+ re import import re L82–82
+ tempfile import import tempfile L83–83
+ parse import import urllib.parse L84–84
+ is_null_content_id function function is_null_content_id L115–117
+ list_symlog_symbols function function list_symlog_symbols L392–407
+ list_symlog_symbols_for_file function function list_symlog_symbols_for_file L410–431
+ logger variable variable logger L90–90
+ read_symlog function function read_symlog L326–385
+ symlog_path function function symlog_path L199–225
~ tests/test_cmd_commit_symlog.py .py 56 symbols added
+ TestComputeSymbolDiff class class TestComputeSymbolDiff L140–222
+ test_created_symbols method method test_created_symbols L145–152
+ test_deleted_symbols method method test_deleted_symbols L154–160
+ test_mixed_operations method method test_mixed_operations L199–214
+ test_modified_symbols method method test_modified_symbols L162–168
+ test_rename_detection method method test_rename_detection L179–189
+ test_rename_with_content_change_is_not_a_rename method method test_rename_with_content_change_is_not_a_rename L191–197
+ test_returns_symbol_diff_dataclass class method test_returns_symbol_diff_dataclass L216–222
+ test_unchanged_symbols_not_in_diff method method test_unchanged_symbols_not_in_diff L170–177
+ TestExtractSymbols class class TestExtractSymbols L79–132
+ test_multiple_symbols method method test_multiple_symbols L111–132
+ test_returns_empty_for_non_code_file method method test_returns_empty_for_non_code_file L94–104
+ test_returns_empty_for_unknown_object_id method method test_returns_empty_for_unknown_object_id L106–109
+ test_returns_symbol_name_to_content_id_map method method test_returns_symbol_name_to_content_id_map L80–92
+ TestIntegrationRenameFollow class class TestIntegrationRenameFollow L486–516
+ test_rename_follow_traverses_chain method method test_rename_follow_traverses_chain L487–516
+ TestIntegrationTwoCommitSequence class class TestIntegrationTwoCommitSequence L419–478
+ test_create_modify_delete_sequence method method test_create_modify_delete_sequence L420–478
+ TestSymlogCreated class class TestSymlogCreated L249–284
+ test_all_new_symbols_get_created_entries method method test_all_new_symbols_get_created_entries L270–284
+ test_created_entry_has_correct_author method method test_created_entry_has_correct_author L262–268
+ test_new_symbol_gets_created_entry method method test_new_symbol_gets_created_entry L250–260
+ TestSymlogDeleted class class TestSymlogDeleted L335–354
+ test_deleted_symbol_gets_deleted_entry method method test_deleted_symbol_gets_deleted_entry L336–354
+ TestSymlogInitialCommit class class TestSymlogInitialCommit L395–411
+ test_initial_commit_all_symbols_created method method test_initial_commit_all_symbols_created L396–411
+ TestSymlogModified class class TestSymlogModified L292–327
+ test_modified_entry_contains_commit_message method method test_modified_entry_contains_commit_message L307–316
+ test_modified_entry_has_correct_commit_id method method test_modified_entry_has_correct_commit_id L318–327
+ test_modified_symbol_gets_modified_entry method method test_modified_symbol_gets_modified_entry L293–305
+ TestSymlogRenamed class class TestSymlogRenamed L362–387
+ test_rename_writes_two_entries method method test_rename_writes_two_entries L363–387
+ TestWriteSymlogsNonFatal class class TestWriteSymlogsNonFatal L230–241
+ test_commit_returns_commit_id method method test_commit_returns_commit_id L237–241
+ test_commit_succeeds_even_with_no_code_files method method test_commit_succeeds_even_with_no_code_files L231–235
+ _commit function function _commit L55–66
+ _init_repo function function _init_repo L44–46
+ _invoke function function _invoke L35–41
+ _make_repo function function _make_repo L69–71
+ _write_file function function _write_file L49–52
+ CliRunner import import CliRunner L15–15
+ NULL_CONTENT_ID import import NULL_CONTENT_ID L18–18
+ SymbolDiff import import SymbolDiff L18–18
+ annotations import import annotations L6–6
+ compute_symbol_diff import import compute_symbol_diff L18–18
+ extract_symbols import import extract_symbols L18–18
+ hash_blob import import hash_blob L17–17
+ is_null_content_id import import is_null_content_id L18–18
+ json import import json L8–8
+ list_symlog_symbols_for_file import import list_symlog_symbols_for_file L18–18
+ os import import os L9–9
+ pathlib import import pathlib L10–10
+ pytest import import pytest L13–13
+ read_symlog import import read_symlog L18–18
+ textwrap import import textwrap L11–11
+ runner variable variable runner L28–28
~ tests/test_cmd_gc_reflog.py .py 38 symbols added
+ TestGcReflogDryRun class class TestGcReflogDryRun L177–238
+ test_dry_run_branch_log_untouched method method test_dry_run_branch_log_untouched L226–238
+ test_dry_run_does_not_delete_log_entries method method test_dry_run_does_not_delete_log_entries L198–211
+ test_dry_run_does_not_remove_log_file method method test_dry_run_does_not_remove_log_file L213–224
+ test_dry_run_reports_reflog_expired method method test_dry_run_reports_reflog_expired L180–196
+ TestGcReflogExpired class class TestGcReflogExpired L87–170
+ test_gc_expires_branch_logs_too method method test_gc_expires_branch_logs_too L133–144
+ test_json_output_has_reflog_expired_field method method test_json_output_has_reflog_expired_field L90–101
+ test_old_entries_counted_in_reflog_expired method method test_old_entries_counted_in_reflog_expired L103–119
+ test_recent_entries_not_expired method method test_recent_entries_not_expired L121–131
+ test_reflog_expire_days_config_respected method method test_reflog_expire_days_config_respected L156–170
+ test_reflog_expired_zero_when_no_log_files method method test_reflog_expired_zero_when_no_log_files L146–154
+ TestGcReflogIntegration class class TestGcReflogIntegration L245–316
+ test_all_old_entries_removed_file_deleted method method test_all_old_entries_removed_file_deleted L265–272
+ test_branch_old_entries_removed_after_gc method method test_branch_old_entries_removed_after_gc L274–288
+ test_exact_counts_from_100_entry_log method method test_exact_counts_from_100_entry_log L290–304
+ test_gc_output_without_json_flag_mentions_reflog method method test_gc_output_without_json_flag_mentions_reflog L306–316
+ test_old_head_entries_removed_after_gc method method test_old_head_entries_removed_after_gc L248–263
+ _DAY variable variable _DAY L26–26
+ _branch_log function function _branch_log L58–59
+ _env function function _env L32–33
+ _head_log function function _head_log L54–55
+ _make_repo function function _make_repo L36–51
+ _now function function _now L71–72
+ _old_ts function function _old_ts L75–76
+ _recent_ts function function _recent_ts L79–80
+ _write_entries function function _write_entries L62–68
+ cli variable variable cli L24–24
+ CliRunner import import CliRunner L21–21
+ annotations import import annotations L11–11
+ fake_id import import fake_id L20–20
+ json import import json L13–13
+ logs_dir import import logs_dir L19–19
+ muse_dir import import muse_dir L19–19
+ pathlib import import pathlib L14–14
+ pytest import import pytest L17–17
+ time import import time L15–15
+ runner variable variable runner L23–23
~ tests/test_cmd_reflog_coverage.py .py 53 symbols added
+ TestPullReflogBootstrap class class TestPullReflogBootstrap L203–234
+ test_calls_append_reflog_on_bootstrap method method test_calls_append_reflog_on_bootstrap L206–234
+ TestPullReflogFastForward class class TestPullReflogFastForward L144–200
+ test_calls_append_reflog_on_fast_forward method method test_calls_append_reflog_on_fast_forward L147–175
+ test_operation_string_includes_remote_and_branch method method test_operation_string_includes_remote_and_branch L177–200
+ TestPullReflogMerge class class TestPullReflogMerge L237–288
+ test_calls_append_reflog_on_three_way_merge method method test_calls_append_reflog_on_three_way_merge L240–288
+ TestPullReflogNonFatal class class TestPullReflogNonFatal L362–393
+ test_ff_pull_completes_despite_reflog_error method method test_ff_pull_completes_despite_reflog_error L365–393
+ TestPullReflogNotCalled class class TestPullReflogNotCalled L291–355
+ test_no_reflog_on_dry_run method method test_no_reflog_on_dry_run L294–316
+ test_no_reflog_on_no_merge method method test_no_reflog_on_no_merge L318–341
+ test_no_reflog_when_already_up_to_date method method test_no_reflog_when_already_up_to_date L343–355
+ TestReflogIntegration class class TestReflogIntegration L535–649
+ test_ff_pull_old_and_new_ids_in_log method method test_ff_pull_old_and_new_ids_in_log L589–617
+ test_ff_pull_writes_branch_log_entry method method test_ff_pull_writes_branch_log_entry L565–587
+ test_ff_pull_writes_head_log_entry method method test_ff_pull_writes_head_log_entry L538–563
+ test_shelf_apply_writes_head_log_entry method method test_shelf_apply_writes_head_log_entry L629–637
+ test_shelf_pop_log_references_entry_name method method test_shelf_pop_log_references_entry_name L639–649
+ test_shelf_pop_writes_head_log_entry method method test_shelf_pop_writes_head_log_entry L619–627
+ TestShelfApplyReflog class class TestShelfApplyReflog L461–493
+ test_calls_append_reflog_on_apply method method test_calls_append_reflog_on_apply L464–471
+ test_entry_survives_after_apply method method test_entry_survives_after_apply L483–493
+ test_operation_string_contains_name method method test_operation_string_contains_name L473–481
+ TestShelfPopReflog class class TestShelfPopReflog L414–454
+ test_calls_append_reflog_on_pop method method test_calls_append_reflog_on_pop L417–424
+ test_new_id_is_current_head method method test_new_id_is_current_head L445–454
+ test_operation_string_contains_name method method test_operation_string_contains_name L426–434
+ test_reflog_branch_is_current_branch method method test_reflog_branch_is_current_branch L436–443
+ TestShelfReflogNonFatal class class TestShelfReflogNonFatal L500–528
+ test_shelf_apply_completes_despite_reflog_error method method test_shelf_apply_completes_despite_reflog_error L517–528
+ test_shelf_pop_completes_despite_reflog_error method method test_shelf_pop_completes_despite_reflog_error L503–515
+ _env function function _env L113–114
+ _make_next_commit function function _make_next_commit L77–110
+ _make_repo function function _make_repo L35–74
+ _make_shelf_repo function function _make_shelf_repo L400–411
+ _read_branch_log function function _read_branch_log L133–137
+ _read_head_log function function _read_head_log L126–130
+ _remote_info function function _remote_info L117–123
+ cli variable variable cli L29–29
+ CliRunner import import CliRunner L26–26
+ MagicMock import import MagicMock L20–20
+ annotations import import annotations L15–15
+ blob_id import import blob_id L25–25
+ call import import call L20–20
+ datetime import import datetime L17–17
+ json import import json L18–18
+ logs_dir import import logs_dir L24–24
+ muse_dir import import muse_dir L24–24
+ patch import import patch L20–20
+ pathlib import import pathlib L19–19
+ pytest import import pytest L22–22
+ runner variable variable runner L28–28
~ tests/test_cmd_reflog_delete.py .py 48 symbols added
+ TestDeleteAll class class TestDeleteAll L197–258
+ test_all_and_index_together_rejected method method test_all_and_index_together_rejected L244–248
+ test_all_flag_removes_every_entry method method test_all_flag_removes_every_entry L200–210
+ test_all_flag_removes_log_file method method test_all_flag_removes_log_file L212–219
+ test_all_on_branch_log method method test_all_on_branch_log L221–231
+ test_all_on_empty_log_is_graceful method method test_all_on_empty_log_is_graceful L233–242
+ test_muse_reflog_returns_empty_after_all_delete method method test_muse_reflog_returns_empty_after_all_delete L250–258
+ TestDeleteAtomic class class TestDeleteAtomic L319–343
+ test_no_tmp_files_left_on_success method method test_no_tmp_files_left_on_success L334–343
+ test_original_intact_when_replace_fails method method test_original_intact_when_replace_fails L322–332
+ TestDeleteByIndex class class TestDeleteByIndex L94–190
+ test_delete_by_branch_flag method method test_delete_by_branch_flag L149–166
+ test_delete_last_entry_removes_log_file method method test_delete_last_entry_removes_log_file L138–147
+ test_delete_middle_entry method method test_delete_middle_entry L168–178
+ test_delete_newest_entry method method test_delete_newest_entry L97–106
+ test_delete_oldest_entry method method test_delete_oldest_entry L180–190
+ test_json_schema_has_required_fields method method test_json_schema_has_required_fields L119–127
+ test_newest_entry_is_gone_after_delete method method test_newest_entry_is_gone_after_delete L108–117
+ test_ref_field_is_head_by_default method method test_ref_field_is_head_by_default L129–136
+ TestDeleteIntegration class class TestDeleteIntegration L350–403
+ test_branch_delete_does_not_touch_head_log method method test_branch_delete_does_not_touch_head_log L394–403
+ test_correct_entries_remain_after_middle_delete method method test_correct_entries_remain_after_middle_delete L353–370
+ test_entry_count_is_exact_after_delete method method test_entry_count_is_exact_after_delete L372–381
+ test_repeated_deletes_converge_to_empty method method test_repeated_deletes_converge_to_empty L383–392
+ TestDeleteOutOfBounds class class TestDeleteOutOfBounds L265–312
+ test_malformed_index_is_rejected method method test_malformed_index_is_rejected L305–312
+ test_no_log_file_gives_user_error method method test_no_log_file_gives_user_error L297–303
+ test_out_of_bounds_does_not_modify_log method method test_out_of_bounds_does_not_modify_log L287–295
+ test_out_of_bounds_exits_user_error method method test_out_of_bounds_exits_user_error L268–274
+ test_out_of_bounds_message_names_valid_range method method test_out_of_bounds_message_names_valid_range L276–285
+ _DAY variable variable _DAY L29–29
+ _branch_log function function _branch_log L61–62
+ _env function function _env L35–36
+ _head_log function function _head_log L57–58
+ _make_repo function function _make_repo L39–54
+ _read_operations function function _read_operations L84–87
+ _write_entries function function _write_entries L65–81
+ cli variable variable cli L27–27
+ CliRunner import import CliRunner L24–24
+ annotations import import annotations L14–14
+ fake_id import import fake_id L23–23
+ json import import json L16–16
+ logs_dir import import logs_dir L22–22
+ muse_dir import import muse_dir L22–22
+ patch import import patch L18–18
+ pathlib import import pathlib L17–17
+ pytest import import pytest L20–20
+ runner variable variable runner L26–26
~ tests/test_cmd_reflog_exists.py .py 39 symbols added
+ TestReflogExistsExitCode class class TestReflogExistsExitCode L235–307
+ test_empty_repo_always_exits_one method method test_empty_repo_always_exits_one L302–307
+ test_exit_code_matches_json_exists_field method method test_exit_code_matches_json_exists_field L287–300
+ test_exit_one_branch_missing method method test_exit_one_branch_missing L261–266
+ test_exit_one_when_no_entries method method test_exit_one_when_no_entries L246–251
+ test_exit_zero_branch_exists method method test_exit_zero_branch_exists L253–259
+ test_exit_zero_when_entries_exist method method test_exit_zero_when_entries_exist L238–244
+ test_text_output_reports_count method method test_text_output_reports_count L268–276
+ test_text_output_reports_no_entries method method test_text_output_reports_no_entries L278–285
+ TestReflogExistsFalse class class TestReflogExistsFalse L161–228
+ test_branch_ref_field_on_missing_branch_log method method test_branch_ref_field_on_missing_branch_log L218–228
+ test_json_exists_false_after_all_entries_deleted method method test_json_exists_false_after_all_entries_deleted L194–208
+ test_json_exists_false_when_branch_has_no_log method method test_json_exists_false_when_branch_has_no_log L177–192
+ test_json_exists_false_when_no_head_log method method test_json_exists_false_when_no_head_log L164–175
+ test_ref_field_is_head_when_no_log method method test_ref_field_is_head_when_no_log L210–216
+ TestReflogExistsTrue class class TestReflogExistsTrue L74–154
+ test_branch_log_exists_with_entries method method test_branch_log_exists_with_entries L120–131
+ test_branch_log_ref_field_uses_full_path method method test_branch_log_ref_field_uses_full_path L133–144
+ test_count_matches_actual_entry_count method method test_count_matches_actual_entry_count L111–118
+ test_json_exists_true_when_head_log_has_entries method method test_json_exists_true_when_head_log_has_entries L77–88
+ test_json_schema_has_all_required_fields method method test_json_schema_has_all_required_fields L90–100
+ test_ref_field_is_head_by_default method method test_ref_field_is_head_by_default L102–109
+ test_single_entry_reports_count_one method method test_single_entry_reports_count_one L146–154
+ _branch_log function function _branch_log L56–57
+ _env function function _env L30–31
+ _head_log function function _head_log L52–53
+ _make_repo function function _make_repo L34–49
+ _write_entries function function _write_entries L60–67
+ cli variable variable cli L24–24
+ CliRunner import import CliRunner L21–21
+ annotations import import annotations L11–11
+ fake_id import import fake_id L20–20
+ json import import json L13–13
+ logs_dir import import logs_dir L19–19
+ muse_dir import import muse_dir L19–19
+ pathlib import import pathlib L14–14
+ pytest import import pytest L17–17
+ time import import time L15–15
+ runner variable variable runner L23–23
~ tests/test_cmd_reflog_expire.py .py 54 symbols added
+ TestExpireAll class class TestExpireAll L172–212
+ test_all_flag_processes_all_branch_logs method method test_all_flag_processes_all_branch_logs L175–193
+ test_all_with_specific_branch_flag_is_rejected method method test_all_with_specific_branch_flag_is_rejected L208–212
+ test_refs_processed_lists_every_touched_ref method method test_refs_processed_lists_every_touched_ref L195–206
+ TestExpireAllEntriesGone class class TestExpireAllEntriesGone L419–465
+ test_branch_log_removed_when_all_entries_expire method method test_branch_log_removed_when_all_entries_expire L446–453
+ test_log_file_removed_when_all_entries_expire method method test_log_file_removed_when_all_entries_expire L422–429
+ test_muse_reflog_returns_empty_entries_after_full_expire method method test_muse_reflog_returns_empty_entries_after_full_expire L431–444
+ test_zero_byte_file_is_never_left_behind method method test_zero_byte_file_is_never_left_behind L455–465
+ TestExpireAtomic class class TestExpireAtomic L334–372
+ test_no_partial_tmp_file_survives_on_success method method test_no_partial_tmp_file_survives_on_success L362–372
+ test_original_log_intact_when_replace_fails method method test_original_log_intact_when_replace_fails L337–360
+ TestExpireBasic class class TestExpireBasic L97–165
+ test_json_schema_has_all_required_fields method method test_json_schema_has_all_required_fields L133–141
+ test_no_entries_expire_when_all_recent method method test_no_entries_expire_when_all_recent L143–154
+ test_no_log_file_is_graceful method method test_no_log_file_is_graceful L156–165
+ test_remaining_entries_are_the_recent_ones method method test_remaining_entries_are_the_recent_ones L118–131
+ test_removes_old_entries_from_head_log method method test_removes_old_entries_from_head_log L100–116
+ TestExpireConfigTTL class class TestExpireConfigTTL L270–327
+ test_config_expire_days_is_used_as_default method method test_config_expire_days_is_used_as_default L273–289
+ test_default_ttl_is_90_when_config_not_set method method test_default_ttl_is_90_when_config_not_set L306–316
+ test_explicit_flag_overrides_config method method test_explicit_flag_overrides_config L291–304
+ test_muse_config_get_returns_set_value method method test_muse_config_get_returns_set_value L318–327
+ TestExpireDryRun class class TestExpireDryRun L219–263
+ test_dry_run_all_does_not_modify_any_log method method test_dry_run_all_does_not_modify_any_log L249–263
+ test_dry_run_does_not_modify_log method method test_dry_run_does_not_modify_log L237–247
+ test_dry_run_reports_expired_count method method test_dry_run_reports_expired_count L222–235
+ TestExpireIntegration class class TestExpireIntegration L379–412
+ test_exactly_50_removed_from_100_entry_log method method test_exactly_50_removed_from_100_entry_log L382–396
+ test_remaining_entries_are_the_correct_ones method method test_remaining_entries_are_the_correct_ones L398–412
+ _DAY variable variable _DAY L34–34
+ _branch_log_path function function _branch_log_path L80–81
+ _env function function _env L40–41
+ _head_log_path function function _head_log_path L76–77
+ _make_repo function function _make_repo L44–59
+ _now_ts function function _now_ts L84–85
+ _old_ts function function _old_ts L88–90
+ _write_log_entries function function _write_log_entries L62–73
+ cli variable variable cli L32–32
+ CliRunner import import CliRunner L29–29
+ NULL_COMMIT_ID import import NULL_COMMIT_ID L28–28
+ annotations import import annotations L16–16
+ call import import call L23–23
+ datetime import import datetime L18–18
+ fake_id import import fake_id L28–28
+ json import import json L19–19
+ logs_dir import import logs_dir L27–27
+ muse_dir import import muse_dir L27–27
+ os import import os L20–20
+ patch import import patch L23–23
+ pathlib import import pathlib L21–21
+ pytest import import pytest L25–25
+ time import import time L22–22
+ runner variable variable runner L31–31
~ tests/test_cmd_symlog_read.py .py 74 symbols added
+ TestAddressValidation class class TestAddressValidation L589–611
+ test_empty_symbol_name_is_user_error method method test_empty_symbol_name_is_user_error L595–598
+ test_missing_separator_is_user_error method method test_missing_separator_is_user_error L590–593
+ test_path_traversal_is_user_error method method test_path_traversal_is_user_error L600–603
+ test_valid_address_does_not_error method method test_valid_address_does_not_error L605–611
+ TestAllMode class class TestAllMode L448–485
+ test_all_empty_repo method method test_all_empty_repo L481–485
+ test_all_returns_symbol_list method method test_all_returns_symbol_list L449–465
+ test_all_sorted method method test_all_sorted L467–479
+ TestAuthorFilter class class TestAuthorFilter L210–242
+ test_author_filter_case_insensitive method method test_author_filter_case_insensitive L233–242
+ test_author_filter_matches method method test_author_filter_matches L211–220
+ test_author_filter_no_match method method test_author_filter_no_match L222–231
+ TestDateFilters class class TestDateFilters L250–301
+ test_invalid_date_format_is_user_error method method test_invalid_date_format_is_user_error L295–301
+ test_since_after_until_is_user_error method method test_since_after_until_is_user_error L287–293
+ test_since_filters_old_entries method method test_since_filters_old_entries L251–261
+ test_since_includes_recent method method test_since_includes_recent L275–285
+ test_until_filters_future_entries method method test_until_filters_future_entries L263–273
+ TestDiffFlag class class TestDiffFlag L364–396
+ test_diff_absent_without_flag method method test_diff_absent_without_flag L387–396
+ test_diff_null_for_created_entry method method test_diff_null_for_created_entry L365–373
+ test_diff_present_for_modified_entry method method test_diff_present_for_modified_entry L375–385
+ TestExists class class TestExists L493–528
+ test_exists_exit_0_when_present method method test_exists_exit_0_when_present L512–517
+ test_exists_exit_1_when_absent method method test_exists_exit_1_when_absent L519–522
+ test_exists_false_when_no_entries method method test_exists_false_when_no_entries L504–510
+ test_exists_json_exit_code_field method method test_exists_json_exit_code_field L524–528
+ test_exists_true_when_entries_present method method test_exists_true_when_entries_present L494–502
+ TestFileMode class class TestFileMode L404–440
+ test_file_mode_each_symbol_has_schema method method test_file_mode_each_symbol_has_schema L426–434
+ test_file_mode_empty_path method method test_file_mode_empty_path L436–440
+ test_file_mode_returns_all_symbols method method test_file_mode_returns_all_symbols L405–424
+ TestFollow class class TestFollow L309–356
+ test_follow_includes_prior_symbol_entries method method test_follow_includes_prior_symbol_entries L317–332
+ test_follow_true_in_json method method test_follow_true_in_json L310–315
+ test_from_symbol_none_for_own_entries method method test_from_symbol_none_for_own_entries L347–356
+ test_from_symbol_populated_for_prior_entries method method test_from_symbol_populated_for_prior_entries L334–345
+ TestHumanText class class TestHumanText L536–581
+ test_human_text_created_shows_initial method method test_human_text_created_shows_initial L544–550
+ test_human_text_deleted_shows_deleted_label method method test_human_text_deleted_shows_deleted_label L552–566
+ test_human_text_header_line method method test_human_text_header_line L575–581
+ test_human_text_shows_at_n_prefix method method test_human_text_shows_at_n_prefix L537–542
+ test_human_text_shows_operation method method test_human_text_shows_operation L568–573
+ TestIntegrationFiltersAndFollow class class TestIntegrationFiltersAndFollow L619–705
+ test_follow_stitches_two_symbols_newest_first method method test_follow_stitches_two_symbols_newest_first L672–705
+ test_four_commit_filter_combination method method test_four_commit_filter_combination L620–670
+ TestJsonSchema class class TestJsonSchema L72–131
+ test_all_fields_present_on_empty_log method method test_all_fields_present_on_empty_log L73–87
+ test_content_ids_are_long_form method method test_content_ids_are_long_form L122–131
+ test_entry_schema_all_fields_present method method test_entry_schema_all_fields_present L89–106
+ test_followed_false_when_no_follow_flag method method test_followed_false_when_no_follow_flag L108–113
+ test_followed_true_when_follow_flag method method test_followed_true_when_follow_flag L115–120
+ TestLimit class class TestLimit L139–157
+ test_default_limit_is_20 method method test_default_limit_is_20 L154–157
+ test_limit_caps_entry_list method method test_limit_caps_entry_list L140–152
+ TestOperationFilter class class TestOperationFilter L165–202
+ test_operation_filter_case_insensitive method method test_operation_filter_case_insensitive L181–190
+ test_operation_filter_no_match method method test_operation_filter_no_match L192–202
+ test_operation_filter_substring method method test_operation_filter_substring L166–179
+ _commit function function _commit L45–55
+ _init_repo function function _init_repo L34–36
+ _invoke function function _invoke L25–31
+ _make_repo function function _make_repo L58–60
+ _symlog function function _symlog L63–64
+ _write_file function function _write_file L39–42
+ CliRunner import import CliRunner L15–15
+ annotations import import annotations L6–6
+ json import import json L8–8
+ os import import os L9–9
+ pathlib import import pathlib L10–10
+ pytest import import pytest L13–13
+ textwrap import import textwrap L11–11
+ runner variable variable runner L17–17
~ tests/test_core_symlog.py .py 95 symbols added
+ TestAppendSymlog class class TestAppendSymlog L187–289
+ test_author_newline_stripped method method test_author_newline_stripped L239–250
+ test_author_tab_stripped method method test_author_tab_stripped L252–262
+ test_creates_parent_dirs_and_file method method test_creates_parent_dirs_and_file L188–200
+ test_different_symbols_same_file_get_separate_files method method test_different_symbols_same_file_get_separate_files L277–289
+ test_line_format method method test_line_format L217–237
+ test_one_line_written_per_call method method test_one_line_written_per_call L202–215
+ test_operation_newline_stripped method method test_operation_newline_stripped L264–275
+ TestDeleteSymlogEntry class class TestDeleteSymlogEntry L545–612
+ _write_entries method method _write_entries L546–553
+ test_atomic_write_no_lock_file_left method method test_atomic_write_no_lock_file_left L599–604
+ test_delete_all_removes_file method method test_delete_all_removes_file L555–561
+ test_delete_index_zero_removes_newest method method test_delete_index_zero_removes_newest L563–572
+ test_delete_last_entry_removes_file method method test_delete_last_entry_removes_file L606–612
+ test_delete_middle_entry method method test_delete_middle_entry L574–582
+ test_missing_log_all_is_graceful method method test_missing_log_all_is_graceful L590–593
+ test_missing_log_by_index_raises method method test_missing_log_by_index_raises L595–597
+ test_out_of_bounds_raises_index_error method method test_out_of_bounds_raises_index_error L584–588
+ TestExpireSymlog class class TestExpireSymlog L479–537
+ _write_old method method _write_old L480–487
+ _write_recent method method _write_recent L489–495
+ test_all_expired_file_deleted method method test_all_expired_file_deleted L509–513
+ test_atomic_write method method test_atomic_write L522–529
+ test_dry_run_writes_nothing method method test_dry_run_writes_nothing L515–520
+ test_no_log_file_returns_zero_zero method method test_no_log_file_returns_zero_zero L497–499
+ test_old_entries_expired method method test_old_entries_expired L501–507
+ test_recent_entries_kept method method test_recent_entries_kept L531–537
+ TestIntegration class class TestIntegration L620–682
+ test_created_deleted_sentinel_fields method method test_created_deleted_sentinel_fields L665–682
+ test_five_entries_round_trip_newest_first method method test_five_entries_round_trip_newest_first L621–644
+ test_two_symbols_same_file_independent method method test_two_symbols_same_file_independent L646–663
+ TestListSymlogSymbols class class TestListSymlogSymbols L417–471
+ _write method method _write L418–424
+ test_empty_repo_returns_empty method method test_empty_repo_returns_empty L426–427
+ test_list_for_file_empty_dir_returns_empty method method test_list_for_file_empty_dir_returns_empty L460–462
+ test_list_for_file_returns_only_that_files_symbols method method test_list_for_file_returns_only_that_files_symbols L449–458
+ test_list_for_file_skips_symlinks method method test_list_for_file_skips_symlinks L464–471
+ test_returns_all_symbol_addresses_sorted method method test_returns_all_symbol_addresses_sorted L429–437
+ test_skips_symlinks method method test_skips_symlinks L439–447
+ TestNullContentId class class TestNullContentId L46–59
+ test_is_null_content_id_false_for_bare_zeros method method test_is_null_content_id_false_for_bare_zeros L57–59
+ test_is_null_content_id_false_for_real_id method method test_is_null_content_id_false_for_real_id L54–55
+ test_is_null_content_id_true method method test_is_null_content_id_true L51–52
+ test_null_content_id_format method method test_null_content_id_format L47–49
+ TestPathEncoding class class TestPathEncoding L137–179
+ test_colon_in_symbol_name_is_percent_encoded method method test_colon_in_symbol_name_is_percent_encoded L154–158
+ test_dotdot_in_file_path_raises method method test_dotdot_in_file_path_raises L160–162
+ test_dotdot_in_symbol_name_raises method method test_dotdot_in_symbol_name_raises L164–166
+ test_empty_symbol_name_raises method method test_empty_symbol_name_raises L172–174
+ test_missing_double_colon_raises method method test_missing_double_colon_raises L168–170
+ test_nested_path_maps_correctly method method test_nested_path_maps_correctly L143–145
+ test_plain_symbol_name_unchanged method method test_plain_symbol_name_unchanged L176–179
+ test_simple_symbol_maps_correctly method method test_simple_symbol_maps_correctly L138–141
+ test_special_chars_in_symbol_name_are_percent_encoded method method test_special_chars_in_symbol_name_are_percent_encoded L147–152
+ TestReadSymlog class class TestReadSymlog L297–409
+ _write_n_entries method method _write_n_entries L298–313
+ test_all_fields_round_trip method method test_all_fields_round_trip L334–351
+ test_born_from_parsed_on_read method method test_born_from_parsed_on_read L353–363
+ test_empty_log_returns_empty_list method method test_empty_log_returns_empty_list L315–317
+ test_entries_returned_newest_first method method test_entries_returned_newest_first L319–326
+ test_file_size_cap_warns_and_returns method method test_file_size_cap_warns_and_returns L384–400
+ test_follow_false_does_not_traverse method method test_follow_false_does_not_traverse L402–409
+ test_follow_traverses_rename_chain method method test_follow_traverses_rename_chain L365–382
+ test_limit_respected method method test_limit_respected L328–332
+ TestSymlogEntry class class TestSymlogEntry L67–129
+ _make_entry method method _make_entry L68–84
+ test_born_from_extracts_full_address method method test_born_from_extracts_full_address L126–129
+ test_born_from_none_for_regular_operation method method test_born_from_none_for_regular_operation L102–104
+ test_born_from_none_for_symbol_created method method test_born_from_none_for_symbol_created L111–116
+ test_born_from_none_for_symbol_renamed_to method method test_born_from_none_for_symbol_renamed_to L118–124
+ test_born_from_parsed_for_born_from_operation method method test_born_from_parsed_for_born_from_operation L106–109
+ test_frozen method method test_frozen L97–100
+ test_has_seven_fields method method test_has_seven_fields L86–95
+ _CID_A variable variable _CID_A L32–32
+ _CID_B variable variable _CID_B L33–33
+ _CID_C variable variable _CID_C L34–34
+ _CID_D variable variable _CID_D L35–35
+ _COMMIT_X variable variable _COMMIT_X L36–36
+ _COMMIT_Y variable variable _COMMIT_Y L37–37
+ _COMMIT_Z variable variable _COMMIT_Z L38–38
+ NULL_CONTENT_ID import import NULL_CONTENT_ID L18–18
+ SymlogEntry import import SymlogEntry L18–18
+ annotations import import annotations L6–6
+ append_symlog import import append_symlog L18–18
+ datetime import import datetime L8–8
+ delete_symlog_entry import import delete_symlog_entry L18–18
+ expire_symlog import import expire_symlog L18–18
+ is_null_content_id import import is_null_content_id L18–18
+ list_symlog_symbols import import list_symlog_symbols L18–18
+ list_symlog_symbols_for_file import import list_symlog_symbols_for_file L18–18
+ pathlib import import pathlib L9–9
+ pytest import import pytest L12–12
+ read_symlog import import read_symlog L18–18
+ symlog_path import import symlog_path L18–18
+ time import import time L10–10
~ tests/test_reflog_ref_resolution.py .py 61 symbols added
+ TestAtNOutOfRange class class TestAtNOutOfRange L332–379
+ test_branch_at_n_out_of_range method method test_branch_at_n_out_of_range L374–379
+ test_no_log_file_gives_user_error method method test_no_log_file_gives_user_error L366–372
+ test_out_of_range_error_mentions_valid_range method method test_out_of_range_error_mentions_valid_range L344–355
+ test_out_of_range_reset_exits_user_error method method test_out_of_range_reset_exits_user_error L357–364
+ test_out_of_range_rev_parse_exits_user_error method method test_out_of_range_rev_parse_exits_user_error L335–342
+ TestBranchAtN class class TestBranchAtN L277–325
+ test_branch_at_one_resolves_via_branch_log method method test_branch_at_one_resolves_via_branch_log L289–296
+ test_branch_at_zero_resolves_to_newest method method test_branch_at_zero_resolves_to_newest L280–287
+ test_head_log_and_branch_log_resolve_independently method method test_head_log_and_branch_log_resolve_independently L310–325
+ test_refs_heads_prefix_form_accepted method method test_refs_heads_prefix_form_accepted L298–308
+ TestDiffAtN class class TestDiffAtN L386–432
+ test_diff_at_one_head_exits_zero method method test_diff_at_one_head_exits_zero L389–396
+ test_diff_at_one_head_has_required_json_fields method method test_diff_at_one_head_has_required_json_fields L398–409
+ test_diff_at_one_head_shows_changes method method test_diff_at_one_head_shows_changes L411–421
+ test_diff_at_zero_head_is_empty method method test_diff_at_zero_head_is_empty L423–432
+ TestEndToEndRecovery class class TestEndToEndRecovery L439–495
+ test_message_at_restored_commit_is_correct method method test_message_at_restored_commit_is_correct L464–474
+ test_reset_at_one_restores_previous_commit method method test_reset_at_one_restores_previous_commit L442–462
+ test_rev_parse_after_reset_shows_old_id method method test_rev_parse_after_reset_shows_old_id L476–485
+ test_three_commit_chain_recovery method method test_three_commit_chain_recovery L487–495
+ TestReadAtN class class TestReadAtN L243–270
+ test_read_at_n_shows_correct_message method method test_read_at_n_shows_correct_message L264–270
+ test_read_at_two_shows_oldest_commit method method test_read_at_two_shows_oldest_commit L255–262
+ test_read_at_zero_shows_newest_commit method method test_read_at_zero_shows_newest_commit L246–253
+ TestResetAtN class class TestResetAtN L205–236
+ test_branch_ref_advances_after_reset method method test_branch_ref_advances_after_reset L226–236
+ test_reset_at_one_moves_to_second_commit method method test_reset_at_one_moves_to_second_commit L208–215
+ test_reset_at_two_moves_to_oldest_commit method method test_reset_at_two_moves_to_oldest_commit L217–224
+ TestResolveReflogRefUnit class class TestResolveReflogRefUnit L502–554
+ test_branch_spec_reads_branch_log method method test_branch_spec_reads_branch_log L540–546
+ test_raises_file_not_found_when_no_log method method test_raises_file_not_found_when_no_log L521–527
+ test_raises_index_error_out_of_range method method test_raises_index_error_out_of_range L529–538
+ test_refs_heads_prefix_stripped method method test_refs_heads_prefix_stripped L548–554
+ test_returns_new_id_for_valid_index method method test_returns_new_id_for_valid_index L513–519
+ test_returns_none_for_non_at_spec method method test_returns_none_for_non_at_spec L505–511
+ TestRevParseAtN class class TestRevParseAtN L162–198
+ test_at_one_resolves_to_second_newest method method test_at_one_resolves_to_second_newest L175–182
+ test_at_zero_resolves_to_newest_commit method method test_at_zero_resolves_to_newest_commit L165–173
+ test_at_zero_text_mode_prints_commit_id method method test_at_zero_text_mode_prints_commit_id L184–190
+ test_ref_field_echoes_at_spec method method test_ref_field_echoes_at_spec L192–198
+ _branch_log function function _branch_log L43–44
+ _env function function _env L35–36
+ _head_log function function _head_log L39–40
+ _make_base_repo function function _make_base_repo L105–118
+ _make_commit function function _make_commit L61–97
+ _set_branch function function _set_branch L100–102
+ _setup_repo_with_history function function _setup_repo_with_history L121–155
+ _write_reflog_entry function function _write_reflog_entry L47–58
+ cli variable variable cli L29–29
+ CliRunner import import CliRunner L26–26
+ NULL_COMMIT_ID import import NULL_COMMIT_ID L25–25
+ annotations import import annotations L15–15
+ datetime import import datetime L17–17
+ json import import json L18–18
+ logs_dir import import logs_dir L24–24
+ muse_dir import import muse_dir L24–24
+ pathlib import import pathlib L19–19
+ pytest import import pytest L22–22
+ time import import time L20–20
+ runner variable variable runner L28–28
+ _UPLOAD_URL variable variable _UPLOAD_URL L30–30
+ _mock_urllib_do function function _mock_urllib_do L33–37
+ HttpTransport import import HttpTransport L24–24
+ TransportError import import TransportError L24–24
+ _mpack_put_timeout import import _mpack_put_timeout L24–24
+ annotations import import annotations L17–17
+ os import import os L19–19
+ patch import import patch L20–20
+ pytest import import pytest L22–22
+ test_pt1_small_payload_gets_floor_timeout function function test_pt1_small_payload_gets_floor_timeout L42–46
+ test_pt2_large_payload_exceeds_floor function function test_pt2_large_payload_exceeds_floor L51–55
+ test_pt3_timeout_never_exceeds_max function function test_pt3_timeout_never_exceeds_max L60–63
+ test_pt4_computed_timeout_passed_to_urllib_do function function test_pt4_computed_timeout_passed_to_urllib_do L68–77
+ test_pt5_env_var_overrides_computed_timeout function function test_pt5_env_var_overrides_computed_timeout L82–90
+ test_pt6_env_var_absent_uses_computed_default function function test_pt6_env_var_absent_uses_computed_default L95–105
+ test_pt7_global_timeout_does_not_affect_put_timeout function function test_pt7_global_timeout_does_not_affect_put_timeout L110–124
~ README.md .md 1 symbol modified
~ Muse
~ muse/cli/commands/commit.py .py 1 symbol added, 1 symbol modified
+ _write_symlogs import import _write_symlogs L50–50
~ run
~ muse/cli/commands/gc.py .py 1 symbol added, 5 symbols modified
+ _DEFAULT_REFLOG_EXPIRE_DAYS import import _DEFAULT_REFLOG_EXPIRE_DAYS L37–37
~ run_gc
~ run
~ muse/cli/commands/pull.py .py 1 symbol added, 1 symbol modified
+ append_reflog import import append_reflog L58–58
~ run
~ muse/cli/commands/reflog.py .py 12 symbols added, 4 symbols modified
+ _AT_BRACE_PREFIX variable variable _AT_BRACE_PREFIX L437–437
+ _AT_BRACE_SUFFIX variable variable _AT_BRACE_SUFFIX L438–438
+ _DEFAULT_EXPIRE_DAYS variable variable _DEFAULT_EXPIRE_DAYS L314–314
+ _DeleteJson class class _DeleteJson L136–141
+ _ExistsJson class class _ExistsJson L143–148
+ _ExpireJson class class _ExpireJson L128–134
+ _parse_at_index function function _parse_at_index L441–450
+ delete_reflog_entry import import delete_reflog_entry L83–83
+ expire_reflog import import expire_reflog L83–83
+ run_delete function function run_delete L453–561
+ run_exists function function run_exists L568–616
+ run_expire function function run_expire L317–430
~ muse/cli/commands/rev_parse.py .py 1 symbol modified
~ run
~ muse/cli/commands/shelf.py .py 5 symbols added, 13 symbols modified
+ _CreatedBy class class _CreatedBy L124–128
+ _resolve_created_by function function _resolve_created_by L478–490
+ append_reflog import import append_reflog L99–99
+ get_config_value import import get_config_value L87–87
+ get_head_commit_id import import get_head_commit_id L100–100
~ muse/core/commits.py .py 1 symbol modified
~ muse/core/gc.py .py 4 symbols added, 3 symbols modified
+ _DEFAULT_REFLOG_EXPIRE_DAYS variable variable _DEFAULT_REFLOG_EXPIRE_DAYS L457–457
+ _expire_all_reflogs function function _expire_all_reflogs L647–672
+ expire_reflog import import expire_reflog L83–83
+ list_reflog_refs import import list_reflog_refs L83–83
~ run_gc
~ muse/core/paths.py .py 1 symbol added
+ symlogs_dir function function symlogs_dir L76–78
~ muse/core/reflog.py .py 7 symbols added
+ _AT_N_RE variable variable _AT_N_RE L439–441
+ delete_reflog_entry function function delete_reflog_entry L356–431
+ expire_reflog function function expire_reflog L264–350
+ os import import os L53–53
+ re import import re L55–55
+ tempfile import import tempfile L56–56
+ resolve_reflog_ref function function resolve_reflog_ref L444–497
~ muse/core/transport.py .py 4 symbols added, 2 symbols modified
+ _PUT_MIN_BYTES_PER_SEC variable variable _PUT_MIN_BYTES_PER_SEC L102–102
+ _PUT_TIMEOUT_FLOOR variable variable _PUT_TIMEOUT_FLOOR L100–100
+ _PUT_TIMEOUT_MAX variable variable _PUT_TIMEOUT_MAX L101–101
+ _mpack_put_timeout function function _mpack_put_timeout L105–119
~ tests/test_cmd_shelf.py .py 16 symbols added, 6 symbols modified
+ TestCreatedByResolutionIntegration class class TestCreatedByResolutionIntegration L1891–1996
+ test_CB_06_save_with_configured_handle method method test_CB_06_save_with_configured_handle L1894–1913
+ test_CB_07_explicit_by_wins_over_config method method test_CB_07_explicit_by_wins_over_config L1915–1937
+ test_CB_08_no_handle_config_falls_back_to_human method method test_CB_08_no_handle_config_falls_back_to_human L1939–1958
+ test_CB_09_programmatic_api_resolves_created_by method method test_CB_09_programmatic_api_resolves_created_by L1960–1979
+ test_CB_10_autoshelf_muse_resolves_as_agent method method test_CB_10_autoshelf_muse_resolves_as_agent L1981–1996
+ TestResolveCreatedByHelper class class TestResolveCreatedByHelper L1846–1888
+ test_CB_01_explicit_non_human_returns_agent method method test_CB_01_explicit_non_human_returns_agent L1849–1854
+ test_CB_02_explicit_by_returned_as_is method method test_CB_02_explicit_by_returned_as_is L1856–1862
+ test_CB_03_human_with_config_returns_handle method method test_CB_03_human_with_config_returns_handle L1864–1875
+ test_CB_04_human_without_config_falls_back method method test_CB_04_human_without_config_falls_back L1877–1888
+ TestShelfReadFilesInvariant class class TestShelfReadFilesInvariant L1743–1822
+ test_SF_04_mixed_changed_unchanged_new method method test_SF_04_mixed_changed_unchanged_new L1746–1781
+ test_SF_05_files_empty_when_head_catches_up method method test_SF_05_files_empty_when_head_catches_up L1783–1822
+ _identity_toml function function _identity_toml L1830–1838
+ _write_hub_config function function _write_hub_config L1841–1843

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