feat: harden, test, and document all quality-dial changes
Security - LocalFileTransport._repo_root() calls .resolve() to canonicalise symlinks before the .muse/ check — prevents symlink-based path escape - push_pack() validates branch names with validate_branch_name() then contain_path() as defence-in-depth, blocking pre-placed symlink attacks on .muse/refs/heads/ - Fast-forward check upgraded to full BFS (_is_ancestor) through bundle + remote commit graph, correctly handling build_pack(have=...) bundles
Performance - LocalFileTransport uses lazy imports per method — zero circular-import risk - _is_ancestor BFS stops at first hit — O(divergence depth), not O(history)
Tests (72 new, 3167 total passing) - test_local_file_transport.py: unit, integration, security, stress - test_lineage_algorithm.py: created/copied/renamed/moved/modified/deleted, incremental registry correctness across 10+ intermediate commits - test_store_branch_heads.py: empty dir, missing dir, whitespace, subdirs
Docs - transport.py module docstring rewritten — covers both transports, make_transport factory, auth model, security model - docs/reference/security.md — new "Local File Transport Hardening" section with per-guard threat table - Bitcoin plugin removed, predict-conflicts alias added, lineage O(total ops) rewrite retained from previous session
No comments yet. Be the first to start the discussion.