Fission-AI/OpenSpec · error · Error
Rollback also failed: ) => message).join(' ')}
Error message
${original} Rollback also failed: ${rollbackErrors.map(({ message }) => message).join(' ')} What it means
Aggregated failure message for archive rollback: one or more rollback steps (restoring snapshots, moving the archived directory back to the change dir) failed, and the collected rollback error messages are joined onto the original failure. Signals the workspace may be left in a partially archived state requiring manual recovery.
Solutions
- Inspect each rollback error to see which restores failed
- Manually restore from the retained backups/archived copy as guided by the messages
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at src/core/archive.ts:2017 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of Fission-AI/OpenSpec@6926ccb18a (2026-08-25).
Data as JSON: /api/errors/0f8c7a600a076272.
Report an issue: GitHub.
Appendix: source
Thrown at src/core/archive.ts:2017
? rollbackError
: new Error(String(rollbackError))
);
}
if (changeArchived) {
try {
await moveDirectory(archivePath, changeDir);
changeArchived = false;
} catch (rollbackError) {
rollbackErrors.push(
rollbackError instanceof Error
? rollbackError
: new Error(String(rollbackError))
);
}
}
if (rollbackErrors.length > 0) {
const original = error instanceof Error ? error.message : String(error);
throw new Error(
`${original} Rollback also failed: ${rollbackErrors.map(({ message }) => message).join(' ')}`
);
}
throw error;
}
}
}
}
// The destination was checked before the merge, so anything claiming it now
// appeared while we were working. Report that as the collision it is: a raw
// ENOTEMPTY from rename would otherwise degrade to a bare `archive_error`.
if (!changeArchived) {
await assertArchiveDestinationAvailable(archivePath, archiveName);
archiveClaim = await claimArchiveDestination(archivePath, archiveName);
await assertArchiveDestinationAvailable(archivePath, archiveName);
// Create archive directory if neededView on GitHub (pinned to 6926ccb18a)