feat(symlog): Phase 3 — muse symlog read CLI (SL_23–SL_35)
- New command: muse/cli/commands/symlog.py - Single-symbol query with --json, --limit, --follow, --diff - --file mode: all symbols in a file - --all mode: list all symbols that have a symlog - exists subcommand: exit 0/1 with JSON schema - --operation, --author, --since, --until filters - Human text format: @{N} <new_sha12> (<old_sha12>) <when> <author> <op> - --follow traverses rename chains via born_from pointers with from_symbol annotation - --diff reconstructs symbol body from commit snapshots via lineno/end_lineno - Symbol address validation (SL_34): :: required, no empty name, no .. traversal
- app.py: register symlog command alphabetically
- 47 tests (SL_23–SL_35) all passing in tests/test_cmd_symlog_read.py
Note on argparse: nargs='?' + subparsers conflicts in Python 3.14 — fixed by using nargs='*' and dispatching 'exists' subcommand manually in run().
Semantic Changes
242 symbols
0 comments
muse hub commit comment sha256:86d2141c349d67088a1eab9a98819d1abdc94cec3fdd0df47a3f7d26ce7dc6cf --body "your comment"
No comments yet. Be the first to start the discussion.