fix(merger): add active-merger advisory + observe destructive ops + log rescue stashes
- writeActiveMergerStatus: writes .git/.fusion-merger-active.json (taskId, pid, hostname, startedAt) at merge entry, deleted in finally. Not a lock — purely informational so dashboards / status lines / pre-Edit hooks can warn devs that rootDir is volatile during the run. readActiveMergerStatus(rootDir) is exported for consumers. - runObservedDestructiveSyncOp: snapshot-before/after wrapper around destructive rootDir ops that are *supposed* to preserve unrelated working-tree edits. resetMergeWithWarn now uses it — any future silent wipe of dirty paths surfaces as an actionable warning instead of going unnoticed. Not applied to the autostash's own reset --hard / clean -fd; those are intentionally destructive and already protected by the race-rescue stash. - Race-rescue stashes from stashUnrelatedRootDirChanges are now attached to the AutostashHandle and surfaced via store.logEntry so the recovery command lands on the task feed instead of only mergerLog.warn. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -7,3 +7,5 @@ Fix merger subject derivation and add a race-rescue layer to the autostash.
|
||||
The deterministic fallback now prefers the lowest-numbered `complete Step N` headline (or the oldest commit) over the most-recent commit, and the AI subject/body prompts weight by commit theme instead of file size — so a small token-cleanup fixup that touches a large file no longer hijacks the squash-merge subject.
|
||||
|
||||
The pre-merge autostash now re-snapshots the working tree after the primary stash is persisted but before `git reset --hard` runs, capturing any dirty paths that landed between the initial snapshot and the destructive wipe (concurrent dev edits during a long merger run, parallel merger runs interleaving, or late test/build artifacts) into a separate `race-rescue` stash so they're recoverable from `git stash list`.
|
||||
|
||||
Adds an advisory `.git/.fusion-merger-active.json` written for the duration of each merger run (taskId, pid, hostname, startedAt) so dashboards / status lines / pre-Edit hooks can surface that `rootDir` is volatile. Not a lock — dev edits are never blocked. Race-rescue stashes are now also surfaced on the task feed via `store.logEntry` with the recovery command, instead of only appearing as a `mergerLog.warn`. `resetMergeWithWarn` now wraps each `git reset --merge` in a snapshot-before/after observer so any silent wipe of unrelated dirty paths emits an actionable warning instead of going unnoticed. Exports `readActiveMergerStatus(rootDir)` for consumers.
|
||||
|
||||
Reference in New Issue
Block a user