Fission-AI/OpenSpec · error · ArchiveBlockedError

archive_spec_update_failed

archive_spec_update_failed

Error message

message

What it means

Placeholder/generic Error raised with a literal 'message' string — an unresolved message field, not a real diagnostic. In the same code path, sibling guards throw 'Main spec <id> changed while archive was awaiting confirmation' when the rebuilt spec's counts or outcome no longer match the prepared proposal, meaning the main spec changed during confirmation.

Solutions

  1. Follow the underlying consistency message (spec/delta/metadata changed) and rerun
  2. Ensure the change and specs are stable, then re-run the archive
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at src/core/archive.ts:1577 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/c5cb6648868968d3. Report an issue: GitHub.

Appendix: source

Thrown at src/core/archive.ts:1577

                  JSON.stringify(rebuilt.counts) !== JSON.stringify(proposed.counts) ||
                  outcome !== proposed.outcome
                ) {
                  throw new Error(
                    `Main spec '${proposed.update.id}' changed while archive was awaiting confirmation. ` +
                      'No files were changed; review the new content and rerun.'
                  );
                }
              }
            } catch (error) {
              prepareError = error;
            }
          }

          if (prepareError !== undefined) {
            const message =
              prepareError instanceof Error ? prepareError.message : String(prepareError);
            if (json) {
              throw new ArchiveBlockedError(
                'archive_spec_update_failed',
                message,
                'Fix the change delta specs and rerun. No files were changed.'
              );
            }
            console.log(message);
            console.log('Aborted. No files were changed.');
            process.exitCode = 1;
            return null;
          }

          // Validate every rebuilt spec before writing any of them, so a
          // late validation failure really does leave all targets unchanged.
          if (!skipValidation) {
            for (const p of prepared) {
              // A retirement was already put to the validator, and failed on
              // nothing but "no requirements" - there is no spec left to write,
              // so re-reporting that one error would just abort the fix (#1302).

View on GitHub (pinned to 6926ccb18a)