Fission-AI/OpenSpec · error · Error
The active delta for
Error message
The active delta for '${proposed.update.id}' changed during the fallback copy. What it means
In the fallback copy path (when the archive move retained the destination), verifies the still-active (pre-move) copy of each delta against its prepared content fingerprint. Fires when the active delta changed during the copy, meaning the change directory is no longer internally consistent with what was archived; flags a failed or unsafe fallback.
Solutions
- Stop concurrent writes to the change directory and re-run
- Remove any leftover staged .openspec-move-* directory before retrying
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at src/core/archive.ts:1963 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/fc3877c7845337ad.
Report an issue: GitHub.
Appendix: source
Thrown at src/core/archive.ts:1963
);
if (
(await fingerprintPortableContent(archivedSource)) !==
proposed.sourceContentFingerprint
) {
throw new Error(
`The archived delta for '${proposed.update.id}' changed during the final move.`
);
}
if (stagedSource) {
const stagedDelta = path.join(
stagedSource,
path.relative(changeDir, proposed.update.source)
);
if (
(await fingerprintPortableContent(stagedDelta)) !==
proposed.sourceContentFingerprint
) {
throw new Error(
`The active delta for '${proposed.update.id}' changed during the fallback copy.`
);
}
}
}
};
await moveDirectory(changeDir, archivePath, {
verifyCopiedDestination: verifyArchivedDeltas,
});
changeArchived = true;
await verifyArchivedDeltas();
await finalizeRetirementBackups(specSnapshots, mainSpecsDir);
} catch (error) {
if (error instanceof MoveDestinationRetainedError) {
changeArchived = true;
try {
await finalizeRetirementBackups(specSnapshots, mainSpecsDir);
} catch (cleanupError) {View on GitHub (pinned to 6926ccb18a)