gabriel / muse public
feat BREAKING task/unified-object-store #8 / 9
AI Agent gabriel · 21 days ago · May 20, 2026 · Diff

feat: Git-idiomatic unified object store (issue #58 / #11)

Replace 2-byte binary header with Git-idiomatic type prefix across all object types. On-disk format is now '<type> <size>\0<payload>' for blobs, snapshots, and commits. The full string is hashed to produce the object ID so the type is baked into identity — identical payloads of different types can never collide.

- ids.py: hash_blob/hash_snapshot/hash_commit all use type-prefixed formula - object_store.py: write_muse_object/read_muse_object for unified store; write_object stores muse-format bytes; read_object strips header on read - store.py: write_commit/write_snapshot dual-write to unified object store; read_commit/read_snapshot fall back to object store when msgpack absent - snapshot.py: compute_commit_id/compute_snapshot_id delegate to ids.py - migrate.py: three-pass Phase 7 migration (blobs → snapshots → commits) with transitive ID chain resolution; non-destructive throughout - migrate.py: migrate_blob_ids, migrate_snapshot_ids, migrate_commit_ids wired into migrate() with combined transitive id_map for refs/reflogs - migrate CLI: expose blobs_rewritten, snapshots_rewritten, commits_unified - tests: test_unified_object_store.py (13 tests), test_migrate_object_store.py (10 tests)

sha256:e861d623b002e0f64881f55ca0b6dcf5e2be70503b100bf518c0437138267a9b sha
sha256:bc30b6594ae356a594b7a23cfed989aa2b91685be7b824d394e22fac98430881 snapshot

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