Fission-AI/OpenSpec · error · Error
The delta for ' ' changed while archive was awaiting…
Error message
The delta for '${proposed.update.id}' changed while archive was awaiting confirmation. What it means
Thrown during post-confirmation re-validation when a spec delta that was prepared before the prompt no longer exists among the current updates (its id vanished), or the current update for that id changed such that the delta differs. Indicates the specific delta file was edited or deleted while the confirmation was open; archive refuses to apply a stale delta.
Solutions
- Review the new delta content and re-run the archive
- Avoid editing change deltas while an archive prompt is open
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at src/core/archive.ts:1536 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/67778aae15fe6300.
Report an issue: GitHub.
Appendix: source
Thrown at src/core/archive.ts:1536
try {
const currentRetirementMarker = readRetireCapabilitiesMarker(changeDir);
if (
currentRetirementMarker.declared !== retirementMarker.declared ||
currentRetirementMarker.invalidReason !== retirementMarker.invalidReason
) {
throw new Error(
`The ${METADATA_FILENAME} retirement authorization changed while archive was awaiting confirmation.`
);
}
const currentUpdates = await findSpecUpdates(changeDir, mainSpecsDir);
const currentById = new Map(currentUpdates.map((update) => [update.id, update]));
if (currentUpdates.length !== prepared.length) {
throw new Error('The change specs changed while archive was awaiting confirmation.');
}
for (const proposed of prepared) {
const current = currentById.get(proposed.update.id);
if (!current) {
throw new Error(
`The delta for '${proposed.update.id}' changed while archive was awaiting confirmation.`
);
}
if (
(await fingerprintPath(current.source)) !== proposed.sourceFingerprint ||
(await fingerprintPath(current.target)) !== proposed.targetFingerprint
) {
throw new Error(
`Spec inputs for '${proposed.update.id}' changed while archive was awaiting confirmation. ` +
'No files were changed; review the new content and rerun.'
);
}
const rebuilt = await buildUpdatedSpec(current, changeName!, { silent: true });
const outcome = await decideSpecOutcome(
current,
rebuilt,
skipValidation,
retirementDeclaredView on GitHub (pinned to 6926ccb18a)