feat(symlog): Phase 1 — core storage layer (SL_01–SL_12)
Add muse/core/symlog.py with the full Phase 1 storage primitives: - SymlogEntry dataclass (frozen, born_from derived from operation) - NULL_CONTENT_ID constant and is_null_content_id() helper - symlog_path() with percent-encoding and path-traversal rejection - append_symlog() with author/operation sanitization - read_symlog() with follow=True rename-chain traversal - list_symlog_symbols() and list_symlog_symbols_for_file() - expire_symlog() and delete_symlog_entry() — both atomic - _MAX_SYMLOG_BYTES file-size cap with warning
Add tests/test_core_symlog.py: 58 tests covering SL_01–SL_12, all green. Add paths.symlogs_dir() path helper. Add docs/issues/symlog.md (issue #51 body) and docs/issues/reflog-long-ids.md.
sha256:6986d42446334d306eb3136231a58606d896a0dcc796d29ac2ded0f9d1149ac0
sha
+166
symbols
sha256:6437019c392057e67058a0d2f0e71823999b9f399f9786b433cee3b2cb64e30e
snapshot
+166
symbols added
0
dead code introduced
Semantic Changes
166 symbols
+
muse reflog — use long IDs in human text output
section muse reflog — use long IDs in human text output L1–70
+
Phase 5 — @{N} ref resolution for symbols
section Phase 5 — @{N} ref resolution for symbols L369–453
+
test_different_symbols_same_file_get_separate_files
method
method test_different_symbols_same_file_get_separate_files L277–289
+
test_delete_index_zero_removes_newest
method
method test_delete_index_zero_removes_newest L563–572
+
test_out_of_bounds_raises_index_error
method
method test_out_of_bounds_raises_index_error L584–588
+
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
+
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_returns_all_symbol_addresses_sorted
method
method test_returns_all_symbol_addresses_sorted L429–437
+
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_colon_in_symbol_name_is_percent_encoded
method
method test_colon_in_symbol_name_is_percent_encoded L154–158
+
test_special_chars_in_symbol_name_are_percent_encoded
method
method test_special_chars_in_symbol_name_are_percent_encoded L147–152
+
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
← Older
Oldest on task/symlog-phase1
All commits
Newer
feat(symlog): Phase 2 — commit integration and symbol diff engine
sha256:930e8215a3d1d19f85e786bcb4d2bba8166bcac9a765b2adae1ae62d76063c7d
0 comments
To add a comment, use the Muse CLI:
muse hub commit comment sha256:6986d42446334d306eb3136231a58606d896a0dcc796d29ac2ded0f9d1149ac0 --body "your comment"
No comments yet. Be the first to start the discussion.