feat(muse#83): Phase 2 -- migrate_commit_ids_cascade with mandatory resign
Cascades a Phase 1 snapshot-ID correction through the commit DAG: any commit whose own snapshot_id changed, or whose parent's commit_id changed (transitively, in topological order), gets a new commit_id and is re-signed with the current signing identity. Everything outside that blast radius is left byte-identical.
This closes the one real gap found in reusing muse.core.migrate's existing migrate_commit_ids as-is: that function recomputes commit_id but never touches signature/signer_public_key, which would leave every rewritten commit's authenticity silently broken (signature covering a superseded commit_id).
6 tests, all green, against the A -> B(bad snapshot) -> C -> D fixture chain from the plan doc: cascade correctly rewrites B/C/D and spares A (CC_01), new parent pointers actually thread through rather than being independently rewritten in isolation (CC_02), every rewritten commit's new signature verifies against its new commit_id (CC_03), an unrelated sibling commit is provably byte-identical (CC_04), dry-run writes nothing (CC_05), running twice is deterministic given the non-destructive invariant (CC_06).
Semantic Changes
30 symbols
0 comments
muse hub commit comment sha256:7e75b3b116bea8aed979cdcde23ebeb677b11aff24d2986e654ec0e51ec914af --body "your comment"
No comments yet. Be the first to start the discussion.