paperclipai/paperclip · error · Error

Refusing to overwrite invalid config at

Error message

Refusing to overwrite invalid config at ${filePath}: ${error instanceof Error ? error.message : String(error)}

What it means

writeConfig tried to merge over the existing config file and it failed schema or JSON validation; without a backup path it refuses to clobber a file it cannot understand.

Solutions

  1. Fix or remove the invalid config at ${filePath} so it can be backed up and rewritten safely.
  2. Restore a valid config from the existing backup, then retry.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at cli/src/config/store.ts:206 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@120ae5428f (2026-08-18). Data as JSON: /api/errors/2b4baec0828fc9a0. Report an issue: GitHub.

Appendix: source

Thrown at cli/src/config/store.ts:206

  configPath?: string,
  options: { invalidBackupPath?: string } = {},
): boolean {
  const filePath = resolveConfigPath(configPath);
  const dir = path.dirname(filePath);
  fs.mkdirSync(dir, { recursive: true });

  let nextConfig = paperclipConfigSchema.parse(config);
  if (fs.existsSync(filePath)) {
    try {
      const source = paperclipConfigSchema.parse(migrateLegacyConfig(parseJson(filePath)));
      nextConfig = paperclipConfigSchema.parse(mergePaperclipConfig(source, nextConfig));
      if (isDeepStrictEqual(effectiveConfig(source), effectiveConfig(nextConfig))) {
        return false;
      }
    } catch (error) {
      const invalidBackupPath = options.invalidBackupPath;
      if (!invalidBackupPath) {
        throw new Error(
          `Refusing to overwrite invalid config at ${filePath}: ${error instanceof Error ? error.message : String(error)}`,
        );
      }
      if (
        !fs.existsSync(invalidBackupPath) ||
        !fs.readFileSync(filePath).equals(fs.readFileSync(invalidBackupPath))
      ) {
        throw new Error(
          `Refusing to overwrite ${filePath} because it changed after the invalid backup was created`,
        );
      }
    }
  }

  // Backup existing config before overwriting
  if (fs.existsSync(filePath)) {
    const backupPath = filePath + ".backup";
    durableCopyFile(filePath, backupPath);

View on GitHub (pinned to 120ae5428f)