Fission-AI/OpenSpec · error · Error

Spec updates for '${existing}' and '${mutation.update.id}' r

Error message

Spec updates for '${existing}' and '${mutation.update.id}' resolve to the same target ${identity}. Replace the capability alias or combine the deltas before archiving.

What it means

Error "Spec updates for '${existing}' and '${mutation.update.id}' resolve to the same target ${identity}. Replace the capability alias or combine the deltas before archiving." thrown in Fission-AI/OpenSpec.

Source

Thrown at src/core/archive.ts:839

    const stat = await fs.stat(mutation.update.target, { bigint: true });
    return `${stat.dev}:${stat.ino}`;
  } catch (error) {
    if ((error as NodeJS.ErrnoException).code === 'ENOENT') {
      const parent = path.dirname(mutation.update.target);
      const realParent = await fs.realpath(parent).catch(() => path.resolve(parent));
      return `missing:${path.join(realParent, path.basename(mutation.update.target))}`;
    }
    throw error;
  }
}

async function assertDistinctMutationTargets(mutations: SpecMutation[]): Promise<void> {
  const owners = new Map<string, string>();
  for (const mutation of mutations) {
    const identity = await mutationTargetIdentity(mutation);
    const existing = owners.get(identity);
    if (existing !== undefined) {
      throw new Error(
        `Spec updates for '${existing}' and '${mutation.update.id}' resolve to the same target ` +
          `${identity}. Replace the capability alias or combine the deltas before archiving.`
      );
    }
    owners.set(identity, mutation.update.id);
  }
}

async function captureSpecSnapshots(mutations: SpecMutation[]): Promise<SpecSnapshot[]> {
  return Promise.all(
    mutations.map(async ({ update, outcome, rebuilt }) => {
      try {
        const stat = await fs.lstat(update.target);
        if (stat.isSymbolicLink()) {
          let content: Buffer | undefined;
          let contentExisted = false;
          if (outcome === 'write') {
            try {

View on GitHub (pinned to 6926ccb18a)

When it happens

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