Fission-AI/OpenSpec · error · Error
Spec inputs for ' ' changed while archive was awaiting…
Error message
Spec inputs for '${proposed.update.id}' changed while archive was awaiting confirmation. No files were changed; review the new content and rerun. What it means
Thrown during post-confirmation re-validation when, for a prepared spec update, any pre-build fingerprint (source, target, or source content) differs from what is now on disk. Fired because the main spec or delta file changed while the user was answering the confirmation prompt; nothing has been written yet, so the user can safely review and rerun.
Solutions
- Review the new spec/delta content, then re-run the archive
- Stop concurrent editors before re-running
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at src/core/archive.ts:1544 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/aad8fd6f420c5ea3.
Report an issue: GitHub.
Appendix: source
Thrown at src/core/archive.ts:1544
);
}
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,
retirementDeclared
);
if (
current.exists !== proposed.update.exists ||
rebuilt.rebuilt !== proposed.rebuilt ||
JSON.stringify(rebuilt.counts) !== JSON.stringify(proposed.counts) ||
outcome !== proposed.outcome
) {
throw new Error(View on GitHub (pinned to 6926ccb18a)