Fission-AI/OpenSpec · error · RetirementBackupsRetainedError
${errors.join(' ')} The change remains archived and each lis
Error message
${errors.join(' ')} The change remains archived and each listed backup was retained for recovery. What it means
Error "${errors.join(' ')} The change remains archived and each listed backup was retained for recovery." thrown in Fission-AI/OpenSpec.
Source
Thrown at src/core/archive.ts:1047
const displacedPath = snapshot.displacedPath;
try {
if (
snapshot.displacedFingerprint === undefined ||
(await fingerprintMovablePath(displacedPath)) !== snapshot.displacedFingerprint
) {
throw new Error('the displaced spec changed after retirement verification');
}
await finalizeRetiredSpec(snapshot.target, displacedPath, mainSpecsDir);
snapshot.displacedPath = undefined;
} catch (error) {
errors.push(
`Could not remove the committed retirement backup at ${displacedPath} ` +
`(${error instanceof Error ? error.message : String(error)}).`
);
}
}
if (errors.length > 0) {
throw new RetirementBackupsRetainedError(
`${errors.join(' ')} The change remains archived and each listed backup was retained for recovery.`
);
}
}
export class ArchiveCommand {
async execute(changeName?: string, options: ArchiveOptions = {}): Promise<void> {
const json = !!options.json;
let root: ResolvedOpenSpecRoot;
try {
root = await resolveOpenSpecRoot({
...(options.store !== undefined ? { store: options.store } : {}),
...(options.storePath !== undefined ? { storePath: options.storePath } : {}),
});
} catch (error) {
if (json && isRootSelectionError(error)) {
this.printJsonFailure(undefined, toArchiveDiagnostic(error));View on GitHub (pinned to 6926ccb18a)
When it happens
Trigger: Thrown at src/core/archive.ts:1047 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/d30b8863930c1565.
Report an issue: GitHub.